---
title: "Twitch Clip API"
method: GET
path: "/v1/twitch/clip"
tags: ["Twitch"]
---

# Twitch Clip API

`GET /v1/twitch/clip`

## Request

- Base URL: `https://api.captapi.com`
- URL: `https://api.captapi.com/v1/twitch/clip`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Twitch clip — curator vs channel, signedVideoUrl, unwrapped token, relatedClips (1 credit).

Pass a Twitch clip URL (clips.twitch.tv/&lt;slug&gt; or twitch.tv/&lt;channel&gt;/clip/&lt;slug&gt;) and get a clean structured object — not Twitch's raw GraphQL envelope. Channel URLs and usernames are 400 (they belong on /twitch/profile) — rejected immediately instead of a slow miss. Includes curator (who cut the clip) separate from channel{id,handle,displayName,url,avatar,followers,isPartner,lastBroadcast}, BCP-47 lowercase language (same as twitch/profile recentVideos), isFeatured/isPublished, videoOffsetSeconds, gameId/gameSlug/gameBoxArtUrl, videoQualities[{quality,frameRate,url,signedUrl}] with frameRate rounded to 2dp, videoUrl (unsigned source) plus signedVideoUrl (?sig=&token= — required for /nauth/ MP4s; unsigned returns 401), playbackAccessToken as parsed fields (signature, expires, expiresAt, clipUri, clipSlug, deviceId, version, authorization — no escaped JSON value string), and relatedClips[] from the same channel. No flat broadcaster / broadcasterProfileImage twins. Accepts cache / cacheMaxAge=1d|3d|7d|14d|30d. Flat 1 credit.

Docs: https://captapi.com/apis/twitch-clip

## Query parameters

- `url` string, required
- `cache` boolean
- `cacheMaxAge` '1d' | '3d' | '7d' | '14d' | '30d'

## Response `200`

Success. The data object for this endpoint.

- object
  - `success` unknown, required
  - `data` object, required
    - `platform` string: Platform identifier for this response (matches the endpoint's platform).
    - `id` string: Stable platform ID for the item.
    - `slug` string: URL slug of the item.
    - `url` string: Canonical URL of the item.
    - `embedUrl` string: Platform embed URL when a real embed id is known. Do not invent from a page/permalink id.
    - `title` string: Title of the item.
    - `createdAt` string: Creation date (ISO 8601).
    - `durationSeconds` integer: Length in seconds for this item (full media length, or a segment span when the endpoint documents a start/end).
    - `views` integer: View count when the platform exposes one.
    - `thumbnail` string: Thumbnail image URL.
    - `videoUrl` string: Unsigned highest-quality source MP4 path (often /nauth/). Does not play by itself — Twitch returns 401 without a signature. Use signedVideoUrl for ready-to-play playback.
    - `signedVideoUrl` string: Ready-to-play highest-quality URL with ?sig=&token= appended. Required for current /nauth/ clip CDN paths. Expires with playbackAccessToken.expiresAt.
    - `videoQualities` object[]
      - `quality` string: Quality tier of the format.
      - `frameRate` number: Frames per second for a videoQualities row, rounded to 2 decimal places (Twitch returns raw floats like 60.023…). Example: 60.
      - `url` string: Canonical URL of the item.
      - `signedUrl` string: Signed url URL.
    - `language` string: BCP-47 language, lowercase (e.g. en, es). Normalized the same way as twitch/profile recentVideos[].language — Twitch's raw clip field is often uppercase.
    - `isFeatured` boolean: Whether Twitch marks the clip as featured on the channel.
    - `isPublished` boolean: Whether the clip is published.
    - `videoOffsetSeconds` integer: Seconds into the source VOD where the clip starts.
    - `game` string: Game or category being streamed.
    - `gameId` string: Twitch game/category id.
    - `gameSlug` string: Twitch game/category slug.
    - `gameBoxArtUrl` string: Twitch category/game box art image URL (usually 144×192).
    - `channel` object
      - `id` string: Id of this channel item.
      - `handle` string: Account handle.
      - `displayName` string: Display name of the account. Canonical across profile endpoints (prefer over name).
      - `url` string: Canonical URL of the item.
      - `avatar` string: Avatar / profile picture URL. Canonical across profile endpoints.
      - `followers` integer: Follower count.
      - `isPartner` boolean: Whether the channel is a platform Partner/partner.
      - `lastBroadcast` object: Most recent broadcast metadata ({startedAt, title}).
        - `startedAt` string
        - `title` string: Title of the item.
    - `curator` object
      - `id` string: Id of this curator item.
      - `handle` string: Account handle.
      - `displayName` string: Display name of the account. Canonical across profile endpoints (prefer over name).
      - `url` string: Canonical URL of the item.
      - `avatar` string: Avatar / profile picture URL. Canonical across profile endpoints.
    - `playbackAccessToken` object
      - `signature` string: Signature. Example: "9902191e0b3125657995296cbba4f83b41dd920e".
      - `expires` integer: Expires. Example: 1786947372.
      - `expiresAt` string: When signed URLs expire (ISO 8601).
      - `clipUri` string: Clip uri URL.
      - `clipSlug` string: Clip slug.
      - `deviceId` string: Device id. Example: "2de496b19fa54321aae2acec1f64aeb6".
      - `version` integer: Version. Example: 3.
      - `authorization` object: Object with forbidden.
        - `forbidden` boolean
    - `relatedClips` object[]
      - `id` string: Id of this related clips item.
      - `slug` string: URL slug of the item.
      - `url` string: Canonical URL of the item.
      - `title` string: Title of this related clips item.
      - `createdAt` string: Creation date (ISO 8601).
      - `views` integer: View count when the platform exposes one.
      - `durationSeconds` integer: Length in seconds for this item (full media length, or a segment span when the endpoint documents a start/end).
      - `language` string: BCP-47 language, lowercase (e.g. en, es). Normalized the same way as twitch/profile recentVideos[].language — Twitch's raw clip field is often uppercase.
      - `thumbnail` string: Thumbnail image URL.

## Other responses

- `400`: Bad request: wrong platform URL, unknown endpoint, or an invalid parameter value. Not billed.
- `401`: Missing, invalid or revoked API key. Not billed.
- `402`: Not enough credits for this request. Not billed.
- `404`: The resource does not exist or is not public. Not billed.
- `422`: A required parameter is missing or has the wrong type. Not billed.
- `429`: Rate limit reached. Wait for Retry-After seconds. Not billed.
- `502`: The platform could not be reached or returned nothing usable. Retryable, not billed. 503 and 504 use the same envelope.

---

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