POST and carry an org-scoped credential. Endpoints that
touch a team also require the caller to be a member of that team with capture permission
(otherwise 403).
Capture
Submit a note
POST /functions/v1/submit-note
Sends a typed note. RinkNotes stores it as a capture event and kicks off classification into a
player observation. Planned rate limit: 60 / hour.
The team the note belongs to.
The note text. Trimmed; truncated at 2000 characters.
The game or practice session this note was captured during, if any.
The player the note is about, if known.
Milliseconds elapsed on the game clock when the note was captured.
The period this note falls in, if any.
The id of the created capture event.
Always
"transcribed" — the note is ready and classification has been triggered.Response
Transcribe audio
POST /functions/v1/transcribe-audio
Sends an audio clip as multipart/form-data with a single file field named audio. The audio
is ephemeral — it’s transcribed and discarded, never stored. Planned rate limit: 60 /
hour (per file / mic bucket). Returns 502 if the upstream transcription service fails.
There are two modes, selected by headers.
- Async (persist & classify)
- Transcribe-only
Attaches the transcript to an existing capture event and triggers classification. The
caller must be the user who captured that event, or the call returns
403.HeadersX-Capture-Event-Id— the capture event to attach the transcript to. Required.X-Transcription-Source—file_uploadorlive_mic. Required.
Request
Response
Games
Finalize a game
POST /functions/v1/finalize-game
Closes out a game session and derives its stats and game events from the notes captured during
it. The session must belong to the given team and be a game session (not a practice), otherwise
you’ll get 404 or 400.
The game session to finalize.
Request
session_id, plus stats and events booleans indicating whether each derivation ran.Response
Parsing helpers
These turn free text into a structured object using RinkNotes’ hockey model. They persist nothing — no side effects, nothing stored. Planned rate limit: 30 / hour. Every response includes aconfidence between 0 and 1.
Parse a game
POST /functions/v1/parse-new-game
The free text describing the game.
Today’s date as
YYYY-MM-DD, used to resolve relative dates (“this Saturday”).Response
home_away is "home", "away", or null. starts_at is ISO-8601 or null.
Parse a practice
POST /functions/v1/parse-new-practice
Response
Parse a calendar event
POST /functions/v1/parse-new-event
Response
event_type is one of tournament, team_dinner, meeting, tryout, social, other, or
null. All fields except confidence may be null.
Parse an in-game event
POST /functions/v1/parse-game-event
goalie or skater — selects which event vocabulary applies.Response
zone is OZ / NZ / DZ / null; strength_state is EV / PP / PK / null; detail
is an object of recognized fields (or null).
Data model
For reference, the client-safe shape of the objects the API works with. These are the fields you’d see on a capture and its derived outputs — not a full schema.Reading these objects back out programmatically — client read/GET endpoints — is on the
roadmap, not part of this first surface.