send-transaction
About 2 min
Send Transaction API
Overview
The Send Transaction API provides two formats for submitting Solana transactions: standard JSON-RPC 2.0 format and custom REST API format.
Service Information
- Base URL:
http://ams.flashblock.trade
- Authentication: Authorization Header required
- Protocol: HTTP/HTTPS
API Endpoints
1. JSON-RPC Transaction Submission
POST /
Submit transactions using JSON-RPC 2.0 specification.
Request Format:
{
"jsonrpc": "2.0",
"id": 1,
"method": "sendBundle",
"params": [
[
"base64_encoded_transaction_1",
"base64_encoded_transaction_2"
],
{
"encoding": "base64"
}
]
}
Request Parameters:
jsonrpc
: Fixed value "2.0"id
: Request ID for response matchingmethod
: Fixed value "sendBundle"params
: Parameter arrayparams[0]
: Array of base64-encoded transactionsparams[1]
: Encoding configuration objectencoding
: Encoding format, fixed as "base64"
Request Headers:
Content-Type: application/json
Authorization: YOUR_API_KEY
Success Response:
{
"jsonrpc": "2.0",
"result": "5XHA7ofPAf3FaLUAY3kT52c...",
"id": 1
}
Error Response:
{
"jsonrpc": "2.0",
"error": {
"code": -1009,
"message": "Missing or invalid Authorization header",
"data": null
},
"id": null
}
Error Codes:
-1009
: Missing or invalid Authorization header-1010
: Transaction length too short or doesn't meet requirements-1013
: Bundle method setting error, requires sendBundle
2. Custom REST API Transaction Submission
POST /api/v2/submit-batch
Submit transactions using custom REST API format.
Request Format:
{
"transactions": [
"base64_encoded_transaction_1",
"base64_encoded_transaction_2"
]
}
Request Parameters:
transactions
: Array of base64-encoded transactions (optional, defaults to empty array)
Request Headers:
Content-Type: application/json
Authorization: YOUR_API_KEY
Success Response:
{
"success": true,
"code": 200,
"message": "The transaction was submitted successfully, but the status of the transaction is pending.",
"data": {
"signatures": [
"5XHA7ofPAf3FaLUAY3kT52c...",
"4cmupyS9kyiEbfsW8kZkyEh..."
]
}
}
Error Response:
{
"success": false,
"code": 1009,
"message": "Missing or invalid Authorization header",
"data": {
"signatures": []
}
}
Error Codes:
1009
: Missing or invalid Authorization header1010
: Transaction length too short or doesn't meet requirements
Transaction Limits
- Maximum Transactions: 4 transactions per submission
- Transaction Format: All transactions must be valid base64 encoded
- Minimum Tip: Each transaction must include at least 0.001 SOL tip
Best Practices
Tip Integration Recommendation
It's recommended to include the tip directly in the original transaction rather than creating a separate tip transaction, regardless of the number of transactions. This approach:
- Reduces transaction count and complexity
- Improves transaction success rate
- Minimizes gas costs
- Provides better atomicity
- Ensures consistent transaction ordering
Example Code
JavaScript/Node.js
JSON-RPC Format
const axios = require('axios');
async function submitTransactionRPC(transactions, apiKey) {
const payload = {
jsonrpc: "2.0",
id: 1,
method: "sendBundle",
params: [
transactions,
{ encoding: "base64" }
]
};
const response = await axios.post('http://ams.flashblock.trade/', payload, {
headers: {
'Content-Type': 'application/json',
'Authorization': apiKey
}
});
return response.data;
}
Custom API Format
async function submitTransactionAPI(transactions, apiKey) {
const payload = {
transactions: transactions
};
const response = await axios.post('http://ams.flashblock.trade/api/v2/submit-batch', payload, {
headers: {
'Content-Type': 'application/json',
'Authorization': apiKey
}
});
return response.data;
}
Python
JSON-RPC Format
import requests
def submit_transaction_rpc(transactions, api_key):
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "sendBundle",
"params": [
transactions,
{"encoding": "base64"}
]
}
headers = {
'Content-Type': 'application/json',
'Authorization': api_key
}
response = requests.post('http://ams.flashblock.trade/',
json=payload,
headers=headers)
return response.json()
Custom API Format
def submit_transaction_api(transactions, api_key):
payload = {
"transactions": transactions
}
headers = {
'Content-Type': 'application/json',
'Authorization': api_key
}
response = requests.post('http://ams.flashblock.trade/api/v2/submit-batch',
json=payload,
headers=headers)
return response.json()