SWIFT UETR Tracker Payment records API
The Payment records API from SWIFT UETR Tracker — 1 operation(s) for payment records.
The Payment records API from SWIFT UETR Tracker — 1 operation(s) for payment records.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/uetr-ai:uetr-ai-payment-records-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: uetr.ai Payment records API
version: '2026-10-14'
description: Track international bank transfers by their UETR and read what the banks report about them. Every call acts on one uetr.ai account, with the rights of the user who created the credential. The same actions are tools on the MCP server at https://uetr.ai/mcp.
contact:
name: uetr.ai support
email: hello@uetr.ai
url: https://uetr.ai/contact
servers:
- url: https://uetr.ai/api/v1
tags:
- name: Payment records
paths:
/records/{record_token}:
get:
operationId: get_payment_record
summary: Get a payment record
description: 'Read a payment record from its link: the bank reports on a paid transfer, shared by its owner with whoever holds the link. Any key can read a record it has the link to, from any account. A link the owner replaced, or one that never existed, is not found. Reading changes nothing and is not counted as a visit to the record.'
tags:
- Payment records
security:
- apiKey: []
parameters:
- name: record_token
in: path
required: true
schema:
type: string
minLength: 8
maxLength: 64
description: The token at the end of a payment record link (/p/...), or the whole link.
- $ref: '#/components/parameters/Version'
responses:
'200':
description: Get a payment record
headers:
uetr-version:
$ref: '#/components/headers/Version'
content:
application/json:
schema:
anyOf:
- type: object
properties:
found:
type: boolean
const: true
paused:
type: boolean
const: false
archivedAt:
type:
- string
- 'null'
format: date-time
checksFinished:
type: boolean
request:
type: object
properties:
uetr:
type: string
status:
type: string
statusCode:
type:
- string
- 'null'
statusReported:
type: boolean
statusInfo:
anyOf:
- type: object
properties:
code:
type: string
short_description:
type: string
long_description:
type: string
next_action:
type: string
severity:
type: string
is_terminal:
type: boolean
required:
- code
- short_description
- long_description
- next_action
- severity
- is_terminal
additionalProperties: false
- type: 'null'
senderBic:
type:
- string
- 'null'
beneficiaryBic:
type:
- string
- 'null'
lastPolledAt:
type:
- string
- 'null'
format: date-time
description: 'When the transfer was last checked, or null: the record gives no check time that would say when the record owner''s own checks ran.'
showFees:
type: boolean
showCommentary:
type: boolean
required:
- uetr
- status
- statusCode
- statusReported
- statusInfo
- senderBic
- beneficiaryBic
- lastPolledAt
- showFees
- showCommentary
additionalProperties: false
events:
type: array
items:
type: object
properties:
id:
type: string
observed_at:
anyOf:
- type: string
format: date-time
- type: string
const: ''
description: 'When the report was first received, or empty when the record gives no receipt time: for a report received before the transfer was added (received_before_added is true), and for every report once each receipt time would say when the record owner''s own checks ran. Its time, when the bank gave one, is bank_reported_at, and time_order keeps its place.'
received_before_added:
type: boolean
description: True when the report was received before the transfer was added. Its receipt time is not given; bank_reported_at is unchanged.
time_order:
type: integer
description: 'The report''s place among the record''s reports by time: the bank''s time when the report has one, otherwise when it was first received, and reports with one bank time in the order they were first received. The earliest is 0, and reports at one time share a place. A report with no receipt time keeps its place by it.'
bank_reported_at:
type:
- string
- 'null'
format: date-time
report_clock:
type: object
properties:
at:
type:
- string
- 'null'
format: date-time
observedAt:
type:
- string
- 'null'
format: date-time
unavailable:
type: boolean
sourceObservedAt:
type:
- string
- 'null'
format: date-time
required:
- at
- observedAt
- unavailable
additionalProperties: false
created_at:
type:
- string
- 'null'
format: date-time
source_bank_name:
type: string
source_bank_bic:
type: string
source_bank_country:
type:
- string
- 'null'
status_code:
type:
- string
- 'null'
bank_processing_status:
type:
- string
- 'null'
extended_tracking_status:
type:
- string
- 'null'
amount:
anyOf:
- type:
- number
- string
- type: 'null'
description: When currency is supplied, the amount is in that currency's major units, not minor units. Strings are returned unchanged; a null currency remains unspecified.
fees:
anyOf:
- type:
- number
- string
- type: 'null'
description: When currency is supplied, the fee is in that currency's major units, not minor units. Strings are returned unchanged; a null currency remains unspecified.
currency:
type:
- string
- 'null'
payment_date:
type:
- string
- 'null'
bank_reference_number:
type:
- string
- 'null'
chips_ssn:
type:
- string
- 'null'
evidence:
type: array
items: {}
status_info:
anyOf:
- type: object
properties:
code:
type: string
short_description:
type: string
long_description:
type: string
next_action:
type: string
severity:
type: string
is_terminal:
type: boolean
required:
- code
- short_description
- long_description
- next_action
- severity
- is_terminal
additionalProperties: false
- type: 'null'
required:
- id
- observed_at
- received_before_added
- bank_reported_at
- created_at
- source_bank_name
- source_bank_bic
- source_bank_country
- status_code
- bank_processing_status
- extended_tracking_status
- amount
- fees
- currency
- payment_date
- bank_reference_number
- chips_ssn
- status_info
additionalProperties: false
route:
type: array
items:
type: object
properties:
key:
type: string
kind:
type: string
enum:
- sender
- hop
- beneficiary
- handoff
bic:
type:
- string
- 'null'
country:
type:
- string
- 'null'
name:
type:
- string
- 'null'
provenance:
type: string
enum:
- user
- trail
time:
type:
- string
- 'null'
timeSource:
type: string
enum:
- bank
- monitoring
receivedBeforeAdded:
type: boolean
description: 'True on a monitoring-timed stop first seen before the transfer was added: the record gives it no time.'
city:
type:
- string
- 'null'
chargeBearer:
type:
- string
- 'null'
current:
type: boolean
eventId:
type:
- string
- 'null'
required:
- key
- kind
- bic
- country
- name
additionalProperties: false
position_sentence:
type:
- string
- 'null'
description: The payment position from its status and verified route, when commentary is shown.
required:
- found
- paused
- checksFinished
- request
- events
- route
additionalProperties: false
- type: object
properties:
found:
type: boolean
const: true
paused:
type: boolean
const: true
pausedSince:
type:
- string
- 'null'
format: date-time
description: When automatic checking ended, or null when no date is known.
required:
- found
- paused
- pausedSince
additionalProperties: false
description: 'The record as its page shows it. A paused record (paused: true) carries no reports: its transfer''s checking ended before the transfer finished, and the record resumes by itself when checking resumes.'
example:
found: true
paused: false
archivedAt: null
checksFinished: false
request:
uetr: eb6305c9-1f7f-49de-aed0-16487c27b42d
status: in_progress
statusCode: ACSP/G000
statusReported: true
statusInfo:
code: ACSP/G000
short_description: PaymentTransferredAndTracked
long_description: The Status Originator transferred the payment to the next Agent or to a Market Infrastructure. The payment transfer is tracked. No further updates will follow from the Status Originator.
next_action: On track. The payment was passed on and stays tracked, and this bank sends no further updates on it.
severity: info
is_terminal: false
senderBic: BANKGB2L
beneficiaryBic: BANKDEFF
lastPolledAt: '2026-10-14T09:20:00.000Z'
showFees: true
showCommentary: true
events:
- id: c2a4e6f8-1b3d-4f5a-8c7e-9d0b2a4c6e81
observed_at: '2026-10-14T09:10:00.000Z'
received_before_added: false
bank_reported_at: '2026-10-14T09:10:00.000Z'
created_at: '2026-10-14T09:10:00.000Z'
source_bank_name: Demo Sending Bank
source_bank_bic: BANKGB2L
source_bank_country: GB
status_code: ACSP/G000
bank_processing_status: null
extended_tracking_status: ''
amount: 1500.5
fees: null
currency: USD
payment_date: '2026-10-01'
bank_reference_number: null
chips_ssn: null
evidence: []
status_info:
code: ACSP/G000
short_description: PaymentTransferredAndTracked
long_description: The Status Originator transferred the payment to the next Agent or to a Market Infrastructure. The payment transfer is tracked. No further updates will follow from the Status Originator.
next_action: On track. The payment was passed on and stays tracked, and this bank sends no further updates on it.
severity: info
is_terminal: false
- id: d3b5f7a9-2c4e-4a6b-9d8f-0e1c3b5d7f92
observed_at: '2026-10-14T09:20:00.000Z'
received_before_added: false
bank_reported_at: '2026-10-14T09:20:00.000Z'
created_at: '2026-10-14T09:20:00.000Z'
source_bank_name: Demo Correspondent Bank
source_bank_bic: BANKUS33
source_bank_country: US
status_code: ACSP/G000
bank_processing_status: null
extended_tracking_status: ''
amount: 1500.5
fees: null
currency: USD
payment_date: '2026-10-01'
bank_reference_number: null
chips_ssn: null
evidence: []
status_info:
code: ACSP/G000
short_description: PaymentTransferredAndTracked
long_description: The Status Originator transferred the payment to the next Agent or to a Market Infrastructure. The payment transfer is tracked. No further updates will follow from the Status Originator.
next_action: On track. The payment was passed on and stays tracked, and this bank sends no further updates on it.
severity: info
is_terminal: false
route: []
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.
'400':
description: '`credential_in_url`: API key sent in the URL. `invalid_request`: Invalid request. `unsupported_version`: Unsupported API version.'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
examples:
credential_in_url:
summary: API key sent in the URL
value:
type: https://uetr.ai/docs/api/errors#credential_in_url
title: API key sent in the URL
status: 400
code: credential_in_url
detail: API key sent in the URL.
invalid_request:
summary: Invalid request
value:
type: https://uetr.ai/docs/api/errors#invalid_request
title: Invalid request
status: 400
code: invalid_request
detail: Invalid request.
unsupported_version:
summary: Unsupported API version
value:
type: https://uetr.ai/docs/api/errors#unsupported_version
title: Unsupported API version
status: 400
code: unsupported_version
detail: Unsupported API version.
'401':
description: '`invalid_credential`: Valid key or token required.'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
examples:
invalid_credential:
summary: Valid key or token required
value:
type: https://uetr.ai/docs/api/errors#invalid_credential
title: Valid key or token required
status: 401
code: invalid_credential
detail: Valid key or token required.
'403':
description: '`credential_suspended`: Key or connection paused. `credential_account_changed`: Key or connection belongs to another account. `staff_credentials_refused`: Not available to staff accounts. `customer_view_refused`: Not available in a customer view. `machine_access_not_available`: API access is not available yet.'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
examples:
credential_suspended:
summary: Key or connection paused
value:
type: https://uetr.ai/docs/api/errors#credential_suspended
title: Key or connection paused
status: 403
code: credential_suspended
detail: Key or connection paused.
credential_account_changed:
summary: Key or connection belongs to another account
value:
type: https://uetr.ai/docs/api/errors#credential_account_changed
title: Key or connection belongs to another account
status: 403
code: credential_account_changed
detail: Key or connection belongs to another account.
staff_credentials_refused:
summary: Not available to staff accounts
value:
type: https://uetr.ai/docs/api/errors#staff_credentials_refused
title: Not available to staff accounts
status: 403
code: staff_credentials_refused
detail: Not available to staff accounts.
customer_view_refused:
summary: Not available in a customer view
value:
type: https://uetr.ai/docs/api/errors#customer_view_refused
title: Not available in a customer view
status: 403
code: customer_view_refused
detail: Not available in a customer view.
machine_access_not_available:
summary: API access is not available yet
value:
type: https://uetr.ai/docs/api/errors#machine_access_not_available
title: API access is not available yet
status: 403
code: machine_access_not_available
detail: API access is not available yet.
'404':
description: '`not_found`: Not found.'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
examples:
not_found:
summary: Not found
value:
type: https://uetr.ai/docs/api/errors#not_found
title: Not found
status: 404
code: not_found
detail: Not found.
'429':
description: '`rate_limited`: Too many requests.'
headers:
Retry-After:
$ref: '#/components/headers/RetryAfter'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
examples:
rate_limited:
summary: Too many requests
value:
type: https://uetr.ai/docs/api/errors#rate_limited
title: Too many requests
status: 429
code: rate_limited
detail: Too many requests.
'500':
description: '`request_failed`: Request failed.'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
examples:
request_failed:
summary: Request failed
value:
type: https://uetr.ai/docs/api/errors#request_failed
title: Request failed
status: 500
code: request_failed
detail: Request failed.
'503':
description: '`machine_access_disabled`: API access is switched off. `temporarily_unavailable`: Temporarily unavailable.'
headers:
Retry-After:
$ref: '#/components/headers/RetryAfter'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
examples:
machine_access_disabled:
summary: API access is switched off
value:
type: https://uetr.ai/docs/api/errors#machine_access_disabled
title: API access is switched off
status: 503
code: machine_access_disabled
detail: API access is switched off.
temporarily_unavailable:
summary: Temporarily unavailable
value:
type: https://uetr.ai/docs/api/errors#temporarily_unavailable
title: Temporarily unavailable
status: 503
code: temporarily_unavailable
detail: Temporarily unavailable.
x-mcp-tool: get_payment_record
x-mcp-annotations:
readOnlyHint: true
destructiveHint: false
idempotentHint: true
openWorldHint: false
components:
parameters:
Version:
name: uetr-version
in: header
required: false
description: The API version to run the call under. Without it, a call runs under the version the credential was created on. An empty value is refused as an unknown version.
schema:
type: string
enum:
- '2026-10-14'
headers:
Version:
description: The API version the call ran under.
required: true
schema:
type: string
enum:
- '2026-10-14'
RetryAfter:
description: The seconds to wait before trying again. It is sent exactly when the body carries `retry_after_seconds`, with the same value.
schema:
type: integer
minimum: 0
schemas:
Problem:
type: object
description: A refusal (RFC 9457). Act on `code`; pass `detail` on to the person.
required:
- type
- title
- status
- code
- detail
properties:
type:
type: string
format: uri
title:
type: string
status:
type: integer
code:
type: string
enum:
- customer_view_refused
- machine_access_disabled
- machine_access_not_available
- credential_in_url
- invalid_credential
- rate_limited
- temporarily_unavailable
- credential_suspended
- credential_account_changed
- staff_credentials_refused
- read_only_credential
- machine_writes_disabled
- action_not_available
- not_permitted
- invalid_request
- unsupported_version
- request_too_large
- unsupported_media_type
- not_found
- method_not_allowed
- request_failed
- checks_ended
- monitoring_ended
- recheck_not_available
- recheck_cooldown
- check_not_started
- lookup_limit
- account_email_missing
- plan_unverified
- plan_expired
- transfer_not_editable
- corrections_used
- label_not_available
- check_frequency_not_available
- rescue_limit
- active_transfer_limit
- monthly_limit_reached
- transfer_archived
- subscription_required
- demo_transfer
- record_not_available
- already_owner
- seat_exists
- seat_on_other_account
- manages_paid_account
- team_requires_subscription
- seat_limit
- seat_not_active
- seat_reservation_failed
- invitation_not_pending
- invitation_queued
- invitation_rate_limited
- invitation_prepare_failed
- invitation_send_failed
- invitation_not_sent
- invitation_check_failed
- member_removal_failed
- destination_not_allowed
- endpoint_exists
- endpoint_limit
detail:
type: string
retry_after_seconds:
type: integer
minimum: 0
limit:
type: integer
usage:
type: integer
archive_needed:
type: integer
resets_at:
type: string
format: date-time
invalid_params:
type: array
items:
type: object
required:
- name
- reason
properties:
name:
type: string
reason:
type: string
securitySchemes:
apiKey:
type: http
scheme: bearer
description: 'An API key from the MCP and API page on uetr.ai, sent only in the Authorization header. A key sent in a URL is revoked. A connected app''s access token is refused here: it works only on the MCP server.'