/v1/{resource}/{operation}. Account operation endpoints live under /v1/operations/.
Account operations let you create and manage reviewed money operations — swaps, sends, perp opens, and prediction orders — without any chat or UI surface. The lifecycle has two steps:
- Create quotes your intent live and stores an inert operation in the
awaitingApprovalstate. Creation never moves money. - Approve admits that exact reviewed operation for execution. Approval is the only step that moves money.
Create Operation
Create a reviewed operation from a structured intent. The server resolves the wallet, obtains a live quote, and returns the operation inawaitingApproval. Nothing executes until you approve it.
Endpoint: POST /v1/operations
Request
The
operation body is a discriminated union. Every arm names the paying/signing wallet by walletId from GET /v1/wallets/list; the server verifies ownership and eligibility.
awaitingApproval. Every operation endpoint returns this same shape.
credentialRef. Workflow requests expose only { kind: "workflow", operationKind }; stored workflow payloads and credential references never cross the account interface.
Common errors: 400 when the intent fails validation or the wallet cannot fund it, 409 when the idempotencyKey was already used with a different request. See API Errors.
Get Operation
Read one operation. This is the canonical poll address: after approving, poll here until the state is terminal (done, failed, failed_before_effect, canceled, or dismissed).
Endpoint: GET /v1/operations/{operationId}
Request
cURL Example
404 when the operation does not exist or is not yours.
Approve Operation
Admit anawaitingApproval operation for execution. This is the only endpoint that moves money. Re-approving the same operation converges on the same execution — it never runs twice.
Endpoint: POST /v1/operations/{operationId}/approve
Request
cURL Example
working. Repeating approval after admission, including after the operation becomes terminal, returns the current resource with 200; it never executes twice. Poll GET /v1/operations/{operationId} until terminal.
Errors: 400 when the operation does not use review approval or its pending source wallet is archived or missing, 404 when the operation does not exist, and 409 when a dismissed operation is no longer approvable.
Discard Operation
Retire anawaitingApproval operation without executing it. Discarding is idempotent: repeating it returns the same dismissed resource.
Endpoint: POST /v1/operations/{operationId}/discard
Request
cURL Example
dismissed. 409 when the operation already executed and can no longer be discarded.