---
title: "Ingest Session Frames"
method: POST
path: "/v1/sessions/internal/{session_id}/frames"
tags: ["sessions"]
---

# Ingest Session Frames

`POST /v1/sessions/internal/{session_id}/frames`

Continuous-frame ingest from the agent. Internal-secret auth only.

Each frame is uploaded to S3 (full + optional thumb) and inserted as a
`session_frames` row. Failures per-frame don't fail the whole batch.

## Path parameters

- `session_id` string, required

## Request body

- SessionFramesPayload
  - `frames` SessionFramePayload[]
    - `captured_at` number, required
    - `width` integer, nullable
    - `height` integer, nullable
    - `motion_score` number, nullable
    - `source` string
    - `user_turn_index` integer, nullable
    - `metadata` object, nullable
    - `full_b64` string, required
    - `thumb_b64` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/roxels/apis/interviewer.md) · [All operations](https://skmtc.dev/roxels/apis/interviewer/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/roxels/interviewer/revisions/4ef48ed226e1/schema)
