> ## Documentation Index
> Fetch the complete documentation index at: https://docs.privy.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Execute a payout

A payout converts crypto from a wallet and settles it to a [registered bank account](/financial-flows/transfers/fiat-payouts/register-bank-account) in a single call.

## Supported assets and chains

Pass `source.asset` as one of [Privy's well-known assets](/wallets/actions/transfer/overview#well-known-assets). The asset value differs by chain: Tempo uses `usdc_e` and `usdt0`, not `usdc` and `usdt`.

| Chain    | `source.chain` | Supported `source.asset`       |
| -------- | -------------- | ------------------------------ |
| Tempo    | `tempo`        | `usdc_e`, `usdt0`              |
| Ethereum | `ethereum`     | `usdc`, `usdt`, `usdb`, `eurc` |
| Base     | `base`         | `usdc`, `usdb`, `eurc`         |
| Arbitrum | `arbitrum`     | `usdc`                         |
| Optimism | `optimism`     | `usdc`                         |
| Polygon  | `polygon`      | `usdc`                         |
| Solana   | `solana`       | `usdc`, `usdt`, `usdb`, `eurc` |

<Warning>
  On Polygon, pay out `usdc` rather than `usdc_e`. Privy's `usdc_e` on Polygon is PoS-bridged USDC,
  which the provider does not accept, so a payout naming it is rejected.
</Warning>

<View title="REST API" icon="terminal">
  To pay out from a wallet, make a `POST` request to:

  ```bash theme={"system"}
  https://api.privy.io/v1/wallets/{wallet_id}/payout/fiat
  ```

  In the body of the request, include the following fields:

  <ParamField body="source" type="object" required>
    The crypto to offramp.

    <Expandable title="properties" defaultOpen>
      <ParamField body="source.asset" type="string" required>
        Asset to offramp. See [supported assets and chains](#supported-assets-and-chains).
      </ParamField>

      <ParamField body="source.chain" type="string" required>
        Chain the asset is held on. Must match the wallet's `chain_type`. See [supported assets and
        chains](#supported-assets-and-chains).
      </ParamField>

      <ParamField body="source.amount" type="string" required>
        Amount to offramp, as a decimal string in the asset's standard units, such as `"100.00"`.
      </ParamField>
    </Expandable>
  </ParamField>

  <ParamField body="destination" type="object" required>
    Where the fiat settles.

    <Expandable title="properties" defaultOpen>
      <ParamField body="destination.fiat_account_id" type="string" required>
        ID of a registered bank account. The account's currency and rail determine how the fiat
        settles, so neither is passed here.
      </ParamField>
    </Expandable>
  </ParamField>

  <Info>
    Pass a `privy-idempotency-key` header to make retries safe. If the wallet has an owner, the
    request also requires an [authorization signature](/api-reference/authorization-signatures).
  </Info>

  Below is a sample cURL command for this request:

  ```bash theme={"system"}
  curl --request POST https://api.privy.io/v1/wallets/{wallet_id}/payout/fiat \
    -u "<your-privy-app-id>:<your-privy-app-secret>" \
    -H "privy-app-id: <your-privy-app-id>" \
    -H 'Content-Type: application/json' \
    -H 'privy-idempotency-key: <your-idempotency-key>' \
    -d '{
      "source": {
        "asset": "usdc_e",
        "chain": "tempo",
        "amount": "100.00"
      },
      "destination": {
        "fiat_account_id": "fa_3ad996de-e827-4d2e-99fc-799838520453"
      }
    }'
  ```

  A successful response is a pending payout wallet action:

  <ResponseField name="id" type="string">
    ID of the wallet action. Use this to track the payout.
  </ResponseField>

  <ResponseField name="type" type="'payout'">
    Type of the wallet action.
  </ResponseField>

  <ResponseField name="status" type="'pending' | 'succeeded' | 'rejected' | 'failed'">
    Current status of the payout.
  </ResponseField>

  <ResponseField name="provider" type="'bridge'">
    Provider settling the payout.
  </ResponseField>

  <ResponseField name="environment" type="'production' | 'sandbox'">
    Provider environment the payout runs against.
  </ResponseField>

  <ResponseField name="source" type="object">
    The `asset`, `chain`, and `amount` being offramped.
  </ResponseField>

  <ResponseField name="destination" type="object">
    The `fiat_account_id` the payout settles to.
  </ResponseField>

  ```json theme={"system"}
  {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "wallet_id": "fmfdj6yqly31huorjqzq38zc",
    "type": "payout",
    "status": "pending",
    "provider": "bridge",
    "environment": "sandbox",
    "source": {
      "asset": "usdc_e",
      "chain": "tempo",
      "amount": "100.00"
    },
    "destination": {
      "fiat_account_id": "fa_3ad996de-e827-4d2e-99fc-799838520453"
    },
    "created_at": "2026-08-03T12:00:00Z"
  }
  ```
</View>

## Next steps

<CardGroup cols={2}>
  <Card title="Track a payout" icon="webhook" href="/financial-flows/transfers/fiat-payouts/track-payouts">
    Follow a payout from on-chain transfer to bank settlement
  </Card>

  <Card title="Wallet actions" icon="bolt" href="/wallets/actions/overview">
    Learn how wallet actions are authorized and executed
  </Card>
</CardGroup>
