Skip to main content
POST
/
2025-06-09
/
wallets
/
{walletLocator}
/
signers
Create Delegated Signer
curl --request POST \
  --url https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signers \
  --header 'Content-Type: application/json' \
  --header 'X-API-KEY: <x-api-key>' \
  --data '
{
  "signer": {
    "type": "passkey",
    "id": "cWtP7gmZbd98HbKUuGXx5Q",
    "name": "hgranger",
    "publicKey": {
      "x": "38035223810536273945556366218149112558607829411547667975304293530457502824247",
      "y": "91117823763706733837104303008228095481082989039135234750508288790583476078729"
    }
  },
  "chain": "<unknown>",
  "expiresAt": "2023-11-07T05:31:56Z"
}
'
{
  "type": "passkey",
  "id": "cWtP7gmZbd98HbKUuGXx5Q",
  "name": "hgranger",
  "publicKey": {
    "x": "38035223810536273945556366218149112558607829411547667975304293530457502824247",
    "y": "91117823763706733837104303008228095481082989039135234750508288790583476078729"
  },
  "validatorContractVersion": "0.2.0",
  "locator": "passkey:cWtP7gmZbd98HbKUuGXx5Q"
}

Headers

X-API-KEY
string
required

API key required for authentication

Path Parameters

walletLocator
string
required

A wallet locator can be of the format:

  • <walletAddress>
  • email:<email>:<chainType>[:<walletType>][:alias:<alias>] (walletType defaults to 'smart')
  • userId:<userId>:<chainType>[:<walletType>][:alias:<alias>] (white label user example)
  • phoneNumber:<phoneNumber>:<chainType>[:<walletType>][:alias:<alias>]
  • twitter:<handle>:<chainType>[:<walletType>][:alias:<alias>]
  • x:<handle>:<chainType>[:<walletType>][:alias:<alias>]
  • me:<chainType>[:<walletType>][:alias:<alias>] (Use when calling from the client side with a client API key)
  • chainType[:<walletType>]:alias:<alias>

Body

application/json

Parameters for creating a EVM delegated signer

signer
required

Configuration for a WebAuthn/Passkey signer that uses public key credentials for authentication

Example:
{
"type": "passkey",
"id": "cWtP7gmZbd98HbKUuGXx5Q",
"name": "hgranger",
"publicKey": {
"x": "38035223810536273945556366218149112558607829411547667975304293530457502824247",
"y": "91117823763706733837104303008228095481082989039135234750508288790583476078729"
}
}
chain
any
required

The chain where the signer will be registered

expiresAt
string<date-time>

The expiry date of the signer in ISO 8601 format

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$

Response

The delegated signer has been successfully created.

Complete delegated signer response including the signer and authorization transaction

type
enum<string>
required

Identifier for the Passkey signer type

Available options:
passkey
id
string
required

Credential ID from the WebAuthn registration response

name
string
required

Human-readable name for the passkey

publicKey
object
required

The public key coordinates from the WebAuthn credential

validatorContractVersion
string
required

ERC-7579 webAuthn validator contract version

locator
string
required

Unique identifier for locating this passkey signer

scopes
Transfer · object[]

Optional array of scopes restricting the signer's capabilities

Example:
{
"type": "transfer",
"tokenLocator": "solana:sol",
"spendingLimit": { "amount": "1" }
}
expiresAt

The expiry date of the signer in ISO 8601 format

transaction
object

The transaction for the signer