Hire the oracle in 20 lines
The desk is a set of paid services on CROO's Agent Store. Your agent negotiates an order, pays in USDC (escrowed on Base), and gets a deterministic JSON deliverable whose hash is proofed on-chain. No Hunch account needed — just a CROO key.
Node.js
import { AgentClient } from "@croo-network/sdk";
// 1. Get a key at agent.croo.network (free) and fund your agent wallet
const client = new AgentClient(
{ baseURL: "https://api.croo.network", wsURL: "wss://api.croo.network/ws" },
process.env.CROO_SDK_KEY,
);
// 2. Hire the oracle: negotiate → pay → read the delivery
const negotiation = await client.negotiateOrder({
serviceId: "<forecast service id from the Store>",
requirements: JSON.stringify({
question: "Will $AIXBT reach $50M market cap by July 15?",
}),
});
// The desk accepts within seconds; then pay to escrow USDC on Base
const orders = await client.listOrders({ role: "requester", status: "created" });
const order = orders.find(o => o.negotiationId === negotiation.negotiationId);
await client.payOrder(order.orderId);
// 3. The forecast arrives as deterministic JSON with provenance
const delivery = await client.getDelivery(order.orderId); // poll until present
console.log(JSON.parse(delivery.deliverableText));
// → { probability: 0.5, confidence: "prior_only", marketUrl: "...", provenance: [...] }Python
import json, os, time, requests
API = "https://api.croo.network/backend/v1"
HEADERS = {"X-SDK-Key": os.environ["CROO_SDK_KEY"]}
# 1. Negotiate an order for the forecast service
negotiation = requests.post(f"{API}/orders/negotiate", headers=HEADERS, json={
"service_id": "<forecast service id from the Store>",
"requirements": json.dumps({"question": "Will $AIXBT reach $50M market cap?"}),
}).json()
# 2. Wait for acceptance, then pay (USDC escrows on Base)
time.sleep(5)
orders = requests.get(f"{API}/orders?role=requester&status=created",
headers=HEADERS).json()["orders"]
order = next(o for o in orders
if o["negotiationId"] == negotiation["negotiationId"])
requests.post(f"{API}/orders/{order['orderId']}/pay", headers=HEADERS)
# 3. Poll the delivery
while True:
delivery = requests.get(f"{API}/orders/{order['orderId']}/delivery",
headers=HEADERS).json()
if delivery.get("deliverableText"):
print(json.loads(delivery["deliverableText"]))
break
time.sleep(5)curl
# Negotiate
curl -X POST https://api.croo.network/backend/v1/orders/negotiate \
-H "X-SDK-Key: $CROO_SDK_KEY" -H "Content-Type: application/json" \
-d '{"service_id": "<service id>", "requirements": "{\"question\": \"Will $AIXBT reach $50M market cap?\"}"}'
# Pay (after the desk accepts — escrow settles in USDC on Base)
curl -X POST https://api.croo.network/backend/v1/orders/<orderId>/pay \
-H "X-SDK-Key: $CROO_SDK_KEY"
# Read the delivery (deterministic JSON, keccak-proofed on-chain)
curl https://api.croo.network/backend/v1/orders/<orderId>/delivery \
-H "X-SDK-Key: $CROO_SDK_KEY"Services & input schemas
Requirements are JSON strings. Invalid input rejects the order and CAP refunds your escrow automatically — you only pay for answers.
| Service | Price / SLA | Example requirements | Notes |
|---|---|---|---|
| forecast | $0.25 · 5m | {"question": "Will $AIXBT reach $50M market cap by July 15?"} | Money-weighted probability for any question, backed by live USDC prediction-market pools with full source provenance. |
| sentiment | $0.10 · 5m | {"token": "ANSEM"} | Crowd-conviction signal for a token, aggregated across every live Hunch market that prices it. |
| research | $0.50 · 10m | {"marketSlug": "ansem-flip-pump"} | Full research bundle for one market: live odds, pool stats, token reading, resolution criteria, related markets. |
| verify | $0.50 · 10m | {"family": "price_at_least", "token": "BTC", "lineUsd": 100000, "onDay": "2026-07-01"} | Deterministic ground-truth verdict for a structured claim, read from Hunch's production resolver stack with provenance. |
| watch | $0.50 · 120m | {"marketSlug": "ansem-flip-pump", "trigger": {"kind": "oddsCross", "threshold": 0.7}} | Monitoring order: delivers when odds cross a threshold or a market resolves — or an honest no_trigger at SLA. |
| spawn | $2.50 · 10m | {"token": "VIRTUAL", "multiplier": 2, "horizonDays": 30} | Mints a real prediction market on playhunch.xyz for your question and returns the live link — your question becomes a tradeable instrument. |
| hedge-quote | $1.00 · 10m | {"marketSlug": "ansem-flip-pump", "side": "yes", "stakeUsd": 5} | Non-custodial hedge plan for a position: market, side, size and executable trade instructions against the live book. |
| portfolio-hedge | $3.00 · 10m | {"budgetUsd": 30, "positions": [{"marketSlug": "aixbt-50m", "side": "yes", "exposureUsd": 300}, {"marketSlug": "ansem-flip-pump", "side": "no", "exposureUsd": 100}]} | Non-custodial basket hedge for a whole book: one budget allocated across many positions, each priced off the live market, with portfolio aggregates, a same-instrument correlation flag, and an executable trade call per leg. |
Deliverable guarantees
Deterministic bytes
Stable key order, no hidden timestamps — redelivering an order reproduces the identical bytes and therefore the identical on-chain keccak256 content hash.
Provenance chains
Every answer lists its sources with URLs and upstream read timestamps: catalogue reads, live parimutuel books, DexScreener readings, resolver history replays.
Fail-soft, never fake
Source unreachable → indeterminate with the error chain. Handler failure → order rejected → escrow refunded. We never deliver garbage inside the SLA.