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

# Broadcast a signed transaction from a Dynamic v3 WaaS wallet

> Relays an already-signed transaction from a Dynamic v3 WaaS wallet to the network. The server derives chain and wallet address from `walletId`, verifies the signed payload belongs to the wallet, owns provider selection and bounded retry/failover of the identical signed bytes, and replays a stored result when `x-idempotency-key` repeats.



## OpenAPI

````yaml https://app.dynamic.xyz/api-docs/public-api.yaml post /sdk/{environmentId}/waas/{walletId}/transactions/broadcast
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: 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.
paths:
  /sdk/{environmentId}/waas/{walletId}/transactions/broadcast:
    post:
      tags:
        - SDK
      summary: Broadcast a signed transaction from a Dynamic v3 WaaS wallet
      description: >-
        Relays an already-signed transaction from a Dynamic v3 WaaS wallet to
        the network. The server derives chain and wallet address from
        `walletId`, verifies the signed payload belongs to the wallet, owns
        provider selection and bounded retry/failover of the identical signed
        bytes, and replays a stored result when `x-idempotency-key` repeats.
      operationId: broadcastWaasTransaction
      parameters:
        - $ref: '#/components/parameters/environmentId'
        - $ref: '#/components/parameters/walletId'
        - $ref: '#/components/parameters/idempotencyKey'
      requestBody:
        description: Signed transaction broadcast request
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WaasTransactionBroadcastRequest'
      responses:
        '200':
          description: Transaction submitted or already known to the network
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasTransactionBroadcastResponse'
        '400':
          description: >-
            Malformed payload, signer mismatch, unsupported chain/network, or
            deterministic rejection (including requires-resign).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasTransactionBroadcastError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Idempotency key reused with a different signed payload
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasTransactionBroadcastError'
        '429':
          description: >-
            Broadcast rate limit exceeded for this wallet. The Retry-After
            header indicates how long to wait before retrying.
          headers:
            Retry-After:
              description: Seconds to wait before retrying the broadcast.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasTransactionBroadcastError'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '502':
          description: Provider exhaustion or ambiguous broadcast outcome
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasTransactionBroadcastError'
      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
    idempotencyKey:
      in: header
      name: x-idempotency-key
      required: true
      description: >-
        Idempotency key scoping a broadcast result. Replaying the same key with
        the identical signed payload returns the stored result; a different
        payload under the same key returns 409.
      schema:
        type: string
        minLength: 1
        maxLength: 255
  schemas:
    WaasTransactionBroadcastRequest:
      type: object
      required:
        - encoding
        - networkId
        - signedTransaction
      properties:
        encoding:
          $ref: '#/components/schemas/WaasTransactionEncoding'
        networkId:
          allOf:
            - $ref: '#/components/schemas/NonEmptyStringWith255MaxLength'
          description: Network identifier the transaction targets (e.g. "1", "101").
        signedTransaction:
          allOf:
            - $ref: '#/components/schemas/NonEmptyStringWith204800MaxLength'
          description: Immutable signed transaction payload, encoded per `encoding`.
        signatures:
          type: array
          description: >-
            Detached signatures for chains whose wire format carries them
            separately from the serialized message.
          items:
            $ref: '#/components/schemas/NonEmptyStringWith204800MaxLength'
        options:
          $ref: '#/components/schemas/WaasTransactionBroadcastOptions'
    WaasTransactionBroadcastResponse:
      type: object
      required:
        - attempts
        - broadcastId
        - status
        - transactionId
      properties:
        attempts:
          type: integer
          description: Number of submission attempts made before resolving.
        broadcastId:
          type: string
          description: Server-generated identifier for this broadcast operation.
        status:
          $ref: '#/components/schemas/WaasTransactionBroadcastStatus'
        transactionId:
          type: string
          description: Chain transaction identifier (EVM hash, Solana signature).
    WaasTransactionBroadcastError:
      type: object
      description: >-
        Standard error shape (`error`, `code`, `payload`) for broadcast
        failures. `code` reuses the shared error-code enum; `payload` carries
        broadcast metadata for SDK retry/resubmission decisions.
      required:
        - error
        - code
        - payload
      properties:
        error:
          description: Human-readable error message with no raw provider detail.
          type: string
        code:
          $ref: '#/components/schemas/UnprocessableEntityErrorCode'
        payload:
          $ref: '#/components/schemas/WaasTransactionBroadcastErrorPayload'
    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
    WaasTransactionEncoding:
      type: string
      description: Wire encoding of the signed transaction payload.
      enum:
        - hex
        - base64
        - xdr
        - json
    NonEmptyStringWith255MaxLength:
      type: string
      pattern: ^(?=\S)[\p{L}\p{N}a-zA-Z _.,:!?&%@\/+\-'|]+(?<=\S)$
      maxLength: 255
      example: An example name
    NonEmptyStringWith204800MaxLength:
      type: string
      maxLength: 204800
      description: A string with a max length of 204800 characters
    WaasTransactionBroadcastOptions:
      type: object
      description: Optional chain-specific submission options, validated server-side.
      properties:
        skipPreflight:
          type: boolean
          description: >-
            Solana only. Skips the RPC preflight simulation on submission,
            preserving sponsored-transaction semantics where a fresh preflight
            against a different provider can spuriously fail after fee-payer
            sponsorship. Ignored for other chains.
    WaasTransactionBroadcastStatus:
      type: string
      description: Terminal broadcast outcome.
      enum:
        - submitted
        - already_known
    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
        - 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
    WaasTransactionBroadcastErrorPayload:
      type: object
      description: >-
        Broadcast failure metadata carried under the standard error `payload`,
        so the SDK preserves it through `APIError.fromResponse`.
      required:
        - attempts
        - broadcastId
        - retryable
        - submissionState
      properties:
        attempts:
          type: integer
          description: Number of submission attempts made before failing.
        broadcastId:
          type: string
          description: Server-generated identifier for this broadcast operation.
        retryable:
          type: boolean
          description: Whether re-sending the identical signed payload may succeed.
        submissionState:
          $ref: '#/components/schemas/WaasTransactionBroadcastSubmissionState'
        transactionId:
          type: string
          description: Derived chain transaction identifier when available.
    Unauthorized:
      type: object
      properties:
        error:
          description: Human-readable error message describing the authentication failure
          type: string
          example: No jwt provided!
    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
    InternalServerError:
      type: object
      properties:
        error:
          description: Human-readable error message
          type: string
          example: Internal Server Error
    WaasTransactionBroadcastSubmissionState:
      type: string
      description: Whether the signed payload may have reached the network.
      enum:
        - not_submitted
        - unknown
        - requires_resign
  responses:
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Unauthorized'
    NotFound:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NotFound'
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InternalServerError'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````