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

# Create a deposit account

A deposit account gives a wallet a dedicated set of bank details. Creating one requires a verified entity on the wallet — see [setup](/wallets/funding/fiat-deposits/setup).

<View title="REST API" icon="terminal">
  To create a fiat deposit account for a wallet, make a `POST` request to:

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

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

  <ParamField body="provider" type="'bridge'" required>
    Provider to orchestrate the deposit account with.
  </ParamField>

  <ParamField body="environment" type="'production' | 'sandbox'">
    Provider environment to use. Defaults to `production`.
  </ParamField>

  <ParamField body="source" type="object" required>
    The fiat the account receives.

    <Expandable title="properties" defaultOpen>
      <ParamField body="source.currency" type="string" required>
        Fiat currency to receive deposits in, such as `usd` or `eur`. Privy returns the payment rails
        available for that currency in the response.
      </ParamField>
    </Expandable>
  </ParamField>

  <ParamField body="destination" type="object" required>
    The crypto the deposit is converted into and delivered as.

    <Expandable title="properties" defaultOpen>
      <ParamField body="destination.asset" type="string" required>
        Asset to deliver to the wallet, such as `usdc`.
      </ParamField>

      <ParamField body="destination.chain" type="string" required>
        Chain to deliver the asset on, such as `tempo`, `base`, or `solana`. The chain must match the
        wallet's `chain_type` — an `ethereum` wallet cannot receive deposits on Solana.
      </ParamField>
    </Expandable>
  </ParamField>

  <Info>
    Deposit accounts are persistent, billed resources at the provider. Pass an `Idempotency-Key`
    header to guarantee a retried request returns the same account instead of provisioning a second
    one.
  </Info>

  Below is a sample cURL command for this request:

  ```bash theme={"system"}
  curl --request POST https://api.privy.io/v1/wallets/{wallet_id}/deposit_accounts/fiat \
    -u "<your-privy-app-id>:<your-privy-app-secret>" \
    -H "privy-app-id: <your-privy-app-id>" \
    -H 'Content-Type: application/json' \
    -H 'Idempotency-Key: <your-idempotency-key>' \
    -d '{
      "provider": "bridge",
      "environment": "sandbox",
      "source": {
        "currency": "usd"
      },
      "destination": {
        "asset": "usdc",
        "chain": "tempo"
      }
    }'
  ```

  A successful response includes the following fields:

  <ResponseField name="fiat_deposit_account" type="object">
    The deposit account.

    <Expandable title="properties" defaultOpen>
      <ResponseField name="id" type="string">
        Unique ID of the deposit account. Referenced by deposit webhooks.
      </ResponseField>

      <ResponseField name="wallet_id" type="string">
        ID of the wallet deposits are delivered to.
      </ResponseField>

      <ResponseField name="provider" type="'bridge'">
        Provider orchestrating the account.
      </ResponseField>

      <ResponseField name="environment" type="'production' | 'sandbox'">
        Provider environment the account belongs to.
      </ResponseField>

      <ResponseField name="status" type="'activated' | 'deactivated'">
        Whether the account can currently receive deposits.
      </ResponseField>

      <ResponseField name="source" type="object">
        The fiat `currency` the account receives, and the `payment_rails` available to fund it.
      </ResponseField>

      <ResponseField name="destination" type="object">
        The `asset` and `chain` deposits are delivered as.
      </ResponseField>

      <ResponseField name="deposit_instructions" type="object | null">
        Bank details the user sends funds to. Fields vary by currency and rail: US accounts return
        `bank_routing_number` and `bank_account_number`, SEPA returns `iban` and `bic`. `null` while
        the account is still being provisioned.
      </ResponseField>

      <ResponseField name="created_at" type="string">
        When the account was created, as an ISO 8601 timestamp.
      </ResponseField>
    </Expandable>
  </ResponseField>

  ```json theme={"system"}
  {
    "fiat_deposit_account": {
      "id": "da_xxxxx",
      "wallet_id": "dk3kud7kfo2jcnc5anoovdim",
      "provider": "bridge",
      "environment": "sandbox",
      "status": "activated",
      "source": {
        "currency": "usd",
        "payment_rails": ["ach_push", "wire"]
      },
      "destination": {
        "asset": "usdc",
        "chain": "tempo"
      },
      "deposit_instructions": {
        "bank_name": "Lead Bank",
        "bank_address": "1801 Main St., Kansas City, MO 64108",
        "bank_routing_number": "101019644",
        "bank_account_number": "1234567890",
        "bank_beneficiary_name": "Acme, Inc.",
        "payment_rails": ["ach_push", "wire"]
      },
      "created_at": "2026-08-03T12:00:00Z"
    }
  }
  ```
</View>

Display `deposit_instructions` to the user so they can send a transfer from their bank. No memo or reference code is required — the account is dedicated to this wallet.

Display `deposit_instructions` to the user so they can send a transfer from their bank. No memo or reference code is required — the account is dedicated to this wallet.

## Next steps

<CardGroup cols={2}>
  <Card title="Get deposit accounts" icon="list" href="/wallets/funding/fiat-deposits/get-deposit-accounts">
    Read a wallet's deposit accounts and their bank details
  </Card>

  <Card title="Deposit lifecycle" icon="webhook" href="/wallets/funding/fiat-deposits/deposit-lifecycle">
    Follow a deposit from bank transfer to on-chain settlement
  </Card>
</CardGroup>
