200 (o 201 cuando se creó
algo). Cualquier otro estado viene con un cuerpo JSON en una de dos formas.
Errores de aplicación: el sobre con error_code
Los errores que genera la lógica del propio endpoint — una regla de validación, un registro
inexistente, una operación rechazada — siempre tienen esta forma:
Decide por
error_code, nunca por message. Los mensajes están escritos para personas
y pueden cambiar de redacción; los códigos son el contrato y no cambian. Los mensajes están
en inglés.details es opcional y depende del endpoint: los de calendario lo usan para listar los valores
que sí se habrían aceptado (valid_service_names, valid_professional_names,
matching_professional_ids) o para nombrar el field problemático.
Errores de plataforma: el cuerpo detail
Dos fallos ocurren antes de que se ejecute el endpoint y usan un cuerpo más simple:
401 — autenticación
401 — autenticación
422 — la solicitud no coincide con el esquema
422 — la solicitud no coincide con el esquema
limit por encima del máximo). loc empieza por body,
query o path y luego nombra el campo. Corrige los campos listados y reintenta.404 — ruta o registro desconocido (algunos endpoints)
404 — ruta o registro desconocido (algunos endpoints)
500 — INTERNAL_ERROR
Algo falló de nuestro lado. La operación no se aplicó (no se encoló la llamada, no se creó
el contacto, no se agendó la cita), así que reintentar es seguro. Si persiste, contacta a
soporte con la solicitud que enviaste.
Códigos de error por endpoint
Llamadas (Calls)
Contactos (Clients)
Salesflow — ingreso (ingest)
Salesflow — ingreso por lotes (batch ingest)
El endpoint por lotes reporta la mayoría de los problemas por fila enresults[].errors[].code (required, invalid_format, too_long, duplicate_in_batch, not_found, exists, conflict) con una respuesta 200; los códigos de abajo aplican a la solicitud completa.
Salesflow — pipelines
Calendario — disponibilidad
Calendario — reservas
Calendario — listas de espera
Calendario — lista de espera por lotes
El endpoint por lotes reporta los problemas de cada fila enrows[].status / rows[].errors con una respuesta 200 cuando skip_invalid es true; los códigos de abajo aplican a la solicitud completa.