---
title: "Get Frame At"
method: GET
path: "/v1/sessions/{session_id}/frames/at/{captured_at_ms}"
tags: ["sessions"]
---

# Get Frame At

`GET /v1/sessions/{session_id}/frames/at/{captured_at_ms}`

Resolve a LOGICAL frame ref ({captured_at_ms}) to the stored frame —
the FrameSink resolver seam (docs/intent-streaming.md). Returns a 302 to
a freshly-presigned S3 URL, so references embedded in copied markdown
stay valid: the presign happens per-fetch, never baked into the artifact.
Capability-URL semantics (same as the join link). Nearest-match within
±2s tolerates the agent's capture-vs-persist timing skew.

## Path parameters

- `session_id` string, required
- `captured_at_ms` integer, required

## Query parameters

- `thumb` boolean

## 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)
