Documentación completa de endpoints y ejemplos de uso
La API REST de ayuntamientosmart.com proporciona acceso programático a las principales funcionalidades del sistema. Está diseñada siguiendo los principios REST (Representational State Transfer) y utiliza los métodos HTTP estándar:
Todas las peticiones y respuestas utilizan formato JSON. Las fechas se expresan en formato ISO 8601 (YYYY-MM-DDTHH:mm:ss). Los errores devuelven códigos HTTP estándar (400, 401, 403, 404, 500) con un objeto JSON descriptivo.
La API utiliza autenticación basada en JWT (JSON Web Tokens). El flujo de autenticación es:
Endpoint: POST /api/v1/auth/login
{
"usuario": "agente123",
"password": "mi_password_segura"
}Respuesta exitosa (200 OK):
{
"success": true,
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_at": "2026-01-11T15:30:00",
"usuario": {
"id": "usr-123",
"nombre": "Juan Pérez",
"rol": "agente"
}
}
}Una vez obtenido el token, debe incluirse en todas las peticiones en la cabecera Authorization:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...Los tokens expiran a las 24 horas. Puede renovarse sin necesidad de reautenticarse:
Endpoint: POST /api/v1/auth/refresh
Incluya el token actual en la cabecera Authorization. Devolverá un nuevo token con 24 horas adicionales de validez.
Todas las respuestas de la API siguen un formato estándar:
{
"success": true,
"data": { /* Datos solicitados */ },
"meta": { /* Metadatos opcionales: paginación, totales, etc. */ }
}{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Descripción legible del error",
"details": { /* Detalles específicos del error */ }
}
}GET /api/v1/denuncias
Parámetros query opcionales:
Ejemplo:
GET /api/v1/denuncias?tipo=hechos&desde=2026-01-01&limit=50Respuesta:
{
"success": true,
"data": [
{
"id": "DEN-2026-00001",
"tipo": "hechos",
"fecha": "2026-01-10T10:30:00",
"denunciante": {
"nombre": "María García",
"dni": "12345678A"
},
"hechos": "Hurto de móvil en vía pública",
"estado": "registrada"
},
/* ... más denuncias ... */
],
"meta": {
"total": 250,
"page": 1,
"limit": 50,
"pages": 5
}
}GET /api/v1/denuncias/{id}
Ejemplo:
GET /api/v1/denuncias/DEN-2026-00001Devuelve todos los detalles de la denuncia incluyendo denunciante, denunciados, testigos, adjuntos, historial de cambios.
POST /api/v1/denuncias
Body JSON:
{
"tipo": "perdida",
"denunciante": {
"dni": "12345678A",
"nombre": "Juan López",
"telefono": "666123456",
"email": "juan@example.com",
"direccion": "Calle Mayor 1, 28001 Madrid"
},
"hechos": {
"fecha": "2026-01-10",
"hora": "14:30",
"lugar": "Plaza España, Madrid",
"descripcion": "Extravié mi cartera con DNI y tarjetas bancarias"
},
"objetos_perdidos": [
{
"tipo": "documento",
"descripcion": "DNI 12345678A"
},
{
"tipo": "otro",
"descripcion": "Cartera de piel negra con tarjetas Visa y Mastercard"
}
]
}Respuesta (201 Created):
{
"success": true,
"data": {
"id": "DEN-2026-00125",
"fecha_creacion": "2026-01-10T15:45:00",
"estado": "registrada"
}
}PATCH /api/v1/denuncias/{id}
Solo pueden actualizarse denuncias en estado 'borrador'. Body JSON con los campos a modificar.
DELETE /api/v1/denuncias/{id}
Marca la denuncia como eliminada (soft delete). Requiere permiso especial.
GET /api/v1/sanciones
Parámetros query similares a denuncias más:
GET /api/v1/sanciones/{id}
POST /api/v1/sanciones
Body JSON:
{
"tipo": "in_situ",
"vehiculo": {
"matricula": "1234ABC"
},
"conductor": {
"dni": "98765432B",
"permiso": "ES987654321"
},
"infraccion": {
"codigo": "3.1",
"fecha": "2026-01-10",
"hora": "16:30",
"lugar": "Calle Alcalá 100, Madrid",
"descripcion": "Circular por sentido contrario"
},
"agente": "TIP123"
}El sistema consulta automáticamente DGT para validar vehículo y conductor, calcula importe y puntos según la infracción, y genera el boletín.
POST /api/v1/sanciones/{id}/pagos
Body JSON:
{
"fecha": "2026-01-15",
"importe": 100.00,
"forma_pago": "tarjeta",
"referencia": "OP123456789"
}GET /api/v1/vehiculos/dgt/{matricula}
Consulta en tiempo real los datos del vehículo en la DGT. Requiere integración TESTRA activa.
Respuesta:
{
"success": true,
"data": {
"matricula": "1234ABC",
"marca": "SEAT",
"modelo": "IBIZA",
"bastidor": "VF1XXXXXXXXXXXX",
"fecha_matriculacion": "2020-05-15",
"titular": {
"nombre": "JOSE MARTINEZ GARCIA",
"dni": "11223344X",
"direccion": "CALLE EJEMPLO 1, 28001 MADRID"
},
"itv": {
"fecha_ultima": "2025-05-10",
"resultado": "FAVORABLE",
"fecha_caducidad": "2027-05-10"
},
"seguro": {
"compania": "MAPFRE",
"poliza": "ES123456789",
"vigente": true
}
}
}GET /api/v1/vehiculos/dgt/conductor/{permiso}
Consulta datos del permiso de conducir en DGT.