Skip to main content
POST
Sign a transaction with a WaaS wallet and broadcast it

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

x-idempotency-key
string
required

Your repeat-protection key for one transaction, unique per environment. Repeating it with the same transaction returns the original; with a different transaction, 409.

Required string length: 1 - 255
Pattern: ^[-A-Za-z0-9._~!$&'()*+,;=:@/]{1,255}$

Path Parameters

environmentId
string
required

ID of the environment

Required string length: 36
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
Example:

"95b11417-f18f-457f-8804-68e361f9164f"

walletId
string
required

UUID of the wallet

Required string length: 36
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
Example:

"95b11417-f18f-457f-8804-68e361f9164f"

Body

application/json
messages
string[]
required

One per fee attempt, in fee order: the serialized unsigned transaction to sign. RLP hex on EVM, message bytes on Solana.

Required array length: 1 - 3 elements

A string with a max length of 204800 characters

Maximum string length: 204800
contexts
object[]
required

One per fee attempt, in fee order, the same length as messages: what the signer is asked to sign. Dynamic checks it and signs the matching message.

Required array length: 1 - 3 elements
broadcastOptions
object

How to send the signed transaction. Solana only.

isFormatted
boolean

Whether each message is a pre-computed hash that is signed as-is. Send false for a serialized transaction.

requestedCertainty
string
default:safe

How sure to be before calling the transaction confirmed. fast, safe or final, or chain: followed by the chain's own value, such as chain:12 or chain:finalized.

Maximum string length: 64
Pattern: ^(fast|safe|final|chain:[a-z0-9]{1,58})$
externalReference
string

Your own label for this transaction, returned on every event. Not unique.

Required string length: 1 - 256
Pattern: ^[\x20-\x7E]+$
roomIds
string[]

Signing rooms you already opened, one per attempt in fee order. When omitted, Dynamic opens them.

Required array length: 1 - 3 elements

MPC room identifier for one signing session

Maximum string length: 255
Pattern: ^[A-Za-z0-9_-]+$
approvalQuorum
object

Signing-quorum consent evidence for a business-account-governed sign — the Initiator's own signed Intent (or, when redeeming a stored proposal from a non-Initiator session, initiatorProof instead). A top-level sibling of context, never nested under it — context describes only the operation being signed. Approvals collected from other members are tracked server-side against the proposal, never sent by a client. intentSignature is required when first submitting an initiator-signed intent. It is omitted when redeeming an existing proposal, where the server matches the exact intent and restores the stored initiator signature.

shareSetId
string

Optional identifier of the share set this operation targets. When omitted, the active rootUser share set for walletId is resolved server-side.

Required string length: 36
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
Example:

"95b11417-f18f-457f-8804-68e361f9164f"

Response

The transaction record, with the signing rooms while signing is pending

transactionId
string
required

Dynamic's id for this transaction, the same on every event.

Required string length: 36
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
Example:

"95b11417-f18f-457f-8804-68e361f9164f"

status
enum<string>
required

Where the transaction has got to. stalled means nobody is pushing it any more and it can return to confirming. Tolerate values you do not recognise.

Available options:
pending_signature,
signed,
broadcasting,
confirming,
stalled,
completed,
reverted,
failed
chainType
enum<string>
required
Available options:
evm,
svm
chainId
string
required

An EVM chain id, or a Solana network id (101 mainnet, 103 devnet, 201 Eclipse).

walletAddress
string
required
idempotencyKey
string
required

The key the transaction was requested with.

requestedAt
string<date-time>
required
reason
enum<string>

Why a transaction failed or stalled. Tolerate values you do not recognise.

Available options:
never_sent,
rejected,
expired,
replaced,
nonce_gap,
ceremony_failed,
assembly_failed,
insufficient_funds,
broadcaster_stopped,
broadcaster_failed
errorMessage
string

Human-readable detail on a reverted or failed transaction, written by Dynamic and never a raw provider or node error. For a log or a support ticket; branch on reason instead.

Maximum string length: 512
revertReason
string

The contract's own error, when the transaction landed and reverted. Public chain output, passed through untouched and capped in length.

Maximum string length: 512
externalReference
string

Your own label, as sent.

transactionHash
string

The live attempt's hash, once it is signed.

blockExplorerUrls
string<uri>[]
Maximum string length: 2048
attempts
object[]

Every signed version of the transaction, cheapest first.

nonce
string

EVM only. The transaction's nonce, the only safe one to reuse when replacing it.

Pattern: ^0x(0|[1-9a-fA-F][0-9a-fA-F]{0,63})$
replacementFee
object

EVM only, while the transaction is not final. The lowest fee a replacement at the same nonce would need to displace the live attempt.

rooms
object[]

The signing rooms, one per attempt, while status is pending_signature.

progress
object
completedAt
string<date-time>

Present when the status is terminal.

Last modified on October 12, 2026