Machine-readable entry points: /openapi.json · /llms.txt · /.well-known/agent-card.json (every endpoint, which ones need no key, how to call).
Any agent can read the agent tier of the market context for free: derived fields only (session, events, windows, blackout, curve shape, drift verdict) plus official public-source values; private research is never exported. Fields outside the tier are whole-field unavailable (note=not_in_tier), never omitted. Responses carry the crowsnest Ed25519 signature and provenance.mode (live / backfill / sample); only live may take part in a LIVE decision.
# no API key needed
curl "https://verify.chaconne.xyz/v1/assets" # registry: assetKey, symbol, decimals, role, executionAllowed
curl "https://verify.chaconne.xyz/v1/policies" # the three policies with definition hashes
curl "https://verify.chaconne.xyz/v1/context?tier=agent&assetKey=eip155:196:0x9d275685dc284c8eb1c79f6aba7a63dc75ec890a"
# → 200 { "schemaVersion":"chaconne-context/1", "packagedAt":"…", "provenance":{"mode":"live"},
# "session":{"label":{"value":"US_REGULAR","status":"ok","source":"…","observedAt":"…"}, …},
# "events":[…], "fed":{…}, "rates":{"y10":{"value":"4.96","status":"ok"}, …},
# "risk":{"vix":{"value":null,"status":"unavailable","note":"not_in_tier"}, …} }MCP: get_market_context; SDK: client.context.get({ tier: "agent" }). Only the display / paid tiers need a key.
| Endpoint | What it does |
|---|---|
| GET /v1/assets | Supported assets (chain+contract key, registry version/hash, executionAllowed) |
| GET /v1/policies | The three policies with definition hashes (v1.0.0 and v1.1.0) |
| GET /v1/products | Products: verify_once / plan / monitor_window / task_bundle with price and delivery definition |
| POST /v1/jobs | Create a fixed-intent task; report v1 computed immediately; idempotent by clientRequestId |
| GET /v1/jobs/:id | Task state: payment / report versions / entitlement / executions with server-verified receipts |
| GET /v1/jobs/:id/report | Report + evidence (402 when paid and unpaid) |
| GET /v1/jobs/:id/bundle · /bill | Evidence bundle (bundleHash + attestation signature) · bill (fees / principal / gas) |
# x-api-key: issue one at /agent/keys (wallet signature); the key is bound to that wallet
curl -X POST https://verify.chaconne.xyz/v1/jobs -H "x-api-key: <your key>" -H "Content-Type: application/json" -d '{
"clientRequestId": "my-1", "ownerAddress": "0xYourWallet",
"inputAssetKey": "eip155:196:0x4ae46a509f6b1d9056937ba4500cb143933d2dc8", "outputAssetKey": "eip155:196:0x9d275685dc284c8eb1c79f6aba7a63dc75ec890a",
"amountInRaw": "5000000", "policyId": "REFERENCE_CONTEXT", "maxSlippageBps": 50, "maxPriceImpactBps": 100, "maxReferenceDeviationBps": 300 }'| Endpoint | What it does |
|---|---|
| POST /v1/plans · GET /v1/plans/:id | Plan: amount ladder × funding currencies × three policies, ≤12 candidates, recommendation and next step |
| POST /v1/plans/:id/jobs | Turn a candidate into a verification task (same requestHash chain) |
| POST /v1/mandates | Register a signed TradeMandate (one signature: budget, per-step cap, steps, asset set, deadline, policy hashes) |
| GET /v1/mandates/:id | Authorization state, spent budget, steps, evaluation timeline and deltas |
| POST /v1/mandates/:id/pause · resume · cancel | Off-chain pause / resume / cancel (cancel should be paired with on-chain revokeMandate) |
| POST /v1/mandates/:id/prepare-step | When READY returns MandateStep typed data + step certificate + router calldata; otherwise the wait reason |
| POST /v1/mandates/:id/steps/:n/submissions | Record the step tx hash; the verifier confirms via the MandateStep event |
| GET /v1/mandates/:id/bundle · /bill | Evidence bundle and bill of an authorized task |
| POST /v1/simulations · GET /v1/simulations/:id | Simulation: real data through planner and rules, no certificate, no execution (free) |
| GET/PUT /v1/profiles/me · POST/GET /v1/templates | Persona (copy only) · remix templates (structure only, never amounts/wallets) |
| POST /v1/shares · GET /pub/reports[/:shareId] | Share settings · public read (no key; amounts can be ranged; wallet always hidden) |
| POST /a2mcp/plan · POST /a2mcp/monitor · GET /a2mcp/monitor/:id | Second A2MCP service “Plan & Monitor” (same 200 contract) |
Auth: send x-api-key. Issue a key with one wallet signature under Agent API keys; it is bound to that wallet, so tasks it creates are the same set the site shows for that wallet; revoke any time. Key-free endpoints: /v1/assets, /v1/policies, /v1/context (agent tier), /v1/events, /a2mcp/*, /pub/*. Responses are private/no-store.
| Endpoint | What it does |
|---|---|
| GET /v1/context?tier=agent&assetKey&owner&taskId | Free-tier market context (signed crowsnest export): session, trading day / holiday / early close, macro & Fed events, blackout, curve shape, drift verdict. Every field is {value, source, observedAt, fetchedAt, status}; numeric values are decimal strings; fields outside the tier are unavailable/not_in_tier, never omitted; provenance.mode other than live must not be treated as live. Always 200. |
| GET /v1/events · GET /v1/events/:id/revisions | Event list (stable id, date precision, confirmed/estimated/revised, revision) and revision history; each task computes its own window |
| POST /v1/tasks · GET /v1/tasks/:id · GET /v1/tasks?owner | Create a task from a playbook + conditions: task (all blockers, nextCheckAt, executor presence), TradeMandate draft, thesis draft, budget allocation |
| POST /v1/tasks/:id/pause · resume · cancel | Service-side stop: blocks new certificates only; a pulled, unexpired certificate may still execute; hard stop = on-chain revokeMandate confirmation (D-088) |
| POST /v1/tasks/:id/authorize · prepare-step · GET explain-wait · POST compare-policies | Submit the signed mandate; condition-gated step preparation; wait diagnosis; same-snapshot comparison (SIMULATION) |
| POST /v1/mandates/:id/executor/heartbeat | Agent-wallet executor heartbeat (60 s) → executorPresence=online; carries no permission |
| GET /v1/event-impacts?owner&horizonHours · POST /v1/theses · /v1/budget-groups · GET /v1/portfolio/:owner · /v1/notify/* · /v1/replays · /v1/rebalance/* | Impacts, thesis cards, budget groups, portfolio with cost coverage, notifications (HMAC webhooks / Telegram), no-look-ahead replays, rebalance orchestration |
| GET /v1/recaps?owner&date · GET /v1/recaps/:id · POST /v1/recaps/:id/share · GET /pub/recaps/:shareId | Night journal: generated 45 min after the actual NY close; ledger reconciles with the timeline; simulation/replay/live labels; private by default, public view can hide assets and amounts |
| POST /a2mcp/agent-tasks | Third A2MCP service “Agent Tasks” (draft): owner and/or assets → event impacts + task drafts; price 0 during review; submitted only after #13803 concludes |
# create a simulation task: inputAssetKey + perStepAmountRaw are required by the playbook
curl -X POST https://verify.chaconne.xyz/v1/tasks -H "x-api-key: <your key>" -H "Content-Type: application/json" -d '{
"clientRequestId": "my-task-1", "ownerAddress": "0xYourWallet", "playbookId": "session_dca", "mode": "SIMULATION",
"params": { "inputAssetKey": "eip155:196:0x4ae46a509f6b1d9056937ba4500cb143933d2dc8", "outputAssetKey": "eip155:196:0x9d275685dc284c8eb1c79f6aba7a63dc75ec890a", "steps": 3, "perStepAmountRaw": "1000000" },
"conditions": { "version": "conditions/1", "items": [ { "type": "session", "allow": ["US_REGULAR"] }, { "type": "min_gap_trading_days", "days": 1 } ] } }'
# → 201 { "task": { "id": "tsk_…", "status": "WAITING", "blockers": [...], "nextCheckAt": "…" }, "mode": "SIMULATION", ... }
# 400 invalid_playbook_params → details[] = [{ "field": "perStepAmountRaw", "code": "required" }, ...]
# GET /v1/tasks/:id/explain-wait (GET only; a POST is not the same resource)| Endpoint | What it does |
|---|---|
| GET /v1/tasks/:id/delegation | Delegation checklist; mode = account (one confirmation) or permit (classic flow) |
| POST /v1/tasks/:id/delegation/mode | Switch between account and permit before anything is signed |
| POST /v1/tasks/:id/delegation/account/submit | Submit the one confirmation: wallet_sendCalls tx hashes, or a BatchedCall signature from an upgraded account (platform relays it) |
| POST /v1/tasks/:id/delegation/account/gas | Ask the platform for a little OKB when a new account cannot pay for the one-time upgrade |
| GET · POST /v1/tasks/:id/delegation/revoke | Get the RevokeMandates typed data; submit the signature (relayed by the platform, no gas) or a removeOwner tx hash |
| GET /v1/owners/:owner/account | Account status: upgraded or not, agent key and expiry, active rules (spent / cap / deadline) |
Endpoints not yet deployed on this server return 404; pages and MCP tools then show “not ready” instead of sample data.