API docs
Search docs
Guides, operations and types

JilTV API

Everything the JilTV website can do, your bot, overlay or tool can do too. One GraphQL endpoint for reading and changing data, plus a few cache-friendly REST endpoints for chat clients.

Endpoint

GraphQL
POST https://api.jiltv.app/v1/graphql
  • Reads are public. Emotes, sets, users and channels need no key.
  • Changes need an API key with the right scope. See Authentication.
  • GET works for queries (handy for caching), POST for queries and mutations. Mutations over GET are rejected.
  • IDs are ULIDs: 26 characters, sortable by creation time.

Quickstart

Search for emotes. No key, no SDK, just HTTP:

curl https://api.jiltv.app/v1/graphql \
  -H 'Content-Type: application/json' \
  -d '{"query":"{ searchEmotes(query: \"pepe\", perPage: 3) { total nodes { id name host } } }"}'
Response
{
  "data": {
    "searchEmotes": {
      "total": 42,
      "nodes": [
        { "id": "01M43XZ4N6EKDAAJST7XW4V6JV", "name": "pepeHappy", "host": "https://cdn.jiltv.app/emotes/01M43XZ4N6EKDAAJST7XW4V6JV/1" }
      ]
    }
  }
}

Every emote has a host. Files live at {host}/{scale}x.{format} with scales 1–4 and formats webp (always) and avif (when hasAvif is true; prefer it then, it is only stored where it is smaller). GIF and PNG are not stored: prepareEmoteDownload makes them on request for downloads.

Tooling

The schema is published at /v1/graphql/schema.graphql and introspection is enabled. Point any GraphQL tool at it: code generators (graphql-codegen, gql.tada, genqlient), IDE plugins, or Postman. Try queries live in the API explorer.

Clients can send automatic persisted queries to replace long query strings with a SHA-256 hash.

Search
Find emotes or jump to a page