v1.7.0: de quién es cada teléfono
POST /v1/portfolios/:id/debtorsaceptaowneren cada ítem decontactInfoPhoneNumbers:holder,third_party,reference,guarantorounknown. Es opcional: sin valor, el número quedaunknown- Las lecturas de deudores muestran
owneryownerSourceen cada teléfono - En un número que ya existía,
ownersolo cambia si viene en el request
v1.6.0: consentimiento y baja de contacto al cargar deudores
POST /v1/portfolios/:id/debtorsacepta cinco campos booleanos opcionales:complianceOptOut,complianceConsentToCall,complianceConsentToWhatsapp,complianceConsentToEmailycomplianceConsentToSms. Al crear, si no vienen, el deudor nace con los defaults de siempre; en una actualización un campo ausente no se tocacomplianceOptOut: trueregistra la baja igual que un pedido del deudor (nota, línea de tiempo y cancelación de mensajes de WhatsApp pendientes)
v1.5.0: contrato de pagos, límites y webhooks más estricto
POST /v1/portfolios/:id/debtorssuma dos valores areason.code:erased_subjectydebt_currency_invalid. El enum es cerrado: los clientes que validan estrictamente los valores tienen que agregarlosPOST /v1/paymentsresponde400 validation_errorcuando la moneda no se puede derivar o no es un código ISO 4217 (antes caía enMXN)POST /v1/paymentsresponde409 idempotency_conflictsi elexternalIdya se usó en la cartera con otro cuerpo; con el mismo cuerpo sigue devolviendo200con el pago existente. El pago ahora traeexternalId(nullsi no se cargó por ese endpoint)GET /v1/debtors:statusacepta una lista separada por comas (desde el 2026-09-14)- Un valor desconocido en
statusodirectionresponde400 validation_erroren vez de500 POST /v1/portfolios/:id/importsrespetaIdempotency-Key- Webhooks: la URL tiene que ser
httpspública y no se siguen redirecciones. Cada payload sumalivemode:falsepara eventos de carteras sandbox,truepara el resto limitqueda documentado: default 50, de 1 a 100, y un valor fuera de rango se recorta en vez de rechazarse.error.codepasa a ser un enum cerrado en la spec
v1.4.0: los mensajes de error vuelven en inglés
- El
messagedel sobre de error (todos los endpoints, incluidos los motivos por ítem dePOST /v1/portfolios/:id/debtors) ahora es texto en inglés en vez de español. Elcodeno cambia: cualquier integración que ramificaba su lógica por el texto demessageen vez de porcodetiene que actualizarse;codesiempre fue, y sigue siendo, la forma soportada de manejar un error - Una respuesta guardada por
Idempotency-Keysigue reproduciendo elmessageen español hasta que esa clave vence (24 horas, ver Deudores): sólo una request nueva después de ese margen ve el mensaje en inglés
v1.3.0 — rate limit ponderado por ítems y claves acotadas por cartera
POST /v1/portfolios/:id/debtorsahora cobra el rate limit por el tamaño real del lote: 1 unidad cada 50 deudores (mínimo 1), en vez de la unidad fija por request del resto de la API. Un lote de 500 deudores cuesta 10 unidades.X-RateLimit-Remainingen la respuesta de ese endpoint ya refleja el cobro del lote entero (ver Paginación, errores y límites)- Una clave de API puede emitirse acotada a un subconjunto de carteras de
tu organización. Con una clave acotada, cualquier cartera fuera de la
lista responde
404 not_found, igual que una cartera de otra organización, y los listados devuelven sólo lo que cae dentro de las carteras habilitadas (ver Autenticación). Pedíselo a tu contacto en Mozart al solicitar la clave
v1.2.0 — escritura masiva de deudores
Escritura masiva de deudores, con sus deudas, en un solo lote:
POST /v1/portfolios/:id/debtors— crear o actualizar hasta 500 deudores por request, con resultado por ítem, idempotente porexternalIdy por la cabeceraIdempotency-Key(ver Deudores)externalIdnuevo en la respuesta deGET /v1/debtorsyGET /v1/debtors/:id- Códigos de error nuevos:
payload_too_large(413, lote de más de 500 deudores) eidempotency_conflict(409, mismaIdempotency-Keycon otro cuerpo) - 2026-09-18 (fix posterior):
POST /v1/portfolios/:id/debtorssuma un tope de 5 MB por cuerpo de request (413 payload_too_large, además del tope de 500 ítems) y un octavo motivo de rechazo por ítem,debt_duplicate_in_batch(dos ítems del mismo lote declarando la misma deuda nueva)
v1.1.0 — escritura y webhooks
Primera versión con escritura y con eventos en tiempo real.Escritura, con una clave con el scope
write (ver
Autenticación):POST /v1/payments— registrar un pago, idempotente porexternalId(ver Pagos)POST /v1/portfolios/:id/imports/upload-url,POST /v1/portfolios/:id/imports,GET /v1/imports/:id— cargar un CSV de deudores y deudas a una cartera existente (ver Carga de cartera)
call.completed,
promise.created y payment.registered, firmados con
X-Mozart-Signature (ver Webhooks).El resto de la API sigue igual: sólo read para todo lo demás.v1.0.0 — lectura
Primera versión pública de la API. Sólo lectura, sobre los datos de tu
organización:
GET /v1/meGET /v1/portfolios,GET /v1/portfolios/:idGET /v1/debtors,GET /v1/debtors/:idGET /v1/debts,GET /v1/debts/:idGET /v1/calls,GET /v1/calls/:id(con análisis post-llamada)GET /v1/payments,GET /v1/payments/:idGET /v1/promisesGET /v1/campaigns,GET /v1/campaigns/:id
Authorization: Bearer), paginación por
cursor y límite de 300 requests por minuto por clave. Ver
Paginación, errores y límites para el
detalle.