Developer docs
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
curl -X GET "https://uetr.ai/api/v1/export" \ -H "Authorization: Bearer $UETR_API_KEY"
The answer:
{
"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 every call can meet, this call can answer:
- None of its own.