For developers

Consume one schema per sport

REST, CSV, and Pro webhooks. The same key works across every league on the account. Rate limits follow the plan — not a surprise 429 at 11 p.m.

Auth

Send the key on every call. No OAuth dance for the first integration.

curl https://usfp.numadns.com/v1/sports \
  -H "Authorization: Bearer usf_live_…" \
  -H "Accept: application/json"

Rate limits

  • ▸ Free — 5k calls / month, 1 rps
  • ▸ Starter — 50k / month, 5 rps
  • ▸ League — 250k / month, 15 rps
  • ▸ Pro — 1M / month, 60 rps, webhooks
  • ▸ 429 responses include Retry-After

Core endpoints

GET /v1/sports

Catalog of sports and feed objects this key can see.

GET /v1/{sport}/leagues

Leagues you are entitled to, with format flags.

GET /v1/{sport}/games

Slate for a date or period. Status, scores, venue.

GET /v1/{sport}/games/{id}

Box or linescore for one game.

GET /v1/{sport}/standings

Table as of last final.

POST /v1/ingest

League-side push. Idempotent on game_id.

Webhooks (Pro+)

game.score_changed, game.final, player.injury. Signed with HMAC-SHA256. Retry with backoff for 24 hours.

CSV export

Add ?format=csv to list endpoints. Same columns as the league upload templates — round-trip friendly.