Skip to content

Build, simulate, send, and check transactions

Build, simulate, send, and check status.

Updated View as Markdown

Auth: workspace token. Scope: sign on every route.

All four need a resolvable RPC endpoint for the address’s network, and stamp x-rpc-source on the response naming which tier served the call.

The shared request body

build, simulate, and send take the same shape. Which fields apply depends on the addressed VM.

Field VM Required Notes
address both yes Public key, 1–128 characters
to EVM yes Destination address
value EVM no Decimal string or non-negative integer
data EVM no Calldata
nonce EVM no Non-negative integer; assigned by the endpoint when omitted
gasLimit EVM no Decimal string or integer
maxFeePerGas EVM no Decimal string or integer
maxPriorityFeePerGas EVM no Decimal string or integer
recipient SVM yes Destination address
amount SVM yes Decimal string or integer
tokenMint SVM no SPL token mint; omit for native SOL
recentBlockhash SVM no Supplied by the endpoint when omitted

Missing to on EVM, or recipient/amount on SVM, returns 400 with invalid_body.

POST /v1/transactions/build

Construct an unsigned transaction. Returns 200.

{ "raw": { }, "vm": "evm", "network": "ethereum" }

POST /v1/transactions/simulate

Execute against the node without submitting. Returns 200.

{
  "success": false,
  "error": "execution reverted: insufficient balance",
  "gasUsed": "21000",
  "logs": []
}
Field Present Meaning
success always Whether the simulated execution succeeded
error on failure Revert reason, truncated to 200 characters
gasUsed when reported Decimal string
logs when reported At most 32 entries, each truncated to 200 characters

An on-chain failure is a 200 with success: false. A simulation that could not complete — unreachable endpoint, transport refusal — is an error status instead. That distinction stops an outage from reading as “would revert”.

POST /v1/transactions/send

Build, sign, and submit. Returns 202 — accepted, not confirmed.

{ "hash": "0x…", "status": "pending", "network": "ethereum" }
status Meaning
pending The network accepted it
unknown Submission timed out; the bytes may already have reached the network

The hash is the signed transaction’s canonical identifier, computed before submission, so it is a valid lookup key even when status is unknown.

GET /v1/transactions/{hash}

Stateless status lookup — one RPC call, nothing stored. Returns 200.

Query parameters

Parameter Required Notes
network yes Network slug; required because no state is kept

The hash must be 1–128 characters.

{ "hash": "0x…", "found": true, "status": "confirmed" }
status Meaning
pending Not yet visible (found: false)
confirmed Included and successful
failed Included but reverted, or explicitly errored

Polling this route is the supported way to follow a transaction — there is no lifecycle tracking and no webhook.

Nonces

The service does not cache or allocate nonces. It does not exclusively own your addresses, so the endpoint assigns one unless you pass nonce explicitly. If you also send from the same address by other means, supply it yourself.

Errors

Status Code
400 invalid_body, invalid_parameter, unsupported_network
404 account_not_found — including a ?network= this workspace does not define
401 session_expired
403 scope_denied
404 account_not_found
409 rpc_not_configured, tx_dropped, tx_aborted
422 tx_build_failed, unsupported_for_kind
423 account_locked
429 rpc_capacity_exceeded
500 tx_sign_failed
502 rpc_unreachable, rpc_rejected, tx_submit_failed
504 tx_timeout

tx_timeout carries the same warning as unknown: check status before resending.

Navigation

Type to search…

↑↓ navigate↵ selectEsc close