curl --request POST \
--url https://staging.crossmint.com/api/2022-06-09/wallets/{walletLocator}/transactions/{transactionId}/approvals \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <x-api-key>' \
--data '
{
"approvals": [
{
"signer": "evm-keypair:0x1234...",
"signature": "0x1234567890abcdef..."
}
]
}
'import requests
url = "https://staging.crossmint.com/api/2022-06-09/wallets/{walletLocator}/transactions/{transactionId}/approvals"
payload = { "approvals": [
{
"signer": "evm-keypair:0x1234...",
"signature": "0x1234567890abcdef..."
}
] }
headers = {
"X-API-KEY": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
approvals: [{signer: 'evm-keypair:0x1234...', signature: '0x1234567890abcdef...'}]
})
};
fetch('https://staging.crossmint.com/api/2022-06-09/wallets/{walletLocator}/transactions/{transactionId}/approvals', 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/2022-06-09/wallets/{walletLocator}/transactions/{transactionId}/approvals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'approvals' => [
[
'signer' => 'evm-keypair:0x1234...',
'signature' => '0x1234567890abcdef...'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <x-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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://staging.crossmint.com/api/2022-06-09/wallets/{walletLocator}/transactions/{transactionId}/approvals"
payload := strings.NewReader("{\n \"approvals\": [\n {\n \"signer\": \"evm-keypair:0x1234...\",\n \"signature\": \"0x1234567890abcdef...\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://staging.crossmint.com/api/2022-06-09/wallets/{walletLocator}/transactions/{transactionId}/approvals")
.header("X-API-KEY", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"approvals\": [\n {\n \"signer\": \"evm-keypair:0x1234...\",\n \"signature\": \"0x1234567890abcdef...\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.crossmint.com/api/2022-06-09/wallets/{walletLocator}/transactions/{transactionId}/approvals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"approvals\": [\n {\n \"signer\": \"evm-keypair:0x1234...\",\n \"signature\": \"0x1234567890abcdef...\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "tx-b984491a-5785-43c0-8811-45d46fe6e520",
"walletType": "evm-smart-wallet",
"status": "awaiting-approval",
"approvals": {
"pending": [
{
"signer": "evm-keypair:0xdeadbeef",
"message": "Please sign this transaction"
}
],
"submitted": []
},
"params": {
"calls": [
{
"to": "0x1234567890123456789012345678901234567890",
"value": "1000000000000000000",
"data": "0x"
}
],
"chain": "base",
"signer": "evm-keypair:0xdeadbeef"
},
"onChain": {
"userOperation": "... full user operation object",
"userOperationHash": "0xf719f9570671c6eb016f1f4a95ada4278b8e91f55bc384d70c69fd756919a41c"
},
"createdAt": "2024-01-01T00:00:00Z"
}{
"error": true,
"message": "<error message>"
}{
"error": true,
"message": "<error message>"
}{
"error": true,
"message": "<error message>"
}{
"error": true,
"message": "<error message>"
}Approve Transaction
Submit approval signature for a pending transaction. Required for transactions using external signers.
API scope required: wallets:transactions.sign
curl --request POST \
--url https://staging.crossmint.com/api/2022-06-09/wallets/{walletLocator}/transactions/{transactionId}/approvals \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <x-api-key>' \
--data '
{
"approvals": [
{
"signer": "evm-keypair:0x1234...",
"signature": "0x1234567890abcdef..."
}
]
}
'import requests
url = "https://staging.crossmint.com/api/2022-06-09/wallets/{walletLocator}/transactions/{transactionId}/approvals"
payload = { "approvals": [
{
"signer": "evm-keypair:0x1234...",
"signature": "0x1234567890abcdef..."
}
] }
headers = {
"X-API-KEY": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
approvals: [{signer: 'evm-keypair:0x1234...', signature: '0x1234567890abcdef...'}]
})
};
fetch('https://staging.crossmint.com/api/2022-06-09/wallets/{walletLocator}/transactions/{transactionId}/approvals', 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/2022-06-09/wallets/{walletLocator}/transactions/{transactionId}/approvals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'approvals' => [
[
'signer' => 'evm-keypair:0x1234...',
'signature' => '0x1234567890abcdef...'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <x-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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://staging.crossmint.com/api/2022-06-09/wallets/{walletLocator}/transactions/{transactionId}/approvals"
payload := strings.NewReader("{\n \"approvals\": [\n {\n \"signer\": \"evm-keypair:0x1234...\",\n \"signature\": \"0x1234567890abcdef...\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://staging.crossmint.com/api/2022-06-09/wallets/{walletLocator}/transactions/{transactionId}/approvals")
.header("X-API-KEY", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"approvals\": [\n {\n \"signer\": \"evm-keypair:0x1234...\",\n \"signature\": \"0x1234567890abcdef...\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.crossmint.com/api/2022-06-09/wallets/{walletLocator}/transactions/{transactionId}/approvals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"approvals\": [\n {\n \"signer\": \"evm-keypair:0x1234...\",\n \"signature\": \"0x1234567890abcdef...\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "tx-b984491a-5785-43c0-8811-45d46fe6e520",
"walletType": "evm-smart-wallet",
"status": "awaiting-approval",
"approvals": {
"pending": [
{
"signer": "evm-keypair:0xdeadbeef",
"message": "Please sign this transaction"
}
],
"submitted": []
},
"params": {
"calls": [
{
"to": "0x1234567890123456789012345678901234567890",
"value": "1000000000000000000",
"data": "0x"
}
],
"chain": "base",
"signer": "evm-keypair:0xdeadbeef"
},
"onChain": {
"userOperation": "... full user operation object",
"userOperationHash": "0xf719f9570671c6eb016f1f4a95ada4278b8e91f55bc384d70c69fd756919a41c"
},
"createdAt": "2024-01-01T00:00:00Z"
}{
"error": true,
"message": "<error message>"
}{
"error": true,
"message": "<error message>"
}{
"error": true,
"message": "<error message>"
}{
"error": true,
"message": "<error message>"
}Headers
API key required for authentication
Path Parameters
A wallet locator can be of the format:
<walletAddress>email:<email>:<walletType>userId:<userId>:<walletType>userId:<userId>:<walletType>(white label user example)phoneNumber:<phoneNumber>:<walletType>twitter:<handle>:<walletType>x:<handle>:<walletType>
Body
Input for submitting one or more approvals
Array of approvals to submit for this transaction
1An EVM signature submission for a transaction
- EVM keypair signature submission payload
- EVM passkey signature submission payload
Show child attributes
Show child attributes
Response
The approval has successfully been submitted to the transaction.
- EVM transaction response
- Solana transaction response
- EVM MPC transaction response
- Solana smart wallet transaction response
Complete transaction response including status, signing requirements, and wallet type specific data
The type of wallet that created this transaction
evm-smart-wallet EVM smart wallet transaction parameters
Show child attributes
Show child attributes
EVM smart wallet transaction data including input parameters and chain specific details
Show child attributes
Show child attributes
Unique identifier for the transaction
Current status of the transaction
awaiting-approval, pending, failed, success ISO timestamp when the transaction was created
"2024-01-01T00:00:00.000Z"
Complete approval data including requirements, pending and submitted signatures
Show child attributes
Show child attributes
ISO timestamp when the transaction reached finality
"2024-01-01T00:00:00.000Z"
Error message if the transaction fails after submission
- Option 1
- Option 2
- Option 3
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?

