curl --request POST \
--url https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/transactions \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <x-api-key>' \
--data '
{
"params": {
"transaction": "<string>",
"requiredSigners": [
"external-wallet:0x1234567890123456789012345678901234567890"
],
"signer": "external-wallet:0x1234567890123456789012345678901234567890"
}
}
'import requests
url = "https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/transactions"
payload = { "params": {
"transaction": "<string>",
"requiredSigners": ["external-wallet:0x1234567890123456789012345678901234567890"],
"signer": "external-wallet:0x1234567890123456789012345678901234567890"
} }
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({
params: {
transaction: '<string>',
requiredSigners: ['external-wallet:0x1234567890123456789012345678901234567890'],
signer: 'external-wallet:0x1234567890123456789012345678901234567890'
}
})
};
fetch('https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/transactions', 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}/transactions",
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([
'params' => [
'transaction' => '<string>',
'requiredSigners' => [
'external-wallet:0x1234567890123456789012345678901234567890'
],
'signer' => 'external-wallet:0x1234567890123456789012345678901234567890'
]
]),
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/2025-06-09/wallets/{walletLocator}/transactions"
payload := strings.NewReader("{\n \"params\": {\n \"transaction\": \"<string>\",\n \"requiredSigners\": [\n \"external-wallet:0x1234567890123456789012345678901234567890\"\n ],\n \"signer\": \"external-wallet:0x1234567890123456789012345678901234567890\"\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/2025-06-09/wallets/{walletLocator}/transactions")
.header("X-API-KEY", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"params\": {\n \"transaction\": \"<string>\",\n \"requiredSigners\": [\n \"external-wallet:0x1234567890123456789012345678901234567890\"\n ],\n \"signer\": \"external-wallet:0x1234567890123456789012345678901234567890\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/transactions")
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 \"params\": {\n \"transaction\": \"<string>\",\n \"requiredSigners\": [\n \"external-wallet:0x1234567890123456789012345678901234567890\"\n ],\n \"signer\": \"external-wallet:0x1234567890123456789012345678901234567890\"\n }\n}"
response = http.request(request)
puts response.read_body{
"params": {
"calls": [
{
"address": "<string>",
"functionName": "<string>",
"abi": [
"<unknown>"
],
"args": [
"<unknown>"
],
"value": "0"
}
],
"chain": "<unknown>",
"signer": {
"type": "external-wallet",
"address": "<string>",
"locator": "<string>"
}
},
"onChain": {
"userOperation": {
"sender": "<string>",
"nonce": "<string>",
"callData": "<string>",
"callGasLimit": "<string>",
"verificationGasLimit": "<string>",
"preVerificationGas": "<string>",
"maxFeePerGas": "<string>",
"maxPriorityFeePerGas": "<string>",
"signature": "<string>",
"paymaster": "<string>",
"paymasterVerificationGasLimit": "<string>",
"paymasterData": "<string>",
"paymasterPostOpGasLimit": "<string>",
"factory": "<string>",
"factoryData": "<string>"
},
"userOperationHash": "<string>",
"txId": "<string>",
"proxiedTxId": "<string>",
"explorerLink": "<string>"
},
"id": "<string>",
"createdAt": 123,
"approvals": {
"pending": [
{
"signer": {
"type": "quorum",
"locator": "<string>"
},
"quorumApprovals": {
"threshold": 123,
"remaining": 123,
"pending": [
{
"signer": {
"type": "external-wallet",
"address": "<string>",
"locator": "<string>"
},
"message": "<string>"
}
],
"submitted": [
{
"signer": {
"type": "external-wallet",
"address": "<string>",
"locator": "<string>"
},
"message": "<string>",
"signature": "<string>",
"submittedAt": 123
}
]
}
}
],
"submitted": [
{
"signer": {
"type": "quorum",
"locator": "<string>"
},
"quorumApprovals": {
"threshold": 123,
"remaining": 123,
"pending": [
{
"signer": {
"type": "external-wallet",
"address": "<string>",
"locator": "<string>"
},
"message": "<string>"
}
],
"submitted": [
{
"signer": {
"type": "external-wallet",
"address": "<string>",
"locator": "<string>"
},
"message": "<string>",
"signature": "<string>",
"submittedAt": 123
}
]
}
}
],
"required": 123
},
"completedAt": 123,
"error": {
"reason": "build_failed",
"message": "<string>",
"revertData": {}
},
"sendParams": {
"token": "<string>",
"params": {
"recipient": "<string>",
"recipientAddress": "<string>",
"amount": "<string>"
}
},
"fees": {
"estimate": "<unknown>",
"actual": "<unknown>",
"billed": {
"usd": 123
},
"billing": {}
}
}{
"error": true,
"message": "<error message>",
"code": "<string>"
}{
"error": true,
"message": "<error message>",
"code": "<string>"
}{
"error": {
"reason": "build_failed",
"message": "<string>",
"revertData": {}
},
"message": "<string>"
}Create Transaction
Creates a new transaction for the specified wallet. Transaction will be automatically broadcast once it has all necessary approvals.
API scope required: wallets:transactions.create
curl --request POST \
--url https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/transactions \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <x-api-key>' \
--data '
{
"params": {
"transaction": "<string>",
"requiredSigners": [
"external-wallet:0x1234567890123456789012345678901234567890"
],
"signer": "external-wallet:0x1234567890123456789012345678901234567890"
}
}
'import requests
url = "https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/transactions"
payload = { "params": {
"transaction": "<string>",
"requiredSigners": ["external-wallet:0x1234567890123456789012345678901234567890"],
"signer": "external-wallet:0x1234567890123456789012345678901234567890"
} }
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({
params: {
transaction: '<string>',
requiredSigners: ['external-wallet:0x1234567890123456789012345678901234567890'],
signer: 'external-wallet:0x1234567890123456789012345678901234567890'
}
})
};
fetch('https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/transactions', 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}/transactions",
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([
'params' => [
'transaction' => '<string>',
'requiredSigners' => [
'external-wallet:0x1234567890123456789012345678901234567890'
],
'signer' => 'external-wallet:0x1234567890123456789012345678901234567890'
]
]),
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/2025-06-09/wallets/{walletLocator}/transactions"
payload := strings.NewReader("{\n \"params\": {\n \"transaction\": \"<string>\",\n \"requiredSigners\": [\n \"external-wallet:0x1234567890123456789012345678901234567890\"\n ],\n \"signer\": \"external-wallet:0x1234567890123456789012345678901234567890\"\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/2025-06-09/wallets/{walletLocator}/transactions")
.header("X-API-KEY", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"params\": {\n \"transaction\": \"<string>\",\n \"requiredSigners\": [\n \"external-wallet:0x1234567890123456789012345678901234567890\"\n ],\n \"signer\": \"external-wallet:0x1234567890123456789012345678901234567890\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/transactions")
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 \"params\": {\n \"transaction\": \"<string>\",\n \"requiredSigners\": [\n \"external-wallet:0x1234567890123456789012345678901234567890\"\n ],\n \"signer\": \"external-wallet:0x1234567890123456789012345678901234567890\"\n }\n}"
response = http.request(request)
puts response.read_body{
"params": {
"calls": [
{
"address": "<string>",
"functionName": "<string>",
"abi": [
"<unknown>"
],
"args": [
"<unknown>"
],
"value": "0"
}
],
"chain": "<unknown>",
"signer": {
"type": "external-wallet",
"address": "<string>",
"locator": "<string>"
}
},
"onChain": {
"userOperation": {
"sender": "<string>",
"nonce": "<string>",
"callData": "<string>",
"callGasLimit": "<string>",
"verificationGasLimit": "<string>",
"preVerificationGas": "<string>",
"maxFeePerGas": "<string>",
"maxPriorityFeePerGas": "<string>",
"signature": "<string>",
"paymaster": "<string>",
"paymasterVerificationGasLimit": "<string>",
"paymasterData": "<string>",
"paymasterPostOpGasLimit": "<string>",
"factory": "<string>",
"factoryData": "<string>"
},
"userOperationHash": "<string>",
"txId": "<string>",
"proxiedTxId": "<string>",
"explorerLink": "<string>"
},
"id": "<string>",
"createdAt": 123,
"approvals": {
"pending": [
{
"signer": {
"type": "quorum",
"locator": "<string>"
},
"quorumApprovals": {
"threshold": 123,
"remaining": 123,
"pending": [
{
"signer": {
"type": "external-wallet",
"address": "<string>",
"locator": "<string>"
},
"message": "<string>"
}
],
"submitted": [
{
"signer": {
"type": "external-wallet",
"address": "<string>",
"locator": "<string>"
},
"message": "<string>",
"signature": "<string>",
"submittedAt": 123
}
]
}
}
],
"submitted": [
{
"signer": {
"type": "quorum",
"locator": "<string>"
},
"quorumApprovals": {
"threshold": 123,
"remaining": 123,
"pending": [
{
"signer": {
"type": "external-wallet",
"address": "<string>",
"locator": "<string>"
},
"message": "<string>"
}
],
"submitted": [
{
"signer": {
"type": "external-wallet",
"address": "<string>",
"locator": "<string>"
},
"message": "<string>",
"signature": "<string>",
"submittedAt": 123
}
]
}
}
],
"required": 123
},
"completedAt": 123,
"error": {
"reason": "build_failed",
"message": "<string>",
"revertData": {}
},
"sendParams": {
"token": "<string>",
"params": {
"recipient": "<string>",
"recipientAddress": "<string>",
"amount": "<string>"
}
},
"fees": {
"estimate": "<unknown>",
"actual": "<unknown>",
"billed": {
"usd": 123
},
"billing": {}
}
}{
"error": true,
"message": "<error message>",
"code": "<string>"
}{
"error": true,
"message": "<error message>",
"code": "<string>"
}{
"error": {
"reason": "build_failed",
"message": "<string>",
"revertData": {}
},
"message": "<string>"
}Headers
API key required for authentication
Unique key to prevent duplicate transaction creation
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>
Body
- Solana Smart Wallet
- Solana MPC Wallet
- EVM Smart Wallet
- EVM MPC Wallet
- Stellar Smart Wallet
Input schema for creating a new transaction. The parameters vary based on the wallet type (EVM vs Solana vs Stellar).
Response
The transaction has been successfully created.
- EVM Smart Wallet
- EVM MPC Wallet
- Solana Smart Wallet
- Solana MPC Wallet
- Stellar Smart Wallet
The signer registration transaction the wallet admin must sign and submit to add (on create) or revoke (on delete) the card's delegated topup signer on-chain.
The blockchain type of the wallet
evm, solana, aptos, sui, stellar The wallet type (smart or mpc)
smart, mpc 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 signature was created
Complete approval data including requirements, pending and submitted signatures
Show child attributes
Show child attributes
ISO timestamp when the transaction reached finality
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
Transaction fee information including actual transaction fees, billed amounts, and billing status
Show child attributes
Show child attributes
Was this page helpful?

