Paxos Crypto Withdrawals API

The Crypto Withdrawals API from Paxos — 3 operation(s) for crypto withdrawals.

OpenAPI Specification

paxos-crypto-withdrawals-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Paxos Account Members Crypto Withdrawals API
  version: '2.0'
  description: '<p>Welcome to Paxos APIs. At Paxos, our mission is to enable the movement of any asset, any time, in a trustworthy way. These APIs serve that mission by making it easier than ever for you to directly integrate our product capabilities into your application, leveraging the speed, stability, and security of the Paxos platform.</p> <p>The documentation that follows gives you access to our Crypto Brokerage, Trading, and Exchange products. It includes APIs for market data, orders, and the held rate quote flow.</p> <p>To test in our sandbox environment, <a href="https://account.sandbox.paxos.com" target="_blank">sign up</a> for an account. For more information about Paxos and our APIs, visit <a href="https://www.paxos.com/" target="_blank">Paxos.com</a>.</p>

    '
  x-logo:
    url: /docs/paxos.svg
    backgroundColor: '#FFFFFF'
    altText: Paxos logo
servers:
- url: https://api.paxos.com/v2
  description: Production
- url: https://api.sandbox.paxos.com/v2
  description: Sandbox
tags:
- name: Crypto Withdrawals
paths:
  /transfer/crypto-destination-address:
    put:
      summary: Put Crypto Destination Addresses
      description: Updates a specified crypto destination address. If the address does not exist, it will be created
      operationId: PutCryptoDestinationAddress
      responses:
        '200':
          description: A successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PutCryptoDestinationAddressResponse'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PutCryptoDestinationAddressRequest'
        required: true
      tags:
      - Crypto Withdrawals
      security:
      - OAuth2:
        - transfer:write_crypto_destination_address
  /transfer/crypto-destination-addresses:
    get:
      summary: List Crypto Destination Addresses
      description: List all crypto destination addresses, optionally filtering and paging the results
      operationId: ListCryptoDestinationAddresses
      responses:
        '200':
          description: A successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListCryptoDestinationAddressesResponse'
      parameters:
      - name: ids
        description: Optionally filter by the UUIDs of the crypto destination addresses. Limit 100.
        in: query
        required: false
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: identity_ids
        description: Optionally filter by the Identities the destination addresses are scoped to. Limit 100.
        in: query
        required: false
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: crypto_networks
        description: Optionally filter by the `crypto_network` of the destination addresses. Limit 100.
        in: query
        required: false
        explode: true
        schema:
          type: array
          items:
            type: string
            enum:
            - BITCOIN
            - ETHEREUM
            - BITCOIN_CASH
            - LITECOIN
            - SOLANA
            - POLYGON_POS
            - BASE
            - ARBITRUM_ONE
            - STELLAR
            - INK
            - XLAYER
            - AVALANCHE
            - DOGECOIN
            - SUI
            - ROBINHOOD
            - BNB
      - name: addresses
        description: Optionally filter by specific addresses. Limit 100.
        in: query
        required: false
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: nicknames
        description: Optionally filter by specific nicknames. Limit 100.
        in: query
        required: false
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: bookmarked_status
        description: Optionally filter by bookmarked status. If omitted, addresses regardless of bookmarked status will be returned.
        in: query
        required: false
        schema:
          type: boolean
      - name: created_at.lt
        description: Include timestamps strictly less than lt. RFC3339 format, like `2006-01-02T15:04:05Z`.
        in: query
        required: false
        schema:
          type: string
          format: date-time
      - name: created_at.lte
        description: Include timestamps less than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.
        in: query
        required: false
        schema:
          type: string
          format: date-time
      - name: created_at.eq
        description: Include timestamps exactly equal to eq. RFC3339 format, like `2006-01-02T15:04:05Z`.
        in: query
        required: false
        schema:
          type: string
          format: date-time
      - name: created_at.gte
        description: Include timestamps greater than or equal to gte. RFC3339 format, like `2006-01-02T15:04:05Z`.
        in: query
        required: false
        schema:
          type: string
          format: date-time
      - name: created_at.gt
        description: Include timestamps strictly greater than gt. RFC3339 format, like `2006-01-02T15:04:05Z`.
        in: query
        required: false
        schema:
          type: string
          format: date-time
      - name: limit
        description: Number of results to return. Defaults to 100 if no limit is provided. Maximum 1000.
        in: query
        required: false
        schema:
          type: integer
          format: int32
      - name: order
        description: Return items in ascending (ASC) or descending (DESC) order. Defaults to DESC.
        in: query
        required: false
        schema:
          type: string
          enum:
          - DESC
          - ASC
      - name: order_by
        description: The specific method by which the returned results will be ordered.
        in: query
        required: false
        schema:
          type: string
          enum:
          - CREATED_AT
      - name: page_cursor
        description: Optional cursor for getting the next page of results.
        in: query
        required: false
        schema:
          type: string
      tags:
      - Crypto Withdrawals
      security:
      - OAuth2:
        - transfer:read_crypto_destination_address
  /transfer/crypto-withdrawals:
    post:
      summary: Create Crypto Withdrawal
      description: 'Withdraw a cryptocurrency asset to a specified destination address.


        **Important for Stellar Network (PYUSD):**


        When withdrawing PYUSD on the Stellar network, the destination address must have an established trustline with the PYUSD issuer:


        - **PYUSD Issuer**: `GDQE7IXJ4HUHV6RQHIUPRJSEZE4DRS5WY577O2FY6YQ5LVWZ7JZTU2V5` (mainnet)

        - **Asset Code**: `PYUSD`


        **How to Establish a Trustline:**


        The recipient must use a Stellar wallet or the Stellar SDK to:

        1. Ensure their account has minimum XLM balance (at least 1 XLM recommended)

        2. Create a trustline to the PYUSD issuer for the PYUSD asset

        3. Confirm the trustline is active before requesting withdrawal


        **Verifying Trustline Status:**


        You can verify if an address has the required trustline by:

        - Using Stellar blockchain explorers (e.g., stellar.expert)

        - Querying the Stellar Horizon API

        - Using the Stellar SDK to check account balances

        '
      operationId: CreateCryptoWithdrawal
      responses:
        '200':
          description: A successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transfer'
              example:
                id: 373b7966-4290-4be3-a604-51929173437b
                customer_id: 72b2b4e6-d395-43d2-9b09-690fa6c1a664
                profile_id: 1db50793-0a22-4d2a-8696-66fc4fd8e360
                ref_id: ABCZYX123
                amount: '0.001'
                total: '0.00100223'
                fee: '0.00000223'
                asset: BTC
                balance_asset: BTC
                direction: DEBIT
                type: CRYPTO_WITHDRAWAL
                status: PENDING
                created_at: '2022-06-14T15:19:20.034294Z'
                updated_at: '2022-06-14T15:19:20.034294Z'
                destination_address: 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2
                crypto_network: BITCOIN
                auto_conversion: {}
        '403':
          description: Could not create transfer
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                Insufficient Funds:
                  $ref: '#/components/examples/Problem_insufficient_funds'
                Expired:
                  $ref: '#/components/examples/Problem_fee_expired_crypto_withdrawal'
        '404':
          description: Could not find fee quote
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                Not Found:
                  $ref: '#/components/examples/Problem_fee_not_found_crypto_withdrawal'
        '409':
          description: Transfer already exists
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                Already Exists:
                  $ref: '#/components/examples/Problem_already_exists_crypto_withdrawal'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCryptoWithdrawalRequest'
        required: true
      tags:
      - Crypto Withdrawals
      security:
      - OAuth2:
        - transfer:write_crypto_withdrawal
components:
  schemas:
    GeographicAddress:
      type: object
      properties:
        country:
          type: string
          description: ISO 3166-1 alpha-3 country code (e.g. "USA", "SGP").
          pattern: ^[A-Z]{3}$
        address1:
          type: string
          description: First line of the street address (e.g. "123 Main St").
          maxLength: 35
          pattern: ^[0-9A-Za-z /?:().,&'+-]+$
        address2:
          type: string
          description: Optional second line of the street address (e.g. unit, suite, or floor).
          maxLength: 35
          pattern: ^[0-9A-Za-z /?:().,&'+-]+$
        city:
          type: string
          description: City or town.
          maxLength: 35
          pattern: ^[0-9A-Za-z /?:().,&'+-]+$
        province:
          type: string
          description: State, province, or region.
          maxLength: 35
          pattern: ^[0-9A-Za-z /?:().,&'+-]+$
        zip_code:
          type: string
          description: Postal or ZIP code.
          maxLength: 35
          pattern: ^[0-9A-Za-z /?:().,&'+-]+$
      description: A geographic (postal) address.
      required:
      - country
    PutCryptoDestinationAddressResponse:
      type: object
      properties:
        address:
          $ref: '#/components/schemas/CryptoDestinationAddress'
    CryptoDestinationAddress:
      type: object
      example:
        id: 31f20a34-c1eb-4c86-adad-1e46bc271e1a
        crypto_network: ETHEREUM
        address: '0xe4B0aCA9FB669817775274775b20e52118595515'
        nickname: my_new_address
        status: APPROVED
        created_at: '2024-01-01T00:00:00Z'
        bookmarked: true
      properties:
        id:
          type: string
        identity_id:
          type: string
          description: The Identity that owns this destination address. Unset for first-party (non-3P) addresses.
        crypto_network:
          $ref: '#/components/schemas/CryptoNetwork'
        address:
          type: string
        nickname:
          type: string
        status:
          $ref: '#/components/schemas/CryptoDestinationAddressStatus'
        created_at:
          type: string
          format: date-time
        bookmarked:
          type: boolean
        policy_execution_id:
          type: string
        travelrule_metadata:
          $ref: '#/components/schemas/CryptoDestinationAddressTravelruleMetadata'
      required:
      - id
      - crypto_network
      - address
    CryptoWithdrawalBeneficiaryInstitution:
      type: object
      properties:
        name:
          type: string
      description: Institution beneficiary details. Provided when the beneficiary is an organization.
      required:
      - name
    CryptoWithdrawalBeneficiaryPerson:
      type: object
      properties:
        first_name:
          type: string
        last_name:
          type: string
      description: Person beneficiary details. Provided when the beneficiary is an individual.
      required:
      - first_name
      - last_name
    CryptoNetwork:
      type: string
      enum:
      - BITCOIN
      - ETHEREUM
      - BITCOIN_CASH
      - LITECOIN
      - SOLANA
      - POLYGON_POS
      - BASE
      - ARBITRUM_ONE
      - STELLAR
      - INK
      - XLAYER
      - AVALANCHE
      - DOGECOIN
      - SUI
      - ROBINHOOD
      - BNB
      description: A CryptoNetwork is a blockchain transmitting cryptocurrencies.
    PutCryptoDestinationAddressRequestTravelruleMetadata:
      type: object
      properties:
        beneficiary:
          $ref: '#/components/schemas/Beneficiary'
        vasp:
          $ref: '#/components/schemas/PutCryptoDestinationAddressRequestVasp'
        custodian_type:
          $ref: '#/components/schemas/CustodianType'
        transfer_purpose:
          type: string
          description: Purpose of the transfer.
      description: Travel Rule metadata for the destination address. See the [Travel Rule guide](/guides/travel-rule).
    PutCryptoDestinationAddressRequestVasp:
      type: object
      properties:
        id:
          type: string
          description: 'Specify the id of a known VASP (from ListVasps). Specify exactly one of

            `id` (known VASP) or `custom_vasp_name` + `custom_vasp_website` (other VASP).'
        custom_vasp_name:
          type: string
          description: 'Specify the name of a VASP that is not in the known list. Specify exactly

            one of `id` (known VASP) or `custom_vasp_name` + `custom_vasp_website` (other VASP).'
        custom_vasp_website:
          type: string
          description: 'Website URL of the VASP. Required when `custom_vasp_name` is specified

            (VASP not in the Paxos directory).'
      description: 'The receiving VASP, when `custodian_type` is `VASP`. Provide `id` (from ListVasps) for a known VASP,

        or `custom_vasp_name` + `custom_vasp_website` for a VASP not in the Paxos directory.'
    AutoConversion:
      type: object
      properties:
        from_transfer_id:
          type: string
          title: Transfer Id of the deposit triggering this transfer (only on withdrawal transfers)
        to_transfer_id:
          type: string
          title: Transfer Id of the withdrawal triggered by this deposit(only on deposit transfers)
    TransferDirection:
      type: string
      enum:
      - CREDIT
      - DEBIT
      description: Direction of the transfer.
    ListCryptoDestinationAddressesResponse:
      type: object
      properties:
        addresses:
          type: array
          items:
            $ref: '#/components/schemas/CryptoDestinationAddress'
        next_page_cursor:
          type: string
    InvalidDestinationAddress:
      type: object
      properties:
        message:
          type: string
          title: Human-readable explanation of the error
        destination_address:
          type: string
          title: The destination address that caused the cancellation
      description: 'InvalidDestinationAddress represents a transfer cancelled because the destination address

        cannot receive the requested asset (e.g. it is a token account for a different mint).'
    PutCryptoDestinationAddressRequest:
      type: object
      properties:
        id:
          type: string
          description: 'Optional field to specify the crypto destination address to update by its unique id.

            Specify either `id` or the `(crypto_network, address, identity_id)` tuple, not both.'
        identity_id:
          type: string
          description: 'The Identity that owns this destination address. Required for 3P integrations.

            When looking up an existing address to update, `(crypto_network, address, identity_id)`

            uniquely identifies it; omit for first-party addresses with no identity scope.'
        crypto_network:
          $ref: '#/components/schemas/CryptoNetwork'
        address:
          type: string
          description: 'Specify the address of the crypto destination address to create/update.

            Specify either `id` or the `(crypto_network, address, identity_id)` tuple, not both.'
        nickname:
          type: string
          description: Optional field to update the nickname of the crypto destination address. Defaults to an auto-generated nickname if not specified on creation.
        bookmarked_status:
          type: boolean
          description: Optional field to update the bookmarked status of the crypto destination address. Defaults to false if not specified on creation.
        travelrule_metadata:
          $ref: '#/components/schemas/PutCryptoDestinationAddressRequestTravelruleMetadata'
    MaxRentExceeded:
      type: object
      properties:
        message:
          type: string
          title: Human-readable explanation of the error
        destination_address:
          type: string
          title: The destination account address that triggered the check
      description: 'MaxRentExceeded represents a failed transfer that was flagged for system abuse.

        When a withdrawal''s rent calculation for the destination account exceeds the

        maximum allowed rent threshold, it may indicate malicious behavior. This status

        detail is set when such transfers are automatically cancelled.'
    BeneficiaryInstitution:
      type: object
      properties:
        name:
          type: string
        physical_address:
          $ref: '#/components/schemas/GeographicAddress'
      description: Institution details if beneficiary is an institution.
      required:
      - name
    Transfer:
      type: object
      example:
        id: f190b163-208f-4d73-8deb-4fb8b24add00
        ref_id: idempotence_id
        customer_id: 9b8c9cba-801e-4418-adc0-ede709df6339
        profile_id: b7b77d82-e6a7-4ae9-9904-36231aedf985
        amount: '0.10000000'
        total: '0.10000023'
        fee: '0.00000023'
        asset: BTC
        balance_asset: BTC
        direction: WITHDRAWAL
        type: CRYPTO_WITHDRAWAL
        status: COMPLETED
        created_at: '2020-01-17T18:36:08.737Z'
        updated_at: '2020-01-17T18:37:08.737Z'
        crypto_network: BITCOIN
        crypto_tx_hash: f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16
        crypto_tx_index: '0'
        destination_address: 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2
        notional_value: '1.02'
        metadata:
          my_id: 4024ee50-eefb-4f2e-85c7-e7899c0b7da5
      properties:
        id:
          type: string
          description: The Paxos transfer ID.
        customer_id:
          type: string
          description: The Paxos customer ID.
        profile_id:
          type: string
          description: The target Profile of the transfer. The profile asset balance is debited or credited by the transfer.
        identity_id:
          type: string
          description: The Paxos ID of the Identity associated with the transfer.
        ref_id:
          type: string
          description: The optional client-specified ID for replay protection and lookup.
        amount:
          type: string
          description: The amount sent in the transfer.
          pattern: ^[0-9]*\.?[0-9]+$
        total:
          type: string
          description: 'The balance change from this transfer: amount - fee for deposits, and amount + fee for withdrawals. Unsigned.'
          pattern: ^[0-9]*\.?[0-9]+$
        fee:
          type: string
          description: The fee paid for the transfer.
          pattern: ^[0-9]*\.?[0-9]+$
        asset:
          type: string
          description: The asset for this transfer. This profile's balance of this asset will be debited or credited.
        balance_asset:
          type: string
          description: The balance_asset represents what asset's balance was affected at Paxos with this transfer. It only differs from Asset when the transfer includes conversion.
        direction:
          $ref: '#/components/schemas/TransferDirection'
        type:
          $ref: '#/components/schemas/TransferType'
        status:
          $ref: '#/components/schemas/TransferStatus'
        secondary_status:
          $ref: '#/components/schemas/SecondaryStatus'
        status_details:
          $ref: '#/components/schemas/TransferStatusDetails'
        created_at:
          type: string
          format: date-time
          description: The time at which this transfer record was created.
        updated_at:
          type: string
          format: date-time
          description: The time at which this transfer record was most recently updated.
        metadata:
          type: object
          additionalProperties:
            type: string
          description: 'Optional client-specified stored metadata. For deposit event transfers

            this metadata is copied from the crypto deposit address or fiat deposit

            memo used for attribution.

            Up to 6 key/value pairs may be returned.

            Each key and value must be less than or equal to 100 characters.'
        destination_address:
          type: string
          description: The destination crypto address.
        crypto_network:
          $ref: '#/components/schemas/CryptoNetwork'
        crypto_tx_hash:
          type: string
          description: For crypto transactions, the on-chain transaction hash.
        crypto_tx_index:
          type: string
          description: For crypto transactions, the output index or output address.
        account_id:
          type: string
          description: The Paxos ID of the Account associated with the transfer.
        auto_conversion:
          $ref: '#/components/schemas/AutoConversion'
        group_id:
          type: string
          description: Unique identifier linking the debit and credit sides of an internal or Paxos transfer.
        fiat_account_id:
          type: string
          description: For fiat withdrawals, the Paxos ID of the owner's fiat account (UUID).
        notional_value:
          type: string
          format: decimal
          description: For crypto withdrawals and deposits, the USD value of the combined amount and fee at the time of the transfer.
        memo:
          type: string
          description: An optional memo to be included with the transfer as an identifier.
      required:
      - id
      - customer_id
      - profile_id
      - amount
      - total
      - fee
      - created_at
      - updated_at
      - asset
      - status
      - direction
      - type
    CryptoWithdrawalBeneficiary:
      type: object
      properties:
        person_details:
          $ref: '#/components/schemas/CryptoWithdrawalBeneficiaryPerson'
        institution_details:
          $ref: '#/components/schemas/CryptoWithdrawalBeneficiaryInstitution'
      description: 'Inline beneficiary (legacy). Being deprecated soon, for new integrations collect Travel Rule data

        on the destination address via PutCryptoDestinationAddress instead. See the [Travel Rule guide](/guides/travel-rule).'
    TransferStatusDetails:
      type: object
      properties:
        missing_trustline:
          $ref: '#/components/schemas/MissingTrustline'
        max_rent_exceeded:
          $ref: '#/components/schemas/MaxRentExceeded'
        pending_customer_approval:
          $ref: '#/components/schemas/PendingCustomerApproval'
        stale_fee_quote:
          $ref: '#/components/schemas/StaleFeeQuote'
        invalid_destination_address:
          $ref: '#/components/schemas/InvalidDestinationAddress'
      description: 'TransferStatusDetails provides additional information about why a transfer

        is in its current state. This field is only populated when a transfer

        encounters specific error conditions or requires additional context.'
    SecondaryStatusName:
      type: string
      enum:
      - TRAVEL_RULE_INFO_REQUESTED
      - TRAVEL_RULE_REJECTED
      - CUSTOMER_REJECTED
      - PENDING_CUSTOMER_APPROVAL
      description: "Identifier for secondary status.\n\n - TRAVEL_RULE_INFO_REQUESTED: Travel rule information is required to continue processing the transfer.\n - TRAVEL_RULE_REJECTED: Transfer has been terminally rejected due to failing travel rule checks.\n - CUSTOMER_REJECTED: Transfer was rejected by a customer.\n - PENDING_CUSTOMER_APPROVAL: Transfer is pending customer approval."
    CryptoDestinationAddressStatus:
      type: string
      enum:
      - PENDING
      - APPROVED
      - REJECTED
    BeneficiaryPerson:
      type: object
      properties:
        first_name:
          type: string
        last_name:
          type: string
        physical_address:
          $ref: '#/components/schemas/GeographicAddress'
      description: Person details if beneficiary is a person.
      required:
      - first_name
      - last_name
    CustodianType:
      type: string
      enum:
      - VASP
      - PRIVATE
    MissingTrustline:
      type: object
      properties:
        message:
          type: string
          title: Human-readable explanation of the error
        destination_address:
          type: string
          title: The destination account address that is missing the trustline
        asset:
          type: string
          title: The asset that requires a trustline
      description: 'MissingTrustline represents a failed transfer where the destination account

        lacks the required asset trustline.'
    CryptoDestinationAddressVasp:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        custom_vasp_name:
          type: string
          description: Customer-supplied VASP name, used when the "Other" VASP is selected.
        custom_vasp_website:
          type: string
          description: Customer-supplied VASP website, used when the "Other" VASP is selected.
      description: The receiving VASP for this destination address, when `custodian_type` is `VASP`.
    Problem:
      type: object
      properties:
        type:
          type: string
          format: uri
          description: 'An absolute URI that identifies the problem type.  When dereferenced,

            it SHOULD provide human-readable documentation for the problem type

            (e.g., using HTML).

            '
          default: about:blank
          example: https://api.paxos.com/v2/problems/insufficient_funds
        title:
          type: string
          description: 'A short, summary of the problem type. Written in english and readable

            for engineers (usually not suited for non technical stakeholders and

            not localized); example: Service Unavailable

            '
          example: Insufficient Funds
        status:
          type: integer
          format: int32
          description: 'The HTTP status code generated by the origin server for this occurrence

            of the problem.

            '
          minimum: 100
          maximum: 600
          exclusiveMaximum: true
          example: 403
        detail:
          type: string
          description: 'A human readable explanation specific to this occurrence of the

            problem.

            '
          example: Not enough funds in account.
        meta:
          type: object
          description: 'Additional structured metadata about the error.

            '
    StaleFeeQuote:
      type: object
      properties:
        message:
          type: string
          title: Human-readable explanation
      description: StaleFeeQuote represents a transfer cancelled because on-chain state changed after the fee was quoted.
    Beneficiary:
      type: object
      properties:
        person_details:
          $ref: '#/components/schemas/BeneficiaryPerson'
        institution_details:
          $ref: '#/components/schemas/BeneficiaryInstitution'
        self:
          type: boolean
          description: '`true` when the beneficiary is the end user themselves (their own wallet) in which case

            `person_details` and `institution_details` are omitted and resolved from the end user''s Identity.'
      description: 'Beneficiary of the transfer: the party receiving the funds, identified by `person_details` or

        `institution_details`, or by `self = true` when the destination is the end user''s own wallet.'
    TransferType:
      type: string
      enum:
      - INTERNAL_TRANSFER_DEBIT
      - INTERNAL_TRANSFER_CREDIT
      - CRYPTO_DEPOSIT
      - CRYPTO_WITHDRAWAL
      - WIRE_DEPOSIT
      - WIRE_WITHDRAWAL
      - SEN_DEPOSIT
      - SEN_WITHDRAWAL
      - BANK_DEPOSIT
      - BANK_WITHDRAWAL
      - PAXOS_TRANSFER_DEBIT
      - PAXOS_TRANSFER_CREDIT
      - SIGNET_DEPOSIT
      - SIGNET_WITHDRAWAL
      - CBIT_WITHDRAWAL
      - CBIT_DEPOSIT
      - CUBIX_DEPOSIT
      - CUBIX_WITHDRAWAL
      - RTP_DEPOSIT
      description: Type of transfer.
    PendingCustomerApproval:
      type: object
      properties:
        message:
          type: string
          title: Human-readable explanation
      description: PendingCustomerApproval represents that this resource is awaiting customer approval.
    TransferStatus:
      type: string
      enum:
      - PENDING
      - COMPLETED
      - FAILED
    CryptoDestinationAddressTravelruleMetadata:
      type: object
      properties:
        beneficiary:
          $ref: '#/components/schemas/Beneficiary'
        vasp:
          $ref: '#/components/schemas/CryptoDestinationAddressVasp'
        custodian_type:
          $ref: '#/components/schemas/CustodianType'
        transfer_purpose:
          type: string
          description: Purpose of the transfer.
      description: Travel Rule metadata for the destination address. See the [Travel Rule guide](/guides/travel-rule).
    CreateCryptoWithdrawalRequest:
      type: object
      example:
        ref_id: idempotence_id
        profile_id: b7b77d82-e6a7-4ae9-9904-36231aedf985
        asset: BTC
        amount: '0.05'
        destination_address: 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2
        metadata:
          my_id: 4024ee50-eefb-4f2e-85c7-e7899c0b7da5
        crypto_network: BITCOIN
      properties:
        ref_id:
          type: string
          description: Client-specified ID for replay protection and lookup.
        profile_id:
          type: string
          description: The profile from which to withdraw.
        identity_id:
          type: string
          description: The Identity of the user making the withdrawal.
        destination_address:
          type: string
          description: The destination address.
        asset:
          type: string
          description: The asset to withdraw, e.g. "BTC" , "ETH". Always specify the `crypto_network` for all withdrawals.
        balance_asset:
          type: string
          description: The asset's balance to debit for withdrawals of Paxos-minted USD stablecoin.
        metadata:
          type: object
          additionalProperties:
            type: string
          description: 'Optional client-specified metadata.

            Up to 6 key/value pairs may be provided.

            Each key and value must be less than or equal to 100 characters.'
        account_id:
          type: string
          description: The Account associated to the identity of the user making the withdrawal.
        fee_id:
          type: string
          description: Optional id of the guaranteed fee.
        crypto_network:
          $ref: '#/components/schemas/CryptoNetwork'
        amount:
          type: string
          description: 'The amount to w

# --- truncated at 32 KB (39 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/paxos/refs/heads/main/openapi/paxos-crypto-withdrawals-api-openapi.yml