Kick APIkick.com ↗
Fetch live streams from any Kick.com category and check channel live status. Returns viewer counts, tags, thumbnails, and stream metadata.
What is the Kick API?
The Kick.com API provides 2 endpoints for querying live streaming activity on Kick.com. The get_category_livestreams endpoint returns all currently active streams in a given category — including viewer counts, tags, language, and channel metadata — while get_channel_live_status lets you check whether a specific channel is live and retrieve its current stream title, thumbnail, and viewer count.
curl -X GET 'https://api.parse.bot/scraper/f59a3031-957d-4dfa-b4a6-14e94c1b2950/get_category_livestreams?sort=viewer_count_desc&limit=5&category=just-chatting&category_id=15' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace kick-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Kick.com SDK — check channel live status and browse category streams."""
from parse_apis.Kick_com_Category_Livestreams_API import Kick, Sort, ChannelNotFound
client = Kick()
# Browse top livestreams in Just Chatting, capped at 3
for stream in client.category("just-chatting").get_livestreams(sort=Sort.VIEWER_COUNT_DESC, limit=3):
print(stream.channel_username, stream.viewer_count, stream.is_live)
# Check a specific channel's live status
channel = client.channels.get(channel_slug="pokekamen")
print(channel.channel_slug, channel.is_live, channel.viewer_count)
# Use constructible channel to refresh live status
ch = client.channel("davooxeneize")
status = ch.get_live_status()
print(status.is_live, status.title, status.category_name)
# Handle unknown channel
try:
unknown = client.channels.get(channel_slug="nonexistent_channel_xyz")
print(unknown.is_live)
except ChannelNotFound as exc:
print(f"Channel not found: {exc.channel_slug}")
print("exercised: category.get_livestreams, channels.get, channel.get_live_status")
Get all currently live streams in a Kick.com category. Automatically paginates through results via cursor. Returns livestream details including channel info, viewer counts, tags, and language. When limit is 0, returns all available livestreams (may be hundreds). The sort parameter controls ordering of the paginated results server-side.
| Param | Type | Description |
|---|---|---|
| sort | string | Sort order for results. |
| limit | integer | Maximum number of livestreams to return. 0 returns all available. |
| category | string | Category slug (e.g. 'just-chatting'). |
| category_id | string | Category ID number. If not provided, known slugs are auto-resolved (just-chatting=15). Required for categories not in the known mapping. |
{
"type": "object",
"fields": {
"category": "string - the category slug queried",
"livestreams": "array of livestream objects with channel info, viewer counts, tags, and metadata",
"total_count": "integer - number of livestreams returned"
},
"sample": {
"data": {
"category": "just-chatting",
"livestreams": [
{
"tags": [],
"title": "STREAMING LIVE",
"language": "es",
"is_mature": false,
"channel_id": 30204909,
"start_time": "2026-06-10T23:30:08Z",
"category_id": 15,
"channel_slug": "davooxeneize",
"viewer_count": 22931,
"category_name": "Just Chatting",
"category_slug": "just-chatting",
"livestream_id": "019eb3df-2c00-7a44-b24d-7f6a95ea051d",
"thumbnail_url": "https://images.kick.com/video_thumbnails/ifA24rnC7Blc/uz6TacTGMYjA/720.webp",
"channel_username": "davooxeneize",
"channel_profile_pic": "https://files.kick.com/images/user/31252219/profile_image/conversion/a1d2e02b-thumb.webp"
}
],
"total_count": 5
},
"status": "success"
}
}About the Kick API
Category Livestreams
The get_category_livestreams endpoint accepts a category slug (e.g. just-chatting) or a numeric category_id. If you supply a recognized slug without an ID, the API auto-resolves it — for example, just-chatting maps to category ID 15. You can control output ordering with the sort parameter and cap results with limit. Setting limit to 0 instructs the API to paginate through all available results automatically, which can return hundreds of streams for popular categories. Each item in the livestreams array includes channel information, current viewer count, content tags, language, and other stream-level metadata. The response also surfaces a total_count integer so you know exactly how many streams were returned.
Channel Live Status
The get_channel_live_status endpoint takes a single required input — channel_slug — and returns a focused status object. When the channel is live, the response populates title, viewer_count, start_time, thumbnail_url, category_name, and category_slug. When the channel is offline, those fields come back as null. The is_live boolean is always present, as is channel_profile_pic, making it straightforward to build a monitor or display card without conditional checks on multiple fields.
Coverage and Data Freshness
Both endpoints reflect the current live state of Kick.com at the time of the request. Category coverage depends on passing a valid slug or ID; unrecognized slugs that lack a hardcoded ID mapping require you to supply the category_id directly. The category livestreams endpoint is paginated internally — when limit is set to 0, all pages are fetched and merged before the response is returned, so response time scales with the number of live streams in that category.
The Kick API is a managed, monitored endpoint for kick.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when kick.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official kick.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a Kick.com category directory showing live stream counts and viewer totals per category
- Alert users when a specific channel goes live by polling
get_channel_live_statusforis_live - Rank active Kick streamers by
viewer_countwithin a category for a leaderboard widget - Filter streams by language tag to surface region-specific content to international users
- Aggregate
total_countacross multiple categories to track platform-wide activity over time - Display a streamer's profile picture and current stream thumbnail on an external dashboard using
channel_profile_picandthumbnail_url - Monitor category stream volume changes across time intervals for market research on live streaming trends
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Kick.com have an official public developer API?+
What does `get_channel_live_status` return when a channel is offline?+
is_live is false and the fields title, viewer_count, start_time, thumbnail_url, category_name, and category_slug are all returned as null. The channel_profile_pic field is still populated regardless of live status, and the response always includes the last-known category slug.Can I retrieve streams for a category that isn't 'just-chatting'?+
category parameter, or supply the numeric category_id directly. The API auto-resolves a small set of known slugs (e.g. just-chatting → ID 15). For categories not in that set, providing category_id explicitly ensures correct resolution.Does the API return historical stream data or VODs?+
Does setting `limit` to `0` have any performance trade-offs?+
limit set to 0, the API fetches all paginated results before returning a single response. For high-traffic categories this can mean hundreds of stream records and a noticeably longer response time compared to a capped limit. For latency-sensitive applications, use a numeric limit and handle pagination on your side if needed.