---
title: "Create a payout"
method: POST
path: "/v1/wallets/{wallet_id}/payout/fiat"
tags: ["Fiat"]
---

# Create a payout

`POST /v1/wallets/{wallet_id}/payout/fiat`

## Request

- Base URL: `https://api.privy.io`
- URL: `https://api.privy.io/v1/wallets/{wallet_id}/payout/fiat`
- Auth: HTTP basic

Initiates a payout (crypto to fiat offramp) from a wallet to a previously registered external fiat account. Returns a pending wallet action; the crypto transfer and fiat settlement are processed asynchronously.

## Path parameters

- `wallet_id` string, required: The ID of the wallet.

## Headers

- `privy-app-id` string, required: ID of your Privy app.
- `privy-authorization-signature` string: Request authorization signature. If multiple signatures are required, they should be comma separated.
- `privy-request-expiry` string: Request expiry. Value is a Unix timestamp in milliseconds representing the deadline by which the request must be processed.
- `privy-idempotency-key` string: Idempotency keys ensure API requests are executed only once within a 24-hour window.

## Request body

- CreatePayoutRequestBody: Request body for initiating a payout (crypto to fiat offramp) from a wallet.
  - `source` PayoutSource, required: The source crypto asset, chain, and amount for a payout.
    - `asset` string, required: Source crypto asset (e.g. "usdc").
    - `chain` string, required: Source chain (e.g. "base").
    - `amount` string, required: Amount to offramp, in the asset's standard units (e.g. "100.00").
  - `destination` PayoutDestination, required: The destination bank account for a payout.
    - `fiat_account_id` string, required: The ID of a previously registered external fiat account to pay out to.
    - `payment_rail` 'ach' | 'ach_same_day' | 'wire' | 'fednow' | 'sepa' | 'faster_payments' | 'pix': The fiat payment rail to settle over; must be one the account supports. Defaults to the account type’s standard rail, `ach` for US accounts.
  - `developer_fee_percent` string: A fee your app keeps on the payout, as a percentage of the payout amount. Omit for no fee.
  - `travel_rule` object: Who receives this payout, for EU travel rule compliance. Omit to use the customer.
    - `destination` union, required
      - object: The holder of the bank account receiving the payout: the travel rule beneficiary.
        - `type` 'self', required
      - object: The holder of the bank account receiving the payout: the travel rule beneficiary.
        - `type` 'individual', required
        - `name` string, required: Full legal name of the person.
        - `address` VerificationAddress: A postal address used in KYC and KYB data submission.
          - `street_line_1` string, required: Street address line 1.
          - `street_line_2` string: Street address line 2.
          - `city` string, required: City.
          - `subdivision` string: ISO 3166-2 state or province code. Required for US addresses.
          - `postal_code` string: Postal code. Required for countries that use them.
          - `country` string, required: ISO 3166-1 alpha-3 country code.
      - object: The holder of the bank account receiving the payout: the travel rule beneficiary.
        - `type` 'business', required
        - `name` string, required: Legal name of the business.
        - `address` VerificationAddress: A postal address used in KYC and KYB data submission.
          - `street_line_1` string, required: Street address line 1.
          - `street_line_2` string: Street address line 2.
          - `city` string, required: City.
          - `subdivision` string: ISO 3166-2 state or province code. Required for US addresses.
          - `postal_code` string: Postal code. Required for countries that use them.
          - `country` string, required: ISO 3166-1 alpha-3 country code.
        - `legal_entity_identifier` string, required: An official business identifier, such as an LEI, VAT number or company registration number.

## Response `200`

The created payout wallet action.

- PayoutResponse: A payout wallet action. Crypto is sent on-chain to a liquidation address that offramps to the destination bank account.
  - `id` string, required: The ID of the wallet action.
  - `status` 'pending' | 'succeeded' | 'rejected' | 'failed', required: The current status of the wallet action.
  - `wallet_id` string, required: The ID of the wallet involved in the action.
  - `created_at` string, date-time, required: ISO 8601 timestamp of when the wallet action was created.
  - `reference_id` string, nullable: Developer-provided reference ID, if one was included in the request.
  - `failure_reason` object: Top-level failure context for the wallet action. Present on rejected or failed actions when available.
    - `message` string, required: Human-readable failure message.
    - `details` unknown
  - `steps` WalletActionStep[]: The steps of the wallet action. Only returned if `?include=steps` is provided.
    - union: A step within a wallet action, representing a single onchain action.
      - object: A wallet action step consisting of an EVM transaction.
        - `type` 'evm_transaction', required
        - `failure_reason` FailureReason: A description of why a wallet action (or a step within a wallet action) failed.
          - `message` string, required: Human-readable failure message.
          - `details` unknown
        - `finalized` boolean: Whether this step has reached on-chain finality. Absent until finality is confirmed.
        - `gas_credits_charged` CurrencyAmount: A monetary value with its currency denomination.
          - `value` string, required: The monetary value as a string.
          - `currency` 'usd', required: Currency code
        - `gas_credits_charged_usd` string, nullable: Deprecated, use `gas_credits_charged` instead; gas credits charged in USD for this step, if sponsored, as a decimal string.
        - `status` 'preparing' | 'queued' | 'pending' | 'retrying' | 'confirmed' | 'rejected' | 'reverted' | 'replaced' | 'abandoned', required: EVM transaction status.
        - `caip2` string, required: CAIP-2 chain identifier of the transaction, containing the chain ID.
        - `transaction_hash` string, nullable, required: The transaction hash for this step. May change while the step status is non-terminal.
      - object: A wallet action step consisting of an EVM user operation.
        - `type` 'evm_user_operation', required
        - `failure_reason` FailureReason: A description of why a wallet action (or a step within a wallet action) failed.
          - `message` string, required: Human-readable failure message.
          - `details` unknown
        - `finalized` boolean: Whether this step has reached on-chain finality. Absent until finality is confirmed.
        - `gas_credits_charged` CurrencyAmount: A monetary value with its currency denomination.
          - `value` string, required: The monetary value as a string.
          - `currency` 'usd', required: Currency code
        - `gas_credits_charged_usd` string, nullable: Deprecated, use `gas_credits_charged` instead; gas credits charged in USD for this step, if sponsored, as a decimal string.
        - `status` 'preparing' | 'queued' | 'pending' | 'retrying' | 'confirmed' | 'rejected' | 'reverted' | 'replaced' | 'abandoned', required: User operation status.
        - `user_operation_hash` string, nullable, required: The user operation hash for this step. May change while the step status is non-terminal.
        - `bundle_transaction_hash` string, nullable, required: Transaction hash of the bundle in which this user operation was included. Null until included by a bundler.
        - `caip2` string, required: CAIP-2 network identifier, containing the chain ID of the user operation.
        - `entrypoint_version` '0.6' | '0.7' | '0.8' | '0.9', required: The entrypoint version of the user operation.
      - object: A wallet action step consisting of an SVM (Solana) transaction.
        - `type` 'svm_transaction', required
        - `failure_reason` FailureReason: A description of why a wallet action (or a step within a wallet action) failed.
          - `message` string, required: Human-readable failure message.
          - `details` unknown
        - `finalized` boolean: Whether this step has reached on-chain finality. Absent until finality is confirmed.
        - `gas_credits_charged` CurrencyAmount: A monetary value with its currency denomination.
          - `value` string, required: The monetary value as a string.
          - `currency` 'usd', required: Currency code
        - `gas_credits_charged_usd` string, nullable: Deprecated, use `gas_credits_charged` instead; gas credits charged in USD for this step, if sponsored, as a decimal string.
        - `status` 'preparing' | 'queued' | 'pending' | 'confirmed' | 'rejected' | 'reverted' | 'failed', required: SVM transaction status.
        - `caip2` string, required: CAIP-2 chain identifier for the Solana network.
        - `transaction_signature` string, nullable, required: The Solana transaction signature (base58-encoded). Null until broadcast.
      - object: A wallet action step consisting of a TVM (Tron) transaction.
        - `type` 'tvm_transaction', required
        - `failure_reason` FailureReason: A description of why a wallet action (or a step within a wallet action) failed.
          - `message` string, required: Human-readable failure message.
          - `details` unknown
        - `gas_credits_charged` CurrencyAmount: A monetary value with its currency denomination.
          - `value` string, required: The monetary value as a string.
          - `currency` 'usd', required: Currency code
        - `gas_credits_charged_usd` string, nullable: Deprecated, use `gas_credits_charged` instead; gas credits charged in USD for this step, if sponsored, as a decimal string.
        - `status` 'preparing' | 'queued' | 'pending' | 'confirmed' | 'rejected' | 'reverted' | 'failed', required: TVM transaction status.
        - `caip2` string, required: CAIP-2 chain identifier for the Tron network.
        - `transaction_id` string, nullable, required: The Tron transaction ID. Null until broadcast.
      - object: A wallet action step representing a cross-chain/cross-asset fill by an external provider.
        - `type` 'external_transaction', required
        - `failure_reason` FailureReason: A description of why a wallet action (or a step within a wallet action) failed.
          - `message` string, required: Human-readable failure message.
          - `details` unknown
        - `status` 'preparing' | 'queued' | 'pending' | 'confirmed' | 'rejected' | 'failed', required: External transaction step status.
      - object: A wallet action step representing a transaction executed by a custodian (e.g. Bridge).
        - `type` 'custodian_transaction', required
        - `failure_reason` FailureReason: A description of why a wallet action (or a step within a wallet action) failed.
          - `message` string, required: Human-readable failure message.
          - `details` unknown
        - `status` 'preparing' | 'queued' | 'custodian_reviewing' | 'pending' | 'confirmed' | 'rejected' | 'failed', required: Custodian transaction step status.
        - `custodian` string, required: Identifier of the custodian executing this transaction (e.g. "bridge").
        - `transaction_hash` string, nullable, required: Identifier of the transaction the custodian last reported on the destination chain. Set on a settled transfer, and also on a failed one when the custodian had already broadcast a payout that was later returned. Null until the custodian reports one.
      - object: A wallet action step representing a Tempo Zone settlement on its parent chain.
        - `type` 'tempo_zone_settlement', required
        - `failure_reason` FailureReason: A description of why a wallet action (or a step within a wallet action) failed.
          - `message` string, required: Human-readable failure message.
          - `details` unknown
        - `caip2` string, nullable, required: CAIP-2 identifier of the Tempo parent chain, or null when unavailable.
        - `transaction_hash` string, required: A hex-encoded string prefixed with '0x', capped at 300002 characters (150,000 bytes).
        - `status` 'preparing' | 'queued' | 'pending' | 'confirmed' | 'rejected' | 'failed', required: Tempo Zone settlement step status.
  - `type` 'payout', required
  - `provider` 'bridge', required: Supported fiat orchestration providers.
  - `environment` 'sandbox' | 'production', required: The Privy API environment.
  - `source` PayoutSource, required: The source crypto asset, chain, and amount for a payout.
    - `asset` string, required: Source crypto asset (e.g. "usdc").
    - `chain` string, required: Source chain (e.g. "base").
    - `amount` string, required: Amount to offramp, in the asset's standard units (e.g. "100.00").
  - `destination` PayoutDestination, required: The destination bank account for a payout.
    - `fiat_account_id` string, required: The ID of a previously registered external fiat account to pay out to.
    - `payment_rail` 'ach' | 'ach_same_day' | 'wire' | 'fednow' | 'sepa' | 'faster_payments' | 'pix': The fiat payment rail to settle over; must be one the account supports. Defaults to the account type’s standard rail, `ach` for US accounts.
  - `developer_fee_percent` string, required: The fee your app keeps on the payout, as a percentage. "0" when none was set.

## Changes

- **2026-10-22** `f09c8fa8dbc4`: 1 info
  - added the new optional request property `travel_rule`
- **2026-10-20** `527110c2c2f4`: 4 breaking, 8 info
  - the response property `steps/items/oneOf[subschema #1: EVMTransactionWalletActionStep]/gas_credits_charged_usd` became nullable for the status `200`
  - the response property `steps/items/oneOf[subschema #2: EVMUserOperationWalletActionStep]/gas_credits_charged_usd` became nullable for the status `200`
  - the response property `steps/items/oneOf[subschema #3: SVMTransactionWalletActionStep]/gas_credits_charged_usd` became nullable for the status `200`
  - the response property `steps/items/oneOf[subschema #4: TVMTransactionWalletActionStep]/gas_credits_charged_usd` became nullable for the status `200`
  - …8 more
- **2026-10-19** `a77e516e7c57`: 1 info
  - added the optional property `steps/items/oneOf[subschema #4: TVMTransactionWalletActionStep]/gas_credits_charged_usd` to the response with the `200` status
- **2026-10-16** `4facbfa7f9d4`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/privy-io/apis/privy-api/changes/v1/wallets/:wallet_id/payout/fiat/post.md)

---

[API](https://skmtc.dev/privy-io/apis/privy-api.md) - [All operations](https://skmtc.dev/privy-io/apis/privy-api/llms.txt) - [OpenAPI document](https://skmtc.dev/privy-io/apis/privy-api/revisions/3a2288470053?raw)
