Guía

Primeros pasos

De cero a un turno con recordatorios: obtener la clave, instalar un SDK, verificar la conexión y cargar un paciente y su turno.

1Obtener una clave de API

Kuida emite las claves para cada organización: no hay alta autoservicio. Pídala a desarrolladores@kuida.ar o a su contacto comercial, indicando qué sistema la va a usar. La clave se entrega una sola vez; Kuida guarda solo un hash y no puede volver a mostrarla.

Guárdela como variable de entorno del servidor que hace los pedidos, nunca en código que corra en un navegador o en una aplicación móvil:

Terminal
export KUIDA_API_KEY="kd_test_…"

Las claves kd_live_ operan sobre pacientes reales: crear un turno con una de ellas programa recordatorios reales por WhatsApp. Para desarrollar, use una clave kd_test_. Más detalle en Autenticación.

2Usar la URL base con www

Todos los pedidos van a https://www.kuida.ar/api seguido de la versión y el recurso, por ejemplo https://www.kuida.ar/api/v1/patients.

Siempre con www

kuida.ar sin www responde con una redirección. Muchos clientes HTTP no la siguen, o la siguen convirtiendo el POST en GET y descartando el cuerpo: el pedido falla o llega vacío. Configure la URL con www.

3Instalar un SDK

Los SDKs agregan la clave y la versión a cada pedido, generan la Idempotency-Key de los POST, reintentan los errores transitorios y convierten los errores en excepciones. También se puede usar HTTP directo: todos los ejemplos tienen su versión en curl.

npm install @kuida/sdk

Código fuente y documentación de cada uno: github.com/Kuida-ar/kuida-sdks.

4Verificar la conexión

GET /v1/account devuelve la organización dueña de la clave, sus líneas de servicio y los permisos de la clave. No modifica nada.

GET /v1/account
curl https://www.kuida.ar/api/v1/account \
  -H "Authorization: Bearer kd_test_…"
Respuesta
{
  "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"
    ]
  }
}

Si responde 401, la clave está mal copiada o fue revocada; ver errores de autenticación.

5Crear un paciente

El teléfono con WhatsApp es la identidad del paciente en Kuida y es obligatorio. Si ya existe un paciente con ese teléfono o ese DNI, la respuesta devuelve el existente y completa los datos que le faltaban, sin pisar los cargados. externalId guarda el id del paciente en su sistema. Crear un paciente no le envía ningún mensaje.

POST /v1/patients
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"
}'
Respuesta
{
  "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"
}

6Cargar un turno

Un turno se asocia a un paciente por su id de Kuida (pat_…) o por los mismos datos con que lo conoce su sistema; en el segundo caso Kuida lo busca y, si no existe, lo crea. Al guardarse, Kuida programa los recordatorios por WhatsApp que la institución tiene configurados.

POST /v1/appointments
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"
}'
Respuesta
{
  "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"
}

Con externalId, reenviar el mismo turno devuelve el existente. Para reprogramarlo o cancelarlo se usan PATCH /v1/appointments/{id} y POST /v1/appointments/{id}/cancel.

Probar sin datos reales

El repositorio de SDKs incluye un servidor simulado que implementa toda la API en memoria y no envía mensajes. Sirve para desarrollar y para pruebas automatizadas:

Terminal
git clone https://github.com/Kuida-ar/kuida-sdks
node kuida-sdks/conformance/mock-server.mjs
# en otra terminal: los SDKs toman la URL base y la clave del entorno
export KUIDA_API_BASE="http://localhost:12111/api"
export KUIDA_API_KEY="kd_test_000000000000_mocksecretmocksecret00"

El encabezado de mock-server.mjs lista otras claves que simulan una clave revocada, un permiso faltante, un error 503 o un 429, útiles para probar el manejo de errores.

Próximos pasos

  • Registrar una consulta atendida con POST /v1/visits para que empiece el seguimiento posconsulta.
  • Recibir avisos de Kuida en su sistema con webhooks.
  • Preparar la integración para fallas de red con idempotencia y reintentos.