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

# Create a one-off transfer

> Create a one-off transfer. Supports both offramp (destination is a
bank account, fiat_us or fiat_iban) and swap (destination is a crypto
address) flows; the destination type selects which.




## OpenAPI

````yaml /openapi.yaml post /transactions
openapi: 3.0.3
info:
  title: Dakota Platform API
  version: 1.0.0
  description: >-
    Combined API specification for Dakota Platform services:

    - Issuance API: Asset minting and burning operations

    - Onboarding API: Know Your Business/Customer verification

    - On/Off Ramp API: Managing on-ramp and off-ramp accounts

    - Recipients API: Managing destinations for KYB'd entities

    - Transactions API: Viewing transaction history across platform operations


    ## Authentication and API Headers


    All API endpoints require the following headers:


    - `x-idempotency-key`: Required for all POST endpoints to ensure request
    idempotency

    - `x-api-key`: Required for authentication across all endpoints


    Note: On /applications endpoints you need a token for authentication instead
    of a x-api-key

    - `x-application-token`: Required for authentication on public /applications
    endpoints (alternative to `x-api-key` where documented)



    ## Rate Limits


    Requests are rate limited per API key. Every response includes the following
    headers:


    | Header | Description |

    | --- | --- |

    | `X-RateLimit-Limit` | Maximum requests allowed in the current one-minute
    window. |

    | `X-RateLimit-Remaining` | Requests remaining in the current window. |

    | `X-RateLimit-Reset` | Absolute Unix timestamp (seconds since epoch) when
    the current rate-limit window resets. |


    When a request is throttled (`429`), responses also include `Retry-After`
    with seconds to wait before retrying.
servers:
  - url: https://api.platform.dakota.xyz
    description: Production environment
  - url: https://api.platform.sandbox.dakota.xyz
    description: Sandbox — safe for testing with simulated data
security:
  - ApiKeyAuth: []
tags:
  - name: Agentic Payments
    x-alpha: true
    description: >-
      Alpha — agent-driven payments: provision agents, draft and approve
      spending mandates, accept reviewed instructions, and manage scheduled
      payments.


      **Prerequisites:** Customer onboarded; signer groups attached for
      recognition.

      **Related:** Wallets, Signer Groups, Transactions
  - name: Mandates
    x-alpha: true
    description: >-
      Alpha — spending mandates: signed, signer-bound authorizations governing
      what may be spent, approved or cancelled by a second recognized signer (§8
      — the dual-control rule that every mandate mutation must be signed by a
      recognized signer OTHER than the bound one). Independent of agents and
      scheduled payments.


      **Prerequisites:** Signer groups attached for recognition.

      **Related:** Signer Groups, Transactions
  - name: Insights
    x-alpha: true
    description: >-
      Alpha — read-only account insight: a deterministic report over a
      customer's agentic activity (funding balances, upcoming obligations,
      failures, mandate headroom and expiry) plus an advisory chat that narrates
      it. Never moves money, never creates or changes anything.


      **Prerequisites:** Customer onboarded; insight is computed from the
      customer's scheduled payments, mandates, and wallets.

      **Related:** Agentic Payments, Mandates
  - name: Customers
    description: >-
      Manage customer entities representing businesses and organizations
      onboarded to Dakota.


      **Prerequisites:** Complete KYB via Onboarding endpoints before initiating
      money movement.

      **Related:** Onboarding, Recipients, Transactions, Accounts, Wallets
  - name: Wallets
    description: >-
      Manage wallets, balances, and wallet-to-signer-group relationships for
      custody and movement controls.


      **Prerequisites:** Customer must exist. Configure signer groups before
      policy-enforced workflows.

      **Related:** Signer Groups, Policies, Transactions, Customers
  - name: Transactions
    description: >-
      Create, cancel, and retrieve transaction records across account and wallet
      flows.


      **Prerequisites:** Accounts or destinations must be configured based on
      flow type.

      **Related:** Accounts, Recipients, Policies, Events
  - name: Recipients
    description: >-
      Manage recipient entities and destination rails used by customers for
      payouts and transfers.


      **Prerequisites:** Customer must be onboarded and active.

      **Related:** Customers, Transactions, Accounts, Onboarding
  - name: Accounts
    description: >-
      Manage account resources used for onramp, offramp, and swap operations.


      **Prerequisites:** Customer must be created and network/asset constraints
      must be known.

      **Related:** Customers, Transactions, Auto Transactions, Info
  - name: Auto Transactions
    description: >-
      Manage automated transaction configurations and execution history for
      account automation workflows.


      **Prerequisites:** Source account must exist and be configured for
      automation.

      **Related:** Accounts, Transactions, Events
  - name: Onboarding
    description: >-
      Manage KYB/KYC onboarding lifecycle, application documents, attestations,
      and verification steps.


      **Prerequisites:** Customer context and required entity/application
      metadata.

      **Related:** Customers, Exceptions, Recipients, Transactions
  - name: Policies
    description: >-
      Define and manage policy objects and rules used for transaction governance
      and risk controls.


      **Prerequisites:** Wallet and signer group resources should be configured
      for enforcement scenarios.

      **Related:** Wallets, Signer Groups, Transactions
  - name: Signer Groups
    description: >-
      Manage signer groups and signer assignments for multi-party authorization
      models.


      **Prerequisites:** Wallets should exist before linking signer groups.

      **Related:** Wallets, Policies, Transactions
  - name: Authentication
    description: >-
      Manage API authentication credentials and key lifecycle for platform
      access.


      **Prerequisites:** Client organization must be provisioned.

      **Related:** Users, Info
  - name: Users
    description: >-
      Manage client users, roles, and identity metadata for platform access
      control.


      **Prerequisites:** Auth credentials and client context must be
      established.

      **Related:** Authentication
  - name: Webhooks
    description: >-
      Manage outbound webhook targets and delivery configuration for event
      notifications.


      **Prerequisites:** Subscriber endpoint must be reachable and secured.

      **Related:** Events, Authentication
  - name: Payouts
    description: >-
      Manage where Dakota sends your accrued developer-fee payouts.


      **Prerequisites:** Auth credentials and client context must be
      established.

      **Related:** Events
  - name: Events
    description: >-
      Retrieve event records emitted by platform operations for audit and
      troubleshooting.


      **Prerequisites:** Requesting client must have access to referenced
      resources.

      **Related:** Webhooks, Transactions, Onboarding
  - name: Info
    description: >-
      Read platform capability metadata, such as supported rails, networks, and
      assets.


      **Prerequisites:** Valid authentication headers.

      **Related:** Accounts, Transactions
  - name: Sandbox
    description: >-
      Trigger sandbox-only simulation endpoints for safe end-to-end integration
      testing with synthetic data. The sandbox host
      (`https://api.platform.sandbox.dakota.xyz`) also accepts a family of
      `X-Sandbox-*` request headers on most write endpoints (`Customers`,
      `Accounts`, `Transactions`, simulate endpoints) that let integrators drive
      deterministic failure modes — pick a preset via `X-Sandbox-Scenario`, or
      compose a custom one with
      `X-Sandbox-Error-Step`/`X-Sandbox-Error-Status`/`X-Sandbox-Error-Message`.
      `X-Sandbox-Instant-Completion` collapses async flows to a single
      synchronous step, and `X-Sandbox-Skip-Auto-Approval` keeps newly created
      KYB applications in `pending` for manual-review testing. All `X-Sandbox-*`
      headers are ignored in production.


      **Prerequisites:** Sandbox environment and test customer data.

      **Related:** Customers, Accounts, Transactions, Onboarding
paths:
  /transactions:
    post:
      tags:
        - Transactions
      summary: Create a one-off transfer
      description: |
        Create a one-off transfer. Supports both offramp (destination is a
        bank account, fiat_us or fiat_iban) and swap (destination is a crypto
        address) flows; the destination type selects which.
      operationId: createTransaction
      parameters:
        - $ref: '#/components/parameters/IdempotencyKeyHeader'
        - $ref: '#/components/parameters/SandboxScenarioHeader'
        - $ref: '#/components/parameters/SandboxErrorStepHeader'
        - $ref: '#/components/parameters/SandboxErrorStatusHeader'
        - $ref: '#/components/parameters/SandboxErrorMessageHeader'
        - $ref: '#/components/parameters/SandboxInstantCompletionHeader'
      requestBody:
        description: Transaction details.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OneOffTransactionRequest'
            example:
              transaction_type: one_off
              amount: '1.23'
              customer_id: 1NFHrqBHb3cTfLVkFSGmHZqdDPi
              source_network_id: ethereum-mainnet
              source_asset: USDC
              destination_id: 1NFHrqBHb3cTfLVkFSGmHZqdDPi
              destination_network_id: ethereum-mainnet
              destination_asset: USD
              destination_payment_rail: ach
              payment_reference: Invoice payment for services
      responses:
        '201':
          description: One-off transaction created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OneOffTransaction'
              example:
                id: 1NFHrqBHb3cTfLVkFSGmHZqdDPi
                resource_type: one_off
                customer_id: 1NFHrqBHb3cTfLVkFSGmHZqdDPi
                crypto_address: '0x1234567890abcdef1234567890abcdef12345678'
                send_amount: '1.24'
                status: pending
                amount: '1.23'
                source_network_id: ethereum-mainnet
                source_asset: USDC
                destination_id: 1NFHrqBHb3cTfLVkFSGmHZqdDPi
                destination_asset: USD
                receipt:
                  imad: string
                  omad: string
                  input:
                    amount: string
                    asset: string
                    network: string
                  subtotal:
                    amount: string
                    asset: string
                    network: string
                  converted:
                    amount: string
                    asset: string
                    network: string
                  output:
                    amount: string
                    asset: string
                    network: string
                  exchange_rate: string
                  external_fee:
                    amount: string
                    asset: string
                    network: string
                  dakota_fee:
                    amount: string
                    asset: string
                    network: string
                  client_fee:
                    amount: string
                    asset: string
                    network: string
                  gas_fee:
                    amount: string
                    asset: string
                    network: string
                  payment_reference: Invoice payment for services
                crypto_details:
                  source_crypto_address: string
                  source_network_id: ethereum-mainnet
                  destination_crypto_address: string
                  destination_network_id: ethereum-mainnet
                  deposit_transaction_hash: string
                  transaction_hash: string
                created_at: 1234567890
                updated_at: 1234567890
                completed_at: 1234567890
                destination_payment_rail: ach
                payment_reference: string
                destination_bank_name: Chase Bank
                destination_account_holder_name: Acme Corporation
                destination_account_number_last_four: '6789'
                destination_routing_number: '021000021'
                destination_iban: GB82WEST12345698765432
                destination_bic: BARCGB22XXX
        '400':
          description: Invalid request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: https://docs.dakota.xyz/api-reference/errors#invalid-request
                title: Invalid request
                status: 400
                detail: Invalid request
                instance: https://api.platform.dakota.xyz/transactions
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: >-
                  https://docs.dakota.xyz/api-reference/errors#authentication-error
                title: Unauthorized
                status: 401
                detail: Unauthorized
                instance: https://api.platform.dakota.xyz/transactions
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: https://docs.dakota.xyz/api-reference/errors#forbidden
                title: Forbidden
                status: 403
                detail: Forbidden
                instance: https://api.platform.dakota.xyz/transactions
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
        '404':
          description: Resource not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: https://docs.dakota.xyz/api-reference/errors#not-found
                title: Resource not found
                status: 404
                detail: Resource not found
                instance: https://api.platform.dakota.xyz/transactions
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
        '422':
          description: Unprocessable entity
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: https://docs.dakota.xyz/api-reference/errors#validation-error
                title: Unprocessable entity
                status: 422
                detail: Unprocessable entity
                instance: https://api.platform.dakota.xyz/transactions
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
        default:
          description: Unexpected error
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: https://docs.dakota.xyz/api-reference/errors#internal-error
                title: Unexpected error
                status: 500
                detail: Unexpected error
                instance: https://api.platform.dakota.xyz/transactions
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
      externalDocs:
        description: Read full guide in docs
        url: >-
          https://docs.dakota.xyz/api-reference/transactions/create-a-transaction
components:
  parameters:
    IdempotencyKeyHeader:
      name: x-idempotency-key
      in: header
      required: true
      description: >-
        Unique key to ensure request idempotency. If the same key is used within
        a certain time window, the original response will be returned instead of
        executing the request again.
      schema:
        type: string
        format: uuid
    SandboxScenarioHeader:
      name: X-Sandbox-Scenario
      in: header
      required: false
      description: >-
        Sandbox-only. Applies a preset failure or behavior mode for the request,
        selecting a coherent combination of error step, status, and message. The
        full set of scenarios is also exposed dynamically via `GET
        /sandbox/scenarios` along with descriptions and per-rail applicability.

        Effective only on `https://api.platform.sandbox.dakota.xyz`. Ignored in
        production.
      schema:
        type: string
        enum:
          - happy_path
          - delayed_settlement
          - insufficient_funds
          - compliance_block
          - invalid_account
          - provider_maintenance
          - network_congestion
          - kyb_manual_review
          - kyb_rejected
          - kyb_expired
          - network_timeout
          - intermittent_errors
          - account_frozen
          - document_expired
          - invalid_swift
        example: insufficient_funds
    SandboxErrorStepHeader:
      name: X-Sandbox-Error-Step
      in: header
      required: false
      description: >-
        Sandbox-only. Names the pipeline step at which the injected error fires.
        Pair with `X-Sandbox-Error-Status` and (optionally)
        `X-Sandbox-Error-Message` to drive a deterministic failure mode at a
        known point in the request lifecycle. Values longer than 100 characters
        are ignored.

        Effective only on `https://api.platform.sandbox.dakota.xyz`. Ignored in
        production.
      schema:
        type: string
        maxLength: 100
        enum:
          - transaction_processing
          - compliance_check
          - account_validation
          - provider_call
          - kyb_submission
          - kyb_approval
          - network_call
        example: provider_call
    SandboxErrorStatusHeader:
      name: X-Sandbox-Error-Status
      in: header
      required: false
      description: >-
        Sandbox-only. Sets the HTTP status code returned when the sandbox
        injects an error at the configured step (see `X-Sandbox-Error-Step`).
        Must be a valid HTTP status code in the range 100-599; values outside
        that range are ignored. Status codes >= 400 cause the request to
        short-circuit immediately with a structured error response.

        Effective only on `https://api.platform.sandbox.dakota.xyz`. Ignored in
        production.
      schema:
        type: integer
        minimum: 100
        maximum: 599
        example: 503
    SandboxErrorMessageHeader:
      name: X-Sandbox-Error-Message
      in: header
      required: false
      description: >-
        Sandbox-only. Sets the human-readable `message` field of the injected
        sandbox error response. Truncated values longer than 500 characters are
        ignored.

        Effective only on `https://api.platform.sandbox.dakota.xyz`. Ignored in
        production.
      schema:
        type: string
        maxLength: 500
        example: Provider temporarily unavailable for maintenance.
    SandboxInstantCompletionHeader:
      name: X-Sandbox-Instant-Completion
      in: header
      required: false
      description: >-
        Sandbox-only. When `true`, asynchronous simulation flows complete
        immediately rather than progressing through their normal timed states.
        Useful for fast end-to-end test runs that do not need to exercise
        intermediate webhook events. Accepts `true`/`false` (also `1`/`0`,
        `yes`/`no`); other values are treated as `false`.

        Effective only on `https://api.platform.sandbox.dakota.xyz`. Ignored in
        production.
      schema:
        type: boolean
        default: false
        example: true
  schemas:
    OneOffTransactionRequest:
      type: object
      description: |
        Request to create a one-off transfer. The transfer type is determined by
        the destination type referenced by `destination_id`:
        - **Offramp** when the destination is a fiat bank account (fiat_us or
          fiat_iban). `destination_payment_rail` is honored; `destination_network_id`
          is ignored.
        - **Swap** when the destination is a crypto address.
          `destination_network_id` is required and selects the destination
          chain.

        The platform generates a single-use deposit address and finalizes the
        transfer once the source-asset deposit arrives.
      required:
        - customer_id
        - source_network_id
        - source_asset
        - destination_id
        - destination_asset
      properties:
        transaction_type:
          $ref: '#/components/schemas/OneOffTransactionType'
        amount:
          type: string
          description: |
            Optional expected destination amount as a decimal string. When
            omitted, the resulting transaction's destination amount is
            populated from the actual deposit once funds arrive. When
            provided, must be at least 0.01 and is enforced by sandbox
            amount caps where applicable.
          example: '1.23'
          pattern: ^[0-9]+(\.[0-9]+)?$
          minLength: 1
        customer_id:
          $ref: '#/components/schemas/KSUID'
        source_network_id:
          $ref: '#/components/schemas/NetworkId'
        source_asset:
          type: string
          description: Source crypto asset symbol
          example: USDC
        destination_id:
          $ref: '#/components/schemas/KSUID'
        destination_network_id:
          $ref: '#/components/schemas/NetworkId'
        destination_asset:
          type: string
          description: >-
            Destination asset symbol. For offramps this is a fiat currency (e.g.
            `USD`, `EUR`). For swaps this is the destination stablecoin (e.g.
            `USDC`, `RD`).
          example: USD
        destination_payment_rail:
          $ref: '#/components/schemas/PaymentCapability'
          description: >-
            Optional preferred payment rail for bank transfers (offramp).
            Ignored when the destination is a crypto address. If not specified,
            the system will automatically select the most appropriate rail based
            on the destination's supported methods.
        payment_reference:
          type: string
          description: >-
            Optional payment reference message for bank transfers. Length
            limits: ACH (1-18 chars), Wire (1-140 chars) (6-140 chars), SWIFT
            (1-140 chars, max 4 lines of 35 chars each)
          minLength: 1
          maxLength: 140
          example: Invoice payment for services
        developer_fee_bps:
          type: integer
          format: int32
          description: >-
            Developer fee in basis points (1 bp = 0.01%). Overrides the default
            client fee for this transaction.
          example: 50
          minimum: 0
          maximum: 10000
    OneOffTransaction:
      type: object
      description: >-
        A one-off transaction response. Used for single-use offramp
        (crypto-to-fiat) and swap (crypto-to-crypto) transfers; the destination
        type determines which.
      required:
        - id
        - resource_type
        - customer_id
        - crypto_address
        - status
        - source_network_id
        - source_asset
        - destination_id
        - destination_asset
        - created_at
        - updated_at
      properties:
        id:
          $ref: '#/components/schemas/KSUID'
        resource_type:
          allOf:
            - $ref: '#/components/schemas/TransactionResourceType'
          description: Discriminator field. Always "one_off" for one-off transactions.
          example: one_off
        customer_id:
          $ref: '#/components/schemas/KSUID'
        crypto_address:
          type: string
          description: Temporary address where funds should be sent
          example: '0x1234567890abcdef1234567890abcdef12345678'
        send_amount:
          type: string
          description: >-
            Amount that should be sent (may be higher than requested amount due
            to fees)
          example: '1.24'
        status:
          $ref: '#/components/schemas/OneOffTransactionStatus'
        amount:
          type: string
          description: Original requested amount
          example: '1.23'
        source_network_id:
          $ref: '#/components/schemas/NetworkId'
        source_asset:
          type: string
          description: Source crypto asset symbol
          example: USDC
        destination_id:
          $ref: '#/components/schemas/KSUID'
        destination_asset:
          $ref: '#/components/schemas/Asset'
        failure_reason:
          type: string
          description: Reason for failure if status is failed
        receipt:
          $ref: '#/components/schemas/TransactionReceipt'
          nullable: true
          type: object
        crypto_details:
          $ref: '#/components/schemas/TransactionCryptoDetails'
          nullable: true
          type: object
        sender_details:
          $ref: '#/components/schemas/SenderDetails'
        created_at:
          type: integer
          description: Unix timestamp when the transaction was created
          example: 1234567890
        updated_at:
          type: integer
          description: Unix timestamp when the transaction was last updated
          example: 1234567890
        completed_at:
          type: integer
          description: Unix timestamp when the transaction was completed
          example: 1234567890
        destination_payment_rail:
          $ref: '#/components/schemas/PaymentCapability'
          description: The payment rail that was selected for this transaction
          nullable: true
          type: string
        payment_reference:
          type: string
          description: >-
            Payment reference message for bank transfers (e.g. wire message,
            SWIFT reference)
          nullable: true
        destination_bank_name:
          type: string
          description: Name of the destination bank
          example: Chase Bank
        destination_account_holder_name:
          type: string
          description: Name of the account holder at the destination bank
          example: Acme Corporation
        destination_account_number_last_four:
          type: string
          description: Last four digits of the destination account number
          example: '6789'
        destination_routing_number:
          type: string
          description: ABA routing number for US bank accounts
          example: '021000021'
        destination_iban:
          type: string
          description: IBAN for international bank accounts
          example: GB82WEST12345698765432
        destination_bic:
          type: string
          description: BIC/SWIFT code for international transfers
          example: BARCGB22XXX
        return_code:
          type: string
          description: >-
            NACHA/Fedwire return code (e.g., R01) when the transaction was
            returned by the receiving bank.
          example: R01
        return_reason:
          type: string
          description: Human-readable return reason provided by the receiving bank.
          example: Insufficient Funds
        return_initiated_at:
          type: integer
          description: Unix timestamp when the return was initiated.
          example: 1234567890
        return_deadline:
          type: integer
          description: Unix timestamp deadline for return processing.
          example: 1234567890
        reversal_reason:
          type: string
          description: >-
            Lead Bank ACH reversal reason when the originator reverses the
            transaction (e.g., duplicate, receiver_incorrect).
          example: duplicate
        reversal_initiated_at:
          type: integer
          description: Unix timestamp when the reversal was initiated.
          example: 1234567890
        customer_name:
          type: string
          description: Display name of the customer associated with this transaction.
          example: Acme Corp
    ProblemDetails:
      type: object
      required:
        - type
        - title
        - status
      description: |
        Error response following RFC 9457 Problem Details.
        Public API error responses use this format.
      example:
        type: https://docs.dakota.xyz/api-reference/errors#not-found
        title: Customer Not Found
        status: 404
        detail: Customer cst_2abc123 was not found in your organization.
        instance: https://api.platform.dakota.xyz/customers/cst_2abc123
        request_id: req_7f3a8b2c
      properties:
        type:
          type: string
          format: uri
          description: |
            URI reference identifying the problem type.
            Resolves to human-readable documentation.
          example: https://docs.dakota.xyz/api-reference/errors#not-found
        title:
          type: string
          description: >-
            Short, human-readable summary of the problem type. Stable across
            occurrences.
          example: Customer Not Found
        status:
          type: integer
          description: HTTP status code for this occurrence.
          example: 404
        detail:
          type: string
          description: Human-readable explanation specific to this occurrence.
          example: Customer cst_2abc123 was not found in your organization.
        instance:
          type: string
          format: uri
          description: The request path that triggered this error.
          example: https://api.platform.dakota.xyz/customers/cst_2abc123
        request_id:
          type: string
          description: Unique request identifier. Include when contacting support.
          example: req_7f3a8b2c
        errors:
          type: array
          description: Field-level validation errors (present for validation failures).
          items:
            $ref: '#/components/schemas/ValidationError'
    OneOffTransactionType:
      type: string
      description: Transaction type for one-off transaction creation.
      enum:
        - one_off
      example: one_off
    KSUID:
      type: string
      title: KSUID
      description: >-
        KSUID is a 27-character globally unique ID that combines a timestamp
        with a random component. Used for all entity identifiers in the Dakota
        platform.
      pattern: ^[0-9A-Za-z]{27}$
      minLength: 27
      maxLength: 27
      example: 1NFHrqBHb3cTfLVkFSGmHZqdDPi
    NetworkId:
      type: string
      description: Identifier for a blockchain network
      example: ethereum-mainnet
      enum:
        - ethereum-mainnet
        - ethereum-sepolia
        - ethereum-goerli
        - ethereum-holesky
        - solana-mainnet
        - solana-devnet
        - solana-testnet
        - base-mainnet
        - base-sepolia
        - arbitrum-mainnet
        - arbitrum-sepolia
        - optimism-mainnet
        - optimism-sepolia
        - polygon-mainnet
        - polygon-amoy
      minLength: 1
      maxLength: 30
    PaymentCapability:
      type: string
      title: Payment Capability
      description: >-
        Type of payment rail capability supported. For onramp accounts,
        `us_bank_account` indicates the account accepts both ACH and Wire
        (Fedwire) deposits interchangeably.
      enum:
        - ach
        - fedwire
        - swift
        - us_bank_account
      example: ach
    TransactionResourceType:
      type: string
      title: Transaction Resource Type
      description: Top-level transaction resource family.
      enum:
        - one_off
        - wallet
        - auto_account
      example: one_off
    OneOffTransactionStatus:
      type: string
      description: Status of a one-off transaction
      enum:
        - pending
        - processing
        - completed
        - failed
        - cancelled
        - reversed
        - pending_return
        - returned
        - pending_reversal
      example: pending
    Asset:
      type: string
      title: Asset
      description: ISO 4217 symbol representing a fiat asset.
      pattern: ^[A-Z]{3}$
      minLength: 3
      maxLength: 3
      example: USD
    TransactionReceipt:
      type: object
      description: Detailed receipt information for a transaction
      required:
        - input
        - output
        - exchange_rate
      properties:
        imad:
          type: string
          description: Input Message Accountability Data for certain US transactions.
        omad:
          type: string
          description: Input Message Accountability Data for certain US transactions.
        input:
          $ref: '#/components/schemas/AmountDetails'
          description: Input amount details
        subtotal:
          $ref: '#/components/schemas/AmountDetails'
          description: Subtotal amount after fees
        converted:
          $ref: '#/components/schemas/AmountDetails'
          description: Converted amount after applying the exchange rate
        output:
          $ref: '#/components/schemas/AmountDetails'
          description: Output amount details
        exchange_rate:
          type: string
          description: Exchange rate used for the transaction
        external_fee:
          $ref: '#/components/schemas/AmountDetails'
          description: External fee amount details
        dakota_fee:
          $ref: '#/components/schemas/AmountDetails'
          description: Dakota fee amount details
        client_fee:
          $ref: '#/components/schemas/AmountDetails'
          description: Client fee amount details
        gas_fee:
          $ref: '#/components/schemas/AmountDetails'
          description: Gas fee amount details for blockchain transactions
        payment_reference:
          type: string
          description: Payment reference message for bank transfers
          nullable: true
          example: Invoice payment for services
    TransactionCryptoDetails:
      type: object
      description: Blockchain-specific details for crypto transactions
      properties:
        source_crypto_address:
          type: string
          description: Source blockchain address
        source_network_id:
          $ref: '#/components/schemas/NetworkId'
        destination_crypto_address:
          type: string
          description: Destination blockchain address
        destination_network_id:
          $ref: '#/components/schemas/NetworkId'
        deposit_transaction_hash:
          type: string
          description: >-
            Transaction hash for intermediate transaction, such as the first
            half of an offramp or two-part swap
        transaction_hash:
          type: string
          description: >-
            Transaction hash for main transaction that reaches the recipient, if
            applicable
    SenderDetails:
      type: object
      description: >-
        Originating sender details for onramp/offramp/swap transactions.
        Populated when source-side metadata is available (e.g., from inbound
        wire/ACH source data).
      properties:
        sender_type:
          type: string
          description: >-
            Type of the originating sender (e.g., "fiat_account",
            "crypto_wallet").
          example: fiat_account
        sender_account_holder_name:
          type: string
          description: Name on the originating account.
          example: John Doe
        sender_bank_name:
          type: string
          description: Bank name of the originating account.
          example: Chase Bank
        sender_routing_number:
          type: string
          description: ACH routing number of the originating bank account.
          example: '021000021'
        sender_account_number:
          type: string
          description: Account number of the originating bank account.
          example: '1234567890'
        sender_wire_routing_number:
          type: string
          description: Wire routing number of the originating bank account.
          example: '021000021'
        sender_account_type:
          type: string
          description: Type of the originating bank account (e.g., "checking", "savings").
          example: checking
        sender_iban:
          type: string
          description: IBAN of the originating account.
          example: GB82WEST12345698765432
        sender_bic:
          type: string
          description: BIC/SWIFT code of the originating bank.
          example: BARCGB22XXX
        sender_wallet_address:
          type: string
          description: Blockchain wallet address of the originating sender (offramp/swap).
          example: '0x1234567890abcdef1234567890abcdef12345678'
        sender_network:
          type: string
          description: >-
            Network identifier of the originating wallet (e.g.,
            "ethereum-mainnet").
          example: ethereum-mainnet
    ValidationError:
      type: object
      required:
        - field
        - message
      properties:
        field:
          type: string
          description: Field path using dot notation for nested fields.
          example: bank_account.routing_number
        message:
          type: string
          description: Human-readable description of the field error.
          example: Routing number must be exactly 9 digits
        code:
          type: string
          description: Machine-readable error code for this field.
          example: invalid_format
    AmountDetails:
      type: object
      description: >-
        Detailed representation of an amount with its asset and optional
        metadata
      required:
        - amount
        - asset
      properties:
        amount:
          type: string
          description: Amount as a string representation of a decimal number
        asset:
          type: string
          description: Asset code
        network:
          type: string
          description: Network identifier for the token if it is a crypto asset
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````