---
title: "Where is my off-ramp payout? How to track it rail by rail, and what to tell the recipient"
seoTitle: "How to track a crypto off-ramp payout, rail by rail"
description: "Track an off-ramp payout from transaction hash to bank: the reference each rail gives you (Pix E2E ID, SPEI key, ACH trace, UETR) and status copy."
date: "2026-09-12"
updated: "2026-09-12"
category: "payments"
author: "BlindPay Team"
faq:
  - q: "How do I track a crypto off-ramp payout?"
    a: "In two halves. Track the stablecoin leg by its transaction hash on a block explorer. Track the fiat leg with the reference the bank rail assigns: the end-to-end ID on Pix, the clave de rastreo on SPEI, the trace number on ACH, the IMAD on Fedwire, the UETR on SWIFT, or the end-to-end ID on SEPA. In between, the provider's payout status tells you which stage it's in."
  - q: "The provider says completed but the recipient hasn't received the money. What now?"
    a: "Give the recipient the rail reference and ask them to raise it with their bank. Completed means the payment reached the receiving bank's network, and the bank may still be crediting the account, holding it for its own checks, or have applied it to the wrong account. A UETR, IMAD, or SPEI tracking key lets the bank find the exact payment instead of searching by amount and date."
  - q: "How do I check a SPEI transfer in Mexico?"
    a: "Use Banxico's CEP lookup at banxico.org.mx/cep. Enter the transfer date, the clave de rastreo (tracking key) or reference number, the sending and receiving banks, the receiving account, and the amount. If the payment settled, you can download the CEP, an electronic proof of payment generated from the receiving bank's information. Banxico lists query hours of 09:30 to 23:00."
  - q: "What is a UETR and where do I find it?"
    a: "A UETR is the Unique End-to-end Transaction Reference attached to a SWIFT payment. Every bank in the chain uses the same identifier, so the recipient's bank can trace the payment through correspondents with it. On BlindPay it's returned as provider_uetr on the payout and the payout.complete webhook, for SWIFT and domestic wire payouts, once the wire is confirmed. It's empty while the payment is in flight."
  - q: "Should I retry a payout that's on hold?"
    a: "No. On hold means the payout is waiting for a review, not that it failed. Retrying creates a second payout that can land on hold too, and both may go through. Leave it, answer any request for information quickly, and tell the recipient the payment is being checked. At BlindPay, on hold resolves to processing, completed, failed, or refunded."
---

To track an off-ramp payout, follow the stablecoin leg by its transaction hash and the fiat leg by the reference its rail assigns: the end-to-end ID on Pix, the clave de rastreo on SPEI, the trace number on ACH, the IMAD on Fedwire, the UETR on SWIFT, or the end-to-end ID on SEPA. The provider's status shows which stage the payout is in.

Most "where is my money" tickets get solved by handing over the right reference. Here's which one, and when.

## Key takeaways

- Every off-ramp payout has two trackable halves: an on-chain transfer and a bank payment.
- Each rail has its own reference. The recipient's bank can find a payment in minutes with it, and in days without it.
- Statuses tell you the stage. `On hold` is a review, not an error, and `completed` means the money reached the rail, not that the recipient checked their app.
- Write status copy per stage and per rail before launch. Support teams answer the same five questions all day.

## What are the stages of an off-ramp payout?

Seven stages, and a recipient-facing message for each. The statuses are BlindPay's, from the [payouts reference](/docs/payouts). Other providers use similar names.

| Stage | What's happening | Provider status and event | What to tell the recipient |
| --- | --- | --- | --- |
| Quote accepted | Rate and fees locked for a few minutes | Quote created | "Your payment of R$5,000.00 is confirmed at this rate." |
| Stablecoins collected | Funds pulled from the sender's wallet | `processing`, `payout.new` | "We've received the funds and started your transfer." |
| Compliance review | Payout held for screening or documents | `on_hold`, `payout.update` | "Your payment is being reviewed. No action needed unless we contact you." |
| Converting | Stablecoins converted to local currency | `processing` | "We're converting your payment to reais." |
| Sent to the bank | Payment submitted to Pix, SPEI, ACH, SEPA, or SWIFT | `processing`, `payout.update` | "Your payment is on its way to your bank. Expected: within minutes." |
| Settled | Payment reached the receiving bank | `completed`, `payout.complete` | "Paid. Reference: E2E ID E1234..." |
| Returned | Stablecoins sent back instead of converting | `refunded`, `payout.complete` | "The bank couldn't accept this payment. Please check your account details." |

Two statuses need care. A `failed` payout fires `payout.update`, not `payout.complete`, and at BlindPay it doesn't refund automatically. And `on_hold` isn't a failure, so never show it in red. The [payout statuses explainer](/resources/more/stablecoin-payout-statuses-explained) covers which statuses are final and why.

Each BlindPay payout also carries tracking objects (`tracking_transaction`, `tracking_liquidity`, `tracking_payment`, `tracking_complete`) whose `step` moves through `processing`, `on_hold`, `pending_review`, and `completed`. They're what lets you split "converting" from "sent to the bank" in your own UI.

## Which reference does each rail give you?

| Rail | Reference | Format | Where it's checked |
| --- | --- | --- | --- |
| Blockchain | Transaction hash | Hex or base58 string, per chain | Block explorer: Etherscan, Polygonscan, Basescan, Arbiscan, Solscan, Tronscan, StellarExpert |
| Pix (Brazil) | End-to-end ID (E2E ID) | [32 alphanumeric characters](https://github.com/bacen/pix-api/blob/master/openapi.yaml) | Recipient's bank app or statement |
| SPEI (Mexico) | Clave de rastreo | [Up to 30 alphanumeric characters](https://www.banxico.org.mx/cep/) | Banxico's CEP lookup |
| ACH (US) | Trace number | [15 digits, assigned by the originating bank](https://achdevguide.nacha.org/ach-file-details) | Recipient's bank |
| Fedwire (US) | IMAD | [Input Message Accountability Data](https://www.frbservices.org/resources/financial-services/wires/faq/iso-20022/format) | Recipient's bank |
| SWIFT | UETR | [36-character unique identifier](https://www.swift.com/payments/what-unique-end-end-transaction-reference-uetr) | Any bank in the chain, through Swift gpi tracking |
| SEPA | End-to-end ID | Up to 35 characters, set by the sender | Recipient's bank |

A few notes from the field.

**Pix.** The E2E ID identifies the payment across the whole Pix system. If something goes wrong, it's also what the recipient's bank needs for a devolução (refund). The Central Bank's [MED guide](https://www.bcb.gov.br/content/estabilidadefinanceira/pix/Guia_MED.pdf) sets the rules for fraud-related returns, including an 80-day window from the original payment.

**SPEI.** The clave de rastreo is the most useful reference in Latin America, because anyone can check it. SPEI runs [24/7](https://www.banxico.org.mx/servicios/spei_-informacion-banco-mex.html), so payouts settle at any hour.

**SWIFT.** Cross-border SWIFT payments moved to ISO 20022 messages when the coexistence period with the old MT format ended in November 2025, and the UETR carries over. With it, the recipient's bank can see which correspondent is holding the payment and why. BlindPay's SWIFT (POBO/COBO) payouts carry UETR tracking and MT103 confirmations, which recipients' finance teams and auditors already know how to read ([how POBO/COBO works](/pobo-cobo-swift)).

## How do you check a SPEI payment yourself?

Mexico is the one rail where the sender can verify settlement without the recipient's bank.

1. Go to [banxico.org.mx/cep](https://www.banxico.org.mx/cep/).
2. Enter the date of the transfer.
3. Enter the clave de rastreo, or the reference number.
4. Select the sending bank and the receiving bank.
5. Enter the recipient's CLABE and the exact amount.
6. Download the CEP (Comprobante Electrónico de Pago).

The CEP is built from the receiving bank's information, which is why recipients and auditors accept it. It's the best answer to "I didn't get it" on a SPEI payout.

## What does BlindPay return for tracking?

Statuses and webhooks for every payout, plus the rail references that the rail provides. Per the [POBO/COBO guide](/docs/kb/pobo-cobo), these arrive on `GET /payouts/{id}` and on the `payout.complete` webhook:

| Rail | `provider_uetr` | `provider_imad` | `provider_reference` | `provider_clearing_system` |
| --- | --- | --- | --- | --- |
| International SWIFT | Yes | No | No | `SWIFT` |
| Domestic wire | Yes | Yes | Sometimes | `FED` or `CHIPS` |
| ACH | No | No | Sometimes | `ACH` |

`provider_uetr` stays null while the payment is in flight and fills in once the wire is confirmed. `provider_reference` is a bank-side booking reference, not the formal ACH trace number, so don't hand it to a bank as one.

SWIFT payouts add one more object. They start `on_hold` until compliance documents are approved, and `tracking_documents` reports progress from `waiting_documents` to `compliance_reviewing` ([SWIFT statuses](/docs/kb/swift-statuses)). Documents must be submitted within 30 days of payout creation.

## How should support answer "where is my money"?

Work from the status, in this order.

1. **`processing` longer than the rail's normal time.** Check which tracking object is still open. A stuck `tracking_payment` with a business-day rail usually means a cut-off was missed. The [settlement times by rail](/resources/more/stablecoin-payout-settlement-times) give the normal window.
2. **`on_hold`.** Tell the recipient it's under review. Don't retry. Answer any request for information within hours, since an unanswered one can end in a refund ([on-hold transactions](/docs/kb/on-hold-transactions)).
3. **`completed`, recipient says no.** Send the rail reference. The recipient's bank finds the payment with it, then credits it or explains the delay.
4. **`refunded`.** The stablecoins went back to the funding source. Fix the bank details, usually a name or account number problem, and send a new payout with a new quote.
5. **`failed`.** At BlindPay this doesn't refund automatically. Open a ticket with support instead of waiting.

Keep every reference in your own ledger next to the payout ID. Finance asks for them months later, during reconciliation. The [webhooks and reconciliation guide](/resources/more/stablecoin-api-webhooks-reconciliation) shows how to store events so they don't get processed twice.

## How should status copy read?

Short, specific, and per rail.

- **Give the ETA for the rail, not the provider.** "Within minutes" for Pix and SPEI. "One to two business days" for ACH.
- **Say what the recipient can do.** Usually nothing, until a reference exists.
- **Show the reference as soon as you have it.** E2E ID, clave de rastreo, UETR.
- **Don't say "instant" before settlement.** Say it after.
- **Never show a review as an error.** Grey or neutral, not red.

The [payout mistakes guide](/resources/more/stablecoin-payout-mistakes) lists the errors that cause most returns in the first place.

## How does BlindPay help you track payouts?

BlindPay reports every payout through statuses, tracking objects, and webhooks, from the moment the stablecoins are collected to the moment local currency lands. SWIFT and domestic wire payouts carry the UETR, wires carry the IMAD, and SWIFT compliance progress shows up in `tracking_documents`. Start with the [payouts reference](/docs/payouts), then wire `payout.update` and `payout.complete` into your status page.

*This article is for general information only and is not legal, tax, or financial advice.*
