Generated by API Evangelist
Written by API Evangelist tooling for SkipOdds's API. It is a proposal applied on top of the contract, not a document SkipOdds publishes.
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.