# Actuary > The pre-trade gate for AI agents on Robinhood Chain (chain id 4663). Before buying a token, an agent sends the token and a policy; Actuary answers ALLOW, DENY or REVIEW with every check and the fact it read, in an EIP-712 signed receipt. Rule-based engine today (engine "rules-v1"); not financial advice. Token: $ACTUARY, contract 0x767e31c8ba121aa381eda90abeab5c4289d08853 on Robinhood Chain; any other contract using the name is not ours. ## Connect - Remote MCP (Streamable HTTP, no install): https://actuaryai.pro/mcp `claude mcp add --transport http actuary https://actuaryai.pro/mcp` - REST API base: https://actuaryai.pro/api/v1 (CORS open, no key) - OpenAPI: https://actuaryai.pro/api/v1/openapi.json - A2A agent card: https://actuaryai.pro/.well-known/agent.json - Human docs: https://actuaryai.pro/docs - Live status (check before relying on it): GET https://actuaryai.pro/api/status → state ok|degraded|down per component (database, chain RPC, payments on each network, Board data, receipt signing) - First call walkthrough with a paying script: https://actuaryai.pro/start ## Core calls - POST /api/v1/gate {"token":"0x…","policy":"actuary-default-v1" | {policy, deny_if[], review_if[], unknown, judge?}} → decision, reasons, explanation (two plain sentences, may be null), judgement (when the policy has judge), receipt - POST /api/v1/gate/batch {"tokens":[…up to 10], "policy":…} → one decision and receipt per token - GET /api/v1/gate/facts → the facts a rule may use (e.g. mint_with_live_owner, ticker_clone_of_older, first_hour_swaps, first_hour_liquidity_usd, odds_24h) - POST /api/v1/receipts/verify {"receipt":{…}} → valid, signer - POST /api/v1/mandates {"token":"0x…","policy":…, "webhook_url"?, "exit_on"?: "deny"|"review"} → x402, $0.05 for 7 days → id, secret, expires_at; then GET /api/v1/mandates/{id}/events (Authorization: Bearer ) - GET /api/v1/mandates/{id}/signal (Authorization: Bearer ) → newest signed signal: action exit|watch|hold, valid 1 hour - POST /api/v1/signals/verify {"signal":{…}} → valid, fresh - POST /api/v1/mandates/{id}/renew (Authorization: Bearer ) → x402, $0.05 → 7 more days from the current end ## Policy rules `fact`, `!fact`, or `fact OP value` with OP in < <= > >= == !=. Any matching deny_if gives DENY; otherwise a matching review_if gives REVIEW. A deny rule whose fact is missing gives REVIEW by default ("unknown": "review"), so missing data never lets a token through. Unknown fact names are rejected. ## Paying 25 free Gate calls per caller per day. After that the Gate answers HTTP 402 with an x402 v2 quote: scheme exact, network eip155:4663, asset USDG 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168, $0.002 per call (batch: per token). A Mandate has no free tier: $0.05 for 7 days of re-checks on one token, renewable; a mandate.expiring event comes a day before the end. Sign an EIP-3009 transferWithAuthorization for exactly the quoted amount to payTo and resend with a base64 PAYMENT-SIGNATURE header. Nothing is charged if the request is invalid, the chain can't be read, the mandate can't be created, or settlement fails. Terms: GET /api/v1/gate/pricing. $ACTUARY holder price: a paying wallet holding at least 1,000,000 $ACTUARY pays 50% less for paid Gate calls and Mandates. Send X-Actuary-Payer: 0xYourWallet with the unpaid request to get the holder quote; the discount is checked again against the wallet that signs. Check a wallet: GET /api/v1/gate/holder?address=0x... Pay a Mandate in $ACTUARY: the 402 from POST /api/v1/mandates carries token_option (scheme actuary-permit2). Approve Permit2 once, sign a PermitTransferFrom for that amount with extra.spender as spender, valid at most 2 minutes, and resend with PAYMENT-SIGNATURE {x402Version:2, accepted: token_option, payload:{owner, permit:{permitted:{token,amount}, nonce, deadline}, signature}}. Costs 50% less and the tokens go to the dead address. Every 402 declares its output: extensions.bazaar (x402 Bazaar format) lists the JSON body it takes, an example answer and the required top-level keys. The same schemas are in /api/v1/openapi.json. POST /api/v1/gate/x402 is the same Gate with no free tier: without PAYMENT-SIGNATURE it always answers 402, even with an empty body. This route and POST /api/v1/mandates also accept USDC on Base (eip155:8453): take that entry from accepts[] and sign for it. ## Receipts EIP-712 domain {name:"Actuary", version:"1", chainId:4663}; type Receipt(string id, address token, string decision, bytes32 policyHash, bytes32 bodyHash, uint64 issuedAt). bodyHash covers checks, facts, reasons, sources and the explanation. The explanation is written by a model (explanation_model, Cloudflare Workers AI) from the checks only; the explanation never changes the decision. Signals: every mandate event with a decision carries a signal, EIP-712 type Signal(string mandateId, address token, string action, string decision, string receiptId, uint64 issuedAt, uint64 validUntil), same domain and signer as receipts. exit on DENY (and on REVIEW with exit_on "review"), watch on REVIEW, hold on ALLOW. Actuary never trades; your agent verifies the signal and decides. Judge: a policy with "judge":"advisory"|"resolve" (preset actuary-judged-v1) asks a model to read a REVIEW and lean ALLOW/REVIEW/DENY with confidence, cited facts and a note. ALLOW/DENY from the rules are final. advisory only records it. resolve applies a lean at confidence >= 0.75, an ALLOW only when every deny_if rule read false, and a DENY only when the model cites a contract power that is true (has_mint, mint_with_live_owner, is_proxy, has_blacklist, has_pause). The receipt carries rule_decision, decision (final) and judgement, all signed; engine "rules-v1+judge-v1". Mandates use the rules only. The judge is actuaryai/judge-31b when hosted, else Gemma on Workers AI; judgement.model names it. Signer: GET /api/v1/receipts/signer. ## Data Launch Board: https://actuaryai.pro/board, per launch day how many new tokens were still trading a day later; JSON at GET /api/v1/board; cite one day with /board?day=YYYY-MM-DD. Share a receipt: https://actuaryai.pro/r/{receipt_id} is a public page with the decision, the checks and signature verification. Open collector (new pools recorded several times a day since 14 Oct 2026, re-checked after 24 h): https://github.com/actuaryai/data. Open models: https://huggingface.co/actuaryai