One venue settles a cancelled match to “No”; the other resolves it to a fair price. One market ends at 90 minutes; another includes extra time. Crosswire is a pre-trade resolution audit for cross-venue event markets: before your agent fires both legs of a hedge, it asks us whether the two contracts actually settle the same way. It gets the exact divergence that would break the trade. SAFE, CAUTION, or BLOCK.
Cross-venue price gaps survive because the two legs are not actually the same bet. The audit names the divergence before it costs you the hedge.
A market that pays on the 90-minute result is not a hedge for one that includes extra time and penalties. A draw at 90 that is decided on penalties settles the two legs inconsistently. The spread between them was never capturable.
On the matches we cover today, Polymarket resolves a cancelled match to “No” while Kalshi resolves the same cancellation to a fair price. One leg voids while the other settles. This divergence is live on every covered pair. It is the launch finding. The gate blocks on it.
fifa.com statistics adjudicated by UMA on one venue; internal settlement with no external source cited on the other, and no stated timing. Contested or late-corrected results can settle differently, or hours apart.
Send the two market references; receive a Fungibility & Settlement Audit Object with the verdict and its reasons. Two real responses:
{
"canonical_event_id":
"wc26:match:MEX-RSA:2026-06-11:result#home"
}
Authenticated with the X-API-Key header. The pair can also be named
by its two venue market ids.
{
"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"
}
{
"canonical_event_id":
"wc26:match:BRA-ARG:2026-06-14:winner"
}
The shape of a clean pass, from the committed test fixture. Under today’s ruleset every covered World Cup pair blocks on void-rule divergence. We will not show you a live SAFE that does not exist.
{
"audit_id": "aud_01KTW17QESWWQ394Z9BJBZ69C6",
"canonical_event_id": "wc26:match:BRA-ARG:2026-06-14:winner",
"matching_confidence": 0.98,
"semantically_fungible": true,
"scope_divergence_flag": false,
"void_rule_divergence_flag": false,
"settlement_source_divergence_flag": false,
"settlement_timing_divergence_flag": false,
"findings": [],
"fee_adjusted_true_spread": 0.0006,
"execution_verdict": "safe",
"verdict_reasons": [
"legs fungible; no divergence above info severity"
],
"ruleset_sha": "dev-fixture"
}
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.
p50 measured on the production serving path over 100 keyed requests, 2026-06-11.
The request path is a cache read, not a live recompute, and we make no latency
guarantees. Network time from your machine is yours. Every verdict is logged,
append-only, and reproducible from {ruleset_sha, snapshot_ts,
canonical_event_id}.
The identity graph is curated by hand: equivalence, void rules and resolution sources are read from the venues’ own rules text, then frozen and hashed. Coverage expands daily through the tournament; each freeze bumps the ruleset sha.
| Mexico vs South Africa | 2026-06-11 | 3 pairs · home / draw / away |
| Korea Republic vs Czechia | 2026-06-11 | 3 pairs · home / draw / away |
| Canada vs Bosnia-Herzegovina | 2026-06-12 | 3 pairs · home / draw / away |
| United States vs Paraguay | 2026-06-12 | 3 pairs · home / draw / away |
Each match is three contract pairs (home, draw, away), matched across
Polymarket and Kalshi at 0.98 confidence. Free endpoints
(/v1/health, /v1/events, the MCP tools) are rate-limited
at 10 requests per second per IP; /v1/audit requires a key.
Crosswire speaks MCP. An agent that discovers the endpoint can list the covered events and run a pre-trade audit on its own. No human in the loop; no key needed for the MCP tools.
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"
}
}
}
Free opening-weekend keys are issued by mail while the program runs. Three lines to a verdict:
curl -s https://api.crosswire-api.com/v1/audit \
-H "X-API-Key: $CROSSWIRE_KEY" -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.