← Protocols
Overtime Markets
Prediction Market·EVM (Optimism, Arbitrum, Base)

Overtime Markets

01Description

Onchain sports prediction market originally built on top of Thales, now a standalone protocol. Deployed on Optimism (primary), Arbitrum and Base — uses an AMM-style liquidity model with no KYC and account-abstraction UX.

02Best for
  • 01onchain sports betting frontends
  • 02no-KYC sportsbook apps
  • 03embedded sports odds widgets
  • 04parlay / single-bet UIs
  • 05live in-play betting flows
03Install
  • pnpm add @overtime-markets/sdk ethers viem
04Environment variables
VariableScopeDescription
NEXT_PUBLIC_OVERTIME_API_BASEClientBase URL for the Overtime data API — typically https://api.overtimemarkets.xyz. Used to discover markets and quote odds.
NEXT_PUBLIC_OVERTIME_NETWORK_IDClientTarget network id: 10 (Optimism), 42161 (Arbitrum) or 8453 (Base). Drives contract addresses and liquidity pools.
NEXT_PUBLIC_OVERTIME_REFERRERClientReferrer address that receives a share of the spread on each ticket placed via your frontend.
05Prompt snippet
Use Overtime for onchain sports betting on Optimism / Arbitrum / Base. Discover markets via `GET https://api.overtimemarkets.xyz/overtime-v2/networks/<networkId>/markets` (filter by `sport`, `status=open`, `ungroup=true`) and quote a parlay/single via `POST /networks/<networkId>/quote` with `{ tradeData: [...], buyInAmount, collateral }`. Submit by calling `tradeData`-based `trade` on the SportsAMMV2 contract (or the LiveTradingProcessor for in-play markets) — collateral is USDC by default but multi-collateral routing through `MultiCollateralOnOffRamp` lets users pay in ETH/THALES/OVER. Bind the referrer address for revenue share. Read open positions via subgraph (`overtime-protocol-v2` on each chain) and settle via `exerciseTickets` once games resolve.
06Gotchas
  • AMM-style liquidity, not an orderbook — odds drift with ticket size against the pool. Always quote via the API immediately before submitting; stale quotes fail with `InvalidOdds`.
  • Each chain (OP / ARB / Base) has its own SportsAMMV2 deployment, USDC contract and subgraph. Don't share addresses across chains — pull them from the docs' addresses page or `@overtime-markets/sdk` registry.
  • Resolution relies on Chainlink + a centralized data provider; disputed games can pause settlement. Surface `Ticket.status` (Open / Resolved / Cancelled / Paused) so users understand why payouts are delayed.
  • No KYC, but the protocol still geofences blocked jurisdictions at the frontend layer. If you build a public UI mirror their geo-blocklist (US, UK, France, etc.) to stay aligned with their licensing posture.
  • Live (in-play) markets use a separate `LiveTradingProcessor` flow with a request-then-confirm pattern — direct calls to SportsAMMV2 won't work for in-play bets.
  • Account-abstraction UX (smart-wallet bundlers via Biconomy) is the recommended path; using a raw EOA + ERC-20 approvals works but skips gasless / one-tap signing the docs assume.
07Alternatives