> ## Documentation Index
> Fetch the complete documentation index at: https://developer.hooper.gg/llms.txt
> Use this file to discover all available pages before exploring further.

# List sessions

> Newest first. Each item is the full session object, highlights included.



## OpenAPI

````yaml /openapi.json get /v1/sessions
openapi: 3.1.0
info:
  title: Hooper API
  version: 1.0.0
  description: >-
    Submit basketball game video and receive highlights, shots and per-player
    box scores.


    All endpoints require `Authorization: Bearer hk_prod_…`. Money fields are
    integer **cents**. Timestamps are Unix seconds. Every list — top-level or
    embedded — is `{ object: "list", data, has_more, total_count }`.
servers:
  - url: https://api.hooper.gg
    description: Production (accepts hk_prod_ keys)
security:
  - apiKey: []
tags:
  - name: Uploads
    description: Resumable video uploads to Hooper storage.
  - name: Sessions
    description: >-
      A session is one submitted game and everything the pipeline produced for
      it.
  - name: Billing
    description: Prepaid credits, metered per second of video.
  - name: Webhooks
    description: Signed HTTP callbacks when a session finishes.
  - name: Events
    description: The log of every event Hooper has emitted for your organization.
paths:
  /v1/sessions:
    get:
      tags:
        - Sessions
      summary: List sessions
      description: Newest first. Each item is the full session object, highlights included.
      operationId: listSessions
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/StartingAfter'
        - name: status
          in: query
          schema:
            $ref: '#/components/schemas/SessionStatus'
        - name: group
          in: query
          schema:
            type: string
            example: grp_412
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SessionList'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  parameters:
    Limit:
      name: limit
      in: query
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 20
    StartingAfter:
      name: starting_after
      in: query
      description: 'Cursor: the `id` of the last item on the previous page.'
      schema:
        type: string
  schemas:
    SessionStatus:
      type: string
      enum:
        - queued
        - processing
        - processed
        - failed
    SessionList:
      allOf:
        - $ref: '#/components/schemas/ListEnvelope'
        - type: object
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/Session'
    ListEnvelope:
      type: object
      required:
        - object
        - data
        - has_more
        - total_count
      properties:
        object:
          type: string
          const: list
        has_more:
          type: boolean
        total_count:
          type: integer
        url:
          type: string
          description: 'Embedded lists only: the endpoint that pages the full set.'
          example: /v1/sessions/sess_18234/highlights
    Session:
      type: object
      description: >-
        One submitted game. The same shape everywhere it appears — single read,
        list item, webhook payload. Highlights, shots and players are embedded
        (first 100 of each); their `url` pages the rest.
      properties:
        id:
          type: string
          example: sess_18234
        object:
          type: string
          const: session
        created:
          type: integer
          example: 1756224000
        status:
          $ref: '#/components/schemas/SessionStatus'
        group:
          type: string
          example: grp_412
        source:
          type: object
          properties:
            type:
              type: string
              enum:
                - upload
                - url
                - veo
            url:
              type: string
              nullable: true
        metadata:
          type: object
          additionalProperties:
            type: string
        run_version:
          type: integer
          nullable: true
        duration_seconds:
          type: integer
          nullable: true
          example: 5412
        cost_cents:
          type: integer
          nullable: true
          example: 752
        highlights:
          allOf:
            - $ref: '#/components/schemas/ListEnvelope'
            - type: object
              properties:
                data:
                  type: array
                  items:
                    $ref: '#/components/schemas/Highlight'
        shots:
          allOf:
            - $ref: '#/components/schemas/ListEnvelope'
            - type: object
              properties:
                data:
                  type: array
                  items:
                    $ref: '#/components/schemas/Shot'
        players:
          allOf:
            - $ref: '#/components/schemas/ListEnvelope'
            - type: object
              properties:
                data:
                  type: array
                  items:
                    $ref: '#/components/schemas/Player'
        totals:
          $ref: '#/components/schemas/BoxScore'
        video:
          type: object
          properties:
            url:
              type: string
              nullable: true
            preview_url:
              type: string
              nullable: true
            1080p:
              type: string
              nullable: true
            720p:
              type: string
              nullable: true
            360p:
              type: string
              nullable: true
            width:
              type: integer
              nullable: true
            height:
              type: integer
              nullable: true
            fps:
              type: number
              nullable: true
        artifacts:
          type: object
          description: Raw model output (JSONL) behind the shots and highlights.
          properties:
            actions:
              type: string
              nullable: true
            balls:
              type: string
              nullable: true
            hoops:
              type: string
              nullable: true
            clusters:
              type: string
              nullable: true
        error:
          type: object
          nullable: true
          description: Set when `status` is `failed`.
          properties:
            code:
              type: string
              enum:
                - no_shots
                - no_hoops
                - no_court
                - video_too_large
                - source_invalid
                - source_unavailable
                - timeout
                - unknown
            message:
              type: string
    ErrorResponse:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - type
            - code
            - message
          properties:
            type:
              type: string
              enum:
                - invalid_request_error
                - authentication_error
                - insufficient_credits
                - rate_limit_error
                - api_error
            code:
              type: string
              example: parameter_invalid
            message:
              type: string
            param:
              type: string
              description: The request field the error refers to, when there is one.
              example: source.url
    Highlight:
      type: object
      description: A clip cut around one shot, in several renditions.
      properties:
        id:
          type: string
          example: hl_9f2c…
        object:
          type: string
          const: highlight
        shot:
          type: string
          description: The shot this clip is for.
          example: shot_a1b2…
        shot_index:
          type: integer
          nullable: true
        length_seconds:
          type: number
          example: 8.5
        is_lowlight:
          type: boolean
        is_manual:
          type: boolean
        player:
          type: string
          nullable: true
          description: The scorer, as a `plr_` id from the session's `players`.
          example: plr_5
        video:
          type: object
          properties:
            default:
              type: string
              nullable: true
            horizontal:
              type: string
              nullable: true
            1080p:
              type: string
              nullable: true
            720p:
              type: string
              nullable: true
            480p:
              type: string
              nullable: true
            360p:
              type: string
              nullable: true
            240p:
              type: string
              nullable: true
            144p:
              type: string
              nullable: true
        preview:
          type: object
          properties:
            default:
              type: string
              nullable: true
            horizontal:
              type: string
              nullable: true
        created:
          type: integer
          nullable: true
    Shot:
      type: object
      properties:
        id:
          type: string
          example: shot_a1b2…
        object:
          type: string
          const: shot
        index:
          type: integer
          nullable: true
        start_seconds:
          type: number
          nullable: true
        end_seconds:
          type: number
          nullable: true
        made:
          type: boolean
          nullable: true
        points:
          type: integer
          nullable: true
          description: 0 when missed; 1 for a free throw; 2 or 3 otherwise.
        type:
          type: string
          example: fieldgoal
        is_three_point:
          type: boolean
          nullable: true
        is_free_throw:
          type: boolean
        is_fouled:
          type: boolean
        location:
          type: object
          description: Normalized (0–1) coordinates.
          properties:
            shot_image_normed:
              type: array
              items:
                type: number
              nullable: true
            shot_world_normed:
              type: array
              items:
                type: number
              nullable: true
            hoop_image_normed:
              type: array
              items:
                type: number
              nullable: true
        excitement_score:
          type: number
          nullable: true
        players:
          type: object
          properties:
            scorer:
              type: string
              nullable: true
              example: plr_5
            assister:
              type: string
              nullable: true
            rebounder:
              type: string
              nullable: true
        highlight:
          type: string
          nullable: true
          description: The clip for this shot, when one was cut.
          example: hl_9f2c…
    Player:
      type: object
      properties:
        id:
          type: string
          example: plr_5
        object:
          type: string
          const: player
        name:
          type: string
          nullable: true
        jersey:
          type: string
          nullable: true
        user_id:
          type: string
          nullable: true
        team_id:
          type: integer
          nullable: true
        stats:
          $ref: '#/components/schemas/BoxScore'
    BoxScore:
      type: object
      properties:
        points:
          type: integer
        fg_2pt_att:
          type: integer
        fg_2pt_make:
          type: integer
        fg_3pt_att:
          type: integer
        fg_3pt_make:
          type: integer
        ft_att:
          type: integer
        ft_make:
          type: integer
        assist:
          type: integer
        rebound:
          type: integer
  responses:
    Unauthorized:
      description: Missing, invalid, revoked or wrong-environment API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      bearerFormat: hk_prod_… / hk_stg_…
      description: >-
        API key issued by Hooper for your organization. Keys are
        environment-tagged: `hk_prod_` keys work against production, `hk_stg_`
        keys against staging.

````