> The full uetr.ai documentation index is at https://uetr.ai/llms.txt, and every page under https://uetr.ai/docs/api is also Markdown at its address plus `.md`.

# Export the account's transfers

Export every transfer in the account, archived ones included, with the bank reports its records hold: the same records the account's export download contains, named the API's way. A page holds up to 50 UETRs in UETR order, each exported once as one transfer however many times the account added it; pass next_cursor as cursor for the next page. Reading changes nothing.

`GET https://uetr.ai/api/v1/export`

- MCP tool: `export_transfers`
- Access: any key or connection

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `cursor` | query | string (matching `^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$`) | No | The next_cursor of the previous page. |

## Response

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `exported_at` | string | Yes |  |
| `transfers` | array of object | Yes |  |
| `transfers[].id` | string | Yes |  |
| `transfers[].uetr` | string | Yes |  |
| `transfers[].label` | string or null | Yes |  |
| `transfers[].archived_at` | string or null | Yes | When the transfer was archived, or null. |
| `transfers[].amount` | object or null | Yes |  |
| `transfers[].amount.value` | number | Yes |  |
| `transfers[].amount.currency` | string | Yes |  |
| `transfers[].payment_date` | string or null | Yes |  |
| `transfers[].events` | array of object | Yes | The bank reports the account's records hold, one entry per report, in the order they were received; empty for a transfer in the free view or with no reports yet. get_transfer returns the same reports in payment lifecycle order, with every figure the full view shows. |
| `transfers[].events[].reported_at` | string or null | Yes | When the bank reported this status, if the report carries that time. |
| `transfers[].events[].observed_at` | string | Yes | When this report was first received. |
| `transfers[].events[].status` | `searching`, `not_found`, `check_failed`, `in_transit`, `on_hold`, `credited`, `rejected`, `returned`, `cancelled` or null | Yes |  |
| `transfers[].events[].status_code` | string or null | Yes | The ISO 20022 status code the bank reported. |
| `transfers[].events[].status_explanation` | string or null | Yes |  |
| `transfers[].events[].reporting_bank` | object | Yes | The bank that reported. It is not necessarily on the payment's route. |
| `transfers[].events[].reporting_bank.name` | string | Yes |  |
| `transfers[].events[].reporting_bank.country` | string or null | Yes |  |
| `transfers[].events[].reporting_bank.bic` | string or null | Yes |  |
| `transfers[].events[].bank_processing_status` | string or null | Yes | The bank's own processing status, in its words. |
| `transfers[].events[].extended_tracking_status` | string or null | Yes | The bank's extended tracking status, in its words. |
| `transfers[].events[].amount` | object or null | Yes | The amount this report carried, when it carried one. |
| `transfers[].events[].amount.value` | number | Yes | The amount. |
| `transfers[].events[].amount.currency` | string | Yes | ISO 4217 currency code. |
| `transfers[].events[].currency` | string or null | Yes | The currency the report stated, when it stated one. A report can state a currency with no amount and no fees. |
| `transfers[].events[].fees` | array of object | Yes | Every fee this report stated, as the bank listed them. |
| `transfers[].events[].fees[].value` | number | Yes |  |
| `transfers[].events[].fees[].currency` | string or null | Yes |  |
| `transfers[].events[].fees[].role` | `total`, `component`, `bank` | Yes | A stated total, one part of a total, or one bank's charge. |
| `transfers[].events[].fees[].label` | string or null | Yes | The bank's own name for the fee, if it gave one. |
| `transfers[].events[].fees[].charged_by` | string or null | Yes | The bank the report says charged it, if any. |
| `transfers[].events[].fees[].event_number` | integer or null | Yes | The event inside this report's own list of events that the fee belongs to, as the bank record numbers it; null when the fee belongs to the report as a whole. |
| `transfers[].events[].payment_date` | string or null | Yes | The value date this report carried, when it carried one. |
| `transfers[].events[].bank_reference` | string or null | Yes | The bank's reference for the payment. |
| `transfers[].events[].chips_ssn` | string or null | Yes | The CHIPS sequence number the bank reported. |
| `transfers[].events[].details` | array of object, by `kind`: `cancellation_request`, `amount`, `reference`, `time`, `duration`, `exchange_rate`, `chain_bank`, `charge_bearer`, `fee_note`, `reject_return_reason`, `message`, `event_status` | Yes | Every further detail the bank record shows for this report, in the record's order, with the bank's times by stage and then durations last. Kinds: amounts by role, references, banks the report names in the payment's chain, exchange rates, the charge bearer, fee notes, reject or return reasons, messages, event statuses and literal cancellation-request codes. A cancellation request is separate from the transaction outcome. Fees are in fees. A detail that restates the bank reference, the bank's status time or a stored amount is left out. New kinds and values can appear within an API version; skip any you do not recognise. |
| `next_cursor` | string or null | Yes | Null on the last page. |

## Example

```sh
curl -X GET "https://uetr.ai/api/v1/export" \
  -H "Authorization: Bearer $UETR_API_KEY"
```

The answer:

```json
{
  "exported_at": "2026-10-14T09:25:00.000Z",
  "transfers": [
    {
      "id": "8d2f6b1e-4c3a-4f7d-9e8b-5a1c2d3e4f60",
      "uetr": "eb6305c9-1f7f-49de-aed0-16487c27b42d",
      "label": null,
      "archived_at": null,
      "amount": {
        "value": 1500.5,
        "currency": "USD"
      },
      "payment_date": "2026-10-01",
      "events": [
        {
          "reported_at": "2026-10-14T09:10:00.000Z",
          "observed_at": "2026-10-14T09:10:00.000Z",
          "status": "in_transit",
          "status_code": "ACSP/G000",
          "status_explanation": "Passed to the next agent or market infrastructure, with tracking continuing.",
          "reporting_bank": {
            "name": "Demo Sending Bank",
            "country": "GB",
            "bic": null
          },
          "bank_processing_status": null,
          "extended_tracking_status": null,
          "amount": {
            "value": 1500.5,
            "currency": "USD"
          },
          "currency": "USD",
          "fees": [],
          "payment_date": "2026-10-01",
          "bank_reference": null,
          "chips_ssn": null,
          "details": [
            {
              "kind": "charge_bearer",
              "code": "SHAR",
              "explanation": "Shared charges (SHA)",
              "event_number": null,
              "bank": null
            }
          ]
        },
        {
          "reported_at": "2026-10-14T09:20:00.000Z",
          "observed_at": "2026-10-14T09:20:00.000Z",
          "status": "in_transit",
          "status_code": "ACSP/G000",
          "status_explanation": "Passed to the next agent or market infrastructure, with tracking continuing.",
          "reporting_bank": {
            "name": "Demo Correspondent Bank",
            "country": "US",
            "bic": null
          },
          "bank_processing_status": null,
          "extended_tracking_status": null,
          "amount": {
            "value": 1500.5,
            "currency": "USD"
          },
          "currency": "USD",
          "fees": [],
          "payment_date": "2026-10-01",
          "bank_reference": null,
          "chips_ssn": null,
          "details": []
        }
      ]
    }
  ],
  "next_cursor": null
}
```

## Refusals

Besides the [access refusals](/docs/api/errors#access-refusals) every call can meet, this call can answer:

- None of its own.