# http/config
ServerConfig:object
{bind:string
enable_static_server:boolean
path:string
kv_password:string
}
ServerConfig:object
{bind:string
enable_static_server:boolean
path:string
kv_password:string
}
Redeem:object
{Username of who redeemed the reward
username:string
Display name of who redeemed the reward
display_name:string
Reward that was redeemed
reward:object
{Is the reward enabled (redeemable)?
enabled:boolean
Reward ID
id:string
Name of the reward
name:string
Description of the reward
description:string
Reward icon URL
image:string
How much does is cost
price:int
If present, reward requires user input and this field is the help text
required_info:string
Time in seconds to wait before this reward can be redeemed again
cooldown:int
}
Time of the redeem
when:datetime
If the reward required user input it will be here
request_text:string
}
Redeem:object
{Username of who redeemed the reward
username:string
Display name of who redeemed the reward
display_name:string
Reward that was redeemed
reward:object
{Is the reward enabled (redeemable)?
enabled:boolean
Reward ID
id:string
Name of the reward
name:string
Description of the reward
description:string
Reward icon URL
image:string
How much does is cost
price:int
If present, reward requires user input and this field is the help text
required_info:string
Time in seconds to wait before this reward can be redeemed again
cooldown:int
}
Time of the redeem
when:datetime
If the reward required user input it will be here
request_text:string
}
Config:object
{Enable the loyalty system
enabled:boolean
Name of the currency
currency:string
Settings for distributing currency to online viewers
points:object
{How often to distribute points, in seconds
interval:int
How many points to award every interval
amount:int
Extra points for active chatters
activity_bonus:int
}
Usernames to exclude from currency distribution
banlist:arrayOf [
string
]
}
Redeem:object
{Username of who redeemed the reward
username:string
Display name of who redeemed the reward
display_name:string
Reward that was redeemed
reward:object
{Is the reward enabled (redeemable)?
enabled:boolean
Reward ID
id:string
Name of the reward
name:string
Description of the reward
description:string
Reward icon URL
image:string
How much does is cost
price:int
If present, reward requires user input and this field is the help text
required_info:string
Time in seconds to wait before this reward can be redeemed again
cooldown:int
}
Time of the redeem
when:datetime
If the reward required user input it will be here
request_text:string
}
arrayOf [
Goal:object
{Is the goal enabled?
enabled:boolean
Community goal ID
id:string
Name of the community goal
name:string
Description of the goal
description:string
Goal icon URL
image:string
How many points does the goal need to be met in total
total:int
How many points have been contributed so far
contributed:int
Dictionary of how much every viewer has contributed
contributors:dictionary<
string, int64:int
>
}
]
PointsEntry:object
{Currency balance
points:int
}
arrayOf [
Redeem:object
{Username of who redeemed the reward
username:string
Display name of who redeemed the reward
display_name:string
Reward that was redeemed
reward:object
{Is the reward enabled (redeemable)?
enabled:boolean
Reward ID
id:string
Name of the reward
name:string
Description of the reward
description:string
Reward icon URL
image:string
How much does is cost
price:int
If present, reward requires user input and this field is the help text
required_info:string
Time in seconds to wait before this reward can be redeemed again
cooldown:int
}
Time of the redeem
when:datetime
If the reward required user input it will be here
request_text:string
}
]
arrayOf [
Reward:object
{Is the reward enabled (redeemable)?
enabled:boolean
Reward ID
id:string
Name of the reward
name:string
Description of the reward
description:string
Reward icon URL
image:string
How much does is cost
price:int
If present, reward requires user input and this field is the help text
required_info:string
Time in seconds to wait before this reward can be redeemed again
cooldown:int
}
]
string
AuthResponse:object
{access_token:string
refresh_token:string
expires_in:int
scope:arrayOf [
string
]
Time:datetime
}
BotConfig:object
{Chatbot username (for internal use, ignored by Twitch)
username:string
OAuth key for IRC authentication
oauth:string
Twitch channel to join and use
channel:string
How many messages to keep in twitch/chat-history
chat_history:int
}
dictionary<
string, BotCustomCommand:object
{Command description
description:string
Minimum access level needed to use the command
access_level:enum (
everyone | subscriber | vip | moderators | streamer
)
Response template (in Go templating format)
response:string
Is the command enabled?
enabled:boolean
}
>
BotAlertsConfig:object
{follow:object
{Enable chat message alert on follow
enabled:boolean
List of message to write on follow, one at random will be picked
messages:arrayOf [
string
]
}
subscription:object
{Enable chat message alert on subscription
enabled:boolean
List of message to write on subscription, one at random will be picked
messages:arrayOf [
string
]
variations:arrayOf [
object
{min_streak
*
:int
is_gifted
*
:boolean
messages:arrayOf [
string
]
}
]
}
gift_sub:object
{Enable chat message alert on gifted subscription
enabled:boolean
List of message to write on gifted subscription, one at random will be picked
messages:arrayOf [
string
]
variations:arrayOf [
object
{min_cumulative
*
:int
is_anonymous
*
:boolean
messages:arrayOf [
string
]
}
]
}
raid:object
{Enable chat message alert on raid
enabled:boolean
List of message to write on raid, one at random will be picked
messages:arrayOf [
string
]
variations:arrayOf [
object
{min_viewers
*
:int
messages:arrayOf [
string
]
}
]
}
cheer:object
{Enable chat message alert on cheer
enabled:boolean
List of message to write on cheer, one at random will be picked
messages:arrayOf [
string
]
variations:arrayOf [
object
{min_amount
*
:int
messages:arrayOf [
string
]
}
]
}
}
BotTimersConfig:object
{List of timers as a dictionary
timers:dictionary<
string, BotTimer:object
{Enable the timer
enabled:boolean
Timer name (must be unique)
name:string
Minimum chat messages in the last 5 minutes for timer to trigger
minimum_chat_activity:int
Minimum amount of time (in seconds) that needs to pass before it triggers again
minimum_delay:int
Messages to write (randomly chosen)
messages:arrayOf [
string
]
}
>
}
int
arrayOf [
PrivateMessage:object
{User:object
{ID:string
Name:string
DisplayName:string
Color:string
Badges:dictionary<
string, int
>
}
Raw:string
Type:int
RawType:string
Tags:dictionary<
string, string
>
Message:string
Channel:string
RoomID:string
ID:string
Time:datetime
Emotes:arrayOf [
object
{Name:string
ID:string
Count:int
Positions:arrayOf [
EmotePosition:object
{Start:int
End:int
}
]
}
]
Bits:int
Action:boolean
FirstMessage:boolean
Reply
*
:object
{ParentMsgID:string
ParentUserID:string
ParentUserLogin:string
ParentDisplayName:string
ParentMsgBody:string
}
CustomRewardID:string
}
]
Config:object
{Enable subsystem
enabled:boolean
Enable the chatbot
enable_bot:boolean
Twitch API App Client ID
api_client_id:string
Twitch API App Client Secret
api_client_secret:string
}
PrivateMessage:object
{User:object
{ID:string
Name:string
DisplayName:string
Color:string
Badges:dictionary<
string, int
>
}
Raw:string
Type:int
RawType:string
Tags:dictionary<
string, string
>
Message:string
Channel:string
RoomID:string
ID:string
Time:datetime
Emotes:arrayOf [
object
{Name:string
ID:string
Count:int
Positions:arrayOf [
EmotePosition:object
{Start:int
End:int
}
]
}
]
Bits:int
Action:boolean
FirstMessage:boolean
Reply
*
:object
{ParentMsgID:string
ParentUserID:string
ParentUserLogin:string
ParentDisplayName:string
ParentMsgBody:string
}
CustomRewardID:string
}
NotificationMessagePayload:object
{subscription:object
{id:string
type:string
version:string
status:string
condition:object
{broadcaster_user_id:string
from_broadcaster_user_id:string
to_broadcaster_user_id:string
reward_id:string
client_id:string
extension_client_id:string
user_id:string
}
transport:object
{method:string
callback:string
secret:string
session_id:string
connected_at:string
disconnected_at:string
}
created_at:object
{Time:datetime
}
cost:int
}
event:arrayOf [
uint8:int
]
date:datetime
}
arrayOf [
NotificationMessagePayload:object
{subscription:object
{id:string
type:string
version:string
status:string
condition:object
{broadcaster_user_id:string
from_broadcaster_user_id:string
to_broadcaster_user_id:string
reward_id:string
client_id:string
extension_client_id:string
user_id:string
}
transport:object
{method:string
callback:string
secret:string
session_id:string
connected_at:string
disconnected_at:string
}
created_at:object
{Time:datetime
}
cost:int
}
event:arrayOf [
uint8:int
]
date:datetime
}
]
arrayOf [
Stream:object
{id:string
user_id:string
user_login:string
user_name:string
game_id:string
game_name:string
tag_ids:arrayOf [
string
]
is_mature:boolean
type:string
title:string
viewer_count:int
started_at:datetime
language:string
thumbnail_url:string
}
]