API Reference

Betterino API

Betterino is a modern fork of Chatterino — a Twitch chat client redesigned with a refined aesthetic and new features. This API powers badge management, user cosmetics, and authentication via Twitch OAuth.

Base URL https://api.ddrx.at/v1

User IDs

Most endpoints accept Internal ID, Twitch ID, or Betterino ID. Example: 3, 784897223, BT433914

Content Type

All request bodies must be sent as application/json. All responses are returned as JSON.

Authentication

Session Tokens

Betterino uses session tokens obtained via Twitch OAuth. Authenticated requests must include the token in the request header.

Required Header
X-Betterino-Token: bt_session_xxxxxxxxx
Basics

Response Format

All responses follow a consistent envelope structure.

Success
{
  "success": true,
  "data": {}
}
Error
{
  "success": false,
  "error": "Message"
}
System

Badge System

Each user can display exactly one visible badge: none, a normal badge, or a collector badge. Collector badges can optionally use a frame overlay.

Tomoe Levels

Badges have levels 0–4 (normal) and 5 (awakened/hidden). Awakened badges count toward collector frames.

Collector Tiers

Unlock collector badges by maxing badges (Tomoe 4+). Tiers: 1, 3, 5, 10, 15.

Public API

Public Endpoints

No authentication required. Used primarily by chat clients to fetch badge data.

GET /badges/all All users + selected badges 🌐 Public

Returns all users and their currently selected visible badge. Used by chat clients to display badges in real-time.

Example Response
{
  "success": true,
  "count": 1,
  "updated_at": "2026-05-15T06:00:00Z",
  "users": {
    "784897223": {
      "betterino_id": "BT433914",
      "twitch_login": "deidaraxx",
      "selected_badge": {
        "selected_type": "collector_badge",
        "name": "Maxed Collector 5",
        "url": "https://cdn.ddrx.at/badges/maxed/maxed-5.webp",
        "frame": {
          "name": "Bronze Awakening Frame",
          "url": "https://cdn.ddrx.at/badges/maxed/frames/bronze.webp"
        }
      }
    }
  }
}
GET /badges/catalog Full badge catalog 🌐 Public

Returns the entire public badge catalog including badges, variants, collector tiers, and collector frames.

GET /user/{id} Full user cosmetic data 🌐 Public

Returns full public cosmetic data for a user. Accepts Internal ID, Twitch ID, or Betterino ID.

Example Request
GET /user/784897223
Example Response
{
  "success": true,
  "data": {
    "user": {
      "betterino_id": "BT433914",
      "display_name": "Deidaraxx",
      "roles": ["owner", "admin"],
      "subscribed": true
    },
    "selected_badge": {},
    "badges": [],
    "collection_badge": {},
    "awakening_progress": {}
  }
}
Auth API

Authentication

Endpoints for authenticating via Twitch and managing sessions.

POST /auth/twitch Authenticate via Twitch 🌐 Public

Authenticates a Twitch user using a Twitch access token. Returns a Betterino session token.

Request Body
{
  "access_token": "TWITCH_ACCESS_TOKEN"
}
Response
{
  "success": true,
  "auth": {
    "session_token": "bt_session_xxxxx",
    "expires_at": "2026-06-01 00:00:00",
    "user": {}
  }
}
GET /auth/me Get authenticated user 🔒 Auth required

Returns the currently authenticated user's profile based on the session token.

Response
{
  "success": true,
  "user": {
    "id": 3,
    "betterino_id": "BT433914",
    "roles": ["owner", "admin"]
  }
}
POST /auth/logout Invalidate session token 🔒 Auth required

Invalidates the current session token. No request body required.

User API

User Actions

Authenticated endpoints for managing your own badges and cosmetics.

POST /users/badges/select Select a visible badge 🔒 Auth required

Selects which badge is displayed. Supports normal badges, collector badges (with optional frame), or clearing the selection.

Select Normal Badge
{
  "selected_type": "user_badge",
  "id": 2
}
Select Collector Badge With Frame
{
  "selected_type": "collector_badge",
  "id": 3,
  "frame_id": 1
}
Remove Visible Badge
{
  "selected_type": "none"
}
POST /users/badges/unselect Clear badge selection 🔒 Auth required

Alternative endpoint to clear the currently selected badge. No request body needed.

POST /users/badges/upgrade Upgrade badge Tomoe level 🔒 Auth required

Upgrades a badge to the specified Tomoe level. Target level must be higher than current level.

Request Body
{
  "user_badge_id": 2,
  "target_level": 4
}
Response
{
  "success": true,
  "upgrade": {
    "new_level": 4,
    "collection_badge": {}
  }
}
POST /users/badges/awaken Awaken a badge (Tomoe 5) 🔒 Auth required

Consumes an awakening unlock and awakens a badge to the hidden Tomoe level 5. Awakened badges count toward collector frames and are excluded from further awakening progress.

Request Body
{
  "user_badge_id": 2
}
Admin API

Admin Endpoints

Requires an admin or owner session token. These endpoints allow full management of users, badges, and roles.

GET /admin/users List all users 🔒 Admin

Returns a list of all registered users.

GET /admin/users/{id} Detailed user info 🔒 Admin

Returns detailed user information including inventory, roles, collector progress, awakening progress, and selected badge.

POST /admin/badges/create Create a badge 🔒 Admin
Request Body
{
  "slug": "better-plus",
  "name": "Better Badge",
  "description": "Main Betterino+ badge",
  "type": "better_plus",
  "rarity": "subscription",
  "active": 1
}
POST /admin/badge-variants/create Create a badge variant 🔒 Admin
Request Body
{
  "badge_slug": "better-plus",
  "slug": "bb-month1",
  "name": "Better Badge Month 1",
  "unlock_month": 1,
  "base_image_url": "https://cdn.ddrx.at/badges/better-plus/bb-month1-t0.webp",
  "animated_image_url": null,
  "sort_order": 1,
  "active": 1
}
POST /admin/users/grant-badge Grant badge to user 🔒 Admin
Request Body
{
  "user": "784897223",
  "variant_slug": "bb-month1",
  "source": "admin"
}
POST /admin/users/remove-badge Remove user badge 🔒 Admin
Request Body
{
  "user_badge_id": 2
}
POST /admin/users/set-tomoe Set Tomoe level directly 🔒 Admin
Request Body
{
  "user_badge_id": 2,
  "tomoe_level": 5,
  "awakened": true
}
POST /admin/users/set-roles Set user roles 🔒 Admin

Sets user roles. Owners can manage admins and owners. Admins cannot manage admins or owners. Available roles: owner, admin, moderator, vip, founder, user

Request Body
{
  "user": "784897223",
  "roles": ["admin", "vip"]
}