Skip to main content
Payrails Reports let you export financial and operational data as CSV files for reconciliation, accounting, and business analysis. Reports are generated asynchronously — you request a report run, and once it completes, you download the file via a pre-signed URL. You can generate reports through the Payrails Portal or programmatically via the API.

Available report types

You can list all reports available to your organization using the Search & list reports endpoint.

Download reports via API

Generating a report is an asynchronous process. Follow these steps:

Step 1: Get an access token

Authenticate using your API credentials to obtain a bearer token. See Authentication for details.

Step 2: Create a report run

Submit a POST request to /analytics/reportRuns with your desired report type and date range. When requesting settlements reports, please do not specify any Workspace Id as settlements report is only available on organization level.
The workspaceId field is optional. Include it only if you want to scope the report to a specific workspace. Omitting it returns data across all workspaces your credentials have access to. Parameters The API responds with 202 Accepted and a report run object in pending status:

Step 3: Poll for completion

Report generation runs asynchronously. Poll GET /analytics/reportRuns/{id} using the id from the previous response until status changes from pending to successful.
Most report runs complete within 2–3 minutes. We recommend polling every 5–10 seconds. Once complete, the response includes a result object with a pre-signed download URL:

Step 4: Download the CSV

Execute a GET request on result.url to download the file. This URL is pre-signed and expires at result.expiresAt — make sure to download the file before it expires.

Download reports via Portal

  1. Log in to the Payrails Portal.
  2. Navigate to Reports.
  3. Select the report type and date range.
  4. Click Download to export a CSV file.

Limitations

  • File format: Reports are only available as CSV files.
  • File size: Reports are capped at 5 GB per file. If your date range produces a report that exceeds this limit, the report run will fail. Reduce the date range and re-run the report.
  • File expiry: The pre-signed download URL expires after a fixed TTL. Download the file before result.expiresAt. If it has expired, calling the GET /analytics/reportRuns/{id}endpoint will generate a new pre-signed download URL.
  • No webhook or push notification: There is currently no callback or event mechanism to notify you when a report run is ready. Polling GET /analytics/reportRuns/{id} is the only way to check completion status. Build your integration to poll actively and handle both Successful and Failed terminal states.
  • Report availability: The report types available to your organization depend on your Payrails module configuration. Use the Search & list reports endpoint to confirm which report codes are enabled for your account.

Error handling

Report runs can complete with a Failed status. Your integration should handle this explicitly. Do not assume a run will always succeed. When a run fails, the response includes an error field with a code describing the reason.

FAQ

Most report runs complete within 2–3 minutes. Polling every 5–10 seconds is recommended.
Not currently. There is no webhook or callback mechanism available — polling is the only way to check on a report run. Send a GET request to /analytics/reportRuns/{id} at a regular interval (every 5–10 seconds is recommended) until the status is Successful or Failed. Make sure your integration handles both terminal states explicitly.
The report run will fail with an error. Reduce the date range in your request and re-run the report. If you regularly need to export large volumes of data, consider breaking your date range into smaller weekly or bi-weekly batches.
Use a TZ database name such as Europe/Berlin or America/New_York. If you omit the timezone parameter, it defaults to UTC. Choosing the right timezone ensures that day boundaries in the report align with your local business hours.
Yes. If it has expired, calling the GET /analytics/reportRuns/{id}endpoint will generate a new pre-signed download URL.
Yes. Pass the workspaceId field in the request body to filter results to a specific workspace. Omit it to include data across all workspaces your credentials have access to.
The endpoint returns the most recent report runs in descending order by createdAt, with a default page size of 10. You can paginate using page[after], page[before], and page[size], and filter by filters[status], filters[id], and filters[workspaceId].
Report availability is tied to which Payrails modules are configured for your account. Contact your Payrails account manager if you need access to a report type that is not listed.
Each report includes three reference fields you can use to link records:
Last modified on September 30, 2026