Skip to main content
Broadcasts a fully signed transaction to the Solana network. Returns a submission result and transaction signature immediately — it does not wait for on-chain confirmation.
SUBMISSION_RESULT_SUBMITTED means the transaction was accepted for broadcast, not that it was confirmed or executed on-chain. The transaction may still be dropped, fail during execution, or expire.Always use MonitorTransaction after submission to track actual on-chain status.

Request

transaction
Transaction (object)
required
Fully signed transaction in FULLY_SIGNED state.
commitment_level
CommitmentLevel (enum)
Optional. Controls the confirmation target used when monitoring submission. Defaults to COMMITMENT_LEVEL_CONFIRMED.

Response

signature
Base58-encoded string
Transaction signature. Use this value with MonitorTransaction to track on-chain status. Present even for some failure cases.
submission_result
SubmissionResult (enum)
Whether the transaction was accepted for broadcast. See the SubmissionResult table below.
error_message
string
Human-readable error description if submission failed. Empty on success.
structured_error
TransactionError (object)
Structured error for programmatic handling. Present when submission failed or the result is indeterminate. See Error Reference for TransactionErrorCode values.

SubmissionResult Values

ResultValueMeaning
SUBMISSION_RESULT_UNSPECIFIED0Not set.
SUBMISSION_RESULT_SUBMITTED1Transaction broadcast to the network. Not a confirmation. Use MonitorTransaction to track.
SUBMISSION_RESULT_FAILED_VALIDATION2Pre-submission validation failed. The transaction was not sent.
SUBMISSION_RESULT_FAILED_NETWORK_ERROR3Network or RPC error prevented submission. The transaction was likely not sent.
SUBMISSION_RESULT_FAILED_INSUFFICIENT_FUNDS4Fee payer has insufficient SOL. The transaction was not sent.
SUBMISSION_RESULT_FAILED_INVALID_SIGNATURE5Signature validation failed. The transaction was not sent.
SUBMISSION_RESULT_INDETERMINATE6Unknown state. Check structured_error.certainty and structured_error.blockhash_expiry_slot to determine the recovery strategy.
For SUBMISSION_RESULT_INDETERMINATE: wait until after blockhash_expiry_slot, then query the blockchain. If the transaction is not found on-chain by then, it is safe to recompile and resubmit. See Error Reference for TransactionSubmissionCertainty handling guidance.

Code Examples

resp, err := client.SubmitTransaction(ctx, &transaction_v1.SubmitTransactionRequest{
    Transaction: signedTxn,
})
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Signature: %s\n", resp.Signature)
fmt.Printf("Result: %v\n", resp.SubmissionResult)

if resp.SubmissionResult == transaction_v1.SubmissionResult_SUBMISSION_RESULT_SUBMITTED {
    // Use MonitorTransaction to track on-chain status
    fmt.Println("Submitted — use MonitorTransaction to confirm")
}