SkipOdds · OpenAPI Overlay 1.0.0

API Evangelist enhancements for SkipOdds

23 actions 23 updates documentation extends openapi/skipodds-openapi.yml
Derived by API Evangelist Built from the contracts SkipOdds publishes. SkipOdds did not publish this file.
View Overlay File View on GitHub Overlay Specification

What the actions change

tagsenumminimummaximumschemadescriptionx-apievangelist-profilex-apievangelist-reviewed

Targets 22 · first 16 shown; the file carries all of them

$.info
$
$.paths['/v1/fixtures'].get
$.paths['/v1/fixtures/{id}'].get
$.paths['/v1/{sport}/fixtures'].get
$.paths['/v1/{sport}/fixtures/{id}'].get
$.paths['/v1/fixtures/{id}/movement'].get
$.paths['/v1/{sport}/fixtures/{id}/movement'].get
$.paths['/v1/outrights'].get
$.paths['/v1/golf/tournaments'].get
$.paths['/v1/golf/tournaments/{key}'].get
$.paths['/v1/alerts/webhooks'].get
$.paths['/v1/alerts/webhooks'].post
$.paths['/v1/fixtures'].get.parameters[?(@.name=='limit')].schema
$.paths['/v1/{sport}/fixtures'].get.parameters[?(@.name=='limit')].schema
$.paths['/v1/fixtures/{id}/movement'].get.parameters[?(@.name=='hours')]

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for SkipOdds
  version: 1.0.0
x-provenance:
  generated: '2026-08-11'
  method: generated
  source: >-
    Derived from openapi/skipodds-openapi.yml plus facts published at https://skipodds.com/docs,
    /docs/fixtures, /docs/movement, /docs/outrights, /docs/alerts, /docs/limits, and one live
    unauthenticated response. Every value below is stated by the provider somewhere public; none is
    invented. This overlay is never applied to the harvested original.
extends: openapi/skipodds-openapi.yml
actions:
  - target: $.info
    description: Record the independent API Evangelist profile and the surfaces the spec omits.
    update:
      x-apievangelist-profile: https://apis.io/provider/skipodds
      x-apievangelist-reviewed: '2026-08-11'
      x-mcp-server: https://skipodds.com/mcp
      x-rate-limit-signal: >-
        No RateLimit-* response headers. Remaining daily allowance is returned in the response body as
        requests_remaining_today; exhaustion is 429 {"error":"quota_exceeded"} with no Retry-After.
      x-idempotency: >-
        Not supported and not documented. Ten of eleven operations are GET; POST /v1/alerts/webhooks
        has no de-duplication guarantee, so a retried registration should be assumed to create a
        second webhook.

  - target: $
    description: Declare the tag vocabulary the spec omits entirely — no operation carries a tag.
    update:
      tags:
        - name: Fixtures
          description: Matches, games and fights with the de-vigged SkipOdds Index.
        - name: Movement
          description: How the de-vigged consensus moved over a time window.
        - name: Outrights
          description: Tournament-winner markets, normalised across the field that can still win.
        - name: Golf
          description: Field-wide golf outright probabilities.
        - name: Alerts
          description: Movement-alert webhook registration and management (paid tiers).

  - target: $.paths['/v1/fixtures'].get
    update:
      tags: [Fixtures]
  - target: $.paths['/v1/fixtures/{id}'].get
    update:
      tags: [Fixtures]
  - target: $.paths['/v1/{sport}/fixtures'].get
    update:
      tags: [Fixtures]
  - target: $.paths['/v1/{sport}/fixtures/{id}'].get
    update:
      tags: [Fixtures]
  - target: $.paths['/v1/fixtures/{id}/movement'].get
    update:
      tags: [Movement]
  - target: $.paths['/v1/{sport}/fixtures/{id}/movement'].get
    update:
      tags: [Movement]
  - target: $.paths['/v1/outrights'].get
    update:
      tags: [Outrights]
  - target: $.paths['/v1/golf/tournaments'].get
    update:
      tags: [Golf, Outrights]
  - target: $.paths['/v1/golf/tournaments/{key}'].get
    update:
      tags: [Golf, Outrights]
  - target: $.paths['/v1/alerts/webhooks'].get
    update:
      tags: [Alerts]
  - target: $.paths['/v1/alerts/webhooks'].post
    update:
      tags: [Alerts]

  - target: $.paths['/v1/fixtures'].get.parameters[?(@.name=='limit')].schema
    description: The 1-50 range is documented at /docs/fixtures but absent from the schema.
    update:
      minimum: 1
      maximum: 50
  - target: $.paths['/v1/{sport}/fixtures'].get.parameters[?(@.name=='limit')].schema
    update:
      minimum: 1
      maximum: 50

  - target: $.paths['/v1/fixtures/{id}/movement'].get.parameters[?(@.name=='hours')]
    description: Default and tier-gated caps documented at /docs/movement but absent from the schema.
    update:
      schema:
        type: integer
        default: 24
        minimum: 1
        maximum: 336
      description: >-
        Lookback window in hours. Default 24. Capped at 72 on Demo/Free/Starter/Pro and 336 (14 days)
        on the Scale tier.
  - target: $.paths['/v1/{sport}/fixtures/{id}/movement'].get.parameters[?(@.name=='hours')]
    update:
      schema:
        type: integer
        default: 24
        minimum: 1
        maximum: 336
      description: >-
        Lookback window in hours. Default 24. Capped at 72 on Demo/Free/Starter/Pro and 336 (14 days)
        on the Scale tier.

  - target: $.paths['/v1/{sport}/fixtures'].get.parameters[?(@.name=='sport')].schema
    description: >-
      The sport values are enumerated on the MCP tool schema the provider serves at
      https://skipodds.com/mcp, but the OpenAPI leaves the path parameter as a free string.
    update:
      enum:
        - tennis
        - cricket
        - rugby
        - baseball
        - football
        - basketball
        - hockey
        - college-football
        - college-basketball
        - mma
        - boxing
  - target: $.paths['/v1/{sport}/fixtures/{id}'].get.parameters[?(@.name=='sport')].schema
    update:
      enum: [tennis, cricket, rugby, baseball, football, basketball, hockey, college-football, college-basketball, mma, boxing]
  - target: $.paths['/v1/{sport}/fixtures/{id}/movement'].get.parameters[?(@.name=='sport')].schema
    update:
      enum: [tennis, cricket, rugby, baseball, football, basketball, hockey, college-football, college-basketball, mma, boxing]

  - target: $.paths['/v1/alerts/webhooks'].post
    description: >-
      Record the range and default the docs publish for the threshold, and the naming disagreement
      between the docs (threshold_points) and the spec (threshold).
    update:
      x-field-naming-conflict: >-
        The docs at https://skipodds.com/docs/alerts name this field threshold_points; the OpenAPI
        requestBody names it threshold. The two published sources disagree.
      x-threshold-range: 1-20 probability points, default 3
      x-tier-slots: 'Starter 2, Pro 5, Scale 20'
      x-delivery: >-
        A Discord webhook URL receives a formatted Discord message; any other HTTPS endpoint receives
        JSON. No signature or shared secret is published for receiver-side verification. Endpoints
        failing 10 consecutive deliveries are deactivated.

  - target: $.components.schemas.Consensus
    description: >-
      Record the polymorphism the schema does not express. Live responses and the docs show p1/p2 for
      tennis and combat sports and players[] for golf; only the 3-way home/draw/away variant is modelled.
    update:
      x-market-variants:
        three_way: [home, draw, away]
        moneyline: [home, away]
        two_way: [p1, p2]
        field: [players]
      x-variant-note: >-
        The key set varies by market shape. A client generated from this schema will not model tennis,
        MMA, boxing or golf responses correctly.

  - target: $.components.securitySchemes
    description: Record that the same static key is used for both schemes.
    update:
      x-credential-note: >-
        BearerAuth and ApiKeyHeader accept the SAME static API key; there is no OAuth flow and no token
        exchange. Bearer is preferred; x-api-key is retained for existing integrations. The key must
        never be placed in a query string. Note the spec also redundantly declares x-api-key as an
        optional header PARAMETER on every operation in addition to the security scheme.

Work with this as data

Every overlay 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 openapi overlays

4 MCP tools reach this
  • find_overlaysBrowse and filter every overlay in the catalog.
  • 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 overlay
curl "https://apis.io/api/v1/overlays/skipodds-openapi-overlay"
All openapi overlays
curl "https://apis.io/api/v1/overlays?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.