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

# Send a transaction from a wallet

> Creates a new outbound transaction from the specified wallet. Policy and signer checks may affect the resulting transaction state.



## OpenAPI

````yaml /openapi.yaml post /wallets/{wallet_id}/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:
  /wallets/{wallet_id}/transactions:
    post:
      tags:
        - Wallets
      summary: Send a transaction from a wallet
      description: >-
        Creates a new outbound transaction from the specified wallet. Policy and
        signer checks may affect the resulting transaction state.
      operationId: createWalletTransaction
      parameters:
        - name: wallet_id
          in: path
          required: true
          description: Wallet ID
          schema:
            $ref: '#/components/schemas/KSUID'
        - $ref: '#/components/parameters/IdempotencyKeyHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EndorsedRequest'
            example:
              signatures:
                - LS0tLS1CRUdJ...0tLS0tCg==
              intent:
                wallet_id: string
                caip2: string
                operation:
                  kind: string
                  from: string
                  to: string
                  amount: '100.50'
                  asset_id: USDC
                  method: string
                  args:
                    - string
                  data: string
                idempotency_key: string
      responses:
        '200':
          description: Transaction sent successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletTransaction'
              example:
                id: 1NFHrqBHb3cTfLVkFSGmHZqdDPi
                resource_type: wallet
                wallet_id: 1NFHrqBHb3cTfLVkFSGmHZqdDPi
                network_id: ethereum-mainnet
                from: '0x1234567890abcdef1234567890abcdef12345678'
                to: '0xabcdef1234567890abcdef1234567890abcdef12'
                transaction_hash: '0x165cd37b4c644c2921454429e7f9358d18a45e14'
                transaction_type: transfer
                amount: '100.56'
                asset: USD
                status: completed
        '400':
          description: Bad request - invalid input data
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: https://docs.dakota.xyz/api-reference/errors#invalid-request
                title: Bad request - invalid input data
                status: 400
                detail: Bad request - invalid input data
                instance: >-
                  https://api.platform.dakota.xyz/wallets/example-id/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/wallets/example-id/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/wallets/example-id/transactions
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
        '404':
          description: Not Found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: https://docs.dakota.xyz/api-reference/errors#not-found
                title: Not Found
                status: 404
                detail: Not Found
                instance: >-
                  https://api.platform.dakota.xyz/wallets/example-id/transactions
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
        '409':
          description: Conflict - duplicate request detected
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: https://docs.dakota.xyz/api-reference/errors#conflict
                title: Conflict - duplicate request detected
                status: 409
                detail: Conflict - duplicate request detected
                instance: >-
                  https://api.platform.dakota.xyz/wallets/example-id/transactions
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
        '500':
          description: Internal server error
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: https://docs.dakota.xyz/api-reference/errors#internal-error
                title: Internal server error
                status: 500
                detail: Internal server error
                instance: >-
                  https://api.platform.dakota.xyz/wallets/example-id/transactions
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
        '503':
          description: Service unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: https://docs.dakota.xyz/api-reference/errors#internal-error
                title: Service unavailable
                status: 503
                detail: Service unavailable
                instance: >-
                  https://api.platform.dakota.xyz/wallets/example-id/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/wallets/example-id/transactions
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
      externalDocs:
        description: Read full guide in docs
        url: >-
          https://docs.dakota.xyz/api-reference/wallets/send-a-transaction-from-a-wallet
components:
  schemas:
    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
    EndorsedRequest:
      type: object
      required:
        - signatures
        - intent
      properties:
        signatures:
          type: array
          description: List of signatures over the intent
          items:
            type: string
            description: |
              Cryptographic signature over the intent, base64-encoded. For an
              ES256 signer this is the ASN.1 DER ECDSA signature over the
              SHA-256 of the canonical intent. For a WEBAUTHN signer this is
              the base64 of the WebAuthn assertion JSON (id, rawId, type, and
              response.authenticatorData / clientDataJSON / signature). See
              the WebAuthn & Passkey Signing guide.
            example: LS0tLS1CRUdJ...0tLS0tCg==
        intent:
          oneOf:
            - $ref: '#/components/schemas/SendTransactionIntent'
            - $ref: '#/components/schemas/AttachGroupToWalletIntent'
            - $ref: '#/components/schemas/DetachGroupFromWalletIntent'
            - $ref: '#/components/schemas/AttachPolicyToWalletIntent'
            - $ref: '#/components/schemas/DetachPolicyFromWalletIntent'
            - $ref: '#/components/schemas/AddPolicyRuleIntent'
            - $ref: '#/components/schemas/RemovePolicyRuleIntent'
            - $ref: '#/components/schemas/UpdatePolicyRuleIntent'
            - $ref: '#/components/schemas/DeletePolicyIntent'
          description: The intent being endorsed
    WalletTransaction:
      type: object
      description: >-
        Transaction details representing a transfer of funds from a crypto
        wallet.
      required:
        - id
        - resource_type
        - wallet_id
        - status
      properties:
        id:
          $ref: '#/components/schemas/KSUID'
        resource_type:
          allOf:
            - $ref: '#/components/schemas/TransactionResourceType'
          description: Discriminator field. Always "wallet" for wallet transactions.
          example: wallet
        wallet_id:
          $ref: '#/components/schemas/KSUID'
        network_id:
          $ref: '#/components/schemas/NetworkId'
        from:
          type: string
          description: The source address
        to:
          type: string
          description: The destination address
        transaction_hash:
          type: string
          description: The transaction hash
          example: '0x165cd37b4c644c2921454429e7f9358d18a45e14'
        transaction_type:
          $ref: '#/components/schemas/WalletTransactionType'
        amount:
          type: string
          description: The transaction amount
          example: '100.56'
        asset:
          $ref: '#/components/schemas/Asset'
        status:
          $ref: '#/components/schemas/TransactionStatus'
        created_at:
          type: integer
          format: int64
          description: Unix time the transaction was created.
          example: 1781181600
        confirmed_at:
          type: integer
          format: int64
          description: >-
            Unix time the transaction was confirmed on chain; absent until
            confirmed.
          example: 1781181660
    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'
    SendTransactionIntent:
      type: object
      required:
        - wallet_id
        - caip2
        - operation
        - idempotency_key
      properties:
        wallet_id:
          type: string
          description: Unique identifier for the wallet
        caip2:
          type: string
          description: CAIP-2 chain identifier for the target blockchain network
        operation:
          $ref: '#/components/schemas/TransactionOperation'
        idempotency_key:
          type: string
          description: A unique key to ensure idempotency of the request
        context_digest:
          type: string
          description: |
            Optional opaque SHA-256d digest (base64-encoded) of an upstream
            operator-meaningful context envelope produced by the originating
            service (e.g. financial-account).

            Neither platform nor policy-engine interprets the semantic
            content. Policy-engine includes the field in canonical hashing
            so the WebAuthn signature commits to it; beyond that the digest
            is never read, validated, or logged. The pre-image is persisted
            upstream and exists for forensic / non-repudiation purposes
            (see ENG-1962).

            Intents predating this field validate as today (empty / omitted).
    AttachGroupToWalletIntent:
      type: object
      required:
        - type
        - wallet_id
        - group_id
        - idempotency_key
      properties:
        type:
          type: string
          enum:
            - attach_group_to_wallet
          example: attach_group_to_wallet
        wallet_id:
          type: string
          description: Unique identifier for the wallet
        group_id:
          type: string
          description: The signer group id to be attached to the wallet
        idempotency_key:
          type: string
          description: A unique key to ensure idempotency of the request
    DetachGroupFromWalletIntent:
      type: object
      required:
        - type
        - wallet_id
        - group_id
        - idempotency_key
      properties:
        type:
          type: string
          enum:
            - detach_group_from_wallet
          example: detach_group_from_wallet
        wallet_id:
          type: string
          description: Unique identifier for the wallet
        group_id:
          type: string
          description: The signer group id to be detached from the wallet
        idempotency_key:
          type: string
          description: A unique key to ensure idempotency of the request
    AttachPolicyToWalletIntent:
      type: object
      required:
        - type
        - wallet_id
        - policy_id
        - idempotency_key
      properties:
        type:
          type: string
          enum:
            - attach_policy_to_wallet
          example: attach_policy_to_wallet
        wallet_id:
          type: string
          description: Unique identifier for the wallet
          example: wal_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
        policy_id:
          type: string
          description: The policy id to be attached to the wallet
          example: pol_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
        idempotency_key:
          type: string
          description: A unique key to ensure idempotency of the request
          example: idem_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
    DetachPolicyFromWalletIntent:
      type: object
      required:
        - type
        - wallet_id
        - policy_id
        - idempotency_key
      properties:
        type:
          type: string
          enum:
            - detach_policy_from_wallet
          example: detach_policy_from_wallet
        wallet_id:
          type: string
          description: Unique identifier for the wallet
          example: wal_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
        policy_id:
          type: string
          description: The policy id to be detached from the wallet
          example: pol_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
        idempotency_key:
          type: string
          description: A unique key to ensure idempotency of the request
          example: idem_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
    AddPolicyRuleIntent:
      type: object
      required:
        - type
        - policy_id
        - rule_type
        - action
        - definition
        - idempotency_key
      properties:
        type:
          type: string
          enum:
            - add_policy_rule
          example: add_policy_rule
        policy_id:
          type: string
          description: The policy id to which the rule will be added
          example: pol_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
        rule_type:
          type: string
          description: Type of rule to add
          enum:
            - approval_threshold
            - amount_threshold
            - address_list
          example: approval_threshold
        action:
          type: string
          description: Action to take when rule matches
          enum:
            - allow
            - deny
          example: deny
        definition:
          type: object
          description: Rule-specific configuration. Structure depends on rule_type
          example:
            threshold: 2
            description: Require 2 approvals
        idempotency_key:
          type: string
          description: A unique key to ensure idempotency of the request
          example: idem_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
    RemovePolicyRuleIntent:
      type: object
      required:
        - type
        - policy_id
        - rule_id
        - idempotency_key
      properties:
        type:
          type: string
          enum:
            - remove_policy_rule
          example: remove_policy_rule
        policy_id:
          type: string
          description: The policy id from which the rule will be removed
          example: pol_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
        rule_id:
          type: string
          description: The id of the rule to be removed from the policy
          example: rule_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
        idempotency_key:
          type: string
          description: A unique key to ensure idempotency of the request
          example: idem_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
    UpdatePolicyRuleIntent:
      type: object
      required:
        - type
        - policy_id
        - rule_id
        - updated_definition
        - idempotency_key
      properties:
        type:
          type: string
          enum:
            - update_policy_rule
          example: update_policy_rule
        policy_id:
          type: string
          description: The policy id from which the rule will be updated
          example: pol_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
        rule_id:
          type: string
          description: The id of the rule to be updated
          example: rule_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
        updated_definition:
          type: string
          description: The updated rule definition as JSON string
          example: '{"amount": "15000", "currency": "USD"}'
        idempotency_key:
          type: string
          description: A unique key to ensure idempotency of the request
          example: idem_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
    DeletePolicyIntent:
      type: object
      required:
        - type
        - policy_id
        - idempotency_key
      properties:
        type:
          type: string
          enum:
            - delete_policy
          example: delete_policy
        policy_id:
          type: string
          description: The policy id to be deleted
          example: pol_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
        idempotency_key:
          type: string
          description: A unique key to ensure idempotency of the request
          example: idem_2N4YkKpKu7M3mKpGYmF8kcJ8oZT
    TransactionResourceType:
      type: string
      title: Transaction Resource Type
      description: Top-level transaction resource family.
      enum:
        - one_off
        - wallet
        - auto_account
      example: one_off
    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
    WalletTransactionType:
      type: string
      description: Type of transaction
      enum:
        - transfer
        - evm_contract_call
    Asset:
      type: string
      title: Asset
      description: ISO 4217 symbol representing a fiat asset.
      pattern: ^[A-Z]{3}$
      minLength: 3
      maxLength: 3
      example: USD
    TransactionStatus:
      type: string
      title: Transaction Status
      description: Current status of a transaction.
      enum:
        - timed_out
        - not_started
        - in_progress
        - awaiting_confirmation
        - pending
        - processing
        - completed
        - invalid
        - failed
        - canceled
        - reversed
        - rejected
        - broadcasted
        - pending_return
        - returned
        - pending_reversal
    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
    TransactionOperation:
      type: object
      required:
        - kind
        - from
        - to
        - asset_id
      properties:
        kind:
          type: string
          description: 'Transaction type: transfer or contract call'
        from:
          type: string
          description: The wallet address initiating the transaction
        to:
          type: string
          description: The recipient address of the transaction
        amount:
          type: string
          description: >
            Amount to be transferred as a non-negative decimal string. Required
            for

            transfer operations; optional for contract calls (defaults to zero).

            Leading zeros, signs, commas, and non-finite values are rejected.

            For transfer operations the handler additionally requires the value
            to be greater than zero.
          pattern: ^(0|[1-9][0-9]*)(\.[0-9]+)?$
          minLength: 1
        asset_id:
          type: string
          description: Crypto asset symbol for the transfer or contract call.
          example: USDC
        method:
          type: string
          description: The method name to be invoked on the contract
        args:
          type: array
          description: Arguments for the contract method call
          items:
            type: string
        data:
          type: string
          description: The calldata payload for the contract call
  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
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````