<!-- 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. Each address accepts a specific network and token and routes 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 payments to a shared Tempo balance; they are different from Routes deposit addresses.

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

## Prepare a deposit route

Before the first step, have:

* A backend key with `routes:read` and `routes:write` from [Set up API access](https://tempo.xyz/developers/docs/routes/api-setup). 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.

Each step below 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'
  }
})
```

Include the `recipient` and `refundAddress` you create the address with. Some routes, including those from Ethereum, Polygon, BNB Smart Chain, and Tron, return `quote_not_available` without them.

Show the destination amount and fees as described in [Quotes and fees](https://tempo.xyz/developers/docs/routes/quotes), and refresh expired terms. A quote prices the supplied amount; it does not establish receipt of funds.

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

### Create a deposit address

Send the [idempotency key](https://tempo.xyz/developers/docs/routes/api-setup#set-idempotency-keys) you stored for this customer's address.

`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'
    }
  })
})
```

Save the returned `id` and `address` with your customer record. A newly created address includes quote terms; an existing address may not. Obtain a fresh quote before showing funding instructions when terms are absent or stale.

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

### Show funding instructions

Display the returned network, token, and deposit address together. Check that its status is `active` before inviting deposits. Do not present it as an address for arbitrary assets or networks.

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

### Track deposits

Set `depositAddress` to the returned source-chain address, not its `rda_…` object ID.

`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`. Follow `nextCursor` for subsequent pages. Read each deposit with `GET /v1/routes/deposits/{id}`.
:::

## 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 delivered amount and destination transaction references 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.
