Skip to Content
API ReferencePOST /wallet/:address/transactions/submit

POST /wallet/:address/transactions/submit

Submit wallet-signed transactions to the Solana cluster. Each signed transaction is paired with the submission ticket returned by the build endpoint. The server verifies the ticket, confirms the message hash matches, forwards the transaction via RPC, and logs the result.

Request

POST https://api.aerosol.com/api/v1/burner/wallet/:address/transactions/submit

Headers

HeaderRequiredDescription
X-Api-Key or AuthorizationYesAPI key or session token with transactions:submit scope
Content-TypeYesapplication/json

Path parameters

ParameterTypeDescription
addressstringSolana wallet address

Body

FieldTypeRequiredDescription
signedSignedTransaction[]YesArray of signed transactions with their submission tickets.

SignedTransaction

FieldTypeRequiredDescription
transactionBase64stringYesBase64-encoded signed VersionedTransaction.
submissionTicketstringYesThe ticket from the build response’s BuiltTransaction.submissionTicket.

Example request

curl -X POST https://api.aerosol.com/api/v1/burner/wallet/DRpbCBMxVnDK7maPM5tGv6MvB3v1sRMC86PZ8okm21hy/transactions/submit \ -H "Authorization: Bearer eyJhbGci..." \ -H "Content-Type: application/json" \ -d '{ "signed": [ { "transactionBase64": "AQAAAA...(signed)...", "submissionTicket": "ticket_abc123..." } ] }'

Response

200 OK

{ "results": [ { "signature": "5UfDuK...txHash", "status": "submitted", "includes": [ { "type": "empty_account", "address": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU", "action": "close" } ] } ] }

SubmissionResult fields

FieldTypeDescription
signaturestring | nullSolana transaction signature. null if the submission failed.
statusstringOne of submitted, duplicate, or failed.
includesItemSelection[]The items this transaction covers (echoed from the build response).
error{ code: string, message: string }Present only when status is failed.

Status values

StatusMeaning
submittedTransaction was sent to the Solana cluster. The signature field contains the transaction hash.
duplicateThis submission ticket was already submitted. The original signature is returned. Safe to treat as success.
failedThe transaction could not be submitted. Check error for details.

Common error codes

CodeDescription
TICKET_EXPIREDThe submission ticket has expired. Rebuild the transactions.
HASH_MISMATCHThe signed transaction’s message hash doesn’t match what the server built. The transaction may have been tampered with.
RPC_ERRORThe Solana RPC rejected the transaction (e.g., blockhash expired, insufficient funds for fees).

Error responses

StatusCause
400Empty signed array, missing submissionTicket
401Invalid credentials or session lacks transactions:submit scope
429Rate limit exceeded

SDK example

const { results } = await client.submitTransactions(walletAddress, { signed: signedTxs.map((tx, i) => ({ transactionBase64: Buffer.from(tx.serialize()).toString('base64'), submissionTicket: builtTxs[i].submissionTicket, })), })

Raw fetch example

const res = await fetch( `https://api.aerosol.com/api/v1/burner/wallet/${walletAddress}/transactions/submit`, { method: 'POST', headers: { Authorization: `Bearer ${sessionToken}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ signed: [ { transactionBase64: base64SignedTx, submissionTicket: ticket, }, ], }), } ) const data = await res.json()

Retry behavior

Submission tickets include a unique jti (JWT ID). If you submit the same ticket twice, the server returns status: "duplicate" with the original signature rather than sending the transaction again. This makes retries safe and idempotent.

Last updated on