0block docs
API

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 SystemProgram transfer (or TransferWithSeed) 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

API key

Get one self-serve from the dashboard or via Discord.

Tip

Include a transfer of at least 0.001 SOL to one of the official tip accounts (listed below).

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

PathTypeRequiredDescription
jsonrpcstringNoUse "2.0".
idstring | numberNoEchoed back in responses for correlation.
methodstringYesMust be "sendTransaction".
params[0]stringYesSigned transaction as base64 or base58. Base64 padding optional.
params[1].encodingenumNo"base64" or "base58". If omitted, auto-detected (base64, then base58).
params[1].skipPreflightbooleanNotrue to bypass simulation for lower latency.
params[1].preflightCommitmentenumNo"processed" | "confirmed" | "finalized".
params[1].maxRetriesintegerNoMax automatic retry attempts upstream.
params[1].minContextSlotintegerNoMinimum 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

CodeMeaningWhen it happens
-32700Parse errorMalformed JSON.
-32600Invalid requestWrong content-type, or method missing.
-32601Method not foundAnything other than sendTransaction.
-32602Invalid paramsMissing params[0], decode failure, or unsupported encoding (including base64+zstd).
-32000Malformed transaction framingBad signature/message framing (legacy or v0).
-32001Tip verification failedNo qualifying transfer to an allowed pubkey at or above the minimum.
-32002v0 address-table resolution requiredTip destination (or program id) lives behind a lookup table.
-32004Unauthorized (HTTP 401)Inbound auth is on and the API key is missing, invalid, or revoked.
-32005Duplicate transactionSame signed bytes seen within the dedup window. Retryable — not proof the original landed.
-32098Upstream errorThe forwarded target returned a 5xx.
-32099Upstream timeout / DROPPEDTimeout or transport failure. Retryable — see below.
-32603Server misconfigurationNo 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
24wwbjb4vXDpfGHhH61JsPkRQzSnCFWUeiuQpXkZzero

Best practices

  • Choose the nearest region to minimize latency.
  • Use skipPreflight: true only for high-confidence transactions.
  • Adjust preflightCommitment to 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

RegionEndpoint
🇺🇸 North America (East)https://nyc.0block.io
🇺🇸 North America (Central)https://chi.0block.io
🇺🇸 North America (West)https://las.0block.io
🇳🇱 Netherlandshttps://ams.0block.io
🇬🇧 United Kingdomhttps://lon.0block.io
🇩🇪 Germanyhttps://fra.0block.io
🇸🇬 Singaporehttps://sin.0block.io
🇦🇺 Australiahttps://syd.0block.io