These endpoints record payments you already collected. To charge a borrower’s stored payment method, use the payment-method endpoints instead.
Before you call
- An API key that can mint an access token
- The
external_payments:writescope to record and reverse payments - The
external_payments:readscope to read them back curlandjq
Choose the payment method
Send
check_number only for the check-type methods, and card_brand only for card. Any other combination returns 422.
Record a payment
Every request needs anIdempotency-Key. Use a new key for each payment you record, and reuse the same key only when you retry that same request.
- Send an
external_reference(your receipt or POS number) on every payment. It lets you find the payment again and blocks an accidental duplicate. See Useexternal_referenceas a second guard below. - Payments always post as of the servicing system’s current business day, so the request has no effective date field. The
effective_datein the response tells you which day was used.
Read the result
A key without
external_payments:write gets 403 insufficient_scope on every write.
Retry safely
Retrying with the sameIdempotency-Key and the same body returns the original response. It never records the payment a second time, even after the original succeeded.
- The same key with a different body returns
409idempotency_conflict. - A retry while we still can’t confirm the outcome of the original returns
409idempotency_in_progress. Keep pollingGET /v1/payments/{payment_id}, or contact Monterey. Don’t switch to a new key: a new key is a new payment.
Use external_reference as a second guard
Each external_reference identifies at most one payment per organization. If you send a reference that one of your payments already holds, Monterey returns 409 duplicate_external_reference with that payment’s payment_id and records nothing:
Idempotency-Key. A payment that definitely failed (422 omega_rejected, or 503) doesn’t hold its reference, so you can correct the request and retry under the same reference.
Reverse a payment
You can reverse only payments your organization recorded through this API. Payments from any other source return404.
is_nsf to true when the reversal is for non-sufficient funds.
reason is required, up to 200 characters. Reversal requests follow the same Idempotency-Key rules as posting.
Find a payment by your reference
If you lost thepayment_id (for example, your system stopped before saving our response), look the payment up by the external_reference you sent:
cursor and limit. At most one of them holds the reference: the payment that posted, is pending, or was reversed. Any others are earlier attempts that definitely failed. To reverse the payment, take its payment_id and call the reversal endpoint.
Reading payments needs the external_payments:read scope. A tampered or expired cursor returns 400 invalid_cursor.
List your recorded payments
GET /v1/accounts/{account_id}/payments returns only the payments your organization recorded through this API, newest first, paginated with cursor and limit. To see every transaction on the account, including payments from other sources, use the transactions endpoints.