This is a reference for the verification API’s payload adapter. For apps you can use inside a Desk, see Desk apps.
venue: dimes. Over HTTP, multiply, dimesfi and dimesmultiply also resolve to it, so dimes.fi works too.
Dimes Multiply gives 2x to 10x leveraged exposure on Polymarket markets. Positions open against a vault contract on Polygon (chain 137), and the collateral token is pUSD.
What to send
Any of these payloads. All are detected withoutvenue.
- An offer or quote body for
POST /prediction-markets/quotes:{market_ticker, effective_side, leverage_bps, notional_amount_usd_pips, slippage_bps, ...}.notional_usd_pipsis accepted in place ofnotional_amount_usd_pips. A body carrying acontract_signatureis read as a signed quote. - A Polygon transaction
{to, data, chainId}to a Dimes vault, bare or wrapped in{transaction}or{tx}. - An ERC-20
approvewhose spender is a Dimes vault. - A batch
{kind: "evm_calls", calls: [...]}or{calls: [...]}where at least one call targets a vault. Each call may usetoortarget.
A transaction, approval or batch that declares a chain other than Polygon is not detected as Dimes. With
venue: "dimes" it is classified unknown and flagged, because no Dimes contract exists at those addresses on other chains. A payload that declares no chain gets a note that Polygon is assumed.
Units
The classifier converts every venue unit to dollars and multipliers before the judge reads it:*_usd_pips: 10,000 pips is $1.00.*_usdc_units: 6 decimals, 1,000,000 is $1.00. The token is pUSD, not USDC, whatever the field name says.leverage_bps: 10,000 is 1x, so 50,000 is 5x.
Live lookup
For offer and quote bodies, the adapter callsGET /prediction-markets/markets/{market_ticker}?expand=prices on https://api.dimes.fi/v1, or on https://api-sandbox.dimes.fi/v1 when the quote’s polygon_vault_contract_address is the sandbox vault. An offer with no vault address is looked up in production. It adds the market title, status, category, close date and the current ask for your side, and flags a side that is not accepting new positions, leverage above that side’s cap and a market that is not active. The timeout is 3.5 seconds and results are cached for 5 minutes.
Calldata has no ticker, only opaque Polymarket ids, so vault transactions are not looked up and the market’s identity is marked unverified.
Notes the classifier adds
- Leverage outside 2x to 10x, or not a multiple of 2,500 bps.
slippage_bpsoutside 100 to 1,000, and anything above 500.allow_partial_fill, which lets the position open at as little asmin_fill_bpsof the requested size (20% when unset).- A signature expiry already in the past, which reverts on chain.
- A quote whose vault address is not a known Dimes vault.
createPositionarguments where notional does not equal collateral × leverage. Real Dimes quotes always satisfy this, so these arguments did not come from one.- A draft with an empty signature. It is not executable; Dimes signs the same terms when the quote is promoted.
- An unlimited or near-unlimited approval, and an approval or transfer of a token that is not the environment’s pUSD.
- In a batch: a transfer to an address that is not the vault, and an
approvewhose spender is not a vault. - A push-funded open, where the pUSD pushed must equal the position’s total exactly.
requestPartialClose, which is gated: while it is disabled, the call is accepted but not acted on.- Sandbox actions are labelled as test funds.
Examples
An offer body:action:
request-close in the position family.
From an MCP client
Instruct the agent to callverify_intent before requesting a Dimes quote or signing a vault transaction, with your rules as intent, the exact payload as action and venue: "dimes", and to act only on ALLOW.
The Dimes trading agent runs every order through this adapter before it trades.
The sandbox runs on Polygon too, with its own vault and worthless test pUSD. The classifier tells the two apart by contract address, so a rule such as “sandbox only” can be checked from the payload.

