Kick hub

Kick Clips API

One route for three clip feeds: the sortable global list, a category's newest clips, and the newest list across Kick.

GET /v1/kick/clips

1 credit Failed requests are free Found, empty and not-found answers are all charged

About this endpoint

GET /v1/kick/clips returns data.mode, data.clips and data.page. Without a category it returns the sortable global list and mode is global; pass sort=view or sort=date and time=all, month, week or day. With category it returns that category's clips newest first and mode is category. A cursor continues the same feed and filters.

A category cannot be combined with sort or time, because the category list only runs newest first; that combination is a 400. When no category is given and no sort or time is set, the newest clips across Kick are returned and mode is latest. Each clip carries the shared clip fields: id, title, views, likes, durationSeconds, createdAt, category, creator, channel, videoId and playbackUrl. Clips already returned on an earlier page are dropped, so a page can be shorter than a full page; keep following data.page.nextCursor while data.page.hasMore is true. The last page with rows can still say data.page.hasMore is true and be followed by an empty page; stop at the first empty page. An empty page has data.page.hasMore false and data.page.nextCursor null.

Kick Clips API FAQ

What are the three clip modes?

data.mode tells you which feed answered. global is the sortable list, category is one category's newest clips, and latest is the newest clips across Kick. The mode is chosen from the query you send.

Can I filter a category by views or time?

No. A category list runs newest first only. Sending category together with sort or time is refused with HTTP 400. Use category on its own, or leave it out to sort the global list.

How do I continue to the next page?

Send data.page.nextCursor as cursor with the same filters. Stop when data.page.hasMore is false. The sortable list's order moves while you walk it, so a clip can still repeat across pages; de-duplicate by data.clips[].id. Clips already returned are dropped, so a page can be shorter than a full page even when hasMore is true; keep following nextCursor rather than stopping at a short page. The last page with rows can still say hasMore is true and be followed by an empty page; stop at the first empty page, which has hasMore false and no nextCursor. An expired or mismatched cursor returns HTTP 400, so start again without one.

How many credits does one clips page cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth. Each paginated page is a separate billed request.