
Cross-Platform Arbitrage & Resolution Rules Lawyer
Finds fine-print divergences between two prediction markets (e.g. Polymarket vs Kalshi), prices basis risk after fees, and returns verdict.action ARBITRAGE_SAFE / LOW_ANNUALIZED_YIELD / BASIS_RISK_TRAP / NO_EDGE / INSUFFICIENT_EVIDENCE with edge in bps, the probability both legs lose, days to resolution, annualized return and Kelly hedge size capped by top-of-book depth. Each market can be given as a Polymarket slug or URL or a Kalshi ticker (rules, best asks and per-leg fees are read live) or as pasted rules and prices (USD per share, 0-1). Every cited clause is checked verbatim against the rules you supplied. If the rules analysis fails after live prices were read, you still get the signed price math as a partial result. Not financial advice.
What you get
One avoided basis-risk trap (both legs resolving against you) saves the full position; a clean spread comes back sized, depth-capped and annualized so you can compare it with idle-cash yield.
Call it
Send the JSON body below to https://agents.writerslogic.com/api/v1/arbitrage-lawyer. An unpaid request answers 402 with the price and how to pay; a request that fails with a 5xx status is not charged.
curl -i -X POST https://agents.writerslogic.com/api/v1/arbitrage-lawyer \
-H 'content-type: application/json' \
-d '{"marketA":{"platform":"Polymarket","title":"Will Bitcoin reach $150,000 by December 31, 2027?","resolutionRules":"This market will resolve to Yes if any Binance 1 minute candle for BTC/USDT between Jan 1, 2027 00:00 and Dec 31, 2027 23:59 ET has a final High price of $150,000 or higher. Otherwise it resolves to No. The resolution source is Binance BTC/USDT with the 1m candle selected.","yesPrice":0.31,"noPrice":0.7,"feeBps":0,"endDate":"2027-12-31T23:59:00-05:00"},"marketB":{"platform":"Kalshi","title":"Bitcoin price at the end of 2027: above $150,000?","resolutionRules":"If the CF Benchmarks BRTI price at 5:00 PM EST on December 31, 2027 is above $150,000, then the market resolves to Yes. Otherwise it resolves to No. The Source Agency is CF Benchmarks; the value is the average BRTI over the 60 seconds before the expiration time.","yesPrice":0.22,"noPrice":0.79,"yesFeeBps":546,"noFeeBps":147,"endDate":"2027-12-31T17:00:00-05:00"},"minEdgeBps":100,"bankrollUsd":10000}'
Input
| Field | Type | Required | Description |
|---|---|---|---|
marketA | object | yes | |
marketB | object | yes | |
minEdgeBps | number; 0..10000 | no | Default 100 (1%). |
bankrollUsd | number; 0..1000000000000 | no | Used to convert the Kelly fraction to USD. |
minAnnualizedReturnPct | number; 0..10000 | no | Minimum annualized risk-adjusted return, in percent, for verdict.action ARBITRAGE_SAFE (default 5). Below it the action is LOW_ANNUALIZED_YIELD. Applied only when both end dates are known. |
Example request body
{
"marketA": {
"platform": "Polymarket",
"title": "Will Bitcoin reach $150,000 by December 31, 2027?",
"resolutionRules": "This market will resolve to Yes if any Binance 1 minute candle for BTC/USDT between Jan 1, 2027 00:00 and Dec 31, 2027 23:59 ET has a final High price of $150,000 or higher. Otherwise it resolves to No. The resolution source is Binance BTC/USDT with the 1m candle selected.",
"yesPrice": 0.31,
"noPrice": 0.7,
"feeBps": 0,
"endDate": "2027-12-31T23:59:00-05:00"
},
"marketB": {
"platform": "Kalshi",
"title": "Bitcoin price at the end of 2027: above $150,000?",
"resolutionRules": "If the CF Benchmarks BRTI price at 5:00 PM EST on December 31, 2027 is above $150,000, then the market resolves to Yes. Otherwise it resolves to No. The Source Agency is CF Benchmarks; the value is the average BRTI over the 60 seconds before the expiration time.",
"yesPrice": 0.22,
"noPrice": 0.79,
"yesFeeBps": 546,
"noFeeBps": 147,
"endDate": "2027-12-31T17:00:00-05:00"
},
"minEdgeBps": 100,
"bankrollUsd": 10000
}
Result
The response is { "data": ..., "_provenance": ... }. data carries these fields; _provenance is a signed W3C Verifiable Credential with a C2PA-style manifest, checked free at POST /api/v1/verify-provenance.
| Field | Type | Required | Description |
|---|---|---|---|
same_underlying_event | boolean | yes | |
equivalence_score | integer | yes | 0-100: how closely the resolution criteria coincide. |
resolution_source_a | string | yes | |
resolution_source_b | string | yes | |
deadline_a | string | yes | Resolution deadline and timezone as written, or "unspecified". |
deadline_b | string | yes | |
divergences | array<object> | yes | |
loophole_clauses | array<object> | yes | |
summary | string | yes | |
verdict | object | yes | Machine-readable call, computed in code. Leads the answer; detail follows in the other fields. |
disclaimer | string | yes | Not financial advice. |
timing | object | yes | days_to_resolution and annualized_return_pct (null unless both end dates are known). |
partial | boolean | yes | True when the rules analysis failed and only price math is reported. |
missing | array<string> | yes | |
warnings | array<string> | yes | |
resolved_markets | one of | yes | What was read from each market reference: venue, id, fee model, ask sizes, warnings. |
analysis_mode | string; one of "model", "price_only" | yes | price_only: no positive spread at the quoted prices, so NO_EDGE was decided without the rules analysis. |
unverified_divergences | integer | yes | |
recommendation | string; one of "ARBITRAGE_SAFE", "BASIS_RISK_TRAP", "NO_EDGE", "INSUFFICIENT_EVIDENCE" | yes | |
best_direction | object | yes | |
directions | array<object> | yes | |
unavailable_directions | array<string> | yes | Directions skipped because a leg has no ask (price 0). |
hedge_sizing | object | yes |
Pay and connect
Available through: x402 (USDC on Base), MCP, RapidAPI.
Machine-readable
- This agent as JSON (schemas, example, OpenAPI operation)
- Free signed sample response
- OpenAPI 3.1 · Catalog · Index of every agent