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

> ## Agent Instructions
> To build and serve your own model, start at /deploy/development/quickstart and /deploy/development/overview. Deploying is the default path: reactor init scaffolds a workspace, reactor auth login authenticates, and reactor model deploy registers the model, publishes the release with the weights/ folder, and activates it on Reactor's GPUs, in one command from that workspace. Docker must be running, because the publish step builds the image locally. Bump model.version in reactor.yaml before redeploying a change, because a release that already has an image is reactivated as it is. Deployment access is granted per account, so contact team@reactor.inc if a deploy is refused. Every key in reactor.yaml is documented at /deploy/platform/reactor-yaml. Model code imports reactor_runtime; Python client code imports reactor_sdk. The runtime overview explains the model interface. Running the model on your own machine with reactor run is optional and needs a GPU you attach with --gpus; /deploy/development/local-testing covers that loop and pairs a complete brightness model with a Python client test in a separate brightness-test workspace.
> Reactor hosts multiple models, each with its own connect slug (modelName) and command/event schema. The video model catalog — slug, typed SDK package, and links to its schema — is at /model-api-reference/overview. Robotics policy documentation starts at /robotics/overview; The launch policies are Cosmos Nano DROID (/robotics/cosmos/nano-policy-droid/), DreamZero DROID (/robotics/dreamzero/droid/), and FLUX Action DROID (/robotics/flux-action/droid/), organized by model family and embodiment. Some models expose one slug per experience (e.g. HappyOyster); always take the slug from the model's own pages, never guess it.
> Fastest path to a working app: `npx create-reactor-app my-app --model=<slug>` scaffolds a complete app with secure auth wired up. Typed TypeScript SDKs are published as @reactor-models/<model>; Python uses the base reactor-sdk package.
> Auth: exchange an API key (rk_...) for a JWT via POST https://api.reactor.inc/tokens from your server. Never put the API key in client-side code.
> Append .md to any docs URL for clean Markdown. Search these docs via the MCP server at https://docs.reactor.inc/mcp.

# Get a session

> Returns the session's state, its model, the tracks and commands the model declares, and,
once it has ended, why.

Any `developer` or `account_admin` of the account the session runs under can read it, not
only the user who started it. A session on another account, or an unknown ID, answers
`403`. A session token reads only the sessions bound to it.

`capabilities`, `selected_transport`, and `generation` appear once the session reaches
`WAITING`. `environment` and `revision` are returned only to members of the account that
owns the model. `ended` appears once the session is closed.

Session states: `CREATED` (accepted, being placed), `PENDING` (placed, waiting for a
client), `WAITING` (offer received, answer pending), `SUSPENDED` (waiting for capacity),
`ACTIVE` (a client is connected and the model is running), `INACTIVE` (the client
disconnected), `CLOSED` (ended; cannot be reused).




## OpenAPI

````yaml /openapi.yaml get /sessions/{session_id}
openapi: 3.1.0
info:
  title: Reactor Platform API
  version: '1'
  description: >
    The Reactor Platform API mints session tokens, starts and operates sessions,
    negotiates media

    transport, and manages your account, models, and deployments. Every path is
    relative to

    `https://api.reactor.inc`. See the
    [Introduction](/platform-api/introduction) and

    [Authentication](/platform-api/authentication) pages for credentials,
    versioning, and errors.
  contact:
    name: Reactor support
    url: https://docs.reactor.inc/resources/support
servers:
  - url: https://api.reactor.inc
    description: Production
security:
  - apiKey: []
tags:
  - name: Status
    description: >-
      Public, unauthenticated endpoints for service health, pricing, and the
      values the API accepts.
  - name: Tokens
    description: >
      Exchange a long-lived API key for a short-lived, session-scoped token that
      a client can use

      to create and operate sessions without holding the key.
  - name: Users
    description: >
      Read your own user record, your account's roster, and account memberships,
      and manage

      member roles as an account admin.
  - name: API Keys
    description: >-
      Revoke API keys. Use the [Dashboard](https://reactor.inc/dashboard) to
      list or create keys. The CLI can also create a key with `reactor auth
      login`.
  - name: Sessions
    description: >
      Create, inspect, and end sessions. A session holds one running model for
      one client

      application; media and messages flow over a transport you attach to it
      afterwards.
  - name: Transport
    description: >
      Attach a client to a session. WebRTC signaling carries ICE servers, SDP,
      and ICE candidates;

      a LiveKit room connection lets the session join a room you host.
  - name: Files
    description: >
      Upload files a model reads, either for one running session or ahead of
      time for sessions you

      have not started yet.
  - name: Recordings
    description: >
      Fetch the recorded video of a session as an HLS playlist, during the
      session or after it ends.
  - name: Accounts
    description: >
      Read and manage the account your credential acts in: its name and slug,
      its credit

      balance, its effective quotas, and its accelerator capacity.
  - name: Invitations
    description: >
      Invite people to your account by email, and manage pending invitations.
      The recipient

      accepts from the emailed link while signed in to the dashboard.
  - name: Usage
    description: >
      List the sessions your account has run, filter them by status, date,
      model, or API key,

      and read exact session totals for a date window.
  - name: Models
    description: >
      Register, read, update, and delete the models your account serves, and
      list the models you can

      use. The `reactor model` CLI commands are built on these endpoints.
  - name: Releases
    description: >
      Register a model's versioned releases, push their container image, and
      deploy a release with a

      per-region instance plan.
  - name: Model Weights
    description: >
      Upload and inspect the weights bundle of a release: single-request
      uploads, multipart uploads

      for large files, and the server-side finalize that marks a bundle
      complete.
  - name: Model Schemas
    description: >
      Attach an OpenAPI schema to a release that describes the model's commands,
      messages, and

      tracks. Schemas of public models are readable without credentials.
  - name: Model Access
    description: |
      Share a private model with other accounts, one environment at a time.
  - name: Projects
    description: >
      A project is the deploy identity of a model you serve on Reactor. Each
      model is one

      project, with its own UUID. Creating a project also creates its
      `production` environment.
  - name: Environments
    description: >
      An environment is a named deploy target of a project, such as `production`
      or `staging`.

      Each write to an environment creates its next revision, and the newest
      revision is what the

      environment runs. Environment access grants let another account start
      sessions on one

      environment.
  - name: Revisions
    description: >
      A revision is an immutable, numbered snapshot of one environment: its
      model image, weights,

      resources, instances, and variables. An environment's revisions, newest
      first, are its change

      log.
  - name: Images
    description: >
      Model images are the container images pushed to your model's repository,
      named by digest.

      Experimental: this API can change without notice.
  - name: Weight Sets
    description: >
      A weight set is a version-2 weights bundle, named by its set digest. Push
      the files, then put

      the manifest. Available when weight sets are enabled for your account.
      Experimental: this API

      can change without notice.
  - name: Tags
    description: >
      A tag is a movable name on one model image or one weight set of a project.
      A release of the

      model is a read-only tag. Experimental: this API can change without
      notice.
paths:
  /sessions/{session_id}:
    parameters:
      - $ref: '#/components/parameters/SessionId'
    get:
      tags:
        - Sessions
      summary: Get a session
      description: >
        Returns the session's state, its model, the tracks and commands the
        model declares, and,

        once it has ended, why.


        Any `developer` or `account_admin` of the account the session runs under
        can read it, not

        only the user who started it. A session on another account, or an
        unknown ID, answers

        `403`. A session token reads only the sessions bound to it.


        `capabilities`, `selected_transport`, and `generation` appear once the
        session reaches

        `WAITING`. `environment` and `revision` are returned only to members of
        the account that

        owns the model. `ended` appears once the session is closed.


        Session states: `CREATED` (accepted, being placed), `PENDING` (placed,
        waiting for a

        client), `WAITING` (offer received, answer pending), `SUSPENDED`
        (waiting for capacity),

        `ACTIVE` (a client is connected and the model is running), `INACTIVE`
        (the client

        disconnected), `CLOSED` (ended; cannot be reused).
      operationId: getSession
      parameters:
        - $ref: '#/components/parameters/ApiVersion'
      responses:
        '200':
          description: The session.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SessionDetails'
              examples:
                running:
                  summary: A running session
                  value:
                    session_id: 85ded560-014c-42df-8902-89dfbca8fa00
                    server_info:
                      server_version: 1.5.11
                    selected_transport:
                      protocol: webrtc
                      version: '1.0'
                    model:
                      name: reactor/helios
                      version: 1.4.0
                    capabilities:
                      protocol_version: '1.0'
                      tracks:
                        - name: main_video
                          kind: video
                          direction: recvonly
                        - name: webcam
                          kind: video
                          direction: sendonly
                      emission_fps: 30
                    generation: streamed
                    machine_id: inst-7f9c2d
                    state: ACTIVE
                    cluster: 054e2495-c685-450f-9ceb-57f185b7300a
                    zone: us-west
                    region: us-west
                    origin_country: US
                    user_id: 0d7a1c4e-5b2f-4a6d-8e9c-1f3b5d7e9a2c
                    closed: false
                    created_at: '2026-11-04T09:30:00Z'
                    updated_at: '2026-11-04T09:31:12Z'
                ended:
                  summary: A session whose start was refused
                  value:
                    session_id: 85ded560-014c-42df-8902-89dfbca8fa00
                    model:
                      name: reactor/fast-h3
                      version: 2.0.0
                    state: CLOSED
                    cluster: 054e2495-c685-450f-9ceb-57f185b7300a
                    user_id: 0d7a1c4e-5b2f-4a6d-8e9c-1f3b5d7e9a2c
                    closed: true
                    created_at: '2026-05-15T10:04:20Z'
                    updated_at: '2026-05-15T10:04:31Z'
                    ended:
                      at: '2026-05-15T10:04:31.882Z'
                      reason: START_REFUSED
                      message: >-
                        starting_input.commands[0] is refused: aspect: must be
                        one of 16:9, 1:1, 9:16, 4:3
        '400':
          description: '`session_id` is not a UUID.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      security:
        - apiKey: []
        - sessionToken: []
components:
  parameters:
    SessionId:
      name: session_id
      in: path
      required: true
      description: The session's ID, as returned by `POST /sessions`.
      schema:
        type: string
        format: uuid
    ApiVersion:
      name: Reactor-API-Version
      in: header
      required: false
      description: >-
        The API protocol version the client speaks. Currently `1`. Older
        versions than the server's minimum get `426`.
      schema:
        type: string
        example: '1'
  schemas:
    SessionDetails:
      type: object
      required:
        - session_id
        - cluster
        - state
        - user_id
        - closed
        - created_at
        - updated_at
      properties:
        session_id:
          type: string
          format: uuid
        state:
          $ref: '#/components/schemas/SessionState'
        closed:
          type: boolean
          description: Whether the session has ended.
        model:
          $ref: '#/components/schemas/SessionModel'
        server_info:
          $ref: '#/components/schemas/SessionServerInfo'
        selected_transport:
          $ref: '#/components/schemas/SessionTransportProtocol'
        capabilities:
          $ref: '#/components/schemas/SessionCapabilities'
        generation:
          type: string
          enum:
            - streamed
            - stepped
          description: >
            The mode the model runs the session in. Appears once the session is
            `WAITING`, and is

            absent for a runtime that predates generation modes (such a session
            streams).
        cluster:
          type: string
          description: An opaque placement ID. `""` until the session is placed.
        zone:
          type: string
          description: The Reactor region serving the session. Omitted when unknown.
        region:
          type: string
          description: >-
            The Reactor region that served the session, such as `us-west`.
            Omitted when unknown.
        origin_country:
          type: string
          description: >-
            The ISO 3166-1 alpha-2 country the session was started from, when
            known.
          example: US
        machine_id:
          type: string
          description: >-
            An opaque ID of the instance serving the session. Absent until an
            instance picks it up.
        user_id:
          type: string
          format: uuid
          description: >-
            The user who started the session. Can be another member of your
            account.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
          description: The last time the session record changed.
        ended:
          $ref: '#/components/schemas/SessionEnded'
        environment:
          $ref: '#/components/schemas/SessionEnvironment'
        revision:
          $ref: '#/components/schemas/SessionRevision'
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: >-
            A stable error code (for example `not_found`) on newer routes, or a
            sentence on older ones. When `message` is present, branch on
            `error`.
        message:
          type: string
          description: >-
            A human-readable explanation. Do not parse it; its wording may
            change.
        resource:
          type: string
          description: The type of the resource a `not_found` refers to.
        reason:
          type: string
          description: >-
            A more specific cause for `failed_precondition`, `aborted`, and some
            `invalid_request` errors.
    SessionState:
      type: string
      description: The session's lifecycle state.
      enum:
        - CREATED
        - PENDING
        - WAITING
        - SUSPENDED
        - ACTIVE
        - INACTIVE
        - CLOSED
    SessionModel:
      type: object
      properties:
        name:
          type: string
          description: The model name, as requested (including any environment suffix).
          example: reactor/helios
        version:
          type: string
          description: The model's version.
          example: 1.4.0
    SessionServerInfo:
      type: object
      properties:
        server_version:
          type: string
          description: The Reactor API's version.
          example: 1.5.11
    SessionTransportProtocol:
      type: object
      properties:
        protocol:
          type: string
          example: webrtc
        version:
          type: string
          description: The signaling protocol version, as `major.minor`.
          example: '1.0'
    SessionCapabilities:
      type: object
      description: What the model declares for this session, reported by its runtime.
      properties:
        protocol_version:
          type: string
          example: '1.0'
        tracks:
          type: array
          items:
            $ref: '#/components/schemas/SessionTrack'
        commands:
          type: array
          items:
            $ref: '#/components/schemas/SessionCommand'
        emission_fps:
          type: number
          description: The frame rate the model emits at.
          example: 30
    SessionEnded:
      type: object
      required:
        - at
      description: Why and when the session ended. Present only once the session is closed.
      properties:
        at:
          type: string
          format: date-time
          description: >-
            When the end was recorded. Later than the moment the model stopped;
            do not use it to measure run time.
        reason:
          type: string
          description: >
            Why the session ended. Treat an unknown value as a reason this
            client does not know,

            not as an error.
          enum:
            - STOPPED
            - TIMED_OUT
            - MODERATED
            - ERROR
            - EVICTED
            - START_REFUSED
            - RUNTIME_RESTARTED
            - RUNTIME_UNREACHABLE
            - HEARTBEAT_LOST
            - USER_REQUEST
            - CREDIT_EXHAUSTION
            - MAX_DURATION_EXCEEDED
            - DEPLOYMENT
        message:
          type: string
          description: >
            Text from whoever `reason` names. Under `USER_REQUEST` it is the
            caller's own words

            from `DELETE`. Read `reason` before showing it.
    SessionEnvironment:
      type: object
      description: >-
        The environment the session targets. Returned only to members of the
        account that owns the model.
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
          example: staging
        project_id:
          type: string
          format: uuid
        deleted_at:
          type: string
          format: date-time
          description: Set when the environment was deleted after the session.
    SessionRevision:
      type: object
      description: >-
        The environment revision that served the session. Returned only to
        members of the account that owns the model.
      properties:
        number:
          type: integer
          example: 2
    SessionTrack:
      type: object
      required:
        - name
        - kind
        - direction
      properties:
        mid:
          type: string
          description: The SDP media ID the track uses. Set in `track_mapping`.
        name:
          type: string
          description: The track's name, as the model declares it.
          example: main_video
        kind:
          type: string
          enum:
            - video
            - audio
        direction:
          type: string
          description: >-
            Direction from the client's side. `recvonly` is a track the model
            sends; `sendonly` is one the client sends.
          enum:
            - recvonly
            - sendonly
            - sendrecv
        labels:
          type: array
          items:
            type: string
    SessionCommand:
      type: object
      required:
        - name
      properties:
        name:
          type: string
        description:
          type: string
        schema:
          type: object
          description: The JSON Schema of the command's data.
  responses:
    Unauthorized:
      description: The credential is missing, invalid, or expired.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: >-
        The credential is valid but may not perform this action, or the resource
        is outside the caller's permission boundary. A resource you cannot see
        returns `403` whether or not it exists.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: >-
        A Reactor API key (`rk_...`), sent as `Authorization: Bearer rk_...`.
        Keep it on a server.
    sessionToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        A session-scoped JWT minted by `POST /tokens`. Accepted on `/sessions`
        and `/clips` only.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.