---
title: "Capture a web page or social post"
method: POST
path: "/v1/library/screenshots"
tags: ["Library"]
---

# Capture a web page or social post

`POST /v1/library/screenshots`

Captures a public web page or a single post on X, Instagram, LinkedIn or TikTok and saves it to the caller's private library. Pages are captured above the fold; social posts are cropped to their embed card. Set scroll=true to record a scrolling web page as video (ignored for social posts). Returns a finished image or video library item with a sourceId for overlays or layout media. Unlike AI generation, capture completes in this request, with no polling; allow up to two minutes. Private pages and social profiles/feeds are not supported. Use an Idempotency-Key when retrying to avoid duplicate captures.

## Request body

- CaptureScreenshotRequest
  - `scroll` boolean — Record a scrolling web page as video instead of a still (default false). Ignored for social posts.
  - `url` string, required — Public web page or single post on X, Instagram, LinkedIn or TikTok. A missing scheme defaults to HTTPS.

## Response `201`

Captured and saved to the private library

- CaptureScreenshotResponse
  - `item` object, required — Finished private library item: image for a still, video for a scrolling page. Place item.sourceId with overlays or layout media. Capture completes synchronously; no generation polling is needed.
    - `category` string — Catalog grouping, for `default` items only — the same grouping the editor's sound effects and background music panels show
    - `createdAt` string — ISO-8601 creation timestamp. Absent for `default` catalog items, which are served from Tella's catalog rather than stored as rows.
    - `dimensions` object — Pixel dimensions, for visual media
      - `height` integer, required
      - `width` integer, required
    - `durationMs` number — Duration in milliseconds, for time-based media
    - `id` string, required — Unique library item identifier
    - `name` string, required — Display name shown in the library
    - `presetId` string — Preset ID, for `default` catalog items only. A preset has no source, so pass this instead of `sourceId`: a `sound-effect` preset goes to `POST /v1/videos/{id}/clips/{clipId}/sound-effects` (placing it copies the effect into a source owned by your workspace), a `music` preset to `PUT /v1/videos/{id}/background-music`.
    - `scope` 'private', required
    - `sourceId` string, required
    - `type` 'image' | 'video', required
    - `updatedAt` string — ISO-8601 update timestamp. Absent for `default` catalog items.
    - `url` string — Hosted media URL, for `image`, `screenshot`, `music` and `lut` items, and for `default` catalog items, where it is a publicly fetchable preview of the audio (for `music` presets it is also the track the video will play). API-created images expose this alongside `sourceId`; use `sourceId` to place the image on a clip, since overlays and layout media do not accept URLs. Editor-created `screenshot` items have a URL but no sourceId; use POST /v1/library/screenshots to capture a new placeable image or video.

## Other responses

- `400` — The request was malformed or contained invalid parameters.
- `401` — Authentication is required. Provide a valid API key.
- `403` — You don't have permission to access this resource.
- `404` — The requested resource was not found.
- `409` — The request conflicts with the resource's current state, e.g. an Idempotency-Key whose first request is still in progress. Retry once it settles.
- `429` — You have exceeded the rate limit. Please slow down.
- `500` — An unexpected error occurred
- `501` — The requested operation is not implemented.
- `503` — A dependency was unavailable and the request was not executed. Safe to resend unchanged after the Retry-After delay.

## Changes

> 20 revisions in range; 1 not diffed.

- **2026-09-28** `ac47c99c144f` — 9 warning
  - added the new `edit_conflict` enum value to the `error` response property for the response status `400`
  - added the new `edit_conflict` enum value to the `error` response property for the response status `401`
  - added the new `edit_conflict` enum value to the `error` response property for the response status `403`
  - added the new `edit_conflict` enum value to the `error` response property for the response status `404`
  - …5 more
- **2026-09-19** `64764729bd60` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/withchima/apis/tella-public-api/changes/v1/library/screenshots/post.md)

---

[API](https://skmtc.dev/withchima/apis/tella-public-api.md) · [All operations](https://skmtc.dev/withchima/apis/tella-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/withchima/apis/tella-public-api/revisions/a6b8b94fdfc0?raw)
