For leagues

Put the week on the wire

Local rec, school, college, or a circuit of 30 clubs. Upload what you already keep. We turn it into a feed developers can actually parse.

CSV drop

Four files cover most rooms: teams.csv, schedule.csv, box.csv, standings.csv. We send back a row-level report — accepted, rejected, why.

Ingest API

POST /v1/ingest with your league key. Idempotent on game_id. Safe to retry after a flaky scorekeeper.

Scorekeeper push

After each period, push the box. Period clocks and player IDs stay stable so a site does not flash empty names.

House rules

What we will not do to your data

  • You own the source of truth. USF will not invent a final if you did not send one.
  • Team and player IDs you assign on day one stay for the season.
  • A rejected row never silently becomes a zero. You get the error.
  • Public feeds only include what you marked public. Private rooms stay private.
  • Format (classic, best ball, guillotine, dynasty) is a league flag — it does not change the box-score schema.