The pipe
How Universal Sports Feeds runs the week
Leagues keep the source of truth. We normalize. Apps consume. Total AI Sports sits on the same family of desks — this one is data, not agents.
01
A league puts data in
CSV, a scorekeeper app, or a POST to /v1/ingest. You keep the source of truth — we do not invent scores.
02
USF normalizes the sport
One schema per sport. NFL box scores, softball linescores, and hockey shots all leave as clean JSON.
03
Apps pull a feed
REST, CSV export, or webhooks on score change. Same key for a rec-league site and a fantasy desk.
Ingest
- ▸ CSV drop: teams, schedule, box scores, standings.
- ▸ JSON POST to /v1/ingest with your league key.
- ▸ Scorekeeper apps can push after each period.
- ▸ We reject rows we cannot parse — we never invent a score.
Normalize
- ▸ One schema per sport family (football, basketball, diamond, hockey, soccer).
- ▸ Team IDs, player IDs, and period clocks stay stable across uploads.
- ▸ Local nicknames map to canonical names when you tell us they should.
- ▸ Format flags (classic, best ball, guillotine, dynasty) travel with the league, not the feed.
Distribute
- ▸ REST GET for games, standings, rosters, and box scores.
- ▸ CSV export for the same objects — spreadsheet-friendly.
- ▸ Pro webhooks on score change, final, and injury.
- ▸ Same API key works for every league on the account.
