Two venues list what looks like one trade (“BTC above $60,000,”
“Mexico beats South Africa”), and your agent hedges one leg against the
other. But they can settle on different oracles, at different instants, under different
void rules. When they diverge, the risk-free hedge is a naked directional bet. Crosswire
is the resolution-truth gate that sits in front of that trade: send two market references,
get back SAFE / CAUTION / BLOCK and the exact divergence, before
either leg fires. Stateless, machine-to-machine, $0.02 a call on Base.
Polymarket settles on the Binance noon-ET close; Kalshi settles on CF Benchmarks BRTI, five hours later. Same strike, different oracle and a different instant. That gap is the finding.
A cross-venue price gap survives because the two legs are not the same bet. Crosswire names which divergence before it costs you the hedge. Lead example: a daily matched-strike “BTC above $X” pair.
Polymarket’s bitcoin-above resolves on the Binance 1-minute close.
Kalshi’s KXBTCD resolves on CF Benchmarks’ BRTI, a
60-second averaged index across multiple exchanges. Same strike, two different
oracles. On a sharp wick they can disagree on which side of $60,000 the print landed.
The hedge you booked against “the BTC price” was booked against two prices.
Two legs that look simultaneous can resolve hours apart. The crypto pair that proved our pipeline was cross-hour: Polymarket resolved at noon ET (16:00Z), Kalshi at 5 PM EDT (21:00Z): a five-hour gap on the same calendar day. Even when the clock labels match, a single-minute close and a 60-second rolling average sample different windows. Crosswire flags the timing divergence rather than letting your bot assume simultaneity.
Void and scope rules diverge across venues, and a cancellation or out-of-scope outcome can void one leg while the other settles, turning a closed hedge into one open directional leg. On the free World Cup pairs this is live and fatal: Polymarket resolves a cancelled match to “No” while Kalshi resolves the same cancellation to a fair price. The gate BLOCKs on it. (Try that one without paying; see Live audit.)
Send the two market references; receive a Fungibility & Settlement Audit Object with the verdict and its reasons. Two real responses:
{
"canonical_event_id":
"crypto:btc-above:2026-06-27:strike-60000"
}
Metered: 402 → sign → verdict (see “Wire it in”).
CAUTION, not BLOCK: the question type matches, but the settlement source and
instant diverge.
{
"canonical_event_id": "crypto:btc-above:2026-06-27:strike-60000#above",
"leg_a": { "venue": "polymarket", "market_id": "0xb91da4c0…096af", "outcome": "Yes", "side": "yes" },
"leg_b": { "venue": "kalshi", "market_id": "KXBTCD-26JUN2717-T59999.99", "outcome": "yes", "side": "yes" },
"matching_confidence": 0.95,
"semantically_fungible": true,
"scope_divergence_flag": false,
"void_rule_divergence_flag": false,
"settlement_source_divergence_flag": true,
"settlement_timing_divergence_flag": true,
"findings": [
{ "code": "settlement_source", "severity": "warn", "affects_fungibility": false,
"detail": "Polymarket = Binance BTC/USDT 1-minute close; Kalshi = CF Benchmarks BRTI 60-second average." },
{ "code": "settlement_timing", "severity": "warn", "affects_fungibility": false,
"detail": "Polymarket resolves noon ET (16:00Z); Kalshi resolves 5 PM EDT (21:00Z): a 5-hour cross-hour pairing, flagged not papered over." }
],
"fee_adjusted_true_spread": 0.046,
"snapshot_age_seconds": 43,
"execution_verdict": "caution",
"ruleset_sha": "5d571399…df91f0"
}
{
"canonical_event_id":
"wc26:match:MEX-RSA:2026-06-11:result#home"
}
Every covered World Cup pair BLOCKs on void-rule divergence today. Free to call, no key, no payment: the on-ramp to the metered crypto inventory.
{
"audit_id": "aud_01KTW12YWQ7981AXFX2SFE3JAE",
"canonical_event_id": "wc26:match:MEX-RSA:2026-06-11:result#home",
"leg_a": { "venue": "polymarket", "market_id": "0x4cd77d45…10ff" },
"leg_b": { "venue": "kalshi", "market_id": "KXWCGAME-26JUN11MEXRSA-MEX" },
"matching_confidence": 0.98,
"semantically_fungible": false,
"scope_divergence_flag": false,
"void_rule_divergence_flag": true,
"settlement_source_divergence_flag": true,
"settlement_timing_divergence_flag": true,
"findings": [
{ "code": "void_rule", "severity": "fatal",
"detail": "Void conditions differ … A core void asymmetry
can void one leg while the other settles.",
"affects_fungibility": true },
{ "code": "settlement_source", "severity": "warn",
"detail": "fifa.com (UMA-adjudicated) vs Kalshi internal …" },
{ "code": "settlement_timing", "severity": "warn",
"detail": "2h statistics fallback vs unspecified …" }
],
"fee_adjusted_true_spread": -0.011,
"execution_verdict": "block",
"ruleset_sha": "af11f6c92521…b6029f"
}
The gate advises; it never trades. If Crosswire is unreachable, your bot
proceeds exactly as it would without us, and the SDK marks the result
degraded=true so you can alert on it. Strict mode (halt on
uncertainty) is opt-in. During an outage in advisory mode a trap can slip
through. That is the trade, and we state it rather than hide it.
Past the free quota on a crypto: pair, there is no account, no card, no
human. Your agent’s x402 client handles the whole handshake on Base mainnet.
POST /v1/audit on a metered pair returns HTTP 402 with
the v2 payment terms in the PAYMENT-REQUIRED header.
The agent signs a $0.02 USDC micropayment (exact
scheme over EIP-3009 transferWithAuthorization, gasless) and
retries with the PAYMENT-SIGNATURE header.
Crosswire forwards to the Coinbase CDP facilitator, which verifies and settles on
Base; you get 200 + the FSAO + the on-chain tx hash in
PAYMENT-RESPONSE.
Free World Cup pairs stay free forever: call them with no key and no payment to
try the engine before you wire up a wallet. The crypto: oracle-divergence
inventory is metered: 3 free calls/day per identity, then $0.02
USDC/call. Uncovered pairs are never charged; coverage is resolved
before any payment is quoted.
{
"scheme": "exact",
"network": "eip155:8453",
"amount": "20000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0x337878b1F8CcE042305Af9ac77201A5903a82218",
"maxTimeoutSeconds": 60,
"extra": { "assetTransferMethod": "eip3009", "name": "USD Coin", "version": "2" }
}
The settlement above is a real on-chain payment; verify it yourself on Basescan.
It was our own funded test wallet paying to prove the rail end-to-end; it is
not evidence of external demand, and we will not dress it up as
traction. What is proven: the engine returns audited verdicts and the x402 rail settles
real USDC. What is unproven: whether agents other than us pay for it yet. Every verdict
is reproducible from {ruleset_sha, snapshot_ts, canonical_event_id}.
The identity graph is curated by hand: equivalence, settlement source, timing and void rules are read from each venue’s own rules text, then frozen and hashed. Free World Cup football pairs and the metered crypto matched-strike inventory (GRAPH-CRYPTO-01).
| World Cup football pairs · free | See /v1/events for the live covered set · three pairs (home / draw / away) per match. | |
crypto: matched-strike daily “BTC above $X” | Polymarket (Binance) ↔ Kalshi (BRTI) · metered |
World Cup matches are three contract pairs (home, draw, away), matched across Polymarket
and Kalshi at high confidence and free to call. The crypto inventory is the matched-strike
pair that proved the pipeline, not a 24/7 market: the clean noon↔noon
pair rolls daily and has a narrow live window, and a standing always-on sellable pair
depends on the daily-roll resolver still in flight. Free endpoints (/v1/health,
/v1/events, the MCP tools) are rate-limited at 10 requests per second per IP;
the crypto /v1/audit inventory meters by x402, not by key.
Crosswire speaks MCP and x402. An agent that discovers the endpoint lists covered events and runs a pre-trade audit on its own, with no human and no key for the free tools. The World Cup graph is free; the crypto oracle-divergence inventory is metered at $0.02 USDC/call over x402 on Base.
$0.02 USDC / audit
World Cup pairs stay free forever. The crypto: oracle-divergence
inventory is metered: after 3 free calls/day, POST /v1/audit returns
HTTP 402 with payment terms. Your agent signs a USDC micropayment,
retries, and gets the FSAO. No API key, no human. Discoverable in the
x402 Bazaar via /.well-known/x402.json.
{
"scheme": "exact",
"network": "eip155:8453",
"amount": "20000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0x337878b1F8CcE042305Af9ac77201A5903a82218",
"maxTimeoutSeconds": 60,
"extra": { "assetTransferMethod": "eip3009", "name": "USD Coin", "version": "2" }
}
check_resolution_risk: two market refs in, full FSAO outlist_covered_events: coverage, pair ids, ruleset sha{
"mcpServers": {
"crosswire": {
"url": "https://api.crosswire-api.com/mcp"
}
}
}
Optional X-API-Key for free WC pairs; the crypto inventory meters by
x402, not by key. Three lines to a verdict:
curl -s https://api.crosswire-api.com/v1/audit \
-H "Content-Type: application/json" \
-d '{"canonical_event_id": "wc26:match:USA-PAR:2026-06-12:result#home"}'
The boundary is the trust anchor. It is written into the spec and it does not move.