TriportRPC

Send a signed transaction

POSThttps://api.triport.io/v1/sol/sender/send

Submit a fully signed Solana transaction to the fast-mainnet edge and get back its signature.

Solanasol_send_txfree (RPS-per-tier, with a 2× burst multiplier)

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_txstringrequired
Base64-encoded, fully signed transaction.
skip_preflightbooleanoptional
Skip the preflight simulation before submission. Default false.
max_retriesintegeroptional
Number of resubmission attempts the edge performs (05). Default 0.

Response

Response fields

FieldTypeDescription
signaturestringBase58 transaction signature. Always present on success.
slotinteger (int64)Slot the transaction was observed in, when known. May be absent.

Errors

CodeMeaningWhen it happens
400Bad Requestsigned_tx missing or not valid base64, max_retries outside 05, or the decoded transaction is malformed.
401UnauthorizedMissing or invalid API key.
403ForbiddenKey lacks the sol_send_tx scope or your tier does not permit this operation.
429Too Many RequestsPer-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 at 5. 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 signature for finalized status.
  • Bundles. For atomic, all-or-none submission of up to 5 transactions, use POST /v1/sol/sender/bundle (pro tier).