Skip to main content
Export the transactions behind any payout batch as CSV or Excel (.xlsx). The export carries every field your finance team needs to reconcile against bank statements and accounting records: amounts, fee breakdowns, exchange rates, refund status, and timestamps. Both formats are produced by the same transaction search endpoint. The output format is chosen by the Accept header; the request body selects which transactions you want. That makes reconciliation flexible: filter by payout batch for monthly close, or by date range to generate quarterly reports.

Choosing CSV or Excel

CSV

Best for scripts, accounting imports (Xero, QuickBooks), and pipelines. Plain text, easy to diff and grep.

Excel (`.xlsx`)

Best for finance teams opening files directly. Numeric columns keep their formatting, no import wizard.

Exporting from the console

1

Open the payout detail page

Navigate to Payouts in the Console and click the batch you want to export.
2

Click Export

Click the Export button on the detail page and choose either CSV or Excel. The download starts immediately.
Files are named payout-{batchId}-transactions.csv or .xlsx on console exports. When you export from the transactions search page directly, the default filename is transactions-{YYYY-MM-DD}.{csv|xlsx}.
The same Export dropdown is on the transactions search page itself. Any filter you have applied (status, date range, currency, customer email) is honoured. That means you can generate a targeted export without needing a payout batch.

Exporting via API

Both formats live on the existing transaction search endpoint. You choose the format with the Accept header and the rows with the request body.

Endpoint

POST /api/v1/merchants/{merchantId}/transactions

Headers

HeaderValuePurpose
AuthorizationBearer <access_token>Standard API auth
Content-Typeapplication/jsonRequest body is JSON
Accepttext/csvReturns CSV
Acceptapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetReturns XLSX
The Accept match is case-insensitive. Omitting Accept (or sending application/json) returns the standard paginated JSON response instead.

Request body

Any filter supported by transaction search works. For payout reconciliation, filter by batch ID:
{
  "search": {
    "payout_batch_id": { "eq": "550e8400-e29b-41d4-a716-446655440000" }
  }
}
Other common filters: status, created_at range, currency, customer_email.contains, order_id.contains. Combine them freely. See the API reference for the complete search schema.

Example: CSV

curl -X POST 'https://core.quidkey.com/api/v1/merchants/{merchantId}/transactions' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'Accept: text/csv' \
  -d '{"search":{"payout_batch_id":{"eq":"<batchId>"}}}' \
  -o payout-transactions.csv

Example: Excel (.xlsx)

Swap the Accept header and treat the response body as binary:
curl -X POST 'https://core.quidkey.com/api/v1/merchants/{merchantId}/transactions' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' \
  -d '{"search":{"payout_batch_id":{"eq":"<batchId>"}}}' \
  -o payout-transactions.xlsx
The response carries Content-Disposition: attachment; filename="..." for browser downloads. Server-side callers can ignore it and name the file themselves.

Response columns

Each row represents one transaction that matched the search filters.
#ColumnDescriptionExample
1Transaction NumberUnique transaction identifierTXN-20240401-001
2StatusNormalised merchant-facing statusCompleted
3AmountOriginal transaction amount in decimal50.00
4CurrencyOriginal currency (ISO 4217)EUR
5Converted AmountAmount after conversion to payout currency43.50
6Payout CurrencyCurrency of the payout batchGBP
7Exchange RateRate applied (empty for same-currency payouts)0.87
8Fee TotalSum of all fees deducted1.25
9Fee CurrencyCurrency the fees were charged inGBP
10Fee DetailsPer-fee breakdown, pipe-separatedprocessing:0.75|scheme:0.50
11Refund StatusRefunding, Partially Refunded, Fully Refunded, or emptyPartially Refunded
12Refunded AmountTotal refunded so far, in the original currency10.00
13Customer EmailCustomer email address (if provided)jane@example.com
14Order IDYour internal order referenceORD-12345
15Created AtISO 8601 timestamp2024-04-01T10:30:00Z
16Paid Out AtISO 8601 timestamp (empty until the payout executes)2024-04-05T14:00:00Z
Amounts are decimal. The export converts minor units to decimal (5000 cents becomes 50.00), which differs from the JSON API where amounts stay in minor units. This is intentional: exports are read by humans and accounting tools, so the representation matches what you’d expect to see in a ledger.
Refund columns are populated only for payment transactions with completed refunds. For refund transactions themselves, or payments with no refunds, both columns are blank.

Understanding fees

The Fee Total column is the sum of every fee for the transaction. The Fee Details column gives the breakdown as type:amount pairs separated by pipes (|). Example: a Fee Details value of processing:0.75|scheme:0.50 resolves to:
Fee typeAmount
Processing0.75
Scheme0.50
Total1.25

Row limits and truncation

An export is capped at 10,000 rows per request. When the filter matches more than that, the export still returns (with the first 10,000 rows) and sets two response headers so callers know it happened:
HeaderValueMeaning
X-Export-TruncatedtrueThe match exceeded the row cap
X-Export-TotalIntegerThe full match count
The console surfaces truncation as a warning toast after the download completes. API callers should inspect the headers and, if truncated, narrow the filter window (by date, status, or currency) and retry until each window fits under the cap.
Never assume an export is complete without checking X-Export-Truncated. A truncated payout export that’s silently imported into accounting will under-report revenue.

Tips for reconciliation

Use the payment reference from the payout batch detail page. This reference appears on your bank statement and uniquely identifies the transfer.
For cross-border payments, Amount and Currency show the original transaction values. Converted Amount and Payout Currency show what was actually paid out. Exchange Rate is the rate applied at conversion time, which may differ from spot rates on the payout date.
Refund Status and Refunded Amount let you identify transactions that were fully or partially refunded within the batch. Subtract Refunded Amount from the gross Amount to get net revenue per transaction.

Next steps

Payout overview

How payouts work and the full reconciliation workflow

API reference

Full endpoint and search schema documentation