Enhancer logoEnhancer
Public API

Channel

GET /v1/channel/:platform/:externalId/aggregate

Returns the aggregated state of a channel: the accounts assigned to it with their badge assignments and appearance, and the badge definitions. The response always contains the complete state, there is no pagination.

Endpoint

GET https://api.enhancer.at/v1/channel/:platform/:externalId/aggregate
ParameterInDescription
platformpathPlatform name: TWITCH or KICK
externalIdpathChannel external id or login. Use global for the global aggregate.

Example

curl https://api.enhancer.at/v1/channel/twitch/h2p_gucio/aggregate

Response 200:

{
  "channelId": "3f2b8c14-6a7d-4e89-9b0c-1d2e3f4a5b6c",
  "platform": "TWITCH",
  "accounts": [
    {
      "accountId": "a1b85243-288d-4022-912e-7e76a49be380",
      "externalId": "87037696",
      "badgesIds": ["7c9e6679-7425-40de-944b-e07fc1f90ae7"],
      "customNickname": "igor",
      "customFont": null,
      "hasGlow": true
    },
    {
      "accountId": "5e8d4c2b-7a9f-4e31-b6d8-9c0a1b2c3d4e",
      "externalId": "556677889",
      "badgesIds": ["b3d26f1a-8e4f-4c7a-9d21-6f5a8b9c0d12"],
      "customNickname": null,
      "customFont": null,
      "hasGlow": false
    }
  ],
  "badges": [
    {
      "badgeId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "sources": {
        "18x18": "https://cdn.enhancer.at/badge/[...sha256...]/18.webp",
        "36x36": "https://cdn.enhancer.at/badge/[...sha256...]/36.webp",
        "72x72": "https://cdn.enhancer.at/badge/[...sha256...]/72.webp"
      },
      "name": "Enhancer Developer",
      "priority": 999
    },
    {
      "badgeId": "b3d26f1a-8e4f-4c7a-9d21-6f5a8b9c0d12",
      "sources": {
        "18x18": "https://cdn.enhancer.at/badge/[...sha256...]/18.webp",
        "36x36": "https://cdn.enhancer.at/badge/[...sha256...]/36.webp",
        "72x72": "https://cdn.enhancer.at/badge/[...sha256...]/72.webp"
      },
      "name": "Contributor",
      "priority": 10
    }
  ],
  "cursor": "1787259545448-0"
}

Response fields

FieldTypeDescription
channelIduuid | nullChannel id, null for the global aggregate
platformstringTWITCH or KICK
accountsobject[]Users assigned to this channel
badgesobject[]Badge definitions referenced by accounts[].badgesIds
cursorstringNothing important, you don't need to worry about it ;)

accounts[] item:

FieldTypeDescription
accountIduuidUser account id
externalIdstringPlatform user id
badgesIdsuuid[]Badge ids from badges[] assigned in this channel
customNicknamestring | nullNickname override
customFontstring | nullFont override
hasGlowbooleanWhether the nickname glows

badges[] item:

FieldTypeDescription
badgeIduuidBadge id
sourcesobjectImage URLs by size, see Badge Images
namestringBadge name
prioritynumberSort order, ascending

Notes

  • accounts[].badgesIds references ids from badges[].
  • Badge definitions intentionally have no description field.
  • Responses carry an ETag header; send it as If-None-Match to receive 304 Not Modified when nothing changed.

Errors

StatusMeaning
400Invalid parameters
404Channel not found

Error responses use a shared shape:

{ "error": { "code": "string", "message": "string" } }

On this page