---
title: "POST /frames/{frame_id}/ocr"
method: POST
path: "/frames/{frame_id}/ocr"
---

# POST /frames/{frame_id}/ocr

`POST /frames/{frame_id}/ocr`

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

- **2026-04-08** `1a63468a8d30` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/screenpipe/apis/screenpipe-api/changes/frames/:frame_id/ocr/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/1a63468a8d30/schema)
