Social Dash Scraper
Documentation v0.1OpenAPI

Live streaming API

Kick

Live private service

Retrieve a public Kick clip with media URLs, counts, timestamps, category, creator, and channel details.

Get the complete public clip object in one authenticated request. Source types, aliases, optional fields, and nested attributes are preserved.

Base URLhttp://localhost:3011

Local development example. Replace with your service origin.

Get a Kick clip

GET/v1/kick/clip

Retrieve one public Kick clip from the public player metadata API for current counters. Media and thumbnail URLs are returned without downloading their contents. No channel discovery, clip listing, or video transcription is performed.

Query parameters

FieldTypeDescription
urlstringRequired HTTPS Kick clip URL. Canonical /<channel>/clips/<clip_id> and legacy /<channel>?clip=<clip_id> forms are supported. Duplicate/conflicting clip IDs are rejected.

Response fields

FieldTypeDescription
requestIdstringOperation identifier for correlation.
accountingobjectUpstream HTTP attempts, decoded response bytes and duration. DNS lookups are transport setup and are not counted as HTTP requests. Error response bodies are discarded.
successbooleanTrue only when the complete supported clip object validates.
statusstringsuccess on complete retrieval; failed or challenged with a failure object otherwise.
clipobjectFull public clip object, including source extensions and nested category, creator, channel and optional VOD metadata. Fields are not renamed or coerced.
sourceUrlstringCanonical Kick clip page URL.
fetchedAtstringUTC retrieval timestamp.
coverageobjectComplete validated public clip metadata. Missing required fields fail the request; no reduced-field success is returned.

Clip fields

FieldTypeDescription
idstringKick clip ID; must match the requested clip.
livestream_idstring | nullSource livestream ID as a string, or null.
category_idstring | nullSource category ID as a string, or null; preserved separately from category.id.
channel_idintegerNumeric owner channel ID, verified against channel.id.
user_idinteger | nullNumeric clip creator ID, verified against creator.id when available. Null is preserved.
titlestringOriginal clip title, including empty strings.
clip_urlstring | nullPublished media URL; may be an HLS playlist or direct media. Returned as data without downloading.
thumbnail_urlstring | nullSource thumbnail URL; never fetched.
privacystringSource public privacy representation, public or CLIP_PRIVACY_PUBLIC. Other privacy values are rejected.
likesinteger | nullSource like count; explicit nulls are preserved.
likedbooleanUpstream logged-out liked flag. No viewer session is supplied.
viewsinteger | nullSource view count at retrieval time. Live counters can change between requests.
durationnumber | nullSource duration in seconds; fractional values and nulls are preserved.
started_atstring | nullSource start timestamp string, with original precision, or null.
created_atstring | nullSource creation timestamp string, with original precision, or null.
vod_starts_atnumber | nullOptional source VOD offset. Omitted when Kick omits it; explicit nulls are preserved.
is_maturebooleanPublished maturity metadata; no age/consent flow is performed.
video_urlstring | nullSource media alias. Preserved independently from clip_url.
view_countinteger | nullSource view-count alias, preserved independently from views.
likes_countinteger | nullSource likes alias, preserved independently from likes.
vodobject | nullOptional VOD object with id and any public source extensions, or null. Not synthesized when absent; no VOD lookup or media fetch.
categoryobject | nullCategory id, name, slug, responsive, banner, parent_category and extensions, or null.
creatorobject | nullClip creator: id, username, slug, profile_picture and extensions, or null.
channelobjectOwner channel: id, username, slug, profile_picture and extensions. The slug is checked against the requested channel.

Nested fields and every response variant are in the OpenAPI specification.

Coverage & limits

  • One clip per request; four concurrent requests per worker. Saturation returns 503 busy.
  • 15-second total deadline, at most two upstream HTTP attempts including one transient network/5xx retry. Rate limits, challenges, redirects, and missing clips are not retried.
  • 2 MiB total decoded JSON, depth 16, and 5,000 examined nodes. Oversized or complex payloads fail explicitly.
  • Missing or malformed required fields and mismatched clip/channel/creator identity fail explicitly. Optional VOD fields retain source absence; known nulls and source extensions are preserved.
  • Private or access/consent-gated clips are rejected. No login, cookies, private tokens, or access-gate completion. A public maturity flag is returned as metadata.
  • No media, playlists, segments, thumbnail, VOD, or outbound destination downloads. No result cache, billing, shared database, or consuming-product dependency.
  • Views and likes are live source values and can change between requests. Comparison scripts check them strictly; counter differences never count as exact parity.
  • System DNS is the default. Operators can set KICK_DNS_SERVERS to one to three DNS server IP addresses for this worker only. HTTPS certificate verification remains enabled; no system DNS change or hardcoded Kick address is used.
  • Live acceptance returned all 23 current fields on two clips. Every field except the two live view-count aliases matched exactly. Strict full-response parity remains unpassed; no field is excluded from the comparator.

Errors & partial results

HTTPCode / statusMeaning
400invalid_requestMissing/unsafe clip URL, ambiguous clip IDs, duplicate URL or unsupported parameters.
401unauthorizedMissing or invalid worker API key.
403restricted_pageThe clip is private or requires access/consent.
404not_foundKick reports a missing or deleted clip.
429upstream_rate_limitedKick rate limited the request; no automatic retry.
502upstream_challengedKick rejected or challenged the request.
502unsupported_pageMalformed, incomplete, unexpected, or mismatched clip metadata.
502response_too_large / payload_too_complexThe JSON exceeded byte, depth or node limits.
502unsafe_redirect / request_limit / upstream_errorThe bounded request could not complete.
503busyAll worker slots are in use.
504timeoutThe total retrieval deadline expired.