Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Land transactions faster and more consistently.
Nozomi is a fully custom proprietary client written by HPC and HFT engineers designed to land transactions as fast as possible.
Sniper Bots: Snipe tokens and mints before the competition.
Defi Apps: Create a better UX so user transactions do not stall or fail.
Traders: Land with speed and precision to capture the most opportunities.
Liquidators: Be first to a liquidation transaction.
Jito Bundle Users: Get through the block engine faster and more efficient.
Algorithmic traders: Get predictability with your bots in all market conditions.
Nozomi sends transactions through multiple channels to achieve best performance.
Nozomi is a URL that supports the `sendTransaction` Solana RPC method. Just insert the URL where you would place a RPC URL. Transactions are sent through 1) Self hosted nodes 2) Staked connections and 3) Jito bundles.
PITT: http://pit1.nozomi.temporal.xyz/?c=
TYO: http://tyo1.nozomi.temporal.xyz/?c=
SG: http://sgp1.nozomi.temporal.xyz/?c=
EWR: http://ewr1.nozomi.temporal.xyz/?c=
AMS: http://ams1.nozomi.temporal.xyz/?c=
FRA: http://fra2.nozomi.temporal.xyz/?c=
AMS: https://ams1.secure.nozomi.temporal.xyz/?c=
TYO: http://tyo1.secure.nozomi.temporal.xyz/?c=
SG: http://sgp1.secure.nozomi.temporal.xyz/?c=
EWR: https://ewr1.secure.nozomi.temporal.xyz/?c=
PITT: https://pit1.secure.nozomi.temporal.xyz/?c=
FRA: http://fra2.secure.nozomi.temporal.xyz/?c=
HTTP POST Body
{
"jsonrpc": "2.0",
"id": 1,
"method": "sendTransaction",
"params": [
"<base64_encoded_tx>",
{ "encoding": "base64" }
]
}
Just add API Key after ?c=<uuid>
to get custom URL for sending.
Regional submission endpoints are in US East, Frankfurt and Amsterdam.
All boxes are run with custom hardware modifications.
Please specify base64 encoding.
Each transaction must include a system transfer instruction to the Nozomi tip address, with a minimum tip of 0.001 SOL. Increasing the tip raises your transaction’s priority in the queue—higher tips settle faster.
These tips compensate the Jito tip and pay validators for staked connections. If Jito validates the transaction, the tip goes to the Jito validator. In that case, Nozomi forwards the entire tip to Jito.
Here is a breakdown of tips by percentile.
Send your tip to any one of these 17 addresses. To optimize performance and avoid write CU exhaustion, use a random different address for each transaction.
"TEMPaMeCRFAS9EKF53Jd6KpHxgL47uWLcpFArU1Fanq",
"noz3jAjPiHuBPqiSPkkugaJDkJscPuRhYnSpbi8UvC4",
"noz3str9KXfpKknefHji8L1mPgimezaiUyCHYMDv1GE",
"noz6uoYCDijhu1V7cutCpwxNiSovEwLdRHPwmgCGDNo",
"noz9EPNcT7WH6Sou3sr3GGjHQYVkN3DNirpbvDkv9YJ",
"nozc5yT15LazbLTFVZzoNZCwjh3yUtW86LoUyqsBu4L",
"nozFrhfnNGoyqwVuwPAW4aaGqempx4PU6g6D9CJMv7Z",
"nozievPk7HyK1Rqy1MPJwVQ7qQg2QoJGyP71oeDwbsu",
"noznbgwYnBLDHu8wcQVCEw6kDrXkPdKkydGJGNXGvL7",
"nozNVWs5N8mgzuD3qigrCG2UoKxZttxzZ85pvAQVrbP",
"nozpEGbwx4BcGp6pvEdAh1JoC2CQGZdU6HbNP1v2p6P",
"nozrhjhkCr3zXT3BiT4WCodYCUFeQvcdUkM7MqhKqge",
"nozrwQtWhEdrA6W8dkbt9gnUaMs52PdAv5byipnadq3",
"nozUacTVWub3cL4mJmGCYjKZTnE9RbdY5AP46iQgbPJ",
"nozWCyTPppJjRuw2fpzDhhWbW355fzosWSzrrMYB1Qk",
"nozWNju6dY353eMkMqURqwQEoM3SFgEKC6psLCSfUne",
"nozxNBgWohjR75vdspfxR5H9ceC7XXH99xpxhVGt3Bb"
Nozomi gets your transaction to the scheduler. At this point, priority fees matter. It is recommended to set CU price to at least 1,000,000
, or expect subpar performance.
Nozomi will retry transactions until confirmation or expiry. Nozomi will prioritize retries based on the amount tipped.
Each API key has an associated rate limit.
Clients with high failure rate will have a QoS penalty to their priority. For example if only 10% of your transactions successfully land, your priority will be discounted to 10%. This is based on last 30 minutes of transaction sending.
What makes Nozomi unique is how it routes transactions through the TPU. It knows exactly when and how to send transactions.
Nozomi does not simulate transactions.
There is Front Running Protection URL that only sends optimized Jito bundles.
Temporal has a blacklist of sandwiching validators that is constantly being updated. The firm is actively working with Solana stakeholders to unstake malicious validators. It is hard to perfect this process, because new validators with no history can be malicious. Temporal is constantly updating its data and process in order to improve validator rankings.
Set strict slippage tolerances and calculate minAmountOut to have protections against front-running.
Only pay the tip if you execute your desired opportunity. Since the tip is a transfer, if you detect someone captured the opportunity you wanted, you can fail your transaction to avoid paying the tip.
If you are a high tipper, please reach out for custom rate limits.
Reach out via Telegram: @ h3ll0wrld
Github URL for Jupiter Swap Transactions.
Stream Nozomi Tip Floors by Percentile
curl https://api.nozomi.temporal.xyz/tip_floor
wscat -c wss://api.nozomi.temporal.xyz/tip_stream
[
{
"time": "string (ISO 8601 timestamp)",
"landed_tips_25th_percentile": "number",
"landed_tips_50th_percentile": "number",
"landed_tips_75th_percentile": "number",
"landed_tips_95th_percentile": "number",
"landed_tips_99th_percentile": "number"
}
]
Use full service rpc for getting blockhash. Nozomi only support sendTransaction.
NOZOMI_TIP = PublicKey("TEMPaMeCRFAS9EKF53Jd6KpHxgL47uWLcpFArU1Fanq") MIN_TIP_AMOUNT = 1_000_000
def send_nozomi_tx(ixs, signer, rpc_client): # Create transfer instruction tip_ix = transfer(TransferParams( from_pubkey=signer.public_key, to_pubkey=NOZOMI_TIP, lamports=MIN_TIP_AMOUNT )) ixs.append(tip_ix)
# Get the latest blockhash
blockhash = rpc_client.get_recent_blockhash()['result']['value']['blockhash']
# Create and sign transaction
tx = Transaction().add(*ixs)
tx.recent_blockhash = blockhash
tx.sign(signer)
# Send transaction
rpc_client.send_transaction(tx, signer)
Use full service rpc for getting blockhash. Nozomi only support sendTransaction.
const NOZOMI_TIP: Pubkey = pubkey!("TEMPaMeCRFAS9EKF53Jd6KpHxgL47uWLcpFArU1Fanq");
const MIN_TIP_AMOUNT: u64 = 1_000_000;
fn send_nozomi_tx(ixs: &mut Vec<Instruction>, signer: &Keypair, rpc_client: &RpcClient) {
let tip_ix = system_instruction::transfer(&signer.pubkey(), &NOZOMI_TIP, MIN_TIP_AMOUNT);
ixs.push(tip_ix);
let blockhash = rpc_client.get_latest_blockhash().unwrap();
let tx = Transaction::new_signed_with_payer(ixs, Some(&signer.pubkey()), &[signer], blockhash);
rpc_client.send_transaction(&tx).unwrap();
}
```
Please specify base64 encoding, Solana recognizes base58 as default. If you do not specify, you might get malformed transaction error
curl <url> -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"id": 1,
"method": "sendTransaction",
"params": [ "<base64_tx_data>",
{
"encoding": "base64",
}
]
}
Use full service rpc for getting blockhash. Nozomi only support sendTransaction.
const NOZOMI_TIP = new PublicKey("TEMPaMeCRFAS9EKF53Jd6KpHxgL47uWLcpFArU1Fanq");
const MIN_TIP_AMOUNT = 1000000;
async function sendNozomiTx(ixs, signer, rpcClient) {
const tipIx = SystemProgram.transfer({
fromPubkey: signer.publicKey,
toPubkey: NOZOMI_TIP,
lamports: MIN_TIP_AMOUNT,
});
ixs.push(tipIx);
const { blockhash } = await rpcClient.getLatestBlockhash();
const tx = new Transaction().add(...ixs);
tx.recentBlockhash = blockhash;
tx.feePayer = signer.publicKey;
tx.sign(signer);
const signature = await rpcClient.sendTransaction(tx, [signer]);
console.log("Transaction sent with signature:", signature);
}
To keep your TCP connection to our server alive and avoid reconnecting, you can periodically send a simple request to the /ping
endpoint.
The server supports persistent connections with a keep-alive timeout of 65 seconds. This means:
If your connection is idle for more than 65 seconds, it will be closed.
To keep it open, send any request before that timeout expires.
Each connection can send max 1000 requests.
We recommend using the /ping
endpoint:
GET /ping
This endpoint is lightweight, fast, and designed specifically to help maintain your connection.
Send a request to /ping
every 60 seconds to keep the connection alive reliably.
Example:
while true; do
curl -s http://nozomi.temporal.xyz/ping > /dev/null
sleep 60
done
This is not a health check — it's just a way to prevent idle disconnects
Avoid pinging more often than needed
Use full service rpc for getting blockhash. Nozomi only support sendTransaction.
// Define constants
const NOZOMI_TIP = new PublicKey("TEMPaMeCRFAS9EKF53Jd6KpHxgL47uWLcpFArU1Fanq");
const MIN_TIP_AMOUNT = 1_000_000;
async function sendNozomiTx(
ixs: TransactionInstruction[],
signer: Keypair,
rpcClient: Connection
): Promise<void> {
// Create transfer instruction
const tipIx = SystemProgram.transfer({
fromPubkey: signer.publicKey,
toPubkey: NOZOMI_TIP,
lamports: MIN_TIP_AMOUNT,
});
ixs.push(tipIx);
// Get the latest blockhash
const { blockhash } = await rpcClient.getLatestBlockhash();
// Create transaction and sign it
const tx = new Transaction().add(...ixs);
tx.recentBlockhash = blockhash;
tx.feePayer = signer.publicKey;
tx.sign(signer);
// Send the transaction
const signature = await rpcClient.sendTransaction(tx, [signer]);
console.log("Transaction sent with signature:", signature);
}