---
title: "Run OCR on frame"
method: POST
path: "/frames/{frame_id}/text"
tags: ["Frames"]
---

# Run OCR on frame

`POST /frames/{frame_id}/text`

Run on-demand OCR on a frame that has no stored bounding boxes.
Loads the snapshot JPEG, runs Apple Vision OCR, stores the result,
and returns the text positions. Subsequent GET requests will hit the
cached DB row. If OCR data already exists, returns it without re-running.

## Path parameters

- `frame_id` integer, required

## Response `200`

OK

- FrameTextResponse — Response type for frame OCR data endpoint
  - `frame_id` integer, required
  - `text_positions` TextPosition[], required
    - `text` string, required
    - `confidence` number, required
    - `bounds` TextBounds, required
      - `left` number, required
      - `top` number, required
      - `width` number, required
      - `height` number, required

## Changes

> 10 revisions in range; 1 could not be searched.

- **2026-04-09** `0f0f8030c7e2` — 1 info
  - api tag `Frames` added
- **2026-04-08** `1a63468a8d30` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/screenpipe/apis/screenpipe-api/changes/frames/:frame_id/text/post.md)

---

[API](https://skmtc.dev/screenpipe/apis/screenpipe-api.md) · [All operations](https://skmtc.dev/screenpipe/apis/screenpipe-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/screenpipe/screenpipe-api/revisions/c48ab58de88e/schema)
