WritersLogic Verifiable AI Agent Hub Dispute Ev API
The Dispute Ev API from WritersLogic Verifiable AI Agent Hub — 1 operation(s) for dispute ev.
The Dispute Ev API from WritersLogic Verifiable AI Agent Hub — 1 operation(s) for dispute ev.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/writerslogic-com:writerslogic-com-dispute-ev-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: WritersLogic Verifiable AI Agent Hub Dispute Ev API
version: 2.0.0
description: Pay-per-call agents settled in USDC on Base via x402. Every response carries a signed provenance envelope.
contact:
name: WritersLogic
url: https://writerslogic.com/agents
email: agents@writerslogic.com
servers:
- url: https://agents.writerslogic.com
tags:
- name: Dispute Ev
paths:
/api/v1/dispute-ev:
post:
operationId: dispute_ev
summary: UMA Dispute EV Desk
description: 'For a Polymarket market inside its roughly two-hour UMA challenge window, reads the live proposal on Polygon (adapter, optimistic oracle, bond, finalFee, expiry), judges P(proposal wrong or too early) against the literal rules with an ensemble plus red-team pass and verified quotes (full-game sports markets are decided by code with no model when Gamma''s timestamps show the answer came before the game ended, or when the final score settles an NBA, NHL, MLB or college-football moneyline, spread or total), and computes DISPUTE vs ABSTAIN expected value (bond win/loss, DVM lock cost, gas, your position and reset delay). Returns verdict.action DISPUTE / DO_NOT_DISPUTE / MONITOR_UNTIL with a UTC submit-by deadline, edge in USD and bps of the stake, and the full EV breakdown. Outside a live window it says why (settled, already disputed, no proposal yet) with the proposed and resolved outcome. For a market with no proposal yet, pass proposal.outcome to replay a what-if (mode what_if); the catalog example does this on a long-dated market. Not financial advice.
Price: 0.50 USDC on Base (x402).'
x-x402-price-usdc: '0.50'
x-x402-amount: '500000'
x-payment-info:
protocols:
- x402
price:
mode: fixed
currency: USD
amount: '0.50'
x-audience: crypto
x-sample-url: https://agents.writerslogic.com/api/v1/samples/dispute-ev
security:
- x402: []
- apiKey: []
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- market
properties:
market:
type: string
minLength: 3
maxLength: 500
description: Polymarket slug, market/event URL, conditionId or questionID.
proposal:
type: object
additionalProperties: false
description: Overrides for on-chain proposal fields (what-if or replay). Omit to read the live proposal.
properties:
outcome:
type: string
enum:
- first
- second
- half
description: 'Proposed answer: first listed outcome (UMA price 1), second (price 0) or 50/50.'
expirationTime:
type: string
maxLength: 40
description: ISO-8601 UTC time the challenge window closes.
bondUsd:
type: number
minimum: 0
maximum: 1000000000
finalFeeUsd:
type: number
minimum: 0
maximum: 1000000000
position:
type: object
additionalProperties: false
required:
- outcome
- shares
- avgPrice
description: Your holding in this market.
properties:
outcome:
type: string
minLength: 1
maxLength: 200
description: Outcome label held, e.g. Yes, No or a team name.
shares:
type: number
minimum: 0
maximum: 1000000000000
avgPrice:
type: number
minimum: 0
maximum: 1
description: Average entry price per share, USD.
prices:
type: object
additionalProperties: false
required:
- first
- second
description: Current prices of the first and second listed outcomes, USD per share.
properties:
first:
type: number
minimum: 0
maximum: 1
second:
type: number
minimum: 0
maximum: 1
evidenceUrls:
type: array
maxItems: 3
items:
type: string
maxLength: 2000
description: Public pages to treat as evidence.
params:
type: object
additionalProperties: false
properties:
gasUsd:
type: number
minimum: 0
maximum: 10000
description: Total dispute transaction cost in USD; overrides the estimate.
gasPriceGwei:
type: number
minimum: 0
maximum: 100000
polUsd:
type: number
minimum: 0
maximum: 1000000
aprOpportunity:
type: number
minimum: 0
maximum: 10
description: Annual opportunity cost of capital, default 0.15.
minEdgeUsd:
type: number
minimum: 0
maximum: 1000000000
description: Minimum EV edge for DISPUTE, default 2.
otherDisputeProb:
type: number
minimum: 0
maximum: 1
description: P(someone else disputes a wrong proposal if you abstain), default 0.3 (an unmeasured assumption; it only affects callers holding a position).
safetyMarginMinutes:
type: number
minimum: 0
maximum: 600
description: Submit-by margin before the window closes, default 10.
example:
market: will-jd-vance-win-the-2028-us-presidential-election
proposal:
outcome: first
position:
outcome: 'No'
shares: 400
avgPrice: 0.83
params:
aprOpportunity: 0.15
minEdgeUsd: 2
responses:
'200':
description: Paid result with provenance
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
verdict:
type: object
description: Machine-readable call, computed in code. Leads the answer; detail follows in the other fields.
properties:
action:
type: string
enum:
- DISPUTE
- DO_NOT_DISPUTE
- MONITOR_UNTIL
reason_code:
type: string
description: Stable code for why this action was returned.
confidence:
anyOf:
- type: number
- type: 'null'
description: 0-1; null when no judgment was made.
confidence_label:
type: string
enum:
- low
- medium
- high
edge_bps:
anyOf:
- type: number
- type: 'null'
description: Expected edge in bps of cost; null when not priced.
edge_usd:
anyOf:
- type: number
- type: 'null'
description: 'Expected edge in USD (cover-claim: cover-asset units); null when not priced.'
size_usd:
anyOf:
- type: number
- type: 'null'
description: Suggested stake in USD; null when not sized.
headline:
type: string
drivers:
type: array
items:
type: string
next_step:
type: string
partial:
type: boolean
description: True when part of the analysis could not run; see missing.
missing:
type: array
items:
type: string
disclaimer:
type: string
description: Not financial advice.
mode:
type: string
enum:
- live
- what_if
description: 'what_if: no proposal existed yet and the caller''s proposal override was judged instead of an on-chain proposal.'
retrospective:
type: object
description: 'Present when the request is already settled, disputed, resolved or paused: status, proposed and resolved outcome labels, proposer and disputer.'
decision:
type: string
enum:
- DISPUTE
- DO_NOT_DISPUTE
- MONITOR_UNTIL
deadlineUtc:
anyOf:
- type: string
- type: 'null'
description: Submit-by time (window close minus safety margin) or re-check time, UTC ISO-8601.
confidence:
type: string
enum:
- low
- medium
- high
abstention:
type: object
description: Set when no judgment was made (unsupported market, blocked state, insufficient evidence).
reasons:
type: array
items:
type: string
market:
type: object
proposal:
type: object
window:
type: object
probabilities:
type: object
ev:
type: object
description: EV of DISPUTE and ABSTAIN with bond, lock, gas and position components, plus breakeven probability and sensitivity.
judgment:
type: object
description: Ensemble and red-team outputs with verified quotes.
evidence:
type: object
whatWouldChangeTheVerdict:
type: array
items:
type: string
assumptions:
type: object
_provenance:
type: object
description: C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance
required:
- data
- _provenance
'400':
description: Invalid request (no payment consumed)
content:
application/json:
schema:
type: object
properties:
error:
type: string
code:
type: string
'401':
description: Invalid X-API-KEY
content:
application/json:
schema:
type: object
properties:
error:
type: string
code:
type: string
'402':
description: Payment required or invalid
content:
application/json:
schema:
type: object
description: x402 v2 PaymentRequired (also base64 in the PAYMENT-REQUIRED header)
properties:
x402Version:
type: integer
error:
type: string
code:
type: string
resource:
type: object
accepts:
type: array
items:
type: object
extensions:
type: object
'502':
description: Upstream failure; the payment is released or not settled
content:
application/json:
schema:
type: object
properties:
error:
type: string
code:
type: string
tags:
- Dispute Ev
components:
securitySchemes:
x402:
type: apiKey
in: header
name: PAYMENT-SIGNATURE
description: x402 v2 payment payload (base64) sent after a 402 challenge
apiKey:
type: apiKey
in: header
name: X-API-KEY