← Volver al inicio

Developers

API pública de Zeit

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.

Especificación OpenAPI 3: https://api.inderzeit.com/api/v1/public/openapi.json
Impórtala en Postman, Insomnia o tu generador de clientes.

Primeros pasos

  1. Crea una API key en Ajustes → Integraciones de tu panel (requiere un plan que incluya la API pública). Elige solo los permisos que necesites.
  2. Envíala en cada petición con el encabezado Authorization: Bearer zk_live_…. Guárdala en un lugar seguro: solo se muestra una vez.
  3. Las rutas cuelgan de 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.

Permisos (scopes)

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

Endpoints

Citas · 8Clientes · 3Staff y servicios · 4Conversaciones · 5Pagos · 4Estadísticas · 1

Citas

GET/public/availabilityappointments:readHorarios libres de un día

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.

Parámetros

NombreEnTipoDescripción
serviceId *querystringServicio a agendar.
date *querystring (date)Día en la zona horaria del negocio.
staffIdquerystringLimita a un miembro del staff.
branchIdquerystringLimita a una sucursal.

Ejemplo

curl "https://api.inderzeit.com/api/v1/public/availability?serviceId=cm9x2k4ab0001example&date=2026-10-05" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

OK

{
  "date": "texto",
  "timezone": "America/Panama",
  "slots": [
    {
      "staffId": "cm9x2k4ab0001example",
      "staffName": "Ana Pérez",
      "start": "2026-10-05T15:00:00.000Z",
      "local": "10:30"
    }
  ]
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
429Límite de peticiones por minuto excedido. Ver Retry-After.
GET/public/appointmentsappointments:readListar citas

Parámetros

NombreEnTipoDescripción
fromquerystring (date-time)Desde (inclusive).
toquerystring (date-time)Hasta (exclusivo).
statusqueryenumEstado.
staffIdquerystring
clientIdquerystring
branchIdquerystring
limitqueryintegerElementos por página.
cursorquerystringnextCursor de la página anterior.

Ejemplo

curl "https://api.inderzeit.com/api/v1/public/appointments" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

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"
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
429Límite de peticiones por minuto excedido. Ver Retry-After.
POST/public/appointmentsappointments:writeCrear una cita

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.

Parámetros

NombreEnTipoDescripción
Idempotency-KeyheaderstringClave ú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.

Cuerpo (JSON)

CampoTipoDescripción
clientId *string
staffId *string
serviceId *string
scheduledAt *string (date-time)
notesstringmáx. 500 caracteres

Ejemplo

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"}'

Respuesta 201

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
  }
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
409El staff ya tiene una cita en ese horario, o hay otra petición con la misma Idempotency-Key en curso.
422Idempotency-Key reutilizada con un cuerpo distinto.
429Límite de peticiones por minuto excedido. Ver Retry-After.
GET/public/appointments/{id}appointments:readDetalle de una cita

Parámetros

NombreEnTipoDescripción
id *rutastringId de la cita

Ejemplo

curl "https://api.inderzeit.com/api/v1/public/appointments/{id}" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

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
  }
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
404No existe en este negocio.
429Límite de peticiones por minuto excedido. Ver Retry-After.
POST/public/appointments/{id}/cancelappointments:writeCancelar una cita

Idempotente. 409 si la cita ya está COMPLETED o NO_SHOW.

Parámetros

NombreEnTipoDescripción
id *rutastringId de la cita

Ejemplo

curl -X POST "https://api.inderzeit.com/api/v1/public/appointments/{id}/cancel" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

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
  }
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
409La cita ya se realizó.
429Límite de peticiones por minuto excedido. Ver Retry-After.
POST/public/appointments/{id}/rescheduleappointments:writeReagendar una cita

Revalida la disponibilidad del staff. 409 si la cita está cancelada o completada, o el nuevo horario está ocupado.

Parámetros

NombreEnTipoDescripción
id *rutastringId de la cita

Cuerpo (JSON)

CampoTipoDescripción
scheduledAt *string (date-time)

Ejemplo

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"}'

Respuesta 200

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
  }
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
409Estado inválido u horario ocupado.
429Límite de peticiones por minuto excedido. Ver Retry-After.
POST/public/appointments/{id}/transferappointments:writeTransferir una cita a otra sucursal

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.

Parámetros

NombreEnTipoDescripción
id *rutastringId de la cita

Cuerpo (JSON)

CampoTipoDescripción
branchId *string

Ejemplo

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"}'

Respuesta 200

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
  }
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
404Cita o sucursal inexistente.
409Estado inválido, sucursal inactiva, o el staff/servicio no opera allí.
429Límite de peticiones por minuto excedido. Ver Retry-After.
POST/public/appointments/{id}/completeappointments:writeMarcar una cita como completada

Idempotente; suma una visita al cliente una sola vez.

Parámetros

NombreEnTipoDescripción
id *rutastringId de la cita

Ejemplo

curl -X POST "https://api.inderzeit.com/api/v1/public/appointments/{id}/complete" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

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
  }
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
409La cita está cancelada.
429Límite de peticiones por minuto excedido. Ver Retry-After.

Clientes

GET/public/clientsclients:readListar / buscar clientes

Parámetros

NombreEnTipoDescripción
searchquerystringNombre o teléfono (contiene).
limitqueryintegerElementos por página.
cursorquerystringnextCursor de la página anterior.

Ejemplo

curl "https://api.inderzeit.com/api/v1/public/clients" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

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"
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
429Límite de peticiones por minuto excedido. Ver Retry-After.
POST/public/clientsclients:writeCrear un cliente

Parámetros

NombreEnTipoDescripción
Idempotency-KeyheaderstringClave ú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.

Cuerpo (JSON)

CampoTipoDescripción
phone *string
namestring
emailstring (email)
notesstring
birthdaystring (date)Opcional. Se usa solo para el saludo de cumpleaños de clientes que aceptaron promociones.

Ejemplo

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"}'

Respuesta 201

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"
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
409Ya existe un cliente con ese teléfono.
429Límite de peticiones por minuto excedido. Ver Retry-After.
GET/public/clients/{id}clients:readPerfil del cliente con su historial de citas

Parámetros

NombreEnTipoDescripción
id *rutastringId del cliente

Ejemplo

curl "https://api.inderzeit.com/api/v1/public/clients/{id}" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

OK

null

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
404No existe en este negocio.
429Límite de peticiones por minuto excedido. Ver Retry-After.

Staff y servicios

GET/public/branchesappointments:readSucursales del negocio

Ejemplo

curl "https://api.inderzeit.com/api/v1/public/branches" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

OK

{
  "data": [
    {
      "id": "cm9x2k4ab0001example",
      "name": "Ana Pérez",
      "isActive": true
    }
  ]
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
429Límite de peticiones por minuto excedido. Ver Retry-After.
GET/public/servicesappointments:readServicios activos del negocio

Ejemplo

curl "https://api.inderzeit.com/api/v1/public/services" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

OK

{
  "data": [
    {
      "id": "cm9x2k4ab0001example",
      "name": "Ana Pérez",
      "description": "texto",
      "durationMinutes": 0,
      "price": 0,
      "depositRequired": 0,
      "categoryId": "cm9x2k4ab0001example"
    }
  ]
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
429Límite de peticiones por minuto excedido. Ver Retry-After.
GET/public/staffappointments:readStaff activo, con los servicios que ofrece

Ejemplo

curl "https://api.inderzeit.com/api/v1/public/staff" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

OK

{
  "data": [
    {
      "id": "cm9x2k4ab0001example",
      "name": "Ana Pérez",
      "specialty": "texto",
      "bio": "texto",
      "avatarUrl": "texto",
      "workingHours": {},
      "breakTimes": {},
      "serviceIds": [
        "texto"
      ]
    }
  ]
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
429Límite de peticiones por minuto excedido. Ver Retry-After.
GET/public/staff/{id}/scheduleappointments:readHorario semanal de un miembro del staff

Parámetros

NombreEnTipoDescripción
id *rutastringId del staff

Ejemplo

curl "https://api.inderzeit.com/api/v1/public/staff/{id}/schedule" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

OK

{
  "id": "cm9x2k4ab0001example",
  "name": "Ana Pérez",
  "workingHours": {},
  "breakTimes": {}
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
404No existe o está inactivo.
429Límite de peticiones por minuto excedido. Ver Retry-After.

Conversaciones

GET/public/conversationsinbox:replyListar conversaciones (más recientes primero)

Requiere un plan con bot IA.

Parámetros

NombreEnTipoDescripción
cursorquerystring (date-time)nextCursor de la página anterior.
branchIdquerystringmain = número principal.

Ejemplo

curl "https://api.inderzeit.com/api/v1/public/conversations" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

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"
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
429Límite de peticiones por minuto excedido. Ver Retry-After.
GET/public/conversations/{clientId}/messagesinbox:replyHistorial de mensajes de un cliente

Orden cronológico, 50 por página. No marca el hilo como leído.

Parámetros

NombreEnTipoDescripción
clientId *rutastringId del cliente
cursorquerystring (date-time)nextCursor para mensajes más antiguos.

Ejemplo

curl "https://api.inderzeit.com/api/v1/public/conversations/{clientId}/messages" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

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"
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
404Cliente inexistente.
429Límite de peticiones por minuto excedido. Ver Retry-After.
POST/public/conversations/{clientId}/messagesinbox:replyEnviar un mensaje manual (handoff humano)

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}.

Parámetros

NombreEnTipoDescripción
clientId *rutastringId del cliente

Cuerpo (JSON)

CampoTipoDescripción
body *stringmáx. 4000 caracteres

Ejemplo

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?"}'

Respuesta 201

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"
}

Errores

400Cliente en opt-out o sin identificador de canal.
401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
404Cliente inexistente.
429Límite de peticiones por minuto excedido. Ver Retry-After.
PUT/public/conversations/{clientId}/takeoverinbox:replyTomar o devolver el control de la conversación

Parámetros

NombreEnTipoDescripción
clientId *rutastringId del cliente

Cuerpo (JSON)

CampoTipoDescripción
on *booleantrue = el bot calla; false = se lo devuelve al bot.

Ejemplo

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}'

Respuesta 200

OK

{
  "humanTakeover": true
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
429Límite de peticiones por minuto excedido. Ver Retry-After.
POST/public/conversations/{clientId}/resetinbox:replyResetear la conversación del bot a IDLE

Borra el contexto (p. ej. un cliente atascado a mitad de una reserva). No toca el takeover ni el historial. Idempotente.

Parámetros

NombreEnTipoDescripción
clientId *rutastringId del cliente

Ejemplo

curl -X POST "https://api.inderzeit.com/api/v1/public/conversations/{clientId}/reset" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

OK

{
  "state": "IDLE"
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
429Límite de peticiones por minuto excedido. Ver Retry-After.

Pagos

POST/public/paymentspayments:manageRegistrar el pago de una cita

Queda PENDING hasta POST /public/payments/{id}/verify. 409 si la cita ya tiene un pago verificado o está cancelada.

Parámetros

NombreEnTipoDescripción
Idempotency-KeyheaderstringClave ú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.

Cuerpo (JSON)

CampoTipoDescripción
appointmentId *string
amount *numbermín. 0
method *PaymentMethod
notesstringmáx. 500 caracteres

Ejemplo

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"}'

Respuesta 201

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"
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
409Pago ya verificado o cita cancelada.
422Idempotency-Key reutilizada con un cuerpo distinto.
429Límite de peticiones por minuto excedido. Ver Retry-After.
POST/public/payments/{id}/verifypayments:manageVerificar un pago

Confirma la cita, suma al valor del cliente y notifica por WhatsApp. Idempotente. 409 si la cita está cancelada.

Parámetros

NombreEnTipoDescripción
id *rutastringId del pago

Ejemplo

curl -X POST "https://api.inderzeit.com/api/v1/public/payments/{id}/verify" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

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"
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
409La cita está cancelada.
429Límite de peticiones por minuto excedido. Ver Retry-After.
GET/public/payments/pendingpayments:managePagos con comprobante pendientes de verificar

Ejemplo

curl "https://api.inderzeit.com/api/v1/public/payments/pending" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

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"
    }
  ]
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
429Límite de peticiones por minuto excedido. Ver Retry-After.
GET/public/payments/summarypayments:manageResumen de pagos del mes

Ejemplo

curl "https://api.inderzeit.com/api/v1/public/payments/summary" \
  -H "Authorization: Bearer zk_live_TU_CLAVE"

Respuesta 200

OK

{
  "total": 0,
  "paid": 0,
  "pending": 0,
  "pendingCount": 0
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
429Límite de peticiones por minuto excedido. Ver Retry-After.

Estadísticas

GET/public/statsreports:viewMétricas de un período

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.

Parámetros

NombreEnTipoDescripción
from *querystring (date-time)Inicio (inclusive).
to *querystring (date-time)Fin (exclusivo).

Ejemplo

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"

Respuesta 200

OK

{
  "period": {},
  "appointments": {
    "total": 0,
    "byStatus": {}
  },
  "confirmationRate": 0,
  "clients": {
    "new": 0,
    "withAppointments": 0
  },
  "revenue": 0
}

Errores

401Falta la API key, es inválida, fue revocada o venció.
403La key no tiene el scope requerido, el tenant no está activo o su plan no incluye la API pública.
429Límite de peticiones por minuto excedido. Ver Retry-After.

Versión de la especificación: 1.0.0.

¿Necesitas ayuda con una integración? Escríbenos a [email protected].