/v1. It holds no credentials: every tool call is made with your API key, so billing, rate limits and organization scoping are exactly what the API enforces.
What it can do
Once connected, you talk to the assistant in plain language and it picks the right tools:Analyze a game
“Analyze this game:
https://app.veo.co/matches/…”Checks your balance, submits the video, and tells you the session id and what it will cost.Check on processing
“Is my last game done yet?”Looks up the session’s status and gives you a link to watch it in the Hooper Hub. Processing takes minutes to an hour depending on length.
Shot analysis
“Break down every three-pointer in that game. Who made them and from where?”Pages through every shot with time, result, court location, scorer, assister and rebounder.
Name your players
“Analyze this game. We’re Acme: #23 Ana Silva, #7 Cleo Dias.”Sends your roster with the game, so shots and highlights come back credited to your players. See Rosters.
Highlights
“Give me links to all the made shots from the second half.”Returns clips with playable video and preview image URLs.
Analyze a file on your computer
“Analyze
~/Videos/game.mp4”In assistants that can run commands (Claude Code, Cursor), uploads the file and submits it. See Local files.History and credits
“How many games have I processed this month, and how many credits do I have left?”Lists your sessions and reads your available and held credits.
analyze_video spends credits.
Connect
You need an API key (hk_prod_…, see Authentication). The server is at:
Authorization header.
- Claude Code
- Cursor
- Claude Desktop
/mcp inside Claude Code to confirm hooper is connected.claude.ai custom connectors (Claude on the web and mobile) require OAuth sign-in rather than a pasted key, which isn’t supported yet. Use one of the clients above.
Tools
Every tool except
create_upload and analyze_video is read-only. Session ids can be given as sess_18234 or just 18234.
Differences from the REST API
The tools are shaped for a model’s context window, so a few things differ from calling/v1 directly:
- Sessions are summarized.
get_sessionandlist_sessionsreturnshot_countandhighlight_countinstead of the embedded lists. Page through them withlist_shotsandlist_highlights. Each session also carries ahub_urlfor watching it in the Hooper Hub. - No box scores. Sessions leave out
totalsand players leave outstats. Players are told apart by jersey number, and without numbers by appearance, so per-player stats can be misleading.list_playersis there to say who theplr_ids on shots and highlights are. For box scores, call the API directly. - Shots carry the court position only.
list_shotsreturnscourt_location(the shot chart point) instead of thelocationobject, and leaves outexcitement_score. - Highlights carry two renditions.
list_highlightsreturns the default and horizontal cuts plus the preview image, not every resolution. - Uploads need a shell. Video never passes through the assistant or the MCP server.
create_uploadhands back acurlcommand and the assistant runs it on your machine, so local files work only in assistants that can run commands. See Local files. - No webhooks. The assistant polls with
get_session. Processing takes minutes to an hour depending on length.
Rosters
Hooper tells players apart by the jersey numbers it reads. Give the assistant each team’s numbers, and names if you like, and it passes them toanalyze_video as rosters. The detected players then come back with your names and your own ids in metadata, so “show me Ana’s made threes” works and follows her from game to game.
Without a roster, the plr_ ids on shots and highlights are Hooper’s best guess within that one game. They’re unnamed, a null means Hooper couldn’t tell who it was, and one person is sometimes split into two players. Rosters need jersey numbers to be read, so leave jerseys on auto or set it to enabled.
Local files
The video never goes through the MCP server or the assistant itself. The assistant asks for an upload, then sends the file with a command on your machine:1
Reserve an upload
The assistant measures the file (for example
wc -c < game.mp4) and calls create_upload with its exact size and path. This is free.2
Send the file
create_upload returns a command like the one below, and the assistant runs it. It streams the file straight to Hooper’s storage, so a long game can take a while on a slow connection.3
Submit
The assistant calls
analyze_video with the upload_id. Submitting before the file has finished uploading returns 409 upload_incomplete.Credits and retries
analyze_video is billed like POST /v1/sessions (see Billing). The server derives the Idempotency-Key from the tool’s arguments, so if an assistant retries a call after a timeout it gets the original session back instead of paying twice.
The flip side: submitting the same URL with the same options within 24 hours returns the earlier session rather than starting a new run. To deliberately reprocess, change an option or add a metadata entry.
Tool calls count toward your key’s rate limit of 60 requests per minute.
Errors
API errors reach the assistant as a readable tool error with the code, message andRequest-Id, for example:
Authorization header fails every tool call with Missing Hooper API key. Check the header is set in your client’s config. See Errors for every code.