Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/socialscrape:socialscrape-kick-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: SocialScrape Kick API
version: '1'
description: 'Public social media data as an API: profiles, posts, comments, search, ads and transcripts across platforms, in one response shape.
Authenticate with the `x-api-key` header. Every response is an envelope with `ok`, `credits_charged`, `credits_remaining`, `cached`, `cached_at` and `request_id`; failures are free and carry a stable `error.code` and a `retryable` flag. Send `Idempotency-Key` on a retried POST to get the first answer back without a second charge. Pass `max_age_days` (or ScrapeCreators'' `cache_max_age=7d`) to accept a cached result for free.'
servers:
- url: https://api.socialscrape.dev
security:
- ApiKeyAuth: []
tags:
- name: kick
paths:
/v1/kick/clip/transcript:
get:
operationId: kick.clip.transcript
summary: Kick clip transcript
tags:
- kick
parameters:
- name: url
in: query
required: true
description: Clip URL (kick.com/<user>/clips/clip_...).
schema:
type: string
format: uri
x-hosts:
- kick.com
- name: allow_long_transcription
in: query
required: false
description: Transcribe audio past 2 minutes with AI, at 5 credits per started minute of the whole video. Without it a longer video answers invalid_params naming the cost, which is free.
schema:
type: boolean
default: false
x-aliases:
- allowLongTranscription
- name: ai_fallback
in: query
required: false
description: Transcribe the audio with AI when the clip has no captions. Set false to get no transcript instead, and no AI charge.
schema:
type: boolean
default: true
x-aliases:
- use_ai_as_fallback
- name: trim
in: query
required: false
description: 'Smaller response: drops null fields and `extra`.'
schema:
type: boolean
default: false
- name: raw
in: query
required: false
description: Also return the platform's original object as `raw`.
schema:
type: boolean
default: false
- name: max_age_days
in: query
required: false
description: Serve a cached result fetched within this many days, for 0 credits. ScrapeCreators' `cache_max_age=7d` spelling is accepted too.
schema:
type: number
minimum: 0
maximum: 30
x-aliases:
- cache_max_age
responses:
'200':
description: 'Success. Charge: 1 credit for captions; AI transcription 1 up to 2 minutes, then 5 per started minute of the whole video.'
headers:
x-request-id:
$ref: '#/components/headers/x-request-id'
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessEnvelope_Transcript_'
'202':
description: 'Still running: poll `data.poll_url` (free); the finished job returns the final envelope and charges then, once.'
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessEnvelope_JobAccepted_'
'400':
description: 'Error (always free): `invalid_params`, `unsupported_url`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'401':
description: 'Error (always free): `unauthorized`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'402':
description: 'Error (always free): `insufficient_credits`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'403':
description: 'Error (always free): `forbidden`, `private`, `age_restricted`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'404':
description: 'Error (always free): `not_found`, `transcript_unavailable`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'409':
description: 'Error (always free): `conflict`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'410':
description: 'Error (always free): `removed`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'429':
description: 'Error (always free): `rate_limited`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
headers:
retry-after:
description: Seconds to wait.
schema:
type: integer
'451':
description: 'Error (always free): `unavailable_in_region`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'500':
description: 'Error (always free): `internal`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'501':
description: 'Error (always free): `not_implemented`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'503':
description: 'Error (always free): `upstream_rate_limited`, `upstream_blocked`, `upstream_error`, `upstream_changed`, `upstream_timeout`, `overloaded`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
x-endpoint-id: kick.clip.transcript
x-credits: transcript
x-credit-rule: 1 credit for captions; AI transcription 1 up to 2 minutes, then 5 per started minute of the whole video
x-status: ga
x-pool: open
x-mode: sync
x-timeout-seconds: 120
x-cache:
cacheable: true
ttl_days: 30
description: Kick clips carry no caption track, so this is AI transcription of the clip's audio (flat 1 credit for clips of up to two minutes). With ai_fallback=false nothing is transcribed and nothing is charged.
x-examples:
- url: https://kick.com/xqc/clips/clip_01JGJHB6CEVFCQRYTVPM8DW892
/v1/kick/clip:
get:
operationId: kick.clip
summary: Kick clip
tags:
- kick
parameters:
- name: url
in: query
required: true
description: Clip URL (kick.com/<user>/clips/clip_...).
schema:
type: string
format: uri
x-hosts:
- kick.com
- name: trim
in: query
required: false
description: 'Smaller response: drops null fields and `extra`.'
schema:
type: boolean
default: false
- name: raw
in: query
required: false
description: Also return the platform's original object as `raw`.
schema:
type: boolean
default: false
- name: max_age_days
in: query
required: false
description: Serve a cached result fetched within this many days, for 0 credits. ScrapeCreators' `cache_max_age=7d` spelling is accepted too.
schema:
type: number
minimum: 0
maximum: 30
x-aliases:
- cache_max_age
responses:
'200':
description: 'Success. Charge: 1 credit per successful request (a profile, a post, one page of a list).'
headers:
x-request-id:
$ref: '#/components/headers/x-request-id'
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessEnvelope_Post_'
'202':
description: 'Still running: poll `data.poll_url` (free); the finished job returns the final envelope and charges then, once.'
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessEnvelope_JobAccepted_'
'400':
description: 'Error (always free): `invalid_params`, `unsupported_url`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'401':
description: 'Error (always free): `unauthorized`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'402':
description: 'Error (always free): `insufficient_credits`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'403':
description: 'Error (always free): `forbidden`, `private`, `age_restricted`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'404':
description: 'Error (always free): `not_found`, `transcript_unavailable`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'409':
description: 'Error (always free): `conflict`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'410':
description: 'Error (always free): `removed`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'429':
description: 'Error (always free): `rate_limited`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
headers:
retry-after:
description: Seconds to wait.
schema:
type: integer
'451':
description: 'Error (always free): `unavailable_in_region`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'500':
description: 'Error (always free): `internal`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'501':
description: 'Error (always free): `not_implemented`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'503':
description: 'Error (always free): `upstream_rate_limited`, `upstream_blocked`, `upstream_error`, `upstream_changed`, `upstream_timeout`, `overloaded`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
x-endpoint-id: kick.clip
x-credits: standard
x-credit-rule: 1 credit per successful request (a profile, a post, one page of a list)
x-status: ga
x-pool: open
x-mode: sync
x-timeout-seconds: 30.0
x-cache:
cacheable: true
ttl_days: 30
x-examples:
- url: https://kick.com/xqc/clips/clip_01JGJHB6CEVFCQRYTVPM8DW892
components:
schemas:
Place:
additionalProperties: false
properties:
name:
anyOf:
- type: string
- type: 'null'
default: null
title: Name
address:
anyOf:
- type: string
- type: 'null'
default: null
title: Address
city:
anyOf:
- type: string
- type: 'null'
default: null
title: City
region:
anyOf:
- type: string
- type: 'null'
default: null
title: Region
country:
anyOf:
- type: string
- type: 'null'
default: null
title: Country
latitude:
anyOf:
- type: number
- type: 'null'
default: null
title: Latitude
longitude:
anyOf:
- type: number
- type: 'null'
default: null
title: Longitude
title: Place
type: object
ErrorEnvelope:
properties:
ok:
const: false
default: false
title: Ok
type: boolean
error:
$ref: '#/components/schemas/ErrorBody'
credits_charged:
const: 0
default: 0
title: Credits Charged
type: integer
request_id:
title: Request Id
type: string
required:
- error
- request_id
title: ErrorEnvelope
type: object
SuccessEnvelope_Post_:
properties:
ok:
const: true
default: true
title: Ok
type: boolean
credits_charged:
title: Credits Charged
type: integer
credits_remaining:
anyOf:
- type: integer
- type: 'null'
title: Credits Remaining
cached:
title: Cached
type: boolean
cached_at:
anyOf:
- format: date-time
type: string
- type: 'null'
title: Cached At
request_id:
title: Request Id
type: string
data:
$ref: '#/components/schemas/Post'
cursor:
anyOf:
- type: string
- type: 'null'
default: null
title: Cursor
has_more:
anyOf:
- type: boolean
- type: 'null'
default: null
title: Has More
raw:
default: null
title: Raw
required:
- credits_charged
- credits_remaining
- cached
- cached_at
- request_id
- data
title: SuccessEnvelope[Post]
type: object
Stats:
additionalProperties: false
description: Engagement on a post. Same five names on every platform.
properties:
views:
anyOf:
- type: integer
- type: 'null'
default: null
title: Views
likes:
anyOf:
- type: integer
- type: 'null'
default: null
title: Likes
comments:
anyOf:
- type: integer
- type: 'null'
default: null
title: Comments
shares:
anyOf:
- type: integer
- type: 'null'
default: null
title: Shares
saves:
anyOf:
- type: integer
- type: 'null'
default: null
title: Saves
dislikes:
anyOf:
- type: integer
- type: 'null'
default: null
title: Dislikes
title: Stats
type: object
ErrorCode:
enum:
- invalid_params
- unsupported_url
- unauthorized
- insufficient_credits
- forbidden
- rate_limited
- conflict
- not_found
- private
- age_restricted
- removed
- unavailable_in_region
- transcript_unavailable
- upstream_rate_limited
- upstream_blocked
- upstream_error
- upstream_changed
- upstream_timeout
- overloaded
- not_implemented
- internal
title: ErrorCode
type: string
ErrorBody:
properties:
code:
$ref: '#/components/schemas/ErrorCode'
message:
title: Message
type: string
retryable:
title: Retryable
type: boolean
required:
- code
- message
- retryable
title: ErrorBody
type: object
Media:
additionalProperties: false
properties:
thumbnail_url:
anyOf:
- type: string
- type: 'null'
default: null
title: Thumbnail Url
video_url:
anyOf:
- type: string
- type: 'null'
default: null
title: Video Url
audio_url:
anyOf:
- type: string
- type: 'null'
default: null
title: Audio Url
image_urls:
anyOf:
- items:
type: string
type: array
- type: 'null'
default: null
title: Image Urls
width:
anyOf:
- type: integer
- type: 'null'
default: null
title: Width
height:
anyOf:
- type: integer
- type: 'null'
default: null
title: Height
title: Media
type: object
Post:
additionalProperties: false
description: 'Videos, reels, tweets, pins, clips, stories, Reddit posts: all posts with a `type`.'
properties:
object:
const: post
default: post
title: Object
type: string
platform:
$ref: '#/components/schemas/Platform'
id:
title: Id
type: string
url:
anyOf:
- type: string
- type: 'null'
default: null
title: Url
type:
default: unknown
enum:
- video
- short
- reel
- image
- carousel
- story
- live
- clip
- text
- link
- tweet
- pin
- community_post
- episode
- unknown
title: Type
type: string
author:
anyOf:
- $ref: '#/components/schemas/Author'
- type: 'null'
default: null
title:
anyOf:
- type: string
- type: 'null'
default: null
title: Title
text:
anyOf:
- type: string
- type: 'null'
default: null
title: Text
published_at:
anyOf:
- format: date-time
type: string
- type: 'null'
default: null
title: Published At
duration_seconds:
anyOf:
- type: number
- type: 'null'
default: null
title: Duration Seconds
language:
anyOf:
- type: string
- type: 'null'
default: null
title: Language
hashtags:
anyOf:
- items:
type: string
type: array
- type: 'null'
default: null
title: Hashtags
mentions:
anyOf:
- items:
type: string
type: array
- type: 'null'
default: null
title: Mentions
stats:
$ref: '#/components/schemas/Stats'
media:
$ref: '#/components/schemas/Media'
song:
anyOf:
- $ref: '#/components/schemas/SongRef'
- type: 'null'
default: null
location:
anyOf:
- $ref: '#/components/schemas/Place'
- type: 'null'
default: null
is_pinned:
anyOf:
- type: boolean
- type: 'null'
default: null
title: Is Pinned
is_sponsored:
anyOf:
- type: boolean
- type: 'null'
default: null
title: Is Sponsored
extra:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
default: null
title: Extra
required:
- platform
- id
title: Post
type: object
Transcript:
additionalProperties: false
properties:
object:
const: transcript
default: transcript
title: Object
type: string
platform:
$ref: '#/components/schemas/Platform'
video_id:
anyOf:
- type: string
- type: 'null'
default: null
title: Video Id
url:
anyOf:
- type: string
- type: 'null'
default: null
title: Url
language:
anyOf:
- type: string
- type: 'null'
default: null
title: Language
source:
enum:
- captions
- auto_captions
- ai
title: Source
type: string
duration_seconds:
anyOf:
- type: number
- type: 'null'
default: null
title: Duration Seconds
text:
title: Text
type: string
segments:
anyOf:
- items:
$ref: '#/components/schemas/TranscriptSegment'
type: array
- type: 'null'
default: null
title: Segments
available_languages:
anyOf:
- items:
type: string
type: array
- type: 'null'
default: null
title: Available Languages
extra:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
default: null
title: Extra
required:
- platform
- source
- text
title: Transcript
type: object
SuccessEnvelope_JobAccepted_:
properties:
ok:
const: true
default: true
title: Ok
type: boolean
credits_charged:
title: Credits Charged
type: integer
credits_remaining:
anyOf:
- type: integer
- type: 'null'
title: Credits Remaining
cached:
title: Cached
type: boolean
cached_at:
anyOf:
- format: date-time
type: string
- type: 'null'
title: Cached At
request_id:
title: Request Id
type: string
data:
$ref: '#/components/schemas/JobAccepted'
cursor:
anyOf:
- type: string
- type: 'null'
default: null
title: Cursor
has_more:
anyOf:
- type: boolean
- type: 'null'
default: null
title: Has More
raw:
default: null
title: Raw
required:
- credits_charged
- credits_remaining
- cached
- cached_at
- request_id
- data
title: SuccessEnvelope[JobAccepted]
type: object
Author:
additionalProperties: false
description: Compact reference to a profile, embedded in posts, comments, ads.
properties:
id:
anyOf:
- type: string
- type: 'null'
default: null
title: Id
handle:
anyOf:
- type: string
- type: 'null'
default: null
title: Handle
name:
anyOf:
- type: string
- type: 'null'
default: null
title: Name
url:
anyOf:
- type: string
- type: 'null'
default: null
title: Url
avatar_url:
anyOf:
- type: string
- type: 'null'
default: null
title: Avatar Url
verified:
anyOf:
- type: boolean
- type: 'null'
default: null
title: Verified
title: Author
type: object
Platform:
enum:
- youtube
- tiktok
- instagram
- reddit
- bluesky
- threads
- truthsocial
- pinterest
- twitch
- kick
- snapchat
- linktree
- komi
- pillar
- linkbio
- linkme
- twitter
- facebook
- linkedin
- amazon
- spotify
- apple_music
- soundcloud
- github
- kwai
- rumble
- telegram
- google
- cosmos
- web
title: Platform
type: string
TranscriptSegment:
additionalProperties: false
properties:
start:
title: Start
type: number
end:
anyOf:
- type: number
- type: 'null'
default: null
title: End
text:
title: Text
type: string
required:
- start
- text
title: TranscriptSegment
type: object
SuccessEnvelope_Transcript_:
properties:
ok:
const: true
default: true
title: Ok
type: boolean
credits_charged:
title: Credits Charged
type: integer
credits_remaining:
anyOf:
- type: integer
- type: 'null'
title: Credits Remaining
cached:
title: Cached
type: boolean
cached_at:
anyOf:
- format: date-time
type: string
- type: 'null'
title: Cached At
request_id:
title: Request Id
type: string
data:
$ref: '#/components/schemas/Transcript'
cursor:
anyOf:
- type: string
- type: 'null'
default: null
title: Cursor
has_more:
anyOf:
- type: boolean
- type: 'null'
default: null
title: Has More
raw:
default: null
title: Raw
required:
- credits_charged
- credits_remaining
- cached
- cached_at
- request_id
- data
title: SuccessEnvelope[Transcript]
type: object
JobAccepted:
additionalProperties: false
description: Answer for a job that is still running. Poll `poll_url` (free).
properties:
object:
const: job
default: job
title: Object
type: string
job_id:
title: Job Id
type: string
status:
enum:
- pending
- running
title: Status
type: string
poll_url:
title: Poll Url
type: string
required:
- job_id
- status
- poll_url
title: JobAccepted
type: object
SongRef:
additionalProperties: false
description: The sound used by a post (TikTok, Reels, Shorts).
properties:
id:
anyOf:
- type: string
- type: 'null'
default: null
title: Id
title:
anyOf:
- type: string
- type: 'null'
default: null
title: Title
artist:
anyOf:
- type: string
- type: 'null'
default: null
title: Artist
url:
anyOf:
- type: string
- type: 'null'
default: null
title: Url
title: SongRef
type: object
headers:
x-request-id:
description: The request id, also in the body. Quote it to support.
schema:
type: string
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: x-api-key