GET /customers/orders
Cursor-paginated list of your organization's orders across every customer, newest first. Each row is the same order returned by GET /customers/orders/:id, plus the list context: which customer it belongs to and who placed it.
For one customer's history, use GET /customers/:id/orders.
Query parameters
| Parameter | Type | Notes |
|---|---|---|
source_rail | string | Match orders whose source rail is this. Repeat the parameter to pass several (?source_rail=ach&source_rail=wire). |
source_schema | string | Match orders whose source rail is in this schema (see GET /schemas). Repeatable. |
destination_rail | string | Same as source_rail, on the destination side. Repeatable. |
destination_schema | string | Same as source_schema, on the destination side. Repeatable. |
status | string | Match orders in this lifecycle status (awaiting_funds, pending, under_review, processing, sent, completed, expired, failed, canceled, refunded). |
limit | integer | Page size. Defaults to 50; max 200. |
cursor | string | Opaque cursor from the previous page's next_cursor. Omit on the first request. |
Within a side, rail and schema values are OR'd — an order matches when its rail on that side is any of the named rails or belongs to any of the named schemas. Across sides (and with status), the constraints are AND'd. Unknown rail, schema, or status names are rejected with 400 InvalidRequest rather than returning an empty page.
Filtering by direction
There is no separate direction field — on-ramp vs off-ramp is implied by the rail kinds of the two sides, so direction is expressed with the side filters. The crypto side of every order today is either an EVM network (the evm schema) or solana, so:
-
Off-ramp orders (crypto in, fiat out) — constrain the source to the crypto rails:
curl "$SEISMIC_ORCHESTRATION_URL/v0/customers/orders?source_schema=evm&source_rail=solana" \ -H "Api-Key: $SEISMIC_ORCHESTRATION_API_KEY" -
On-ramp orders (fiat in, crypto out) — the same constraint on the destination:
curl "$SEISMIC_ORCHESTRATION_URL/v0/customers/orders?destination_schema=evm&destination_rail=solana" \ -H "Api-Key: $SEISMIC_ORCHESTRATION_API_KEY"
Check GET /rails for the current rail catalog if you need the recipe to track newly added networks.
Pagination
Pages are ordered newest first with a stable tiebreak, so walking pages never skips or duplicates an order even while new orders land. next_cursor is null on the last page; otherwise pass it back as ?cursor= to fetch the next page.
Response 200
{
"data": [
{
"id": "f01e…",
"customer_id": "7c1d…",
"placed_by_user_id": "3a9b…",
"status": "processing",
"source": {
"amount": "100.00",
"currency": "EUR",
"rail": "sepa",
"account_id": "5d8a…"
},
"destination": {
"amount": "108.42",
"currency": "USDC",
"rail": "base",
"account_id": "9b2f…"
},
"reference": "invoice-2026-04-001",
"payment_reason": "employee_salaries_or_wages",
"idempotency_key": "8b3c4d5e-…",
"created_at": "2026-04-12T14:23:01.000Z",
"updated_at": "2026-04-12T14:25:44.000Z"
}
],
"next_cursor": "MTc0NDQ2…"
}Each row carries the full order — see Fields on the accept-quote page — plus:
| Field | Type | Notes |
|---|---|---|
customer_id | uuid | Customer the order belongs to. |
placed_by_user_id | uuid | Organization member who placed the order (or who minted the API key it was placed under). |
updated_at | string | When the order last changed. |
Errors
400 InvalidRequest: unknown rail, schema, or status name, or a malformedlimit.
Example
curl "$SEISMIC_ORCHESTRATION_URL/v0/customers/orders?status=completed&limit=100" \
-H "Api-Key: $SEISMIC_ORCHESTRATION_API_KEY"