Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
description: 'Generated from the Owls Insight API manifest and the owls-insight-ts SDK types. Schemas are deliberately lenient: every field is optional, enums are open (x-extensible-enum), and unknown fields may appear. Decode accordingly.'
title: Owls Insight Webhooks API
version: 0.78.0
x-owls-manifest-commit: c93b0756
servers:
- url: https://api.owlsinsight.com
security:
- bearerAuth: []
tags:
- name: Webhooks
paths:
/api/v1/webhooks:
get:
description: Lists your webhook endpoints with their status, filters and delivery health. Never returns signing secrets.
operationId: listWebhooks
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookListResponse'
description: OK
summary: Lists your webhook endpoints with their status, filters and delivery health.
tags:
- Webhooks
x-owls-access: MVP and above
x-owls-sdk-method: listWebhooks
post:
description: 'Registers an HTTPS endpoint for signed event notifications: Pinnacle line moves, positive EV prices, game start and final, and graded player props. Returns the signing secret once. Coverage by event type (a sport listed in filters.sports that one of your event types does not cover is a 400): line.moved: mlb, nba, ncaab, ncaaf, nfl, nhl, soccer, tennis, wnba; ev.found: cs2, dota2, lol, mlb, mma, nba, ncaab, ncaaf, nfl, nhl, soccer, tennis, valorant, wnba; game.started: mlb, nba, ncaab, nhl, soccer, tennis, nfl, ncaaf; game.final: mlb, nba, ncaab, nhl, soccer, tennis, nfl, ncaaf; props.graded: mlb, nfl. line.moved: Pinnacle''s main moneyline, spread or total for a game that has not started moved by at least your step since the last line.moved you were sent for that market, so small moves add up. price_step_pp is the change in implied probability in percentage points (0.5, 1, 2, 3, 5), point_step the change in the spread or total line (0.5, 1, 1.5, 2, 3). A line change smaller than point_step restarts the price comparison at the new line. After a line.moved the market is quiet for 60 seconds, and a move inside that window is sent once at its end if it still clears your step. data: { sport, league, event_id, source_event_id, home_team, away_team, commence_time, book, market, reason, previous, current, max_probability_change_pp, point_change, thresholds }, where previous and current map each side (home, away, draw, over, under) to { price, point }. ev.found: a price on the EV board became tradeable at or above your min_ev, in percent (1, 2, 3, 5, 8), by the same fair-value math as the EV endpoint. Tradeable means it clears the trade bar: a sportsbook price needs an EV of at least 2%; an exchange or prediction-market price needs at least 4% on its cost, a bid, a spread of 4 cents or less and $50 at the ask, so a min_ev below those floors adds nothing. It fires when the price crosses min_ev, again only after its EV has fallen more than 1 point below min_ev, or the price has been gone or stopped clearing the trade bar for two consecutive reads (about 40 seconds), and at most once per 15 minutes for one event, venue and side. After an alert, the same price for that event, venue and side is not sent again for 2 hours unless its EV has risen by at least 1 point. Nothing fires while the odds behind the board are out of date. kinds narrows to book (sportsbook) or venue (exchange and prediction market) prices; venues narrows to the listed keys, which must be among fanduel, draftkings, betmgm, bet365, caesars, kalshi, novig, 1xbet, betonline, betr, bovada (other keys can never produce an event, so they are refused). data: { sport, league, event_id, odds_event_id, home_team, away_team, commence_time, min_ev, signal: { kind, venue, side, team, price, implied_probability, fair_probability, fair_low, ev_percent, ev, fee, route, size, link, quote_age_ms }, board_age_ms }. game.started: sent once per game when the live scores show it in play on two reads at least 15 seconds apart. game.final: sent once per game when they show it final on two reads at least 60 seconds apart and the final is believable: in tennis a player has won 2 sets, so a match that ends by retirement or walkover before that is not announced; in the other sports the game has run at least 80 minutes (soccer), 90 minutes (nba), 80 minutes (ncaab), 90 minutes (nhl), 90 minutes (mlb), 120 minutes (nfl), 150 minutes (ncaaf) from its start. A game reported final earlier than that, as an interrupted one can be, is not announced then; if the live scores show it in play again, its final is sent when it ends. A postponed or cancelled game never sends it. Status changes can trail the real moment by a few minutes. data: { sport, event_id, league, home_team, away_team, start_time, status: { state, detail }, score: { home, away } }; for tennis the score is sets won.'
operationId: createWebhook
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateWebhookParams'
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookCreateResponse'
description: Created
summary: 'Registers an HTTPS endpoint for signed event notifications: Pinnacle line…'
tags:
- Webhooks
x-owls-access: MVP and above
x-owls-sdk-method: createWebhook
/api/v1/webhooks/{id}:
delete:
description: Deletes a webhook endpoint. Undelivered events for it are cancelled and nothing more is sent.
operationId: deleteWebhook
parameters:
- in: path
name: id
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookDeleteResponse'
description: OK
summary: Deletes a webhook endpoint.
tags:
- Webhooks
x-owls-access: MVP and above
x-owls-sdk-method: deleteWebhook
get:
description: 'Returns one webhook endpoint: url, event types, filters, status and delivery health (consecutive_failures, failing_since, last_success_at).'
operationId: getWebhook
parameters:
- in: path
name: id
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookResponse'
description: OK
summary: 'Returns one webhook endpoint: url, event types, filters, status and delivery…'
tags:
- Webhooks
x-owls-access: MVP and above
x-owls-sdk-method: getWebhook
patch:
description: 'Changes a webhook endpoint: url, event_types, description, filters, or enabled to turn deliveries off and on.
enabled: false stops deliveries and cancels the undelivered ones. enabled: true resumes an endpoint that you disabled or that was disabled after failing (status auto_disabled), and resets its failure count.
The same url and coverage checks as create apply.'
operationId: updateWebhook
parameters:
- in: path
name: id
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateWebhookParams'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookResponse'
description: OK
summary: 'Changes a webhook endpoint: url, event_types, description, filters, or enabled…'
tags:
- Webhooks
x-owls-access: MVP and above
x-owls-sdk-method: updateWebhook
/api/v1/webhooks/{id}/deliveries:
get:
description: 'Lists recent deliveries to one endpoint, newest first: status, attempts, the last response code and latency, and the exact payload sent.
status is pending (queued or between retries), delivered, failed (retries exhausted), expired (past expires_at), cancelled (the endpoint was disabled or deleted) or shadow (recorded while the event type was held back, never sent). Deliveries are kept for 14 days.
response_excerpt is up to the first 512 bytes your receiver answered with.'
operationId: listWebhookDeliveries
parameters:
- in: path
name: id
required: true
schema:
type: string
- description: Only deliveries in this status.
in: query
name: status
schema:
type: string
x-extensible-enum:
- cancelled
- delivered
- expired
- failed
- pending
- shadow
- description: Only this event type.
in: query
name: type
schema:
type: string
x-extensible-enum:
- ev.found
- game.final
- game.started
- line.moved
- props.graded
- webhook.test
- description: Page size, 1 to 50 (default 20).
in: query
name: limit
schema:
type: string
- description: 'An event id (evt_...) from the previous page: returns the deliveries older than it.'
in: query
name: starting_after
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookDeliveriesResponse'
description: OK
summary: 'Lists recent deliveries to one endpoint, newest first: status, attempts, the…'
tags:
- Webhooks
x-owls-access: MVP and above
x-owls-sdk-method: listWebhookDeliveries
/api/v1/webhooks/{id}/rotate-secret:
post:
description: 'Issues a new signing secret for the endpoint and returns it once. The previous secret keeps signing alongside it until it expires.
While the previous secret is live, Owls-Signature carries two v1 values, one per secret. Accept either, then switch your receiver to the new secret.'
operationId: rotateWebhookSecret
parameters:
- in: path
name: id
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RotateWebhookSecretParams'
required: false
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookRotateSecretResponse'
description: OK
summary: Issues a new signing secret for the endpoint and returns it once.
tags:
- Webhooks
x-owls-access: MVP and above
x-owls-sdk-method: rotateWebhookSecret
/api/v1/webhooks/{id}/test:
post:
description: 'Queues a webhook.test event to the endpoint, signed like every other event, so you can check your receiver and its signature check.
One test event per endpoint every 10 seconds (429 with Retry-After otherwise). The endpoint must be enabled (409 otherwise).
data is { message }. A test event retries like game.final and expires after 1 hour.'
operationId: testWebhook
parameters:
- in: path
name: id
required: true
schema:
type: string
responses:
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookTestResponse'
description: Accepted
summary: Queues a webhook.test event to the endpoint, signed like every other event, so…
tags:
- Webhooks
x-owls-access: MVP and above
x-owls-sdk-method: testWebhook
components:
schemas:
WebhookLineMovedFilters:
description: '`line.moved` filters as stored: every field is set.'
properties:
markets:
description: The markets watched (default all three).
items:
$ref: '#/components/schemas/WebhookLineMarket'
type: array
point_step:
description: 'The spread or total line move that fires: 0.5, 1, 1.5, 2 or 3 (default 1).'
format: double
type: number
price_step_pp:
description: 'The implied-probability move that fires, in percentage points: 0.5, 1, 2, 3 or 5 (default 2).'
format: double
type: number
type: object
x-owls-required:
- price_step_pp
- point_step
- markets
WebhookRotateSecretResponse:
properties:
data:
$ref: '#/components/schemas/WebhookRotatedSecret'
success:
type: boolean
type: object
x-owls-required:
- success
- data
WebhookEvFoundFilters:
description: '`ev.found` filters as stored: every field is set.'
properties:
kinds:
description: The price kinds that fire (default both).
items:
$ref: '#/components/schemas/WebhookEvKind'
type: array
min_ev:
description: 'The least EV that fires, in percent: 1, 2, 3, 5 or 8 (default 3).'
format: double
type: number
venues:
description: Sportsbook or venue keys; empty (the default) means every one the EV board scores.
items:
type: string
type: array
type: object
x-owls-required:
- min_ev
- kinds
- venues
RotateWebhookSecretParams:
properties:
expire_previous_after_hours:
description: 'How long the previous secret keeps signing beside the new one: 0 to 168 hours (default 24). 0 retires it at once.'
format: double
type: number
type: object
WebhookDelivery:
description: One delivery to an endpoint, as the deliveries listing returns it.
properties:
attempts:
format: double
type: number
created_at:
type:
- string
- 'null'
delivered_at:
type:
- string
- 'null'
expires_at:
type:
- string
- 'null'
id:
description: The event id (`Owls-Webhook-Id`).
type: string
last_error:
type:
- string
- 'null'
last_latency_ms:
format: double
type:
- number
- 'null'
last_status_code:
description: Your receiver's last HTTP status, or null.
format: double
type:
- number
- 'null'
next_attempt_at:
description: When the next attempt is due, while `pending`; otherwise null.
type:
- string
- 'null'
occurred_at:
type:
- string
- 'null'
payload:
anyOf:
- $ref: '#/components/schemas/WebhookDeliveryPayload'
- type: 'null'
description: The exact body sent, or null.
response_excerpt:
description: Up to the first 512 bytes of your receiver's last answer.
type:
- string
- 'null'
status:
$ref: '#/components/schemas/WebhookDeliveryStatus'
type:
type: string
x-extensible-enum:
- ev.found
- game.final
- game.started
- line.moved
- props.graded
- webhook.test
type: object
x-owls-required:
- id
- type
- status
- attempts
- next_attempt_at
- expires_at
- last_status_code
- last_error
- last_latency_ms
- response_excerpt
- occurred_at
- created_at
- delivered_at
- payload
WebhookDeleteResponse:
properties:
data:
$ref: '#/components/schemas/WebhookDeleted'
success:
type: boolean
type: object
x-owls-required:
- success
- data
WebhookEvFoundFiltersInput:
description: '`ev.found` filters as sent: an omitted field keeps its default (create) or its stored value (update).'
properties:
kinds:
items:
$ref: '#/components/schemas/WebhookEvKind'
type: array
min_ev:
description: 1, 2, 3, 5 or 8 percent.
format: double
type: number
venues:
description: Keys the EV board scores; a key that can never produce an event is refused with a 400.
items:
type: string
type: array
type: object
WebhookFiltersInput:
description: 'Filters as sent. On create, an omitted field takes its default. On update they merge
into the stored filters: a section you send (`line_moved`, `ev_found`) changes only the
fields you send, and `sports` replaces the list (`[]` means every covered sport). A sport
that one of the endpoint''s event types does not cover is refused with a 400
(`sport_not_covered`).'
properties:
ev_found:
$ref: '#/components/schemas/WebhookEvFoundFiltersInput'
line_moved:
$ref: '#/components/schemas/WebhookLineMovedFiltersInput'
sports:
items:
type: string
type: array
type: object
WebhookListResponse:
properties:
data:
items:
$ref: '#/components/schemas/WebhookEndpoint'
type: array
meta:
$ref: '#/components/schemas/WebhookListMeta'
success:
type: boolean
type: object
x-owls-required:
- success
- data
- meta
WebhookEvKind:
description: '`ev.found` price kinds: `book` (a sportsbook) or `venue` (an exchange or prediction market).'
type: string
x-extensible-enum:
- book
- venue
WebhookResponse:
properties:
data:
$ref: '#/components/schemas/WebhookEndpoint'
success:
type: boolean
type: object
x-owls-required:
- success
- data
WebhookDeliveryPayload:
description: 'A delivery body as stored, with `data` untyped: its shape depends on `type`.'
properties:
api_version:
description: The payload version.
type: string
created:
description: When the event was created (ISO 8601).
type: string
data: {}
endpoint_id:
description: The endpoint it was sent to, `whk_...`.
type: string
expires_at:
description: No delivery is attempted after this (ISO 8601).
type: string
id:
description: 'The event id, `evt_...`: identical on every retry and in the `Owls-Webhook-Id` header. Dedupe on it.'
type: string
occurred_at:
description: When what it reports happened, as far as is known (ISO 8601).
type: string
type:
description: The event type; a type added later arrives as a string this version does not list.
type: string
x-extensible-enum:
- ev.found
- game.final
- game.started
- line.moved
- props.graded
- webhook.test
type: object
x-owls-required:
- data
- id
- type
- api_version
- created
- occurred_at
- expires_at
- endpoint_id
WebhookTestResponse:
properties:
data:
$ref: '#/components/schemas/WebhookTestQueued'
success:
type: boolean
type: object
x-owls-required:
- success
- data
WebhookDeleted:
properties:
deleted:
type: boolean
id:
type: string
type: object
x-owls-required:
- id
- deleted
WebhookTestQueued:
properties:
id:
description: 'The test event''s id: find it in the endpoint''s deliveries.'
type: string
status:
type: string
x-extensible-enum:
- pending
type:
type: string
x-extensible-enum:
- webhook.test
type: object
x-owls-required:
- id
- type
- status
CreateWebhookParams:
properties:
description:
description: Up to 200 characters.
type:
- string
- 'null'
event_types:
description: One or more event types. A type that is not open yet is refused with a 400 (`event_type_unavailable`).
items:
$ref: '#/components/schemas/WebhookSubscribableEventType'
type: array
filters:
$ref: '#/components/schemas/WebhookFiltersInput'
url:
description: https on the default port with a public hostname. IP addresses and private or internal hosts are refused.
type: string
type: object
x-owls-required:
- url
- event_types
WebhookCreateResponse:
properties:
data:
$ref: '#/components/schemas/WebhookEndpointWithSecret'
description: The endpoint and its signing secret, which is returned here and by rotate-secret only.
success:
type: boolean
type: object
x-owls-required:
- success
- data
WebhookListMeta:
properties:
count:
format: double
type: number
limit:
description: How many endpoints your plan allows.
format: double
type: number
type: object
x-owls-required:
- count
- limit
WebhookRotatedSecret:
properties:
id:
type: string
previous_secret_expires_at:
description: Until when the previous secret keeps signing (ISO 8601), or null when it was retired at once.
type:
- string
- 'null'
secret:
description: 'The new signing secret, `whsec_...`. Returned once: store it now.'
type: string
secret_hint:
type: string
type: object
x-owls-required:
- id
- secret
- secret_hint
- previous_secret_expires_at
WebhookDeliveriesResponse:
properties:
data:
items:
$ref: '#/components/schemas/WebhookDelivery'
type: array
has_more:
description: 'True when older deliveries remain: ask for the next page starting after the last `id`.'
type: boolean
success:
type: boolean
type: object
x-owls-required:
- success
- data
- has_more
WebhookLineMarket:
description: The markets `line.moved` watches.
type: string
x-extensible-enum:
- moneyline
- spread
- total
WebhookEndpoint:
description: 'A webhook endpoint. It never carries the signing secret: create and rotate-secret return it once.'
properties:
api_version:
description: The payload version this endpoint's deliveries carry.
type: string
consecutive_failures:
description: Failed deliveries in a row.
format: double
type: number
created_at:
type: string
description:
type:
- string
- 'null'
event_types:
items:
$ref: '#/components/schemas/WebhookSubscribableEventType'
type: array
failing_since:
description: When the current run of failures began (ISO 8601), or null.
type:
- string
- 'null'
filters:
$ref: '#/components/schemas/WebhookFilters'
id:
description: The endpoint id, `whk_...`.
type: string
last_success_at:
type:
- string
- 'null'
previous_secret_expires_at:
description: While set, deliveries also carry a v1 signature made with the previous secret, until this time (ISO 8601).
type:
- string
- 'null'
secret_hint:
description: The last 4 characters of the current signing secret, to tell secrets apart.
type: string
status:
$ref: '#/components/schemas/WebhookEndpointStatus'
status_reason:
description: Why the endpoint is not enabled, or null.
type:
- string
- 'null'
updated_at:
type: string
url:
type:
- string
- 'null'
type: object
x-owls-required:
- id
- url
- description
- event_types
- filters
- api_version
- status
- status_reason
- secret_hint
- previous_secret_expires_at
- consecutive_failures
- failing_since
- last_success_at
- created_at
- updated_at
WebhookSubscribableEventType:
description: Event types an endpoint can subscribe to.
type: string
x-extensible-enum:
- ev.found
- game.final
- game.started
- line.moved
- props.graded
WebhookFilters:
description: 'An endpoint''s filters as stored: the API fills in every default.'
properties:
ev_found:
$ref: '#/components/schemas/WebhookEvFoundFilters'
line_moved:
$ref: '#/components/schemas/WebhookLineMovedFilters'
sports:
description: Sport keys; empty (the default) means every sport each subscribed event type covers.
items:
type: string
type: array
type: object
x-owls-required:
- sports
- line_moved
- ev_found
UpdateWebhookParams:
properties:
description:
description: Up to 200 characters; an empty string clears it.
type:
- string
- 'null'
enabled:
description: 'false stops deliveries and cancels the undelivered ones. true resumes an endpoint
that you disabled or that was disabled after failing, and resets its failure count.'
type: boolean
event_types:
description: Replaces the list.
items:
$ref: '#/components/schemas/WebhookSubscribableEventType'
type: array
filters:
$ref: '#/components/schemas/WebhookFiltersInput'
description: Merged into the stored filters (see WebhookFiltersInput).
url:
type: string
type: object
WebhookEndpointStatus:
description: '`enabled`; `disabled` (by you, or after your receiver answered 410 Gone); or
`auto_disabled` (after 50 failed deliveries in a row and 3 days without a success). An
update with `enabled` set to true resumes a disabled or auto-disabled endpoint.'
type: string
x-extensible-enum:
- auto_disabled
- disabled
- enabled
WebhookLineMovedFiltersInput:
description: '`line.moved` filters as sent: an omitted field keeps its default (create) or its stored value (update).'
properties:
markets:
items:
$ref: '#/components/schemas/WebhookLineMarket'
type: array
point_step:
description: 0.5, 1, 1.5, 2 or 3.
format: double
type: number
price_step_pp:
description: 0.5, 1, 2, 3 or 5 percentage points.
format: double
type: number
type: object
WebhookDeliveryStatus:
description: '`pending` (queued or between retries), `delivered`, `failed` (retries exhausted),
`expired` (past `expires_at`), `cancelled` (the endpoint was disabled or deleted) or
`shadow` (recorded while the event type was held back, never sent).'
type: string
x-extensible-enum:
- cancelled
- delivered
- expired
- failed
- pending
- shadow
WebhookEndpointWithSecret:
description: 'What create returns: the endpoint and its signing secret.'
properties:
api_version:
description: The payload version this endpoint's deliveries carry.
type: string
consecutive_failures:
description: Failed deliveries in a row.
format: double
type: number
created_at:
type: string
description:
type:
- string
- 'null'
event_types:
items:
$ref: '#/components/schemas/WebhookSubscribableEventType'
type: array
failing_since:
description: When the current run of failures began (ISO 8601), or null.
type:
- string
- 'null'
filters:
$ref: '#/components/schemas/WebhookFilters'
id:
description: The endpoint id, `whk_...`.
type: string
last_success_at:
type:
- string
- 'null'
previous_secret_expires_at:
description: While set, deliveries also carry a v1 signature made with the previous secret, until this time (ISO 8601).
type:
- string
- 'null'
secret:
description: 'The signing secret, `whsec_...`. Returned once: store it now.'
type: string
secret_hint:
description: The last 4 characters of the current signing secret, to tell secrets apart.
type: string
status:
$ref: '#/components/schemas/WebhookEndpointStatus'
status_reason:
description: Why the endpoint is not enabled, or null.
type:
- string
- 'null'
updated_at:
type: string
url:
type:
- string
- 'null'
type: object
x-owls-required:
- secret
- id
- url
- description
- event_types
- filters
- api_version
- status
- status_reason
- secret_hint
- previous_secret_expires_at
- consecutive_failures
- failing_since
- last_success_at
- created_at
- updated_at
securitySchemes:
bearerAuth:
description: Your Owls Insight API key.
scheme: bearer
type: http
x-owls-v2-books:
- book: 4casters
sports:
- cfl
- esports
- mlb
- mma
- nba
- ncaab
- ncaaf
- nfl
- nhl
- soccer
- tennis
- wnba
wsEvent: 4casters-v2-update
- book: 888sport
sports:
- mlb
- nba
- ncaab
- ncaaf
- nfl
- nhl
- soccer
- tennis
- wnba
wsEvent: null
- book: ballybet
sports:
- aussie-rules
- boxing
- cricket
- cycling
- darts
- formula1
- golf
- handball
- mlb
- mma
- motorsport
- nba
- ncaab
- ncaaf
- nfl
- nhl
- rugby-league
- rugby-union
- snooker
- soccer
- specials
- surfing
- table-tennis
- tennis
- wnba
wsEvent: ballybet-v2-update
- book: bet105
sports:
- alpine-skiing
- archery
- athletics
- aussie-rules
- badminton
- bandy
- baseball
- basketball
- basketball-3x3
- biathlon
- bowls
- boxing
- cfl
- chess
- cricket
- curling
- cycling
- darts
- esports
- fencing
- field-hockey
- floorball
- football
- formula1
- futsal
- gaelic-sports
- golf
- greyhounds
- handball
- hockey
- horse-racing
- hurling
- judo
- kabaddi
- kbo
- lacrosse
- mlb
- mma
- motorbikes
- motorsport
- nascar
- nba
- ncaab
- ncaaf
- netball
- nfl
- nhl
- npb
- olympics
- padel
- pool
- rugby-league
- rugby-union
- sailing
- ski-jumping
- snooker
- soccer
- softball
- speedway
- squash
- sumo
- supercars
- surfing
- table-tennis
- taekwondo
- tennis
- triathlon
- trotting
- ultimate
- volleyball
- water-polo
- wnba
wsEvent: bet105-v2-update
- book: bet365
sports:
- mlb
- nba
- nfl
- nhl
- soccer
wsEvent: bet365-v2-update
- book: betonline
sports:
- mlb
- nba
- ncaaf
- nfl
- nhl
- soccer
- tennis
wsEvent: betonline-realtime
- book: betrivers
sports:
- aussie-rules
- boxing
- cricket
- cycling
- darts
- formula1
- golf
- handball
- mlb
- mma
- motorsport
- nba
- ncaab
- ncaaf
- nfl
- nhl
- rugby-league
- rugby-union
- snooker
- soccer
- specials
- surfing
- table-tennis
# --- truncated at 32 KB (36 KB total) ---
# Full source: https://artifacts.apis.io/owlsinsight-com/openapi/owlsinsight-com-webhooks-api-openapi.yml