All pages

Developer docs

Get a transfer

View as Markdown

Get one transfer in this account by its UETR, with every bank report in the full view, or the free tracker's view for a free transfer. The number of people who follow the transfer's updates comes from get_watcher_count. The demo transfer 00000000-0000-4000-8000-000000000000 works for every key. Each hour (UTC) it is searching, with no bank reports, for its first 10 minutes, then gains a bank report every 10 minutes until it is credited at 50 minutes past the hour. Reading changes nothing.

GEThttps://uetr.ai/api/v1/transfers/{uetr}
  • MCP tool: get_transfer
  • Access: any key or connection

Parameters

NameInTypeRequiredDescription
uetrpathstring (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}$)YesThe transfer's UETR.

Response

FieldTypeRequiredDescription
transferobjectYesThe transfer.
transfer.idstring (uuid)YesThe transfer's id in this account.
transfer.uetrstringYesThe Unique End-to-end Transaction Reference.
transfer.labelstring or nullYesThe account's own label for the transfer.
transfer.viewfull, freeYesfull: every report as the paid timeline shows it. free: the free tracker view.
transfer.statussearching, not_found, check_failed, in_transit, on_hold, credited, rejected, returned, cancelledYesThe transfer's current status.
transfer.position_sentencestring or nullNoIn the full view, the payment position from its status and verified route. A reporting bank alone never establishes a position.
transfer.status_codestring or nullYesThe latest ISO 20022 status code, in the full view only.
transfer.status_explanationstring or nullYesWhat the status code means, in plain English.
transfer.checks_finishedbooleanYesTrue 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.amountobjectYesThe amount entered for the search, as last corrected by the account owner. bank_reported_amount is what a bank reported.
transfer.amount.valuenumberYesThe amount.
transfer.amount.currencystringYesISO 4217 currency code.
transfer.payment_datestringYesThe payment date entered for the search, as last corrected by the account owner.
transfer.bank_reported_amountobject or nullYesThe 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.valuenumberYesThe amount.
transfer.bank_reported_amount.currencystringYesISO 4217 currency code.
transfer.bank_reported_amount.payment_datestring or nullYes
transfer.last_checked_atstring or nullYesWhen the transfer was last checked.
transfer.monitoring_untilstring or nullYesWhen 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_minutesinteger or nullYesHow often this transfer's own checks run, in the full view; null when it has none scheduled.
transfer.archivedbooleanYesTrue when the transfer is archived.
transfer.added_atstringYesWhen the transfer was added.
eventsarray of object or nullYesEvery 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_atstring or nullYesWhen the bank reported this status, if the report carries that time.
events[].observed_atstringYesWhen this report was first received.
events[].statussearching, not_found, check_failed, in_transit, on_hold, credited, rejected, returned, cancelled or nullYes
events[].status_codestring or nullYesThe ISO 20022 status code the bank reported.
events[].status_explanationstring or nullYes
events[].reporting_bankobjectYesThe bank that reported. It is not necessarily on the payment's route.
events[].reporting_bank.namestringYes
events[].reporting_bank.countrystring or nullYes
events[].reporting_bank.bicstring or nullYes
events[].bank_processing_statusstring or nullYesThe bank's own processing status, in its words.
events[].extended_tracking_statusstring or nullYesThe bank's extended tracking status, in its words.
events[].amountobject or nullYesThe amount this report carried, when it carried one.
events[].amount.valuenumberYesThe amount.
events[].amount.currencystringYesISO 4217 currency code.
events[].currencystring or nullYesThe currency the report stated, when it stated one. A report can state a currency with no amount and no fees.
events[].feesarray of objectYesEvery fee this report stated, as the bank listed them.
events[].fees[].valuenumberYes
events[].fees[].currencystring or nullYes
events[].fees[].roletotal, component, bankYesA stated total, one part of a total, or one bank's charge.
events[].fees[].labelstring or nullYesThe bank's own name for the fee, if it gave one.
events[].fees[].charged_bystring or nullYesThe bank the report says charged it, if any.
events[].fees[].event_numberinteger or nullYesThe 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_datestring or nullYesThe value date this report carried, when it carried one.
events[].bank_referencestring or nullYesThe bank's reference for the payment.
events[].chips_ssnstring or nullYesThe CHIPS sequence number the bank reported.
events[].detailsarray of object, by kind: cancellation_request, amount, reference, time, duration, exchange_rate, chain_bank, charge_bearer, fee_note, reject_return_reason, message, event_statusYesEvery 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_atstring or nullYesIn the full view, the bank the payment is waiting at, when the reports name one; otherwise null.
freeobject or nullYesThe free tracker's view, in the free view only.
free.has_activitybooleanYesTrue once any bank has reported the transfer.
free.last_update_atstring or nullYesWhen the free view last changed.
free.reporting_bank_countriesarray of stringYesHome countries of the banks that reported. These are not the payment's route.
free.reporting_banksintegerYesHow many banks have reported.
free.next_update_atstring or nullYesWhen the free view next refreshes.
free.pending_update_atstring or nullYesWhen a newer report becomes visible in the free view.
free.checks_end_atstring or nullYesWhen free automatic checks end.
free.checks_endedbooleanYes
free.reportsarray of objectYesThe 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_numberinteger or nullYesThe reporting bank, numbered within this transfer; its name is in the full view.
free.reports[].reported_atstring or nullYesThe report's time.
free.reports[].time_sourcebank_reported, first_received or nullYesWhether the time is the one the bank gave, or when the report was first received.
free.reports[].amountobject or nullYesThe amount this report carried, when it carried one; the currency is null when the report gave none.
free.reports[].amount.valuenumberYes
free.reports[].amount.currencystring or nullYes
free.reports[].payment_datestring or nullYesThe value date this report carried, when it carried one.
free.reports[].details_in_full_viewobjectYesWhich details this report holds that the full view shows. Only their presence is in the free view.
free.reports[].details_in_full_view.bank_namebooleanYes
free.reports[].details_in_full_view.bicbooleanYes
free.reports[].details_in_full_view.statusbooleanYes
free.reports[].details_in_full_view.messagebooleanYes
free.reports[].details_in_full_view.referencebooleanYes
free.reports[].details_in_full_view.feesbooleanYes
free.total_reportsintegerYesHow many reports the free view counts.
free.report_countsobjectYesCounts of details the full view shows, as the free tracker lists them.
free.report_counts.with_bank_timeintegerYes
free.report_counts.with_feesintegerYes
free.report_counts.with_messagesintegerYes
free.report_counts.bank_referencesintegerYesDistinct bank references.
free.reported_byobjectYesThe numbered bank (as in reports) behind the summary's bank-reported amount and value date.
free.reported_by.amountinteger or nullYes
free.reported_by.value_dateinteger or nullYes
free.pending_report_atstring or nullYesThe recorded time of the newer report not yet in the free view, when it has one.
free.attentionaction_needed, waiting or nullYesA bank's current report flags an issue: action needed, or waiting at a bank. The code and bank are in the full view.
free.delayobject or nullYesWhole days since any bank last reported, when that is longer than usual.
free.delay.daysintegerYes
free.delay.tierslow, very_slowYes
free.payment_routeobject or nullYesThe sending and beneficiary banks the reports confirm.
free.payment_route.senderobject or nullYes
free.payment_route.sender.namestring or nullYesThe bank's name, when the directory knows it.
free.payment_route.sender.bicstringYes
free.payment_route.beneficiaryobject or nullYes
free.payment_route.beneficiary.namestring or nullYesThe bank's name, when the directory knows it.
free.payment_route.beneficiary.bicstringYes
free.payment_route.other_banksbooleanYesTrue when other banks took part; they are named in the full view.
corrections_remaininginteger or nullYesHow 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 GET "https://uetr.ai/api/v1/transfers/00000000-0000-4000-8000-000000000000" \
  -H "Authorization: Bearer $UETR_API_KEY"

The answer:

{
  "transfer": {
    "id": "00000000-0000-4000-8000-000000000000",
    "uetr": "00000000-0000-4000-8000-000000000000",
    "label": "Demo transfer",
    "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": 12500,
      "currency": "EUR"
    },
    "payment_date": "2026-10-14",
    "bank_reported_amount": {
      "value": 12500,
      "currency": "EUR",
      "payment_date": "2026-10-14"
    },
    "last_checked_at": "2026-10-14T09:20:00.000Z",
    "monitoring_until": "2026-10-14T10:00:00.000Z",
    "check_frequency_minutes": 10,
    "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": 12500,
        "currency": "EUR"
      },
      "currency": "EUR",
      "fees": [],
      "payment_date": "2026-10-14",
      "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": 12500,
        "currency": "EUR"
      },
      "currency": "EUR",
      "fees": [],
      "payment_date": "2026-10-14",
      "bank_reference": null,
      "chips_ssn": null,
      "details": []
    }
  ],
  "waiting_at": null,
  "free": null,
  "corrections_remaining": null
}

Refusals

Besides the access refusals every call can meet, this call can answer: