Kick is a live streaming platform that competes with Twitch. Stream Daemon monitors your Kick channel for live streams using the Kick API with optional OAuth authentication.
Features:
- ✅ OAuth 2.0 client credentials flow
- ✅ Automatic fallback to public API
- ✅ Stream status detection
- ✅ Viewer count tracking
- ✅ Stream title extraction
- ✅ Works without authentication (public API)
API Rate Limits: Higher with OAuth authentication, lower with public API
- Nothing! Just a Kick username
- ✅ Works immediately
⚠️ Lower rate limits⚠️ May be less reliable
- Kick account with 2FA enabled
- Kick Developer Application
- Client ID and Client Secret
No setup required! Just add your username:
# In .env
KICK_ENABLE=True
KICK_USERNAME=your_kick_username
# That's it! No credentials needed.Stream Daemon will use Kick's public API to check stream status.
Limitations:
- Lower rate limits
- Potentially less reliable during high traffic
- No authentication benefits
Important: Kick requires 2FA to access Developer settings
-
Login to Kick:
- Go to https://kick.com
- Log in to your account
-
Enable 2FA:
- Click your profile (top right) → Settings
- Go to Security tab
- Enable Two-Factor Authentication (2FA)
- Follow the setup process (usually via authenticator app)
- Save backup codes securely
-
Go to Developer Settings:
- In Kick, go to Settings → Developer
- Or visit the Developer Portal (if available)
-
Create New Application:
- Click "Create Application" or "New App"
- Application Name: "Stream Daemon" (or your choice)
- Description: Optional - describe your bot
- Scopes/Permissions: Select "Read Access" or "read:channel"
- This allows checking stream status
- No write permissions needed
- Click "Create" or "Submit"
-
Get Credentials:
- After creation, you'll see:
- Client ID - Copy this
- Client Secret - Copy this immediately (may not be shown again)
- Store both securely
- After creation, you'll see:
Note: Kick's Developer Portal may vary in layout. Look for "Developer", "Applications", or "API" in settings.
Option A: Using Environment Variables (.env)
# Enable Kick monitoring
KICK_ENABLE=True
# Your Kick username
KICK_USERNAME=your_kick_username
# Kick OAuth credentials
KICK_CLIENT_ID=your_kick_client_id
KICK_CLIENT_SECRET=your_kick_client_secretOption B: Using Secrets Manager (Recommended for Production)
In your .env file:
# Enable Kick monitoring
KICK_ENABLE=True
# Your Kick username
KICK_USERNAME=your_kick_username
# Configure secrets manager
SECRETS_MANAGER=doppler
SECRETS_DOPPLER_KICK_SECRET_NAME=KICKIn Doppler (or your secrets manager):
# Add Kick credentials to Doppler
doppler secrets set KICK_CLIENT_ID="your_kick_client_id"
doppler secrets set KICK_CLIENT_SECRET="your_kick_client_secret"See Secrets Management Guide for complete setup.
| Variable | Description | Example |
|---|---|---|
KICK_ENABLE |
Enable Kick monitoring | True |
KICK_USERNAME |
Channel to monitor | yourstreamer |
| Variable | Description | Example |
|---|---|---|
KICK_CLIENT_ID |
Application Client ID | abc123xyz789 |
KICK_CLIENT_SECRET |
Application Secret | secretkey123 |
| Variable | Description | Default |
|---|---|---|
SETTINGS_CHECK_INTERVAL |
Check frequency (minutes) | 5 |
SETTINGS_OFFLINE_CHECK_INTERVAL |
Frequency when offline | 5 |
SETTINGS_ONLINE_CHECK_INTERVAL |
Frequency when live | 2 |
Stream Daemon supports two modes for Kick:
When: KICK_CLIENT_ID and KICK_CLIENT_SECRET are set
- Exchanges credentials for OAuth access token
- Uses authenticated API endpoints
- Higher rate limits
- More reliable
When: No credentials set, or OAuth fails
- Uses Kick's public API endpoints
- No authentication needed
- Lower rate limits
- May be less reliable during peak times
Automatic Fallback: If OAuth fails, Stream Daemon automatically tries public API.
Stream Daemon checks your channel every SETTINGS_CHECK_INTERVAL minutes:
-
When Offline:
- Checks every
SETTINGS_OFFLINE_CHECK_INTERVALminutes - Waits for stream to go live
- Checks every
-
When Live:
- Checks every
SETTINGS_ONLINE_CHECK_INTERVALminutes - Monitors viewer count
- Detects when stream ends
- Checks every
-
State Transitions:
- Offline → Live: Posts "Stream Started" announcement
- Live → Offline: Posts "Stream Ended" message (if enabled)
Create custom messages just for Kick using platform-specific message files.
Create these files in your project root:
messages_kick.txt (Stream started messages):
🟢 LIVE on Kick! {stream_title} - https://kick.com/{username}
Kick stream starting: {stream_title} - Watch at https://kick.com/{username}
Now live on Kick with {stream_title}! ⚡ https://kick.com/{username}
Going live on Kick! {stream_title} - https://kick.com/{username}
⚡ Streaming on Kick: {stream_title} - https://kick.com/{username}
end_messages_kick.txt (Stream ended messages):
Stream ended! Thanks for watching on Kick! 🟢
That's a wrap! See you next time! ⚡
Stream offline - Thanks for hanging out! ❤️
Offline now - Don't forget to follow! https://kick.com/{username}
{stream_title}- Current stream title from Kick{username}- Your Kick username{platform}- Will be "Kick"
If messages_kick.txt doesn't exist, Stream Daemon falls back to:
- Global
messages.txtfile - Built-in default messages
See Messages Guide for complete message customization.
When your Kick stream goes live, mention a specific Discord role:
# In .env
DISCORD_ENABLE_POSTING=True
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
# Mention this role when Kick goes live
DISCORD_ROLE_KICK=1234567890123456789- Enable Developer Mode in Discord:
- User Settings → Advanced → Developer Mode (toggle ON)
- Right-click any role → "Copy Role ID"
- Paste into
DISCORD_ROLE_KICK
Example Discord Post:
@KickNotifications
🟢 LIVE on Kick!
yourstreamer is live on Kick!
Epic Gaming Session
https://kick.com/yourstreamer
Test your Kick configuration without going live:
# Run Kick-specific test
python3 tests/test_doppler_kick.py
# Or with Doppler
doppler run -- python3 tests/test_doppler_kick.pyWith OAuth:
🔐 Testing Kick OAuth authentication...
✓ Kick OAuth authenticated successfully
📡 Testing Kick API...
✓ Stream status detected
✅ Kick test completed successfully!
With Public API:
🔐 No Kick credentials - using public API...
📡 Testing Kick public API...
✓ Stream status detected
✅ Kick test completed successfully!
- ✅ OAuth credentials work (if provided)
- ✅ Can access Kick API
- ✅ Channel username is valid
- ✅ Stream detection is functional
- ✅ Public API fallback works
Problem: OAuth credentials invalid
Solutions:
- Verify Client ID is correct
- Check for typos
- Ensure no extra spaces
- Verify Client Secret is correct
- Regenerate if lost
- Check 2FA is enabled on your Kick account
- Developer settings require 2FA
- Verify application wasn't deleted
- Check Kick Settings → Developer
- Try public API mode - comment out credentials:
# KICK_CLIENT_ID=... # KICK_CLIENT_SECRET=...
Problem: Cannot find Kick channel
Solutions:
- Verify username is correct
- Use exact Kick username
- Do not include
@symbol - Example:
xqcnot@xqc
- Check channel exists:
- Visit
https://kick.com/your_username - Verify channel is accessible
- Visit
- Check for username changes
- Kick allows username changes
Problem: Stream Daemon doesn't see your live stream
Solutions:
- Verify stream is actually live:
- Check
https://kick.com/your_username
- Check
- Check
SETTINGS_CHECK_INTERVAL:- Default is 5 minutes
- Reduce if needed for faster detection
- Try with OAuth credentials:
- Public API may have delays
- Check Kick platform status:
- Service might be experiencing issues
Problem: Too many API requests
Solutions:
- Use OAuth authentication:
- Higher rate limits than public API
- Set up Client ID + Secret
- Increase check interval:
SETTINGS_CHECK_INTERVAL=10 # Check every 10 minutes - Check for multiple instances:
- Ensure you're not running duplicates
Problem: Fallback to public API fails
Solutions:
- Set up OAuth credentials:
- Public API may be unreliable
- OAuth is recommended
- Check Kick platform status:
- Public API may be down
- Wait and retry:
- Transient network issues
- Check network connectivity:
- Ensure you can access kick.com
Problem: Can't fetch credentials from Doppler/AWS/Vault
Solutions:
- Verify secrets manager configuration
- Check secret names match:
- Doppler:
KICK_CLIENT_ID,KICK_CLIENT_SECRET
- Doppler:
- Ensure
.envdoesn't have credentials- Comment them out when using secrets manager
- Test secrets manager connection
See Secrets Management Guide for detailed troubleshooting.
Note: Kick's API is less documented than Twitch/YouTube. Endpoints may change.
OAuth Endpoints:
-
Token:
POST https://kick.com/api/v2/oauth/token- Get access token from credentials
- Client credentials flow
-
Channel:
GET https://kick.com/api/v2/channels/{username}- Get channel info and livestream status
Public API Endpoints:
- Channel:
GET https://kick.com/api/v1/channels/{username}- Public channel information
- No authentication required
OAuth Authentication:
- Higher rate limits (exact limits undocumented)
- More reliable access
- Recommended for production
Public API:
- Lower rate limits (exact limits undocumented)
- May be throttled during high traffic
- OK for development/testing
Stream Daemon Usage:
- ~12 requests/hour at default 5-minute intervals
- Should be well under limits with OAuth
Note: Kick doesn't have extensive public API documentation yet.
- Kick Platform: https://kick.com
- Developer Settings: Kick → Settings → Developer (requires 2FA)
- Community Documentation: Check Kick developer communities
- ✅ Store Client Secret in secrets manager
- ✅ Enable 2FA on your Kick account
- ✅ Use separate applications for dev/production
- ✅ Regenerate credentials periodically
- ❌ Commit Client Secret to git
- ❌ Share Client Secret in screenshots/logs
- ❌ Use production credentials in development
- ❌ Disable 2FA (required for Developer access)
How to rotate credentials:
- Create new application in Kick Developer settings
- Update secrets manager:
doppler secrets set KICK_CLIENT_ID="new_id" doppler secrets set KICK_CLIENT_SECRET="new_secret"
- Restart Stream Daemon
- Delete old application from Kick settings
| Feature | OAuth | Public API |
|---|---|---|
| Setup | Requires credentials | No setup |
| Rate Limits | Higher | Lower |
| Reliability | More reliable | Less reliable |
| Authentication | Client credentials flow | None |
| Recommended For | Production | Development/testing |
To monitor multiple Kick channels, run separate instances:
Instance 1:
# .env.channel1
KICK_USERNAME=channel1
KICK_CLIENT_ID=app1_id
KICK_CLIENT_SECRET=app1_secretInstance 2:
# .env.channel2
KICK_USERNAME=channel2
KICK_CLIENT_ID=app2_id
KICK_CLIENT_SECRET=app2_secretFine-tune checking frequency:
# Check every 10 minutes when offline
SETTINGS_OFFLINE_CHECK_INTERVAL=10
# Check every 1 minute when live
SETTINGS_ONLINE_CHECK_INTERVAL=1| Feature | Kick | Twitch | YouTube |
|---|---|---|---|
| Auth Required | Optional | Required | Required |
| Public API | ✅ Yes | ❌ No | ❌ No |
| OAuth Support | ✅ Yes | ✅ Yes | N/A (API Key) |
| Rate Limits | Variable | 800/min | 10K quota/day |
| API Maturity | 🟡 Developing | 🟢 Mature | 🟢 Mature |
| Documentation | ✅ Extensive | ✅ Extensive |
Issue: Kick's API is newer and may have occasional changes or downtime.
Mitigation:
- Stream Daemon has automatic fallback to public API
- Errors are logged for debugging
- Retry logic handles transient failures
Issue: Kick doesn't have comprehensive public API docs yet.
Mitigation:
- Stream Daemon uses community-discovered endpoints
- Code includes comments explaining API usage
- Updates will be released as Kick's API matures
Issue: Developer settings require 2FA enabled.
Not an issue:
- 2FA is good security practice anyway
- One-time setup
- Protects your account
- Twitch Setup Guide - Twitch monitoring
- YouTube Setup Guide - YouTube Live monitoring
- Discord Setup Guide - Discord notifications
- Messages Guide - Custom message formatting
- Secrets Management - Doppler/AWS/Vault setup
- Quick Start Guide - Initial setup
Last Updated: 2024 API Status: Kick's API is actively developing. This guide will be updated as their API matures.