> ## 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.

# Fiat offramps

> Convert crypto to fiat and pay out to any bank account with the Bridge API

Fiat offramps convert crypto in a Privy wallet to fiat and pay it out to a bank account; the user's own account to cash out, or another person's or business's account to pay them. Privy uses [Bridge](https://bridge.xyz) to power the crypto-to-fiat conversion, KYC, and settlement.

Privy's Bridge integration builds a fully headless offramp against the Bridge API.

<Info>
  This guide assumes the user is already onboarded to Bridge—the Bridge customer exists, terms of
  service are accepted, and KYC is verified. That onboarding happens once through [headless bank
  deposits](/wallets/funding/headless-bank-deposits) and is shared across onramps and offramps, so a
  verified user can offramp without repeating it. If the user is not yet verified, complete [terms
  of service and KYC](/wallets/funding/headless-bank-deposits#register-the-user) first.
</Info>

<Steps>
  <Step title="Register a fiat account">
    Register the bank account that receives the payout. This can be the user's own account or a third party's; set `account_owner_name` and the account holder details accordingly. See the [API reference](/api-reference/fiat/accounts/create) for the full set of parameters.

    <View title="cURL" icon="terminal">
      ```bash theme={"system"}
      curl --request POST \
        --url https://api.privy.io/v1/users/{user_id}/fiat/accounts \
        --header 'Authorization: Basic <encoded-value>' \
        --header 'Content-Type: application/json' \
        --header 'privy-app-id: <privy-app-id>' \
        --data '{
        "provider": "bridge-sandbox",
        "account_owner_name": "John Doe",
        "currency": "usd",
        "bank_name": "Chase",
        "account": {
          "account_number": "1234567899",
          "routing_number": "121212121",
          "checking_or_savings": "checking"
        },
        "address": {
          "street_line_1": "123 Washington St",
          "city": "New York",
          "state": "NY",
          "postal_code": "10001",
          "country": "USA"
        },
        "first_name": "John",
        "last_name": "Doe"
      }'
      ```
    </View>
  </Step>

  <Step title="Generate offramp instructions">
    Generate offramp instructions with the registered account's `external_account_id`. See the [API reference](/api-reference/fiat/offramp/create) for the full set of parameters.

    <View title="cURL" icon="terminal">
      ```bash theme={"system"}
      curl --request POST \
        --url https://api.privy.io/v1/users/{user_id}/fiat/offramp \
        --header 'Authorization: Basic <encoded-value>' \
        --header 'Content-Type: application/json' \
        --header 'privy-app-id: <privy-app-id>' \
        --data '{
        "provider": "bridge-sandbox",
        "amount": "100.00",
        "source": {
          "currency": "usdc",
          "chain": "base",
          "from_address": "<source_wallet_address>"
        },
        "destination": {
          "currency": "usd",
          "payment_rail": "ach_push",
          "external_account_id": "a068d2dd-743a-4011-9b62-8ad33cc7a7be"
        }
      }'
      ```
    </View>

    The response returns the provider's onchain address to send the payout to.
  </Step>

  <Step title="Send the payout from the wallet">
    Complete the offramp by sending the stablecoins to the provider's address with the [transfer wallet action](/wallets/actions/transfer/overview) ([API reference](/api-reference/wallets/transfer/index)). Privy constructs, signs, and submits the transaction in a single API call. If your app has [gas sponsorship](/wallets/actions/overview#gas-management) configured, the transfer is sponsored automatically.

    <View title="cURL" icon="terminal">
      ```bash theme={"system"}
      curl --request POST \
        --url https://api.privy.io/v1/wallets/{wallet_id}/transfer \
        --header 'Authorization: Basic <encoded-value>' \
        --header 'Content-Type: application/json' \
        --header 'privy-app-id: <privy-app-id>' \
        --data '{
        "source": {
          "asset": "usdc",
          "amount": "100.00",
          "chain": "base"
        },
        "destination": {
          "address": "<provider_onchain_address>"
        }
      }'
      ```
    </View>
  </Step>
</Steps>
