Payments API
Query payment transactions across all customers.
List Payments
GET /api/v1/payments
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
limit | int | Items per page |
offset | int | Items to skip |
customer_id | string | Filter by customer, by their permanent id. A value that cannot be a customer id is a 422. When you hold only the external_id you gave them, read the id from Get Customer first |
search | string | Search the transaction comment. A digits-only value also addresses the record whose record id it is (the pay_/crd_ value, with or without the prefix), so it returns that record together with every comment showing the number; a gateway reference such as TR-1234 is matched through the comment it is parsed from. A comment written in any script is searchable. Covers every match in the date range. Capped at 128 characters |
type | string | Filter by summary card: electronic, manual, credit or refund. manual includes manual charges. An unknown value is a 422. |
from_date | string | Start date |
to_date | string | End date |
Response:
{
"payments": [
{
"id": "pay_abc123",
"customer_id": "789",
"customer_name": "Acme Corp",
"amount": 99.00,
"currency": "USD",
"status": "completed",
"method": "Manual Payment",
"method_type": "manual",
"record_type": "payment",
"recorded_at": "2026-03-15T14:22:00Z"
}
],
"total": 240,
"limit": 50,
"offset": 0,
"has_more": true,
"summary": {
"electronic": 4200.00, "electronic_count": 42,
"manual": 2340.00, "manual_count": 24,
"credits": 120.00, "credit_count": 8,
"refunds": 0.00, "refund_count": 0
}
}
summary carries the totals for each summary card over every record matching the query,
type included. Filtering to one card returns that card's totals and zero for the other
three, because none of their records match. If you previously read all four totals from a
type-filtered call, drop type and read the breakdown from the unfiltered response.
Payment Status
status is always completed, and there is no status filter. Every record this endpoint
returns is money that has already moved. A payment still being processed lives in your payment
gateway, so it has no record here.
A status parameter is ignored rather than rejected. If you previously sent status=pending
or status=failed and relied on the empty result, note that the same call now returns every
matching payment.
Method Types
method_type categorises how the payment was made.
| Value | Description |
|---|---|
electronic | Card / e-commerce gateway payment |
manual | Manually recorded payment (wire, check, cash) |
charge | Manual charge, a balance adjustment that debits the customer |
refund | Money returned to the customer |
Record Types
record_type distinguishes inbound payments from credits applied to the account.
| Value | Description |
|---|---|
payment | An inbound payment |
credit | A credit applied to the account |