The Management API has a family of read-only search endpoints with one shared shape. All of them:
  • take comma-separated values on every filter for multi-select,
  • paginate with page (default 1) and limit,
  • require programId,
  • and can export instead of returning JSON: pass resultType=file and you get a presigned S3 CSV URL (valid 1 hour) in place of the data array (filePrefix customises the filename).
Responses share a flat envelope, with pagination alongside the results:
Not every endpoint takes every shared filter — keyword and the date-range parameters in particular vary. Each API Reference page lists exactly what its endpoint accepts.
Each endpoint below links to its API Reference page, where you can inspect the full schema and send a live request with the Try it playground.

The endpoints

Defaults worth knowing

GET /v1/payments/requests does not return everything by default. With no status filter it returns only PENDING, PENDING_TM, INITIATED and PENDING_CANCELLATION — pass an explicit status list to see anything else.Its date filters are also startDate / endDate, not fromDate / toDate. The fromDate/toDate names are ignored here, so a request carrying them silently searches an unbounded range rather than failing.
GET /v1/accounts does not accept keyword — use the specific identifier filters (accountId, iban, accountNumber, accountProviderAccountId, accountName). Accounts in PENDING status are always excluded, whatever status you pass. allPrograms has no effect on it: programId always sets the program scope.

Payment-request export columns (changed)

GET /v1/payments/requests now returns a defined field set instead of the stored record. Previously the response — and the resultType=file CSV built from it — carried whatever the search index happened to hold, so any key the indexer wrote could turn up as a column. Both now follow the documented shape: the CSV columns are drawn from a fixed, documented set of fields, and which of them appear still depends on the rows returned — json-2-csv builds the header from the keys present across them, so an export of only FEE and CARD rows carries no payee.* columns.Columns removed from the export (and fields removed from the JSON response). This list is exhaustive — it is the full difference against the stored record, not against the published PaymentRequest schema:Nothing used for provider reconciliation or support was removed. providerRequestId, endToEndReference, originalEndToEndReference, providerStatus, entity, custodianId, debtorViban, batchItemId, batchId, unloadId, childAccountId, purpose and updatedAt are all still returned, alongside programId, subType and transactionMonitoring. So is payee.currency, which on an international payout is the target currency the beneficiary was credited in — the top-level currency is the source we debited, and the two are deliberately different. If you match exports against a provider, or attribute a prepaid master-account row to its child, the keys you match on are unchanged.originalEndToEndReference matters most where reconciliation is hardest: when a cancellation at the bank burns the original end-to-end id and the payment is re-submitted, endToEndReference holds the id actually sent on the wire and originalEndToEndReference preserves the one the provider first saw.The SEPA direct-debit cancellation context is still returned too — priorStatusBeforeCancellation, cancellationRequestedAt, cancellationReasonCode and cancellationSource. PENDING_CANCELLATION is one of the default statuses, so those rows are in the default result set.CSV column shapes are unchanged. statusHistory is still flattened one column per entry — statusHistory.0.status, statusHistory.1.status, … — so existing sheets and parsers keep working. Column order does change, though: it now follows the documented field order rather than the stored record’s key order. Parsers that read columns by name are unaffected; positional ones are not.Two corrections apply to the JSON response: statusHistory is now always an array (it could previously arrive as an object keyed "0", "1", …), and isDirectDebit is always present as a boolean rather than sometimes absent — so it now appears on every row of the export, not only on rows that stamped it.

Program scope

programId is required on every search, including when you pass allPrograms=true. That flag widens the search from one program to every program your operator role is entitled to — it does not replace programId, and it never reaches beyond your entitlements. A role with no program entitlement matches nothing rather than everything. On GET /v1/accounts the flag has no effect at all: that endpoint always scopes to the programId you pass.