Send a signed transaction
https://api.triport.io/v1/sol/sender/sendSubmit a fully signed Solana transaction to the fast-mainnet edge and get back its signature.
Forwards a base64-encoded, fully signed transaction to the fast-mainnet submission edge with priority handling. Use this when you have already built and signed a transaction client-side and just need it landed on-chain quickly.
The endpoint returns as soon as the transaction is accepted by the edge,
reporting the transaction signature and (when available) the slot it was
seen in. The signature lets you poll confirmation status through the standard
JSON-RPC getSignatureStatuses method or subscribe via WebSocket.
Submissions are distributed across a multi-IP residential egress pool, which reduces the chance of a single source IP being throttled during high-contention windows. This is transparent to the caller — you always submit to the same endpoint.
To submit several transactions together with all-or-none semantics, use the bundle endpoint instead (see Notes).
Parameters
Request body (application/json):
signed_txstringrequiredskip_preflightbooleanoptionalfalse.max_retriesintegeroptional0–5). Default 0.Response
Response fields
| Field | Type | Description |
|---|---|---|
signature | string | Base58 transaction signature. Always present on success. |
slot | integer (int64) | Slot the transaction was observed in, when known. May be absent. |
Errors
| Code | Meaning | When it happens |
|---|---|---|
400 | Bad Request | signed_tx missing or not valid base64, max_retries outside 0–5, or the decoded transaction is malformed. |
401 | Unauthorized | Missing or invalid API key. |
403 | Forbidden | Key lacks the sol_send_tx scope or your tier does not permit this operation. |
429 | Too Many Requests | Per-tier RPS (plus burst) exceeded. Back off and retry. |
All errors use the shared error envelope — see errors for the
full response shape and Retry-After semantics on 429.
Examples
JavaScript (fetch)
const res = await fetch("https://api.triport.io/v1/sol/sender/send", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.TRIPORT_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
signed_tx: signedTxBase64, // base64 of a fully signed transaction
skip_preflight: false,
max_retries: 2,
}),
});
if (!res.ok) throw new Error(`send failed: ${res.status}`);
const { signature, slot } = await res.json();
console.log("submitted", signature, "at slot", slot);TypeScript SDK (@triport/sdk)
import { Triport } from "@triport/sdk";
const triport = new Triport({ apiKey: process.env.TRIPORT_API_KEY! });
const { signature, slot } = await triport.sol.sender.send({
signedTx: signedTxBase64,
skipPreflight: false,
maxRetries: 2,
});
console.log(signature, slot);Python (triport-sdk)
import os
from triport import Triport
triport = Triport(api_key=os.environ["TRIPORT_API_KEY"])
result = triport.sol.sender.send(
signed_tx=signed_tx_base64,
skip_preflight=False,
max_retries=2,
)
print(result["signature"], result.get("slot"))Notes
- Sign client-side. The transaction must be fully signed and serialized before encoding to base64; the edge does not sign on your behalf.
skip_preflight. Skipping preflight is faster but submits without a simulation check — only do this when you have already validated the transaction locally.max_retries. Capped at5. The edge resubmits the same signed transaction up to this many times while a recent blockhash remains valid.- Confirmation. This call confirms acceptance, not landing. Poll the
returned
signaturefor finalized status. - Bundles. For atomic, all-or-none submission of up to 5 transactions, use
POST /v1/sol/sender/bundle(pro tier).