Odds-API.io Arbitrage Bets API

The Arbitrage Bets API from Odds-API.io — 1 operation(s) for arbitrage bets.

GitHub OpenAPI

Operations 1

GET /arbitrage-bets Get arbitrage betting opportunities #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/odds-api-io:odds-api-io-arbitrage-bets-api"
All apis
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.

Get an API 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 Specification

odds-api-io-arbitrage-bets-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: 'Odds-API.io is a powerful sports betting odds comparison API, providing real-time data from 450+ bookmakers across 34 sports with near zero latency.


    - 450+ bookmakers supported

    - 34 sports including Football, Basketball, Tennis, Esports and more

    - Real-time odds with close to zero latency

    - Pre-match & In-play odds coverage

    - 99.9% uptime for reliability'
  title: Odds-API.io - Real-Time Sports Betting Odds API (v3)…
  contact: {}
  version: 3.0.0
servers:
- url: https://api.odds-api.io/v3
tags:
- name: Arbitrage Bets
paths:
  /arbitrage-bets:
    get:
      security:
      - ApiKeyAuth: []
      description: Returns prematch arbitrage opportunities where every leg uses one of the specified bookmakers, sorted by profit margin (highest first). Opportunities are refreshed every few seconds and removed as soon as the prices move or the match starts. Margins and stakes use prices after exchange fees, and stakes respect the limits bookmakers report, so totalStake can be below 1000. By default only the best combination per event, market and line is returned; set allCombinations=true for every combination.
      tags:
      - Arbitrage Bets
      summary: Get arbitrage betting opportunities
      parameters:
      - description: API key for authentication
        name: apiKey
        in: query
        required: true
        schema:
          type: string
      - example: '"Bet365,SingBet"'
        description: Comma-separated list of bookmakers (e.g. Bet365,SingBet)
        name: bookmakers
        in: query
        required: true
        schema:
          type: string
      - example: football
        description: Filter by sport name or slug (e.g. Football or football)
        name: sport
        in: query
        schema:
          type: string
      - example: england-premier-league
        description: Filter by league slug (e.g. england-premier-league). Requires sport to also be set.
        name: league
        in: query
        schema:
          type: string
      - example: ML,Spread,Totals
        description: Comma-separated market names to keep, case-insensitive (max 40)
        name: markets
        in: query
        schema:
          type: string
      - example: 1.5
        description: Minimum profitMargin in percent, between 0 and 100 (e.g. 1.5 for 1.5%)
        name: minProfit
        in: query
        schema:
          type: number
          minimum: 0
          maximum: 100
      - example: false
        description: Return every bookmaker combination per event, market and line instead of only the best one (default false)
        name: allCombinations
        in: query
        schema:
          type: boolean
          default: false
      - example: 50
        description: Maximum number of results (default 50, max 500)
        name: limit
        in: query
        schema:
          type: integer
      - example: true
        description: Include event details
        name: includeEventDetails
        in: query
        schema:
          type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/dto.ArbitrageOpportunity'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/controllers.ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/controllers.ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/controllers.ErrorResponse'
        '404':
          description: Not Found (unknown league for the sport)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/controllers.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/controllers.ErrorResponse'
      operationId: getArbitrageBets
      x-operation-id-source: derived
components:
  schemas:
    dto.ArbitrageOpportunity:
      type: object
      properties:
        event:
          description: Only included if includeEventDetails=true
          allOf:
          - $ref: '#/components/schemas/dto.EventInfo'
        eventId:
          type: integer
          example: 123456
        firstSeenAt:
          type: string
          format: date-time
          description: When this combination first appeared
          example: '2026-10-20T18:30:02Z'
        id:
          type: string
          description: '{eventId}-{market}[-{hdp}] followed by {bookmaker}-{side} for each leg'
          example: 123456-ML-Bet365-home-SingBet-away
        impliedProbability:
          type: number
          description: Sum of 1/odds across the legs, using netOdds where fees apply; below 1 for an arbitrage
          example: 0.9758
        legs:
          type: array
          items:
            $ref: '#/components/schemas/dto.ArbitrageLeg'
        market:
          type: object
          properties:
            name:
              type: string
              example: Spread
            hdp:
              type: number
              description: Line for Spread and Totals markets; omitted when the market has no line
              example: -1.5
        optimalStakes:
          type: array
          items:
            $ref: '#/components/schemas/dto.OptimalStake'
        profitMargin:
          type: number
          description: Margin at the quoted prices after exchange fees, as a percentage of totalStake (2.48 means 2.48%)
          example: 2.48
        totalStake:
          type: number
          description: 1000, or less when a leg's maxStake caps the split; scale optimalStakes to your bankroll
          example: 1000
        updatedAt:
          type: string
          description: Last time the opportunity was confirmed
          example: '2026-10-20T18:42:11Z'
    dto.EventInfo:
      type: object
      properties:
        away:
          type: string
        date:
          type: string
        home:
          type: string
        league:
          type: string
        sport:
          type: string
    dto.ArbitrageLeg:
      type: object
      properties:
        bookmaker:
          type: string
          example: Bet365
        bookmakerFixtureId:
          type: string
          description: The bookmaker's own event id, when known. Not present on every response.
        href:
          type: string
          description: Link to the event on the bookmaker, or "N/A" when none is known.
          example: https://www.bet365.com/...
        odds:
          type: string
          description: Decimal odds
          example: '2.08'
        netOdds:
          type: string
          description: Price after exchange fees (for example exchange commission or prediction-market taker fees). Only present when fees apply; profitMargin, impliedProbability and optimalStakes use this price.
          example: '2.026'
        maxStake:
          type: number
          description: Stake limit reported by the bookmaker for this price, when known. optimalStakes never exceed it.
          example: 250
        oddsUpdatedAt:
          type: string
          format: date-time
          description: Last time we wrote this bookmaker price. May be absent.
          example: '2026-10-21T09:40:12Z'
        side:
          type: string
          enum:
          - home
          - away
          - draw
          - over
          - under
          example: home
    controllers.ErrorResponse:
      type: object
      properties:
        error:
          type: string
          example: Error message
    dto.OptimalStake:
      type: object
      properties:
        bookmaker:
          type: string
        potentialReturn:
          type: number
          description: Payout if this leg wins; the same for every leg up to rounding
          example: 1024.77
        side:
          type: string
        stake:
          type: number
          example: 492.68
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: query
      name: apiKey
      description: Your Odds-API.io API key, sent as the apiKey query parameter. Get one at https://odds-api.io/pricing.
x-origin:
- url: https://api.odds-api.io/v3/docs/doc.json
  format: swagger
  version: '2.0'
  converter:
    url: https://github.com/mermade/oas-kit
    version: 7.0.8