Get Start

Choose a region#

Pick the region and endpoint closest to your servers for the lowest possible latency.

Available endpoints#

RegionEndpoint URL
Frankfurthttp://fra.landing.fast
Amsterdamhttp://ams.landing.fast
New Yorkhttp://nyc.landing.fast
Londonhttp://lon.landing.fast
Tokyohttp://toy.landing.fast

See Endpoints for the full list.

Add a tip to your transaction#

Every transaction must carry a tip. Attach a System Program transfer to a randomly selected tip account.

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


const TIP_ACCOUNTS = [
"1andAhkXmzRbuD37iuzTLnYKRkBGU7X26zw1wv2FBpT",
"1andoC8jkb9EXEz1RpgQiuGqgm8sEAsASBScS2nip4f",
"1andeJ5dyAENtyMHSHv3ZXDzJEctmqgAFvGbssqoyvH",
"1andf7rAwTZHozYhEm7ieCMvWMczGbHDNbAR5ktsmAq",
"1andxYDwQuoWuDFJ1rdyGCXET5AfEc4H3nYJkaU9Eay"
].map((a) => new PublicKey(a));

// Pick random account
const tipAccount = TIP_ACCOUNTS[Math.floor(Math.random() * TIP_ACCOUNTS.length)];

transaction.add(
  SystemProgram.transfer({
    fromPubkey: wallet.publicKey,
    toPubkey: tipAccount,
    lamports: 0.001 * LAMPORTS_PER_SOL, // 0.001 - Minimum tip. 
  })
);

See Tips for the complete list of tip accounts and recommended practices.

Submit your transaction#

Using curl#

curl -sS 'http://fra.landing.fast/' \
  -H 'Content-Type: application/json' \
  --data '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "sendTransaction",
    "params": ["<BASE64_TX>", {"encoding": "base64", "skipPreflight": true}]
  }'

Using JavaScript#

const response = await fetch(
  `http://fra.landing.fast`,
  {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      jsonrpc: "2.0",
      id: 1,
      method: "sendTransaction",
      params: [base64Transaction, { encoding: "base64", skipPreflight: true }],
    }),
  }
);

const { result: signature } = await response.json();
console.log("Submitted:", signature);

Using Rust#

use reqwest::Client;
use serde_json::json;

let client = Client::new();
let response = client
    .post(format!("http://fra.landing.fast"))
    .json(&json!({
        "jsonrpc": "2.0",
        "id": 1,
        "method": "sendTransaction",
        "params": [base64_tx, {"encoding": "base64", "skipPreflight": true}]
    }))
    .send()
    .await?;

Verify the transaction#

A successful response from Landing.fast means the transaction was forwarded not that it landed on-chain. Always confirm the signature through an RPC node.

const confirmation = await connection.confirmTransaction(signature, "confirmed");

Rate Limits#

TierTPSHow to Get
Default5Granted automatically when you create an account
UpgradedCustomOpen a ticket on Discord or Telegram

Error handling#

StatusMeaningAction
200AcceptedTransaction was forwarded successfully
429Rate LimitedSlow down and apply a backoff strategy
500Server ErrorRetry with exponential backoff
if (response.status === 429) {
  // Exponential backoff with jitter
  const delay = Math.min(1000 * Math.pow(2, attempt), 10000);
  const jitter = Math.random() * 1000;
  await sleep(delay + jitter);
}

Best practices#

  1. Simulate first. Run simulateTransaction against your primary RPC before submitting.
  2. Stick to one region. Route all traffic from a single instance to the nearest endpoint.
  3. Monitor landing rates. Use the dashboard to track how many of your transactions land successfully.
  4. Handle failures gracefully. Apply exponential backoff when retrying.
  5. Verify signatures. Always confirm transaction finality through an RPC node.