Wallet Infrastructure
Wallet Infrastructure
Platform & Onboarding

Reliability

Retries, duplicates, timeouts and reconciliation.

Only confirmed means paid

StatusEventCredit or settle?
submittedtransaction.submittedNo
pendingtransaction.pendingNo
confirmedtransaction.successYes
failedtransaction.failedNo

transaction.reconciled is the signing side's report of the same confirmation as transaction.success; act on transaction.success. transaction.summary_corrected corrects a past transaction's details and does not change its status.

Avoiding duplicate operations

OperationProtection
Create paymentThe Idempotency-Key header is required. Reuse the same key when retrying. Unique per project.
Start recoverySend an Idempotency-Key header; retries with the same key are safe.
Send on Bitcoin, Spark, Solana, Tron, TONYour transactionId identifies the transfer.
ApprovalsA signer's repeated approval is counted once.
Provision walletsWallets that already exist come back as already_exists.
Swaps and transfersNever retried automatically; a second submit is refused with idempotency_conflict.

idempotency_conflict means the key or request was already used for something different.

When a retry is refused

ResponseMeaningDo
409 idempotency_conflict, "retry shortly"The first request is still running.Wait, then retry the same request.
409 idempotency_conflict, "needs reconciliation"An earlier attempt may have reached the network without finishing.Do not resend. Read List transactions first.

Retrying by operation

OperationSafe to retry?
Provision walletsYes. Existing wallets come back as already_exists.
Send (EVM)Resubmitting the same signature is counted once. Do not prepare a new payment until the first is failed.
Send (other networks)Yes, with the same transactionId and details, within 24 hours.
Create paymentYes, with the same Idempotency-Key.
Submit bridge or swapNo. Read Get bridge or List transactions instead.

Timeouts

A timeout is not a failure; the operation may still complete. Before retrying, read its state:

After a timeout onRead
A paymentList transactions
A transferGet bridge
A swapList transactions
Adding a passkeyList passkeys

Processing notifications

  1. Verify x-signature. See Setup and Verification.
  2. Reject a notification whose x-timestamp is far from now; we recommend 5 minutes.
  3. Skip any x-idempotency-key you have already processed.
  4. Respond 2xx quickly, then process.

Notifications can arrive out of order and more than once. Act on the status in the event, and if unsure, read the current state from the API.

Delivery guarantees are on Setup and Verification.

Reconciling

Regularly compare your records with List transactions and List wallet balances, and treat the API as the source of truth.

On this page