curl --request GET \
--url https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signers/{signer} \
--header 'X-API-KEY: <api-key>'import requests
url = "https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signers/{signer}"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signers/{signer}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signers/{signer}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signers/{signer}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signers/{signer}")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signers/{signer}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"locator": "<string>",
"members": [
{
"address": "<string>",
"locator": "<string>",
"phone": "<string>",
"type": "phone"
}
],
"threshold": 4503599627370496,
"type": "quorum",
"chains": {},
"expiresAt": 123,
"scopes": [
{
"spendingLimit": {
"amount": "10",
"interval": 86400
},
"tokenLocator": "base-sepolia:usdc",
"type": "transfer"
}
]
}{
"error": true,
"message": "<error message>",
"code": "DEVICE_SIGNER_NOT_SUPPORTED"
}Get Delegated Signer
Retrieve details about a specific delegated signer by its locator.
API scope required: wallets.read
curl --request GET \
--url https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signers/{signer} \
--header 'X-API-KEY: <api-key>'import requests
url = "https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signers/{signer}"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signers/{signer}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signers/{signer}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signers/{signer}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signers/{signer}")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/signers/{signer}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"locator": "<string>",
"members": [
{
"address": "<string>",
"locator": "<string>",
"phone": "<string>",
"type": "phone"
}
],
"threshold": 4503599627370496,
"type": "quorum",
"chains": {},
"expiresAt": 123,
"scopes": [
{
"spendingLimit": {
"amount": "10",
"interval": 86400
},
"tokenLocator": "base-sepolia:usdc",
"type": "transfer"
}
]
}{
"error": true,
"message": "<error message>",
"code": "DEVICE_SIGNER_NOT_SUPPORTED"
}Authorizations
API key required for authentication
Path Parameters
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>
The locator for the signer
"external-wallet:0x1234567890123456789012345678901234567890"
Response
The delegated signer has been successfully retrieved.
- EVM Delegated Signer Response
- EVM Delegated Signer Response
- EVM Delegated Signer Response
- EVM Delegated Signer Response
- EVM Delegated Signer Response
- EVM Delegated Signer Response
- EVM Delegated Signer Response
- EVM Delegated Signer Response
- Stellar Delegated Signer Response
- Stellar Delegated Signer Response
- Stellar Delegated Signer Response
- Stellar Delegated Signer Response
- Stellar Delegated Signer Response
- Stellar Delegated Signer Response
- Stellar Delegated Signer Response
- Stellar Delegated Signer Response
- Solana Delegated Signer Response
- Solana Delegated Signer Response
- Solana Delegated Signer Response
- Solana Delegated Signer Response
- Solana Delegated Signer Response
- Solana Delegated Signer Response
- Solana Delegated Signer Response
Complete delegated signer response including the signer and authorizations for each chain
The quorum's locator, generated when it was added. Name it as signer to act as the quorum.
^quorum:[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$The member signers, each under its own locator
Configuration for a phone signer
- Phone Signer
- Server Signer
- Email Signer
- External Wallet Signer
- Passkey Signer
Show child attributes
Show child attributes
The number of member signatures required to approve
1 <= x <= 9007199254740991Identifier for quorum (multisig) signer type
"quorum"Authorization for each chain, keyed by chain name. The value is either a signature request (signature flow) or an on-chain registration transaction (deployImmediately flow).
Show child attributes
Show child attributes
The expiry date of the signer in ISO 8601 format
Optional array of scopes restricting the signer's capabilities
Show child attributes
Show child attributes
[ { "spendingLimit": { "amount": "10", "interval": 86400 }, "tokenLocator": "base-sepolia:usdc", "type": "transfer" } ]
Was this page helpful?

