<!-- tempo-docs-context -->
> Source: [/docs/routes/delivery](https://tempo.xyz/developers/docs/routes/delivery.md)
> Section: [Routes](https://tempo.xyz/developers/docs/routes.md). Accept cross-network deposits, quote transfers, and track delivery. Routes is in beta; see the introduction for access.
> [Documentation index](https://tempo.xyz/developers/llms.txt) · [Docs skill](https://tempo.xyz/developers/SKILL.md)

> Tempo MCP: Use `search`, `find_pages`, `read_page`, and `code` at `https://mcp.tempo.xyz` for Tempo and related documentation.
> If an indexed page is missing or reflects an older site, read this site’s [documentation index](https://tempo.xyz/developers/llms.txt) and Markdown pages directly.

# Track delivery

A successful source-chain transaction starts a route; it does not establish that the destination received funds. Keep the Routes object ID with your payment record and follow its status through delivery or refund.

<span id="read-the-transfer-or-deposit" />

## Check status

For a transfer your application authorizes, use `GET /v1/routes/transfers/{id}`. Register the submitted source transaction hashes as described in [Make a transfer](https://tempo.xyz/developers/docs/routes/transfers).

For a deposit-address flow, list deposits with `GET /v1/routes/deposits`, filtering by `depositAddress`, then read each deposit with `GET /v1/routes/deposits/{id}`. The address being `active` says it can receive deposits; it does not describe a particular deposit's progress.

Use the API key from [API setup](https://tempo.xyz/developers/docs/routes/api-setup) and enter the transfer `id` returned when you created it.

`GET /v1/routes/transfers/{id}`

Get transfer

[API reference](https://tempo.xyz/developers/docs/api/routes/transfers#getroutestransfer) — request parameters, authentication, and response schema. The examples below use editable sample values.

Requires a [Tempo API key](https://tempo.xyz/developers/docs/api/console/api-keys). Replace `YOUR_API_KEY` before running this request.

**cURL**

```bash
curl https://api.tempo.xyz/v1/routes/transfers/rtr_001785729600000_2ZPE2gvateYEQ0dQslgvkhjx \
  --header 'tempo-api-key: YOUR_API_KEY'
```

**TypeScript**

```ts
fetch('https://api.tempo.xyz/v1/routes/transfers/rtr_001785729600000_2ZPE2gvateYEQ0dQslgvkhjx', {
  headers: {
    'tempo-api-key': 'YOUR_API_KEY'
  }
})
```

<span id="keep-delivery-and-refund-states-distinct" />

<span id="handle-failures" />

## Delivery states

| State | Applies to | Application behavior |
| --- | --- | --- |
| `awaiting-source` | Transfers | Source funding has not been registered. |
| `detected`, `bridging`, `settling` | Deposits | Funds are moving through delivery. Keep the deposit pending. |
| `processing` | Transfers | Keep the payment pending. |
| `completed` | Both | Reconcile the delivered amount and destination transaction references. |
| `action-required` | Both | Inspect `statusReason` and the endpoint's instructions. |
| `expired` | Transfers | Inspect source funding before starting a replacement. |
| `refunding` | Both | Keep the refund pending. |
| `refunded` | Both | Reconcile the refund amount and transaction references. |

Use the full [transfer](https://tempo.xyz/developers/docs/api/routes/transfers) or [deposit](https://tempo.xyz/developers/docs/api/routes/deposit-addresses) reference for the lifecycle and response fields. Do not automatically send the payment again when it is pending or being refunded.

## Track refunds

Keep `refunding` separate from `refunded`. Reconcile the returned refund amount and transaction references before updating the customer's balance. A refund and a successful delivery are different outcomes for the original payment.

<span id="retry-a-create-request-safely" />

### Retry a create request

Reuse the same `idempotency-key` for the same create request. Changing the input while keeping the key conflicts. If a response is lost, follow the endpoint's retry behavior before creating a replacement; a missing response does not prove that creation failed.

## Use funds after delivery

After the destination account receives stablecoins, it can [send a payment](https://tempo.xyz/developers/docs/guide/payments/send-a-payment), [deposit into Earn](https://tempo.xyz/developers/docs/earn/integrate), or [deposit into a Zone](https://tempo.xyz/developers/docs/zones/deposit). Each is a separate operation. Direct Routes transfers into a vault or Zone are not implemented; their endpoints return HTTP `501`.
