Kick, without the I/O.
kicksdk knows Kick: which requests to make and what the answers look like, how the realtime chat feed speaks, how webhooks are signed. Your code sends the requests and holds the sockets; kicksdk does the rest, from one Rust core, in five languages.
Install
Rust
The crate itself. Build requests, parse answers, drive a Session.
cargo add kicksdk
JavaScript / TypeScript
WebAssembly, with connectChat for fetch + WebSocket. Types included.
npm install kicksdk-js
Python
PyO3, abi3 wheels; kicksdk.aio.connect_chat over asyncio.
pip install "kicksdk-py[aio]"
Dart / Flutter
dart:ffi; the build hook fetches the native library. connectChat over dart:io.
dart pub add kicksdk
Elixir
A precompiled NIF. Values come back as string-keyed maps.
{:kicksdk, "~> 0.2"}
Two things to know first
The chat feed only accepts kick.com. Kick's realtime server refuses a WebSocket
whose Origin is not https://kick.com. Servers set it (every connectChat
does); a browser cannot, so in a browser the feed works only on kick.com, in a page or an extension's content
script. Anywhere else, relay it through a server.
Much of Kick is unofficial. The website API and the realtime feed are what kick.com's own frontend uses, not a published API, and can change without notice. The official API and webhooks are the stable part. Everything known about each, with where it was seen, is in the Kick reference.
Every function, in every language
Each core function and its name in each package, read from the sources when this site was built. Requests
come back as {method, url, headers, body} for your HTTP client; parsers take the status and body.
The realtime Session (open, receive, tick, refresh,
closed) and connectChat are in each language's reference.
Rust kicksdk:: | JavaScript | Python kicksdk. | Dart | Elixir Kicksdk. |
|---|---|---|---|---|
events::parse | parseEvent | events.parse | Events.parse | Events.parse |
content::parse | parseContent | content.parse | Content.parse | Events.parse_content |
content::emote_url | emoteUrl | content.emote_url | Content.emoteUrl | Events.emote_url |
realtime::chat_channels | chatChannels | realtime.chat_channels | Realtime.chatChannels | Realtime.chat_channels |
realtime::chat_connection_request | chatConnectionRequest | realtime.chat_connection_request | Realtime.chatConnectionRequest | Realtime.chat_connection_request |
realtime::connection_request | connectionRequest | realtime.connection_request | Realtime.connectionRequest | Realtime.connection_request |
realtime::parse_connection | parseConnection | realtime.parse_connection | Realtime.parseConnection | Realtime.parse_connection |
realtime::token_request | tokenRequest | realtime.token_request | Realtime.tokenRequest | Realtime.token_request |
realtime::parse_token | parseToken | realtime.parse_token | Realtime.parseToken | Realtime.parse_token |
realtime::retry_after_ms | retryAfterMs | realtime.retry_after_ms | Realtime.retryAfterMs | Realtime.retry_after_ms |
public_api::token_request | appTokenRequest | public_api.token_request | PublicApi.tokenRequest | PublicApi.app_token_request |
public_api::parse_token | parseAppToken | public_api.parse_token | PublicApi.parseToken | PublicApi.parse_app_token |
public_api::livestreams_requests | livestreamsRequests | public_api.livestreams_requests | PublicApi.livestreamsRequests | PublicApi.livestreams_requests |
public_api::top_livestreams_request | topLivestreamsRequest | public_api.top_livestreams_request | PublicApi.topLivestreamsRequest | PublicApi.top_livestreams_request |
public_api::parse_livestreams | parseLivestreams | public_api.parse_livestreams | PublicApi.parseLivestreams | PublicApi.parse_livestreams |
public_api::channels_by_ids_request | channelsByIdsRequest | public_api.channels_by_ids_request | PublicApi.channelsByIdsRequest | PublicApi.channels_by_ids_request |
public_api::channels_by_slugs_request | channelsBySlugsRequest | public_api.channels_by_slugs_request | PublicApi.channelsBySlugsRequest | PublicApi.channels_by_slugs_request |
public_api::parse_channels | parseChannels | public_api.parse_channels | PublicApi.parseChannels | PublicApi.parse_channels |
public_api::public_key_request | publicKeyRequest | public_api.public_key_request | PublicApi.publicKeyRequest | PublicApi.public_key_request |
public_api::parse_public_key | parsePublicKey | public_api.parse_public_key | PublicApi.parsePublicKey | PublicApi.parse_public_key |
public_api::subscribe_request | subscribeRequest | public_api.subscribe_request | PublicApi.subscribeRequest | PublicApi.subscribe_request |
public_api::subscriptions_request | subscriptionsRequest | public_api.subscriptions_request | PublicApi.subscriptionsRequest | PublicApi.subscriptions_request |
public_api::parse_subscriptions | parseSubscriptions | public_api.parse_subscriptions | PublicApi.parseSubscriptions | PublicApi.parse_subscriptions |
public_api::unsubscribe_requests | unsubscribeRequests | public_api.unsubscribe_requests | PublicApi.unsubscribeRequests | PublicApi.unsubscribe_requests |
website::channel_request | channelRequest | website.channel_request | Website.channelRequest | Website.channel_request |
website::parse_channel | parseChannel | website.parse_channel | Website.parseChannel | Website.parse_channel |
website::history_request | historyRequest | website.history_request | Website.historyRequest | Website.history_request |
website::parse_history | parseHistory | website.parse_history | Website.parseHistory | Website.parse_history |
website::channel_user_request | channelUserRequest | website.channel_user_request | Website.channelUserRequest | Website.channel_user_request |
website::parse_channel_user | parseChannelUser | website.parse_channel_user | Website.parseChannelUser | Website.parse_channel_user |
website::me_request | meRequest | website.me_request | Website.meRequest | Website.me_request |
website::parse_me | parseMe | website.parse_me | Website.parseMe | Website.parse_me |
website::ban_request | banRequest | website.ban_request | Website.banRequest | Website.ban_request |
website::timeout_request | timeoutRequest | website.timeout_request | Website.timeoutRequest | Website.timeout_request |
website::unban_request | unbanRequest | website.unban_request | Website.unbanRequest | Website.unban_request |
website::delete_message_request | deleteMessageRequest | website.delete_message_request | Website.deleteMessageRequest | Website.delete_message_request |
website::pin_request | pinRequest | website.pin_request | Website.pinRequest | Website.pin_request |
website::unpin_request | unpinRequest | website.unpin_request | Website.unpinRequest | Website.unpin_request |
website::send_request | sendRequest | website.send_request | Website.sendRequest | Website.send_request |
website::parse_action | parseAction | website.parse_action | Website.parseAction | Website.parse_action |
webhooks::verify | verifyWebhook | webhooks.verify | Webhooks.verify | Webhooks.public_key |
webhooks::parse | parseWebhook | webhooks.parse | Webhooks.parse | Webhooks.parse |