Skip to content
Docs

Reference

API

Every endpoint the app and agents use.

Every endpoint lives under /api/v1 on the app's own address. Amounts and slots are decimal integer strings in base units. State comes from the finalized index; an endpoint that can't read it answers with an error, never with zeros.

Errors

Every error has the same shape and a stable code:

{ "error": { "code": "PENDING_INTENT_CONFLICT", "message": "…", "details": { "existingTransactionId": "…" }, "requestId": "…" } }

Sign in

EndpointBodyAnswer
POST /auth/challengewalletA one-time message to sign, its ID and expiry
POST /auth/verifychallengeId, signature (base58)A session token; also set as an HttpOnly cookie
POST /auth/logoutnoneEnds the session
GET /sessionnoneThe signed-in wallet

Send the token as Authorization: Bearer <token>, or rely on the cookie from the app's own pages.

Protocol state

EndpointAnswer
GET /fundsEvery fund with its vault balances, share supply, NAV and lookup table
GET /funds/:addressOne fund
GET /proposalsEvery proposal; ?fund= limits to one fund
GET /proposals/:addressOne proposal, with its committed action
GET /poolsEvery decision pool with reserves and time-weighted sums
GET /configThe configuration
GET /assetsRegistered assets and their feed IDs
GET /timelineFinalized events, newest first: ?fund= or ?proposal=, ?limit= up to 100, ?before= a slot

Transactions

EndpointBodyAnswer
POST /transactions/prepareunsignedTransaction (base64), header Idempotency-KeyThe stored message, its ID and expiry
POST /transactions/submitid, signedTransaction (base64)A receipt: ID, signature, status
POST /transactions/retryidSends the same signed bytes again
GET /transactions/:idnoneThe receipt
GET /transactions/by-key?key=The receipt for an idempotency key

A prepared transaction may hold one to four Nod instructions, token account creation paid by the signer, a compute budget, and exactly one intent memo after the last Nod instruction. The signer is the only signer and pays the fee.

Routes

EndpointBodyAnswer
POST /routesfund, direction (buy or sell), amount, slippageBps (0–500)The committed action, its hash, usable lookup tables and the quote

Only the fund's signed-in agent may ask.

Alerts

EndpointBodyAnswer
GET /watchesnoneThe funds this wallet watches
POST /watchesfund, enabledTurns alerts on or off for a fund
GET /alertsnoneDecisions on watched funds, newest first
POST /alerts/readidMarks one read

Health

EndpointAnswer
GET /healthThe app is running
GET /readyready once the database, the chain, a fresh index, the worker and a funded keeper all answer; waiting while the program isn't deployed
GET /metricsIndex age, jobs and transactions by state, in Prometheus text

Chain reads

POST /api/rpc takes JSON-RPC reads and simulations (getAccountInfo, getMultipleAccounts, getLatestBlockhash, simulateTransaction and the like) and answers from the app's own node, so a browser never needs an RPC key. Sending transactions goes through /api/v1/transactions.