Secure cloud storage for streaming configurations. Sync your text cyclers, source swaps, layouts, and notes across devices.
Store rotating text configurations for dynamic stream overlays. Cycle through messages, tips, and announcements.
Save source swap configurations for quick scene transitions. Switch between cameras, games, and overlays.
Store layout presets with source positions, scales, and visibility. Perfect for multi-scene setups.
Keep stream notes, checklists, and reminders synced. Never forget your pre-stream routine.
Track scene usage with 30-day rolling analytics. See which scenes you use most often.
All data is isolated per customer. Your configs are yours alone, secured with JWT auth.
One API for all config types: text-cyclers, swaps, layouts, notes
Track scene usage with 30-day TTL (FIFO rolling)
// Fetch all text cycler configs
const response = await fetch('https://streamkit-api.idling.app/configs/text-cyclers', {
method: 'GET',
credentials: 'include', // Include HttpOnly cookie
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();
console.log(data.configs); // Array of text cycler configs
console.log(data.count); // Total count
// Create a new layout preset
const response = await fetch('https://streamkit-api.idling.app/configs/layouts', {
method: 'POST',
credentials: 'include',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
id: 'gaming-layout-v1',
name: 'Gaming Layout',
sources: [
{ name: 'Game Capture', x: 0, y: 0, width: 1920, height: 1080 },
{ name: 'Webcam', x: 1600, y: 800, width: 320, height: 180 },
{ name: 'Chat', x: 0, y: 800, width: 400, height: 280 },
],
}),
});
const result = await response.json();
console.log(result.configId); // 'gaming-layout-v1'
// Record a scene switch
const response = await fetch('https://streamkit-api.idling.app/scene-activity/record', {
method: 'POST',
credentials: 'include',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
sceneName: 'Gaming Scene',
}),
});
// Get top scenes
const topResponse = await fetch('https://streamkit-api.idling.app/scene-activity/top?limit=5', {
method: 'GET',
credentials: 'include',
});
const topScenes = await topResponse.json();
console.log(topScenes.scenes); // [{ sceneName, count, lastUsed }, ...]
// Update an existing config
const response = await fetch('https://streamkit-api.idling.app/configs/text-cyclers/my-cycler-id', {
method: 'PUT',
credentials: 'include',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Updated Cycler Name',
messages: ['Message 1', 'Message 2', 'Message 3'],
interval: 30000, // 30 seconds
}),
});
const result = await response.json();
console.log(result.message); // 'Config updated'