> ## Documentation Index
> Fetch the complete documentation index at: https://waffo.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Exports & Report Downloads

> Portal list exports are background tasks, not instant downloads: where the finished file appears, what the four task statuses mean, why Failed Count does not mean missing rows, when a download link expires, and the date-span and row limits that block an export before it starts.

Most Portal list exports do **not** stream a file to your browser. Pressing **Export** queues a
background task; the finished file is collected later from a **Reports** list in the same module.
Column definitions for the exported files live in
[Reconciliation reports](/docs/en/developer-docs/tools-and-references/references/reconciliation-reports).

## I clicked Export and nothing downloaded. Where is my file?

The confirmation dialog says the report *is being exported* and to come back to the Reports tab.
That tab is where the task and its file live:

| You exported from | Collect the file at |
| - | - |
| Transactions → **Payments** | Transactions → **Reports** (file type `Payments`) |
| Transactions → **Refunds** | Transactions → **Reports** (file type `Refunds`) |
| Subscriptions list | Subscriptions → **Reports** (file type `Subscriptions`) |
| Payout → History → **Single Payouts** | Payout → History → **Reports** (`Single Payouts`) |
| Payout → History → **Batch Payouts** | Payout → History → **Reports** (`Batch Payouts`) |

Reports lists default to the **last month of export dates** (UTC+8), so an older task needs the date
filter widened. Each row shows Export Date, Status, File Type, Create Time, Success Time and the file
name; Transactions rows additionally show **Failed Count**. Where a Reports tab is visible in your
Portal, exporting from that module is available to you — the tab and the Export button ship together.

## What do the four export statuses mean?

| Status | Meaning | Terminal? | What you do |
| - | - | - | - |
| **Pending Export** | Task accepted, file not built yet | No | Wait |
| **Retry Needed** | An attempt failed; the task is queued to run again | No | Nothing — see below |
| **Exported** | File built and ready | Yes | Click the file name |
| **Export Failed** | Automatic retries did not succeed; this task will not produce a file | Yes | Narrow the filters and export again |

Only **Exported** rows have a downloadable file. On the Payout Reports tab, non-`Exported` rows show
`-` in place of the file name.

## The status says Retry Needed. Do I have to do anything?

No. **Retry Needed** is an automatic state, not an instruction. The task stored the filters you
submitted, and a background job picks the row up again after a short cooldown and re-runs it with
exactly those filters, until it reaches **Exported** or **Export Failed**.

Pressing **Export** again for the same module while a row sits in **Retry Needed** *resumes that same
task* rather than creating a second one, so you will not end up with duplicate files.

## Failed Count is not 0. Is my exported data incomplete?

No. **Failed Count** counts *failed build attempts for the task*, not skipped or dropped rows. A row
with status **Exported** and `Failed Count = 2` means the file was produced on a later attempt and is
complete for the filters you submitted. A run that cannot finish leaves the row in **Retry Needed** or
**Export Failed** instead — partial data is never published under **Exported**.

## Does the download link expire?

Yes, and that is by design: no link is stored in the row. Clicking the file name mints a fresh,
short-lived link at that moment and opens it. If a link you
copied earlier stops working, go back to the Reports row and click the file name again — the task row
stays in the list, so the file can be collected again later.

## Why was my export rejected before a task was even created?

Four checks run at submit time, each with its own message:

| Message | Cause | Fix |
| - | - | - |
| *The current query data is empty* | Zero matching records — no task is created (Subscriptions) | Adjust the filters |
| *The previous export is still in progress* | A **Pending Export** row already exists for that report type | Wait for it to finish |
| *Too many records to export* | The result set exceeds the single-export record cap | Narrow the date range or filters |
| *Time frame should not exceed one month* | Settlement Estimation export span | Split into shorter ranges |

The in-progress check is **per report type**, not per account: a Payments export in flight does not
block a Refunds export, and vice versa.

For Payments and Refunds an empty result still produces a header-only file, so "no matching
transactions" stays distinguishable from a failed export. The Subscriptions export is the one that
refuses upfront instead.

## What are the export span and size limits?

* **Date span: 31 days.** Enforced both by the date picker and again on the server for Payments,
  Refunds and Payout history exports, so a hand-built wider range is still rejected. Settlement
  Estimation exports cap at one month.
* **Rows per file: 60,000.** Within the cap you get one `.csv`. Above it, the task splits into
  numbered files (`..._001.csv`, `..._002.csv`, …) delivered as a single `.zip` — one Reports row,
  one download, several files inside.
* **File naming:** `{report type}_{MID}_{from}_{to}.csv`, both dates `YYYYMMDD` in **UTC+8** —
  for example `payments_{MID}_20260801_20260827.csv`. Payout files use the report label
  (`Single Payouts`, `Batch Payouts`) as the prefix.

## Which exports are asynchronous, and which download immediately?

| Export | Model |
| - | - |
| Payments, Refunds, Subscriptions, Payout single & batch history | Background task → module **Reports** tab |
| Settlement batch details, Customized Export, Estimation | Background task → Settlements → Reports → export history |
| Batch Refunds list, settlement calendar | Direct download in the browser |
| Payout → **Report** | Not on demand — periodic files listed for download |

Settlement exports are listed with a **three**-state history (`Pending` / `Success` / `Failed`)
rather than the four states above; there is no Retry Needed or Failed Count there.

## Does the Reports list refresh on its own?

The Subscriptions Reports tab polls while any row is still **Pending Export** or **Retry Needed**,
and stops once every row is terminal. The Transactions and Payout Reports tabs do not poll — re-apply
the date filter, or revisit the tab, to pull fresh statuses.

***

Still missing a file? [Contact support](mailto:support@waffo.com) with the module, the export date and
the file name shown on the Reports row.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.