---
title: "Create Signature"
method: POST
path: "/2025-06-09/wallets/{walletLocator}/signatures"
---

# Create Signature

`POST /2025-06-09/wallets/{walletLocator}/signatures`

## Request

- Base URL: `https://staging.crossmint.com/api`
- URL: `https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signatures`
- Auth: none required
- TypeScript: <https://skmtc.dev/crossmint/apis/onramp/docs/2025-06-09/wallets/:walletLocator/signatures/post.ts> (a function with typed inputs; its response is checked against the schema)

Creates a new signature for signing messages or typed data.

**API scope required**: `wallets:signatures.create`

## Path parameters

- `walletLocator` string, required

## Headers

- `X-API-KEY` string, required
- `x-idempotency-key` string

## Request body

- union: Input schema for creating a new signature. The parameters vary based on the signature type.
  - object: Parameters for a message signature
    - `type` 'message', required
    - `params` object, required: Parameters for a message signature
      - `message` string, required: The message in plain text to sign
      - `signer` string: The locator for the signer who will submit this signature. Defaults to the wallet's admin signer.
      - `chain` 'arbitrum-sepolia' | 'arc-testnet' | 'avalanche-fuji' | 'curtis' | 'base-goerli' | 'base-sepolia' | 'bsc-testnet' | 'chiliz-spicy-testnet' | 'coti-testnet' | 'ethereum-goerli' | 'ethereum-sepolia' | 'hedera-testnet' | 'hypersonic-testnet' | 'lightlink-pegasus' | 'mantle-sepolia' | 'optimism-goerli' | 'optimism-sepolia' | 'polygon-amoy' | 'polygon-mumbai' | 'crossmint-private-testnet-ethereum' | 'crossmint-private-testnet-polygon' | 'rari-testnet' | 'scroll-sepolia' | 'sei-atlantic-2-testnet' | 'shape-sepolia' | 'skale-nebula-testnet' | 'soneium-minato-testnet' | 'space-testnet' | 'story-testnet' | 'verify-testnet' | 'viction-testnet' | 'xai-sepolia-testnet' | 'zkatana' | 'zkyoto' | 'zora-goerli' | 'zora-sepolia' | 'mode-sepolia' | 'u2u-nebulas' | 'zenchain-testnet' | 'abstract-testnet' | 'world-chain-sepolia' | 'plume-testnet' | 'flow-testnet' | 'tempo-testnet' | 'robinhood-chain-testnet' | 'ethereum' | 'polygon' | 'bsc' | 'optimism' | 'arbitrum' | 'base' | 'zora' | 'arbitrumnova' | 'astar-zkevm' | 'apechain' | 'hedera' | 'coti' | 'lightlink' | 'mantle' | 'skale-nebula' | 'sei-pacific-1' | 'chiliz' | 'avalanche' | 'xai' | 'shape' | 'rari' | 'scroll' | 'viction' | 'mode' | 'space' | 'soneium' | 'story' | 'u2u-solaris' | 'abstract' | 'world-chain' | 'plume' | 'flow' | 'tempo' | 'robinhood-chain': The chain on which the signature will be submitted. Required for EVM wallets, optional for others.
  - object: Parameters for a typed data signature
    - `type` 'typed-data', required
    - `params` object, required: Parameters for a typed data signature
      - `typedData` object, required
        - `domain` object, required
          - `name` string, required
          - `version` string, required
          - `chainId` number, required
          - `verifyingContract` string, required: The recipient address for this transaction call
          - `salt` string: WebAuthn authenticator data as hex string
        - `types` object, required
        - `primaryType` string, required
        - `message` object, required
      - `chain` 'arbitrum-sepolia' | 'arc-testnet' | 'avalanche-fuji' | 'curtis' | 'base-goerli' | 'base-sepolia' | 'bsc-testnet' | 'chiliz-spicy-testnet' | 'coti-testnet' | 'ethereum-goerli' | 'ethereum-sepolia' | 'hedera-testnet' | 'hypersonic-testnet' | 'lightlink-pegasus' | 'mantle-sepolia' | 'optimism-goerli' | 'optimism-sepolia' | 'polygon-amoy' | 'polygon-mumbai' | 'crossmint-private-testnet-ethereum' | 'crossmint-private-testnet-polygon' | 'rari-testnet' | 'scroll-sepolia' | 'sei-atlantic-2-testnet' | 'shape-sepolia' | 'skale-nebula-testnet' | 'soneium-minato-testnet' | 'space-testnet' | 'story-testnet' | 'verify-testnet' | 'viction-testnet' | 'xai-sepolia-testnet' | 'zkatana' | 'zkyoto' | 'zora-goerli' | 'zora-sepolia' | 'mode-sepolia' | 'u2u-nebulas' | 'zenchain-testnet' | 'abstract-testnet' | 'world-chain-sepolia' | 'plume-testnet' | 'flow-testnet' | 'tempo-testnet' | 'robinhood-chain-testnet' | 'ethereum' | 'polygon' | 'bsc' | 'optimism' | 'arbitrum' | 'base' | 'zora' | 'arbitrumnova' | 'astar-zkevm' | 'apechain' | 'hedera' | 'coti' | 'lightlink' | 'mantle' | 'skale-nebula' | 'sei-pacific-1' | 'chiliz' | 'avalanche' | 'xai' | 'shape' | 'rari' | 'scroll' | 'viction' | 'mode' | 'space' | 'soneium' | 'story' | 'u2u-solaris' | 'abstract' | 'world-chain' | 'plume' | 'flow' | 'tempo' | 'robinhood-chain', required: The chain on which the signature will be submitted
      - `signer` string: The locator for the signer who will approve this signature
      - `isSmartWalletSignature` boolean: Whether the signature corresponds to the smart wallet or to the signer. If true, the signature will be wrapped with ERC6492.
  - object: Parameters for signing Stellar authorization entries (SEP-45)
    - `type` 'auth-entries', required
    - `params` object, required: Parameters for signing Stellar authorization entries (SEP-45)
      - `authorizationEntries` string, required: Base64-encoded XDR array of all authorization entries from the SEP-45 challenge (4-byte BE count prefix + concatenated entry XDR)
      - `signer` string: The locator for the signer who will approve this entry. Defaults to the wallet's admin signer.

## Response `201`

The signature has been successfully created.

- WalletsSignatureV2025ResponseDTO
  - `id` string, required: Unique identifier for the signature
  - `type` 'message' | 'typed-data' | 'auth-entries', required: The type of signature
  - `chainType` 'evm' | 'solana' | 'aptos' | 'sui' | 'stellar', required: The blockchain type of the wallet
  - `walletType` 'smart' | 'mpc', required: The wallet type (smart or mpc)
  - `status` 'awaiting-approval' | 'pending' | 'failed' | 'success', required: Current status of the signature
  - `params` union, required: Type-specific signature parameters
    - object: Parameters for a message signature
      - `message` string, required: The message in plain text to sign
      - `signer` union: The full signer object who will submit this signature. Defaults to the wallet's admin signer.
        - object: Full External Wallet signer object
          - `type` 'external-wallet', required
          - `address` string, required: The address of the external wallet
          - `locator` string, required: The locator of the external wallet signer
        - object: Full Passkey signer object
          - `type` 'passkey', required
          - `id` string, required: The ID of the passkey
          - `locator` string, required: The locator of the passkey signer
        - object: Full API Key signer object
          - `type` 'api-key', required
          - `address` string, required: The address of the api key
          - `locator` string, required: The locator of the api key signer
        - object: Full Device signer object
          - `type` 'device', required
          - `publicKey` object, required: The p256 public key of the device signer
            - `x` string, required
            - `y` string, required
          - `locator` string, required: The locator of the device signer
          - `name` string: Optional human-readable name for the device signer
        - object
          - `type` 'email', required
          - `email` string, email, required
          - `locator` string, required
        - object
          - `type` 'phone', required
          - `phone` string, required
          - `locator` string, required
        - object
          - `type` 'server', required
          - `address` string, required
          - `locator` string, required
      - `chain` 'arbitrum-sepolia' | 'arc-testnet' | 'avalanche-fuji' | 'curtis' | 'base-goerli' | 'base-sepolia' | 'bsc-testnet' | 'chiliz-spicy-testnet' | 'coti-testnet' | 'ethereum-goerli' | 'ethereum-sepolia' | 'hedera-testnet' | 'hypersonic-testnet' | 'lightlink-pegasus' | 'mantle-sepolia' | 'optimism-goerli' | 'optimism-sepolia' | 'polygon-amoy' | 'polygon-mumbai' | 'crossmint-private-testnet-ethereum' | 'crossmint-private-testnet-polygon' | 'rari-testnet' | 'scroll-sepolia' | 'sei-atlantic-2-testnet' | 'shape-sepolia' | 'skale-nebula-testnet' | 'soneium-minato-testnet' | 'space-testnet' | 'story-testnet' | 'verify-testnet' | 'viction-testnet' | 'xai-sepolia-testnet' | 'zkatana' | 'zkyoto' | 'zora-goerli' | 'zora-sepolia' | 'mode-sepolia' | 'u2u-nebulas' | 'zenchain-testnet' | 'abstract-testnet' | 'world-chain-sepolia' | 'plume-testnet' | 'flow-testnet' | 'tempo-testnet' | 'robinhood-chain-testnet' | 'ethereum' | 'polygon' | 'bsc' | 'optimism' | 'arbitrum' | 'base' | 'zora' | 'arbitrumnova' | 'astar-zkevm' | 'apechain' | 'hedera' | 'coti' | 'lightlink' | 'mantle' | 'skale-nebula' | 'sei-pacific-1' | 'chiliz' | 'avalanche' | 'xai' | 'shape' | 'rari' | 'scroll' | 'viction' | 'mode' | 'space' | 'soneium' | 'story' | 'u2u-solaris' | 'abstract' | 'world-chain' | 'plume' | 'flow' | 'tempo' | 'robinhood-chain': The chain on which the signature will be submitted
    - object: Parameters for a typed data signature
      - `typedData` object, required
        - `domain` object, required
          - `name` string, required
          - `version` string, required
          - `chainId` number, required
          - `verifyingContract` string, required: An EVM address string
          - `salt` string: WebAuthn authenticator data as hex string
        - `types` object, required
        - `primaryType` string, required
        - `message` object, required
      - `chain` 'arbitrum-sepolia' | 'arc-testnet' | 'avalanche-fuji' | 'curtis' | 'base-goerli' | 'base-sepolia' | 'bsc-testnet' | 'chiliz-spicy-testnet' | 'coti-testnet' | 'ethereum-goerli' | 'ethereum-sepolia' | 'hedera-testnet' | 'hypersonic-testnet' | 'lightlink-pegasus' | 'mantle-sepolia' | 'optimism-goerli' | 'optimism-sepolia' | 'polygon-amoy' | 'polygon-mumbai' | 'crossmint-private-testnet-ethereum' | 'crossmint-private-testnet-polygon' | 'rari-testnet' | 'scroll-sepolia' | 'sei-atlantic-2-testnet' | 'shape-sepolia' | 'skale-nebula-testnet' | 'soneium-minato-testnet' | 'space-testnet' | 'story-testnet' | 'verify-testnet' | 'viction-testnet' | 'xai-sepolia-testnet' | 'zkatana' | 'zkyoto' | 'zora-goerli' | 'zora-sepolia' | 'mode-sepolia' | 'u2u-nebulas' | 'zenchain-testnet' | 'abstract-testnet' | 'world-chain-sepolia' | 'plume-testnet' | 'flow-testnet' | 'tempo-testnet' | 'robinhood-chain-testnet' | 'ethereum' | 'polygon' | 'bsc' | 'optimism' | 'arbitrum' | 'base' | 'zora' | 'arbitrumnova' | 'astar-zkevm' | 'apechain' | 'hedera' | 'coti' | 'lightlink' | 'mantle' | 'skale-nebula' | 'sei-pacific-1' | 'chiliz' | 'avalanche' | 'xai' | 'shape' | 'rari' | 'scroll' | 'viction' | 'mode' | 'space' | 'soneium' | 'story' | 'u2u-solaris' | 'abstract' | 'world-chain' | 'plume' | 'flow' | 'tempo' | 'robinhood-chain', required: The chain on which the signature will be submitted
      - `signer` union: The full signer object who will approve this signature
        - object: Full External Wallet signer object
          - `type` 'external-wallet', required
          - `address` string, required: The address of the external wallet
          - `locator` string, required: The locator of the external wallet signer
        - object: Full Passkey signer object
          - `type` 'passkey', required
          - `id` string, required: The ID of the passkey
          - `locator` string, required: The locator of the passkey signer
        - object: Full API Key signer object
          - `type` 'api-key', required
          - `address` string, required: The address of the api key
          - `locator` string, required: The locator of the api key signer
        - object: Full Device signer object
          - `type` 'device', required
          - `publicKey` object, required: The p256 public key of the device signer
            - `x` string, required
            - `y` string, required
          - `locator` string, required: The locator of the device signer
          - `name` string: Optional human-readable name for the device signer
        - object
          - `type` 'email', required
          - `email` string, email, required
          - `locator` string, required
        - object
          - `type` 'phone', required
          - `phone` string, required
          - `locator` string, required
        - object
          - `type` 'server', required
          - `address` string, required
          - `locator` string, required
      - `isSmartWalletSignature` boolean: Whether the signature corresponds to the smart wallet or to the signer. If true, the signature will be wrapped with ERC6492.
    - object: Parameters for Stellar authorization entries signature (SEP-45)
      - `authorizationEntries` string, required: Base64-encoded XDR array of the authorization entries
      - `signer` union: The full signer object who will approve this entry
        - object: Full External Wallet signer object
          - `type` 'external-wallet', required
          - `address` string, required: The address of the external wallet
          - `locator` string, required: The locator of the external wallet signer
        - object: Full Passkey signer object
          - `type` 'passkey', required
          - `id` string, required: The ID of the passkey
          - `locator` string, required: The locator of the passkey signer
        - object: Full API Key signer object
          - `type` 'api-key', required
          - `address` string, required: The address of the api key
          - `locator` string, required: The locator of the api key signer
        - object: Full Device signer object
          - `type` 'device', required
          - `publicKey` object, required: The p256 public key of the device signer
            - `x` string, required
            - `y` string, required
          - `locator` string, required: The locator of the device signer
          - `name` string: Optional human-readable name for the device signer
        - object
          - `type` 'email', required
          - `email` string, email, required
          - `locator` string, required
        - object
          - `type` 'phone', required
          - `phone` string, required
          - `locator` string, required
        - object
          - `type` 'server', required
          - `address` string, required
          - `locator` string, required
  - `approvals` object, required: Complete approval data including requirements, pending and submitted signatures
    - `pending` union[]: List of pending signatures
      - union
        - object: Approval entry for a quorum (multisig) admin signer
          - `signer` object, required: The quorum signer this approval entry belongs to
            - `type` 'quorum', required
            - `locator` string, required: The derived `quorum:<id>` locator of the quorum signer
          - `quorumApprovals` object, required: Per-member progress of an m-of-n quorum signer
            - `threshold` number, required: Number of member approvals required to satisfy the quorum
            - `remaining` number, required: Number of member approvals still outstanding to reach the threshold
            - `pending` object[], required: Quorum members that have not yet submitted
              - …
            - `submitted` object[], required: Quorum members that have already submitted
              - …
        - object
          - `signer` union, required: The full signer object who submitted this signature
            - object: Full External Wallet signer object
              - …
            - object: Full Passkey signer object
              - …
            - object: Full API Key signer object
              - …
            - object: Full Device signer object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
          - `message` string, required: The message that needs to be signed
    - `submitted` union[]: Record of all submitted signatures
      - union
        - object: Approval entry for a quorum (multisig) admin signer
          - `signer` object, required: The quorum signer this approval entry belongs to
            - `type` 'quorum', required
            - `locator` string, required: The derived `quorum:<id>` locator of the quorum signer
          - `quorumApprovals` object, required: Per-member progress of an m-of-n quorum signer
            - `threshold` number, required: Number of member approvals required to satisfy the quorum
            - `remaining` number, required: Number of member approvals still outstanding to reach the threshold
            - `pending` object[], required: Quorum members that have not yet submitted
              - …
            - `submitted` object[], required: Quorum members that have already submitted
              - …
        - object
          - `signature` string, required: The cryptographic signature
          - `submittedAt` union, required: ISO timestamp when the signature was created
            - number: ISO 8601 formatted timestamp
            - string
          - `signer` union, required: The full signer object who submitted this signature
            - object: Full External Wallet signer object
              - …
            - object: Full Passkey signer object
              - …
            - object: Full API Key signer object
              - …
            - object: Full Device signer object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
          - `message` string, required: The message that was signed
          - `metadata` object: Additional metadata about the signature submission
            - `deviceInfo` string
            - `ipAddress` string
            - `userAgent` string
    - `required` number: Number of required approvals for the transaction
  - `createdAt` union, required: ISO timestamp when the signature was created
    - number: ISO 8601 formatted timestamp
    - string
  - `completedAt` union: ISO timestamp when the transaction reached finality
    - number: ISO 8601 formatted timestamp
    - string
  - `error` unknown
  - `outputSignature` string: The wallet's output signature of the request

## Other responses

- `400`: Returns an error if the signature type is not supported
- `404`: Returns an error if a wallet with the specified locator not found

---

[API](https://skmtc.dev/crossmint/apis/onramp.md) - [All operations](https://skmtc.dev/crossmint/apis/onramp/llms.txt) - [OpenAPI document](https://skmtc.dev/crossmint/apis/onramp/revisions/e2143d192130?raw)
