Vas a lograr registrar un pago con POST /v1/payments sin duplicarlo en un reintento, y leer y conciliar los pagos que ya existen en Mozart.
Registrar un pago por la API requiere una clave con el scope write (ver Autenticación). Sin ese scope, POST /v1/payments responde 403 forbidden.

Registrar un pago

Campos del body

Idempotencia por externalId

externalId es tu clave de idempotencia: identificá cada pago de tu lado con un valor propio (el id de tu transacción, por ejemplo) y mandalo siempre que registres ese pago.
1

Primer request

Un externalId nuevo para esa cartera crea el pago y responde 201.
2

Reintento con el mismo externalId

Si volvés a mandar el mismo externalId en la misma cartera —por un timeout, un reintento automático de tu lado, lo que sea— la API no crea un segundo pago: responde 200 con el pago que ya existía.
La idempotencia es por portfolioId + externalId. El mismo externalId en dos carteras distintas crea dos pagos: no es una clave global.

Errores típicos

Ver Paginación, errores y límites para el formato completo del sobre de error.

Ejemplos por lenguaje

Otras formas en que se registra un pago

POST /v1/payments no es la única fuente: un pago también se registra manualmente desde el panel de Mozart, por un link de cobro (pay.mozarth.com), o lo trae el importador de carteras cuando una deuda llega al archivo ya parcialmente pagada. Los tres caminos se leen igual por GET /v1/payments.

Leer pagos

paymentMethod es uno de transfer, cash, collection_network, deposit, card, check u other.

Promesas de pago

GET /v1/promises lista los compromisos de pago futuro. Cuando una promesa se cumple, queda vinculada al pago que la cumplió:
status de una promesa es uno de pending, partial, fulfilled, broken o cancelled.

Conciliación con tus propios registros

La forma confiable de conciliar una promesa con el pago que la cumplió es el vínculo directo por id: promise.paymentId apunta al id del pago correspondiente (y, a la inversa, payment.promiseId apunta a la promesa que ese pago cumplió). Si además necesitás cruzar un pago contra tu propio sistema, usá reference para lo que ya venías registrando manualmente, o externalId para lo que registrás vos mismo por POST /v1/payments — es la clave que vos elegiste. promise.paymentReference es el mismo tipo de dato visto desde la promesa. reference es texto libre y opcional: puede venir vacío, así que no lo uses como única clave de conciliación si tu proceso lo necesita sin excepciones.

Siguiente paso

Seguí con Carga de cartera para cargar deudores y deudas por la API.