Skip to content

Quick Start ​

Start landing transactions faster with BlockSprint.

What You'll Need ​

Before you begin, make sure you have:

  • A BlockSprint account — Sign up at https://blocksprint.io
  • An API key — Created automatically when you register
  • A signed Solana transaction — Legacy, v0 or Transaction V1, ready to submit

INFO

New accounts get 50 TPS by default. Need more? Reach out on https://t.me/blocksprint.

Step 1: Grab Your API Key ​

After signing up, head to Api Keys page. Your first key is generated automatically — it starts with bs_.

Step 2: Pick Your Endpoint ​

BlockSprint runs nodes across the globe. Choose the one closest to your servers: Endpoints

Step 3: Include a Tip ​

Every transaction must include a tip. Add a SOL transfer of at least 0.001 SOL to one of the BlockSprint tip wallets:

javascript
import { SystemProgram, PublicKey, LAMPORTS_PER_SOL } from "@solana/web3.js";

// BlockSprint tip wallets - rotate to avoid write lock contention
const TIP_WALLETS = [
  "Sp1x2AqpQckPLaWnWCJUNg8k6qQexfaEWcSRKf5JcDV",
  "Sp4JHSh9cksfzXbgK7Pq2ovtn8LirLQydaJKTsiNT77",
  "Sp1xMS2cbw83SZDNr4AGqkBYYLjb3LvVnmDSrTMaHkr",
  "SpagSJmnh8E9cGT5Y431xPPaS2c1xLREGGCWN9yDeUf",
  "SpWrza9E63MQuHeGnnfzmtLVCs3pBdjyKPXUABPo9nq",
  "SpXyoqMHJEhsNQ9fHh3DTGGzrGroZ5zfDtJwFvN4kXi",
  "Spv2g3L837bVeHwkyb18LhA5P1bvJbkvaZbxcZXbwC2",
  "SpDUe5MyFGG97SmdBQMWNPbx2Et9bZt2TCbZm3TujgX",
  "SpKZ28tFzQ13kVjHhsyDEiQfkPGjA7Wmk185KcEDyuh",
  "SpxPqegfoR3QkBN7guRUiU6QfhtTW1CnKSTSSapumqm",
];


const tipWallet = TIP_WALLETS[Math.floor(Math.random() * TIP_WALLETS.length)];

// Add tip instruction to your transaction
transaction.add(
  SystemProgram.transfer({
    fromPubkey: yourWallet.publicKey,
    toPubkey: new PublicKey(tipWallet),
    lamports: 0.001 * LAMPORTS_PER_SOL, // minimum tip: 0.001 SOL
  })
);

INFO

See the Tipping Guide: https://docs.blocksprint.io/general/tipping-and-rate-limits for details.

Step 4: Send It ​

UDP (recommended). The fastest way to send: one datagram with your API key and the signed transaction wire bytes, no handshake. See UDP for the packet layout, all endpoints and full examples.

javascript
import dgram from "node:dgram";

const apiKey = Buffer.from("YOUR_API_KEY");
// txBytes = your signed transaction as raw wire bytes (Buffer)
const packet = Buffer.concat([Buffer.from([apiKey.length]), apiKey, txBytes]);

const socket = dgram.createSocket("udp4"); // create once, reuse for every send
socket.send(packet, 5000, "fra.blocksprint.io");
rust
let api_key = "YOUR_API_KEY";
// tx_bytes = your signed transaction as raw wire bytes
let mut packet = vec![api_key.len() as u8];
packet.extend_from_slice(api_key.as_bytes());
packet.extend_from_slice(&tx_bytes);

let socket = std::net::UdpSocket::bind("0.0.0.0:0")?; // create once, reuse for every send
socket.send_to(&packet, "fra.blocksprint.io:5000")?;

sendTransaction (HTTP). Also supported, but the slowest option. Use it only if you need an HTTP response; otherwise use UDP. Pass your API key as a query parameter and POST your signed transaction.

cURL

bash
curl 'https://fra.blocksprint.io?api_key=YOUR_API_KEY' \
  -X POST \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "sendTransaction",
    "params": ["YOUR_BASE64_TRANSACTION", {"encoding": "base64", "skipPreflight": true}]
  }'

JavaScript

javascript
const endpoint = "https://fra.blocksprint.io";
const apiKey = "YOUR_API_KEY";

const result = await fetch(`${endpoint}?api_key=${apiKey}`, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "sendTransaction",
    params: [base64Tx, { encoding: "base64", skipPreflight: true }],
  }),
});

const { result: txSignature } = await result.json();

Rust

rust
let endpoint = format!("https://fra.blocksprint.io?api_key={}", api_key);

let res = reqwest::Client::new()
    .post(&endpoint)
    .json(&serde_json::json!({
        "jsonrpc": "2.0",
        "id": 1,
        "method": "sendTransaction",
        "params": [base64_tx, {"encoding": "base64", "skipPreflight": true}]
    }))
    .send()
    .await?;

Handling Errors ​

CodeWhat It MeansWhat To Do
200AcceptedTransaction is being forwarded
400Invalid transaction, encoding or tipFix the transaction and its tip
401Bad API keyDouble-check your key
403Key expired, or IP not allowed for this keyCheck the key in your dashboard
5xxServer issueRetry with exponential backoff

Retry pattern:

javascript
async function sendWithRetry(tx, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    const res = await sendTransaction(tx);
    if (res.status < 500) return res;

    await new Promise(r => setTimeout(r, Math.pow(2, i) * 1000));
  }
  throw new Error("Max retries exceeded");
}

To land a transaction, rebroadcast the same signed transaction every ~2 seconds until it confirms or its blockhash expires.