Skip to content

List payments

GET /v1/partners/payments

Your own payments, newest first. This is the endpoint to reconcile against: ask for a period, page through it, compare with your ledger.

Permissionread-gateway
IdempotencyNot applicable — it reads
Answers200
GET /v1/partners/payments?page=1&limit=50&status=succeeded&from=2026-09-01&to=2026-09-30
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxx
x-partner-signature: <hmac-sha256 of the raw body, hex>
QueryNotes
page1-based. Defaults to 1
limitDefaults to 50, capped at 100
statusOne of the published statuses: pending, succeeded, failed, expired
external_refYour own reference, matched exactly. The lookup that matters when a customer calls: you are holding your invoice number, not ours
from / toInclusive. A bare YYYY-MM-DD covers the whole day
{
"data": {
"items": [
{
"id": "0f3c…",
"reference": "INV-2026-0912",
"status": "succeeded",
"is_final": true,
"method": "virtual_account",
"amount": "100000.0000",
"net_amount": "96000.0000",
"fee": "4000.0000",
"currency": "IDR",
"created_at": "2026-09-03T07:00:00.000Z",
"finalized_at": "2026-09-03T07:20:00.000Z"
}
],
"page": 1,
"limit": 50,
"total": 213
},
"request_id": "req_…"
}

Items are the same shape as the detail endpoint returns, so code that handles one handles the other.

total is the count matching your filter, not the page — divide by limit to know how many pages to walk.

Ask for the period, walk the pages, and compare. Polling one id at a time is for chasing a single transaction; it is not how you close a day.

GET /v1/partners/payments?from=2026-09-03&to=2026-09-03&status=succeeded&page=1&limit=100
GET /v1/partners/payments?from=2026-09-03&to=2026-09-03&status=succeeded&page=2&limit=100

Sum net_amount across succeeded rows for what you were owed that day; fee explains the difference from the gross. The provider/margin split remains internal to Moria.

The same data is downloadable as CSV from the console when a person rather than a system needs it — see The console.