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

# Sign a transaction with a WaaS wallet and broadcast it

> Opens a signing room per attempt and returns the transaction record. Once signing finishes, Dynamic assembles the transaction and broadcasts it; the signed transaction is never returned. Repeating the idempotency key with the same transaction returns the original record.



## OpenAPI

````yaml https://app.dynamic.xyz/api-docs/public-api.yaml post /sdk/{environmentId}/waas/{walletId}/transactions/signAndBroadcast
openapi: 3.0.1
info:
  title: Dashboard API
  description: Dashboard API documentation
  version: 1.0.0
servers:
  - url: https://app.dynamicauth.com/api/v0
  - url: https://app.dynamic.xyz/api/v0
  - url: http://localhost:3333/api/v0
security: []
tags:
  - name: Analytics
    description: Query usage analytics and event counts for your environment.
  - name: SDK
    description: SDK-facing endpoints consumed by embedded Dynamic clients.
  - name: Server
    description: Server-side SDK endpoints authenticated by environment API tokens.
  - name: Organizations
    description: >-
      Manage organizations — the top-level container for all environments and
      projects.
  - name: Projects
    description: Manage projects that group related environments under an organization.
  - name: Environments
    description: >-
      Manage environments (live and sandbox) where your authentication
      configuration lives.
  - name: Users
    description: List, search, and manage authenticated users within an environment.
  - name: Invites
    description: >-
      Manage invitation links that grant specific external users access to your
      environment.
  - name: Tokens
    description: >-
      Create and manage API tokens used to authenticate requests to the Dynamic
      API.
  - name: Origins
    description: >-
      Configure allowed origins (CORS) for SDK and API access to your
      environment.
  - name: Allowlists
    description: >-
      Manage allowlists to control which wallet addresses or email addresses can
      access your environment.
  - name: Wallets
    description: View and manage wallets linked to users in your environment.
  - name: Members
    description: Manage team members and their roles within an organization.
  - name: Sessions
    description: View and revoke active user sessions within an environment.
  - name: Settings
    description: Read and update environment-level configuration settings.
  - name: Exchanges
    description: >-
      Configure exchange integrations (Coinbase, Binance, etc.) for fiat on-ramp
      within your environment.
  - name: Yield
    description: List yield vaults registered for your environment.
  - name: Providers
    description: >-
      List, enable, disable, and configure authentication providers (OAuth,
      email, wallet, SMS, etc.) for your environment.
  - name: Captcha
    description: >-
      Configure captcha verification (provider, site key, secret key) for your
      environment.
  - name: Gates
    description: >-
      Define access gates that restrict environment entry to users who meet
      specific criteria.
  - name: Chains
    description: >-
      Manage the blockchain networks available for wallet connection in your
      environment.
  - name: Exports
    description: Export user and wallet data from your environment as downloadable files.
  - name: Events
    description: Browse the event log of actions performed within your environment.
  - name: Webhooks
    description: >-
      Create and manage webhooks to receive real-time events (user.created,
      wallet.linked, etc.) at your endpoint.
  - name: Custom Fields
    description: >-
      Define and manage custom metadata fields collected from users at sign-up
      or login.
  - name: MfaSettings
    description: >-
      Configure multi-factor authentication (MFA) policies for your
      organization.
  - name: Mfa
    description: Manage MFA enrollment and verification for individual users.
  - name: CustomHostnames
    description: >-
      Configure custom hostnames for white-labeling the Dynamic authentication
      experience.
  - name: TestAccount
    description: >-
      Manage test accounts used for automated testing and QA within an
      environment.
  - name: NameServices
    description: >-
      Configure name service integrations (ENS, Unstoppable Domains, etc.) for
      human-readable wallet addresses.
  - name: GlobalWallets
    description: >-
      Manage global wallets shared across multiple environments in an
      organization.
  - name: GlobalWalletConnections
    description: Configure which environments can access and use global wallets.
  - name: GlobalWalletAccessControl
    description: Control which users and roles can access and operate global wallets.
  - name: UserApiTokens
    description: >-
      Create and manage user-scoped API tokens for programmatic access on behalf
      of a user.
  - name: Waas
    description: Wallet-as-a-Service endpoints for creating and managing embedded wallets.
  - name: WalletConnect
    description: Configure WalletConnect integration settings for your environment.
  - name: Checkout
    description: >-
      Accept crypto payments and deposits from any wallet. Settle in any token
      you choose.
  - name: Flow
    description: >-
      Accept crypto payments, deposits, and withdrawals. Amount and destination
      are fixed server-side at create; the post-create lifecycle is driven with
      a capability session token.
  - name: FlowAnalytics
    description: >-
      Query aggregated analytics and paginated transaction lists for the Flow
      product.
  - name: Gasless
    description: >-
      Query billing summaries and paginated transaction lists for sponsored
      (gasless) transactions.
  - name: Custom Networks
    description: >-
      Add and manage custom EVM-compatible networks beyond the built-in chain
      list.
  - name: Chainalysis
    description: >-
      Configure Chainalysis integration for blockchain address screening and
      risk assessment.
  - name: Visits
    description: Track and query user visit activity within your environment.
  - name: ExternalJwt
    description: >-
      Configure external JWT providers so existing auth tokens can be used with
      Dynamic.
  - name: SDK Views
    description: >-
      Manage SDK view configurations that customize the appearance of Dynamic
      modals and flows.
  - name: DeeplinkUrls
    description: Configure deep link URLs for mobile app integration with the Dynamic SDK.
  - name: OrganizationSettings
    description: >-
      Read and update organization-level settings such as approval workflow
      configuration.
  - name: AdminActions
    description: >-
      Manage admin action requests that require approval from another
      administrator.
  - name: ClientGrant
    description: |
      OAuth 2.0 Device Authorization Grant flow (RFC 8628) used by first-party
      Dynamic clients (CLI, MCP server, demo apps, IDE plugins) to obtain a
      revocable, 30-day client JWT without ever seeing the user's dashboard
      session token.
  - name: AuthorizedClients
    description: |
      Manage first-party clients (CLI / MCP / demo / IDE plugins) authorized
      to act as a dashboard user. Surfaced under Profile → Authorized Clients.
  - name: Kyb
    description: >-
      Verify a business's identity via AI Prise passthrough and check KYB tier
      status.
  - name: BusinessAccounts
    description: >-
      Administer the business accounts (multi-operator wallet containers) that
      end users create in an environment.
  - name: ScreeningPolicies
    description: >
      Author per-provider address screening policies that map TRM and
      Chainalysis

      signals to block, alert, or allow, plus per-address exceptions. The

      sanctions floor sits underneath every policy and is not configurable.
paths:
  /sdk/{environmentId}/waas/{walletId}/transactions/signAndBroadcast:
    post:
      tags:
        - SDK
      summary: Sign a transaction with a WaaS wallet and broadcast it
      description: >-
        Opens a signing room per attempt and returns the transaction record.
        Once signing finishes, Dynamic assembles the transaction and broadcasts
        it; the signed transaction is never returned. Repeating the idempotency
        key with the same transaction returns the original record.
      operationId: signAndBroadcastWaasTransaction
      parameters:
        - $ref: '#/components/parameters/environmentId'
        - $ref: '#/components/parameters/walletId'
        - $ref: '#/components/parameters/signAndBroadcastIdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WaasSignAndBroadcastRequest'
      responses:
        '200':
          description: >-
            The transaction record, with the signing rooms while signing is
            pending
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasTransactionBroadcast'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: The idempotency key was already used for a different transaction.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntity'
        '413':
          description: >-
            The request body is over 640kb. Multiple messages and a transaction
            with large calldata can reach that. Send less calldata or fewer fee
            attempts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - bearerAuth: []
components:
  parameters:
    environmentId:
      in: path
      name: environmentId
      required: true
      description: ID of the environment
      schema:
        $ref: '#/components/schemas/uuid'
    walletId:
      in: path
      name: walletId
      schema:
        $ref: '#/components/schemas/uuid'
      required: true
      description: UUID of the wallet
    signAndBroadcastIdempotencyKey:
      in: header
      name: x-idempotency-key
      required: true
      description: >-
        Your repeat-protection key for one transaction, unique per environment.
        Repeating it with the same transaction returns the original; with a
        different transaction, 409.
      schema:
        type: string
        minLength: 1
        maxLength: 255
        pattern: ^[-A-Za-z0-9._~!$&'()*+,;=:@/]{1,255}$
  schemas:
    WaasSignAndBroadcastRequest:
      type: object
      additionalProperties: false
      required:
        - messages
        - contexts
      properties:
        messages:
          type: array
          description: >-
            One per fee attempt, in fee order: the serialized unsigned
            transaction to sign. RLP hex on EVM, message bytes on Solana.
          minItems: 1
          maxItems: 3
          items:
            $ref: '#/components/schemas/NonEmptyStringWith204800MaxLength'
        contexts:
          type: array
          description: >-
            One per fee attempt, in fee order, the same length as `messages`:
            what the signer is asked to sign. Dynamic checks it and signs the
            matching message.
          minItems: 1
          maxItems: 3
          items:
            $ref: '#/components/schemas/SignMessageContext'
        broadcastOptions:
          $ref: '#/components/schemas/WaasBroadcastOptions'
        isFormatted:
          type: boolean
          description: >-
            Whether each message is a pre-computed hash that is signed as-is.
            Send `false` for a serialized transaction.
        requestedCertainty:
          allOf:
            - $ref: '#/components/schemas/WaasRequestedCertainty'
          default: safe
        externalReference:
          type: string
          description: >-
            Your own label for this transaction, returned on every event. Not
            unique.
          minLength: 1
          maxLength: 256
          pattern: ^[\x20-\x7E]+$
        roomIds:
          type: array
          description: >-
            Signing rooms you already opened, one per attempt in fee order. When
            omitted, Dynamic opens them.
          minItems: 1
          maxItems: 3
          items:
            $ref: '#/components/schemas/WaasBroadcastRoomId'
        approvalQuorum:
          $ref: '#/components/schemas/SignMessageApprovalQuorum'
        shareSetId:
          allOf:
            - $ref: '#/components/schemas/uuid'
          description: |
            Optional identifier of the share set this operation targets. When
            omitted, the active rootUser share set for `walletId` is resolved
            server-side.
    WaasTransactionBroadcast:
      type: object
      required:
        - transactionId
        - status
        - chainType
        - chainId
        - walletAddress
        - idempotencyKey
        - requestedAt
      properties:
        transactionId:
          allOf:
            - $ref: '#/components/schemas/uuid'
          description: Dynamic's id for this transaction, the same on every event.
        status:
          $ref: '#/components/schemas/WaasBroadcastStatus'
        reason:
          $ref: '#/components/schemas/WaasTransactionBroadcastReason'
        errorMessage:
          type: string
          maxLength: 512
          description: >-
            Human-readable detail on a `reverted` or `failed` transaction,
            written by Dynamic and never a raw provider or node error. For a log
            or a support ticket; branch on `reason` instead.
        revertReason:
          type: string
          maxLength: 512
          description: >-
            The contract's own error, when the transaction landed and reverted.
            Public chain output, passed through untouched and capped in length.
        chainType:
          type: string
          enum:
            - evm
            - svm
        chainId:
          type: string
          description: >-
            An EVM chain id, or a Solana network id (101 mainnet, 103 devnet,
            201 Eclipse).
        walletAddress:
          type: string
        idempotencyKey:
          type: string
          description: The key the transaction was requested with.
        externalReference:
          type: string
          description: Your own label, as sent.
        transactionHash:
          type: string
          description: The live attempt's hash, once it is signed.
        blockExplorerUrls:
          $ref: '#/components/schemas/WaasBlockExplorerUrls'
        attempts:
          type: array
          description: Every signed version of the transaction, cheapest first.
          items:
            $ref: '#/components/schemas/WaasTransactionBroadcastAttempt'
        nonce:
          allOf:
            - $ref: '#/components/schemas/WaasHexQuantity'
          description: >-
            EVM only. The transaction's nonce, the only safe one to reuse when
            replacing it.
        replacementFee:
          allOf:
            - $ref: '#/components/schemas/WaasBroadcastEvmFee'
          description: >-
            EVM only, while the transaction is not final. The lowest fee a
            replacement at the same nonce would need to displace the live
            attempt.
        rooms:
          type: array
          description: >-
            The signing rooms, one per attempt, while status is
            pending_signature.
          items:
            $ref: '#/components/schemas/OpenRoomResponse'
        progress:
          $ref: '#/components/schemas/WaasTransactionBroadcastProgress'
        requestedAt:
          type: string
          format: date-time
        completedAt:
          type: string
          format: date-time
          description: Present when the status is terminal.
    UnprocessableEntity:
      type: object
      properties:
        error:
          description: Human-readable error message describing the validation failure
          type: string
          example: Resources already exists for this Object
        code:
          $ref: '#/components/schemas/UnprocessableEntityErrorCode'
        payload:
          $ref: '#/components/schemas/UnprocessableEntityErrorPayload'
        retryAfterSeconds:
          description: >-
            Seconds the client should wait before retrying, present on
            rate-limit errors
          type: integer
          example: 600
      required:
        - error
    BadRequest:
      type: object
      properties:
        error:
          description: Human-readable error message
          type: string
    uuid:
      type: string
      pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
      minLength: 36
      maxLength: 36
      example: 95b11417-f18f-457f-8804-68e361f9164f
    NonEmptyStringWith204800MaxLength:
      type: string
      maxLength: 204800
      description: A string with a max length of 204800 characters
    SignMessageContext:
      type: object
      properties:
        evmTransaction:
          $ref: '#/components/schemas/SignMessageEvmTransaction'
        evmUserOperation:
          $ref: '#/components/schemas/SignMessageEvmUserOperation'
        svmTransaction:
          $ref: '#/components/schemas/SignMessageSvmTransaction'
        suiTransaction:
          $ref: '#/components/schemas/SignMessageSuiTransaction'
        btcTransaction:
          $ref: '#/components/schemas/SignMessageBtcTransaction'
        eip7702Auth:
          $ref: '#/components/schemas/SignMessageEip7702Auth'
        evmMessage:
          $ref: '#/components/schemas/SignMessageEvmMessage'
        svmMessage:
          $ref: '#/components/schemas/NonEmptyStringWith204800MaxLength'
        suiMessage:
          $ref: '#/components/schemas/NonEmptyStringWith204800MaxLength'
        stellarMessage:
          $ref: '#/components/schemas/NonEmptyStringWith204800MaxLength'
        aleoMessage:
          $ref: '#/components/schemas/NonEmptyStringWith204800MaxLength'
        evmTypedData:
          $ref: '#/components/schemas/SignMessageEvmTypedData'
        rawSign:
          $ref: '#/components/schemas/SignMessageRawSign'
        domain:
          $ref: '#/components/schemas/NonEmptyDomainUrlWith255MaxLength'
    WaasBroadcastOptions:
      type: object
      description: How to send the signed transaction. Solana only.
      additionalProperties: false
      properties:
        cosignerSignatures:
          type: array
          description: >-
            Signatures from the transaction's other required signers. Dynamic
            adds only the wallet's own; a missing one is rejected with
            `missing_cosigner`.
          maxItems: 16
          items:
            $ref: '#/components/schemas/WaasBroadcastSvmCosignerSignature'
        skipPreflight:
          type: boolean
          description: Skip the network's pre-broadcast simulation.
          default: false
    WaasRequestedCertainty:
      type: string
      description: >-
        How sure to be before calling the transaction confirmed. `fast`, `safe`
        or `final`, or `chain:` followed by the chain's own value, such as
        `chain:12` or `chain:finalized`.
      maxLength: 64
      pattern: ^(fast|safe|final|chain:[a-z0-9]{1,58})$
    WaasBroadcastRoomId:
      type: string
      description: MPC room identifier for one signing session
      maxLength: 255
      pattern: ^[A-Za-z0-9_-]+$
    SignMessageApprovalQuorum:
      type: object
      description: >-
        Signing-quorum consent evidence for a business-account-governed sign —
        the Initiator's own signed Intent (or, when redeeming a stored proposal
        from a non-Initiator session, `initiatorProof` instead). A top-level
        sibling of `context`, never nested under it — `context` describes only
        the operation being signed. Approvals collected from other members are
        tracked server-side against the proposal, never sent by a client.
        `intentSignature` is required when first submitting an initiator-signed
        intent. It is omitted when redeeming an existing proposal, where the
        server matches the exact intent and restores the stored initiator
        signature.
      required:
        - intent
      properties:
        intent:
          $ref: '#/components/schemas/SignMessageApprovalQuorumIntent'
        intentSignature:
          $ref: '#/components/schemas/BusinessAccountIntentSignature'
        initiatorProof:
          allOf:
            - $ref: '#/components/schemas/NonEmptyStringWith4096MaxLength'
          description: >-
            Present when the request redeeming this Intent is not the
            Initiator's own live session. Absent means the request's own bearer
            token stands for the Initiator instead.
    WaasBroadcastStatus:
      type: string
      description: >-
        Where the transaction has got to. `stalled` means nobody is pushing it
        any more and it can return to `confirming`. Tolerate values you do not
        recognise.
      enum:
        - pending_signature
        - signed
        - broadcasting
        - confirming
        - stalled
        - completed
        - reverted
        - failed
    WaasTransactionBroadcastReason:
      type: string
      description: >-
        Why a transaction failed or stalled. Tolerate values you do not
        recognise.
      enum:
        - never_sent
        - rejected
        - expired
        - replaced
        - nonce_gap
        - ceremony_failed
        - assembly_failed
        - insufficient_funds
        - broadcaster_stopped
        - broadcaster_failed
    WaasBlockExplorerUrls:
      type: array
      items:
        type: string
        format: uri
        maxLength: 2048
    WaasTransactionBroadcastAttempt:
      type: object
      description: One signed version of the transaction, at one fee.
      required:
        - live
      properties:
        transactionHash:
          type: string
          description: Present once this attempt is signed.
        fee:
          $ref: '#/components/schemas/WaasBroadcastEvmFee'
        blockExplorerUrls:
          $ref: '#/components/schemas/WaasBlockExplorerUrls'
        live:
          type: boolean
          description: Whether this is the attempt currently sent. At most one is.
    WaasHexQuantity:
      type: string
      description: Unsigned integer as 0x-prefixed hex, without leading zeros.
      pattern: ^0x(0|[1-9a-fA-F][0-9a-fA-F]{0,63})$
    WaasBroadcastEvmFee:
      type: object
      description: >-
        One fee. Either `gasPrice`, or `maxFeePerGas` with
        `maxPriorityFeePerGas`; both styles together are rejected with
        `ambiguous_fee_style`.
      additionalProperties: false
      properties:
        gasPrice:
          $ref: '#/components/schemas/WaasHexQuantity'
        maxFeePerGas:
          $ref: '#/components/schemas/WaasHexQuantity'
        maxPriorityFeePerGas:
          $ref: '#/components/schemas/WaasHexQuantity'
    OpenRoomResponse:
      type: object
      required:
        - roomId
      properties:
        roomId:
          description: Unique identifier of the opened MPC room
          type: string
        serverKeygenIds:
          description: List of existing server-side key generation identifiers
          type: array
          items:
            $ref: '#/components/schemas/NonEmptyBase58StringWith100MaxLength'
        newServerKeygenIds:
          description: List of newly generated server-side key generation identifiers
          type: array
          items:
            $ref: '#/components/schemas/NonEmptyBase58StringWith100MaxLength'
        walletId:
          $ref: '#/components/schemas/uuid'
    WaasTransactionBroadcastProgress:
      type: object
      required:
        - reached
        - required
        - elapsedSeconds
      properties:
        reached:
          type: integer
          minimum: 0
          description: How far towards the requested certainty the transaction has got.
        required:
          type: integer
          minimum: 1
          description: Where it counts as confirmed, on the same scale as `reached`.
        elapsedSeconds:
          type: integer
          minimum: 0
          description: Seconds since the transaction was requested.
        detail:
          $ref: '#/components/schemas/WaasTransactionBroadcastProgressDetail'
    Unauthorized:
      type: object
      properties:
        error:
          description: Human-readable error message describing the authentication failure
          type: string
          example: No jwt provided!
    Forbidden:
      type: object
      properties:
        error:
          description: Human-readable error message
          type: string
          example: Access Forbidden
        code:
          description: >-
            Machine-readable reason for the 403, set only by endpoints that
            distinguish rejections. Flow endpoints use sanctions_blocked,
            session_token_invalid and risk_blocked.
          type: string
          example: sanctions_blocked
    NotFound:
      type: object
      required:
        - error
        - code
      properties:
        error:
          description: Human-readable error message
          type: string
          example: Not Found
        code:
          description: Machine-readable error code
          type: string
          example: not_found
    UnprocessableEntityErrorCode:
      type: string
      enum:
        - email_cannot_be_null
        - exchange_cannot_be_enabled
        - transfer_amount_too_small
        - transfer_address_not_whitelisted
        - invalid_scopes
        - unknown_transfer_error
        - transfer_mfa_required
        - transfer_mfa_failed
        - intent_required
        - invalid_transfer_funds
        - invalid_transfer_currency
        - invalid_exchange_provider
        - invalid_transfer_network
        - invalid_email
        - email_already_exists
        - allowlist_already_exists
        - allowlist_entry_already_exists
        - reassign_wallet_error
        - reassign_wallet_confirm
        - members_cannot_delete_themself
        - username_already_exists
        - wrong_email_verification_token
        - wrong_sms_verification_token
        - invalid_email_verification
        - invalid_sms_verification
        - invalid_verification
        - invalid_position
        - too_many_sms_verification_attempts
        - too_many_email_verification_attempts
        - too_many_verification_attempts
        - organization_name_already_exists
        - project_name_already_exists
        - wallet_not_deployed
        - email_verification_required
        - phone_verification_required
        - invite_address_required
        - provider_not_available
        - forbidden_unlink_request
        - invalid_unlink_request
        - too_many_api_tokens
        - lock_timeout
        - lock_too_many_attempts
        - nft_token_gating_not_supported_for_chain
        - empty_chain_name
        - no_enabled_email_provider
        - no_enabled_sms_provider
        - invalid_key_export_url
        - invalid_dynamic_props
        - too_many_requests
        - too_many_organizations_for_user
        - too_many_projects_for_organization
        - email_associated_with_different_provider
        - user_has_already_account_with_email
        - user_has_already_account_with_phone_number
        - other_verify_failure
        - email_tied_to_embedded_wallet
        - invalid_invite
        - social_account_already_exists
        - invalid_email_address
        - invalid_gate
        - conflicting_embedded_wallet_providers
        - invalid_user
        - invalid_cors_origins
        - invalid_mobile_deeplink_urls
        - unauthorized_mobile_deeplink_url
        - invalid_private_key_format
        - invalid_embedded_wallet_settings
        - wallet_not_support_passkey
        - recovery_email_unavailable_or_invalid
        - connect_error
        - invalid_wallet_name
        - invalid_wallet_address
        - email_recovery_disabled
        - no_compatible_wallet_service_enabled
        - missing_aa_project_id
        - linked_embedded_wallet
        - invalid_mpc_environment
        - invalid_regex
        - repeated_options
        - missing_phone_number_or_email
        - duplicate_exists
        - mfa_device_not_found
        - mfa_invalid_code
        - mfa_invalid_request
        - invalid_phone
        - gate_exists
        - invalid_embedded_wallet_chains_configuration
        - merge_accounts_confirmation
        - merge_accounts_invalid
        - invalid_wallet_id
        - unable_to_fetch_balances
        - cannot_switch_to_unique
        - custom_field_data_not_unique
        - metadata_size_exceeded
        - invalid_custom_hostname
        - blocked_user_cannot_transfer_wallet
        - feature_not_enabled_in_suborg
        - invalid_username
        - invalid_external_auth
        - invalid_chain_address_match
        - invalid_update
        - cannot_delete_last_project
        - no_hd_wallet_found
        - wallet_account_exists_for_chain
        - too_many_embedded_wallets_for_user
        - too_many_embedded_wallets_per_chain_for_user
        - invalid_session_public_key
        - custom_field_not_unique
        - invalid_aa_project_configuration
        - no_v1_embedded_wallet_found
        - embedded_wallet_address_already_linked
        - key_share_already_backed_up
        - invalid_key_shares_length
        - wallet_not_active
        - wallet_service_connection_error
        - no_global_wallet_found
        - invalid_metadata_value
        - max_passkeys_per_user
        - passkey_not_found
        - cannot_delete_passkey_linked_to_embedded_wallet
        - cannot_delete_last_sign_in_verified_credential
        - credential_not_enabled_for_sign_in
        - unsupported_chain
        - share_set_id_required
        - address_screening_byok_auth
        - address_screening_byok_quota
        - address_screening_byok_shape
        - address_screening_byok_upstream
        - captcha_settings_incomplete_key_pair
        - invalid_signed_transaction
        - signed_transaction_wallet_mismatch
        - unsupported_waas_chain
        - network_not_enabled
        - broadcast_rejected
        - broadcast_requires_resign
        - broadcast_outcome_unknown
        - broadcast_rate_limited
        - broadcast_idempotency_conflict
        - broadcast_wallet_ineligible
        - broadcast_not_submitted
        - chain_mismatch
        - network_disabled
        - missing_fee
        - missing_nonce
        - missing_gas_limit
        - ambiguous_fee_style
        - unsupported_shape
        - contract_creation_unsupported
        - multiple_transactions
        - attempt_count_mismatch
        - durable_nonce_unsupported
        - missing_cosigner
        - blockhash_too_old
        - certainty_unreachable
        - ambiguous_broadcast_identifier
        - offline_recovery_cloud_backup_conflict
        - quote_expired
        - insufficient_balance
    UnprocessableEntityErrorPayload:
      type: object
      description: >-
        Contains information which the integrating client of this API can use to
        tailor an experience to a customer to fix the underlying issue that
        triggered this error.
      properties:
        email:
          description: Email address that caused the validation error
          type: string
          format: email
          example: joe@email.com
        loginProvider:
          $ref: '#/components/schemas/ProviderEnum'
        embeddedWalletName:
          description: Embedded wallet name that caused the validation error
          type: string
        embeddedSocialSigninProvider:
          $ref: '#/components/schemas/ProviderEnum'
        mergeConflicts:
          $ref: '#/components/schemas/MergeConflicts'
        intent:
          $ref: '#/components/schemas/BusinessAccountMutationIntent'
        additionalMessages:
          description: List of additional validation error messages
          type: array
          items:
            type: string
    TooManyRequests:
      type: object
      properties:
        error:
          description: Human-readable error message indicating rate limit exceeded
          type: string
          example: Too Many Requests
    InternalServerError:
      type: object
      properties:
        error:
          description: Human-readable error message
          type: string
          example: Internal Server Error
    SignMessageEvmTransaction:
      type: object
      description: Standard EVM transaction
      properties:
        to:
          type: string
          description: Recipient address
        chainId:
          type: number
          description: Chain ID
        data:
          type: string
          description: Transaction data as hex string
        gas:
          type: string
          description: Gas limit as hex string
        gasPrice:
          type: string
          description: Gas price as hex string
        maxFeePerGas:
          type: string
          description: Maximum fee per gas as hex string
        maxPriorityFeePerGas:
          type: string
          description: Maximum priority fee per gas as hex string
        nonce:
          type: number
          description: Transaction nonce
        value:
          type: string
          description: Transaction value as hex string
      required:
        - chainId
        - to
    SignMessageEvmUserOperation:
      type: object
      description: User Operation (ERC-4337)
      properties:
        chainId:
          type: number
          description: Chain identifier needed for user operation hash calculation
        entryPoint:
          type: string
          description: Address of the entry point contract
        operation:
          $ref: '#/components/schemas/SignMessageUserOperationData'
    SignMessageSvmTransaction:
      type: object
      description: Solana serialized transactions
      properties:
        chainId:
          type: string
          description: Chain identifier
        method:
          type: string
          description: Method identifier
        serializedTransactions:
          type: array
          items:
            type: string
          description: Array of serialized transaction strings
      required:
        - chainId
        - method
        - serializedTransactions
    SignMessageSuiTransaction:
      type: object
      description: Sui BCS serialized transaction as hex string
      properties:
        chainId:
          $ref: '#/components/schemas/NonEmptyStringWith255MaxLength'
        serializedTransaction:
          $ref: '#/components/schemas/NonEmptyStringWith204800MaxLength'
      required:
        - chainId
        - serializedTransaction
    SignMessageBtcTransaction:
      type: object
      description: Bitcoin PSBT transaction for signing
      properties:
        psbt:
          type: string
          description: PSBT (Partially Signed Bitcoin Transaction) in base64 or hex format
        chainId:
          type: string
          description: Chain identifier (1=mainnet, 2=testnet, 3=signet)
        accountAddress:
          type: string
          description: >-
            Bitcoin address of the signer (deprecated - use EAC accountAddress
            instead)
      required:
        - psbt
        - chainId
    SignMessageEip7702Auth:
      type: object
      description: EIP-7702 auth
      properties:
        address:
          type: string
          description: Address that signed the authorization
        chainId:
          type: number
          description: Chain ID
        nonce:
          type: number
          description: Nonce
      required:
        - address
        - chainId
        - nonce
    SignMessageEvmMessage:
      description: >-
        EVM message that can be either a plain string or an object with raw hex
        data
      anyOf:
        - type: string
        - type: object
          required:
            - raw
          properties:
            raw:
              type: string
              description: Raw hex data
    SignMessageEvmTypedData:
      type: object
      description: EIP-712 typed data payload
      properties:
        domain:
          $ref: '#/components/schemas/Eip712Domain'
        message:
          type: object
          description: Typed data message object
        primaryType:
          description: Primary type name for EIP-712 typed data signing
          type: string
        types:
          $ref: '#/components/schemas/Eip712Types'
      required:
        - domain
        - message
        - primaryType
        - types
    SignMessageRawSign:
      type: object
      description: >-
        Chain-agnostic raw digest signing payload; the digest must equal
        hashFunction(prefix + payload)
      properties:
        payload:
          type: string
          maxLength: 204800
          description: Pre-image the digest is derived from, as a hex string
        hashFunction:
          type: string
          description: >-
            Hash applied to (prefix + payload) to reproduce the digest being
            signed. Allowed algorithms: sha512Half (e.g. XRPL single-signer),
            keccak256 (screened against EVM operations), sha256 (TRON, SVM, TON;
            guarded against 32-byte pre-hashed payloads that could reproduce a
            Bitcoin double-SHA256 sighash), and blake2b (Sui, 32-byte digest)
          enum:
            - sha512Half
            - keccak256
            - sha256
            - blake2b
        prefix:
          type: string
          maxLength: 1024
          description: >-
            Optional hex prefix prepended to the payload before hashing, e.g.
            the XRPL single-signer 'STX\0' prefix (53545800)
      required:
        - payload
        - hashFunction
    NonEmptyDomainUrlWith255MaxLength:
      type: string
      pattern: >-
        ^[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?)*\.[a-zA-Z]{2,}$|^https?:\/\/[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?)*(\.[a-zA-Z]{2,})?(:\d+)?(\/.*)?$
      maxLength: 255
      example: https://app.xyz.com
    WaasBroadcastSvmCosignerSignature:
      type: object
      additionalProperties: false
      required:
        - publicKey
        - signature
      properties:
        publicKey:
          type: string
          description: The co-signer's public key, base58.
          pattern: ^[1-9A-HJ-NP-Za-km-z]{32,44}$
        signature:
          type: string
          description: The co-signer's signature over the transaction, base58.
          pattern: ^[1-9A-HJ-NP-Za-km-z]{64,88}$
    SignMessageApprovalQuorumIntent:
      type: object
      additionalProperties: true
      description: >-
        The client-created signed Intent. The enclave checks its operation
        against the request's current signing context and MPC message.
      required:
        - intentId
        - businessAccountId
        - accountAddress
        - actionType
        - initiatorUserId
        - createdAt
        - operation
      properties:
        intentId:
          $ref: '#/components/schemas/uuid'
        businessAccountId:
          $ref: '#/components/schemas/uuid'
        accountAddress:
          $ref: '#/components/schemas/WalletPublicKey'
        actionType:
          type: string
          enum:
            - waasSigningQuorumApprove
        initiatorUserId:
          $ref: '#/components/schemas/uuid'
        createdAt:
          type: string
          description: Signed timestamp preserved as an ISO string.
        completeBy:
          type: string
          description: Signed deadline preserved as an ISO string.
        operation:
          $ref: '#/components/schemas/SignMessageApprovalQuorumIntentOperation'
        limits:
          $ref: '#/components/schemas/SignMessageApprovalQuorumIntentLimits'
    BusinessAccountIntentSignature:
      type: string
      pattern: ^[0-9a-fA-F]{128}$
      description: >
        Hex-encoded ECDSA P-256 signature over the canonicalized payload,
        produced by the signer's session key — which never leaves their device,
        so consent cannot be given on their behalf.

        Exactly 128 hex characters. WebCrypto emits the raw r‖s form with both
        halves padded to 32 bytes, so unlike DER the length never varies.
        Constrained here so a malformed value is a 400 at the edge rather than
        an enclave round trip that returns INTENT_SIGNATURE_INVALID, and so an
        unbounded string cannot be persisted against a proposal.
    NonEmptyStringWith4096MaxLength:
      type: string
      maxLength: 4096
      description: A string with a max length of 4096 characters
    NonEmptyBase58StringWith100MaxLength:
      type: string
      pattern: ^[1-9A-HJ-NP-Za-km-z]+$
      maxLength: 100
      description: A base58 string with a max length of 100 characters
    WaasTransactionBroadcastProgressDetail:
      type: object
      description: The same progress in the chain's own units.
      minProperties: 1
      maxProperties: 1
      properties:
        evm:
          $ref: '#/components/schemas/WaasTransactionBroadcastEvmProgress'
        svm:
          $ref: '#/components/schemas/WaasTransactionBroadcastSvmProgress'
    ProviderEnum:
      type: string
      description: >-
        The 'turnkey' value is deprecated and will be removed in a future
        version.
      enum:
        - emailOnly
        - magicLink
        - apple
        - bitbucket
        - coinbasesocial
        - discord
        - epicgames
        - facebook
        - farcaster
        - github
        - gitlab
        - google
        - instagram
        - linkedin
        - microsoft
        - twitch
        - twitter
        - blocto
        - banxa
        - coinbaseOnramp
        - cryptoDotCom
        - moonPay
        - dynamic
        - alchemy
        - zerodev
        - telegram
        - turnkey
        - coinbaseWaas
        - sms
        - spotify
        - tiktok
        - line
        - steam
        - shopify
        - zksync
        - kraken
        - blockaid
        - passkey
        - okta
        - sendgrid
        - resend
        - trmWalletScreening
        - chainalysisAddressScreening
        - gemini
    MergeConflicts:
      type: object
      description: >-
        Contains information needed for the SDK to surface merge conflicts when
        attempting to merge information from one user to another
      required:
        - fromUser
        - conflicts
      properties:
        fromUser:
          $ref: '#/components/schemas/SdkUser'
        conflicts:
          description: List of field-level merge conflicts between users
          type: array
          items:
            $ref: '#/components/schemas/MergeUserConflict'
    BusinessAccountMutationIntent:
      type: object
      description: >
        The initiator's proposal, signed with their session key. Built by the
        API, not the client — sign these exact bytes verbatim, because
        re-serializing can change them and invalidate the signature.

        `autoExecute` is inside the signed bytes, so an approver consents to it
        and nothing can flip it afterwards.
      additionalProperties: true
    SignMessageUserOperationData:
      type: object
      description: The actual user operation data
      properties:
        authorization:
          $ref: '#/components/schemas/SignMessageAuthorizationSignature'
        callData:
          type: string
          description: The data to pass to the sender during the main execution call
        callGasLimit:
          type: string
          description: The amount of gas to allocate the main execution call
        factory:
          type: string
          description: Account factory address (optional, only for new accounts)
        factoryData:
          type: string
          description: Data for account factory (optional)
        maxFeePerGas:
          type: string
          description: Maximum fee per gas
        maxPriorityFeePerGas:
          type: string
          description: Maximum priority fee per gas
        nonce:
          type: string
          description: Anti-replay parameter
        paymaster:
          type: string
          description: Address of paymaster contract (optional)
        paymasterData:
          type: string
          description: Data for paymaster (optional)
        paymasterPostOpGasLimit:
          type: string
          description: >-
            The amount of gas to allocate for the paymaster post-operation code
            (optional)
        paymasterVerificationGasLimit:
          type: string
          description: >-
            The amount of gas to allocate for the paymaster validation code
            (optional)
        preVerificationGas:
          type: string
          description: Extra gas to pay the Bundler
        sender:
          type: string
          description: The account making the operation
        signature:
          type: string
          description: Data passed into the account to verify authorization
        verificationGasLimit:
          type: string
          description: The amount of gas to allocate for the verification step
    NonEmptyStringWith255MaxLength:
      type: string
      pattern: ^(?=\S)[\p{L}\p{N}a-zA-Z _.,:!?&%@\/+\-'|]+(?<=\S)$
      maxLength: 255
      example: An example name
    Eip712Domain:
      type: object
      properties:
        name:
          description: Human-readable name of the signing domain
          type: string
        version:
          description: Version of the signing domain
          type: string
        chainId:
          description: Chain ID the typed data is intended for
          type: number
        verifyingContract:
          $ref: '#/components/schemas/WalletPublicKey'
    Eip712Types:
      type: object
      additionalProperties:
        type: array
        items:
          $ref: '#/components/schemas/Eip712TypeMember'
    WalletPublicKey:
      type: string
      pattern: ^[A-Za-z0-9_-]{18,100}$
      description: >-
        Valid blockchain wallet address, must be an alphanumeric string
        (underscores allowed for chains like Midnight, hyphens allowed for
        chains using base64url-encoded addresses like TON)
      example: '0xbF394748301603f18d953C90F0b087CBEC0E1834'
      maxLength: 255
    SignMessageApprovalQuorumIntentOperation:
      oneOf:
        - $ref: '#/components/schemas/SignMessageApprovalQuorumMessageOperation'
        - $ref: '#/components/schemas/SignMessageApprovalQuorumTypedDataOperation'
        - $ref: '#/components/schemas/SignMessageApprovalQuorumRawOperation'
        - $ref: '#/components/schemas/SignMessageApprovalQuorumEip7702AuthOperation'
        - $ref: '#/components/schemas/SignMessageApprovalQuorumTransactionOperation'
      discriminator:
        propertyName: kind
        mapping:
          message: '#/components/schemas/SignMessageApprovalQuorumMessageOperation'
          typedData: '#/components/schemas/SignMessageApprovalQuorumTypedDataOperation'
          raw: '#/components/schemas/SignMessageApprovalQuorumRawOperation'
          eip7702Auth: '#/components/schemas/SignMessageApprovalQuorumEip7702AuthOperation'
          transaction: '#/components/schemas/SignMessageApprovalQuorumTransactionOperation'
    SignMessageApprovalQuorumIntentLimits:
      type: object
      additionalProperties: true
      required:
        - maxGas
        - maxFeePerGas
        - maxPriorityFeePerGas
        - maxTotalFee
      properties:
        maxGas:
          type: string
        maxFeePerGas:
          type: string
        maxPriorityFeePerGas:
          type: string
        maxTotalFee:
          type: string
    WaasTransactionBroadcastEvmProgress:
      type: object
      required:
        - confirmations
      properties:
        confirmations:
          type: integer
          minimum: 0
          description: >-
            Blocks on top of the one holding the transaction, counting that
            block.
        requiredConfirmations:
          type: integer
          minimum: 1
          description: >-
            Confirmations needed. Absent when waiting for the chain's finalized
            block.
    WaasTransactionBroadcastSvmProgress:
      type: object
      required:
        - commitment
        - requiredCommitment
      properties:
        commitment:
          $ref: '#/components/schemas/WaasSvmCommitment'
        requiredCommitment:
          $ref: '#/components/schemas/WaasSvmCommitment'
    SdkUser:
      allOf:
        - $ref: '#/components/schemas/BaseUser'
        - type: object
          required:
            - verifiedCredentials
    MergeUserConflict:
      type: object
      description: >-
        Contains a merge conflict between two users with different values for
        the same user field data
      required:
        - field
        - fromUser
        - currentUser
      properties:
        field:
          $ref: '#/components/schemas/ProjectSettingsKyc'
        fromUser:
          $ref: '#/components/schemas/MergeUser'
        currentUser:
          $ref: '#/components/schemas/MergeUser'
    SignMessageAuthorizationSignature:
      type: object
      description: Authorization signature data (optional)
      properties:
        address:
          type: string
          description: Address that signed the authorization
        chainId:
          type: number
          description: Chain ID for the authorization signature
        nonce:
          type: number
          description: Nonce used in the authorization signature
        r:
          type: string
          description: R component of the ECDSA signature
        s:
          type: string
          description: S component of the ECDSA signature
        v:
          type: string
          description: V component of the ECDSA signature
        yParity:
          type: number
          description: Y parity of the signature (0 or 1)
    Eip712TypeMember:
      type: object
      required:
        - name
        - type
      properties:
        name:
          description: Name of the struct field
          type: string
        type:
          description: Solidity type of the struct field
          type: string
    SignMessageApprovalQuorumMessageOperation:
      type: object
      additionalProperties: true
      required:
        - kind
        - chainName
        - message
        - payload
      properties:
        kind:
          type: string
          pattern: ^message$
        chainName:
          type: string
        message:
          type: string
        payload:
          type: string
    SignMessageApprovalQuorumTypedDataOperation:
      type: object
      additionalProperties: true
      required:
        - kind
        - chainName
        - typedData
        - payload
      properties:
        kind:
          type: string
          pattern: ^typedData$
        chainName:
          type: string
          pattern: ^EVM$
        typedData:
          type: string
        payload:
          type: string
    SignMessageApprovalQuorumRawOperation:
      type: object
      additionalProperties: true
      required:
        - kind
        - chainName
        - rawSign
        - payload
      properties:
        kind:
          type: string
          pattern: ^raw$
        chainName:
          type: string
        rawSign:
          $ref: '#/components/schemas/SignMessageApprovalQuorumRawSign'
        payload:
          type: string
    SignMessageApprovalQuorumEip7702AuthOperation:
      type: object
      additionalProperties: true
      required:
        - kind
        - chainName
        - eip7702Auth
        - payload
      properties:
        kind:
          type: string
          pattern: ^eip7702Auth$
        chainName:
          type: string
          pattern: ^EVM$
        eip7702Auth:
          $ref: '#/components/schemas/SignMessageEip7702Auth'
        payload:
          type: string
    SignMessageApprovalQuorumTransactionOperation:
      oneOf:
        - $ref: >-
            #/components/schemas/SignMessageApprovalQuorumEvmTransactionOperation
        - $ref: >-
            #/components/schemas/SignMessageApprovalQuorumSvmTransactionOperation
      discriminator:
        propertyName: chainName
        mapping:
          EVM: >-
            #/components/schemas/SignMessageApprovalQuorumEvmTransactionOperation
          SVM: >-
            #/components/schemas/SignMessageApprovalQuorumSvmTransactionOperation
    WaasSvmCommitment:
      type: string
      description: A Solana commitment level.
      enum:
        - processed
        - confirmed
        - finalized
    BaseUser:
      type: object
      required:
        - id
        - projectEnvironmentId
      properties:
        id:
          $ref: '#/components/schemas/uuid'
        projectEnvironmentId:
          $ref: '#/components/schemas/uuid'
        verifiedCredentials:
          description: >-
            List of verified credentials (wallets, emails, social accounts)
            linked to the user
          type: array
          items:
            $ref: '#/components/schemas/JwtVerifiedCredential'
        lastVerifiedCredentialId:
          $ref: '#/components/schemas/LastVerifiedCredentialId'
        sessionId:
          $ref: '#/components/schemas/uuid'
        alias:
          $ref: '#/components/schemas/OptionalNullableNonEmptyStringWith255MaxLength'
        country:
          $ref: '#/components/schemas/CountryCode'
        email:
          description: Primary email address of the user
          type: string
          format: email
          nullable: true
          maxLength: 255
        firstName:
          $ref: '#/components/schemas/OptionalNullableNonEmptyStringWith255MaxLength'
        jobTitle:
          $ref: '#/components/schemas/OptionalNullableNonEmptyStringWith255MaxLength'
        lastName:
          $ref: '#/components/schemas/OptionalNullableNonEmptyStringWith255MaxLength'
        phoneNumber:
          description: Phone number of the user
          type: string
          nullable: true
          maxLength: 255
        policiesConsent:
          description: >-
            Whether the user has accepted the terms of service and privacy
            policy
          type: boolean
          nullable: true
        tShirtSize:
          $ref: '#/components/schemas/OptionalNullableNonEmptyStringWith255MaxLength'
        team:
          $ref: '#/components/schemas/OptionalNullableNonEmptyStringWith255MaxLength'
        username:
          $ref: '#/components/schemas/OptionalNullableNonEmptyStringWith255MaxLength'
        firstVisit:
          description: ISO 8601 timestamp of when the user first visited
          type: string
          format: date-time
        lastVisit:
          description: ISO 8601 timestamp of when the user last visited
          type: string
          format: date-time
        newUser:
          description: Whether this is a newly created user
          type: boolean
        metadata:
          description: Arbitrary key-value metadata associated with the user
          type: object
        mfaBackupCodeAcknowledgement:
          $ref: '#/components/schemas/MfaBackupCodeAcknowledgement'
        btcWallet:
          description: Bitcoin wallet address of the user
          type: string
          nullable: true
        kdaWallet:
          description: Kadena wallet address of the user
          type: string
          nullable: true
        ltcWallet:
          description: Litecoin wallet address of the user
          type: string
          nullable: true
        ckbWallet:
          description: Nervos CKB wallet address of the user
          type: string
          nullable: true
        kasWallet:
          description: Kaspa wallet address of the user
          type: string
          nullable: true
        dogeWallet:
          description: Dogecoin wallet address of the user
          type: string
          nullable: true
        emailNotification:
          description: Whether the user has opted in to email notifications
          type: boolean
          nullable: true
        discordNotification:
          description: Whether the user has opted in to Discord notifications
          type: boolean
          nullable: true
        newsletterNotification:
          description: Whether the user has opted in to newsletter notifications
          type: boolean
          nullable: true
        lists:
          type: array
          description: >-
            Access lists evaluated by Dynamic when considering access for the
            user.
          items:
            type: string
        scope:
          type: string
          description: >-
            A whitespace-separate list of permissions associated with the JWT
            token issued. This conforms to the JWT standard for scope claims:
            https://datatracker.ietf.org/doc/html/rfc8693#section-4.2
          example: superuser marketing operations
        missingFields:
          description: List of required user fields that have not yet been provided
          type: array
          items:
            $ref: '#/components/schemas/ProjectSettingsKyc'
    ProjectSettingsKyc:
      type: object
      properties:
        name:
          description: Internal name identifier of the KYC field
          type: string
        required:
          description: Whether this KYC field is required for user onboarding
          type: boolean
        enabled:
          description: Whether this KYC field is enabled for collection
          type: boolean
        unique:
          description: Whether this KYC field value must be unique across all users
          type: boolean
        verify:
          description: Whether this KYC field requires verification
          type: boolean
        type:
          $ref: '#/components/schemas/KycFieldType'
        validationRules:
          $ref: '#/components/schemas/CustomFieldValidationRules'
        validationType:
          $ref: '#/components/schemas/CustomFieldType'
        label:
          description: Display label for the KYC field shown to users
          type: string
        position:
          description: Display position order of the KYC field in the form
          type: number
      required:
        - name
        - required
        - enabled
        - unique
        - verify
    MergeUser:
      type: object
      description: Contains the current field value for the user.
      required:
        - userId
        - value
      properties:
        userId:
          $ref: '#/components/schemas/uuid'
        value:
          $ref: '#/components/schemas/NonEmptyStringWith255MaxLength'
    SignMessageApprovalQuorumRawSign:
      type: object
      additionalProperties: true
      required:
        - payload
        - hashFunction
      properties:
        payload:
          type: string
        hashFunction:
          type: string
          enum:
            - sha512Half
            - keccak256
            - sha256
            - blake2b
        prefix:
          type: string
    SignMessageApprovalQuorumEvmTransactionOperation:
      type: object
      additionalProperties: true
      required:
        - kind
        - chainName
        - chainId
        - from
        - to
        - value
        - data
        - nonce
      properties:
        kind:
          type: string
          pattern: ^transaction$
        chainName:
          type: string
          pattern: ^EVM$
        chainId:
          type: string
        from:
          type: string
        to:
          type: string
          nullable: true
        value:
          type: string
        data:
          type: string
        nonce:
          type: string
    SignMessageApprovalQuorumSvmTransactionOperation:
      type: object
      additionalProperties: true
      required:
        - kind
        - chainName
        - chainId
        - messageVersion
        - feePayer
        - header
        - staticAccountKeys
        - instructions
      properties:
        kind:
          type: string
          pattern: ^transaction$
        chainName:
          type: string
          pattern: ^SVM$
        chainId:
          type: string
        messageVersion:
          type: string
          enum:
            - legacy
            - v0
        feePayer:
          type: string
        header:
          $ref: '#/components/schemas/SignMessageApprovalQuorumIntentOperationHeader'
        staticAccountKeys:
          type: array
          items:
            type: string
        instructions:
          type: array
          items:
            $ref: >-
              #/components/schemas/SignMessageApprovalQuorumIntentOperationInstructions
    JwtVerifiedCredential:
      type: object
      required:
        - id
        - format
        - signInEnabled
      properties:
        address:
          $ref: '#/components/schemas/WalletPublicKey'
        chain:
          description: Blockchain network for this credential
          type: string
        refId:
          $ref: '#/components/schemas/uuid'
        signerRefId:
          $ref: '#/components/schemas/uuid'
        email:
          description: Email address for email-based credentials
          type: string
          format: email
        id:
          $ref: '#/components/schemas/VerifiedCredentialId'
        name_service:
          $ref: '#/components/schemas/NameServiceData'
        public_identifier:
          description: >-
            This is used to publicly identify a verified credential in a
            human-friendly way. For example, this will be the email address if
            credential format=email.
          type: string
        wallet_name:
          description: Name of the wallet provider
          type: string
        wallet_provider:
          $ref: '#/components/schemas/WalletProviderEnum'
        wallet_properties:
          $ref: '#/components/schemas/WalletProperties'
        business_account_properties:
          $ref: '#/components/schemas/BusinessAccountProperties'
        format:
          $ref: '#/components/schemas/JwtVerifiedCredentialFormatEnum'
        oauth_provider:
          $ref: '#/components/schemas/ProviderEnum'
        oauth_username:
          description: Username from the OAuth provider
          type: string
        oauth_display_name:
          description: Display name from the OAuth provider
          type: string
          nullable: true
        oauth_account_id:
          description: Unique account identifier from the OAuth provider
          type: string
          nullable: true
        phoneNumber:
          description: >-
            This field contains the phone number in the country. This could also
            contain the area code within a country.
          example: '9171113333'
          type: string
        phoneCountryCode:
          description: >-
            This field contains the phone international country code. See
            https://countrycode.org/
          example: '1'
          type: string
        isoCountryCode:
          description: >-
            ISO-3166 two-character country code. See
            https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes
          example: US
          type: string
        oauth_account_photos:
          description: List of profile photo URLs from the OAuth provider
          type: array
          items:
            type: string
        oauth_emails:
          description: List of email addresses from the OAuth provider
          type: array
          items:
            type: string
        oauth_metadata:
          type: object
          description: >-
            This object contains JSON metadata for a social-based verified
            credential. It may contain data about the user that does not fit
            into the other structured fields, and could include arbitrary fields
            about the user from the oauth provider's API.
        previous_users:
          description: >-
            This will only be provided in the responses for GET
            /users/{userId}.Previous user IDs that owned this verified
            credential and was tranfered to the current user ID.
          type: array
          items:
            $ref: '#/components/schemas/uuid'
        embedded_wallet_id:
          description: Identifier of the linked embedded wallet
          type: string
          nullable: true
        wallet_additional_addresses:
          description: List of additional addresses derived from this wallet
          type: array
          items:
            $ref: '#/components/schemas/WalletAdditionalAddress'
        lastSelectedAt:
          description: >-
            This timestamp indicates the last time this verified wallet was
            either connected to the user account or selected to become the
            primary wallet on the account.
          type: string
          format: date-time
        signInEnabled:
          type: boolean
          description: This indicates if the user can sign in with this credential
        verifiedAt:
          type: string
          format: date-time
          description: >-
            This timestamp indicates the last time this verified credential was
            verified.
    LastVerifiedCredentialId:
      description: >-
        ID of the most recently used verified credential. This would refer to a
        value in the verified credentials list
      type: string
      pattern: >-
        ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}(-zerodev)?$
      minLength: 36
      maxLength: 45
      example: 95b11417-f18f-457f-8804-68e361f9164f-zerodev
    OptionalNullableNonEmptyStringWith255MaxLength:
      type: string
      pattern: ^$|^(?=\S)[\p{L}\p{N} _.,:!?&%@\/+-]+(?<=\S)$
      example: An example name
      nullable: true
      maxLength: 255
    CountryCode:
      type: string
      nullable: true
      description: Standard ISO 3166-1 alpha-2 two-letter country code
      pattern: ^[A-Z]{2}$
      example: US
      maxLength: 255
    MfaBackupCodeAcknowledgement:
      type: string
      nullable: true
      enum:
        - pending
        - complete
    KycFieldType:
      type: string
      enum:
        - standard
        - custom
    CustomFieldValidationRules:
      type: object
      properties:
        unique:
          type: boolean
          description: If this field must be unique for every user in the environment
        regex:
          type: string
          maxLength: 255
          description: The regex pattern that the text field must match
          example: ^0x
        validOptions:
          type: array
          items:
            $ref: '#/components/schemas/CustomFieldValidValue'
          description: The dropdown options for the select field
          example:
            - label: small
            - label: medium
            - label: large
        checkboxText:
          type: string
          maxLength: 255
          description: The text that will be displayed for the checkbox field
          example: Agree to the terms and conditions
      description: Optional validation rules for the custom field
    CustomFieldType:
      type: string
      enum:
        - text
        - checkbox
        - select
    SignMessageApprovalQuorumIntentOperationHeader:
      type: object
      additionalProperties: true
      required:
        - numRequiredSignatures
        - numReadonlySignedAccounts
        - numReadonlyUnsignedAccounts
      properties:
        numRequiredSignatures:
          type: integer
        numReadonlySignedAccounts:
          type: integer
        numReadonlyUnsignedAccounts:
          type: integer
    SignMessageApprovalQuorumIntentOperationInstructions:
      type: object
      additionalProperties: true
      required:
        - programIdIndex
        - accountKeyIndexes
        - data
      properties:
        programIdIndex:
          type: integer
        accountKeyIndexes:
          type: array
          items:
            type: integer
        data:
          type: string
    VerifiedCredentialId:
      description: >-
        UUID v4 with an optional -zerodev suffix for ZeroDev EIP-7702
        smart-wallet credentials
      type: string
      pattern: >-
        ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}(-zerodev)?$
      minLength: 36
      maxLength: 45
      example: 95b11417-f18f-457f-8804-68e361f9164f-zerodev
    NameServiceData:
      type: object
      properties:
        avatar:
          description: URL of the avatar associated with the name service record
          type: string
        name:
          description: Resolved name from the name service (e.g. ENS name)
          type: string
    WalletProviderEnum:
      type: string
      enum:
        - browserExtension
        - custodialService
        - walletConnect
        - qrCode
        - deepLink
        - embeddedWallet
        - smartContractWallet
    WalletProperties:
      anyOf:
        - $ref: '#/components/schemas/TurnkeyWalletProperties'
        - $ref: '#/components/schemas/HardwareWalletProperties'
        - $ref: '#/components/schemas/CoinbaseMpcWalletProperties'
        - $ref: '#/components/schemas/SmartWalletProperties'
        - $ref: '#/components/schemas/WaasWalletProperties'
    BusinessAccountProperties:
      type: object
      description: >
        Business-account context attached to a verified credential that belongs
        to a business account. Present whenever `wallet_properties.shareSetType`
        is `businessAccountUser`; absent otherwise. Each field is namespaced by
        its source table so a caller reading the response sees exactly which
        entity the value came from (no ambiguity between member role and signer
        type, between business-account name and signer-derived names, etc.).
      required:
        - businessAccountId
        - businessAccountCreatedAt
        - businessAccountSignerId
        - businessAccountSignerType
        - businessAccountMemberRole
      properties:
        businessAccountId:
          $ref: '#/components/schemas/uuid'
        businessAccountName:
          type: string
          nullable: true
          description: Display name; user-supplied at create time. Nullable.
        businessAccountExternalRef:
          type: string
          nullable: true
          description: Developer-supplied stable ID inside the env. Nullable.
        businessAccountCreatedAt:
          type: string
          format: date-time
        businessAccountSignerId:
          $ref: '#/components/schemas/uuid'
        businessAccountSignerType:
          $ref: '#/components/schemas/BusinessAccountSignerType'
        businessAccountMemberRole:
          $ref: '#/components/schemas/HeldBusinessAccountMemberRole'
    JwtVerifiedCredentialFormatEnum:
      type: string
      enum:
        - blockchain
        - email
        - oauth
        - passkey
        - phoneNumber
        - externalUser
        - totp
    WalletAdditionalAddress:
      type: object
      description: An additional address associated with a wallet.
      required:
        - address
        - type
      properties:
        address:
          type: string
          description: An address associated with a wallet.
        publicKey:
          type: string
          description: The public key associated with the address.
        type:
          $ref: '#/components/schemas/WalletAddressType'
        network:
          type: string
          description: >-
            Network this address is encoded for (e.g. 'mainnet' | 'testnet' |
            'preview'). Present when a wallet exposes an address per network.
    CustomFieldValidValue:
      type: object
      required:
        - label
      properties:
        label:
          $ref: '#/components/schemas/NonEmptyStringWith255MaxLengthAndSpecialChars'
        key:
          $ref: '#/components/schemas/NonEmptyStringWith255MaxLengthAndSpecialChars'
    TurnkeyWalletProperties:
      deprecated: true
      type: object
      properties:
        turnkeySubOrganizationId:
          allOf:
            - $ref: '#/components/schemas/uuid'
          deprecated: true
        turnkeyPrivateKeyId:
          allOf:
            - $ref: '#/components/schemas/uuid'
          deprecated: true
        turnkeyHDWalletId:
          allOf:
            - $ref: '#/components/schemas/uuid'
          deprecated: true
        isAuthenticatorAttached:
          type: boolean
          description: >-
            Whether or not the wallet has an authenticator (passkey, api key,
            etc) attached to it.
        turnkeyUserId:
          allOf:
            - $ref: '#/components/schemas/uuid'
          deprecated: true
        isSessionKeyCompatible:
          description: Whether this wallet supports session key operations
          type: boolean
        version:
          $ref: '#/components/schemas/EmbeddedWalletVersionEnum'
        ecdsaProviderType:
          $ref: '#/components/schemas/ecdsaValidatorOptions'
        entryPointVersion:
          $ref: '#/components/schemas/ProviderEntryPointVersionEnum'
        kernelVersion:
          $ref: '#/components/schemas/ProviderKernelVersionEnum'
    HardwareWalletProperties:
      type: object
      properties:
        hardwareWallet:
          $ref: '#/components/schemas/HardwareWalletEnum'
    CoinbaseMpcWalletProperties:
      deprecated: true
      type: object
      properties:
        claimed:
          type: boolean
          description: Dynamic pregenerated this wallet and stored the passcode
        source:
          $ref: '#/components/schemas/PasswordSourceTypeEnum'
    SmartWalletProperties:
      type: object
      properties:
        entryPointVersion:
          $ref: '#/components/schemas/ProviderEntryPointVersionEnum'
        kernelVersion:
          $ref: '#/components/schemas/ProviderKernelVersionEnum'
        ecdsaProviderType:
          $ref: '#/components/schemas/ecdsaValidatorOptions'
    WaasWalletProperties:
      type: object
      properties:
        keyShares:
          description: >-
            List of key share information for the primary share set (the one
            this auth principal signs with).
          type: array
          items:
            $ref: '#/components/schemas/WalletKeyShareInfo'
        thresholdSignatureScheme:
          $ref: '#/components/schemas/ThresholdSignatureScheme'
        derivationPath:
          type: string
          description: The derivation path for the wallet
        settings:
          $ref: '#/components/schemas/WaasWalletSettings'
        shareSetId:
          type: string
          format: uuid
          description: >-
            Identifier of the primary share set (the one whose `keyShares`,
            `thresholdSignatureScheme`, `derivationPath`, and `settings` are
            inlined at the top level). Browser context: rootUser.
            Delegated-server context: delegated.
        shareSetType:
          $ref: '#/components/schemas/WaasWalletShareSetType'
        businessAccountId:
          type: string
          format: uuid
          description: >-
            Identifier of the business account that owns this wallet, when it is
            a business-account wallet; absent for personal wallets.
        otherShareSets:
          type: array
          description: >-
            All other active share sets that exist on this wallet (i.e., owned
            by other auth principals). Returned for awareness so consumers can
            see, e.g., that a delegated share set is set up alongside their
            rootUser. Server-typed share sets are never exposed.
          items:
            $ref: '#/components/schemas/WaasShareSet'
        version:
          $ref: '#/components/schemas/EmbeddedWalletVersionEnum'
    BusinessAccountSignerType:
      type: string
      description: Type of a business account signer
      enum:
        - endUser
        - server
    HeldBusinessAccountMemberRole:
      type: string
      description: >
        The role a member actually holds: a built-in (`owner`, `admin`,
        `viewer`) or a customer-defined role the account has defined. Wider than
        AssignableBusinessAccountRoleName because a held role can be `owner`,
        which cannot be assigned directly.
      pattern: ^[a-z0-9](?:[a-z0-9_-]{0,30}[a-z0-9])?$
      example: cfo
    WalletAddressType:
      type: string
      enum:
        - ordinals
        - payment
        - cosmos
        - evm
        - stellar
        - ton
        - midnight_unshielded
        - midnight_dust
        - midnight_shielded
    NonEmptyStringWith255MaxLengthAndSpecialChars:
      type: string
      pattern: ^(?=\S)[\p{L}\p{N}a-zA-Z _.,:!?&%@\/+\-'()\[\]*]+(?<=\S)$
      maxLength: 255
      example: An example name
    EmbeddedWalletVersionEnum:
      type: string
      enum:
        - V1
        - V2
        - V3
    ecdsaValidatorOptions:
      type: string
      enum:
        - zerodev_signer_to_ecdsa
        - zerodev_multi_chain
    ProviderEntryPointVersionEnum:
      type: string
      enum:
        - v6
        - v7
    ProviderKernelVersionEnum:
      type: string
      enum:
        - v2_4
        - v3_0
        - v3_1
        - v3_2
        - v3_3
    HardwareWalletEnum:
      type: string
      enum:
        - ledger
    PasswordSourceTypeEnum:
      type: string
      enum:
        - dynamic
        - user
    WalletKeyShareInfo:
      type: object
      required:
        - id
        - backupLocation
        - passwordEncrypted
      properties:
        id:
          $ref: '#/components/schemas/uuid'
        backupLocation:
          description: >-
            Where this key share is stored (e.g. "user", "dynamic",
            "googleDrive", "iCloud")
          type: string
        passwordEncrypted:
          description: >-
            Whether this key share is additionally encrypted with a
            user-provided password
          type: boolean
        walletShareDeveloperKeyEncrypted:
          description: >-
            Whether this key share is encrypted with the developer's encryption
            public key
          type: boolean
        externalKeyShareId:
          $ref: '#/components/schemas/uuid'
        keygenId:
          description: Identifier of the key generation ceremony that produced this share
          type: string
    ThresholdSignatureScheme:
      type: string
      enum:
        - TWO_OF_TWO
        - TWO_OF_THREE
        - THREE_OF_FIVE
    WaasWalletSettings:
      type: object
      properties:
        hasDeniedDelegatedAccess:
          description: Whether the user has denied delegated access for this wallet
          type: boolean
        shouldRefreshOnNextSignOn:
          description: Whether to refresh wallet key shares on the user's next sign-on
          type: boolean
        reshareOnNextSignOn:
          $ref: '#/components/schemas/ThresholdSignatureScheme'
        revokeOnNextSignOn:
          description: Whether to revoke delegated access on the user's next sign-on
          type: boolean
        variant:
          $ref: '#/components/schemas/Ed25519Variant'
    WaasWalletShareSetType:
      type: string
      enum:
        - delegated
        - rootUser
        - server
        - businessAccountUser
        - offlineRecovery
      description: The role this share set plays for the wallet
    WaasShareSet:
      type: object
      required:
        - shareSetId
        - shareSetType
        - thresholdSignatureScheme
        - createdAt
      properties:
        shareSetId:
          type: string
          format: uuid
          description: Identifier of the share set (WaasWallets row id).
        shareSetType:
          $ref: '#/components/schemas/WaasWalletShareSetType'
        thresholdSignatureScheme:
          $ref: '#/components/schemas/ThresholdSignatureScheme'
        createdAt:
          type: string
          format: date-time
          description: Timestamp when this share set was created.
    Ed25519Variant:
      type: string
      description: >-
        Protocol variant for the wallet. `ed25519Standard` = non-exportable
        Ed25519, used for raw-scalar import where the 32-byte input is the
        signing scalar itself (not an RFC-8032 seed).
        Omitted/`ed25519Exportable` = the default seed-based Ed25519. Only
        meaningful for ed25519 chains (e.g. Solana).
      enum:
        - ed25519Exportable
        - ed25519Standard
  responses:
    BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/BadRequest'
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Unauthorized'
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Forbidden'
    NotFound:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NotFound'
    UnprocessableEntity:
      description: Unprocessable Entity
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UnprocessableEntity'
    TooManyRequests:
      description: Too Many Requests
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TooManyRequests'
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InternalServerError'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.