Financial Action
Financial Action = Intent + wallet_order
A Financial Action pairs Intent (user goal) with a wallet_order (the executable unit the system commits).
Lifecycle stages
| Stage | Summary | Constraint |
|---|---|---|
| READ | State + intelligence | Read-only. No wallet_order produced. |
| DECIDE | Intent → executable plan | No settlement. Outputs draft wallet_order only. |
| EXECUTE | Final settlement | Commits wallet_order. Financial Action completes. |
- READ — Portfolio state, intelligence feeds, and data pipelines. Informs Intent.
- DECIDE — Assistant, quotes, and routing turn context + goal into a draft wallet_order (functionResults).
- EXECUTE — Actions finalizes settlement — on_chain or merchant channel. The Financial Action completes.
Intent types
Intent is the user goal. DECIDE resolves it; EXECUTE commits the matching wallet_order through Actions. The wallet_order channel selects on_chain vs merchant — not a separate product API.
| Intent | Description | DECIDE | EXECUTE channel |
|---|---|---|---|
| swap | Exchange one asset for another | swap_tokens | on_chain |
| transfer | Send assets to a wallet or address (peer) | transfer_tokens | on_chain |
| lend | Supply assets for yield | lend_tokens | on_chain |
| borrow | Borrow against collateral | borrow_tokens | on_chain |
| pay | Settle a merchant order (buyer → merchant) | torque-checkout SDK (merchant server) | merchant |
Peer transfer commits on the on_chain Actions channel (wallet JWT). Merchant pay commits on the merchant Actions channel (business key + Business ID) — same move-value idea, different DECIDE path and auth.
Merchant integrators: Actions — merchant channel and Checkout SDK. Wallet / Assistant flows: Actions — on_chain channel.
wallet_order
The executable unit. Draft in DECIDE (functionResults). Committed in EXECUTE through Actions (on_chain or merchant channel).
| Field | Description |
|---|---|
| intentType | swap | transfer | lend | borrow | pay |
| status | draft (DECIDE) → committed (EXECUTE) |
| channel | on_chain → POST /execute/** · merchant → torque-checkout SDK + order webhooks |
| requiresConfirmation | true for value-moving drafts from Assistant |
| transaction | Prepared tx body (on_chain channel) or checkout session (merchant) |
| chainId | Target chain for on_chain orders |
// DECIDE output (draft wallet_order — on_chain)
{
"toolName": "transfer_tokens",
"result": {
"success": true,
"requiresConfirmation": true,
"intentType": "transfer",
"status": "draft",
"channel": "on_chain",
"chainId": 8453,
"transaction": { ... }
}
}
// Merchant pay — channel merchant; DECIDE on merchant server (Checkout SDK), not Assistant tools
{
"intentType": "pay",
"status": "draft",
"channel": "merchant",
"checkoutSession": { ... }
}Execution tiers
draft
DECIDE
wallet_order in functionResults — plan only, no settlement
committed
EXECUTE
wallet_order submitted — value moves or state changes
Actions channels
EXECUTE is one surface — Actions — with two channels. Both finalize a wallet_order. Intent pay always uses merchant; swap / transfer / lend / borrow use on_chain.
| Surface | Channel | Routes | Auth |
|---|---|---|---|
| Actions | on_chain | POST /api/v1/execute/** (alias /actions/**) | Smart Wallet JWT |
| Actions | merchant | torque-checkout SDK, POST /api/webhooks/order-update | sk_live_… + Business ID |
| toolName | EXECUTE route | Channel |
|---|---|---|
| swap_tokens | POST /api/v1/execute/trades | on_chain |
| swap_tokens (Solana) | POST /api/v1/execute/trades/solana | on_chain |
| transfer_tokens | POST /api/v1/execute/transfers/evm | on_chain |
| transfer_tokens (Solana) | POST /api/v1/execute/transfers/solana | on_chain |
| lend_tokens | POST /api/v1/execute/lends/evm | on_chain |
| borrow_tokens | POST /api/v1/execute/borrows/evm | on_chain |
| torque-checkout SDK (pay) | Checkout session + POST /api/webhooks/order-update | merchant |
READ — Portfolio
Portfolio state is READ-only. It informs Intent but does not produce a wallet_order.
GET /api/v1/wallet/me— Smart Wallet JWTwalletAddressin Assistantcontext— business key
Also see Intelligence for feed, dataset, and market READ profiles.
Boundary rules
If it does not produce or contribute to a wallet_order, it is not part of EXECUTE.
| Category | Examples | Why |
|---|---|---|
| READ-only responses | GET /intelligence/feed, GET /data/*, GET /wallet/me | Context only — no wallet_order |
| Assistant text-only replies | content without functionResults | Intent answered — no draft wallet_order |
| System metadata | GET /health, GET /capabilities, GET /openapi | Discovery — not execution |
| Rate tiles without commit | Opportunities GET without downstream EXECUTE | READ context — not a wallet_order |