Skip to content

Repository files navigation

Python Kick API

A full implementation of the Kick API and EventSub in Python 3.9+.

Heavily inspired on pyTwitchAPI. My mission is to maintain parity with the twitchAPI library for an easier manipulation of both libraries in any project.

Note

The library was intended to be called kickAPI to have parity with twitchAPI, but the name is already taken. So the library was re-branded to kick_api.

Update:
PyPI didn't like kick_api, a friend of mine recommended me betterKickAPI, and I liked it. So, re-branded to betterKickAPI.

Tip

Also try kickpython that includes its own WebSocket implementation!

Installation

Install using pip:

pip install betterKickAPI

Install using uv:

uv add betterKickAPI

Usage

Basic API calls

Setting up an instance of the Kick API and get your User ID.

frombetterKickAPI.kickimportKickfrombetterKickAPI.helperimportfirstimportasyncioasyncdefkick_example():
# Initialize the kick instance, this will by default also create an app authentication for youkick=awaitKick('APP_ID', 'APP_SECRET')
users=awaitkick.get_users(slug='your_kick_user')
# print the ID of your userprint(user[0].broadcaster_user_id)
# run this exampleasyncio.run(kick_example())

Authentication

The Kick API knows 2 different authentications. App and User Authentication. Which one you need (or if one at all) depends on what calls you want to use.

App Authentication

frombetterKickAPI.kickimportKickkick=awaitKick('APP_ID', 'APP_SECRET')

User Authentication

To get a user auth token, the user has to explicitly click "Allow access" on the Kick website. The library includes an Authenticator. Just remember to add http://localhost:36571 in your redirect URIs in the dev settings tab.

frombetterKickAPI.kickimportKickfrombetterKickAPI.oauthimportUserAuthenticatorfrombetterKickAPI.typeimportOAuthScopekick=awaitKick('APP_ID', 'APP_SECRET')
target_scope= [OAuthScope.CHANNEL_READ]
auth=UserAuthenticator(kick, target_scope, force_verify=False)
# this will open your default browser and prompt you with the kick auth websitetoken, refresh_token=awaitauth.authenticate()
awaitkick.set_user_authentication(token, target_scope, refresh_token)

You can reuse this token and use the refresh_token to renew it:

frombetterKickAPI.oauthimportrefresh_access_tokennew_token, new_refresh_token=awaitrefresh_access_token('refresh_token', 'APP_ID', 'APP_SECRET')

AuthToken refresh callback

Optionally you can set a callback for both user access token refresh and app access token refresh.

frombetterKickAPI.kickimportKickasyncdefapp_refresh(token: str):
print(f'my new ap token is:{token}')
asyncdefuser_refresh(token: str, refresh_token: str):
print(f'my new user token is: {token}')
kick=awaitKick('APP_ID', 'APP_SECRET')
kick.app_auth_refresh_callback=app_refreshkick.user_auth_refresh_callback=user_refresh

EventSub

EventSub lets you listen for events that happen on Kick.

The EventSub client runs in its own process, calling the given callback function whenever an event happens.

Important

At the moment, the Kick API offers Webhook as the only method to use EventSub. But there's already plans on adding WebSockets.

TODO

  • Considering getting rid of socketify because of linux dependencies.
  • Add documentation.
  • Add EventSub WebSockets when available.

Acknowledges

  • pyTwitchAPI: A Python 3.7 compatible implementation of the Twitch API, EventSub and Chat.
  • KickPython: Kick.com Python Public API Wrapper

About

A Python 3.9 compatible implementation of the Kick API and EventSub.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - Benjas333/pyKickAPI: A Python 3.9 compatible implementation of the Kick API and EventSub. · GitHub
Skip to content

Repository files navigation

Python Kick API

A full implementation of the Kick API and EventSub in Python 3.9+.

Heavily inspired on pyTwitchAPI. My mission is to maintain parity with the twitchAPI library for an easier manipulation of both libraries in any project.

Note

The library was intended to be called kickAPI to have parity with twitchAPI, but the name is already taken. So the library was re-branded to kick_api.

Update:
PyPI didn't like kick_api, a friend of mine recommended me betterKickAPI, and I liked it. So, re-branded to betterKickAPI.

Tip

Also try kickpython that includes its own WebSocket implementation!

Installation

Install using pip:

pip install betterKickAPI

Install using uv:

uv add betterKickAPI

Usage

Basic API calls

Setting up an instance of the Kick API and get your User ID.

frombetterKickAPI.kickimportKickfrombetterKickAPI.helperimportfirstimportasyncioasyncdefkick_example():
# Initialize the kick instance, this will by default also create an app authentication for youkick=awaitKick('APP_ID', 'APP_SECRET')
users=awaitkick.get_users(slug='your_kick_user')
# print the ID of your userprint(user[0].broadcaster_user_id)
# run this exampleasyncio.run(kick_example())

Authentication

The Kick API knows 2 different authentications. App and User Authentication. Which one you need (or if one at all) depends on what calls you want to use.

App Authentication

frombetterKickAPI.kickimportKickkick=awaitKick('APP_ID', 'APP_SECRET')

User Authentication

To get a user auth token, the user has to explicitly click "Allow access" on the Kick website. The library includes an Authenticator. Just remember to add http://localhost:36571 in your redirect URIs in the dev settings tab.

frombetterKickAPI.kickimportKickfrombetterKickAPI.oauthimportUserAuthenticatorfrombetterKickAPI.typeimportOAuthScopekick=awaitKick('APP_ID', 'APP_SECRET')
target_scope= [OAuthScope.CHANNEL_READ]
auth=UserAuthenticator(kick, target_scope, force_verify=False)
# this will open your default browser and prompt you with the kick auth websitetoken, refresh_token=awaitauth.authenticate()
awaitkick.set_user_authentication(token, target_scope, refresh_token)

You can reuse this token and use the refresh_token to renew it:

frombetterKickAPI.oauthimportrefresh_access_tokennew_token, new_refresh_token=awaitrefresh_access_token('refresh_token', 'APP_ID', 'APP_SECRET')

AuthToken refresh callback

Optionally you can set a callback for both user access token refresh and app access token refresh.

frombetterKickAPI.kickimportKickasyncdefapp_refresh(token: str):
print(f'my new ap token is:{token}')
asyncdefuser_refresh(token: str, refresh_token: str):
print(f'my new user token is: {token}')
kick=awaitKick('APP_ID', 'APP_SECRET')
kick.app_auth_refresh_callback=app_refreshkick.user_auth_refresh_callback=user_refresh

EventSub

EventSub lets you listen for events that happen on Kick.

The EventSub client runs in its own process, calling the given callback function whenever an event happens.

Important

At the moment, the Kick API offers Webhook as the only method to use EventSub. But there's already plans on adding WebSockets.

TODO

  • Considering getting rid of socketify because of linux dependencies.
  • Add documentation.
  • Add EventSub WebSockets when available.

Acknowledges

  • pyTwitchAPI: A Python 3.7 compatible implementation of the Twitch API, EventSub and Chat.
  • KickPython: Kick.com Python Public API Wrapper

About

A Python 3.9 compatible implementation of the Kick API and EventSub.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Benjas333/pyKickAPI: A Python 3.9 compatible implementation of the Kick API and EventSub. · GitHub
Skip to content

Repository files navigation

Python Kick API

A full implementation of the Kick API and EventSub in Python 3.9+.

Heavily inspired on pyTwitchAPI. My mission is to maintain parity with the twitchAPI library for an easier manipulation of both libraries in any project.

Note

The library was intended to be called kickAPI to have parity with twitchAPI, but the name is already taken. So the library was re-branded to kick_api.

Update:
PyPI didn't like kick_api, a friend of mine recommended me betterKickAPI, and I liked it. So, re-branded to betterKickAPI.

Tip

Also try kickpython that includes its own WebSocket implementation!

Installation

Install using pip:

pip install betterKickAPI

Install using uv:

uv add betterKickAPI

Usage

Basic API calls

Setting up an instance of the Kick API and get your User ID.

frombetterKickAPI.kickimportKickfrombetterKickAPI.helperimportfirstimportasyncioasyncdefkick_example():
# Initialize the kick instance, this will by default also create an app authentication for youkick=awaitKick('APP_ID', 'APP_SECRET')
users=awaitkick.get_users(slug='your_kick_user')
# print the ID of your userprint(user[0].broadcaster_user_id)
# run this exampleasyncio.run(kick_example())

Authentication

The Kick API knows 2 different authentications. App and User Authentication. Which one you need (or if one at all) depends on what calls you want to use.

App Authentication

frombetterKickAPI.kickimportKickkick=awaitKick('APP_ID', 'APP_SECRET')

User Authentication

To get a user auth token, the user has to explicitly click "Allow access" on the Kick website. The library includes an Authenticator. Just remember to add http://localhost:36571 in your redirect URIs in the dev settings tab.

frombetterKickAPI.kickimportKickfrombetterKickAPI.oauthimportUserAuthenticatorfrombetterKickAPI.typeimportOAuthScopekick=awaitKick('APP_ID', 'APP_SECRET')
target_scope= [OAuthScope.CHANNEL_READ]
auth=UserAuthenticator(kick, target_scope, force_verify=False)
# this will open your default browser and prompt you with the kick auth websitetoken, refresh_token=awaitauth.authenticate()
awaitkick.set_user_authentication(token, target_scope, refresh_token)

You can reuse this token and use the refresh_token to renew it:

frombetterKickAPI.oauthimportrefresh_access_tokennew_token, new_refresh_token=awaitrefresh_access_token('refresh_token', 'APP_ID', 'APP_SECRET')

AuthToken refresh callback

Optionally you can set a callback for both user access token refresh and app access token refresh.

frombetterKickAPI.kickimportKickasyncdefapp_refresh(token: str):
print(f'my new ap token is:{token}')
asyncdefuser_refresh(token: str, refresh_token: str):
print(f'my new user token is: {token}')
kick=awaitKick('APP_ID', 'APP_SECRET')
kick.app_auth_refresh_callback=app_refreshkick.user_auth_refresh_callback=user_refresh

EventSub

EventSub lets you listen for events that happen on Kick.

The EventSub client runs in its own process, calling the given callback function whenever an event happens.

Important

At the moment, the Kick API offers Webhook as the only method to use EventSub. But there's already plans on adding WebSockets.

TODO

  • Considering getting rid of socketify because of linux dependencies.
  • Add documentation.
  • Add EventSub WebSockets when available.

Acknowledges

  • pyTwitchAPI: A Python 3.7 compatible implementation of the Twitch API, EventSub and Chat.
  • KickPython: Kick.com Python Public API Wrapper

About

A Python 3.9 compatible implementation of the Kick API and EventSub.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Benjas333/pyKickAPI: A Python 3.9 compatible implementation of the Kick API and EventSub. · GitHub
Skip to content

Repository files navigation

Python Kick API

A full implementation of the Kick API and EventSub in Python 3.9+.

Heavily inspired on pyTwitchAPI. My mission is to maintain parity with the twitchAPI library for an easier manipulation of both libraries in any project.

Note

The library was intended to be called kickAPI to have parity with twitchAPI, but the name is already taken. So the library was re-branded to kick_api.

Update:
PyPI didn't like kick_api, a friend of mine recommended me betterKickAPI, and I liked it. So, re-branded to betterKickAPI.

Tip

Also try kickpython that includes its own WebSocket implementation!

Installation

Install using pip:

pip install betterKickAPI

Install using uv:

uv add betterKickAPI

Usage

Basic API calls

Setting up an instance of the Kick API and get your User ID.

frombetterKickAPI.kickimportKickfrombetterKickAPI.helperimportfirstimportasyncioasyncdefkick_example():
# Initialize the kick instance, this will by default also create an app authentication for youkick=awaitKick('APP_ID', 'APP_SECRET')
users=awaitkick.get_users(slug='your_kick_user')
# print the ID of your userprint(user[0].broadcaster_user_id)
# run this exampleasyncio.run(kick_example())

Authentication

The Kick API knows 2 different authentications. App and User Authentication. Which one you need (or if one at all) depends on what calls you want to use.

App Authentication

frombetterKickAPI.kickimportKickkick=awaitKick('APP_ID', 'APP_SECRET')

User Authentication

To get a user auth token, the user has to explicitly click "Allow access" on the Kick website. The library includes an Authenticator. Just remember to add http://localhost:36571 in your redirect URIs in the dev settings tab.

frombetterKickAPI.kickimportKickfrombetterKickAPI.oauthimportUserAuthenticatorfrombetterKickAPI.typeimportOAuthScopekick=awaitKick('APP_ID', 'APP_SECRET')
target_scope= [OAuthScope.CHANNEL_READ]
auth=UserAuthenticator(kick, target_scope, force_verify=False)
# this will open your default browser and prompt you with the kick auth websitetoken, refresh_token=awaitauth.authenticate()
awaitkick.set_user_authentication(token, target_scope, refresh_token)

You can reuse this token and use the refresh_token to renew it:

frombetterKickAPI.oauthimportrefresh_access_tokennew_token, new_refresh_token=awaitrefresh_access_token('refresh_token', 'APP_ID', 'APP_SECRET')

AuthToken refresh callback

Optionally you can set a callback for both user access token refresh and app access token refresh.

frombetterKickAPI.kickimportKickasyncdefapp_refresh(token: str):
print(f'my new ap token is:{token}')
asyncdefuser_refresh(token: str, refresh_token: str):
print(f'my new user token is: {token}')
kick=awaitKick('APP_ID', 'APP_SECRET')
kick.app_auth_refresh_callback=app_refreshkick.user_auth_refresh_callback=user_refresh

EventSub

EventSub lets you listen for events that happen on Kick.

The EventSub client runs in its own process, calling the given callback function whenever an event happens.

Important

At the moment, the Kick API offers Webhook as the only method to use EventSub. But there's already plans on adding WebSockets.

TODO

  • Considering getting rid of socketify because of linux dependencies.
  • Add documentation.
  • Add EventSub WebSockets when available.

Acknowledges

  • pyTwitchAPI: A Python 3.7 compatible implementation of the Twitch API, EventSub and Chat.
  • KickPython: Kick.com Python Public API Wrapper

About

A Python 3.9 compatible implementation of the Kick API and EventSub.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - Benjas333/pyKickAPI: A Python 3.9 compatible implementation of the Kick API and EventSub. · GitHub
Skip to content

Repository files navigation

Python Kick API

A full implementation of the Kick API and EventSub in Python 3.9+.

Heavily inspired on pyTwitchAPI. My mission is to maintain parity with the twitchAPI library for an easier manipulation of both libraries in any project.

Note

The library was intended to be called kickAPI to have parity with twitchAPI, but the name is already taken. So the library was re-branded to kick_api.

Update:
PyPI didn't like kick_api, a friend of mine recommended me betterKickAPI, and I liked it. So, re-branded to betterKickAPI.

Tip

Also try kickpython that includes its own WebSocket implementation!

Installation

Install using pip:

pip install betterKickAPI

Install using uv:

uv add betterKickAPI

Usage

Basic API calls

Setting up an instance of the Kick API and get your User ID.

frombetterKickAPI.kickimportKickfrombetterKickAPI.helperimportfirstimportasyncioasyncdefkick_example():
# Initialize the kick instance, this will by default also create an app authentication for youkick=awaitKick('APP_ID', 'APP_SECRET')
users=awaitkick.get_users(slug='your_kick_user')
# print the ID of your userprint(user[0].broadcaster_user_id)
# run this exampleasyncio.run(kick_example())

Authentication

The Kick API knows 2 different authentications. App and User Authentication. Which one you need (or if one at all) depends on what calls you want to use.

App Authentication

frombetterKickAPI.kickimportKickkick=awaitKick('APP_ID', 'APP_SECRET')

User Authentication

To get a user auth token, the user has to explicitly click "Allow access" on the Kick website. The library includes an Authenticator. Just remember to add http://localhost:36571 in your redirect URIs in the dev settings tab.

frombetterKickAPI.kickimportKickfrombetterKickAPI.oauthimportUserAuthenticatorfrombetterKickAPI.typeimportOAuthScopekick=awaitKick('APP_ID', 'APP_SECRET')
target_scope= [OAuthScope.CHANNEL_READ]
auth=UserAuthenticator(kick, target_scope, force_verify=False)
# this will open your default browser and prompt you with the kick auth websitetoken, refresh_token=awaitauth.authenticate()
awaitkick.set_user_authentication(token, target_scope, refresh_token)

You can reuse this token and use the refresh_token to renew it:

frombetterKickAPI.oauthimportrefresh_access_tokennew_token, new_refresh_token=awaitrefresh_access_token('refresh_token', 'APP_ID', 'APP_SECRET')

AuthToken refresh callback

Optionally you can set a callback for both user access token refresh and app access token refresh.

frombetterKickAPI.kickimportKickasyncdefapp_refresh(token: str):
print(f'my new ap token is:{token}')
asyncdefuser_refresh(token: str, refresh_token: str):
print(f'my new user token is: {token}')
kick=awaitKick('APP_ID', 'APP_SECRET')
kick.app_auth_refresh_callback=app_refreshkick.user_auth_refresh_callback=user_refresh

EventSub

EventSub lets you listen for events that happen on Kick.

The EventSub client runs in its own process, calling the given callback function whenever an event happens.

Important

At the moment, the Kick API offers Webhook as the only method to use EventSub. But there's already plans on adding WebSockets.

TODO

  • Considering getting rid of socketify because of linux dependencies.
  • Add documentation.
  • Add EventSub WebSockets when available.

Acknowledges

  • pyTwitchAPI: A Python 3.7 compatible implementation of the Twitch API, EventSub and Chat.
  • KickPython: Kick.com Python Public API Wrapper

About

A Python 3.9 compatible implementation of the Kick API and EventSub.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Benjas333/pyKickAPI: A Python 3.9 compatible implementation of the Kick API and EventSub. · GitHub
Skip to content

Repository files navigation

Python Kick API

A full implementation of the Kick API and EventSub in Python 3.9+.

Heavily inspired on pyTwitchAPI. My mission is to maintain parity with the twitchAPI library for an easier manipulation of both libraries in any project.

Note

The library was intended to be called kickAPI to have parity with twitchAPI, but the name is already taken. So the library was re-branded to kick_api.

Update:
PyPI didn't like kick_api, a friend of mine recommended me betterKickAPI, and I liked it. So, re-branded to betterKickAPI.

Tip

Also try kickpython that includes its own WebSocket implementation!

Installation

Install using pip:

pip install betterKickAPI

Install using uv:

uv add betterKickAPI

Usage

Basic API calls

Setting up an instance of the Kick API and get your User ID.

frombetterKickAPI.kickimportKickfrombetterKickAPI.helperimportfirstimportasyncioasyncdefkick_example():
# Initialize the kick instance, this will by default also create an app authentication for youkick=awaitKick('APP_ID', 'APP_SECRET')
users=awaitkick.get_users(slug='your_kick_user')
# print the ID of your userprint(user[0].broadcaster_user_id)
# run this exampleasyncio.run(kick_example())

Authentication

The Kick API knows 2 different authentications. App and User Authentication. Which one you need (or if one at all) depends on what calls you want to use.

App Authentication

frombetterKickAPI.kickimportKickkick=awaitKick('APP_ID', 'APP_SECRET')

User Authentication

To get a user auth token, the user has to explicitly click "Allow access" on the Kick website. The library includes an Authenticator. Just remember to add http://localhost:36571 in your redirect URIs in the dev settings tab.

frombetterKickAPI.kickimportKickfrombetterKickAPI.oauthimportUserAuthenticatorfrombetterKickAPI.typeimportOAuthScopekick=awaitKick('APP_ID', 'APP_SECRET')
target_scope= [OAuthScope.CHANNEL_READ]
auth=UserAuthenticator(kick, target_scope, force_verify=False)
# this will open your default browser and prompt you with the kick auth websitetoken, refresh_token=awaitauth.authenticate()
awaitkick.set_user_authentication(token, target_scope, refresh_token)

You can reuse this token and use the refresh_token to renew it:

frombetterKickAPI.oauthimportrefresh_access_tokennew_token, new_refresh_token=awaitrefresh_access_token('refresh_token', 'APP_ID', 'APP_SECRET')

AuthToken refresh callback

Optionally you can set a callback for both user access token refresh and app access token refresh.

frombetterKickAPI.kickimportKickasyncdefapp_refresh(token: str):
print(f'my new ap token is:{token}')
asyncdefuser_refresh(token: str, refresh_token: str):
print(f'my new user token is: {token}')
kick=awaitKick('APP_ID', 'APP_SECRET')
kick.app_auth_refresh_callback=app_refreshkick.user_auth_refresh_callback=user_refresh

EventSub

EventSub lets you listen for events that happen on Kick.

The EventSub client runs in its own process, calling the given callback function whenever an event happens.

Important

At the moment, the Kick API offers Webhook as the only method to use EventSub. But there's already plans on adding WebSockets.

TODO

  • Considering getting rid of socketify because of linux dependencies.
  • Add documentation.
  • Add EventSub WebSockets when available.

Acknowledges

  • pyTwitchAPI: A Python 3.7 compatible implementation of the Twitch API, EventSub and Chat.
  • KickPython: Kick.com Python Public API Wrapper

About

A Python 3.9 compatible implementation of the Kick API and EventSub.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - Benjas333/pyKickAPI: A Python 3.9 compatible implementation of the Kick API and EventSub. · GitHub
Skip to content

Repository files navigation

Python Kick API

A full implementation of the Kick API and EventSub in Python 3.9+.

Heavily inspired on pyTwitchAPI. My mission is to maintain parity with the twitchAPI library for an easier manipulation of both libraries in any project.

Note

The library was intended to be called kickAPI to have parity with twitchAPI, but the name is already taken. So the library was re-branded to kick_api.

Update:
PyPI didn't like kick_api, a friend of mine recommended me betterKickAPI, and I liked it. So, re-branded to betterKickAPI.

Tip

Also try kickpython that includes its own WebSocket implementation!

Installation

Install using pip:

pip install betterKickAPI

Install using uv:

uv add betterKickAPI

Usage

Basic API calls

Setting up an instance of the Kick API and get your User ID.

frombetterKickAPI.kickimportKickfrombetterKickAPI.helperimportfirstimportasyncioasyncdefkick_example():
# Initialize the kick instance, this will by default also create an app authentication for youkick=awaitKick('APP_ID', 'APP_SECRET')
users=awaitkick.get_users(slug='your_kick_user')
# print the ID of your userprint(user[0].broadcaster_user_id)
# run this exampleasyncio.run(kick_example())

Authentication

The Kick API knows 2 different authentications. App and User Authentication. Which one you need (or if one at all) depends on what calls you want to use.

App Authentication

frombetterKickAPI.kickimportKickkick=awaitKick('APP_ID', 'APP_SECRET')

User Authentication

To get a user auth token, the user has to explicitly click "Allow access" on the Kick website. The library includes an Authenticator. Just remember to add http://localhost:36571 in your redirect URIs in the dev settings tab.

frombetterKickAPI.kickimportKickfrombetterKickAPI.oauthimportUserAuthenticatorfrombetterKickAPI.typeimportOAuthScopekick=awaitKick('APP_ID', 'APP_SECRET')
target_scope= [OAuthScope.CHANNEL_READ]
auth=UserAuthenticator(kick, target_scope, force_verify=False)
# this will open your default browser and prompt you with the kick auth websitetoken, refresh_token=awaitauth.authenticate()
awaitkick.set_user_authentication(token, target_scope, refresh_token)

You can reuse this token and use the refresh_token to renew it:

frombetterKickAPI.oauthimportrefresh_access_tokennew_token, new_refresh_token=awaitrefresh_access_token('refresh_token', 'APP_ID', 'APP_SECRET')

AuthToken refresh callback

Optionally you can set a callback for both user access token refresh and app access token refresh.

frombetterKickAPI.kickimportKickasyncdefapp_refresh(token: str):
print(f'my new ap token is:{token}')
asyncdefuser_refresh(token: str, refresh_token: str):
print(f'my new user token is: {token}')
kick=awaitKick('APP_ID', 'APP_SECRET')
kick.app_auth_refresh_callback=app_refreshkick.user_auth_refresh_callback=user_refresh

EventSub

EventSub lets you listen for events that happen on Kick.

The EventSub client runs in its own process, calling the given callback function whenever an event happens.

Important

At the moment, the Kick API offers Webhook as the only method to use EventSub. But there's already plans on adding WebSockets.

TODO

  • Considering getting rid of socketify because of linux dependencies.
  • Add documentation.
  • Add EventSub WebSockets when available.

Acknowledges

  • pyTwitchAPI: A Python 3.7 compatible implementation of the Twitch API, EventSub and Chat.
  • KickPython: Kick.com Python Public API Wrapper

About

A Python 3.9 compatible implementation of the Kick API and EventSub.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages