Dataset Backups
About this dataset
This site tracks and publishes open drop campaign data from Twitch and Kick.
Campaign metadata in the downloadable datasets and public JSON API is released under CC0 so you can reuse it freely. The underlying source data is scraped from Twitch and Kick APIs and pages; we do not control the upstream content and cannot guarantee its accuracy or permanence. Linked third-party images, logos, and trademarks may remain subject to separate rights.
Note that some drops have missing or incomplete data due to Twitch API limitations.
Reward campaign data is sourced from SunkwiBOT/twitch-drops-api. Raw JSON exports are available in the same repository as drops.json and rewards.json.
Kick data is fetched directly from the public Kick campaigns API on a recurring schedule.
Need a custom format for your workflow or research pipeline? Open a GitHub issue and describe what you need.
Kick JSON API
Fully imported Kick campaigns are also available through the public paginated Kick campaign JSON API. Responses include campaign dates, game and organization metadata, rewards, and the full channel list stored for each campaign.
Use page and page_size for pagination. Filter by Kick category ID with
game, or by the computed campaign state with
status=active, status=upcoming, status=expired,
or status=unknown.
Page numbers and page sizes have a minimum of 1, and the maximum page size is 500.
{
"total": 1,
"page": 1,
"page_size": 100,
"items": [{
"kick_id": "...",
"name": "...",
"status": "active",
"starts_at": "2026-07-01T00:00:00Z",
"ends_at": "2026-08-01T00:00:00Z",
"category": { "kick_id": 123, "name": "..." },
"organization": { "kick_id": "...", "name": "..." },
"channels": [],
"rewards": [{ "name": "...", "required_minutes_watched": 30 }]
}]
}
Timestamps use ISO 8601 in UTC and may be null when the source does not provide a date. Campaigns with
incomplete dates receive the computed status unknown and are excluded from status-based filtering.
Each item includes every stored channel and raw reward without RSS truncation or reward-name merging.
Consumers can stop pagination when items is empty or when
page * page_size >= total.
An empty channels list means no channel restriction data is stored. It does not
by itself guarantee that a campaign is available on every channel.
Twitch JSON API
Fully imported Twitch campaigns are available through the public paginated Twitch campaign JSON API. Responses include campaign dates, game and organization metadata, allowed channels, drops, and rewards for each campaign.
Use page and page_size for pagination. Filter by Twitch game ID with
game, or by the computed campaign state with
status=active, status=upcoming, status=expired,
or status=unknown.
Page numbers and page sizes have a minimum of 1, and the maximum page size is 500.
{
"total": 1,
"page": 1,
"page_size": 100,
"items": [{
"twitch_id": "...",
"name": "...",
"game": { "twitch_id": "...", "display_name": "..." },
"organization": { "twitch_id": "...", "name": "...", "display_name": "..." },
"start_at": "2026-07-01T00:00:00Z",
"end_at": "2026-08-01T00:00:00Z",
"status": "active",
"allowed_channels": [],
"drops": [{ "name": "...", "benefits": ["..."] }]
}]
}
Timestamps use ISO 8601 in UTC and may be null when the source does not provide a date. Campaigns with
incomplete dates receive the computed status unknown and are excluded from status-based filtering.
Additional endpoints include games, organizations, channels, reward campaigns, and chat badges all public and paginated. Each list endpoint has a corresponding detail view by ID.
| Name | Size | Updated |
|---|---|---|
| {{ dataset.name }} | {{ dataset.size }} |
{{ dataset_count }} dataset{% if dataset_count != 1 %}s{% endif %} available.
{% else %}No dataset backups found.
{% endif %}