Referencia
Referencia de la API
La API de Kuida es REST: recibe y devuelve JSON con claves en camelCase, usa los códigos HTTP estándar y se autentica con una clave por organización. Esta referencia tiene 32 operaciones en 9 recursos y se genera del mismo contrato que valida cada pedido.
Versión vigente: 2026-09-28. El contrato completo en OpenAPI 3.1 está en /api/v1/openapi.json. Para empezar, ver Primeros pasos.
https://www.kuida.ar/api/v1Cuenta
Operaciones
Obtener la cuenta
GET/v1/account
La organización dueña de la clave, con sus líneas de servicio y los permisos de la clave. Sirve para probar que la integración está bien configurada.
- Permiso
- cualquier clave válida
- SDK
account.retrieve
Respuesta
200 con un objeto Account. La organización dueña de la clave de API.
› Ver los 8 campos de la respuestaOcultar campos
idstringId de la organización.
objectstringnamestringtypestringTipo de institución (clinic, pharmacy, lab, …).
timeZonestringserviceLinesarray de enumLíneas de servicio contratadas: seguimiento de pacientes y red de derivaciones.
Valores:
follow_upnetworklivemodebooleantrueen producción,falseen el entorno de pruebas.apiKeyobjeto› Ver 3 camposOcultar campos
namestringprefixstringscopesarray de string
curl https://www.kuida.ar/api/v1/account \
-H "Authorization: Bearer kd_test_…"{
"id": "org_cm1a2b3c4d5e6f7g8h9i0j",
"object": "account",
"name": "Institución Demo",
"type": "clinic",
"timeZone": "America/Argentina/Buenos_Aires",
"serviceLines": [
"follow_up"
],
"livemode": false,
"apiKey": {
"name": "Sistema de turnos",
"prefix": "kd_test_0a1b2c3d4e5f",
"scopes": [
"patients:read",
"patients:write"
]
}
}Crear o identificar un paciente
POST/v1/patients
Da de alta a un paciente sin mandarle nada. Si ya existe uno con ese teléfono (o ese DNI), devuelve el existente y completa los datos que le faltaban; nunca pisa datos cargados. Crear un paciente no lo contacta: el contacto lo dispara un turno, una consulta o una solicitud de ingreso.
- Permiso
patients:write- SDK
patients.create- Idempotencia
- Acepta
Idempotency-Key - Línea de servicio
- Requiere la línea de seguimiento de pacientes
Cuerpo
phonestringobligatorioCelular con WhatsApp, en cualquier formato; Kuida lo normaliza.
fullNamestringNombre y apellido.
dnistringDocumento, sin puntos.
emailemailCorreo electrónico.
externalIdstringId del paciente en su sistema.
dateOfBirthfechaFecha ISO 8601 (AAAA-MM-DD).
Respuesta
200 con un objeto Patient. Un paciente de la organización.
› Ver los 12 campos de la respuestaOcultar campos
idstringId del paciente.
objectstringfullNamestringpuede ser nullphonestringpuede ser nullTeléfono normalizado.
emailstringpuede ser nulldnistringpuede ser nullexternalIdstringpuede ser nullId del paciente en su sistema.
dateOfBirthfechapuede ser nullFecha de nacimiento (AAAA-MM-DD).
stageenumEstado básico del paciente en Kuida.
Valores:
pending_follow_upin_conversationscheduledperiodic_follow_updischargedlostoptedOutbooleanSi el paciente pidió no recibir mensajes. Kuida no le escribe.
createdAttimestampFecha y hora ISO 8601.
updatedAttimestampFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/patients \
-H "Authorization: Bearer kd_test_…" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"phone": "+54 9 342 555 0000",
"fullName": "Paciente Demo",
"dni": "11111111",
"externalId": "HC-1234"
}'{
"id": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"object": "patient",
"fullName": "Paciente Demo",
"phone": "+5493425550000",
"email": "paciente.demo@example.com",
"dni": "11111111",
"externalId": "HC-1234",
"dateOfBirth": null,
"stage": "pending_follow_up",
"optedOut": false,
"createdAt": "2026-10-01T17:30:00.000Z",
"updatedAt": "2026-10-01T17:30:00.000Z"
}Obtener un paciente
GET/v1/patients/{id}
Devuelve un paciente por su id.
- Permiso
patients:read- SDK
patients.retrieve
Parámetros de ruta
idstringobligatorioId del objeto.
Respuesta
200 con un objeto Patient. Un paciente de la organización.
› Ver los 12 campos de la respuestaOcultar campos
idstringId del paciente.
objectstringfullNamestringpuede ser nullphonestringpuede ser nullTeléfono normalizado.
emailstringpuede ser nulldnistringpuede ser nullexternalIdstringpuede ser nullId del paciente en su sistema.
dateOfBirthfechapuede ser nullFecha de nacimiento (AAAA-MM-DD).
stageenumEstado básico del paciente en Kuida.
Valores:
pending_follow_upin_conversationscheduledperiodic_follow_updischargedlostoptedOutbooleanSi el paciente pidió no recibir mensajes. Kuida no le escribe.
createdAttimestampFecha y hora ISO 8601.
updatedAttimestampFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/patients/pat_cm1a2b3c4d5e6f7g8h9i0j \
-H "Authorization: Bearer kd_test_…"{
"id": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"object": "patient",
"fullName": "Paciente Demo",
"phone": "+5493425550000",
"email": "paciente.demo@example.com",
"dni": "11111111",
"externalId": "HC-1234",
"dateOfBirth": null,
"stage": "pending_follow_up",
"optedOut": false,
"createdAt": "2026-10-01T17:30:00.000Z",
"updatedAt": "2026-10-01T17:30:00.000Z"
}Actualizar un paciente
PATCH/v1/patients/{id}
Cambia solo los campos que envía. El teléfono no se puede cambiar porque es la identidad del paciente en WhatsApp.
- Permiso
patients:write- SDK
patients.update- Línea de servicio
- Requiere la línea de seguimiento de pacientes
Parámetros de ruta
idstringobligatorioId del objeto.
Cuerpo
Solo cambia lo que envía. El teléfono no se cambia: es la identidad.
fullNamestringemailemaildnistringexternalIdstringdateOfBirthfechaFecha ISO 8601 (AAAA-MM-DD).
Respuesta
200 con un objeto Patient. Un paciente de la organización.
› Ver los 12 campos de la respuestaOcultar campos
idstringId del paciente.
objectstringfullNamestringpuede ser nullphonestringpuede ser nullTeléfono normalizado.
emailstringpuede ser nulldnistringpuede ser nullexternalIdstringpuede ser nullId del paciente en su sistema.
dateOfBirthfechapuede ser nullFecha de nacimiento (AAAA-MM-DD).
stageenumEstado básico del paciente en Kuida.
Valores:
pending_follow_upin_conversationscheduledperiodic_follow_updischargedlostoptedOutbooleanSi el paciente pidió no recibir mensajes. Kuida no le escribe.
createdAttimestampFecha y hora ISO 8601.
updatedAttimestampFecha y hora ISO 8601.
curl -X PATCH https://www.kuida.ar/api/v1/patients/pat_cm1a2b3c4d5e6f7g8h9i0j \
-H "Authorization: Bearer kd_test_…" \
-H "Content-Type: application/json" \
-d '{
"email": "paciente.demo@example.com"
}'{
"id": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"object": "patient",
"fullName": "Paciente Demo",
"phone": "+5493425550000",
"email": "paciente.demo@example.com",
"dni": "11111111",
"externalId": "HC-1234",
"dateOfBirth": null,
"stage": "pending_follow_up",
"optedOut": false,
"createdAt": "2026-10-01T17:30:00.000Z",
"updatedAt": "2026-10-01T17:30:00.000Z"
}Listar pacientes
GET/v1/patients
Pacientes de la organización, del más nuevo al más viejo. Filtre por teléfono, DNI o id externo para buscar uno.
- Permiso
patients:read- SDK
patients.list
Parámetros de consulta
limitintegerCantidad de objetos a devolver, entre 1 y 100. Default 10.
Default:
10startingAfterstringCursor: id del último objeto de la página anterior. Devuelve los siguientes.
endingBeforestringCursor: id del primer objeto de la página actual. Devuelve los anteriores.
phonestringFiltre por teléfono (cualquier formato).
dnistringexternalIdstring
Respuesta
200 con un objeto PatientList. Página de resultados. Siga con startingAfter = id del último.
› Ver los 4 campos de la respuestaOcultar campos
objectstringdataarray de objetosUn paciente de la organización.
› Ver 12 camposOcultar campos
idstringId del paciente.
objectstringfullNamestringpuede ser nullphonestringpuede ser nullTeléfono normalizado.
emailstringpuede ser nulldnistringpuede ser nullexternalIdstringpuede ser nullId del paciente en su sistema.
dateOfBirthfechapuede ser nullFecha de nacimiento (AAAA-MM-DD).
stageenumEstado básico del paciente en Kuida.
Valores:
pending_follow_upin_conversationscheduledperiodic_follow_updischargedlostoptedOutbooleanSi el paciente pidió no recibir mensajes. Kuida no le escribe.
createdAttimestampFecha y hora ISO 8601.
updatedAttimestampFecha y hora ISO 8601.
hasMorebooleanSi hay más objetos después de esta página.
urlstring
curl -G https://www.kuida.ar/api/v1/patients \
-H "Authorization: Bearer kd_test_…" \
-d limit=3{
"object": "list",
"data": [
{
"id": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"object": "patient",
"fullName": "Paciente Demo",
"phone": "+5493425550000",
"email": "paciente.demo@example.com",
"dni": "11111111",
"externalId": "HC-1234",
"dateOfBirth": null,
"stage": "pending_follow_up",
"optedOut": false,
"createdAt": "2026-10-01T17:30:00.000Z",
"updatedAt": "2026-10-01T17:30:00.000Z"
}
],
"hasMore": false,
"url": "/v1/patients"
}Listar profesionales
GET/v1/doctors
El padrón de profesionales de la organización. Lo cura la organización dentro de Kuida; los turnos y consultas que envía lo usan para identificar a quién atiende.
- Permiso
doctors:read- SDK
doctors.list
Parámetros de consulta
limitintegerCantidad de objetos a devolver, entre 1 y 100. Default 10.
Default:
10startingAfterstringCursor: id del último objeto de la página anterior. Devuelve los siguientes.
endingBeforestringCursor: id del primer objeto de la página actual. Devuelve los anteriores.
activeenumFiltre por activos o inactivos.
Valores:
truefalseexternalIdstring
Respuesta
200 con un objeto DoctorList. Página de resultados. Siga con startingAfter = id del último.
› Ver los 4 campos de la respuestaOcultar campos
objectstringdataarray de objetosUn profesional del padrón de la organización.
› Ver 8 camposOcultar campos
idstringId del profesional.
objectstringfullNamestringspecialtystringpuede ser nulllicenseNumberstringpuede ser nullMatrícula.
externalIdstringpuede ser nullactivebooleanSi atiende hoy. Solo los activos reciben turnos del agente.
createdAttimestampFecha y hora ISO 8601.
hasMorebooleanSi hay más objetos después de esta página.
urlstring
curl -G https://www.kuida.ar/api/v1/doctors \
-H "Authorization: Bearer kd_test_…" \
-d limit=3{
"object": "list",
"data": [
{
"id": "doc_cm1a2b3c4d5e6f7g8h9i0j",
"object": "doctor",
"fullName": "Dra. Demo",
"specialty": "Cardiología",
"licenseNumber": "MP 0000",
"externalId": "MED-12",
"active": true,
"createdAt": "2026-10-01T17:30:00.000Z"
}
],
"hasMore": false,
"url": "/v1/doctors"
}Obtener un profesional
GET/v1/doctors/{id}
Devuelve un profesional por su id.
- Permiso
doctors:read- SDK
doctors.retrieve
Parámetros de ruta
idstringobligatorioId del objeto.
Respuesta
200 con un objeto Doctor. Un profesional del padrón de la organización.
› Ver los 8 campos de la respuestaOcultar campos
idstringId del profesional.
objectstringfullNamestringspecialtystringpuede ser nulllicenseNumberstringpuede ser nullMatrícula.
externalIdstringpuede ser nullactivebooleanSi atiende hoy. Solo los activos reciben turnos del agente.
createdAttimestampFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/doctors/doc_cm1a2b3c4d5e6f7g8h9i0j \
-H "Authorization: Bearer kd_test_…"{
"id": "doc_cm1a2b3c4d5e6f7g8h9i0j",
"object": "doctor",
"fullName": "Dra. Demo",
"specialty": "Cardiología",
"licenseNumber": "MP 0000",
"externalId": "MED-12",
"active": true,
"createdAt": "2026-10-01T17:30:00.000Z"
}Crear un turno
POST/v1/appointments
Registra un turno y agenda los recordatorios por WhatsApp que la organización tiene configurados (por ejemplo, 24 y 3 horas antes). Si envía externalId y ya existe un turno con ese id, devuelve ese y no crea otro.
- Permiso
appointments:write- SDK
appointments.create- Idempotencia
- Acepta
Idempotency-Key - Línea de servicio
- Requiere la línea de seguimiento de pacientes
Cuerpo
patientstring u objetoobligatorioUn paciente: su id de Kuida (
pat_…) o los datos con que lo conoce su sistema.› Ver 6 camposOcultar campos
phonestringCelular con WhatsApp, en cualquier formato; Kuida lo normaliza. Es la identidad principal del paciente.
fullNamestringNombre y apellido.
dnistringDocumento, sin puntos.
emailemailCorreo electrónico.
externalIdstringId del paciente en su sistema.
dateOfBirthfechaFecha ISO 8601 (AAAA-MM-DD).
doctorstring u objetoUn profesional: su id de Kuida (
doc_…) o sus datos.› Ver 3 camposOcultar campos
externalIdstringId del profesional en su sistema.
fullNamestringNombre del profesional.
specialtystringEspecialidad.
startAttimestampobligatorioInicio del turno.
typestringTipo de turno o práctica.
externalIdstringId del turno en su sistema. Si ya existe un turno con ese id, se devuelve ese y no se crea otro.
Respuesta
200 con un objeto Appointment. Un turno. Kuida le manda al paciente los recordatorios que la organización configuró.
› Ver los 12 campos de la respuestaOcultar campos
idstringId del turno.
objectstringpatientstringPaciente del turno.
doctorstringpuede ser nullProfesional.
startAttimestampFecha y hora ISO 8601.
statusenumValores:
confirmedpendingrescheduledcancelledcompletedtypestringpuede ser nullTipo de turno o práctica.
externalIdstringpuede ser nullId del turno en su sistema.
sourceenumPor dónde entró: su API, el conector del sistema de gestión, el agente de Kuida o el equipo.
Valores:
apipmsagentmanualcancelledAttimestamppuede ser nullFecha y hora ISO 8601.
createdAttimestampFecha y hora ISO 8601.
updatedAttimestampFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/appointments \
-H "Authorization: Bearer kd_test_…" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"patient": {
"phone": "+54 9 342 555 0000",
"fullName": "Paciente Demo"
},
"doctor": {
"externalId": "MED-12",
"fullName": "Dra. Demo"
},
"startAt": "2026-10-05T10:30:00-03:00",
"type": "Control",
"externalId": "turno-123"
}'{
"id": "apt_cm1a2b3c4d5e6f7g8h9i0j",
"object": "appointment",
"patient": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"doctor": "doc_cm1a2b3c4d5e6f7g8h9i0j",
"startAt": "2026-10-01T17:30:00.000Z",
"status": "confirmed",
"type": "Control",
"externalId": "turno-123",
"source": "api",
"cancelledAt": null,
"createdAt": "2026-10-01T17:30:00.000Z",
"updatedAt": "2026-10-01T17:30:00.000Z"
}Obtener un turno
GET/v1/appointments/{id}
Devuelve un turno por su id.
- Permiso
appointments:read- SDK
appointments.retrieve
Parámetros de ruta
idstringobligatorioId del objeto.
Respuesta
200 con un objeto Appointment. Un turno. Kuida le manda al paciente los recordatorios que la organización configuró.
› Ver los 12 campos de la respuestaOcultar campos
idstringId del turno.
objectstringpatientstringPaciente del turno.
doctorstringpuede ser nullProfesional.
startAttimestampFecha y hora ISO 8601.
statusenumValores:
confirmedpendingrescheduledcancelledcompletedtypestringpuede ser nullTipo de turno o práctica.
externalIdstringpuede ser nullId del turno en su sistema.
sourceenumPor dónde entró: su API, el conector del sistema de gestión, el agente de Kuida o el equipo.
Valores:
apipmsagentmanualcancelledAttimestamppuede ser nullFecha y hora ISO 8601.
createdAttimestampFecha y hora ISO 8601.
updatedAttimestampFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/appointments/apt_cm1a2b3c4d5e6f7g8h9i0j \
-H "Authorization: Bearer kd_test_…"{
"id": "apt_cm1a2b3c4d5e6f7g8h9i0j",
"object": "appointment",
"patient": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"doctor": "doc_cm1a2b3c4d5e6f7g8h9i0j",
"startAt": "2026-10-01T17:30:00.000Z",
"status": "confirmed",
"type": "Control",
"externalId": "turno-123",
"source": "api",
"cancelledAt": null,
"createdAt": "2026-10-01T17:30:00.000Z",
"updatedAt": "2026-10-01T17:30:00.000Z"
}Reprogramar o modificar un turno
PATCH/v1/appointments/{id}
Cambia horario, profesional o tipo. Un horario nuevo mueve los recordatorios pendientes al horario nuevo. Un turno cancelado o atendido no se puede modificar.
- Permiso
appointments:write- SDK
appointments.update- Línea de servicio
- Requiere la línea de seguimiento de pacientes
Parámetros de ruta
idstringobligatorioId del objeto.
Cuerpo
startAttimestampNuevo horario. Reprograma los recordatorios.
doctorstring u objetoUn profesional: su id de Kuida (
doc_…) o sus datos.› Ver 3 camposOcultar campos
externalIdstringId del profesional en su sistema.
fullNamestringNombre del profesional.
specialtystringEspecialidad.
typestring
Respuesta
200 con un objeto Appointment. Un turno. Kuida le manda al paciente los recordatorios que la organización configuró.
› Ver los 12 campos de la respuestaOcultar campos
idstringId del turno.
objectstringpatientstringPaciente del turno.
doctorstringpuede ser nullProfesional.
startAttimestampFecha y hora ISO 8601.
statusenumValores:
confirmedpendingrescheduledcancelledcompletedtypestringpuede ser nullTipo de turno o práctica.
externalIdstringpuede ser nullId del turno en su sistema.
sourceenumPor dónde entró: su API, el conector del sistema de gestión, el agente de Kuida o el equipo.
Valores:
apipmsagentmanualcancelledAttimestamppuede ser nullFecha y hora ISO 8601.
createdAttimestampFecha y hora ISO 8601.
updatedAttimestampFecha y hora ISO 8601.
curl -X PATCH https://www.kuida.ar/api/v1/appointments/apt_cm1a2b3c4d5e6f7g8h9i0j \
-H "Authorization: Bearer kd_test_…" \
-H "Content-Type: application/json" \
-d '{
"startAt": "2026-10-06T11:00:00-03:00"
}'{
"id": "apt_cm1a2b3c4d5e6f7g8h9i0j",
"object": "appointment",
"patient": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"doctor": "doc_cm1a2b3c4d5e6f7g8h9i0j",
"startAt": "2026-10-01T17:30:00.000Z",
"status": "confirmed",
"type": "Control",
"externalId": "turno-123",
"source": "api",
"cancelledAt": null,
"createdAt": "2026-10-01T17:30:00.000Z",
"updatedAt": "2026-10-01T17:30:00.000Z"
}Cancelar un turno
POST/v1/appointments/{id}/cancel
Marca el turno como cancelado y da de baja sus recordatorios pendientes. Cancelar un turno ya cancelado no hace nada.
- Permiso
appointments:write- SDK
appointments.cancel- Idempotencia
- Acepta
Idempotency-Key - Línea de servicio
- Requiere la línea de seguimiento de pacientes
Parámetros de ruta
idstringobligatorioId del objeto.
Cuerpo
reasonstringMotivo, para el registro.
Respuesta
200 con un objeto Appointment. Un turno. Kuida le manda al paciente los recordatorios que la organización configuró.
› Ver los 12 campos de la respuestaOcultar campos
idstringId del turno.
objectstringpatientstringPaciente del turno.
doctorstringpuede ser nullProfesional.
startAttimestampFecha y hora ISO 8601.
statusenumValores:
confirmedpendingrescheduledcancelledcompletedtypestringpuede ser nullTipo de turno o práctica.
externalIdstringpuede ser nullId del turno en su sistema.
sourceenumPor dónde entró: su API, el conector del sistema de gestión, el agente de Kuida o el equipo.
Valores:
apipmsagentmanualcancelledAttimestamppuede ser nullFecha y hora ISO 8601.
createdAttimestampFecha y hora ISO 8601.
updatedAttimestampFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/appointments/apt_cm1a2b3c4d5e6f7g8h9i0j/cancel \
-H "Authorization: Bearer kd_test_…" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"reason": "El paciente pidió cancelar"
}'{
"id": "apt_cm1a2b3c4d5e6f7g8h9i0j",
"object": "appointment",
"patient": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"doctor": "doc_cm1a2b3c4d5e6f7g8h9i0j",
"startAt": "2026-10-01T17:30:00.000Z",
"status": "confirmed",
"type": "Control",
"externalId": "turno-123",
"source": "api",
"cancelledAt": null,
"createdAt": "2026-10-01T17:30:00.000Z",
"updatedAt": "2026-10-01T17:30:00.000Z"
}Listar turnos
GET/v1/appointments
Turnos de la organización, del más nuevo al más viejo según cuándo se cargaron. Filtre por paciente, estado, id externo o rango de horario.
- Permiso
appointments:read- SDK
appointments.list
Parámetros de consulta
limitintegerCantidad de objetos a devolver, entre 1 y 100. Default 10.
Default:
10startingAfterstringCursor: id del último objeto de la página anterior. Devuelve los siguientes.
endingBeforestringCursor: id del primer objeto de la página actual. Devuelve los anteriores.
patientstringId del paciente (
pat_…).statusenumValores:
confirmedpendingrescheduledcancelledcompletedexternalIdstringstartAtGtetimestampTurnos desde esta fecha y hora.
startAtLttimestampTurnos antes de esta fecha y hora.
Respuesta
200 con un objeto AppointmentList. Página de resultados. Siga con startingAfter = id del último.
› Ver los 4 campos de la respuestaOcultar campos
objectstringdataarray de objetosUn turno. Kuida le manda al paciente los recordatorios que la organización configuró.
› Ver 12 camposOcultar campos
idstringId del turno.
objectstringpatientstringPaciente del turno.
doctorstringpuede ser nullProfesional.
startAttimestampFecha y hora ISO 8601.
statusenumValores:
confirmedpendingrescheduledcancelledcompletedtypestringpuede ser nullTipo de turno o práctica.
externalIdstringpuede ser nullId del turno en su sistema.
sourceenumPor dónde entró: su API, el conector del sistema de gestión, el agente de Kuida o el equipo.
Valores:
apipmsagentmanualcancelledAttimestamppuede ser nullFecha y hora ISO 8601.
createdAttimestampFecha y hora ISO 8601.
updatedAttimestampFecha y hora ISO 8601.
hasMorebooleanSi hay más objetos después de esta página.
urlstring
curl -G https://www.kuida.ar/api/v1/appointments \
-H "Authorization: Bearer kd_test_…" \
-d limit=3{
"object": "list",
"data": [
{
"id": "apt_cm1a2b3c4d5e6f7g8h9i0j",
"object": "appointment",
"patient": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"doctor": "doc_cm1a2b3c4d5e6f7g8h9i0j",
"startAt": "2026-10-01T17:30:00.000Z",
"status": "confirmed",
"type": "Control",
"externalId": "turno-123",
"source": "api",
"cancelledAt": null,
"createdAt": "2026-10-01T17:30:00.000Z",
"updatedAt": "2026-10-01T17:30:00.000Z"
}
],
"hasMore": false,
"url": "/v1/appointments"
}Registrar una consulta atendida
POST/v1/visits
Registra que el paciente fue atendido y arranca su seguimiento post-consulta: unas horas después Kuida le escribe por WhatsApp. Si viene de un turno, envíe appointment y el turno queda como atendido. Con externalId repetido devuelve la consulta existente.
- Permiso
visits:write- SDK
visits.create- Idempotencia
- Acepta
Idempotency-Key - Línea de servicio
- Requiere la línea de seguimiento de pacientes
Cuerpo
patientstring u objetoobligatorioUn paciente: su id de Kuida (
pat_…) o los datos con que lo conoce su sistema.› Ver 6 camposOcultar campos
phonestringCelular con WhatsApp, en cualquier formato; Kuida lo normaliza. Es la identidad principal del paciente.
fullNamestringNombre y apellido.
dnistringDocumento, sin puntos.
emailemailCorreo electrónico.
externalIdstringId del paciente en su sistema.
dateOfBirthfechaFecha ISO 8601 (AAAA-MM-DD).
doctorstring u objetoUn profesional: su id de Kuida (
doc_…) o sus datos.› Ver 3 camposOcultar campos
externalIdstringId del profesional en su sistema.
fullNamestringNombre del profesional.
specialtystringEspecialidad.
visitedAttimestampobligatorioCuándo se atendió.
typestringexternalIdstringId de la consulta en su sistema. Si ya existe, se devuelve esa y no se crea otra.
appointmentstringTurno del que sale la consulta: id de Kuida (
apt_…) o elexternalIddel turno. Lo marca como atendido.diagnosisstringnotesstring
Respuesta
200 con un objeto Visit. Una consulta atendida. Crearla arranca el seguimiento post-consulta del paciente.
› Ver los 12 campos de la respuestaOcultar campos
idstringId de la consulta.
objectstringpatientstringPaciente atendido.
doctorstringpuede ser nullProfesional.
appointmentstringpuede ser nullTurno del que salió la consulta.
visitedAttimestampFecha y hora ISO 8601.
typestringpuede ser nulldiagnosisstringpuede ser nullnotesstringpuede ser nullexternalIdstringpuede ser nullsourceenumValores:
pmsmanualcreatedAttimestampFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/visits \
-H "Authorization: Bearer kd_test_…" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"patient": {
"phone": "+54 9 342 555 0000",
"fullName": "Paciente Demo",
"dni": "11111111"
},
"doctor": {
"externalId": "MED-12",
"fullName": "Dra. Demo"
},
"visitedAt": "2026-10-05T10:45:00-03:00",
"type": "Control",
"externalId": "consulta-987",
"appointment": "turno-123"
}'{
"id": "vis_cm1a2b3c4d5e6f7g8h9i0j",
"object": "visit",
"patient": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"doctor": "doc_cm1a2b3c4d5e6f7g8h9i0j",
"appointment": "apt_cm1a2b3c4d5e6f7g8h9i0j",
"visitedAt": "2026-10-01T17:30:00.000Z",
"type": "Consulta",
"diagnosis": null,
"notes": null,
"externalId": "turno-123",
"source": "pms",
"createdAt": "2026-10-01T17:30:00.000Z"
}Obtener una consulta
GET/v1/visits/{id}
Devuelve una consulta por su id.
- Permiso
visits:read- SDK
visits.retrieve
Parámetros de ruta
idstringobligatorioId del objeto.
Respuesta
200 con un objeto Visit. Una consulta atendida. Crearla arranca el seguimiento post-consulta del paciente.
› Ver los 12 campos de la respuestaOcultar campos
idstringId de la consulta.
objectstringpatientstringPaciente atendido.
doctorstringpuede ser nullProfesional.
appointmentstringpuede ser nullTurno del que salió la consulta.
visitedAttimestampFecha y hora ISO 8601.
typestringpuede ser nulldiagnosisstringpuede ser nullnotesstringpuede ser nullexternalIdstringpuede ser nullsourceenumValores:
pmsmanualcreatedAttimestampFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/visits/vis_cm1a2b3c4d5e6f7g8h9i0j \
-H "Authorization: Bearer kd_test_…"{
"id": "vis_cm1a2b3c4d5e6f7g8h9i0j",
"object": "visit",
"patient": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"doctor": "doc_cm1a2b3c4d5e6f7g8h9i0j",
"appointment": "apt_cm1a2b3c4d5e6f7g8h9i0j",
"visitedAt": "2026-10-01T17:30:00.000Z",
"type": "Consulta",
"diagnosis": null,
"notes": null,
"externalId": "turno-123",
"source": "pms",
"createdAt": "2026-10-01T17:30:00.000Z"
}Listar consultas
GET/v1/visits
Consultas registradas, de la más nueva a la más vieja según cuándo se cargaron.
- Permiso
visits:read- SDK
visits.list
Parámetros de consulta
limitintegerCantidad de objetos a devolver, entre 1 y 100. Default 10.
Default:
10startingAfterstringCursor: id del último objeto de la página anterior. Devuelve los siguientes.
endingBeforestringCursor: id del primer objeto de la página actual. Devuelve los anteriores.
patientstringId del paciente (
pat_…).externalIdstring
Respuesta
200 con un objeto VisitList. Página de resultados. Siga con startingAfter = id del último.
› Ver los 4 campos de la respuestaOcultar campos
objectstringdataarray de objetosUna consulta atendida. Crearla arranca el seguimiento post-consulta del paciente.
› Ver 12 camposOcultar campos
idstringId de la consulta.
objectstringpatientstringPaciente atendido.
doctorstringpuede ser nullProfesional.
appointmentstringpuede ser nullTurno del que salió la consulta.
visitedAttimestampFecha y hora ISO 8601.
typestringpuede ser nulldiagnosisstringpuede ser nullnotesstringpuede ser nullexternalIdstringpuede ser nullsourceenumValores:
pmsmanualcreatedAttimestampFecha y hora ISO 8601.
hasMorebooleanSi hay más objetos después de esta página.
urlstring
curl -G https://www.kuida.ar/api/v1/visits \
-H "Authorization: Bearer kd_test_…" \
-d limit=3{
"object": "list",
"data": [
{
"id": "vis_cm1a2b3c4d5e6f7g8h9i0j",
"object": "visit",
"patient": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"doctor": "doc_cm1a2b3c4d5e6f7g8h9i0j",
"appointment": "apt_cm1a2b3c4d5e6f7g8h9i0j",
"visitedAt": "2026-10-01T17:30:00.000Z",
"type": "Consulta",
"diagnosis": null,
"notes": null,
"externalId": "turno-123",
"source": "pms",
"createdAt": "2026-10-01T17:30:00.000Z"
}
],
"hasMore": false,
"url": "/v1/visits"
}Crear una solicitud de ingreso
POST/v1/intake_requests
Alguien pide el servicio para un paciente. Kuida registra la solicitud, identifica al paciente y a sus referentes y, si la organización lo configuró, le escribe por WhatsApp para completar lo que falta (missing). Cuando queda completa pasa a ready y se dispara el webhook intake.ready.
- Permiso
intake_requests:write- SDK
intake_requests.create- Idempotencia
- Acepta
Idempotency-Key - Línea de servicio
- Requiere la línea de seguimiento de pacientes
Cuerpo
Hace falta al menos un dato del paciente o de un referente (nombre, documento o teléfono).
patientobjetoCómo conoce su sistema al paciente. Kuida lo busca por teléfono y después por DNI; si no existe, lo crea.
› Ver 6 camposOcultar campos
phonestringCelular con WhatsApp, en cualquier formato; Kuida lo normaliza. Es la identidad principal del paciente.
fullNamestringNombre y apellido.
dnistringDocumento, sin puntos.
emailemailCorreo electrónico.
externalIdstringId del paciente en su sistema.
dateOfBirthfechaFecha ISO 8601 (AAAA-MM-DD).
contactsarray de objetosUn referente del paciente (familiar, cuidador).
› Ver 4 camposOcultar campos
namestringrelationshipstringphonestringemailemail
coverageobjeto› Ver 3 camposOcultar campos
insurerstringObra social o prepaga.
planstringmemberIdstringNúmero de afiliado.
addressstringrequestedServicestringsummarystringResumen administrativo del pedido, sin contenido clínico.
hospitalizedbooleanSi el paciente está internado hoy.
senderobjetoQuién pide el servicio.
› Ver 3 camposOcultar campos
namestringemailemailorganizationstring
Respuesta
200 con un objeto IntakeRequest. Una solicitud de ingreso: alguien pide el servicio para un paciente y Kuida completa lo que falta.
› Ver los 13 campos de la respuestaOcultar campos
idstringId de la solicitud.
objectstringstatusenumnewrecién llegada ·validatingKuida está completando datos por WhatsApp ·readycompleta ·loadedcargada en el sistema de la organización ·discardeddescartada.Valores:
newvalidatingreadyloadeddiscardedpatientstringpuede ser nullPaciente, cuando ya se pudo identificar.
summarystringpuede ser nullmissingarray de stringDatos que todavía faltan para que la solicitud quede lista.
dataobjetoLos datos de la solicitud tal como los tiene Kuida.
discardReasonstringpuede ser nullreadyAttimestamppuede ser nullFecha y hora ISO 8601.
loadedAttimestamppuede ser nullFecha y hora ISO 8601.
closedAttimestamppuede ser nullFecha y hora ISO 8601.
createdAttimestampFecha y hora ISO 8601.
updatedAttimestampFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/intake_requests \
-H "Authorization: Bearer kd_test_…" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"patient": {
"fullName": "Paciente Demo",
"dni": "11111111"
},
"contacts": [
{
"name": "Familiar Demo",
"relationship": "hija",
"phone": "+54 9 342 555 0001"
}
],
"coverage": {
"insurer": "OSDEMO",
"memberId": "000123"
},
"requestedService": "Internación domiciliaria",
"summary": "Alta sanatorial prevista para el viernes; requiere enfermería diaria.",
"hospitalized": true
}'{
"id": "int_cm1a2b3c4d5e6f7g8h9i0j",
"object": "intake_request",
"status": "new",
"patient": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"summary": "Pedido de internación domiciliaria",
"missing": [],
"data": {},
"discardReason": null,
"readyAt": null,
"loadedAt": null,
"closedAt": null,
"createdAt": "2026-10-01T17:30:00.000Z",
"updatedAt": "2026-10-01T17:30:00.000Z"
}Obtener una solicitud de ingreso
GET/v1/intake_requests/{id}
Devuelve una solicitud con su estado y lo que todavía falta.
- Permiso
intake_requests:read- SDK
intake_requests.retrieve
Parámetros de ruta
idstringobligatorioId del objeto.
Respuesta
200 con un objeto IntakeRequest. Una solicitud de ingreso: alguien pide el servicio para un paciente y Kuida completa lo que falta.
› Ver los 13 campos de la respuestaOcultar campos
idstringId de la solicitud.
objectstringstatusenumnewrecién llegada ·validatingKuida está completando datos por WhatsApp ·readycompleta ·loadedcargada en el sistema de la organización ·discardeddescartada.Valores:
newvalidatingreadyloadeddiscardedpatientstringpuede ser nullPaciente, cuando ya se pudo identificar.
summarystringpuede ser nullmissingarray de stringDatos que todavía faltan para que la solicitud quede lista.
dataobjetoLos datos de la solicitud tal como los tiene Kuida.
discardReasonstringpuede ser nullreadyAttimestamppuede ser nullFecha y hora ISO 8601.
loadedAttimestamppuede ser nullFecha y hora ISO 8601.
closedAttimestamppuede ser nullFecha y hora ISO 8601.
createdAttimestampFecha y hora ISO 8601.
updatedAttimestampFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/intake_requests/int_cm1a2b3c4d5e6f7g8h9i0j \
-H "Authorization: Bearer kd_test_…"{
"id": "int_cm1a2b3c4d5e6f7g8h9i0j",
"object": "intake_request",
"status": "new",
"patient": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"summary": "Pedido de internación domiciliaria",
"missing": [],
"data": {},
"discardReason": null,
"readyAt": null,
"loadedAt": null,
"closedAt": null,
"createdAt": "2026-10-01T17:30:00.000Z",
"updatedAt": "2026-10-01T17:30:00.000Z"
}Listar solicitudes de ingreso
GET/v1/intake_requests
Solicitudes de la organización, de la más nueva a la más vieja.
- Permiso
intake_requests:read- SDK
intake_requests.list
Parámetros de consulta
limitintegerCantidad de objetos a devolver, entre 1 y 100. Default 10.
Default:
10startingAfterstringCursor: id del último objeto de la página anterior. Devuelve los siguientes.
endingBeforestringCursor: id del primer objeto de la página actual. Devuelve los anteriores.
statusenumValores:
newvalidatingreadyloadeddiscardedpatientstring
Respuesta
200 con un objeto IntakeRequestList. Página de resultados. Siga con startingAfter = id del último.
› Ver los 4 campos de la respuestaOcultar campos
objectstringdataarray de objetosUna solicitud de ingreso: alguien pide el servicio para un paciente y Kuida completa lo que falta.
› Ver 13 camposOcultar campos
idstringId de la solicitud.
objectstringstatusenumnewrecién llegada ·validatingKuida está completando datos por WhatsApp ·readycompleta ·loadedcargada en el sistema de la organización ·discardeddescartada.Valores:
newvalidatingreadyloadeddiscardedpatientstringpuede ser nullPaciente, cuando ya se pudo identificar.
summarystringpuede ser nullmissingarray de stringDatos que todavía faltan para que la solicitud quede lista.
dataobjetoLos datos de la solicitud tal como los tiene Kuida.
discardReasonstringpuede ser nullreadyAttimestamppuede ser nullFecha y hora ISO 8601.
loadedAttimestamppuede ser nullFecha y hora ISO 8601.
closedAttimestamppuede ser nullFecha y hora ISO 8601.
createdAttimestampFecha y hora ISO 8601.
updatedAttimestampFecha y hora ISO 8601.
hasMorebooleanSi hay más objetos después de esta página.
urlstring
curl -G https://www.kuida.ar/api/v1/intake_requests \
-H "Authorization: Bearer kd_test_…" \
-d limit=3{
"object": "list",
"data": [
{
"id": "int_cm1a2b3c4d5e6f7g8h9i0j",
"object": "intake_request",
"status": "new",
"patient": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"summary": "Pedido de internación domiciliaria",
"missing": [],
"data": {},
"discardReason": null,
"readyAt": null,
"loadedAt": null,
"closedAt": null,
"createdAt": "2026-10-01T17:30:00.000Z",
"updatedAt": "2026-10-01T17:30:00.000Z"
}
],
"hasMore": false,
"url": "/v1/intake_requests"
}Registrar un tratamiento
POST/v1/treatments
Registra un tratamiento indicado al paciente. Queda en su ficha y el agente lo tiene en cuenta en la conversación. Kuida no envía recordatorios de toma de medicación.
- Permiso
treatments:write- SDK
treatments.create- Idempotencia
- Acepta
Idempotency-Key - Línea de servicio
- Requiere la línea de seguimiento de pacientes
Cuerpo
patientstring u objetoobligatorioUn paciente: su id de Kuida (
pat_…) o los datos con que lo conoce su sistema.› Ver 6 camposOcultar campos
phonestringCelular con WhatsApp, en cualquier formato; Kuida lo normaliza. Es la identidad principal del paciente.
fullNamestringNombre y apellido.
dnistringDocumento, sin puntos.
emailemailCorreo electrónico.
externalIdstringId del paciente en su sistema.
dateOfBirthfechaFecha ISO 8601 (AAAA-MM-DD).
namestringobligatoriokindenumDefault
medication.Valores:
medicationtherapydietstudylabworklifestyledosagestringfrequencystringinstructionsstringstartDatetimestampFecha y hora ISO 8601.
endDatetimestampFecha y hora ISO 8601.
Respuesta
200 con un objeto Treatment. Un tratamiento indicado al paciente.
› Ver los 13 campos de la respuestaOcultar campos
idstringId del tratamiento.
objectstringpatientstringPaciente.
kindenumValores:
medicationtherapydietstudylabworklifestylenamestringdosagestringpuede ser nullfrequencystringpuede ser nullinstructionsstringpuede ser nullstartDatetimestamppuede ser nullFecha y hora ISO 8601.
endDatetimestamppuede ser nullFecha y hora ISO 8601.
activebooleancreatedAttimestampFecha y hora ISO 8601.
updatedAttimestampFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/treatments \
-H "Authorization: Bearer kd_test_…" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"patient": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"name": "Enalapril 10 mg",
"dosage": "1 comprimido",
"frequency": "cada 12 horas",
"startDate": "2026-10-05T00:00:00-03:00"
}'{
"id": "trt_cm1a2b3c4d5e6f7g8h9i0j",
"object": "treatment",
"patient": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"kind": "medication",
"name": "Enalapril 10 mg",
"dosage": "10 mg",
"frequency": "cada 12 horas",
"instructions": null,
"startDate": "2026-10-01T17:30:00.000Z",
"endDate": null,
"active": true,
"createdAt": "2026-10-01T17:30:00.000Z",
"updatedAt": "2026-10-01T17:30:00.000Z"
}Obtener un tratamiento
GET/v1/treatments/{id}
Devuelve un tratamiento por su id.
- Permiso
treatments:read- SDK
treatments.retrieve
Parámetros de ruta
idstringobligatorioId del objeto.
Respuesta
200 con un objeto Treatment. Un tratamiento indicado al paciente.
› Ver los 13 campos de la respuestaOcultar campos
idstringId del tratamiento.
objectstringpatientstringPaciente.
kindenumValores:
medicationtherapydietstudylabworklifestylenamestringdosagestringpuede ser nullfrequencystringpuede ser nullinstructionsstringpuede ser nullstartDatetimestamppuede ser nullFecha y hora ISO 8601.
endDatetimestamppuede ser nullFecha y hora ISO 8601.
activebooleancreatedAttimestampFecha y hora ISO 8601.
updatedAttimestampFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/treatments/trt_cm1a2b3c4d5e6f7g8h9i0j \
-H "Authorization: Bearer kd_test_…"{
"id": "trt_cm1a2b3c4d5e6f7g8h9i0j",
"object": "treatment",
"patient": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"kind": "medication",
"name": "Enalapril 10 mg",
"dosage": "10 mg",
"frequency": "cada 12 horas",
"instructions": null,
"startDate": "2026-10-01T17:30:00.000Z",
"endDate": null,
"active": true,
"createdAt": "2026-10-01T17:30:00.000Z",
"updatedAt": "2026-10-01T17:30:00.000Z"
}Listar tratamientos
GET/v1/treatments
Tratamientos registrados, del más nuevo al más viejo.
- Permiso
treatments:read- SDK
treatments.list
Parámetros de consulta
limitintegerCantidad de objetos a devolver, entre 1 y 100. Default 10.
Default:
10startingAfterstringCursor: id del último objeto de la página anterior. Devuelve los siguientes.
endingBeforestringCursor: id del primer objeto de la página actual. Devuelve los anteriores.
patientstringactiveenumValores:
truefalse
Respuesta
200 con un objeto TreatmentList. Página de resultados. Siga con startingAfter = id del último.
› Ver los 4 campos de la respuestaOcultar campos
objectstringdataarray de objetosUn tratamiento indicado al paciente.
› Ver 13 camposOcultar campos
idstringId del tratamiento.
objectstringpatientstringPaciente.
kindenumValores:
medicationtherapydietstudylabworklifestylenamestringdosagestringpuede ser nullfrequencystringpuede ser nullinstructionsstringpuede ser nullstartDatetimestamppuede ser nullFecha y hora ISO 8601.
endDatetimestamppuede ser nullFecha y hora ISO 8601.
activebooleancreatedAttimestampFecha y hora ISO 8601.
updatedAttimestampFecha y hora ISO 8601.
hasMorebooleanSi hay más objetos después de esta página.
urlstring
curl -G https://www.kuida.ar/api/v1/treatments \
-H "Authorization: Bearer kd_test_…" \
-d limit=3{
"object": "list",
"data": [
{
"id": "trt_cm1a2b3c4d5e6f7g8h9i0j",
"object": "treatment",
"patient": "pat_cm1a2b3c4d5e6f7g8h9i0j",
"kind": "medication",
"name": "Enalapril 10 mg",
"dosage": "10 mg",
"frequency": "cada 12 horas",
"instructions": null,
"startDate": "2026-10-01T17:30:00.000Z",
"endDate": null,
"active": true,
"createdAt": "2026-10-01T17:30:00.000Z",
"updatedAt": "2026-10-01T17:30:00.000Z"
}
],
"hasMore": false,
"url": "/v1/treatments"
}Enviar eventos
POST/v1/events
La puerta genérica: su sistema avisa lo que pasó con el sobre común y Kuida reacciona. Acepta un evento o un lote de hasta 100. Cada evento se procesa por separado y trae su propio resultado; el status HTTP es 200 si al menos uno se aceptó. Si ninguno entró, responde el error de siempre (400 si todos fallaron por esquema, 500 si fallaron al procesarse) y además results con el detalle de cada evento. Los recursos (/v1/visits, /v1/appointments, …) hacen lo mismo con una forma más cómoda.
- Permiso
events:write- SDK
events.create- Idempotencia
- Acepta
Idempotency-Key - Línea de servicio
- Requiere la línea de seguimiento de pacientes
Cuerpo
Un evento, un array de hasta 100 o { events: [...] }.
idstringobligatorioSu id del evento. Es la clave de idempotencia: reenviar el mismo id no repite nada.
schemaVersionnumberVersión del esquema del evento. Siempre 1 en v1.
Default:
1occurredAttimestampCuándo pasó. Default: ahora.
sourceobjetoQué sistema lo emite, para el registro.
› Ver 2 camposOcultar campos
systemstringversionstring
typeenumobligatorioTipo de evento. Define la forma de
data.Valores:
intake.requestedpatient.upsertedappointment.createdappointment.rescheduledappointment.cancelledvisit.completedtreatment.prescribedorder.issueddataobjetoobligatorioSu forma depende de
type: ver el catálogo de eventos.
Respuesta
200 con un objeto EventBatchResponse. Un resultado por evento, en el mismo orden.
› Ver los 2 campos de la respuestaOcultar campos
objectstringresultsarray de objetos› Ver 6 camposOcultar campos
idstringEl id que envió.
acceptedbooleanstatusenumValores:
processedduplicateunhandledinvalidfailedeventstringpuede ser nullId del evento en Kuida (
evt_…).resultobjetopuede ser null› Ver 2 camposOcultar campos
objectstringidstring
errorstringpuede ser null
curl https://www.kuida.ar/api/v1/events \
-H "Authorization: Bearer kd_test_…" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"id": "turno-123-atendido",
"type": "visit.completed",
"occurredAt": "2026-10-05T10:45:00-03:00",
"source": {
"system": "mi-sistema",
"version": "3.2"
},
"data": {
"patient": {
"phone": "+54 9 342 555 0000",
"fullName": "Paciente Demo",
"dni": "11111111"
},
"visit": {
"visitedAt": "2026-10-05T10:45:00-03:00",
"externalId": "turno-123"
}
}
}'{
"object": "event_batch",
"results": [
{
"id": "turno-123-atendido",
"accepted": true,
"status": "processed",
"event": "evt_cm1a2b3c4d5e6f7g8h9i0j",
"result": {
"object": "visit",
"id": "vis_cm1a2b3c4d5e6f7g8h9i0j"
},
"error": null
}
]
}Obtener un evento
GET/v1/events/{id}
Un evento que entró a Kuida, con su estado y lo que produjo.
- Permiso
events:read- SDK
events.retrieve
Parámetros de ruta
idstringobligatorioId del objeto.
Respuesta
200 con un objeto Event. Un evento que entró a Kuida, con su resultado.
› Ver los 12 campos de la respuestaOcultar campos
idstringId del evento en Kuida.
objectstringtypeenumValores:
intake.requestedpatient.upsertedappointment.createdappointment.rescheduledappointment.cancelledvisit.completedtreatment.prescribedorder.issuedsourceenumPor dónde entró.
Valores:
apipmsemailtoolmanualimportsourceRefstringIdentidad del evento en su fuente. Para la API, el
idque envió.statusenumprocessedKuida hizo lo suyo ·unhandledguardado, sin efecto todavía ·failedfalló, reintente con el mismo id ·duplicate·receiveden curso.Valores:
receivedprocessedfailedduplicateunhandlederrorstringpuede ser nullresultobjetopuede ser nullLo que produjo el evento (
{ object: "visit", id: "vis_…" }).› Ver 2 camposOcultar campos
objectstringidstring
dataobjetooccurredAttimestampFecha y hora ISO 8601.
receivedAttimestampFecha y hora ISO 8601.
processedAttimestamppuede ser nullFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/events/evt_cm1a2b3c4d5e6f7g8h9i0j \
-H "Authorization: Bearer kd_test_…"{
"id": "evt_cm1a2b3c4d5e6f7g8h9i0j",
"object": "event",
"type": "intake.requested",
"source": "api",
"sourceRef": "turno-123-atendido",
"status": "received",
"error": null,
"result": {
"object": "visit",
"id": "vis_cm1a2b3c4d5e6f7g8h9i0j"
},
"data": {},
"occurredAt": "2026-10-01T17:30:00.000Z",
"receivedAt": "2026-10-01T17:30:00.000Z",
"processedAt": null
}Listar eventos
GET/v1/events
Todo lo que entró a Kuida para la organización (por la API, el conector, el correo), del más nuevo al más viejo. Sirve para depurar una integración: filtre por status=failed.
- Permiso
events:read- SDK
events.list
Parámetros de consulta
limitintegerCantidad de objetos a devolver, entre 1 y 100. Default 10.
Default:
10startingAfterstringCursor: id del último objeto de la página anterior. Devuelve los siguientes.
endingBeforestringCursor: id del primer objeto de la página actual. Devuelve los anteriores.
typeenumValores:
intake.requestedpatient.upsertedappointment.createdappointment.rescheduledappointment.cancelledvisit.completedtreatment.prescribedorder.issuedstatusenumValores:
receivedprocessedfailedduplicateunhandledsourceenumValores:
apipmsemailtoolmanualimport
Respuesta
200 con un objeto EventList. Página de resultados. Siga con startingAfter = id del último.
› Ver los 4 campos de la respuestaOcultar campos
objectstringdataarray de objetosUn evento que entró a Kuida, con su resultado.
› Ver 12 camposOcultar campos
idstringId del evento en Kuida.
objectstringtypeenumValores:
intake.requestedpatient.upsertedappointment.createdappointment.rescheduledappointment.cancelledvisit.completedtreatment.prescribedorder.issuedsourceenumPor dónde entró.
Valores:
apipmsemailtoolmanualimportsourceRefstringIdentidad del evento en su fuente. Para la API, el
idque envió.statusenumprocessedKuida hizo lo suyo ·unhandledguardado, sin efecto todavía ·failedfalló, reintente con el mismo id ·duplicate·receiveden curso.Valores:
receivedprocessedfailedduplicateunhandlederrorstringpuede ser nullresultobjetopuede ser nullLo que produjo el evento (
{ object: "visit", id: "vis_…" }).› Ver 2 camposOcultar campos
objectstringidstring
dataobjetooccurredAttimestampFecha y hora ISO 8601.
receivedAttimestampFecha y hora ISO 8601.
processedAttimestamppuede ser nullFecha y hora ISO 8601.
hasMorebooleanSi hay más objetos después de esta página.
urlstring
curl -G https://www.kuida.ar/api/v1/events \
-H "Authorization: Bearer kd_test_…" \
-d limit=3{
"object": "list",
"data": [
{
"id": "evt_cm1a2b3c4d5e6f7g8h9i0j",
"object": "event",
"type": "intake.requested",
"source": "api",
"sourceRef": "turno-123-atendido",
"status": "received",
"error": null,
"result": {
"object": "visit",
"id": "vis_cm1a2b3c4d5e6f7g8h9i0j"
},
"data": {},
"occurredAt": "2026-10-01T17:30:00.000Z",
"receivedAt": "2026-10-01T17:30:00.000Z",
"processedAt": null
}
],
"hasMore": false,
"url": "/v1/events"
}Crear un endpoint de webhooks
POST/v1/webhook_endpoints
Registra una URL de su sistema para recibir eventos de Kuida. La respuesta trae el secret para verificar la firma: guárdelo, no se vuelve a mostrar.
- Permiso
webhooks:write- SDK
webhook_endpoints.create- Idempotencia
- Acepta
Idempotency-Key
Cuerpo
urlurlobligatorioURL https de su sistema.
enabledEventsarray de enumobligatorioQué eventos quiere recibir.
*= todos.Valores:
intake.requestedpatient.upsertedappointment.createdappointment.rescheduledappointment.cancelledvisit.completedtreatment.prescribedorder.issuedintake.createdintake.readyconversation.handoffpatient.silentwebhook.ping*descriptionstring
Respuesta
200 con un objeto WebhookEndpoint. Una URL de su sistema a la que Kuida le avisa lo que pasa.
› Ver los 10 campos de la respuestaOcultar campos
idstringId del endpoint.
objectstringurlstringdescriptionstringpuede ser nullenabledEventsarray de stringTipos de evento que recibe.
*= todos.statusenumValores:
enableddisabledsecretstringSecreto para verificar la firma (
whsec_…). Solo viene en la respuesta de creación.lastDeliveredAttimestamppuede ser nullFecha y hora ISO 8601.
lastErrorobjetopuede ser null› Ver 2 camposOcultar campos
attimestampFecha y hora ISO 8601.
messagestring
createdAttimestampFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/webhook_endpoints \
-H "Authorization: Bearer kd_test_…" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"url": "https://sistema.example/kuida/webhooks",
"enabledEvents": [
"intake.ready",
"intake.created"
],
"description": "Sistema de admisión"
}'{
"id": "we_cm1a2b3c4d5e6f7g8h9i0j",
"object": "webhook_endpoint",
"url": "https://sistema.example/kuida/webhooks",
"description": "Sistema de admisión",
"enabledEvents": [
"intake.ready",
"intake.created"
],
"status": "enabled",
"secret": "whsec_…",
"lastDeliveredAt": null,
"lastError": null,
"createdAt": "2026-10-01T17:30:00.000Z"
}Obtener un endpoint de webhooks
GET/v1/webhook_endpoints/{id}
Devuelve un endpoint, sin el secreto.
- Permiso
webhooks:read- SDK
webhook_endpoints.retrieve
Parámetros de ruta
idstringobligatorioId del objeto.
Respuesta
200 con un objeto WebhookEndpoint. Una URL de su sistema a la que Kuida le avisa lo que pasa.
› Ver los 10 campos de la respuestaOcultar campos
idstringId del endpoint.
objectstringurlstringdescriptionstringpuede ser nullenabledEventsarray de stringTipos de evento que recibe.
*= todos.statusenumValores:
enableddisabledsecretstringSecreto para verificar la firma (
whsec_…). Solo viene en la respuesta de creación.lastDeliveredAttimestamppuede ser nullFecha y hora ISO 8601.
lastErrorobjetopuede ser null› Ver 2 camposOcultar campos
attimestampFecha y hora ISO 8601.
messagestring
createdAttimestampFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/webhook_endpoints/we_cm1a2b3c4d5e6f7g8h9i0j \
-H "Authorization: Bearer kd_test_…"{
"id": "we_cm1a2b3c4d5e6f7g8h9i0j",
"object": "webhook_endpoint",
"url": "https://sistema.example/kuida/webhooks",
"description": "Sistema de admisión",
"enabledEvents": [
"intake.ready",
"intake.created"
],
"status": "enabled",
"secret": "whsec_…",
"lastDeliveredAt": null,
"lastError": null,
"createdAt": "2026-10-01T17:30:00.000Z"
}Actualizar un endpoint de webhooks
PATCH/v1/webhook_endpoints/{id}
Cambia URL, eventos o descripción, o lo pausa con disabled: true.
- Permiso
webhooks:write- SDK
webhook_endpoints.update
Parámetros de ruta
idstringobligatorioId del objeto.
Cuerpo
urlurlenabledEventsarray de enumValores:
intake.requestedpatient.upsertedappointment.createdappointment.rescheduledappointment.cancelledvisit.completedtreatment.prescribedorder.issuedintake.createdintake.readyconversation.handoffpatient.silentwebhook.ping*descriptionstringdisabledbooleantruepausa los envíos sin borrar el endpoint.
Respuesta
200 con un objeto WebhookEndpoint. Una URL de su sistema a la que Kuida le avisa lo que pasa.
› Ver los 10 campos de la respuestaOcultar campos
idstringId del endpoint.
objectstringurlstringdescriptionstringpuede ser nullenabledEventsarray de stringTipos de evento que recibe.
*= todos.statusenumValores:
enableddisabledsecretstringSecreto para verificar la firma (
whsec_…). Solo viene en la respuesta de creación.lastDeliveredAttimestamppuede ser nullFecha y hora ISO 8601.
lastErrorobjetopuede ser null› Ver 2 camposOcultar campos
attimestampFecha y hora ISO 8601.
messagestring
createdAttimestampFecha y hora ISO 8601.
curl -X PATCH https://www.kuida.ar/api/v1/webhook_endpoints/we_cm1a2b3c4d5e6f7g8h9i0j \
-H "Authorization: Bearer kd_test_…" \
-H "Content-Type: application/json" \
-d '{
"enabledEvents": [
"*"
]
}'{
"id": "we_cm1a2b3c4d5e6f7g8h9i0j",
"object": "webhook_endpoint",
"url": "https://sistema.example/kuida/webhooks",
"description": "Sistema de admisión",
"enabledEvents": [
"intake.ready",
"intake.created"
],
"status": "enabled",
"secret": "whsec_…",
"lastDeliveredAt": null,
"lastError": null,
"createdAt": "2026-10-01T17:30:00.000Z"
}Borrar un endpoint de webhooks
DELETE/v1/webhook_endpoints/{id}
Lo borra con su historial de entregas. Las entregas pendientes se cancelan.
- Permiso
webhooks:write- SDK
webhook_endpoints.delete
Parámetros de ruta
idstringobligatorioId del objeto.
Respuesta
200 con un objeto DeletedObject. Confirmación de un borrado.
› Ver los 3 campos de la respuestaOcultar campos
idstringobjectstringdeletedstring
curl -X DELETE https://www.kuida.ar/api/v1/webhook_endpoints/we_cm1a2b3c4d5e6f7g8h9i0j \
-H "Authorization: Bearer kd_test_…"{
"id": "…",
"object": "…",
"deleted": true
}Listar endpoints de webhooks
GET/v1/webhook_endpoints
Los endpoints de la organización, del más nuevo al más viejo.
- Permiso
webhooks:read- SDK
webhook_endpoints.list
Parámetros de consulta
limitintegerDefault:
10startingAfterstringendingBeforestring
Respuesta
200 con un objeto WebhookEndpointList. Página de resultados. Siga con startingAfter = id del último.
› Ver los 4 campos de la respuestaOcultar campos
objectstringdataarray de objetosUna URL de su sistema a la que Kuida le avisa lo que pasa.
› Ver 10 camposOcultar campos
idstringId del endpoint.
objectstringurlstringdescriptionstringpuede ser nullenabledEventsarray de stringTipos de evento que recibe.
*= todos.statusenumValores:
enableddisabledsecretstringSecreto para verificar la firma (
whsec_…). Solo viene en la respuesta de creación.lastDeliveredAttimestamppuede ser nullFecha y hora ISO 8601.
lastErrorobjetopuede ser null› Ver 2 camposOcultar campos
attimestampFecha y hora ISO 8601.
messagestring
createdAttimestampFecha y hora ISO 8601.
hasMorebooleanSi hay más objetos después de esta página.
urlstring
curl -G https://www.kuida.ar/api/v1/webhook_endpoints \
-H "Authorization: Bearer kd_test_…" \
-d limit=3{
"object": "list",
"data": [
{
"id": "we_cm1a2b3c4d5e6f7g8h9i0j",
"object": "webhook_endpoint",
"url": "https://sistema.example/kuida/webhooks",
"description": "Sistema de admisión",
"enabledEvents": [
"intake.ready",
"intake.created"
],
"status": "enabled",
"secret": "whsec_…",
"lastDeliveredAt": null,
"lastError": null,
"createdAt": "2026-10-01T17:30:00.000Z"
}
],
"hasMore": false,
"url": "/v1/webhook_endpoints"
}Mandar un evento de prueba
POST/v1/webhook_endpoints/{id}/ping
Encola un evento webhook.ping firmado hacia el endpoint, con los mismos reintentos que uno real. Siga la entrega con GET /v1/webhook_deliveries/{id}.
- Permiso
webhooks:write- SDK
webhook_endpoints.ping- Idempotencia
- Acepta
Idempotency-Key
Parámetros de ruta
idstringobligatorioId del objeto.
Respuesta
200 con un objeto WebhookDelivery. Un envío de webhook con sus reintentos.
› Ver los 12 campos de la respuestaOcultar campos
idstringId de la entrega.
objectstringwebhookEndpointstringEndpoint destino.
eventTypestringstatusenumpendingen curso o esperando reintento ·succeededsu endpoint respondió 2xx ·failedse agotaron los reintentos.Valores:
pendingsucceededfailedattemptsintegerlastStatusCodeintegerpuede ser nulllastErrorstringpuede ser nullnextAttemptAttimestamppuede ser nullFecha y hora ISO 8601.
deliveredAttimestamppuede ser nullFecha y hora ISO 8601.
payloadobjetoEl cuerpo exacto que se envió.
createdAttimestampFecha y hora ISO 8601.
curl -X POST https://www.kuida.ar/api/v1/webhook_endpoints/we_cm1a2b3c4d5e6f7g8h9i0j/ping \
-H "Authorization: Bearer kd_test_…" \
-H "Idempotency-Key: $(uuidgen)"{
"id": "whd_cm1a2b3c4d5e6f7g8h9i0j",
"object": "webhook_delivery",
"webhookEndpoint": "we_cm1a2b3c4d5e6f7g8h9i0j",
"eventType": "intake.ready",
"status": "succeeded",
"attempts": 1,
"lastStatusCode": 200,
"lastError": null,
"nextAttemptAt": null,
"deliveredAt": "2026-10-01T17:30:01.000Z",
"payload": {
"id": "whd_cm1a2b3c4d5e6f7g8h9i0j",
"object": "event",
"type": "intake.ready",
"apiVersion": "2026-09-28",
"livemode": false,
"occurredAt": "2026-10-01T17:30:00.000Z",
"ref": "cm1a2b3c4d5e6f7g8h9i0j",
"data": {}
},
"createdAt": "2026-10-01T17:30:00.000Z"
}Listar entregas de webhooks
GET/v1/webhook_deliveries
Cada envío a sus endpoints con sus intentos. Filtre por endpoint o por status=failed para ver qué no llegó.
- Permiso
webhooks:read- SDK
webhook_deliveries.list
Parámetros de consulta
limitintegerCantidad de objetos a devolver, entre 1 y 100. Default 10.
Default:
10startingAfterstringCursor: id del último objeto de la página anterior. Devuelve los siguientes.
endingBeforestringCursor: id del primer objeto de la página actual. Devuelve los anteriores.
webhookEndpointstringId del endpoint (
we_…).statusenumValores:
pendingsucceededfailed
Respuesta
200 con un objeto WebhookDeliveryList. Página de resultados. Siga con startingAfter = id del último.
› Ver los 4 campos de la respuestaOcultar campos
objectstringdataarray de objetosUn envío de webhook con sus reintentos.
› Ver 12 camposOcultar campos
idstringId de la entrega.
objectstringwebhookEndpointstringEndpoint destino.
eventTypestringstatusenumpendingen curso o esperando reintento ·succeededsu endpoint respondió 2xx ·failedse agotaron los reintentos.Valores:
pendingsucceededfailedattemptsintegerlastStatusCodeintegerpuede ser nulllastErrorstringpuede ser nullnextAttemptAttimestamppuede ser nullFecha y hora ISO 8601.
deliveredAttimestamppuede ser nullFecha y hora ISO 8601.
payloadobjetoEl cuerpo exacto que se envió.
createdAttimestampFecha y hora ISO 8601.
hasMorebooleanSi hay más objetos después de esta página.
urlstring
curl -G https://www.kuida.ar/api/v1/webhook_deliveries \
-H "Authorization: Bearer kd_test_…" \
-d limit=3{
"object": "list",
"data": [
{
"id": "whd_cm1a2b3c4d5e6f7g8h9i0j",
"object": "webhook_delivery",
"webhookEndpoint": "we_cm1a2b3c4d5e6f7g8h9i0j",
"eventType": "intake.ready",
"status": "succeeded",
"attempts": 1,
"lastStatusCode": 200,
"lastError": null,
"nextAttemptAt": null,
"deliveredAt": "2026-10-01T17:30:01.000Z",
"payload": {
"id": "whd_cm1a2b3c4d5e6f7g8h9i0j",
"object": "event",
"type": "intake.ready",
"apiVersion": "2026-09-28",
"livemode": false,
"occurredAt": "2026-10-01T17:30:00.000Z",
"ref": "cm1a2b3c4d5e6f7g8h9i0j",
"data": {}
},
"createdAt": "2026-10-01T17:30:00.000Z"
}
],
"hasMore": false,
"url": "/v1/webhook_deliveries"
}Obtener una entrega de webhook
GET/v1/webhook_deliveries/{id}
Una entrega con su estado, intentos y el cuerpo enviado.
- Permiso
webhooks:read- SDK
webhook_deliveries.retrieve
Parámetros de ruta
idstringobligatorioId del objeto.
Respuesta
200 con un objeto WebhookDelivery. Un envío de webhook con sus reintentos.
› Ver los 12 campos de la respuestaOcultar campos
idstringId de la entrega.
objectstringwebhookEndpointstringEndpoint destino.
eventTypestringstatusenumpendingen curso o esperando reintento ·succeededsu endpoint respondió 2xx ·failedse agotaron los reintentos.Valores:
pendingsucceededfailedattemptsintegerlastStatusCodeintegerpuede ser nulllastErrorstringpuede ser nullnextAttemptAttimestamppuede ser nullFecha y hora ISO 8601.
deliveredAttimestamppuede ser nullFecha y hora ISO 8601.
payloadobjetoEl cuerpo exacto que se envió.
createdAttimestampFecha y hora ISO 8601.
curl https://www.kuida.ar/api/v1/webhook_deliveries/whd_cm1a2b3c4d5e6f7g8h9i0j \
-H "Authorization: Bearer kd_test_…"{
"id": "whd_cm1a2b3c4d5e6f7g8h9i0j",
"object": "webhook_delivery",
"webhookEndpoint": "we_cm1a2b3c4d5e6f7g8h9i0j",
"eventType": "intake.ready",
"status": "succeeded",
"attempts": 1,
"lastStatusCode": 200,
"lastError": null,
"nextAttemptAt": null,
"deliveredAt": "2026-10-01T17:30:01.000Z",
"payload": {
"id": "whd_cm1a2b3c4d5e6f7g8h9i0j",
"object": "event",
"type": "intake.ready",
"apiVersion": "2026-09-28",
"livemode": false,
"occurredAt": "2026-10-01T17:30:00.000Z",
"ref": "cm1a2b3c4d5e6f7g8h9i0j",
"data": {}
},
"createdAt": "2026-10-01T17:30:00.000Z"
}Los errores de todas las operaciones tienen el mismo formato y un código estable: ver Errores.