---
title: "Get a thumbnail of a source on no clip"
method: GET
path: "/v1/sources/{sourceId}/thumbnail"
tags: ["Sources"]
---

# Get a thumbnail of a source on no clip

`GET /v1/sources/{sourceId}/thumbnail`

Get a thumbnail or animated preview of a streaming upload source owned by the caller or their workspace, without a video or clip — for a source that isn't on any clip yet. `startTimeMs` is relative to the source. If you pass `width`/`height`, the aspect ratio must match the source's native ratio. Omit both to default to the source's native size. By default returns a 302 redirect — set `?response=json` to get `{url}` JSON instead.

## Path parameters

- `sourceId` string, required — Streaming upload source identifier

## Query parameters

- `format` 'jpg' | 'png' | 'webp' | 'gif' | 'mp4' — Output format. Defaults to jpg.
- `startTimeMs` integer — Frame offset in ms from the source's start. Defaults to 0.
- `durationMs` integer — Duration of the animated preview in ms. Only valid when format is gif or mp4.
- `width` integer — Output width in pixels. The thumbnail keeps the source's aspect ratio; a missing side is derived from it.
- `height` integer — Output height in pixels. Derived from the source's aspect ratio when omitted.
- `download` union — Suggest a download disposition on the signed URL.
  - 'true'
  - 'false'
- `response` 'json' — Set to 'json' to receive `{url}` instead of the default 302 redirect.

## Response `200`

Returned when `?response=json` is set

- ThumbnailResponse — Signed CDN URL for the requested thumbnail. Returned only when `?response=json` is set; otherwise the endpoint redirects to the URL with a 302.
  - `url` string, uri, required

## Other responses

- `302` — Redirect to the signed CDN URL
- `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

> 19 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-25** `b25e530cdcc5` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/withchima/apis/tella-public-api/changes/v1/sources/:sourceId/thumbnail/get.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/d3eafbc27bf9?raw)
