Skip to main content
A statement is a file listing every fee event Reap billed you for over a period, one row each. It carries the transaction, the fee category, and the amounts behind each row. Statements are produced as CSV files. You request one for a date range, Reap prepares it, and you download it when it is ready.

Requesting a statement

Call Request statement with a type and a period. The period is a range of calendar days in UTC, inclusive at both ends. Three limits apply to the period:
  • It covers at most 31 days, which is enough for one monthly billing cycle.
  • It ends at least two days before today. Card transaction data takes up to 48 hours to settle, so a period ending more recently would still be moving.
  • It starts no earlier than 1 June 2026.
Five statements can be preparing at once. Request a sixth while five are still pending and the call is rejected until one of them finishes. By default the file contains every column of the type. Pass fields to narrow it to the columns you want, in the order you want them. The response echoes your request as a statement resource with an id.

Waiting for the file

A statement starts as PENDING while Reap prepares it, then becomes GENERATED when the file is ready. Most statements are ready within a couple of minutes. Subscribe to STATEMENT_STATUS_UPDATED rather than polling. The payload is the statement resource, so status tells you when to download. If you do poll, use Get statement. A statement can also read FAILED, which means no file will arrive and you should request the period again. Once generated, the resource also reports rowCount and byteSize, plus dataAsOf: how fresh the underlying records were when the file was produced.

Downloading

Call Download statement. It answers 302 with a redirect to a short-lived URL that serves the file, so an HTTP client that follows redirects gets the file in one call. Fetch that URL without your API credentials, because it carries its own. Send Accept: application/json instead and you get the URL and its expiry in the body, which suits a browser download or a signed link you pass to another system. Download links last five minutes, but you can ask for a new one at any time. Files themselves stay available for 180 days from the day the statement was generated.

File format

Every statement follows the same dialect, whatever its type. Files are UTF-8 CSV with a header row, comma separated, \n line endings, and " quoting for values containing a comma, a quote, or a newline. Empty columns are written as an empty field rather than the word null. Timestamps are ISO 8601 in UTC (2026-07-14T09:21:07Z) and dates are YYYY-MM-DD. Amounts are plain decimal strings with no thousands separator and no currency symbol. Rows arrive oldest first. Each type documents the columns it carries and the scale of its amounts.

Available types

Card transaction fees

One row per fee event on a card transaction: purchases, ATM withdrawals, refunds, wallet provisioning, and 3DS authentication.

Column stability

Columns are tied to the API version the statement was requested under, reported as version on the resource. Within a version a column never changes name, type, or meaning, and columns are only ever added to the end of the file. Read columns by their header name rather than by position and an added column will not break your parser. See versioning for how versions work.