Send Transaction
Submit a signed, tipped Solana transaction through 0block for prioritized forwarding via stake-weighted QoS.
A low-latency endpoint to submit signed Solana transactions through 0block with tip verification and optional preflight/commitment controls.
- Goal: land your signed transaction quickly and reliably with stake-weighted QoS.
- Tip enforcement: the transaction must include a
SystemProgramtransfer (orTransferWithSeed) of at least 0.001 SOL (1,000,000 lamports) to an allowlisted 0block tip account. - Regions:
nyc,chi,las,ams,lon,fra,sin,syd.
Prerequisites
Signed transaction
Provide a fully signed transaction, encoded as base64 or base58.
Endpoint & headers
Submit a POST to the root path of any regional endpoint:
POST https://{region}.0block.io/Authenticate with your API key using either the X-API-Key header or the ?api-key= query
parameter:
Content-Type: application/json
X-API-Key: <YOUR_API_KEY>The query-parameter form is ?api-key=<YOUR_API_KEY> (for example
https://nyc.0block.io/?api-key=...). An invalid, revoked, or unknown key is rejected
fail-closed with HTTP 401 / JSON-RPC -32004.
Request schema (JSON-RPC 2.0)
0block accepts standard JSON-RPC with method: "sendTransaction":
{
"jsonrpc": "2.0",
"id": "optional-correlation-id",
"method": "sendTransaction",
"params": [
"<SIGNED_TRANSACTION>",
{
"encoding": "base64",
"skipPreflight": false,
"preflightCommitment": "processed",
"maxRetries": 3,
"minContextSlot": 265470000
}
]
}Parameters
| Path | Type | Required | Description |
|---|---|---|---|
jsonrpc | string | No | Use "2.0". |
id | string | number | No | Echoed back in responses for correlation. |
method | string | Yes | Must be "sendTransaction". |
params[0] | string | Yes | Signed transaction as base64 or base58. Base64 padding optional. |
params[1].encoding | enum | No | "base64" or "base58". If omitted, auto-detected (base64, then base58). |
params[1].skipPreflight | boolean | No | true to bypass simulation for lower latency. |
params[1].preflightCommitment | enum | No | "processed" | "confirmed" | "finalized". |
params[1].maxRetries | integer | No | Max automatic retry attempts upstream. |
params[1].minContextSlot | integer | No | Minimum slot context required by the client. |
Tip requirement (enforced). If the transaction does not include a qualifying SystemProgram
transfer of at least 1,000,000 lamports to an allowlisted tip account, it is rejected with
-32001. The gate checks that the tip is present, not that it will be paid — a transaction
that reverts rolls back its tip.
base64+zstd is not supported — 0block does not decompress. Sending
encoding: "base64+zstd" is rejected with -32602. Send standard base64.
Examples
Minimal (auto-detect encoding)
{
"jsonrpc": "2.0",
"id": 1,
"method": "sendTransaction",
"params": ["BASE64_OR_BASE58_SIGNED_TX"]
}cURL
curl -X POST 'https://nyc.0block.io/' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: <YOUR_API_KEY>' \
-d '{
"jsonrpc": "2.0",
"id": "tx-42",
"method": "sendTransaction",
"params": [
"BASE64_SIGNED_TX",
{ "encoding": "base64", "preflightCommitment": "confirmed", "maxRetries": 5 }
]
}'JavaScript (Node)
async function sendTx(apiKey, txBase64) {
const body = {
jsonrpc: "2.0",
id: "tx-42",
method: "sendTransaction",
params: [txBase64, { encoding: "base64", preflightCommitment: "confirmed" }],
};
const res = await fetch("https://nyc.0block.io/", {
method: "POST",
headers: {
"X-API-Key": apiKey,
"Content-Type": "application/json",
},
body: JSON.stringify(body),
});
return res.json();
}Responses
On success, 0block relays the upstream Solana JSON-RPC response — typically:
{
"jsonrpc": "2.0",
"result": "5t4eBfVv8A3tN6d2zjZphqStjc6b4YbTL7Yt8Y6XWf9",
"id": "tx-42"
}where result is the transaction signature.
A result is a submission-ack, not confirmation. It means the upstream accepted the
transaction for forwarding — never that it landed, was confirmed, or that the tip was paid.
Confirm landing against a separate trusted RPC, or track it via the
dashboard telemetry.
On failure you receive a JSON-RPC error object, either from 0block's pre-checks or relayed
from the upstream.
Error codes
| Code | Meaning | When it happens |
|---|---|---|
-32700 | Parse error | Malformed JSON. |
-32600 | Invalid request | Wrong content-type, or method missing. |
-32601 | Method not found | Anything other than sendTransaction. |
-32602 | Invalid params | Missing params[0], decode failure, or unsupported encoding (including base64+zstd). |
-32000 | Malformed transaction framing | Bad signature/message framing (legacy or v0). |
-32001 | Tip verification failed | No qualifying transfer to an allowed pubkey at or above the minimum. |
-32002 | v0 address-table resolution required | Tip destination (or program id) lives behind a lookup table. |
-32004 | Unauthorized (HTTP 401) | Inbound auth is on and the API key is missing, invalid, or revoked. |
-32005 | Duplicate transaction | Same signed bytes seen within the dedup window. Retryable — not proof the original landed. |
-32098 | Upstream error | The forwarded target returned a 5xx. |
-32099 | Upstream timeout / DROPPED | Timeout or transport failure. Retryable — see below. |
-32603 | Server misconfiguration | No tip pubkeys loaded on the server. |
Retry contract for -32099 and -32005. These are retryable, but you must resubmit the
exact same serialized bytes. Never re-sign or refresh the blockhash on a transient failure:
that produces a new transaction id the leader does not dedup against the in-flight one, and if
the original eventually lands you have double-executed. A fresh blockhash is only appropriate
after the original transaction has definitively expired.
Tip accounts
The allowlisted tip accounts for the hosted service:
7ryAvKtymdDdnSqE6g8ctS7sMcmxDCZbzXoRDWSLzero
6646q6HMnzAE7BUhsWma86SebPm2VC9bW9tsDJsDzero
2ZH2unJ7NaCu3kiXaiJPDwjSjDNudFgqhMetSDJGzero
9yXPwviBkVAEWGEbCVkYhzyN7fsrybfDSYv7SeTXzero
4LFeE3G7eJDHoStjPrga6MyJdbrMG924MAyLTp3Rzero
GHjaNw8Sd8ArWZt2UqoH2rGYtzt2MspUmxcAshFkzero
MbCZkyVkpADL3kqWPf94bWXNgzwNeyjUqUXBZn5zero
AYXWDKX1wWwS6Rcydx2Z6QjS1SZhW69z2pxoEpuRzero
8kR3r5aaenaauC1qFcBVwAtMAP9GAANthrsLToe3zero
24wwbjb4vXDpfGHhH61JsPkRQzSnCFWUeiuQpXkZzeroBest practices
- Choose the nearest region to minimize latency.
- Use
skipPreflight: trueonly for high-confidence transactions. - Adjust
preflightCommitmentto trade consistency for speed. - For v0 messages, ensure the tip destination appears in the static account keys (not only
behind a lookup table), or you will get
-32002. - Reuse connections (HTTP keep-alive) for high throughput — see Transports & Connections.
Regions
| Region | Endpoint |
|---|---|
| 🇺🇸 North America (East) | https://nyc.0block.io |
| 🇺🇸 North America (Central) | https://chi.0block.io |
| 🇺🇸 North America (West) | https://las.0block.io |
| 🇳🇱 Netherlands | https://ams.0block.io |
| 🇬🇧 United Kingdom | https://lon.0block.io |
| 🇩🇪 Germany | https://fra.0block.io |
| 🇸🇬 Singapore | https://sin.0block.io |
| 🇦🇺 Australia | https://syd.0block.io |