# Hooper API > Basketball video analytics: submit a game, get back highlights, shots and box scores. - [Introduction](https://developer.hooper.gg/introduction.md): Send Hooper a basketball game; get back highlights, every shot, and a box score. - [Quickstart](https://developer.hooper.gg/quickstart.md): From zero to your first highlights in three requests. - [Authentication](https://developer.hooper.gg/authentication.md): API keys, environments, and rate limits. - [Sessions](https://developer.hooper.gg/sessions.md): Submitting video, what comes back, and the limits. - [Webhooks](https://developer.hooper.gg/webhooks.md): Signed callbacks when a session finishes — and how to verify them. - [Billing](https://developer.hooper.gg/billing.md): Prepaid credits, metered per second of video. - [Errors](https://developer.hooper.gg/errors.md): One envelope, machine-readable codes, and what to do about each. - [Create an upload](https://developer.hooper.gg/api-reference/uploads/create-an-upload.md): Returns a resumable upload URL. `PUT` the file bytes directly to `upload_url` (GCS resumable protocol), then submit a session with `source: { type: "upload", upload_id }`. - [List sessions](https://developer.hooper.gg/api-reference/sessions/list-sessions.md): Newest first. Each item is the full session object, highlights included. - [Submit a video](https://developer.hooper.gg/api-reference/sessions/submit-a-video.md): Places a credit hold, creates the session and queues it for processing. Responds immediately with the session in `queued` state; you are notified through a webhook (`session.processed` / `session.failed`) when it finishes, or you can poll `GET /v1/sessions/{id}`. - [Retrieve a session](https://developer.hooper.gg/api-reference/sessions/retrieve-a-session.md) - [List a session's highlights](https://developer.hooper.gg/api-reference/sessions/list-a-sessions-highlights.md): Every clip the pipeline cut for the session. The first 100 are embedded on the session object; use this endpoint to page the rest. - [List a session's shots](https://developer.hooper.gg/api-reference/sessions/list-a-sessions-shots.md) - [List a session's players](https://developer.hooper.gg/api-reference/sessions/list-a-sessions-players.md): The roster with per-player box scores, highest scorer first. - [Retrieve the balance](https://developer.hooper.gg/api-reference/billing/retrieve-the-balance.md) - [List usage events](https://developer.hooper.gg/api-reference/billing/list-usage-events.md): One usage event per billable job: `held` at submit, then `settled` (credits drawn for the measured length) or `voided` (nothing charged). - [List webhook endpoints](https://developer.hooper.gg/api-reference/webhooks/list-webhook-endpoints.md) - [Create a webhook endpoint](https://developer.hooper.gg/api-reference/webhooks/create-a-webhook-endpoint.md): The `secret` (`hws_prod_…`) is returned **once**, in this response only. Use it to verify the `Hooper-Signature` header on deliveries. - [Retrieve a webhook endpoint](https://developer.hooper.gg/api-reference/webhooks/retrieve-a-webhook-endpoint.md) - [Delete a webhook endpoint](https://developer.hooper.gg/api-reference/webhooks/delete-a-webhook-endpoint.md) - [Send a test event](https://developer.hooper.gg/api-reference/webhooks/send-a-test-event.md): Synchronously POSTs a synthetic `session.processed` event (`id: "evt_test"`) to the endpoint and reports the response, so you can verify signature handling before the first real job. - [List events](https://developer.hooper.gg/api-reference/events/list-events.md): Every event emitted for your organization, newest first. Use it to catch up after missed webhook deliveries. - [Retrieve an event](https://developer.hooper.gg/api-reference/events/retrieve-an-event.md) - [Sessionprocessed](https://developer.hooper.gg/api-reference/sessionprocessed.md): Sent when a session finishes successfully. `data.object` is the full session, highlights included. Verify `Hooper-Signature` before trusting the body. - [Sessionfailed](https://developer.hooper.gg/api-reference/sessionfailed.md): Sent when processing fails. `data.object.error.code` says why; the credit hold is voided, nothing is charged. ## OpenAPI Specs - [openapi](/openapi.json)