Crosswire | Pre-trade resolution-truth gate for cross-venue trading agents
Read the docs
Pre-trade resolution-truth gate · Cross-venue trading agents
The same market is not the same bet.
Two venues list what looks like one trade (“BTC above $60,000,”<br>“Mexico beats South Africa”), and your agent hedges one leg against the<br>other. But they can settle on different oracles, at different instants, under different<br>void rules. When they diverge, the risk-free hedge is a naked directional bet. Crosswire<br>is the resolution-truth gate that sits in front of that trade: send two market references,<br>get back SAFE / CAUTION / BLOCK and the exact divergence, before<br>either leg fires. Stateless, machine-to-machine, $0.02 a call on Base.
Wire in the MCP<br>Pay-per-call on Base
Read the x402 manifest →
agent · zsh
$ curl -s https://api.crosswire-api.com/v1/audit \<br>-H "Content-Type: application/json" \<br>-d '{"canonical_event_id": "crypto:btc-above:2026-06-27:strike-60000"}' \<br>| jq '{execution_verdict, findings: [.findings[].code]}'<br>"execution_verdict": "caution",<br>"findings": ["settlement_source", "settlement_timing"]
Polymarket settles on the Binance noon-ET close; Kalshi settles on CF Benchmarks BRTI,<br>five hours later. Same strike, different oracle and a different instant. That gap<br>is the finding.
The insight
Three ways the “same” market breaks.
A cross-venue price gap survives because the two legs are not the same bet. Crosswire<br>names which divergence before it costs you the hedge. Lead example: a daily<br>matched-strike “BTC above $X” pair.
01 · Settlement source
Who declares the result?
Polymarket’s bitcoin-above resolves on the Binance 1-minute close.<br>Kalshi’s KXBTCD resolves on CF Benchmarks’ BRTI, a<br>60-second averaged index across multiple exchanges. Same strike, two different<br>oracles. On a sharp wick they can disagree on which side of $60,000 the print landed.<br>The hedge you booked against “the BTC price” was booked against two prices.
02 · Settlement timing
At exactly what instant?
Two legs that look simultaneous can resolve hours apart. The crypto pair that proved<br>our pipeline was cross-hour: Polymarket resolved at noon ET (16:00Z), Kalshi at 5 PM<br>EDT (21:00Z): a five-hour gap on the same calendar day. Even when the clock<br>labels match, a single-minute close and a 60-second rolling average sample different<br>windows. Crosswire flags the timing divergence rather than letting your bot assume<br>simultaneity.
03 · Void rules & scope
What if it doesn’t resolve cleanly?
Void and scope rules diverge across venues, and a cancellation or out-of-scope<br>outcome can void one leg while the other settles, turning a closed hedge into<br>one open directional leg. On the free World Cup pairs this is live and fatal:<br>Polymarket resolves a cancelled match to “No” while Kalshi resolves the<br>same cancellation to a fair price. The gate BLOCK s on it.<br>(Try that one without paying; see Live audit.)
One endpoint. An auditable answer.
Send the two market references; receive a Fungibility & Settlement Audit<br>Object with the verdict and its reasons. Two real responses:
BTC $60k · crypto · metered<br>MEX-RSA · World Cup · free
POST/v1/audit<br>Request
request.json
"canonical_event_id":<br>"crypto:btc-above:2026-06-27:strike-60000"
Metered: 402 → sign → verdict (see “Wire it in”).<br>CAUTION, not BLOCK: the question type matches, but the settlement source and<br>instant diverge.
CAUTION<br>Response · 200 · abridged · real engine output
fsao.json · abridged
"canonical_event_id": "crypto:btc-above:2026-06-27:strike-60000#above",<br>"leg_a": { "venue": "polymarket", "market_id": "0xb91da4c0…096af", "outcome": "Yes", "side": "yes" },<br>"leg_b": { "venue": "kalshi", "market_id": "KXBTCD-26JUN2717-T59999.99", "outcome": "yes", "side": "yes" },<br>"matching_confidence": 0.95,<br>"semantically_fungible": true,<br>"scope_divergence_flag": false,<br>"void_rule_divergence_flag": false,<br>"settlement_source_divergence_flag": true,<br>"settlement_timing_divergence_flag": true,<br>"findings": [<br>{ "code": "settlement_source", "severity": "warn", "affects_fungibility": false,<br>"detail": "Polymarket = Binance BTC/USDT 1-minute close; Kalshi = CF Benchmarks BRTI 60-second average." },<br>{ "code": "settlement_timing", "severity": "warn", "affects_fungibility": false,<br>"detail": "Polymarket resolves noon ET (16:00Z); Kalshi resolves 5 PM EDT (21:00Z): a 5-hour cross-hour pairing, flagged not papered over." }<br>],<br>"fee_adjusted_true_spread": 0.046,<br>"snapshot_age_seconds": 43,<br>"execution_verdict": "caution",<br>"ruleset_sha": "5d571399…df91f0"
POST/v1/audit<br>Request
request.json
"canonical_event_id":<br>"wc26:match:MEX-RSA:2026-06-11:result#home"
Every covered World Cup pair BLOCK s on void-rule divergence today.<br>Free to call, no key, no payment: the on-ramp to the metered crypto...