<!-- tempo-docs-context -->
> Source: [/docs/routes/deposits](https://tempo.xyz/developers/docs/routes/deposits.md)
> Section: [Routes](https://tempo.xyz/developers/docs/routes.md). Move stablecoins between Tempo and other networks: try a route, set up API access, choose a supported route, quote it, accept deposits or make a transfer, 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.

# Accept deposits

Give customers a reusable address to fund from an external wallet.

A deposit address is a [Tempo Routes](https://tempo.xyz/developers/docs/routes) address on another network, such as Ethereum or Tron. Routes moves stablecoins between Tempo and supported networks along a route, a source network and token paired with a destination token. Each deposit address accepts the networks and tokens of its route and delivers funds to your chosen Tempo recipient.

For payments already on Tempo, use [Receive payments](https://tempo.xyz/developers/docs/guide/payments/accept-a-payment). [Virtual addresses](https://tempo.xyz/developers/docs/guide/payments/virtual-addresses) attribute those Tempo payments to one shared balance; they don't accept funds from other networks.

<span id="set-up-routes-api-access" />

## Prepare a deposit route

Before you start, have:

* A Tempo API key on your backend, created in [Set up API access](https://tempo.xyz/developers/docs/routes/api-setup). `routes:read` covers quotes and deposit reads; `routes:write` covers creating deposit addresses. Keep the key on the backend; show customers only the returned funding instructions.
* A route with deposit-address support from [Supported routes](https://tempo.xyz/developers/docs/routes/networks).
* A Tempo recipient, and a refund address on the source network. Routes sends refunds to this address; a refunded deposit's status moves from `refunding` to `refunded`.

Each step in the deposit flow has a request builder that generates cURL and TypeScript. To see the flow first, [try a route](https://tempo.xyz/developers/docs/routes/test) and choose **Deposit address**. The [cURL example](https://tempo.xyz/developers/docs/routes/examples/deposits) runs every step from a terminal.

<span id="create-and-monitor-a-deposit-address" />

## Accept a deposit

:::steps
### Quote the deposit

`GET /v1/routes/deposit-addresses/quote`

Quote deposit

[API reference](https://tempo.xyz/developers/docs/api/routes/deposit-addresses#quoteroutesdepositaddress) — 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/deposit-addresses/quote?amount=1000000&destinationToken=usdt0&sourceChain=tron&sourceToken=usdt' \
  --header 'tempo-api-key: YOUR_API_KEY'
```

**TypeScript**

```ts
fetch('https://api.tempo.xyz/v1/routes/deposit-addresses/quote?amount=1000000&destinationToken=usdt0&sourceChain=tron&sourceToken=usdt', {
  headers: {
    'tempo-api-key': 'YOUR_API_KEY'
  }
})
```

Set `recipient` to the Tempo recipient and `refundAddress` to the refund address you'll use when creating the address. Without them the quote prices the route alone, and some routes, including those from Ethereum, Polygon, BNB Smart Chain, and Tron, return the `quote_not_available` error.

Show the destination amount and fees as described in [Quotes and fees](https://tempo.xyz/developers/docs/routes/quotes). When the response includes `quote.expiresAt`, request a new quote once that time passes. A quote prices the supplied amount; it doesn't mean funds arrived.

<span id="create-a-reusable-address" />

### Create a deposit address

Send an [idempotency key](https://tempo.xyz/developers/docs/routes/api-setup#set-idempotency-keys) in the `idempotency-key` header. Create one key for this customer's address and store it with the customer record before the request, so a retry returns the same address instead of creating another.

`POST /v2/routes/deposit-addresses`

Create deposit address

[API reference](https://tempo.xyz/developers/docs/api/routes/deposit-addresses#createroutesdepositaddressv2) — 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/v2/routes/deposit-addresses \
  --request POST \
  --header 'idempotency-key: routes_01k1c5j8q8p0be6j5v9m6d1e4r' \
  --header 'tempo-api-key: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "amount": "1000000",
  "destinationToken": "usdt0",
  "recipient": "0x1111111111111111111111111111111111111111",
  "refundAddresses": {
    "evm": "0x2222222222222222222222222222222222222222"
  }
}'
```

**TypeScript**

```ts
fetch('https://api.tempo.xyz/v2/routes/deposit-addresses', {
  method: 'POST',
  headers: {
    'idempotency-key': 'routes_01k1c5j8q8p0be6j5v9m6d1e4r',
    'tempo-api-key': 'YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    amount: '1000000',
    destinationToken: 'usdt0',
    recipient: '0x1111111111111111111111111111111111111111',
    refundAddresses: {
      evm: '0x2222222222222222222222222222222222222222'
    }
  })
})
```

Send the refund address in `refundAddresses`, keyed by chain family, such as `evm`. The response lists one entry in `addresses` per chain family. Save the top-level `id` and each entry's `address` and `id` (`rda_…`) with your customer record. The response carries no quote terms, so show terms from a fresh quote with the funding instructions.

<span id="show-the-funding-instructions" />

### Show funding instructions

Display each entry's `address` together with the networks and tokens in its `sources` list. Check that its `status` is `active`, not `action-required`, before inviting deposits. Don't present it as an address for other assets or networks.

<span id="track-each-deposit" />

### Track deposits

Set `depositAddress` to the returned source-chain `address`. To filter by the address's `rda_…` ID instead, use `depositAddressId`.

`GET /v1/routes/deposits`

List deposits

[API reference](https://tempo.xyz/developers/docs/api/routes/deposit-addresses#listroutesdeposits) — 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/deposits?sourceChain=tron' \
  --header 'tempo-api-key: YOUR_API_KEY'
```

**TypeScript**

```ts
fetch('https://api.tempo.xyz/v1/routes/deposits?sourceChain=tron', {
  headers: {
    'tempo-api-key': 'YOUR_API_KEY'
  }
})
```

The response lists deposits in `data`, newest first. Pass `nextCursor` as `cursor` to read later pages. Read one deposit by its `id` from `data` with `GET /v1/routes/deposits/{id}`. A deposit moves through `detected`, `bridging`, and `settling` to `completed`, or to `action-required`, `refunding`, or `refunded`.
:::

## Reconcile delivery and refunds

Save the customer, deposit-address ID, and individual deposit IDs together. The same address can receive multiple deposits, so reconcile each deposit's `destinationAmount` and `destinationTransactionHashes` separately. An active address can receive funds; only a completed deposit confirms delivery to Tempo.

Continue with [Track delivery](https://tempo.xyz/developers/docs/routes/delivery) before crediting a balance or treating a refund as complete. See the [Deposit addresses API reference](https://tempo.xyz/developers/docs/api/routes/deposit-addresses) for the full lifecycle.
