Skip to main content
EVM, Tron, and Solana signing return broadcast-ready transactions. Bitcoin returns one signature per input, which WalletSuite assembles into the final transaction for you (see Assembling a Bitcoin transaction below). From there you choose where it goes and follow it to confirmation. This page covers assembly, both broadcast paths, and how to read status once it is on-chain.

Assembling a Bitcoin transaction

Solana, EVM, and Tron signing return a finished transaction you can broadcast directly. Bitcoin signing returns one signature per input, so there is one extra step: turn those signatures into a signed transaction. POST /api/txs/finalize does this for you, so you never implement Bitcoin signature encoding. Pass the unsigned transaction (from prepare-sign), the per-input signatures (from signing), and the wallet’s public key. The endpoint returns the signed transaction hex, ready for the broadcast step below.
Finalize is Bitcoin-only, and only needed when you sign with the WalletSuite SDK (which returns per-input signatures). If you sign Bitcoin with your own signer, it already produces a finished transaction — skip finalize and broadcast it directly.

Broadcast paths

You have two ways to put a signed transaction on-chain. They are interchangeable, so pick whichever fits your stack.

Your own RPC

Submit the raw transaction through your existing node or provider. You own the connection and the response.

WalletSuite API

POST the signed transaction to WalletSuite and we submit it to the right network. Pass the chain and the raw signed transaction. The endpoint returns the transaction hash. Authenticate with your API key in the x-api-key header. See Credentials & Authentication for keys and Rate limits for tier constraints.
A successful call returns the standard response envelope. The transaction hash is at data.hash:
chain is the lowercase chain identifier (for example base, ethereum, tron). signedTx is the raw output from the signing call. Both fields are required.
A POST send can return ok: false for insufficient funds, a nonce that is too low or stale, or an already-known transaction. Re-fetch the nonce and gas with prepare-sign, then re-sign and resend.

Tracking status

Once a transaction is on-chain, poll its status by hash. Pass the chain as a query parameter (it defaults to ethereum).
The status endpoint returns the status fields directly at the top level, not under a data field. Read status straight off the parsed response. This is different from the send call above, which wraps its result in data.

Transaction states

A transaction moves through a small set of states from submission to a final result.
PENDING does not mean the transaction failed. The network has not included it in a block yet, which can take a while under congestion or a low fee. Keep polling until you see a terminal state (SUCCEEDED or FAILED).
Poll with a backoff (a few seconds between checks) rather than a tight loop. UNKNOWN right after broadcast is normal: the node may not have indexed the hash yet.

Incoming transfers

Polling tells you about a transaction you sent. For funds arriving at an address you watch, do not poll. Subscribe to a webhook instead. WalletSuite pushes a signed event to your endpoint the moment an inbound transfer touches a watched address. See Webhooks Overview to get started, and Verify signatures for verification.
Webhooks are a trigger, not the final word. Confirm authoritative state with the status endpoint before you move money or release goods.

Next steps

Signing

Sign transactions across 84 chains with one wallet and a few lines of code.

Webhooks Overview

React to inbound transfers in real time, no polling required.