Skip to main content

Overview

Every filter on /v1/transactions is an optional query parameter, and they combine freely. This guide covers how they behave together, how to paginate, and how to total revenue correctly. For the canonical list of parameters and their accepted values, see the list-transactions reference.

Filters

Each filter below is a recipe. The reference lists every accepted value.
  • Payment method - payment_method=CARD_PRESENT (or QR_PH, ECOM). Omit it to get every method in one response.
  • Merchant - merchant_id={uuid}, using a UUID from /v1/merchants.
  • Branch - branch_id={uuid}, using a UUID from /v1/branches.
  • Terminal - activation_code=XXXX-XXXX-XXXX-XXXX, the physical device identifier.
  • Status - one or more, comma-separated: status=CAPTURED,PENDING. See the reference for the full status list.
  • Card brand - card_brand=VISA (card transactions only).
  • Date range - date_from and date_to as RFC 3339 timestamps; use either or both.

Sorting

Control the order of results with sort_by and sort_order:

Pagination

Results are cursor-paginated for efficient traversal of large datasets.

Parameters

How It Works

  1. Make your initial request with page_size:
  1. The response includes pagination metadata:
  1. Pass next_cursor to get the next page:
  1. Continue until has_more is false.
Don’t change sort_by between pages. Cursors are tied to the sort field used when the cursor was created. Changing sort_by mid-pagination returns a 400 error. Start a new query instead.

Combining Filters with Pagination

All filters work with pagination, but the cursor does not carry your filters - it encodes only the sort field, the sort position, and the source. You must resend every filter unchanged on each page.
Only a changed sort_by is detected and rejected with 400. Changing any other parameter mid-pagination (merchant, status, date range, page_size, sort_order, and so on) is not caught and returns incorrect results. Keep every filter identical across pages, or start a new query.

Amount Details

When the data is available, a transaction includes an amount_details object with amounts in the smallest currency unit (cents). The field is omitted (not null) when the breakdown is unavailable, so treat it as optional:
Calculating GTV: Sum the top-level amount field across CAPTURED and PARTIALLY_REFUNDED transactions for the period. Do not sum amount_details.amount_received directly: for some card-present transactions it can be 0 while the top-level amount reflects the authorized value, so summing it undercounts.

Error Responses

Invalid filter values return 400 Bad Request:
Common errors:
  • Unknown query parameter → "unknown query parameter: foo"
  • Invalid status value → "invalid status: INVALID"
  • Invalid date format → "invalid date_from: must be RFC 3339"
  • Invalid sort field → "invalid sort_by: must be created_at, updated_at, or amount"

What’s Next?

API Reference

Full endpoint reference with request/response schemas

Authentication

API keys and entity scoping