Kick Clip API
Get a Kick clip — source + stages/ms, 7d clip cache, Evomi→Webshare→Decodo→Apify. Flat 1 credit.
GET request to /v1/kick/clip that responds with clean JSON and costs 1 credit. Pass cache=true for a free 24h cache hit; default is always fresh. Start with 100 free credits — no credit card.What is the Kick Clip API?
Two modes. Clip URL → {channelUrl, clip, source, stages, ms} with creator (who cut the clip) separate from channel (broadcaster), privacy, isMature, startedAt, livestreamId, vod{id,url,urlWithOffset}, vodStartsAt, and categorySlug/parentCategory. source is native | extended | cache; stages/ms name evomi / webshare / decodo / apify so a fallback is visible. Playback is HLS: videoType is "hls" and videoUrl is the .m3u8 playlist (not a progressive MP4 — download that URL and you get a text manifest). Clip mode caches by default (7d) — twenty of twenty-four fields never change; set cache=false to refetch views/likes. Channel input accepts kick.com/{name}, kick.com/@{name}, @{name}, or bare {name} → {channelUrl, totalReturned, clips[]} only — no top-level clip and no cursor (Kick's channel clips list is a single page; use limit, default 30, max 100). Channel listings stay fresh unless cache=true. Cascade is Evomi residential → Webshare datacenter → Decodo (12s) → Apify last. Kick uses its own HTTP clients and a per-platform circuit breaker so retries do not share Instagram's proxy pool. An empty clips[] is 200 at 0 credits, not 404. A VOD URL is 400 WRONG_RESOURCE_TYPE (Kick coverage is clips only). Session-only liked is omitted. Flat 1 credit on a 200 with rows.
Try it
Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).
Parameters
curl "https://api.captapi.com/v1/kick/clip?url=https%3A%2F%2Fkick.com%2Fxqc%2Fclips%2Fclip_01KZ0X5PGT228PY3QEB3RMR3YC" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."Edit the parameters and the code updates instantly. Switch languages and hit copy.
Example response
{
"success": true,
"data": {
"channelUrl": "https://kick.com/xqc",
"clip": {
"platform": "kick",
"id": "clip_01KZ0X5PGT228PY3QEB3RMR3YC",
"url": "https://kick.com/xqc/clips/clip_01KZ0X5PGT228PY3QEB3RMR3YC",
"title": "Vegas farming sadges",
"createdAt": "2026-08-02T09:36:01.061092Z",
"startedAt": "2026-08-02T05:45:57Z",
"durationSeconds": 38,
"views": 18,
"likes": 0,
"thumbnailUrl": "https://clips.kick.com/clips/fb/clip_01KZ0X5PGT228PY3QEB3RMR3YC/thumbnail.webp",
"videoUrl": "https://clips.kick.com/clips/fb/clip_01KZ0X5PGT228PY3QEB3RMR3YC/playlist.m3u8",
"privacy": "public",
"isMature": false,
"livestreamId": "120226226",
"vodStartsAt": 29450,
"vod": {
"id": "8faf0a05-dcdf-4ab1-8538-e87c6eef573e"
},
"category": "Just Chatting",
"categoryId": "15",
"categorySlug": "just-chatting",
"parentCategory": "irl",
"categoryBanner": "https://files.kick.com/images/subcategories/15/banner/b697a8a3-62db-4779-aa76-e4e47662af97",
"channel": {
"id": "668",
"username": "xqc",
"name": "xQc",
"url": "https://kick.com/xqc",
"profilePicture": "https://files.kick.com/images/user/676/profile_image/conversion/931b4e8f-5445-427c-bd82-b473530390cc-thumb.webp"
},
"creator": {
"id": "7458058",
"username": "ghosteld",
"name": "Ghosteld",
"url": "https://kick.com/ghosteld",
"profilePicture": "https://files.kick.com/images/user/7458058/profile_image/conversion/d0bd5606-ab8a-42f7-b535-6f7c4a672c34-thumb.webp"
}
}
}
}Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Source. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.
Response structure
A successful call returns success and a data object with the following fields:
Top-level fields
channelUrlCanonical Kick channel URL derived from the request.totalReturnedChannel mode only — number of clips in this response. No nextCursor — Kick's channel clips list is a single page (use limit).
Clip
The clip object contains:
platformPlatform identifier for this response (matches the endpoint's platform).idId of this clip item.urlKick clip web page (https://kick.com/{channel}/clips/clip_…). Not the HLS playlist.titleTitle of this clip item.createdAtCreation date (ISO 8601).startedAtWhen the stream, clip, or broadcast segment started (ISO 8601).durationSecondsLength in seconds for this item (full media length, or a segment span when the endpoint documents a start/end).viewsView count when the platform exposes one.likesLike count (number).thumbnailUrlThumbnail image URL.videoUrlHLS playlist URL (.m3u8) for this clip — not a progressive MP4 file. Use an HLS player or ffmpeg; do not save as .mp4.privacyClip privacy (e.g. public).isMatureWhether Kick marks the clip as mature content.livestreamIdKick livestream id the clip was taken from.vodStartsAtOffset into the source VOD (seconds) where the clip starts. Paired with vod.urlWithOffset.vodSource VOD — {id, url, urlWithOffset}. url is https://kick.com/{channel}/videos/{id}; urlWithOffset appends ?t={vodStartsAt} seconds.categoryKick category display name (e.g. Just Chatting).categoryIdKick category id.categorySlugKick category slug (e.g. just-chatting).parentCategoryKick parent category (e.g. irl).categoryBannerCategory banner image URL when Kick exposes one.channelKick broadcaster channel for the clip — {id, username, displayName, url, profilePicture}.creatorWho created/cut the Kick clip (distinct from the broadcaster channel) — {id, username, displayName, url, profilePicture}.
Clips
Each item in clips contains:
platformPlatform identifier for this response (matches the endpoint's platform).idId of this clips item.urlKick clip web page (https://kick.com/{channel}/clips/clip_…). Not the HLS playlist.titleTitle of this clips item.createdAtCreation date (ISO 8601).durationSecondsLength in seconds for this item (full media length, or a segment span when the endpoint documents a start/end).viewsView count when the platform exposes one.likesLike count (number).thumbnailUrlThumbnail image URL.videoUrlHLS playlist URL (.m3u8) for this clip — not a progressive MP4 file. Use an HLS player or ffmpeg; do not save as .mp4.videoTypeAlways "hls" for Kick clips today (Kick serves playlist.m3u8).hlsUrlHLS master/media playlist URL (.m3u8). Not a progressive video file — players and ffmpeg ingest this as a stream.privacyClip privacy (e.g. public).isMatureWhether Kick marks the clip as mature content.livestreamIdKick livestream id the clip was taken from.categoryKick category display name (e.g. Just Chatting).categoryIdKick category id.categorySlugKick category slug (e.g. just-chatting).parentCategoryKick parent category (e.g. irl).channelKick broadcaster channel for the clip — {id, username, displayName, url, profilePicture}.creatorWho created/cut the Kick clip (distinct from the broadcaster channel) — {id, username, displayName, url, profilePicture}.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | Kick clip URL for one enriched clip (e.g. https://kick.com/{channel}/clips/clip_…), or channel input for recent clips[]: kick.com/{name}, kick.com/@{name}, @{name}, or {name}. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble. |
| limit | integer | No | Channel mode only — max recent clips to return (default 30, max 100). Ignored when url is a clip. Flat 1 credit. No cursor — Kick returns a single page. |
| cache | boolean | No | Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control. |
| cacheMaxAge | string | No | Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL. |
Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs 1 credit. Pass cache=true for a free 24h cache hit; default is always fresh.
How it works
- 1. Sign up — get 100 free credits, no card required.
- 2. Create a key from your dashboard.
- 3. Send one request to
/v1/kick/clipand parse the JSON response.
Use cases
Clip enrichment
Resolve a Kick clip URL to creator vs channel, views, category, and HLS playlist for players/ffmpeg.
Channel clip feeds
Pass a channel URL to pull recent clips[] (limit up to 100) without a duplicate top-level clip.
VOD deep-links
Open vod.urlWithOffset to jump to the exact second in the source VOD where the clip was cut.
Moderation flags
Read isMature + privacy before surfacing a clip in a public feed.
Frequently asked questions
What does the Kick Clip API do?+
The Kick Clip API lets you fetch full metadata and key stats from a public Kick clip using one GET request to /v1/kick/clip. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the Kick Clip API cost?+
Each successful call costs 1 credit. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.
Do I need a Kick API key or OAuth?+
No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.
How do I tell whether a clip came from native or Apify?+
Read source and stages. source is native | extended | cache. stages.evomiStatus / webshareStatus / decodoStatus / apifyStatus name the miss (ok | challenge | missing | circuit_open | skipped). ms is per path. A cache hit sets source=cache and keeps the original scrape stages.
Why is cache on by default now?+
Only in clip mode. Twenty of twenty-four fields never change; videoUrl has no signed expiry. Default TTL is 7 days. Channel mode is a listing and stays fresh unless you pass cache=true. cache=false forces a refetch (views/likes).
Is the Kick Clip API suitable for production use?+
Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
Ready to use the Kick Clip API?
Sign up, grab your key, and make your first call in 60 seconds.