Create a signing request
Persists an **unsigned** transaction and returns it as a `TxRequest`. The server does not sign and does not broadcast: the caller signs with its own wallet, then reports the hash to `POST /tx-requests/{id}/submitted`. Which of the two signing paths applies is decided by the caller's bearer, not by the request — a Privy access token yields `delivery: "dashboard"` (the dashboard's sign-request modal picks it up) and an `sk-` API key yields `delivery: "unsigned"` (nothing is queued for the dashboard). The response carries the decoded plain-English `summary` and the `simulation` so the caller can show the user what they are approving before signing.
Persists an unsigned transaction and returns it as a TxRequest. The server does not sign and does not broadcast: the caller signs with its own wallet, then reports the hash to POST /tx-requests/{id}/submitted. Which of the two signing paths applies is decided by the caller's bearer, not by the request — a Privy access token yields delivery: "dashboard" (the dashboard's sign-request modal picks it up) and an sk- API key yields delivery: "unsigned" (nothing is queued for the dashboard). The response carries the decoded plain-English summary and the simulation so the caller can show the user what they are approving before signing.
Request Body
application/json
The unsigned transaction to persist.
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/tx" \ -H "Content-Type: application/json" \ -d '{ "chainSlug": "ethereum", "to": "string", "source": "string" }'{ "id": "string", "ownerId": "string", "chainSlug": "ethereum", "unsignedTx": { "chainId": 0, "to": "string", "data": "string", "value": "string" }, "summary": [ "string" ], "simulation": { "ok": true, "balanceChanges": [ { "token": "string", "symbol": "string", "delta": "string" } ], "events": [ "string" ] }, "fees": [ { "label": "string", "bps": 0 } ], "delivery": "dashboard", "status": "pending", "txHash": "string", "dependsOn": "string", "createdAt": "string", "expiresAt": "string"}List your signing requests GET
Returns the caller's signing requests, newest first. Scoped to the owner in the query itself, so the list can never contain another user's row.
Read a signing request GET
Returns one `TxRequest` by id, so either kind of caller can poll the status of a request they created. A request owned by another user answers with the same 404 as a request that does not exist, and the two response bodies are identical — a caller cannot probe for the existence of someone else's request.