> ## Documentation Index
> Fetch the complete documentation index at: https://cobo.com/products/agentic-wallet/manual/llms.txt
> Use this file to discover all available pages before exploring further.

# Sign a message

> This operation signs a message using the specified wallet via the Cobo WaaS platform. Currently supports EIP-712 structured data signing, with future support planned for raw hash signing, BTC signatures, and other schemes.

Set `destination_type` to select the signing method:
- `eip712` (default): EIP-712 typed structured data signing. Requires an EVM-compatible chain and the `eip712_typed_data` payload field.

Set `sync=true` (default) to wait synchronously for the signing result before responding. Set `sync=false` to return immediately after submission; poll the transaction record to retrieve the signature later.

Supply `request_id` to enable idempotency. If a message-sign transaction with the same `request_id` already exists for the same principal, the existing record is returned with `idempotent=true`.

The operation returns an error if a policy denies the signing request.



## OpenAPI

````yaml post /api/v1/wallets/{wallet_uuid}/message-sign
openapi: 3.1.0
info:
  title: Cobo Agentic Wallet Service
  description: Unified wallet engine for human and agent principals
  version: 1.3.0
servers: []
security: []
paths:
  /api/v1/wallets/{wallet_uuid}/message-sign:
    post:
      tags:
        - Transactions
      summary: Sign a message
      description: >-
        This operation signs a message using the specified wallet via the Cobo
        WaaS platform. Currently supports EIP-712 structured data signing, with
        future support planned for raw hash signing, BTC signatures, and other
        schemes.


        Set `destination_type` to select the signing method:

        - `eip712` (default): EIP-712 typed structured data signing. Requires an
        EVM-compatible chain and the `eip712_typed_data` payload field.


        Set `sync=true` (default) to wait synchronously for the signing result
        before responding. Set `sync=false` to return immediately after
        submission; poll the transaction record to retrieve the signature later.


        Supply `request_id` to enable idempotency. If a message-sign transaction
        with the same `request_id` already exists for the same principal, the
        existing record is returned with `idempotent=true`.


        The operation returns an error if a policy denies the signing request.
      operationId: message_sign
      parameters:
        - name: wallet_uuid
          in: path
          required: true
          schema:
            type: string
            format: uuid
            description: >-
              The UUID of the wallet that will sign the message. Retrieve this
              value from the `id` field returned when the wallet was created.
            title: Wallet Uuid
          description: >-
            The UUID of the wallet that will sign the message. Retrieve this
            value from the `id` field returned when the wallet was created.
        - name: X-API-Key
          in: header
          required: false
          schema:
            title: X-Api-Key
            type: string
            nullable: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MessageSignCreate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardResponse_MessageSignResult_'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WrappedValidationError'
components:
  schemas:
    MessageSignCreate:
      properties:
        chain_id:
          type: string
          title: Chain Id
          description: CAW/WaaS chain ID, e.g. 'ETH', 'SETH'
        destination_type:
          $ref: '#/components/schemas/MessageSignDestType'
          description: Signing type. Determines which payload field is used.
          default: eip712
        eip712_typed_data:
          title: Eip712 Typed Data
          description: >-
            Complete EIP-712 typed data: {domain, types, primaryType, message}.
            Required when destination_type='eip712'.
          additionalProperties: true
          type: object
          nullable: true
        source_address:
          title: Source Address
          description: >-
            Specific address to sign with. If omitted, the wallet's most
            recently created address for this chain is used.
          type: string
          nullable: true
        description:
          title: Description
          type: string
          maxLength: 512
          nullable: true
        sync:
          type: boolean
          title: Sync
          description: >-
            True: wait for signature before responding. False: return
            immediately after submit.
          default: true
        request_id:
          title: Request Id
          description: Idempotency key. Replays are scoped to the same principal.
          type: string
          maxLength: 255
          nullable: true
      type: object
      required:
        - chain_id
      title: MessageSignCreate
      description: >-
        Request payload for message signing.


        Currently supports EIP-712 structured data signing.

        The ``destination_type`` field determines which payload field is
        required.
    StandardResponse_MessageSignResult_:
      properties:
        success:
          type: boolean
          title: Success
          default: true
        result:
          $ref: '#/components/schemas/MessageSignResult'
        suggestion:
          type: string
          title: Suggestion
          default: ''
        message:
          type: string
          title: Message
          default: ''
        meta:
          $ref: '#/components/schemas/PaginationMeta'
          nullable: true
      type: object
      required:
        - result
      title: StandardResponse[MessageSignResult]
    WrappedValidationError:
      title: WrappedValidationError
      type: object
      required:
        - success
        - error
      properties:
        success:
          type: boolean
          const: false
          default: false
          title: Success
        error:
          type: object
          title: Error
          required:
            - detail
          properties:
            detail:
              type: array
              title: Detail
              items:
                $ref: '#/components/schemas/ValidationError'
    MessageSignDestType:
      type: string
      enum:
        - eip712
      title: MessageSignDestType
      description: Supported message signing destination types.
    MessageSignResult:
      properties:
        id:
          title: Id
          description: >-
            User transaction UUID assigned at submission time. Null if creation
            failed before assignment.
          type: string
          format: uuid
          nullable: true
        idempotent:
          type: boolean
          title: Idempotent
          description: >-
            Whether this response was returned from a previously submitted
            request with the same `request_id`. `true`: idempotent replay.
            `false`: new submission.
          default: false
        request_id:
          title: Request Id
          description: Client-supplied request identifier used for idempotency.
          type: string
          nullable: true
        status:
          type: integer
          title: Status
          description: >-
            The user transaction status code. Typical values: 100 (pending
            approval), 900 (success), 901 (failed), 902 (rejected).
        status_display:
          type: string
          title: Status Display
          description: >-
            The human-readable user transaction status (for example,
            `Initiated`, `Processing`, `Success`, `Failed`).
          default: ''
        approval_id:
          title: Approval Id
          description: >-
            The Approval V2 record ID when `status=pending_approval`. Use this
            to track the approval via the Approvals operations.
          type: string
          format: uuid
          nullable: true
        destination_type:
          $ref: '#/components/schemas/MessageSignDestType'
          description: 'Signing type used for this request. Possible values: `eip712`.'
          nullable: true
        signature:
          title: Signature
          description: Hex-encoded signature (e.g. 0x...). Null if not yet completed.
          type: string
          nullable: true
      type: object
      required:
        - status
      title: MessageSignResult
      description: Response for message signing.
    PaginationMeta:
      properties:
        total:
          title: Total
          type: integer
          nullable: true
        offset:
          title: Offset
          type: integer
          nullable: true
        limit:
          title: Limit
          type: integer
          nullable: true
        has_more:
          title: Has More
          type: boolean
          nullable: true
        after:
          title: After
          type: string
          nullable: true
        before:
          title: Before
          type: string
          nullable: true
      type: object
      title: PaginationMeta
      description: |-
        Pagination metadata for list responses.

        Supports both legacy offset-based and cursor-based pagination.
        Cursor fields (``has_more``, ``after``, ``before``) are populated for
        cursor-paginated endpoints.  Legacy fields (``offset``, ``limit``) are
        populated when the caller uses the deprecated ``offset`` parameter.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError

````