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
POST https://send-cubestech.site.nodeshop.app/v1/transactions
GET https://send-cubestech.site.nodeshop.app/v1/healthAuthentication
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.
Authorization: Bearer YOUR_API_KEYSend 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.
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\"}"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
{
"signature": "5Nx3...qT7w",
"accepted": true,
"duplicate": false,
"charged_lamports": 200000,
"balance_remaining_lamports": 49800000,
"payment_mode": "balance"
}| Field | Meaning |
|---|---|
signature | The transaction signature, read from the bytes you sent. |
accepted | The send was forwarded and acknowledged. It is not a landing guarantee: confirm the signature on chain. |
duplicate | The same signature was already accepted in the last 90 seconds. It is not forwarded or charged again. |
charged_lamports | What this send reserved from your balance. It settles when the transaction lands. |
balance_remaining_lamports | Your balance after this send. |
payment_mode | balance 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":"..."}}.
| HTTP | Code | Meaning and what to do |
|---|---|---|
| 400 | INVALID_BASE64 | The transaction field is not valid base64. Fix and resend. |
| 400 | INVALID_TRANSACTION | The envelope is malformed or larger than 1,232 bytes. Not charged. |
| 401 | UNAUTHORIZED | No bearer key was sent. |
| 401 | INVALID_API_KEY | The key could not be decoded. Keys begin with usq_live_. |
| 402 | INSUFFICIENT_BALANCE | No credit left. Add SOL, then resend. |
| 403 | ACCOUNT_DISABLED | The account is switched off. Contact support. |
| 409 | SUBMISSION_IN_PROGRESS | The same signature is already in flight. Wait for it; do not retry at once. |
| 503 | UPSTREAM_UNAVAILABLE | It 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.