Skip to main content
POST
/
customers
/
{customerId}
/
wallet-signers
Add a signer to a customer's wallets
curl --request POST \
  --url https://api.conduit.financial/v2/customers/{customerId}/wallet-signers \
  --header 'Content-Type: application/json' \
  --header 'Idempotency-Key: <idempotency-key>' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "email": "signer@example.com",
  "name": "Jane Doe",
  "role": "signer",
  "credentialType": "passkey",
  "publicKey": "<string>"
}
'
{
  "signer": {
    "id": "<string>",
    "email": "signer@example.com",
    "name": "Jane Doe",
    "role": "signer",
    "credentialType": "passkey",
    "passkeyCount": 0,
    "status": "active",
    "createdAt": "2026-01-15T09:30:00.000Z",
    "updatedAt": "2026-01-15T09:30:00.000Z"
  },
  "verificationUrl": "https://verify.conduit.financial/vrf_2xKjF9mQb7vN4hL1pR3w8t"
}

Authorizations

x-api-key
string
header
required

Headers

Idempotency-Key
string
required

Caller-generated unique key that lets the server safely replay this request. The cached response is returned for 5 minutes on any retry with the same key from the same API principal. Required on every state-changing money-moving or resource-creating POST.

Required string length: 1 - 128
Pattern: ^[A-Za-z0-9_.:-]{1,128}$

Path Parameters

customerId
string
required

Body

application/json
email
string<email>
required

Email address of the signer to add

Pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
Example:

"signer@example.com"

name
string

Display name of the signer

Example:

"Jane Doe"

role
enum<string>
default:signer

admin = root-quorum member + signing-quorum member; signer = signing-quorum only

Available options:
admin,
signer
credentialType
enum<string>
default:passkey

How this signer will stamp. api_key requires publicKey.

Available options:
passkey,
api_key
publicKey
string

Machine-signer P-256 compressed public key. Required when credentialType=api_key.

Pattern: ^(?:0x)?(?:02|03)[0-9a-fA-F]{64}$

Response

signer
object
required

The newly added signer

verificationUrl
string
required

URL for the signer to complete their verification

Example:

"https://verify.conduit.financial/vrf_2xKjF9mQb7vN4hL1pR3w8t"