Skip to content
Seismic Orchestration

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

ParameterTypeNotes
source_railstringMatch orders whose source rail is this. Repeat the parameter to pass several (?source_rail=ach&source_rail=wire).
source_schemastringMatch orders whose source rail is in this schema (see GET /schemas). Repeatable.
destination_railstringSame as source_rail, on the destination side. Repeatable.
destination_schemastringSame as source_schema, on the destination side. Repeatable.
statusstringMatch orders in this lifecycle status (awaiting_funds, pending, under_review, processing, sent, completed, expired, failed, canceled, refunded).
limitintegerPage size. Defaults to 50; max 200.
cursorstringOpaque 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:

FieldTypeNotes
customer_iduuidCustomer the order belongs to.
placed_by_user_iduuidOrganization member who placed the order (or who minted the API key it was placed under).
updated_atstringWhen the order last changed.

Errors

  • 400 InvalidRequest: unknown rail, schema, or status name, or a malformed limit.

Example

curl "$SEISMIC_ORCHESTRATION_URL/v0/customers/orders?status=completed&limit=100" \
  -H "Api-Key: $SEISMIC_ORCHESTRATION_API_KEY"