Referencia
Referencia de la API
Todos los endpoints, parámetros, cuerpos, respuestas y esquemas de la API v1, generados a partir de su especificación OpenAPI.
Esta referencia se genera automáticamente a partir de la especificación OpenAPI 3.1 que publica la propia API, así que siempre está al día con lo desplegado. Los ejemplos de curl apuntan al entorno de pruebas; en producción cambia la URL base y la clave.
Todas las respuestas correctas van envueltas en el mismo sobre: { "status": 200, "data": { … }, "message": "…" }, y los listados paginados llevan data.items y data.pagination. Los errores siguen el formato RFC 9457.
- Versión
1.0.0· OpenAPI 3.1.0- URL base
https://api.saludenruta.es/api/integrations/v1— Producciónhttps://sandbox-api.saludenruta.es/api/integrations/v1— Pruebas (sandbox)
- Autenticación
X-Api-Key(cabecera) — Clave del proveedor. Producción: srd_live_…; pruebas (sandbox): srd_test_…
Provider Integration API (v1)
Avisos, catálogo, informes y sandbox
GET/catalog
Tipos de servicio permitidos y aseguradoras finales admitidas
Ámbito: visits:write.
Respuestas
200Correcta
objectstatusnumberopcionalVer campos
providerTypestringobligatoriorequiresExternalRefbooleanobligatorioSi externalRef es obligatorio
Tipos de servicio con línea en su tarifa vigente (o todos los activos sin tarifa)
Ver campos
idstring (uuid)obligatoriocodestringobligatorionamestringobligatoriorequiredProfessionalstringobligatorio
Aseguradoras finales admitidas (solo intermediarios)
Ver campos
idstring (uuid)obligatorionamestringobligatorio
messagestringopcional
401API key ausente, inválida, revocada o caducada
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
429Límite de peticiones de la clave superado (Retry-After)
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
curl -X GET "https://sandbox-api.saludenruta.es/api/integrations/v1/catalog" \
-H "X-Api-Key: $SERAD_API_KEY"{
"status": 200,
"data": {
"providerType": "INSURER",
"requiresExternalRef": true,
"serviceTypes": [
{
"id": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"code": "GENERAL_CONSULTATION",
"name": "Consulta general",
"requiredProfessional": "DOCTOR"
}
],
"insurers": [
{
"id": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"name": "Sanitas"
}
]
},
"message": "Operación realizada correctamente"
}GET/visits
Lista avisos del proveedor (filtro por externalRef, estado, fechas)
Ámbito: visits:read. ?externalRef=EXP-… busca por nº de expediente exacto.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
page | consulta | number | Número de página (1-indexado) |
limit | consulta | number | Elementos por página |
search | consulta | string | Búsqueda libre (nombre/email según el recurso) |
sortBy | consulta | string | Campo de ordenación |
sortOrder | consulta | stringASC · DESC | — |
status | consulta | array<string> | Uno o varios estados |
priority | consulta | stringURGENT · NORMAL · SCHEDULED | — |
dateFrom | consulta | string | Día de servicio desde (incl.) |
dateTo | consulta | string | Día de servicio hasta (incl.) |
externalRef | consulta | string | Nº de expediente exacto |
serviceTypeId | consulta | string (uuid) | — |
Respuestas
200Correcta
objectstatusnumberopcionaldataobjectopcionalVer campos
Ver campos
idstring (uuid)obligatoriocodestringobligatoriostatusstringobligatoriostatusLabelstringobligatorioprioritystringobligatoriooriginstringobligatorioexternalRefstringopcionalpuede ser nullVer campos
idstring (uuid)obligatoriocodestringobligatorionamestringobligatorio
requiredProfessionalstringobligatorioinsurerobjectopcionalpuede ser nullAseguradora final
patientNamestringobligatorioNombre del paciente que envió
addressobjectobligatorioDomicilio (sin coordenadas ni indicaciones de acceso)
serviceDatestringobligatorioscheduledFromstring (date-time)opcionalpuede ser nullscheduledTostring (date-time)opcionalpuede ser nullFin de la cita, calculado: inicio + tiempo estimado
estimatedMinutesnumberobligatorioTiempo estimado de realización, en minutos (puede ampliarse con el aviso en curso)
Ver campos
requestedAtstring (date-time)obligatorioassignedAtstring (date-time)opcionalpuede ser nulldepartedAtstring (date-time)opcionalpuede ser nullarrivedAtstring (date-time)opcionalpuede ser nullfinishedAtstring (date-time)opcionalpuede ser nullcancelledAtstring (date-time)opcionalpuede ser nullinvoicedAtstring (date-time)opcionalpuede ser null
Solo el tipo de unidad, desde la asignación
Ver campos
typestringobligatoriolabelstringobligatorioNunca nombres ni matrículas
outcomestringopcionalpuede ser nullcancellationReasonstringopcionalpuede ser nullcancelledWithChargebooleanobligatoriocancellablebooleanobligatorioSi el proveedor puede cancelarlo ahora (PENDING/ASSIGNED)
reportAvailablebooleanobligatorioSi hay informe asistencial compartido y descargable
invoiceIdstring (uuid)opcionalpuede ser nullcreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
paginationobjectopcionalVer campos
pagenumberopcionallimitnumberopcionaltotalItemsnumberopcionaltotalPagesnumberopcional
messagestringopcional
401API key ausente, inválida, revocada o caducada
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
429Límite de peticiones de la clave superado (Retry-After)
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
curl -X GET "https://sandbox-api.saludenruta.es/api/integrations/v1/visits" \
-H "X-Api-Key: $SERAD_API_KEY"{
"status": 200,
"data": {
"items": [
{
"id": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"code": "AV-000123",
"status": "PENDING",
"statusLabel": "Unidad en camino",
"priority": "URGENT",
"origin": "INTRANET",
"externalRef": "EXP-2026-004512",
"serviceType": {
"id": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"code": "GENERAL_CONSULTATION",
"name": "Consulta general"
},
"requiredProfessional": "DOCTOR",
"insurer": {},
"patientName": "María García López",
"address": {},
"serviceDate": "2026-09-25",
"scheduledFrom": "2026-09-25T09:30:00.000Z",
"scheduledTo": "2026-09-25T09:30:00.000Z",
"estimatedMinutes": 60,
"milestones": {
"requestedAt": "2026-09-25T09:30:00.000Z",
"assignedAt": "2026-09-25T09:30:00.000Z",
"departedAt": "2026-09-25T09:30:00.000Z",
"arrivedAt": "2026-09-25T09:30:00.000Z",
"finishedAt": "2026-09-25T09:30:00.000Z",
"cancelledAt": "2026-09-25T09:30:00.000Z",
"invoicedAt": "2026-09-25T09:30:00.000Z"
},
"unit": {
"type": "MEDICAL",
"label": "Unidad médica"
},
"outcome": "ATTENDED",
"cancellationReason": "string",
"cancelledWithCharge": true,
"cancellable": true,
"reportAvailable": true,
"invoiceId": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"createdAt": "2026-09-25T09:30:00.000Z",
"updatedAt": "2026-09-25T09:30:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"totalItems": 134,
"totalPages": 7
}
},
"message": "Operación realizada correctamente"
}POST/visits
Crea un aviso
Ámbito: visits:write. Con Idempotency-Key (recomendado), repetir la petición con la misma clave y el mismo cuerpo durante 24 h devuelve el mismo aviso (200, cabecera Idempotent-Replayed: true); con otro cuerpo, 409. El paciente se identifica por documento y se reutiliza si ya existe. externalRef es obligatorio si el proveedor lo exige.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
X-Sandbox-Simulation | cabecera | string | Solo sandbox. |
Idempotency-Key | cabecera | string | Identificador único de la operación en tu sistema (máx. 200 caracteres) |
Cuerpo de la petición ProviderCreateVisitDto
patientIdstring (uuid)opcionalPaciente de un aviso anterior de este proveedor (
GET /client/patients). Si llega,patientno hace faltaDatos del paciente. Obligatorio salvo que se indique
patientIdVer campos
firstNamestringobligatoriolastNamestringobligatoriodocumentTypestringopcionaldocumentNumberstringopcionalObligatorio salvo documentType NONE
birthDatestringopcionalsexstringopcionalphonestringopcional
Domicilio de la visita; se geocodifica si no trae coordenadas
Ver campos
line1stringobligatorioline2stringopcionalcitystringobligatoriopostalCodestringobligatorioprovincestringopcionalaccessNotesstringopcionallatitudenumberopcionalSi falta, se geocodifica
longitudenumberopcional
serviceTypeCodestringopcionalCódigo del tipo de servicio (GET /catalog). Recomendado: es el mismo en pruebas y en producción, a diferencia del
serviceTypeId. Obligatorio si no se indicaserviceTypeIdserviceTypeIdstring (uuid)opcionalId del tipo de servicio (GET /catalog). Cambia entre entornos: mejor
serviceTypeCode. Obligatorio si no se indicaserviceTypeCodeprioritystringopcionalPor defecto NORMAL, o SCHEDULED si trae franja
scheduledFromstring (date-time)opcionalestimatedMinutesnumberopcionalTiempo estimado en minutos: bloques de 10 entre 30 y 240. Por defecto 60
scheduledTostring (date-time)opcionalobsoletoObsoleto: usar
estimatedMinutes. Si llega sin él, la duración de la franja se redondea al bloque de 10 min y se usa como tiempo estimadoreasonstringobligatorioMotivo de la solicitud
externalRefstringopcionalObligatorio si el proveedor lo exige
insurerIdstring (uuid)opcionalAseguradora final: solo intermediarios, y entre sus aseguradoras gestionadas
callerNamestringopcionalcallerPhonestringopcional
Respuestas
201Correcta
objectstatusnumberopcionalVer campos
idstring (uuid)obligatoriocodestringobligatoriostatusstringobligatoriostatusLabelstringobligatorioprioritystringobligatoriooriginstringobligatorioexternalRefstringopcionalpuede ser nullVer campos
idstring (uuid)obligatoriocodestringobligatorionamestringobligatorio
requiredProfessionalstringobligatorioinsurerobjectopcionalpuede ser nullAseguradora final
patientNamestringobligatorioNombre del paciente que envió
addressobjectobligatorioDomicilio (sin coordenadas ni indicaciones de acceso)
serviceDatestringobligatorioscheduledFromstring (date-time)opcionalpuede ser nullscheduledTostring (date-time)opcionalpuede ser nullFin de la cita, calculado: inicio + tiempo estimado
estimatedMinutesnumberobligatorioTiempo estimado de realización, en minutos (puede ampliarse con el aviso en curso)
Ver campos
requestedAtstring (date-time)obligatorioassignedAtstring (date-time)opcionalpuede ser nulldepartedAtstring (date-time)opcionalpuede ser nullarrivedAtstring (date-time)opcionalpuede ser nullfinishedAtstring (date-time)opcionalpuede ser nullcancelledAtstring (date-time)opcionalpuede ser nullinvoicedAtstring (date-time)opcionalpuede ser null
Solo el tipo de unidad, desde la asignación
Ver campos
typestringobligatoriolabelstringobligatorioNunca nombres ni matrículas
outcomestringopcionalpuede ser nullcancellationReasonstringopcionalpuede ser nullcancelledWithChargebooleanobligatoriocancellablebooleanobligatorioSi el proveedor puede cancelarlo ahora (PENDING/ASSIGNED)
reportAvailablebooleanobligatorioSi hay informe asistencial compartido y descargable
invoiceIdstring (uuid)opcionalpuede ser nullcreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
messagestringopcional
400Datos inválidos, tipo de servicio no permitido o falta el expediente
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
401API key ausente, inválida, revocada o caducada
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
403La clave no tiene el ámbito visits:write
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
409Idempotency-Key reutilizada con otro cuerpo o en curso
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
429Límite de peticiones de la clave superado (Retry-After)
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
curl -X POST "https://sandbox-api.saludenruta.es/api/integrations/v1/visits" \
-H "X-Api-Key: $SERAD_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"patient": {
"firstName": "María",
"lastName": "García López",
"documentType": "DNI",
"documentNumber": "12345678Z",
"birthDate": "1948-05-17",
"phone": "+34600111222"
},
"address": {
"line1": "Calle de Alcalá 120",
"line2": "3º B",
"city": "Madrid",
"postalCode": "28009"
},
"serviceTypeId": "57605fe9-bade-4040-b403-5eeb58e57c9e",
"priority": "URGENT",
"reason": "Fiebre alta desde ayer",
"externalRef": "EXP-2026-004512",
"insurerId": "fe8faeb8-0051-40d5-b0c1-dce10d5f5ba1"
}'{
"status": 201,
"data": {
"id": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"code": "AV-000123",
"status": "PENDING",
"statusLabel": "Unidad en camino",
"priority": "URGENT",
"origin": "INTRANET",
"externalRef": "EXP-2026-004512",
"serviceType": {
"id": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"code": "GENERAL_CONSULTATION",
"name": "Consulta general"
},
"requiredProfessional": "DOCTOR",
"insurer": {},
"patientName": "María García López",
"address": {},
"serviceDate": "2026-09-25",
"scheduledFrom": "2026-09-25T09:30:00.000Z",
"scheduledTo": "2026-09-25T09:30:00.000Z",
"estimatedMinutes": 60,
"milestones": {
"requestedAt": "2026-09-25T09:30:00.000Z",
"assignedAt": "2026-09-25T09:30:00.000Z",
"departedAt": "2026-09-25T09:30:00.000Z",
"arrivedAt": "2026-09-25T09:30:00.000Z",
"finishedAt": "2026-09-25T09:30:00.000Z",
"cancelledAt": "2026-09-25T09:30:00.000Z",
"invoicedAt": "2026-09-25T09:30:00.000Z"
},
"unit": {
"type": "MEDICAL",
"label": "Unidad médica"
},
"outcome": "ATTENDED",
"cancellationReason": "string",
"cancelledWithCharge": true,
"cancellable": true,
"reportAvailable": true,
"invoiceId": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"createdAt": "2026-09-25T09:30:00.000Z",
"updatedAt": "2026-09-25T09:30:00.000Z"
},
"message": "Operación realizada correctamente"
}GET/visits/{id}
Estado, hitos y línea de tiempo de un aviso
Ámbito: visits:read. Un aviso de otro proveedor responde 404.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
idobligatorio | ruta | string | — |
Respuestas
200Correcta
objectstatusnumberopcionalVer campos
idstring (uuid)obligatoriocodestringobligatoriostatusstringobligatoriostatusLabelstringobligatorioprioritystringobligatoriooriginstringobligatorioexternalRefstringopcionalpuede ser nullVer campos
idstring (uuid)obligatoriocodestringobligatorionamestringobligatorio
requiredProfessionalstringobligatorioinsurerobjectopcionalpuede ser nullAseguradora final
patientNamestringobligatorioNombre del paciente que envió
addressobjectobligatorioDomicilio (sin coordenadas ni indicaciones de acceso)
serviceDatestringobligatorioscheduledFromstring (date-time)opcionalpuede ser nullscheduledTostring (date-time)opcionalpuede ser nullFin de la cita, calculado: inicio + tiempo estimado
estimatedMinutesnumberobligatorioTiempo estimado de realización, en minutos (puede ampliarse con el aviso en curso)
Ver campos
requestedAtstring (date-time)obligatorioassignedAtstring (date-time)opcionalpuede ser nulldepartedAtstring (date-time)opcionalpuede ser nullarrivedAtstring (date-time)opcionalpuede ser nullfinishedAtstring (date-time)opcionalpuede ser nullcancelledAtstring (date-time)opcionalpuede ser nullinvoicedAtstring (date-time)opcionalpuede ser null
Solo el tipo de unidad, desde la asignación
Ver campos
typestringobligatoriolabelstringobligatorioNunca nombres ni matrículas
outcomestringopcionalpuede ser nullcancellationReasonstringopcionalpuede ser nullcancelledWithChargebooleanobligatoriocancellablebooleanobligatorioSi el proveedor puede cancelarlo ahora (PENDING/ASSIGNED)
reportAvailablebooleanobligatorioSi hay informe asistencial compartido y descargable
invoiceIdstring (uuid)opcionalpuede ser nullcreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorioVer campos
statusstringobligatoriolabelstringobligatorioatstring (date-time)obligatorio
messagestringopcional
401API key ausente, inválida, revocada o caducada
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
404Aviso no encontrado
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
429Límite de peticiones de la clave superado (Retry-After)
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
curl -X GET "https://sandbox-api.saludenruta.es/api/integrations/v1/visits/string" \
-H "X-Api-Key: $SERAD_API_KEY"{
"status": 200,
"data": {
"id": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"code": "AV-000123",
"status": "PENDING",
"statusLabel": "Unidad en camino",
"priority": "URGENT",
"origin": "INTRANET",
"externalRef": "EXP-2026-004512",
"serviceType": {
"id": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"code": "GENERAL_CONSULTATION",
"name": "Consulta general"
},
"requiredProfessional": "DOCTOR",
"insurer": {},
"patientName": "María García López",
"address": {},
"serviceDate": "2026-09-25",
"scheduledFrom": "2026-09-25T09:30:00.000Z",
"scheduledTo": "2026-09-25T09:30:00.000Z",
"estimatedMinutes": 60,
"milestones": {
"requestedAt": "2026-09-25T09:30:00.000Z",
"assignedAt": "2026-09-25T09:30:00.000Z",
"departedAt": "2026-09-25T09:30:00.000Z",
"arrivedAt": "2026-09-25T09:30:00.000Z",
"finishedAt": "2026-09-25T09:30:00.000Z",
"cancelledAt": "2026-09-25T09:30:00.000Z",
"invoicedAt": "2026-09-25T09:30:00.000Z"
},
"unit": {
"type": "MEDICAL",
"label": "Unidad médica"
},
"outcome": "ATTENDED",
"cancellationReason": "string",
"cancelledWithCharge": true,
"cancellable": true,
"reportAvailable": true,
"invoiceId": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"createdAt": "2026-09-25T09:30:00.000Z",
"updatedAt": "2026-09-25T09:30:00.000Z",
"timeline": [
{
"status": "PENDING",
"label": "Unidad asignada",
"at": "2026-09-25T09:30:00.000Z"
}
]
},
"message": "Operación realizada correctamente"
}GET/visits/{id}/eta
Hora estimada de llegada de la unidad (con el aviso en camino)
Ámbito: visits:read. Con la unidad en camino, minutos y hora estimada por carretera desde su última posición. En otros estados, etaMinutes es null. No se devuelve la posición de la unidad.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
idobligatorio | ruta | string | — |
Respuestas
200Correcta
objectstatusnumberopcionalVer campos
statusstringobligatorioetaMinutesnumberopcionalpuede ser nullMinutos estimados hasta la llegada; null si no está EN_ROUTE o no hay posición
estimatedArrivalAtstring (date-time)opcionalpuede ser nullHora estimada de llegada
estimatedbooleanobligatoriotrue si es una estimación en línea recta (sin OSRM)
calculatedAtstring (date-time)obligatorio
messagestringopcional
401API key ausente, inválida, revocada o caducada
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
404Aviso no encontrado
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
429Límite de peticiones de la clave superado (Retry-After)
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
curl -X GET "https://sandbox-api.saludenruta.es/api/integrations/v1/visits/string/eta" \
-H "X-Api-Key: $SERAD_API_KEY"{
"status": 200,
"data": {
"status": "PENDING",
"etaMinutes": 14,
"estimatedArrivalAt": "2026-09-25T09:30:00.000Z",
"estimated": true,
"calculatedAt": "2026-09-25T09:30:00.000Z"
},
"message": "Operación realizada correctamente"
}POST/visits/{id}/cancel
Cancela un aviso (solo PENDING/ASSIGNED, sin cargo)
Ámbito: visits:write. Con la unidad en camino, llama a la centralita.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
idobligatorio | ruta | string | — |
Cuerpo de la petición ProviderCancelVisitDto
reasonstringobligatorio
Respuestas
200Correcta
objectstatusnumberopcionalVer campos
idstring (uuid)obligatoriocodestringobligatoriostatusstringobligatoriostatusLabelstringobligatorioprioritystringobligatoriooriginstringobligatorioexternalRefstringopcionalpuede ser nullVer campos
idstring (uuid)obligatoriocodestringobligatorionamestringobligatorio
requiredProfessionalstringobligatorioinsurerobjectopcionalpuede ser nullAseguradora final
patientNamestringobligatorioNombre del paciente que envió
addressobjectobligatorioDomicilio (sin coordenadas ni indicaciones de acceso)
serviceDatestringobligatorioscheduledFromstring (date-time)opcionalpuede ser nullscheduledTostring (date-time)opcionalpuede ser nullFin de la cita, calculado: inicio + tiempo estimado
estimatedMinutesnumberobligatorioTiempo estimado de realización, en minutos (puede ampliarse con el aviso en curso)
Ver campos
requestedAtstring (date-time)obligatorioassignedAtstring (date-time)opcionalpuede ser nulldepartedAtstring (date-time)opcionalpuede ser nullarrivedAtstring (date-time)opcionalpuede ser nullfinishedAtstring (date-time)opcionalpuede ser nullcancelledAtstring (date-time)opcionalpuede ser nullinvoicedAtstring (date-time)opcionalpuede ser null
Solo el tipo de unidad, desde la asignación
Ver campos
typestringobligatoriolabelstringobligatorioNunca nombres ni matrículas
outcomestringopcionalpuede ser nullcancellationReasonstringopcionalpuede ser nullcancelledWithChargebooleanobligatoriocancellablebooleanobligatorioSi el proveedor puede cancelarlo ahora (PENDING/ASSIGNED)
reportAvailablebooleanobligatorioSi hay informe asistencial compartido y descargable
invoiceIdstring (uuid)opcionalpuede ser nullcreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
messagestringopcional
401API key ausente, inválida, revocada o caducada
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
409El aviso ya no se puede cancelar desde la integración
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
429Límite de peticiones de la clave superado (Retry-After)
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
curl -X POST "https://sandbox-api.saludenruta.es/api/integrations/v1/visits/string/cancel" \
-H "X-Api-Key: $SERAD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"reason": "El paciente ya no necesita la visita"
}'{
"status": 200,
"data": {
"id": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"code": "AV-000123",
"status": "PENDING",
"statusLabel": "Unidad en camino",
"priority": "URGENT",
"origin": "INTRANET",
"externalRef": "EXP-2026-004512",
"serviceType": {
"id": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"code": "GENERAL_CONSULTATION",
"name": "Consulta general"
},
"requiredProfessional": "DOCTOR",
"insurer": {},
"patientName": "María García López",
"address": {},
"serviceDate": "2026-09-25",
"scheduledFrom": "2026-09-25T09:30:00.000Z",
"scheduledTo": "2026-09-25T09:30:00.000Z",
"estimatedMinutes": 60,
"milestones": {
"requestedAt": "2026-09-25T09:30:00.000Z",
"assignedAt": "2026-09-25T09:30:00.000Z",
"departedAt": "2026-09-25T09:30:00.000Z",
"arrivedAt": "2026-09-25T09:30:00.000Z",
"finishedAt": "2026-09-25T09:30:00.000Z",
"cancelledAt": "2026-09-25T09:30:00.000Z",
"invoicedAt": "2026-09-25T09:30:00.000Z"
},
"unit": {
"type": "MEDICAL",
"label": "Unidad médica"
},
"outcome": "ATTENDED",
"cancellationReason": "string",
"cancelledWithCharge": true,
"cancellable": true,
"reportAvailable": true,
"invoiceId": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"createdAt": "2026-09-25T09:30:00.000Z",
"updatedAt": "2026-09-25T09:30:00.000Z"
},
"message": "Operación realizada correctamente"
}GET/visits/{id}/report
Descarga el informe asistencial (PDF) si está compartido y consentido
Ámbito: reports:read. Cada descarga queda registrada (CLINICAL_ACCESS).
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
idobligatorio | ruta | string | — |
Respuestas
401API key ausente, inválida, revocada o caducada
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
404Sin informe compartido para este aviso
application/pdf
429Límite de peticiones de la clave superado (Retry-After)
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
curl -X GET "https://sandbox-api.saludenruta.es/api/integrations/v1/visits/string/report" \
-H "X-Api-Key: $SERAD_API_KEY"POST/sandbox/visits/{id}/advance
[Solo sandbox] Avanza un aviso de prueba al siguiente estado o al indicado
Ámbito: visits:write. Dispara los mismos webhooks que en producción para cada estado por el que pasa. Para cancelar, {"to":"CANCELLED"} (desde pendiente, asignado o en camino).
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
idobligatorio | ruta | string | — |
Cuerpo de la petición SandboxAdvanceVisitDto
tostringopcionalEstado destino. Sin él, el siguiente. Pasa por los intermedios, con su webhook cada uno
Respuestas
200Correcta
objectstatusnumberopcionalVer campos
idstring (uuid)obligatoriocodestringobligatoriostatusstringobligatoriostatusLabelstringobligatorioprioritystringobligatoriooriginstringobligatorioexternalRefstringopcionalpuede ser nullVer campos
idstring (uuid)obligatoriocodestringobligatorionamestringobligatorio
requiredProfessionalstringobligatorioinsurerobjectopcionalpuede ser nullAseguradora final
patientNamestringobligatorioNombre del paciente que envió
addressobjectobligatorioDomicilio (sin coordenadas ni indicaciones de acceso)
serviceDatestringobligatorioscheduledFromstring (date-time)opcionalpuede ser nullscheduledTostring (date-time)opcionalpuede ser nullFin de la cita, calculado: inicio + tiempo estimado
estimatedMinutesnumberobligatorioTiempo estimado de realización, en minutos (puede ampliarse con el aviso en curso)
Ver campos
requestedAtstring (date-time)obligatorioassignedAtstring (date-time)opcionalpuede ser nulldepartedAtstring (date-time)opcionalpuede ser nullarrivedAtstring (date-time)opcionalpuede ser nullfinishedAtstring (date-time)opcionalpuede ser nullcancelledAtstring (date-time)opcionalpuede ser nullinvoicedAtstring (date-time)opcionalpuede ser null
Solo el tipo de unidad, desde la asignación
Ver campos
typestringobligatoriolabelstringobligatorioNunca nombres ni matrículas
outcomestringopcionalpuede ser nullcancellationReasonstringopcionalpuede ser nullcancelledWithChargebooleanobligatoriocancellablebooleanobligatorioSi el proveedor puede cancelarlo ahora (PENDING/ASSIGNED)
reportAvailablebooleanobligatorioSi hay informe asistencial compartido y descargable
invoiceIdstring (uuid)opcionalpuede ser nullcreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorioVer campos
statusstringobligatoriolabelstringobligatorioatstring (date-time)obligatorio
messagestringopcional
400El aviso no puede pasar a ese estado
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
404Aviso no encontrado, o la ruta no existe (producción)
ProblemDetailDtotypestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
curl -X POST "https://sandbox-api.saludenruta.es/api/integrations/v1/sandbox/visits/string/advance" \
-H "X-Api-Key: $SERAD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "ASSIGNED"
}'{
"status": 200,
"data": {
"id": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"code": "AV-000123",
"status": "PENDING",
"statusLabel": "Unidad en camino",
"priority": "URGENT",
"origin": "INTRANET",
"externalRef": "EXP-2026-004512",
"serviceType": {
"id": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"code": "GENERAL_CONSULTATION",
"name": "Consulta general"
},
"requiredProfessional": "DOCTOR",
"insurer": {},
"patientName": "María García López",
"address": {},
"serviceDate": "2026-09-25",
"scheduledFrom": "2026-09-25T09:30:00.000Z",
"scheduledTo": "2026-09-25T09:30:00.000Z",
"estimatedMinutes": 60,
"milestones": {
"requestedAt": "2026-09-25T09:30:00.000Z",
"assignedAt": "2026-09-25T09:30:00.000Z",
"departedAt": "2026-09-25T09:30:00.000Z",
"arrivedAt": "2026-09-25T09:30:00.000Z",
"finishedAt": "2026-09-25T09:30:00.000Z",
"cancelledAt": "2026-09-25T09:30:00.000Z",
"invoicedAt": "2026-09-25T09:30:00.000Z"
},
"unit": {
"type": "MEDICAL",
"label": "Unidad médica"
},
"outcome": "ATTENDED",
"cancellationReason": "string",
"cancelledWithCharge": true,
"cancellable": true,
"reportAvailable": true,
"invoiceId": "3f1c2b8e-6a4d-4e2f-9b7a-1c5d8e9f0a12",
"createdAt": "2026-09-25T09:30:00.000Z",
"updatedAt": "2026-09-25T09:30:00.000Z",
"timeline": [
{
"status": "PENDING",
"label": "Unidad asignada",
"at": "2026-09-25T09:30:00.000Z"
}
]
},
"message": "Operación realizada correctamente"
}POST/sandbox/reset
[Solo sandbox] Borra todos tus avisos de prueba
Ámbito: visits:write. Deja el entorno limpio para empezar otra batería de pruebas.
Respuestas
200Correcta
objectstatusnumberopcionalVer campos
deletedVisitsnumberopcional
messagestringopcional
curl -X POST "https://sandbox-api.saludenruta.es/api/integrations/v1/sandbox/reset" \
-H "X-Api-Key: $SERAD_API_KEY"{
"status": 200,
"data": {
"deletedVisits": 12
},
"message": "Operación realizada correctamente"
}Webhooks
Peticiones que Salud en Ruta envía a la URL que configures. Ver la guía de webhooks para la firma y los reintentos.
EVENTOvisit.created
Evento visit.created
Petición que Salud en Ruta envía a tu URL. Verifica la firma: X-Serad-Signature = sha256= + hex(HMAC-SHA256(secreto, <X-Serad-Timestamp>.<cuerpo crudo>)), con una tolerancia de 300 s. Responde 2xx en menos de 10 s; si no, se reintenta: 12 intentos en total con espera exponencial (de 30 s a 1 h, unas 5 horas). X-Serad-Delivery identifica la entrega para descartar duplicados.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
X-Serad-Signatureobligatorio | cabecera | string | — |
X-Serad-Timestampobligatorio | cabecera | string | — |
X-Serad-Eventobligatorio | cabecera | string | — |
X-Serad-Deliveryobligatorio | cabecera | string (uuid) | — |
Carga del evento object
Sin campos descritos.
Respuesta que esperamos
2XXRecibido. Cualquier otra respuesta se reintenta.
Sin cuerpo
{
"id": "6f0a9c1e-2b7d-4f8a-9e3c-1d2b3c4d5e6f",
"type": "visit.created",
"createdAt": "2026-10-01T09:15:00.000Z",
"data": {
"visit": {
"id": "c6a3c348-40b6-4158-a44a-7d85f01a0201",
"code": "AV-000018",
"externalRef": "EXP-2026-004512",
"status": "ASSIGNED",
"priority": "URGENT",
"origin": "PROVIDER_API",
"serviceTypeCode": "URG",
"unitType": "MEDICAL",
"milestones": {
"requestedAt": "2026-10-01T09:10:00.000Z",
"assignedAt": "2026-10-01T09:15:00.000Z"
},
"outcome": null,
"cancelledWithCharge": false,
"invoice": null
}
}
}EVENTOvisit.assigned
Evento visit.assigned
Petición que Salud en Ruta envía a tu URL. Verifica la firma: X-Serad-Signature = sha256= + hex(HMAC-SHA256(secreto, <X-Serad-Timestamp>.<cuerpo crudo>)), con una tolerancia de 300 s. Responde 2xx en menos de 10 s; si no, se reintenta: 12 intentos en total con espera exponencial (de 30 s a 1 h, unas 5 horas). X-Serad-Delivery identifica la entrega para descartar duplicados.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
X-Serad-Signatureobligatorio | cabecera | string | — |
X-Serad-Timestampobligatorio | cabecera | string | — |
X-Serad-Eventobligatorio | cabecera | string | — |
X-Serad-Deliveryobligatorio | cabecera | string (uuid) | — |
Carga del evento object
Sin campos descritos.
Respuesta que esperamos
2XXRecibido. Cualquier otra respuesta se reintenta.
Sin cuerpo
{
"id": "6f0a9c1e-2b7d-4f8a-9e3c-1d2b3c4d5e6f",
"type": "visit.assigned",
"createdAt": "2026-10-01T09:15:00.000Z",
"data": {
"visit": {
"id": "c6a3c348-40b6-4158-a44a-7d85f01a0201",
"code": "AV-000018",
"externalRef": "EXP-2026-004512",
"status": "ASSIGNED",
"priority": "URGENT",
"origin": "PROVIDER_API",
"serviceTypeCode": "URG",
"unitType": "MEDICAL",
"milestones": {
"requestedAt": "2026-10-01T09:10:00.000Z",
"assignedAt": "2026-10-01T09:15:00.000Z"
},
"outcome": null,
"cancelledWithCharge": false,
"invoice": null
}
}
}EVENTOvisit.en_route
Evento visit.en_route
Petición que Salud en Ruta envía a tu URL. Verifica la firma: X-Serad-Signature = sha256= + hex(HMAC-SHA256(secreto, <X-Serad-Timestamp>.<cuerpo crudo>)), con una tolerancia de 300 s. Responde 2xx en menos de 10 s; si no, se reintenta: 12 intentos en total con espera exponencial (de 30 s a 1 h, unas 5 horas). X-Serad-Delivery identifica la entrega para descartar duplicados.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
X-Serad-Signatureobligatorio | cabecera | string | — |
X-Serad-Timestampobligatorio | cabecera | string | — |
X-Serad-Eventobligatorio | cabecera | string | — |
X-Serad-Deliveryobligatorio | cabecera | string (uuid) | — |
Carga del evento object
Sin campos descritos.
Respuesta que esperamos
2XXRecibido. Cualquier otra respuesta se reintenta.
Sin cuerpo
{
"id": "6f0a9c1e-2b7d-4f8a-9e3c-1d2b3c4d5e6f",
"type": "visit.en_route",
"createdAt": "2026-10-01T09:15:00.000Z",
"data": {
"visit": {
"id": "c6a3c348-40b6-4158-a44a-7d85f01a0201",
"code": "AV-000018",
"externalRef": "EXP-2026-004512",
"status": "ASSIGNED",
"priority": "URGENT",
"origin": "PROVIDER_API",
"serviceTypeCode": "URG",
"unitType": "MEDICAL",
"milestones": {
"requestedAt": "2026-10-01T09:10:00.000Z",
"assignedAt": "2026-10-01T09:15:00.000Z"
},
"outcome": null,
"cancelledWithCharge": false,
"invoice": null
}
}
}EVENTOvisit.on_site
Evento visit.on_site
Petición que Salud en Ruta envía a tu URL. Verifica la firma: X-Serad-Signature = sha256= + hex(HMAC-SHA256(secreto, <X-Serad-Timestamp>.<cuerpo crudo>)), con una tolerancia de 300 s. Responde 2xx en menos de 10 s; si no, se reintenta: 12 intentos en total con espera exponencial (de 30 s a 1 h, unas 5 horas). X-Serad-Delivery identifica la entrega para descartar duplicados.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
X-Serad-Signatureobligatorio | cabecera | string | — |
X-Serad-Timestampobligatorio | cabecera | string | — |
X-Serad-Eventobligatorio | cabecera | string | — |
X-Serad-Deliveryobligatorio | cabecera | string (uuid) | — |
Carga del evento object
Sin campos descritos.
Respuesta que esperamos
2XXRecibido. Cualquier otra respuesta se reintenta.
Sin cuerpo
{
"id": "6f0a9c1e-2b7d-4f8a-9e3c-1d2b3c4d5e6f",
"type": "visit.on_site",
"createdAt": "2026-10-01T09:15:00.000Z",
"data": {
"visit": {
"id": "c6a3c348-40b6-4158-a44a-7d85f01a0201",
"code": "AV-000018",
"externalRef": "EXP-2026-004512",
"status": "ASSIGNED",
"priority": "URGENT",
"origin": "PROVIDER_API",
"serviceTypeCode": "URG",
"unitType": "MEDICAL",
"milestones": {
"requestedAt": "2026-10-01T09:10:00.000Z",
"assignedAt": "2026-10-01T09:15:00.000Z"
},
"outcome": null,
"cancelledWithCharge": false,
"invoice": null
}
}
}EVENTOvisit.finished
Evento visit.finished
Petición que Salud en Ruta envía a tu URL. Verifica la firma: X-Serad-Signature = sha256= + hex(HMAC-SHA256(secreto, <X-Serad-Timestamp>.<cuerpo crudo>)), con una tolerancia de 300 s. Responde 2xx en menos de 10 s; si no, se reintenta: 12 intentos en total con espera exponencial (de 30 s a 1 h, unas 5 horas). X-Serad-Delivery identifica la entrega para descartar duplicados.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
X-Serad-Signatureobligatorio | cabecera | string | — |
X-Serad-Timestampobligatorio | cabecera | string | — |
X-Serad-Eventobligatorio | cabecera | string | — |
X-Serad-Deliveryobligatorio | cabecera | string (uuid) | — |
Carga del evento object
Sin campos descritos.
Respuesta que esperamos
2XXRecibido. Cualquier otra respuesta se reintenta.
Sin cuerpo
{
"id": "6f0a9c1e-2b7d-4f8a-9e3c-1d2b3c4d5e6f",
"type": "visit.finished",
"createdAt": "2026-10-01T09:15:00.000Z",
"data": {
"visit": {
"id": "c6a3c348-40b6-4158-a44a-7d85f01a0201",
"code": "AV-000018",
"externalRef": "EXP-2026-004512",
"status": "ASSIGNED",
"priority": "URGENT",
"origin": "PROVIDER_API",
"serviceTypeCode": "URG",
"unitType": "MEDICAL",
"milestones": {
"requestedAt": "2026-10-01T09:10:00.000Z",
"assignedAt": "2026-10-01T09:15:00.000Z"
},
"outcome": null,
"cancelledWithCharge": false,
"invoice": null
}
}
}EVENTOvisit.cancelled
Evento visit.cancelled
Petición que Salud en Ruta envía a tu URL. Verifica la firma: X-Serad-Signature = sha256= + hex(HMAC-SHA256(secreto, <X-Serad-Timestamp>.<cuerpo crudo>)), con una tolerancia de 300 s. Responde 2xx en menos de 10 s; si no, se reintenta: 12 intentos en total con espera exponencial (de 30 s a 1 h, unas 5 horas). X-Serad-Delivery identifica la entrega para descartar duplicados.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
X-Serad-Signatureobligatorio | cabecera | string | — |
X-Serad-Timestampobligatorio | cabecera | string | — |
X-Serad-Eventobligatorio | cabecera | string | — |
X-Serad-Deliveryobligatorio | cabecera | string (uuid) | — |
Carga del evento object
Sin campos descritos.
Respuesta que esperamos
2XXRecibido. Cualquier otra respuesta se reintenta.
Sin cuerpo
{
"id": "6f0a9c1e-2b7d-4f8a-9e3c-1d2b3c4d5e6f",
"type": "visit.cancelled",
"createdAt": "2026-10-01T09:15:00.000Z",
"data": {
"visit": {
"id": "c6a3c348-40b6-4158-a44a-7d85f01a0201",
"code": "AV-000018",
"externalRef": "EXP-2026-004512",
"status": "ASSIGNED",
"priority": "URGENT",
"origin": "PROVIDER_API",
"serviceTypeCode": "URG",
"unitType": "MEDICAL",
"milestones": {
"requestedAt": "2026-10-01T09:10:00.000Z",
"assignedAt": "2026-10-01T09:15:00.000Z"
},
"outcome": null,
"cancelledWithCharge": false,
"invoice": null
}
}
}EVENTOvisit.invoiced
Evento visit.invoiced
Petición que Salud en Ruta envía a tu URL. Verifica la firma: X-Serad-Signature = sha256= + hex(HMAC-SHA256(secreto, <X-Serad-Timestamp>.<cuerpo crudo>)), con una tolerancia de 300 s. Responde 2xx en menos de 10 s; si no, se reintenta: 12 intentos en total con espera exponencial (de 30 s a 1 h, unas 5 horas). X-Serad-Delivery identifica la entrega para descartar duplicados.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
X-Serad-Signatureobligatorio | cabecera | string | — |
X-Serad-Timestampobligatorio | cabecera | string | — |
X-Serad-Eventobligatorio | cabecera | string | — |
X-Serad-Deliveryobligatorio | cabecera | string (uuid) | — |
Carga del evento object
Sin campos descritos.
Respuesta que esperamos
2XXRecibido. Cualquier otra respuesta se reintenta.
Sin cuerpo
{
"id": "6f0a9c1e-2b7d-4f8a-9e3c-1d2b3c4d5e6f",
"type": "visit.invoiced",
"createdAt": "2026-10-01T09:15:00.000Z",
"data": {
"visit": {
"id": "c6a3c348-40b6-4158-a44a-7d85f01a0201",
"code": "AV-000018",
"externalRef": "EXP-2026-004512",
"status": "ASSIGNED",
"priority": "URGENT",
"origin": "PROVIDER_API",
"serviceTypeCode": "URG",
"unitType": "MEDICAL",
"milestones": {
"requestedAt": "2026-10-01T09:10:00.000Z",
"assignedAt": "2026-10-01T09:15:00.000Z"
},
"outcome": null,
"cancelledWithCharge": false,
"invoice": null
}
}
}EVENTOreport.shared
Evento report.shared
Petición que Salud en Ruta envía a tu URL. Verifica la firma: X-Serad-Signature = sha256= + hex(HMAC-SHA256(secreto, <X-Serad-Timestamp>.<cuerpo crudo>)), con una tolerancia de 300 s. Responde 2xx en menos de 10 s; si no, se reintenta: 12 intentos en total con espera exponencial (de 30 s a 1 h, unas 5 horas). X-Serad-Delivery identifica la entrega para descartar duplicados.
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
X-Serad-Signatureobligatorio | cabecera | string | — |
X-Serad-Timestampobligatorio | cabecera | string | — |
X-Serad-Eventobligatorio | cabecera | string | — |
X-Serad-Deliveryobligatorio | cabecera | string (uuid) | — |
Carga del evento object
Sin campos descritos.
Respuesta que esperamos
2XXRecibido. Cualquier otra respuesta se reintenta.
Sin cuerpo
{
"id": "6f0a9c1e-2b7d-4f8a-9e3c-1d2b3c4d5e6f",
"type": "report.shared",
"createdAt": "2026-10-01T09:15:00.000Z",
"data": {
"visit": {
"id": "c6a3c348-40b6-4158-a44a-7d85f01a0201",
"code": "AV-000018",
"externalRef": "EXP-2026-004512",
"status": "ASSIGNED",
"priority": "URGENT",
"origin": "PROVIDER_API",
"serviceTypeCode": "URG",
"unitType": "MEDICAL",
"milestones": {
"requestedAt": "2026-10-01T09:10:00.000Z",
"assignedAt": "2026-10-01T09:15:00.000Z"
},
"outcome": null,
"cancelledWithCharge": false,
"invoice": null
}
}
}Esquemas
FieldErrorDto
fieldstringobligatoriomessagestringobligatorio
ProblemDetailDto
typestringobligatoriotitlestringobligatoriostatusnumberobligatoriodetailstringobligatorioinstancestringobligatorioVer campos
fieldstringobligatoriomessagestringobligatorio
timestampstringobligatorio
ProviderVisitServiceTypeDto
idstring (uuid)obligatoriocodestringobligatorionamestringobligatorio
ProviderVisitMilestonesDto
requestedAtstring (date-time)obligatorioassignedAtstring (date-time)opcionalpuede ser nulldepartedAtstring (date-time)opcionalpuede ser nullarrivedAtstring (date-time)opcionalpuede ser nullfinishedAtstring (date-time)opcionalpuede ser nullcancelledAtstring (date-time)opcionalpuede ser nullinvoicedAtstring (date-time)opcionalpuede ser null
ProviderVisitUnitDto
typestringobligatoriolabelstringobligatorioNunca nombres ni matrículas
ProviderVisitResponseDto
idstring (uuid)obligatoriocodestringobligatoriostatusstringobligatoriostatusLabelstringobligatorioprioritystringobligatoriooriginstringobligatorioexternalRefstringopcionalpuede ser nullVer campos
idstring (uuid)obligatoriocodestringobligatorionamestringobligatorio
requiredProfessionalstringobligatorioinsurerobjectopcionalpuede ser nullAseguradora final
patientNamestringobligatorioNombre del paciente que envió
addressobjectobligatorioDomicilio (sin coordenadas ni indicaciones de acceso)
serviceDatestringobligatorioscheduledFromstring (date-time)opcionalpuede ser nullscheduledTostring (date-time)opcionalpuede ser nullFin de la cita, calculado: inicio + tiempo estimado
estimatedMinutesnumberobligatorioTiempo estimado de realización, en minutos (puede ampliarse con el aviso en curso)
Ver campos
requestedAtstring (date-time)obligatorioassignedAtstring (date-time)opcionalpuede ser nulldepartedAtstring (date-time)opcionalpuede ser nullarrivedAtstring (date-time)opcionalpuede ser nullfinishedAtstring (date-time)opcionalpuede ser nullcancelledAtstring (date-time)opcionalpuede ser nullinvoicedAtstring (date-time)opcionalpuede ser null
Solo el tipo de unidad, desde la asignación
Ver campos
typestringobligatoriolabelstringobligatorioNunca nombres ni matrículas
outcomestringopcionalpuede ser nullcancellationReasonstringopcionalpuede ser nullcancelledWithChargebooleanobligatoriocancellablebooleanobligatorioSi el proveedor puede cancelarlo ahora (PENDING/ASSIGNED)
reportAvailablebooleanobligatorioSi hay informe asistencial compartido y descargable
invoiceIdstring (uuid)opcionalpuede ser nullcreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
ProviderCatalogServiceTypeDto
idstring (uuid)obligatoriocodestringobligatorionamestringobligatoriorequiredProfessionalstringobligatorio
ProviderCatalogInsurerDto
idstring (uuid)obligatorionamestringobligatorio
ProviderCatalogResponseDto
providerTypestringobligatoriorequiresExternalRefbooleanobligatorioSi externalRef es obligatorio
Tipos de servicio con línea en su tarifa vigente (o todos los activos sin tarifa)
Ver campos
idstring (uuid)obligatoriocodestringobligatorionamestringobligatoriorequiredProfessionalstringobligatorio
Aseguradoras finales admitidas (solo intermediarios)
Ver campos
idstring (uuid)obligatorionamestringobligatorio
ProviderVisitPatientInputDto
firstNamestringobligatoriolastNamestringobligatoriodocumentTypestringopcionaldocumentNumberstringopcionalObligatorio salvo documentType NONE
birthDatestringopcionalsexstringopcionalphonestringopcional
VisitAddressInputDto
line1stringobligatorioline2stringopcionalcitystringobligatoriopostalCodestringobligatorioprovincestringopcionalaccessNotesstringopcionallatitudenumberopcionalSi falta, se geocodifica
longitudenumberopcional
ProviderCreateVisitDto
patientIdstring (uuid)opcionalPaciente de un aviso anterior de este proveedor (
GET /client/patients). Si llega,patientno hace faltaDatos del paciente. Obligatorio salvo que se indique
patientIdVer campos
firstNamestringobligatoriolastNamestringobligatoriodocumentTypestringopcionaldocumentNumberstringopcionalObligatorio salvo documentType NONE
birthDatestringopcionalsexstringopcionalphonestringopcional
Domicilio de la visita; se geocodifica si no trae coordenadas
Ver campos
line1stringobligatorioline2stringopcionalcitystringobligatoriopostalCodestringobligatorioprovincestringopcionalaccessNotesstringopcionallatitudenumberopcionalSi falta, se geocodifica
longitudenumberopcional
serviceTypeCodestringopcionalCódigo del tipo de servicio (GET /catalog). Recomendado: es el mismo en pruebas y en producción, a diferencia del
serviceTypeId. Obligatorio si no se indicaserviceTypeIdserviceTypeIdstring (uuid)opcionalId del tipo de servicio (GET /catalog). Cambia entre entornos: mejor
serviceTypeCode. Obligatorio si no se indicaserviceTypeCodeprioritystringopcionalPor defecto NORMAL, o SCHEDULED si trae franja
scheduledFromstring (date-time)opcionalestimatedMinutesnumberopcionalTiempo estimado en minutos: bloques de 10 entre 30 y 240. Por defecto 60
scheduledTostring (date-time)opcionalobsoletoObsoleto: usar
estimatedMinutes. Si llega sin él, la duración de la franja se redondea al bloque de 10 min y se usa como tiempo estimadoreasonstringobligatorioMotivo de la solicitud
externalRefstringopcionalObligatorio si el proveedor lo exige
insurerIdstring (uuid)opcionalAseguradora final: solo intermediarios, y entre sus aseguradoras gestionadas
callerNamestringopcionalcallerPhonestringopcional
ProviderVisitTimelineEntryDto
statusstringobligatoriolabelstringobligatorioatstring (date-time)obligatorio
ProviderVisitDetailResponseDto
idstring (uuid)obligatoriocodestringobligatoriostatusstringobligatoriostatusLabelstringobligatorioprioritystringobligatoriooriginstringobligatorioexternalRefstringopcionalpuede ser nullVer campos
idstring (uuid)obligatoriocodestringobligatorionamestringobligatorio
requiredProfessionalstringobligatorioinsurerobjectopcionalpuede ser nullAseguradora final
patientNamestringobligatorioNombre del paciente que envió
addressobjectobligatorioDomicilio (sin coordenadas ni indicaciones de acceso)
serviceDatestringobligatorioscheduledFromstring (date-time)opcionalpuede ser nullscheduledTostring (date-time)opcionalpuede ser nullFin de la cita, calculado: inicio + tiempo estimado
estimatedMinutesnumberobligatorioTiempo estimado de realización, en minutos (puede ampliarse con el aviso en curso)
Ver campos
requestedAtstring (date-time)obligatorioassignedAtstring (date-time)opcionalpuede ser nulldepartedAtstring (date-time)opcionalpuede ser nullarrivedAtstring (date-time)opcionalpuede ser nullfinishedAtstring (date-time)opcionalpuede ser nullcancelledAtstring (date-time)opcionalpuede ser nullinvoicedAtstring (date-time)opcionalpuede ser null
Solo el tipo de unidad, desde la asignación
Ver campos
typestringobligatoriolabelstringobligatorioNunca nombres ni matrículas
outcomestringopcionalpuede ser nullcancellationReasonstringopcionalpuede ser nullcancelledWithChargebooleanobligatoriocancellablebooleanobligatorioSi el proveedor puede cancelarlo ahora (PENDING/ASSIGNED)
reportAvailablebooleanobligatorioSi hay informe asistencial compartido y descargable
invoiceIdstring (uuid)opcionalpuede ser nullcreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorioVer campos
statusstringobligatoriolabelstringobligatorioatstring (date-time)obligatorio
ProviderVisitEtaResponseDto
statusstringobligatorioetaMinutesnumberopcionalpuede ser nullMinutos estimados hasta la llegada; null si no está EN_ROUTE o no hay posición
estimatedArrivalAtstring (date-time)opcionalpuede ser nullHora estimada de llegada
estimatedbooleanobligatoriotrue si es una estimación en línea recta (sin OSRM)
calculatedAtstring (date-time)obligatorio
ProviderCancelVisitDto
reasonstringobligatorio
SandboxAdvanceVisitDto
tostringopcionalEstado destino. Sin él, el siguiente. Pasa por los intermedios, con su webhook cada uno
SandboxResetResponseDto
deletedVisitsnumberopcional
ProviderApiKeyResponseDto
idstring (uuid)obligatorioproviderIdstring (uuid)obligatorionamestringobligatoriokeyPrefixstringobligatorioPrefijo visible: la clave empieza por srd_live_<prefijo>, srd_test<prefijo>_ o (legacy) srd_<prefijo>_
keyFormatstringobligatorioFormato con el que se emitió: live (srd_live_), test (srd_test_) o legacy (srd_<prefijo>_)
scopesarray<string>obligatoriorateLimitPerMinutenumberobligatorioexpiresAtstring (date-time)opcionalpuede ser nulllastUsedAtstring (date-time)opcionalpuede ser nulllastUsedIpstringopcionalpuede ser nullrevokedAtstring (date-time)opcionalpuede ser nullrotatedFromIdstring (uuid)opcionalpuede ser nullcreatedAtstring (date-time)obligatorio
ProviderApiKeyCreatedDto
idstring (uuid)obligatorioproviderIdstring (uuid)obligatorionamestringobligatoriokeyPrefixstringobligatorioPrefijo visible: la clave empieza por srd_live_<prefijo>, srd_test<prefijo>_ o (legacy) srd_<prefijo>_
keyFormatstringobligatorioFormato con el que se emitió: live (srd_live_), test (srd_test_) o legacy (srd_<prefijo>_)
scopesarray<string>obligatoriorateLimitPerMinutenumberobligatorioexpiresAtstring (date-time)opcionalpuede ser nulllastUsedAtstring (date-time)opcionalpuede ser nulllastUsedIpstringopcionalpuede ser nullrevokedAtstring (date-time)opcionalpuede ser nullrotatedFromIdstring (uuid)opcionalpuede ser nullcreatedAtstring (date-time)obligatoriokeystringobligatorioClave completa. Solo se muestra en esta respuesta; guárdala en un gestor de secretos
CreateProviderApiKeyDto
namestringobligatorioscopesarray<string>obligatoriorateLimitPerMinutenumberopcionalPeticiones por minuto (por defecto 60)
expiresAtstringopcionalSin valor, no caduca
ProviderWebhookResponseDto
idstring (uuid)obligatorioproviderIdstring (uuid)obligatoriourlstringobligatorioeventsarray<string>obligatorioactivebooleanobligatoriodescriptionstringopcionalpuede ser nullsecretHintstringobligatorioSolo los últimos caracteres
createdAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
ProviderWebhookWithSecretDto
idstring (uuid)obligatorioproviderIdstring (uuid)obligatoriourlstringobligatorioeventsarray<string>obligatorioactivebooleanobligatoriodescriptionstringopcionalpuede ser nullsecretHintstringobligatorioSolo los últimos caracteres
createdAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatoriosecretstringobligatorioSecreto completo para verificar X-Serad-Signature. Solo en esta respuesta
CreateProviderWebhookDto
urlstringobligatorioeventsarray<string>obligatoriodescriptionstringopcionalsecretstringopcionalSecreto de firma. Si no se indica, se genera (whsec_…) y se devuelve una vez
UpdateProviderWebhookDto
urlstringopcionaleventsarray<string>opcionaldescriptionstringopcionalsecretstringopcionalSecreto de firma. Si no se indica, se genera (whsec_…) y se devuelve una vez
activebooleanopcionalDesactivado no recibe eventos
ProviderWebhookDeliveryDto
idstring (uuid)obligatorioendpointIdstring (uuid)obligatorioeventstringobligatorioeventIdstring (uuid)obligatoriovisitIdstring (uuid)opcionalpuede ser nullstatusstringobligatorioattemptsnumberobligatoriomaxAttemptsnumberobligatoriolastStatusCodenumberopcionalpuede ser nulllastResponsestringopcionalpuede ser nullTruncada a 1000 caracteres
lastErrorstringopcionalpuede ser nulllastAttemptAtstring (date-time)opcionalpuede ser nullnextAttemptAtstring (date-time)opcionalpuede ser nulldeliveredAtstring (date-time)opcionalpuede ser nullisTestbooleanobligatorioredeliveryOfIdstring (uuid)opcionalpuede ser nullpayloadobjectobligatorioCarga enviada (sin datos clínicos)
createdAtstring (date-time)obligatorio
¿Falta algo o algo no cuadra con lo que ves? Escribe al equipo técnico: info@saludenruta.es.
