<!-- tempo-docs-context -->
> Source: [/docs/guide/private-zones/withdraw-from-a-zone](https://tempo.xyz/developers/docs/guide/private-zones/withdraw-from-a-zone.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.
> Earlier testnet sandbox: use [Zones](https://tempo.xyz/developers/docs/zones.md) for the current limited preview.
> [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.

<a id="withdraw-pathusd-from-a-tempo-zone-on-testnet" />

# Withdraw OUSD

Move `OUSD` test tokens from Zone A back to your public Tempo balance.

## Overview

A direct withdrawal moves `OUSD` test tokens from **Zone A** back to your public Tempo balance. It uses the [testnet sandbox](https://tempo.xyz/developers/docs/guide/private-zones#testnet-compatibility), which differs from current deployments. The withdrawal exits through the outbox (`ZoneOutbox`) on the Zone. You submit the request in the Zone, then wait for your Tempo balance to increase after the batch settles.

A signed Zone A outbox request reduces the private balance. Tempo accepts the batch, then processes the withdrawal to deliver OUSD to the public recipient.

<a id="withdrawing-pathusd-from-zone-a" />

<span id="withdrawing-ousd-from-zone-a" />

## Withdraw OUSD From Zone A

**Interactive demo: Withdraw from Zone A**

1. Withdraw from zone

## Code Examples

These snippets assume a signed-in `rootClient` on Tempo, a derived `zoneAClient`, and the usual token constants in scope. The calls target the sandbox's SDK interfaces.

Standard withdrawals omit an encrypted sender disclosure. Authenticated withdrawals attach sender details encrypted to the holder of the `revealTo` public key. Both flows keep the public recipient and amount visible.

### Standard

```ts
import { parseUnits } from 'viem'

const withdrawalAmount = parseUnits('100', 6)

await zoneAClient.zone.signAuthorizationToken({ zoneId: 6 })

const { receipt } = await zoneAClient.zone.requestWithdrawalSync({
  account: rootClient.account,
  feeToken: ousd,
  amount: withdrawalAmount,
  token: ousd,
  to: rootClient.account.address,
})

console.log(receipt.blockNumber)
```

### Authenticated

```ts
import { parseUnits } from 'viem'

const withdrawalAmount = parseUnits('100', 6)
const revealTo = '0x031dc147467e8f106eb22850fef549dc74b8f6634aeac554ebdd4ab896b67cdf68' // [!code focus]

await zoneAClient.zone.signAuthorizationToken({ zoneId: 6 })

const { receipt } = await zoneAClient.zone.requestVerifiableWithdrawalSync({ // [!code focus]
  account: rootClient.account,
  feeToken: ousd,
  amount: withdrawalAmount,
  revealTo, // [!code focus]
  token: ousd,
  to: rootClient.account.address,
})

console.log(receipt.blockNumber)
```

<span id="what-a-direct-withdrawal-does" />

## Withdrawal Settlement

A direct withdrawal is the most direct way out of a Zone. The outbox burns the Zone balance and includes the request in the next withdrawal batch. Tempo then settles the amount to a public Tempo address.

The Zone accepts the request first. Your Tempo balance changes later, when the sequencer submits and processes the batch on Tempo.

A failed withdrawal doesn't stay stuck. If processing on Tempo fails, the protocol [re-deposits the amount](https://tempo.xyz/developers/docs/protocol/zones/bridging#withdrawal-failure-and-bounce-back) into the Zone to the request's `fallbackRecipient`. The fee is still consumed.

:::warning
A direct withdrawal can fail on Tempo even with `gas: 0n`, such as on a token transfer or policy check. The amount then bounces back to `fallbackRecipient` on the Zone. The public balance doesn't increase.
:::

## Related

[Withdraw From a Zone](https://tempo.xyz/developers/docs/zones/withdraw): Use for withdrawing from a current Zone deployment.

[Deposit OUSD](https://tempo.xyz/developers/docs/guide/private-zones/deposit-to-a-zone): Use for moving testnet OUSD from Tempo into a Zone A balance.

[Send Across Zones](https://tempo.xyz/developers/docs/guide/private-zones/send-tokens-across-zones): Use for moving OUSD from Zone A into Zone B through Tempo.

[Testnet Sandbox](https://tempo.xyz/developers/docs/guide/private-zones): Covers the sandbox Zones, router deployment, and compatibility limits.
