GET /v1/invoices
List invoices, newest first
Host https://api.socialmatterspay.com · https://sandbox.socialmatterspay.com
Parameters
| Field | Notes |
|---|---|
limitquery · integer | 1 to 100. default 25 |
offsetquery · integer | default 0 |
statusquery · string | one of sent, partially_paid, paid, overdue, cancelled |
Responses
| Status | Meaning |
|---|---|
200 | A page of invoices, without payment instructions |
400 | Error — error shape and codes |
Fields of each item of data (200)
| Field | Notes | ||||||||
|---|---|---|---|---|---|---|---|---|---|
idstring | — | ||||||||
objectstring = "invoice" | — | ||||||||
statusenum | one of sent, partially_paid, paid, overdue, cancelled | ||||||||
amount_centsinteger | — | ||||||||
paid_centsinteger | — | ||||||||
remaining_centsinteger | — | ||||||||
overpaid_centsinteger | — | ||||||||
currencystring = "USD" | — | ||||||||
customer_namestring | — | ||||||||
customer_emailstring | — | ||||||||
due_datestring (date) | — | ||||||||
descriptionstring | null | — | ||||||||
line_itemsarray of object | As you sent them; they add up to amount_cents. null when the invoice has none3 child fields
| ||||||||
external_idstring | null | — | ||||||||
fundsobject | 4 child fields
| ||||||||
virtual_account_last_fourstring | null | — | ||||||||
payment_instructionsobject | Only on create and GET /v1/invoices/{id}4 child fields
| ||||||||
paid_atstring | null (date-time) | — | ||||||||
cancelled_atstring | null (date-time) | — | ||||||||
overdue_atstring | null (date-time) | — | ||||||||
created_atstring (date-time) | — |
Lists also return pagination: total, limit, offset, has_more.
Example
List invoices
curl https://sandbox.socialmatterspay.com/v1/invoices \
-H 'Authorization: Bearer sk_sandbox_…'
HTTP 200
Cache-Control: no-store
{
"data": [
{
"id": "9e80b109-af15-4764-9a39-0d09aa053140",
"object": "invoice",
"status": "cancelled",
"amount_cents": 64000,
"paid_cents": 0,
"remaining_cents": 64000,
"overpaid_cents": 0,
"currency": "USD",
"customer_name": "Acme Wholesale Inc",
"customer_email": "ap@acme.example",
"due_date": "2026-11-27",
"description": null,
"line_items": null,
"external_id": "INV-2026-0413",
"funds": {
"received_cents": 0,
"booked_cents": 0,
"held_at_bank_cents": 0,
"status": "none"
},
"virtual_account_last_four": "8494",
"paid_at": null,
"cancelled_at": "2026-10-28T00:28:41.700Z",
"overdue_at": null,
"created_at": "2026-10-28T00:28:41.695Z"
},
{
"id": "69fcf9e0-a58f-4891-ac46-3f2a615e070d",
"object": "invoice",
"status": "paid",
"amount_cents": 1850000,
"paid_cents": 1850000,
"remaining_cents": 0,
"overpaid_cents": 0,
"currency": "USD",
"customer_name": "Acme Wholesale Inc",
"customer_email": "ap@acme.example",
"due_date": "2026-11-27",
"description": "October shop supplies",
"line_items": [
{
"description": "Shelving units",
"quantity": 40,
"unit_price_cents": 42500
},
{
"description": "Delivery and installation",
"quantity": 1,
"unit_price_cents": 150000
}
],
"external_id": "INV-2026-0412",
"funds": {
"received_cents": 1850000,
"booked_cents": 1850000,
"held_at_bank_cents": 0,
"status": "booked"
},
"virtual_account_last_four": "6252",
"paid_at": "2026-10-28T00:28:41.687Z",
"cancelled_at": null,
"overdue_at": null,
"created_at": "2026-10-28T00:27:40.662Z"
}
],
"pagination": {
"total": 2,
"limit": 25,
"offset": 0,
"has_more": false
}
}
POST /v1/invoices
An invoice with its own account number; whatever the customer sends there pays it
Host https://api.socialmatterspay.com · https://sandbox.socialmatterspay.com
For large business payments: the customer pushes the money from their own bank (an ACH credit or an instant payment) to the invoice's account and routing number, so no debit limit applies. Money is matched by account, so partial payments and overpayments are recorded too (invoice.partially_paid, invoice.paid), and so is money the customer sends after the invoice is paid (invoice.paid again, with received_now_cents and overpaid_cents). Past its due date with money still owed, the invoice becomes overdue once (invoice.overdue). funds says where the money is: received money stays in the invoice's account at the bank, outside the merchant's balance and payouts, until it is booked. payment_instructions (the full account number) is returned here and by GET /v1/invoices/{id} only. The same Idempotency-Key with the same body returns the same invoice (200); with a different body it is a 409.
Parameters
| Field | Notes |
|---|---|
Idempotency-Key requiredheader · string | 1–255 characters. printable characters, no spaces; see Idempotency |
Request body
| Field | Notes | ||||||
|---|---|---|---|---|---|---|---|
customer_name requiredstring | up to 200 characters | ||||||
customer_email requiredstring (email) | — | ||||||
amount_cents requiredinteger | 1 to 1000000000 | ||||||
due_date requiredstring (date) | Today or later | ||||||
descriptionstring | up to 1000 characters | ||||||
external_idstring | up to 255 characters | ||||||
line_itemsarray of object | Must add up to amount_cents. at least 1 item. at most 100 items3 child fields
|
Responses
| Status | Meaning |
|---|---|
200 | Invoice (Invoice) |
201 | Invoice (Invoice) |
400 | Error — error shape and codes |
403 | Error — error shape and codes |
409 | Error — error shape and codes |
Fields of data (200)
The same fields as under listInvoices.
Example
Invoice a business customer
curl -X POST https://sandbox.socialmatterspay.com/v1/invoices \
-H 'Idempotency-Key: inv_2026_0412' \
-H 'Authorization: Bearer sk_sandbox_…' \
-H 'Content-Type: application/json' \
-d '{
"customer_name": "Acme Wholesale Inc",
"customer_email": "ap@acme.example",
"amount_cents": 1850000,
"due_date": "2026-11-27",
"description": "October shop supplies",
"external_id": "INV-2026-0412",
"line_items": [
{
"description": "Shelving units",
"quantity": 40,
"unit_price_cents": 42500
},
{
"description": "Delivery and installation",
"quantity": 1,
"unit_price_cents": 150000
}
]
}'
HTTP 201
Cache-Control: no-store
{
"data": {
"id": "69fcf9e0-a58f-4891-ac46-3f2a615e070d",
"object": "invoice",
"status": "sent",
"amount_cents": 1850000,
"paid_cents": 0,
"remaining_cents": 1850000,
"overpaid_cents": 0,
"currency": "USD",
"customer_name": "Acme Wholesale Inc",
"customer_email": "ap@acme.example",
"due_date": "2026-11-27",
"description": "October shop supplies",
"line_items": [
{
"description": "Shelving units",
"quantity": 40,
"unit_price_cents": 42500
},
{
"description": "Delivery and installation",
"quantity": 1,
"unit_price_cents": 150000
}
],
"external_id": "INV-2026-0412",
"funds": {
"received_cents": 0,
"booked_cents": 0,
"held_at_bank_cents": 0,
"status": "none"
},
"virtual_account_last_four": "6252",
"paid_at": null,
"cancelled_at": null,
"overdue_at": null,
"created_at": "2026-10-28T00:27:40.662Z",
"payment_instructions": {
"account_number": "9434316252",
"routing_number": "110000000",
"account_type": "checking",
"reference": "69fcf9e0-a58f-4891-ac46-3f2a615e070d"
}
}
}
GET /v1/invoices/{id}
Get an invoice, with its payment instructions
Host https://api.socialmatterspay.com · https://sandbox.socialmatterspay.com
Reads the invoice's account at the bank first, so money that just landed shows at once.
Parameters
| Field | Notes |
|---|---|
id requiredpath · string | — |
Responses
| Status | Meaning |
|---|---|
200 | Invoice (Invoice) |
404 | Error — error shape and codes |
Fields of data (200)
The same fields as under listInvoices.
Example
Partly paid, the money held at the bank
curl https://sandbox.socialmatterspay.com/v1/invoices/69fcf9e0-a58f-4891-ac46-3f2a615e070d \
-H 'Authorization: Bearer sk_sandbox_…'
HTTP 200
Cache-Control: no-store
{
"data": {
"id": "69fcf9e0-a58f-4891-ac46-3f2a615e070d",
"object": "invoice",
"status": "partially_paid",
"amount_cents": 1850000,
"paid_cents": 1000000,
"remaining_cents": 850000,
"overpaid_cents": 0,
"currency": "USD",
"customer_name": "Acme Wholesale Inc",
"customer_email": "ap@acme.example",
"due_date": "2026-11-27",
"description": "October shop supplies",
"line_items": [
{
"description": "Shelving units",
"quantity": 40,
"unit_price_cents": 42500
},
{
"description": "Delivery and installation",
"quantity": 1,
"unit_price_cents": 150000
}
],
"external_id": "INV-2026-0412",
"funds": {
"received_cents": 1000000,
"booked_cents": 1000000,
"held_at_bank_cents": 0,
"status": "booked"
},
"virtual_account_last_four": "6252",
"paid_at": null,
"cancelled_at": null,
"overdue_at": null,
"created_at": "2026-10-28T00:27:40.662Z",
"payment_instructions": {
"account_number": "9434316252",
"routing_number": "110000000",
"account_type": "checking",
"reference": "69fcf9e0-a58f-4891-ac46-3f2a615e070d"
}
}
}
POST /v1/invoices/{id}/cancel
Cancel an unpaid invoice
Host https://api.socialmatterspay.com · https://sandbox.socialmatterspay.com
Money that lands after cancellation is still recorded on the invoice, so the merchant can send it back.
Parameters
| Field | Notes |
|---|---|
id requiredpath · string | — |
Responses
| Status | Meaning |
|---|---|
200 | Invoice (Invoice) |
404 | Error — error shape and codes |
409 | Error — error shape and codes |
422 | Error — error shape and codes |
Fields of data (200)
The same fields as under listInvoices.
Example
Cancel an unpaid invoice
curl -X POST https://sandbox.socialmatterspay.com/v1/invoices/9e80b109-af15-4764-9a39-0d09aa053140/cancel \
-H 'Authorization: Bearer sk_sandbox_…'
HTTP 200
Cache-Control: no-store
{
"data": {
"id": "9e80b109-af15-4764-9a39-0d09aa053140",
"object": "invoice",
"status": "cancelled",
"amount_cents": 64000,
"paid_cents": 0,
"remaining_cents": 64000,
"overpaid_cents": 0,
"currency": "USD",
"customer_name": "Acme Wholesale Inc",
"customer_email": "ap@acme.example",
"due_date": "2026-11-27",
"description": null,
"line_items": null,
"external_id": "INV-2026-0413",
"funds": {
"received_cents": 0,
"booked_cents": 0,
"held_at_bank_cents": 0,
"status": "none"
},
"virtual_account_last_four": "8494",
"paid_at": null,
"cancelled_at": "2026-10-28T00:28:41.700Z",
"overdue_at": null,
"created_at": "2026-10-28T00:28:41.695Z"
}
}
