Developer docs
Restore an archived transfer
Restore an archived transfer so its monitoring resumes. Restoring needs an active subscription and a free active transfer place. Restoring an active transfer changes nothing. Returns the transfer.
POST
https://uetr.ai/api/v1/transfers/{uetr}/restore- MCP tool:
restore_transfer - Access: a key or connection with read and write access
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
uetr | path | 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}$) | Yes | The transfer's UETR. |
Response
| Field | Type | Required | Description |
|---|---|---|---|
transfer | object | Yes | The transfer. |
transfer.id | string (uuid) | Yes | The transfer's id in this account. |
transfer.uetr | string | Yes | The Unique End-to-end Transaction Reference. |
transfer.label | string or null | Yes | The account's own label for the transfer. |
transfer.view | full, free | Yes | full: every report as the paid timeline shows it. free: the free tracker view. |
transfer.status | searching, not_found, check_failed, in_transit, on_hold, credited, rejected, returned, cancelled | Yes | The transfer's current status. |
transfer.position_sentence | string or null | No | In the full view, the payment position from its status and verified route. A reporting bank alone never establishes a position. |
transfer.status_code | string or null | Yes | The latest ISO 20022 status code, in the full view only. |
transfer.status_explanation | string or null | Yes | What the status code means, in plain English. |
transfer.checks_finished | boolean | Yes | True when no automatic check is scheduled: a final outcome, an archived transfer, or a closed monitoring window. list_transfers judges the transfer's own entry, as the dashboard shows it; get_transfer judges every lookup of the UETR, as the timeline does. |
transfer.amount | object | Yes | The amount entered for the search, as last corrected by the account owner. bank_reported_amount is what a bank reported. |
transfer.amount.value | number | Yes | The amount. |
transfer.amount.currency | string | Yes | ISO 4217 currency code. |
transfer.payment_date | string | Yes | The payment date entered for the search, as last corrected by the account owner. |
transfer.bank_reported_amount | object or null | Yes | The latest amount a bank reported, with its value date. When no bank stated a currency, the currency is the one entered for the search. A free transfer's figure is the one its free tracker shows, from the reports revealed so far. |
transfer.bank_reported_amount.value | number | Yes | The amount. |
transfer.bank_reported_amount.currency | string | Yes | ISO 4217 currency code. |
transfer.bank_reported_amount.payment_date | string or null | Yes | |
transfer.last_checked_at | string or null | Yes | When the transfer was last checked. |
transfer.monitoring_until | string or null | Yes | When this transfer's monitoring window ends or ended (at archiving, if earlier): the paid window, or for a free transfer its free checking window. Checks can finish before it, and a paid transfer still inside its free checking window keeps free checks after it; checks_finished says whether any is scheduled. |
transfer.check_frequency_minutes | integer or null | Yes | How often this transfer's own checks run, in the full view; null when it has none scheduled. |
transfer.archived | boolean | Yes | True when the transfer is archived. |
transfer.added_at | string | Yes | When the transfer was added. |
events | array of object or null | Yes | Every bank report, in the full view only, in payment lifecycle order as the timeline shows them: the last is the latest stage, which may have been received before an earlier stage's report (see observed_at). |
events[].reported_at | string or null | Yes | When the bank reported this status, if the report carries that time. |
events[].observed_at | string | Yes | When this report was first received. |
events[].status | searching, not_found, check_failed, in_transit, on_hold, credited, rejected, returned, cancelled or null | Yes | |
events[].status_code | string or null | Yes | The ISO 20022 status code the bank reported. |
events[].status_explanation | string or null | Yes | |
events[].reporting_bank | object | Yes | The bank that reported. It is not necessarily on the payment's route. |
events[].reporting_bank.name | string | Yes | |
events[].reporting_bank.country | string or null | Yes | |
events[].reporting_bank.bic | string or null | Yes | |
events[].bank_processing_status | string or null | Yes | The bank's own processing status, in its words. |
events[].extended_tracking_status | string or null | Yes | The bank's extended tracking status, in its words. |
events[].amount | object or null | Yes | The amount this report carried, when it carried one. |
events[].amount.value | number | Yes | The amount. |
events[].amount.currency | string | Yes | ISO 4217 currency code. |
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. |
events[].fees | array of object | Yes | Every fee this report stated, as the bank listed them. |
events[].fees[].value | number | Yes | |
events[].fees[].currency | string or null | Yes | |
events[].fees[].role | total, component, bank | Yes | A stated total, one part of a total, or one bank's charge. |
events[].fees[].label | string or null | Yes | The bank's own name for the fee, if it gave one. |
events[].fees[].charged_by | string or null | Yes | The bank the report says charged it, if any. |
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. |
events[].payment_date | string or null | Yes | The value date this report carried, when it carried one. |
events[].bank_reference | string or null | Yes | The bank's reference for the payment. |
events[].chips_ssn | string or null | Yes | The CHIPS sequence number the bank reported. |
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. |
waiting_at | string or null | Yes | In the full view, the bank the payment is waiting at, when the reports name one; otherwise null. |
free | object or null | Yes | The free tracker's view, in the free view only. |
free.has_activity | boolean | Yes | True once any bank has reported the transfer. |
free.last_update_at | string or null | Yes | When the free view last changed. |
free.reporting_bank_countries | array of string | Yes | Home countries of the banks that reported. These are not the payment's route. |
free.reporting_banks | integer | Yes | How many banks have reported. |
free.next_update_at | string or null | Yes | When the free view next refreshes. |
free.pending_update_at | string or null | Yes | When a newer report becomes visible in the free view. |
free.checks_end_at | string or null | Yes | When free automatic checks end. |
free.checks_ended | boolean | Yes | |
free.reports | array of object | Yes | The reports the free view shows, in its order: the report behind the current status first, then newest first by reported_at, with reports that have no time last. At most 50. |
free.reports[].bank_number | integer or null | Yes | The reporting bank, numbered within this transfer; its name is in the full view. |
free.reports[].reported_at | string or null | Yes | The report's time. |
free.reports[].time_source | bank_reported, first_received or null | Yes | Whether the time is the one the bank gave, or when the report was first received. |
free.reports[].amount | object or null | Yes | The amount this report carried, when it carried one; the currency is null when the report gave none. |
free.reports[].amount.value | number | Yes | |
free.reports[].amount.currency | string or null | Yes | |
free.reports[].payment_date | string or null | Yes | The value date this report carried, when it carried one. |
free.reports[].details_in_full_view | object | Yes | Which details this report holds that the full view shows. Only their presence is in the free view. |
free.reports[].details_in_full_view.bank_name | boolean | Yes | |
free.reports[].details_in_full_view.bic | boolean | Yes | |
free.reports[].details_in_full_view.status | boolean | Yes | |
free.reports[].details_in_full_view.message | boolean | Yes | |
free.reports[].details_in_full_view.reference | boolean | Yes | |
free.reports[].details_in_full_view.fees | boolean | Yes | |
free.total_reports | integer | Yes | How many reports the free view counts. |
free.report_counts | object | Yes | Counts of details the full view shows, as the free tracker lists them. |
free.report_counts.with_bank_time | integer | Yes | |
free.report_counts.with_fees | integer | Yes | |
free.report_counts.with_messages | integer | Yes | |
free.report_counts.bank_references | integer | Yes | Distinct bank references. |
free.reported_by | object | Yes | The numbered bank (as in reports) behind the summary's bank-reported amount and value date. |
free.reported_by.amount | integer or null | Yes | |
free.reported_by.value_date | integer or null | Yes | |
free.pending_report_at | string or null | Yes | The recorded time of the newer report not yet in the free view, when it has one. |
free.attention | action_needed, waiting or null | Yes | A bank's current report flags an issue: action needed, or waiting at a bank. The code and bank are in the full view. |
free.delay | object or null | Yes | Whole days since any bank last reported, when that is longer than usual. |
free.delay.days | integer | Yes | |
free.delay.tier | slow, very_slow | Yes | |
free.payment_route | object or null | Yes | The sending and beneficiary banks the reports confirm. |
free.payment_route.sender | object or null | Yes | |
free.payment_route.sender.name | string or null | Yes | The bank's name, when the directory knows it. |
free.payment_route.sender.bic | string | Yes | |
free.payment_route.beneficiary | object or null | Yes | |
free.payment_route.beneficiary.name | string or null | Yes | The bank's name, when the directory knows it. |
free.payment_route.beneficiary.bic | string | Yes | |
free.payment_route.other_banks | boolean | Yes | True when other banks took part; they are named in the full view. |
corrections_remaining | integer or null | Yes | How many more corrections the account owner can make to the entered amount, currency and payment date now that a bank has reported. Null when no bank has reported, when the API key or connected app is not the account owner's, when the transfer is archived, or when the count could not be read. |
Example
curl -X POST "https://uetr.ai/api/v1/transfers/eb6305c9-1f7f-49de-aed0-16487c27b42d/restore" \ -H "Authorization: Bearer $UETR_API_KEY"
The answer:
{
"transfer": {
"id": "8d2f6b1e-4c3a-4f7d-9e8b-5a1c2d3e4f60",
"uetr": "eb6305c9-1f7f-49de-aed0-16487c27b42d",
"label": null,
"view": "full",
"status": "in_transit",
"position_sentence": "Handed to the next bank or payment system; the payment transfer remains tracked. The reports do not say which bank holds the money.",
"status_code": "ACSP/G000",
"status_explanation": "Passed to the next agent or market infrastructure, with tracking continuing.",
"checks_finished": false,
"amount": {
"value": 1500.5,
"currency": "USD"
},
"payment_date": "2026-10-01",
"bank_reported_amount": {
"value": 1500.5,
"currency": "USD",
"payment_date": "2026-10-01"
},
"last_checked_at": "2026-10-14T09:20:00.000Z",
"monitoring_until": "2026-11-14T09:00:00.000Z",
"check_frequency_minutes": 60,
"archived": false,
"added_at": "2026-10-14T09:00:00.000Z"
},
"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": []
}
],
"waiting_at": null,
"free": null,
"corrections_remaining": 3
}Refusals
Besides the access refusals every call can meet, this call can answer:
read_only_credential(403): Read-only key or connection.machine_writes_disabled(503): Changes are switched off.request_too_large(413): Request too large.not_found(404): Not found.active_transfer_limit(409): Active transfer limit reached.subscription_required(409): Active subscription required.demo_transfer(409): The demo transfer cannot be changed.