X-API-Key
curl -X POST 'https://api.puntersedge.online/v1/webhooks' \
-H 'X-API-Key: YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"url": "https://example.com/hooks/puntersedge", "events": ["arb.opportunity"], "min_edge_pct": 1.5, "sports": ["nrl", "afl"]}'
| Name | In | Type | Required | Description |
|---|---|---|---|---|
url |
body | string | yes | HTTPS endpoint that receives the POST. Plain http:// is rejected with 422. |
events |
body | array | no | Events to subscribe to. Two events have live producers: `arb.opportunity` (a cross-book arb opened) and `race.odds_open` (the first bookmaker prices for a race just landed — fires once per race, so you can fetch the card on push instead of schedule-polling). Since the early-market lanes of 2026-09-01 it fires HOURS ahead, not minutes: measured over the 48h to 2026-09-03 11:00 UTC, the first price landed a median 10.1h before the jump on AU thoroughbreds, 5.3h on greyhounds, 6.8h on harness - typically overnight or early morning for the day's card, from one or two early books; the full board fills inside about an hour of the jump. `odds.change` is delivered solely by POST /v1/webhooks/{id}/test; `race.result` and `market.suspend` are accepted but never fire. |
min_edge_pct |
body | number | no | Only deliver arb.opportunity when the theoretical edge is at least this percentage. Omit for every opportunity. |
sports |
body | array | no | Only deliver events for these sports. Sport keys as returned by GET /v1/sports; racing events (arbs and race.odds_open) arrive as racing_horse, racing_greyhound or racing_harness. Omit for all sports. |
Status codes: 200, 401, 402, 403, 422, 429, 500. Response bodies are JSON; the full schema is in /openapi.json.
200 application/json
Field names and types are as the API returns them; values are a real sample, trimmed to a few items.
{
"id": "wh_7c1d2e9a4b3f",
"url": "https://example.com/hooks/puntersedge",
"events": [
"arb.opportunity",
"race.odds_open"
],
"min_edge_pct": 1.5,
"sports": [
"racing_horse",
"racing_greyhound",
"nrl"
],
"is_active": true,
"created_at": "2026-09-07T00:52:10",
"last_delivery_at": null,
"failure_count": 0,
"secret": "whsec_EXAMPLE_ONLY_shown_once_at_creation",
"delivery_entitled": true,
"delivery_paused_reason": null
}
GET /v1/webhooks — List WebhooksDELETE /v1/webhooks/{webhook_id} — Delete WebhookGET /v1/webhooks/{webhook_id}/deliveries — List Webhook DeliveriesPOST /v1/webhooks/{webhook_id}/test — Test WebhookThe free tier needs no credit card, and the sandbox endpoints need no key at all.
Get a free API key Quickstart