Skip to main content
Glama

Track a Cross-Border Payment

track_payment

Track a SWIFT payment by UETR or reference number.

Basic SWIFT payment tracking enriched by data from certain banks in the correspondent chain. Returns the overall payment status and, when available, per-bank details showing which banks reported information about this payment.

IMPORTANT — every trace needs four things: amount, currency, date, and an identifier (uetr, or reference when there is no UETR). amount, currency and date are required parameters, on the UETR path too: there is no UETR-only lookup, so never tell the user the UETR alone is enough to run one. Ask for whatever is missing before calling, and never guess a value.

IMPORTANT — UETR vs Reference: The UETR (Unique End-to-End Transaction Reference) is a UUID assigned to every SWIFT gpi payment. Tracking by UETR succeeds ~80% of the time. Tracking by reference number alone succeeds less than 1% of the time because most banks only index by UETR.

→ Always provide the UETR if available. → The reference number is Field 20 of the MT103 (or the equivalent / in pacs.008). It is the sender's transaction reference. Still valuable — provide it alongside the UETR when you have both.

WHEN THE USER HAS ONLY A REFERENCE AND NO UETR ("how do I find / trace my payment?", "I have a reference number but no UETR, where is it?"): This is exactly the scenario this tool can attempt — do NOT answer from general knowledge. A reference-based trace cannot be run from the reference alone; you MUST first collect three things from the user: 1. amount — the exact amount as sent 2. currency — ISO 4217 (e.g. "USD") 3. date — the send date (within the last 90 days) Then call track_payment(reference=..., amount=..., currency=..., date=...). State the expectation up front: reference-only tracing succeeds less than 1% of the time. In parallel, tell the user how to recover the UETR for a reliable (~80%) trace: ask the SENDING bank for the MT103 confirmation — the UETR is in Block 3, tag {121:} (a UUID v4), stored by every gpi-enabled bank against the payment. Re-run with uetr= once they have it. (swift_message_reference("MT103") returns the full field/UETR-recovery reference if you need to cite specifics.)

IMPORTANT — Interpreting bank details: Each entry in the 'details' array represents a bank that reported data about this payment. The bank could be the SENDER, the BENEFICIARY, or ANY INTERMEDIARY/CORRESPONDENT in the chain. Do NOT assume a bank is an intermediary just because it appears in the list — we only know the payment passed through that bank. The bank's role is only known when it self-reports via push API (indicated by a non-null 'role' field).

Requires an API key with an active FI subscription. To get started: call mcp_register → mcp_verify → subscribe to an FI plan at https://ohmyfin.ai/subscription.

Returns a dict with: status: Overall payment status — one of: "success" — delivered to the beneficiary when the gpi code ACCC backs it; otherwise one bank reported its own leg completed (status_explanation says which) "in progress" — payment is being processed (may update) "returned" — payment was canceled/returned after processing (final) "rejected" — payment was refused (final) "on hold" — temporarily held, e.g. compliance review "future" — scheduled for a future value date "unknown" — no tracking data available yet status_raw: ISO 20022 status code (ACCC/ACSP/RJCT/PDNG) or null status_reason: ISO 20022 reason code at PAYMENT level, or null. null is common and does NOT mean no reason code was reported — most feeds report the qualifier per bank instead, see below. reason_codes_reported_by_banks: Present whenever any bank line reports a "STATUS/REASON" qualifier (ACSP/G003, RJCT/MS03). Each entry is decoded to its name and meaning. This is what answers "is anything pending / held / rejected / flagged on my payment", not status_reason. lastupdate: Date of last status change (YYYY-MM-DD) or null details: Array of bank-level tracking entries (see role_explanation in each entry for how to interpret the bank's role) not_found_guidance: Present only when nothing was found — concrete next steps (UETR recovery, exact-match checks). Relay these to the user instead of improvising; a miss on a reference-only trace is the expected outcome and does NOT mean the payment failed.

Examples: track_payment(uetr="eb6305c8-0710-4e41-84ad-f58db3083e82", amount=15000, currency="USD", date="2026-03-10") track_payment(uetr="eb6305c8-0710-4e41-84ad-f58db3083e82", reference="FT2603100123", amount=15000, currency="USD", date="2026-03-10") track_payment(reference="FT2603100123", amount=5000, currency="EUR", date="12.03.2026")

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dateYesTransaction date. Preferred format YYYY-MM-DD (ISO 8601); DD.MM.YYYY and DD-MM-YYYY are also accepted, slash-separated dates are not. Must be within the last 90 days.
uetrNoUETR, UUID v4 (e.g. "eb6305c8-0710-4e41-84ad-f58db3083e82"). Strongly recommended: tracking without a UETR rarely returns results. It is the Unique End-to-End Transaction Reference every gpi payment carries.
amountYesTransaction amount as sent (e.g. 15000.00). Must match the original payment amount: even a small difference may stop tracking from finding the payment, so ask the user for the exact figure rather than estimating or rounding one.
api_keyNoYour Ohmyfin API key (prod-...). Optional here: it can be sent instead as a KEY header or an Authorization: Bearer header. What the tool requires of the key is in its description.
currencyYesISO 4217 code of the currency the payment was SENT in (e.g. "USD", "EUR", "GBP"). Ask if you do not know it; do not assume the sender's or the beneficiary's home currency.
referenceNoSender's bank reference number (MT103 field 20 / pacs.008 InstrId). Useful beside the UETR for cross-referencing, but alone it rarely produces results. Required only if uetr is not provided.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • addedInput schema / properties / amount / description
      Added value: +"Transaction amount as sent (e.g. 15000.00). Must match the original payment amount: even a small difference may stop tracking from finding the payment, so ask the user for the exact figure rather than estimating or rounding one."
    • addedInput schema / properties / api_key / description
      Added value: +"Your Ohmyfin API key (prod-...). Optional here: it can be sent instead as a KEY header or an Authorization: Bearer header. What the tool requires of the key is in its description."
    • addedInput schema / properties / currency / description
      Added value: +"ISO 4217 code of the currency the payment was SENT in (e.g. \"USD\", \"EUR\", \"GBP\"). Ask if you do not know it; do not assume the sender's or the beneficiary's home currency."
    • addedInput schema / properties / date / description
      Added value: +"Transaction date. Preferred format YYYY-MM-DD (ISO 8601); DD.MM.YYYY and DD-MM-YYYY are also accepted, slash-separated dates are not. Must be within the last 90 days."
    • addedInput schema / properties / reference / description
      Added value: +"Sender's bank reference number (MT103 field 20 / pacs.008 InstrId). Useful beside the UETR for cross-referencing, but alone it rarely produces results. Required only if uetr is not provided."
    • addedInput schema / properties / uetr / description
      Added value: +"UETR, UUID v4 (e.g. \"eb6305c8-0710-4e41-84ad-f58db3083e82\"). Strongly recommended: tracking without a UETR rarely returns results. It is the Unique End-to-End Transaction Reference every gpi payment carries."
  2. Changed4 schema fields changed
    • removedInput schema / properties / amount / default
      Removed value: -0
    • removedInput schema / properties / currency / default
      Removed value: -"USD"
    • removedInput schema / properties / date / default
      Removed value: -""
    • addedInput schema / required
      Added value: +[
      +  "amount",
      +  "currency",
      +  "date"
      +]
  3. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are thin boolean hints, yet the description discloses the API-key/FI-subscription requirement, onboarding steps, exact-match and 90-day constraints, and the probability profile of each lookup path (~80% UETR vs <1% reference). It also warns that a reference-only miss is the expected outcome rather than a failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The IMPORTANT blocks and worked examples are front-loaded and mostly earn their place, but the 'Returns a dict with...' section largely re-narrates an output schema that already exists, and the repeated emphasis markers add bulk that could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter tool with 100% schema coverage and an output schema, the description still supplies the operational context an agent needs: required-vs-optional dependency logic, auth setup, status-value interpretation rules, and guidance on relaying not_found_guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it establishes that amount/currency/date are required even on the UETR path and that there is no UETR-only lookup, and it explains what the reference number is (MT103 field 20 / pacs.008 InstrId).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+identifier ('Track a SWIFT payment by UETR or reference number') and clearly distinguishes itself from siblings like tracking_history and gpi_status_codes by scoping to live SWIFT gpi tracking.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it (reference-only user scenarios), the prerequisites that must be collected first, the alternative path (recover UETR from MT103 Block 3 {121:}), the alternative tool (swift_message_reference), and the expected success rates for each path. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources