Saltar al contenido principal

Introducción

La API v1 de la Regla de Cobranza expone programáticamente todo lo que el panel hace en la operación de cobranza: clientes, cobros, reglas de cobranza, acuerdos, disputas, tareas, importaciones y webhooks.

Para agentes de IA

Esta documentación está optimizada para LLMs: el índice completo en Markdown está en /llms.txt y el contrato de la API en /openapi/openapi-v1-es.yaml (variantes -pt y -en en el mismo directorio). Prefiere esas fuentes antes que raspar el HTML.

Formato

La API acepta y devuelve solo JSON (UTF-8). Envía Content-Type: application/json en toda request con body.

Tipo de campoFormato
CamposcamelCase en las respuestas y en los bodies de request (dueDate, documentNumber)
FechasISO 8601 en UTC. Ej.: 2026-07-23T12:00:00.000Z
Montos monetariosSe devuelven como string decimal ("1500.00") para no perder precisión; se aceptan como number en las requests
Filtros de listadoQuery string en snake_case (due_date_from, person_id) — mira Paginación y filtros

Campos personalizados (customData)

Los recursos principales (clientes, cobros, acuerdos, tareas, interacciones) aceptan un objeto JSON libre en el campo customData, para guardar tus propios datos junto al recurso (IDs de tu ERP, flags internas...). En disputas, el campo equivalente se llama customMetadata. Límites, iguales en todos:

  • 64 KB de payload serializado, como máximo;
  • 16 niveles de anidamiento, como máximo;
  • las claves __proto__, constructor y prototype se rechazan.

Las violaciones responden 400 con code: "VALIDATION_ERROR" y el motivo en details. En el update, el comportamiento por defecto es replace: el objeto enviado sustituye por completo al almacenado (y null limpia el campo). Para mezclar en lugar de sustituir, envía customDataMode: "merge" en el body del update — los objetos anidados se mezclan en profundidad; escalares, arrays y null sobrescriben la clave.

Convenciones

ConvenciónDescripción
:idVariable de ruta que debe reemplazarse en la URL.
...Contenido de la respuesta truncado para facilitar la lectura.
$DUNNING_TOKENTu clave de API. Para probar en línea de comandos, expórtala: export DUNNING_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxx y pega los comandos de la documentación en la terminal.

Envelope de error

Todo error responde con un envelope estable — message legible para humanos, code estable para máquinas (y, cuando es útil, details):

{
"message": "Permissão insuficiente",
"code": "FORBIDDEN"
}

Decide siempre por el code (VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, NOT_FOUND, CONFLICT, IDEMPOTENCY_KEY_REUSED, RATE_LIMITED, INTERNAL_ERROR...) — el texto de message puede cambiar sin aviso.

Códigos de retorno

La API usa los códigos HTTP estándar:

CódigoDescripción
200 OKRequest exitosa con cuerpo de respuesta.
201 CreatedRecurso creado con éxito.
204 No ContentRequest exitosa, sin cuerpo de respuesta.
400 Bad RequestRequest malformada — JSON inválido, header de idempotencia inválido.
401 UnauthorizedClave de API ausente, inválida, revocada o expirada.
403 ForbiddenClave sin el scope necesario, o recurso administrativo inaccesible vía API.
404 Not FoundRecurso o ruta inexistente (o perteneciente a otra organización).
409 ConflictConflicto de estado — reuso de X-Idempotency-Key, transición inválida.
422 Unprocessable EntityRequest bien formada, pero los datos no pasan la validación de negocio.
429 Too Many RequestsLímite de requests excedido — espera el Retry-After.
5xxError en el servidor — mira abajo cómo reintentar.

Errores 5xx y reintentos

500, 502, 503 y 504 indican una falla de nuestro lado, casi siempre transitoria. Tu integración debe:

  1. Reintentar con backoff exponencial (ej.: 1s, 2s, 4s, 8s...) y un tope de intentos — nunca en loop inmediato.
  2. Usar X-Idempotency-Key en las mutaciones — el reintento devuelve la respuesta original en vez de duplicar la operación.
  3. Tratar el timeout de red como 5xx: no recibir respuesta no significa que la operación no se ejecutó; la idempotencia resuelve la ambigüedad.

En 429, espera la cantidad de segundos del header Retry-After antes del próximo intento.

Próximos pasos