<!-- tempo-docs-context -->
> Source: [/docs/zones/withdraw](https://tempo.xyz/developers/docs/zones/withdraw.md)
> Section: [Zones](https://tempo.xyz/developers/docs/zones.md). Connect to a Zone and work with private balances, deposits, and withdrawals. Zones is in limited preview; see the introduction for access. Earlier testnet sandbox guides describe a separate integration.
> [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.

<span id="withdraw-from-a-zone" />

# Withdraw

Withdraw through the Zone's supported outbox interface, then track delivery on public Tempo. The source transaction, accepted batch, and recipient's token receipt are separate events.

[Try the withdrawal demo](https://tempo.xyz/developers/docs/guide/private-zones/withdraw-from-a-zone) with test funds. It uses the earlier sandbox interface.

## Submit and track a withdrawal

<span id="check-the-destination-and-access-rules" />

:::steps
### Prepare the withdrawal

Confirm the token, amount, public Tempo recipient, fallback recipient, and deployment restrictions with the operator's tooling. If using a callback, verify the permitted target and callback interface before requesting authorization.

<span id="include-withdrawal-fees" />

#### Calculate withdrawal fees

Read `calculateWithdrawalFee(gasLimit)` from the deployed outbox interface. Reserve enough balance for this fee and Zone transaction gas in addition to the amount withdrawn. See the [withdrawal fee rules](https://tempo.xyz/developers/docs/protocol/zones/execution#withdrawal-fees).

<span id="submit-through-the-zone-outbox" />

### Request a withdrawal

Use the supported interface to submit the withdrawal through `ZoneOutbox`. Save the source transaction and identifiers needed to follow the withdrawal across the private and public networks.

<span id="track-settlement-on-tempo" />

### Track delivery

The operator includes the withdrawal in a batch, the portal accepts the batch, and the withdrawal is processed on Tempo. Keep it pending until the destination delivery is confirmed.

The hosted [Zone withdrawal status API](https://tempo.xyz/developers/docs/api/zones) can report parent-chain outcomes. Its `zoneStatus: completed` is a checkpoint signal; check the delivery outcome and any refund separately.
:::

## Read the withdrawal status

Use the `senderTag` emitted for this withdrawal; tags can differ for withdrawals within the same transaction. The API returns indexed outcomes in `data`.

Click **Try**, enter the emitted sender tag and the Zone’s numeric `chainId`, then use an API key with `data:read` and access to that Zone. The request tool includes language examples and the response.

`GET /v1/zones/withdrawals/{senderTag}`

List Zone withdrawals

[API reference](https://tempo.xyz/developers/docs/api/zones#listzonewithdrawals) — 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/zones/withdrawals/0x61fc42a734cb44acef497ea0bed612c691195623244136e0739e1929569e2487?chainId=1424310003' \
  --header 'tempo-api-key: YOUR_API_KEY'
```

**TypeScript**

```ts
fetch('https://api.tempo.xyz/v1/zones/withdrawals/0x61fc42a734cb44acef497ea0bed612c691195623244136e0739e1929569e2487?chainId=1424310003', {
  headers: {
    'tempo-api-key': 'YOUR_API_KEY'
  }
})
```

An empty `data` array means no outcome has been indexed yet. Keep the withdrawal pending while tracking both delivery and any refund; the Zone checkpoint alone does not confirm that funds arrived.

<span id="handle-failed-delivery" />

## Handle refunds

A failed token transfer or callback can return funds through a deposit back into the source Zone. That return also needs processing; if minting is blocked, it can leave a pending refund.

Follow [withdrawal failure and bounce-back](https://tempo.xyz/developers/docs/protocol/zones/bridging#withdrawal-failure-and-bounce-back) to track the refund to the recipient.

## Call a contract on Tempo

Withdrawals can invoke contracts on Tempo subject to the deployment's access rules. The public operation and any later Zone credit have separate settlement stages. Use the [composable withdrawal specification](https://tempo.xyz/developers/docs/protocol/zones/bridging#composable-withdrawals) when integrating callbacks.

<span id="try-a-sandbox-withdrawal" />
