Developers
Integra Zeit con tu ERP, tu CRM o tu propio sistema: consulta horarios libres, crea y gestiona citas, sincroniza clientes y pagos, y lee las conversaciones. Cada clave solo ve los datos de su negocio y solo lo que sus permisos autorizan.
Authorization: Bearer zk_live_…. Guárdala en un lugar seguro: solo se muestra una vez.https://api.inderzeit.com/api/v1.curl "https://api.inderzeit.com/api/v1/public/availability?serviceId=SERVICIO&date=2026-10-05" \ -H "Authorization: Bearer zk_live_TU_CLAVE"
Límites. Por defecto 300 peticiones por minuto por clave; al excederlo recibes 429 con Retry-After. Reintentos seguros. Las operaciones de escritura aceptan Idempotency-Key: repetir la misma petición no duplica el efecto. Errores. 401 clave ausente, inválida, revocada o vencida; 403 falta el permiso o el plan no incluye la API.
Cada endpoint exige un permiso concreto, que debe estar marcado en la clave. Los permisos disponibles son:
appointments:readappointments:writeclients:readclients:writeinbox:replypayments:managereports:view
Mismos horarios que ofrece el bot de WhatsApp: horario laboral del staff menos citas, descansos y bloqueos. Sin staffId consulta a todo el staff que ofrece el servicio. Máximo 120 días hacia adelante.
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| serviceId * | query | string | Servicio a agendar. |
| date * | query | string (date) | Día en la zona horaria del negocio. |
| staffId | query | string | Limita a un miembro del staff. |
| branchId | query | string | Limita a una sucursal. |
curl "https://api.inderzeit.com/api/v1/public/availability?serviceId=cm9x2k4ab0001example&date=2026-10-05" \ -H "Authorization: Bearer zk_live_TU_CLAVE"
OK
{
"date": "texto",
"timezone": "America/Panama",
"slots": [
{
"staffId": "cm9x2k4ab0001example",
"staffName": "Ana Pérez",
"start": "2026-10-05T15:00:00.000Z",
"local": "10:30"
}
]
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| from | query | string (date-time) | Desde (inclusive). |
| to | query | string (date-time) | Hasta (exclusivo). |
| status | query | enum | Estado. |
| staffId | query | string | |
| clientId | query | string | |
| branchId | query | string | |
| limit | query | integer | Elementos por página. |
| cursor | query | string | nextCursor de la página anterior. |
curl "https://api.inderzeit.com/api/v1/public/appointments" \ -H "Authorization: Bearer zk_live_TU_CLAVE"
OK
{
"data": [
{
"id": "cm9x2k4ab0001example",
"status": "PENDING",
"scheduledAt": "2026-10-05T15:00:00.000Z",
"durationMinutes": 0,
"totalPrice": 0,
"notes": "Prefiere la tarde",
"branchId": "cm9x2k4ab0001example",
"createdAt": "2026-10-05T15:00:00.000Z",
"updatedAt": "2026-10-05T15:00:00.000Z",
"client": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"phone": "+50760001234",
"email": "[email protected]"
},
"staff": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez"
},
"service": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"durationMinutes": 0,
"price": 0
},
"payment": {
"id": "cm9x2k4ab0001example",
"status": null,
"method": null,
"amount": 0
}
}
],
"nextCursor": "texto"
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
Valida que cliente, staff y servicio sean del negocio y que el staff esté libre (409 si el horario se ocupó). Nace PENDING; pasa a CONFIRMED al verificarse el pago. Usa un start devuelto por /public/availability.
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| Idempotency-Key | header | string | Clave única por operación (1-128 caracteres ASCII imprimibles, sin espacios). Un reintento con la misma clave y el mismo cuerpo devuelve la respuesta original sin volver a ejecutar (con el header Idempotent-Replayed: true); con otro cuerpo devuelve 422. Vigente 24 h. |
| Campo | Tipo | Descripción |
|---|---|---|
| clientId * | string | |
| staffId * | string | |
| serviceId * | string | |
| scheduledAt * | string (date-time) | |
| notes | string | máx. 500 caracteres |
curl -X POST "https://api.inderzeit.com/api/v1/public/appointments" \
-H "Authorization: Bearer zk_live_TU_CLAVE" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"clientId":"cm9x2k4ab0001example","staffId":"cm9x2k4ab0001example","serviceId":"cm9x2k4ab0001example","scheduledAt":"2026-10-05T15:00:00.000Z","notes":"Prefiere la tarde"}'Creado
{
"id": "cm9x2k4ab0001example",
"status": "PENDING",
"scheduledAt": "2026-10-05T15:00:00.000Z",
"durationMinutes": 0,
"totalPrice": 0,
"notes": "Prefiere la tarde",
"branchId": "cm9x2k4ab0001example",
"createdAt": "2026-10-05T15:00:00.000Z",
"updatedAt": "2026-10-05T15:00:00.000Z",
"client": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"phone": "+50760001234",
"email": "[email protected]"
},
"staff": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez"
},
"service": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"durationMinutes": 0,
"price": 0
},
"payment": {
"id": "cm9x2k4ab0001example",
"status": "PENDING",
"method": "CASH",
"amount": 0
}
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 409 | El staff ya tiene una cita en ese horario, o hay otra petición con la misma Idempotency-Key en curso. |
| 422 | Idempotency-Key reutilizada con un cuerpo distinto. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| id * | ruta | string | Id de la cita |
curl "https://api.inderzeit.com/api/v1/public/appointments/{id}" \
-H "Authorization: Bearer zk_live_TU_CLAVE"OK
{
"id": "cm9x2k4ab0001example",
"status": "PENDING",
"scheduledAt": "2026-10-05T15:00:00.000Z",
"durationMinutes": 0,
"totalPrice": 0,
"notes": "Prefiere la tarde",
"branchId": "cm9x2k4ab0001example",
"createdAt": "2026-10-05T15:00:00.000Z",
"updatedAt": "2026-10-05T15:00:00.000Z",
"client": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"phone": "+50760001234",
"email": "[email protected]"
},
"staff": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez"
},
"service": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"durationMinutes": 0,
"price": 0
},
"payment": {
"id": "cm9x2k4ab0001example",
"status": "PENDING",
"method": "CASH",
"amount": 0
}
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 404 | No existe en este negocio. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
Idempotente. 409 si la cita ya está COMPLETED o NO_SHOW.
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| id * | ruta | string | Id de la cita |
curl -X POST "https://api.inderzeit.com/api/v1/public/appointments/{id}/cancel" \
-H "Authorization: Bearer zk_live_TU_CLAVE"OK
{
"id": "cm9x2k4ab0001example",
"status": "PENDING",
"scheduledAt": "2026-10-05T15:00:00.000Z",
"durationMinutes": 0,
"totalPrice": 0,
"notes": "Prefiere la tarde",
"branchId": "cm9x2k4ab0001example",
"createdAt": "2026-10-05T15:00:00.000Z",
"updatedAt": "2026-10-05T15:00:00.000Z",
"client": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"phone": "+50760001234",
"email": "[email protected]"
},
"staff": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez"
},
"service": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"durationMinutes": 0,
"price": 0
},
"payment": {
"id": "cm9x2k4ab0001example",
"status": "PENDING",
"method": "CASH",
"amount": 0
}
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 409 | La cita ya se realizó. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
Revalida la disponibilidad del staff. 409 si la cita está cancelada o completada, o el nuevo horario está ocupado.
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| id * | ruta | string | Id de la cita |
| Campo | Tipo | Descripción |
|---|---|---|
| scheduledAt * | string (date-time) |
curl -X POST "https://api.inderzeit.com/api/v1/public/appointments/{id}/reschedule" \
-H "Authorization: Bearer zk_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{"scheduledAt":"2026-10-05T15:00:00.000Z"}'OK
{
"id": "cm9x2k4ab0001example",
"status": "PENDING",
"scheduledAt": "2026-10-05T15:00:00.000Z",
"durationMinutes": 0,
"totalPrice": 0,
"notes": "Prefiere la tarde",
"branchId": "cm9x2k4ab0001example",
"createdAt": "2026-10-05T15:00:00.000Z",
"updatedAt": "2026-10-05T15:00:00.000Z",
"client": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"phone": "+50760001234",
"email": "[email protected]"
},
"staff": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez"
},
"service": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"durationMinutes": 0,
"price": 0
},
"payment": {
"id": "cm9x2k4ab0001example",
"status": "PENDING",
"method": "CASH",
"amount": 0
}
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 409 | Estado inválido u horario ocupado. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
Idempotente. Solo citas PENDING o CONFIRMED. El mismo staff y servicio deben estar habilitados en la sucursal de destino (409 si no). Consulta /public/branches para los ids.
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| id * | ruta | string | Id de la cita |
| Campo | Tipo | Descripción |
|---|---|---|
| branchId * | string |
curl -X POST "https://api.inderzeit.com/api/v1/public/appointments/{id}/transfer" \
-H "Authorization: Bearer zk_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{"branchId":"cm9x2k4ab0001example"}'OK
{
"id": "cm9x2k4ab0001example",
"status": "PENDING",
"scheduledAt": "2026-10-05T15:00:00.000Z",
"durationMinutes": 0,
"totalPrice": 0,
"notes": "Prefiere la tarde",
"branchId": "cm9x2k4ab0001example",
"createdAt": "2026-10-05T15:00:00.000Z",
"updatedAt": "2026-10-05T15:00:00.000Z",
"client": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"phone": "+50760001234",
"email": "[email protected]"
},
"staff": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez"
},
"service": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"durationMinutes": 0,
"price": 0
},
"payment": {
"id": "cm9x2k4ab0001example",
"status": "PENDING",
"method": "CASH",
"amount": 0
}
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 404 | Cita o sucursal inexistente. |
| 409 | Estado inválido, sucursal inactiva, o el staff/servicio no opera allí. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
Idempotente; suma una visita al cliente una sola vez.
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| id * | ruta | string | Id de la cita |
curl -X POST "https://api.inderzeit.com/api/v1/public/appointments/{id}/complete" \
-H "Authorization: Bearer zk_live_TU_CLAVE"OK
{
"id": "cm9x2k4ab0001example",
"status": "PENDING",
"scheduledAt": "2026-10-05T15:00:00.000Z",
"durationMinutes": 0,
"totalPrice": 0,
"notes": "Prefiere la tarde",
"branchId": "cm9x2k4ab0001example",
"createdAt": "2026-10-05T15:00:00.000Z",
"updatedAt": "2026-10-05T15:00:00.000Z",
"client": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"phone": "+50760001234",
"email": "[email protected]"
},
"staff": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez"
},
"service": {
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"durationMinutes": 0,
"price": 0
},
"payment": {
"id": "cm9x2k4ab0001example",
"status": "PENDING",
"method": "CASH",
"amount": 0
}
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 409 | La cita está cancelada. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| search | query | string | Nombre o teléfono (contiene). |
| limit | query | integer | Elementos por página. |
| cursor | query | string | nextCursor de la página anterior. |
curl "https://api.inderzeit.com/api/v1/public/clients" \ -H "Authorization: Bearer zk_live_TU_CLAVE"
OK
{
"data": [
{
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"phone": "+50760001234",
"email": "[email protected]",
"channel": "texto",
"tags": [
"texto"
],
"visitCount": 0,
"lifetimeValue": 0,
"lastVisitAt": "2026-10-05T15:00:00.000Z",
"noShowCount": 0,
"cancellationCount": 0,
"createdAt": "2026-10-05T15:00:00.000Z"
}
],
"nextCursor": "texto"
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| Idempotency-Key | header | string | Clave única por operación (1-128 caracteres ASCII imprimibles, sin espacios). Un reintento con la misma clave y el mismo cuerpo devuelve la respuesta original sin volver a ejecutar (con el header Idempotent-Replayed: true); con otro cuerpo devuelve 422. Vigente 24 h. |
| Campo | Tipo | Descripción |
|---|---|---|
| phone * | string | |
| name | string | |
| string (email) | ||
| notes | string | |
| birthday | string (date) | Opcional. Se usa solo para el saludo de cumpleaños de clientes que aceptaron promociones. |
curl -X POST "https://api.inderzeit.com/api/v1/public/clients" \
-H "Authorization: Bearer zk_live_TU_CLAVE" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"phone":"+50761234567","name":"Ana Pérez","email":"[email protected]","notes":"Prefiere la tarde","birthday":"1990-05-17"}'Creado
{
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"phone": "+50760001234",
"email": "[email protected]",
"channel": "texto",
"tags": [
"texto"
],
"visitCount": 0,
"lifetimeValue": 0,
"lastVisitAt": "2026-10-05T15:00:00.000Z",
"noShowCount": 0,
"cancellationCount": 0,
"createdAt": "2026-10-05T15:00:00.000Z"
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 409 | Ya existe un cliente con ese teléfono. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| id * | ruta | string | Id del cliente |
curl "https://api.inderzeit.com/api/v1/public/clients/{id}" \
-H "Authorization: Bearer zk_live_TU_CLAVE"OK
null
| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 404 | No existe en este negocio. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
curl "https://api.inderzeit.com/api/v1/public/branches" \ -H "Authorization: Bearer zk_live_TU_CLAVE"
OK
{
"data": [
{
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"isActive": true
}
]
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
curl "https://api.inderzeit.com/api/v1/public/services" \ -H "Authorization: Bearer zk_live_TU_CLAVE"
OK
{
"data": [
{
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"description": "texto",
"durationMinutes": 0,
"price": 0,
"depositRequired": 0,
"categoryId": "cm9x2k4ab0001example"
}
]
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
curl "https://api.inderzeit.com/api/v1/public/staff" \ -H "Authorization: Bearer zk_live_TU_CLAVE"
OK
{
"data": [
{
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"specialty": "texto",
"bio": "texto",
"avatarUrl": "texto",
"workingHours": {},
"breakTimes": {},
"serviceIds": [
"texto"
]
}
]
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| id * | ruta | string | Id del staff |
curl "https://api.inderzeit.com/api/v1/public/staff/{id}/schedule" \
-H "Authorization: Bearer zk_live_TU_CLAVE"OK
{
"id": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"workingHours": {},
"breakTimes": {}
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 404 | No existe o está inactivo. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
Requiere un plan con bot IA.
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| cursor | query | string (date-time) | nextCursor de la página anterior. |
| branchId | query | string | main = número principal. |
curl "https://api.inderzeit.com/api/v1/public/conversations" \ -H "Authorization: Bearer zk_live_TU_CLAVE"
OK
{
"threads": [
{
"clientId": "cm9x2k4ab0001example",
"name": "Ana Pérez",
"channel": "texto",
"channelUserId": "cm9x2k4ab0001example",
"lastMessageAt": "2026-10-05T15:00:00.000Z",
"preview": "texto",
"lastDirection": "texto",
"humanTakeover": true,
"unread": true
}
],
"nextCursor": "texto"
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
Orden cronológico, 50 por página. No marca el hilo como leído.
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| clientId * | ruta | string | Id del cliente |
| cursor | query | string (date-time) | nextCursor para mensajes más antiguos. |
curl "https://api.inderzeit.com/api/v1/public/conversations/{clientId}/messages" \
-H "Authorization: Bearer zk_live_TU_CLAVE"OK
{
"messages": [
{
"id": "cm9x2k4ab0001example",
"direction": "INBOUND",
"author": "CUSTOMER",
"body": "Hola, ¿tienen disponibilidad mañana?",
"status": "PENDING",
"errorReason": "El cliente lo pidió",
"createdAt": "2026-10-05T15:00:00.000Z"
}
],
"nextCursor": "texto"
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 404 | Cliente inexistente. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
Responde con estado PENDING: el envío es asíncrono y puede terminar FAILED (p. ej. fuera de la ventana de 24 h de WhatsApp). Consulta el historial para el estado final y errorReason. Activa el takeover: el bot deja de responder a ese cliente hasta PUT .../takeover {on:false}.
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| clientId * | ruta | string | Id del cliente |
| Campo | Tipo | Descripción |
|---|---|---|
| body * | string | máx. 4000 caracteres |
curl -X POST "https://api.inderzeit.com/api/v1/public/conversations/{clientId}/messages" \
-H "Authorization: Bearer zk_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{"body":"Hola, ¿tienen disponibilidad mañana?"}'Creado
{
"id": "cm9x2k4ab0001example",
"direction": "INBOUND",
"author": "CUSTOMER",
"body": "Hola, ¿tienen disponibilidad mañana?",
"status": "PENDING",
"errorReason": "El cliente lo pidió",
"createdAt": "2026-10-05T15:00:00.000Z"
}| 400 | Cliente en opt-out o sin identificador de canal. |
| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 404 | Cliente inexistente. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| clientId * | ruta | string | Id del cliente |
| Campo | Tipo | Descripción |
|---|---|---|
| on * | boolean | true = el bot calla; false = se lo devuelve al bot. |
curl -X PUT "https://api.inderzeit.com/api/v1/public/conversations/{clientId}/takeover" \
-H "Authorization: Bearer zk_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{"on":true}'OK
{
"humanTakeover": true
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
Borra el contexto (p. ej. un cliente atascado a mitad de una reserva). No toca el takeover ni el historial. Idempotente.
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| clientId * | ruta | string | Id del cliente |
curl -X POST "https://api.inderzeit.com/api/v1/public/conversations/{clientId}/reset" \
-H "Authorization: Bearer zk_live_TU_CLAVE"OK
{
"state": "IDLE"
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
Queda PENDING hasta POST /public/payments/{id}/verify. 409 si la cita ya tiene un pago verificado o está cancelada.
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| Idempotency-Key | header | string | Clave única por operación (1-128 caracteres ASCII imprimibles, sin espacios). Un reintento con la misma clave y el mismo cuerpo devuelve la respuesta original sin volver a ejecutar (con el header Idempotent-Replayed: true); con otro cuerpo devuelve 422. Vigente 24 h. |
| Campo | Tipo | Descripción |
|---|---|---|
| appointmentId * | string | |
| amount * | number | mín. 0 |
| method * | PaymentMethod | |
| notes | string | máx. 500 caracteres |
curl -X POST "https://api.inderzeit.com/api/v1/public/payments" \
-H "Authorization: Bearer zk_live_TU_CLAVE" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"appointmentId":"cm9x2k4ab0001example","amount":0,"method":"CASH","notes":"Prefiere la tarde"}'Creado
{
"id": "cm9x2k4ab0001example",
"amount": 0,
"method": "CASH",
"status": "PENDING",
"proofSubmittedAt": "2026-10-05T15:00:00.000Z",
"verifiedAt": "2026-10-05T15:00:00.000Z",
"appointmentId": "cm9x2k4ab0001example",
"createdAt": "2026-10-05T15:00:00.000Z"
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 409 | Pago ya verificado o cita cancelada. |
| 422 | Idempotency-Key reutilizada con un cuerpo distinto. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
Confirma la cita, suma al valor del cliente y notifica por WhatsApp. Idempotente. 409 si la cita está cancelada.
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| id * | ruta | string | Id del pago |
curl -X POST "https://api.inderzeit.com/api/v1/public/payments/{id}/verify" \
-H "Authorization: Bearer zk_live_TU_CLAVE"OK
{
"id": "cm9x2k4ab0001example",
"amount": 0,
"method": "CASH",
"status": "PENDING",
"proofSubmittedAt": "2026-10-05T15:00:00.000Z",
"verifiedAt": "2026-10-05T15:00:00.000Z",
"appointmentId": "cm9x2k4ab0001example",
"createdAt": "2026-10-05T15:00:00.000Z"
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 409 | La cita está cancelada. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
curl "https://api.inderzeit.com/api/v1/public/payments/pending" \ -H "Authorization: Bearer zk_live_TU_CLAVE"
OK
{
"data": [
{
"id": "cm9x2k4ab0001example",
"amount": 0,
"method": "CASH",
"status": "PENDING",
"proofSubmittedAt": "2026-10-05T15:00:00.000Z",
"verifiedAt": "2026-10-05T15:00:00.000Z",
"appointmentId": "cm9x2k4ab0001example",
"createdAt": "2026-10-05T15:00:00.000Z"
}
]
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
curl "https://api.inderzeit.com/api/v1/public/payments/summary" \ -H "Authorization: Bearer zk_live_TU_CLAVE"
OK
{
"total": 0,
"paid": 0,
"pending": 0,
"pendingCount": 0
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
confirmationRate = citas CONFIRMED o COMPLETED sobre el total del período (null si no hay citas). revenue suma pagos verificados de citas del período. Rango máximo: 366 días.
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
| from * | query | string (date-time) | Inicio (inclusive). |
| to * | query | string (date-time) | Fin (exclusivo). |
curl "https://api.inderzeit.com/api/v1/public/stats?from=2026-10-05T15%3A00%3A00.000Z&to=2026-10-05T15%3A00%3A00.000Z" \ -H "Authorization: Bearer zk_live_TU_CLAVE"
OK
{
"period": {},
"appointments": {
"total": 0,
"byStatus": {}
},
"confirmationRate": 0,
"clients": {
"new": 0,
"withAppointments": 0
},
"revenue": 0
}| 401 | Falta la API key, es inválida, fue revocada o venció. |
| 403 | La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública. |
| 429 | Límite de peticiones por minuto excedido. Ver Retry-After. |
Versión de la especificación: 1.0.0.