Send Transactions

Send already-signed Solana transactions to the network through cubestech. Your transaction is forwarded unchanged: nothing is added to it, reordered or re-signed.

Sends are prepaid in SOL and priced per send, and a send that does not land is refunded.

Endpoint

text
POST https://send-cubestech.site.nodeshop.app/v1/transactions
GET  https://send-cubestech.site.nodeshop.app/v1/health

Authentication

Every send carries your API key as a bearer token. Find the key on the Send page of your dashboard; treat it like a wallet key, because it cannot sign for you but it spends your balance.

http
Authorization: Bearer YOUR_API_KEY

Send a transaction

The body is JSON with one field, transaction: the base64 of a fully signed legacy or versioned transaction, at most 1,232 bytes before encoding.

bash
curl -sS https://send-cubestech.site.nodeshop.app/v1/transactions \
  -H "Authorization: Bearer $SEND_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"transaction\":\"$TRANSACTION_BASE64\"}"
typescript
const res = await fetch("https://send-cubestech.site.nodeshop.app/v1/transactions", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.SEND_API_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ transaction: Buffer.from(tx.serialize()).toString("base64") }),
});
if (!res.ok) { const { error } = await res.json(); throw new Error(`${error.code}: ${error.message}`); }
console.log((await res.json()).signature);

The receipt

json
{
  "signature": "5Nx3...qT7w",
  "accepted": true,
  "duplicate": false,
  "charged_lamports": 200000,
  "balance_remaining_lamports": 49800000,
  "payment_mode": "balance"
}
FieldMeaning
signatureThe transaction signature, read from the bytes you sent.
acceptedThe send was forwarded and acknowledged. It is not a landing guarantee: confirm the signature on chain.
duplicateThe same signature was already accepted in the last 90 seconds. It is not forwarded or charged again.
charged_lamportsWhat this send reserved from your balance. It settles when the transaction lands.
balance_remaining_lamportsYour balance after this send.
payment_modebalance for a prepaid send.

Amounts are in lamports (1 SOL = 1,000,000,000 lamports) at this store's price per send.

Balance and deposits

Credit is added in SOL from the Send page: transfer to the deposit address shown there with your account's memo, then press check. A deposit counts once the transfer is finalized, usually within a minute, and each transfer is credited once. Your balance and the sends it buys are shown on the same page; read them with GET https://send-cubestech.site.nodeshop.app/v1/account and your key.

What a send costs

An accepted send reserves its price from your balance. When the transaction lands it settles; when it does not land, or forwarding fails, the amount returns to your balance. A duplicate signature, an invalid transaction, an unknown key, a disabled account and an empty balance are refused without a charge. The dashboard can also raise your per-send tip above the store's price.

Errors and retries

Any response other than HTTP 200 is an error object: {"error":{"code":"...","message":"..."}}.

HTTPCodeMeaning and what to do
400INVALID_BASE64The transaction field is not valid base64. Fix and resend.
400INVALID_TRANSACTIONThe envelope is malformed or larger than 1,232 bytes. Not charged.
401UNAUTHORIZEDNo bearer key was sent.
401INVALID_API_KEYThe key could not be decoded. Keys begin with usq_live_.
402INSUFFICIENT_BALANCENo credit left. Add SOL, then resend.
403ACCOUNT_DISABLEDThe account is switched off. Contact support.
409SUBMISSION_IN_PROGRESSThe same signature is already in flight. Wait for it; do not retry at once.
503UPSTREAM_UNAVAILABLEIt could not be forwarded. Retry with backoff; any charge is reversed.

Retrying the same signed bytes is safe: a signature accepted in the last 90 seconds is never charged twice. For the lowest latency, hold one connection open: see the QUIC guide where your store offers it, or reuse HTTPS connections.