> ## 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 message with a WAAS wallet

> Signs a message using the specified WAAS wallet through an MPC ceremony.



## OpenAPI

````yaml https://app.dynamic.xyz/api-docs/public-api.yaml post /sdk/{environmentId}/waas/{walletId}/signMessage
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: 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: 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}/signMessage:
    post:
      tags:
        - SDK
      summary: Sign a message with a WAAS wallet
      description: Signs a message using the specified WAAS wallet through an MPC ceremony.
      operationId: signMessage
      parameters:
        - $ref: '#/components/parameters/environmentId'
        - $ref: '#/components/parameters/walletId'
      requestBody:
        description: Sign Message Request
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SignMessageWithWaasRequest'
      responses:
        '200':
          description: Successfully created a room for signing message ceremony
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OpenRoomResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '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
  schemas:
    SignMessageWithWaasRequest:
      type: object
      required:
        - message
      properties:
        message:
          $ref: '#/components/schemas/NonEmptyStringWith204800MaxLength'
        isFormatted:
          description: >-
            When true, `message` is treated as a pre-computed 32-byte hash (64
            hex characters, optionally with a leading `0x`) and signed by the
            MPC server as-is ("raw signing"). When false or omitted, the SDK
            hashes the message bytes using the chain's standard algorithm (e.g.
            keccak256 for EVM).
          type: boolean
        roomId:
          description: MPC room identifier for the signing session
          type: string
        context:
          $ref: '#/components/schemas/SignMessageContext'
        bitcoinConfig:
          $ref: '#/components/schemas/WalletBitcoinConfig'
        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 (backwards-compat fallback for older SDKs).
    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'
    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'
        evmTypedData:
          $ref: '#/components/schemas/SignMessageEvmTypedData'
        domain:
          $ref: '#/components/schemas/NonEmptyDomainUrlWith255MaxLength'
    WalletBitcoinConfig:
      type: object
      properties:
        addressType:
          description: Bitcoin address type format (e.g. p2wpkh, p2sh, p2pkh)
          type: string
        network:
          description: Bitcoin network identifier (e.g. mainnet, testnet)
          type: string
    NonEmptyBase58StringWith100MaxLength:
      type: string
      pattern: ^[1-9A-HJ-NP-Za-km-z]+$
      maxLength: 100
      description: A base58 string with a max length of 100 characters
    BadRequest:
      type: object
      properties:
        error:
          description: Human-readable error message
          type: string
    Unauthorized:
      type: object
      properties:
        error:
          description: Human-readable error message describing the authentication failure
          type: string
          example: No jwt provided!
    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
    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
    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'
    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)
    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
    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
  responses:
    BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/BadRequest'
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Unauthorized'
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InternalServerError'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````