SkipOdds · AsyncAPI Specification

Skipodds Webhooks

Version

View Spec View on GitHub sportsoddsprobabilitiesbetting-datade-vigsports-datareal-timewebhookssports-bettingmcpagent-readymarket-dataAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-11'
method: searched
source: https://skipodds.com/docs/alerts + openapi/skipodds-openapi.yml (createAlertWebhook, listAlertWebhooks)
type: Webhooks
asyncapi_published: false
summary: >-
  SkipOdds publishes NO AsyncAPI document — /asyncapi.yaml, /asyncapi.json and an event catalogue were
  all absent, and the OpenAPI declares no `webhooks` object. It does operate a real, documented outbound
  webhook surface: one event type, index_move, fired when the de-vigged consensus moves past a
  subscriber-set threshold. This artifact captures that catalogue as published; nothing here is
  synthesised into a spec the provider does not ship.
event_surface:
  style: outbound webhook (HTTP POST)
  delivery: push
  polling_alternative: 'GET /v1/fixtures/{id}/movement'
  availability: paid tiers only (Starter and above)
  check_interval: every 15 minutes across upcoming events in the chosen sport
  scope: one registration = one sport
subscription:
  register:
    operation: createAlertWebhook
    http: POST /v1/alerts/webhooks
    spec: openapi/skipodds-openapi.yml#createAlertWebhook
    body:
      url: HTTPS endpoint to receive the event
      sport: sport to watch
      threshold_points: >-
        Minimum move in probability POINTS, 1-20, default 3. A move from 58.0% to 61.5% is +3.5 points.
        NOTE: the docs call this field threshold_points; the OpenAPI requestBody calls it `threshold`
        and declares no range or default. The two published sources disagree.
  list:
    operation: listAlertWebhooks
    http: GET /v1/alerts/webhooks
    spec: openapi/skipodds-openapi.yml#listAlertWebhooks
  delete:
    http: DELETE /v1/alerts/webhooks/{id}
    documented_at: https://skipodds.com/docs/alerts
    in_openapi: false
    note: Documented in the reference but absent from the published OpenAPI.
  slots_per_tier:
    Starter: 2
    Pro: 5
    Scale: 20
events:
  - name: index_move
    description: The SkipOdds Index for one outcome moved by at least the subscriber's threshold.
    trigger: Consensus probability change >= threshold_points, evaluated on a 15-minute cycle.
    payload_example:
      event: index_move
      sport: soccer
      market: Norway v England
      outcome: Norway
      from: 0.231
      to: 0.268
      delta_points: 3.7
      ts: '2026-07-11T18:15:00.000Z'
    payload_fields:
      - {name: event, type: string, const: index_move}
      - {name: sport, type: string}
      - {name: market, type: string, note: Human-readable fixture name. No fixture id is included.}
      - {name: outcome, type: string}
      - {name: from, type: number, note: Probability before the move (0-1).}
      - {name: to, type: number, note: Probability after the move (0-1).}
      - {name: delta_points, type: number, note: Signed change in probability points.}
      - {name: ts, type: string, format: date-time}
transport_targets:
  - target: Discord
    behaviour: A Discord webhook URL receives a pre-formatted Discord message rather than the raw JSON.
  - target: generic HTTPS endpoint
    behaviour: Receives the JSON payload above.
reliability:
  retries: not documented
  deactivation: Endpoints failing 10 deliveries in a row are deactivated automatically.
  replay: not offered
  ordering: not documented
security:
  signature: none documented
  shared_secret: none documented
  verification: >-
    No HMAC signature header, no timestamp-signature scheme, and no source IP range is published. A
    receiver has no published way to verify that a delivery genuinely originated from SkipOdds. This is
    the most significant gap in the event surface.
  transport: HTTPS endpoint required
gaps:
  - No AsyncAPI document, so the event contract is prose-only and not machine-readable.
  - No signature or shared secret for receiver-side verification.
  - The event payload carries no fixture id, so an event cannot be joined to a fixture programmatically.
  - threshold vs threshold_points disagreement between the OpenAPI and the docs.
  - DELETE /v1/alerts/webhooks/{id} is documented but not in the OpenAPI.
probes:
  - {url: 'https://skipodds.com/asyncapi.yaml', status: 404}
  - {url: 'https://skipodds.com/asyncapi.json', status: 404}