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
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.
GETworks for queries (handy for caching),POSTfor queries and mutations. Mutations overGETare 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 } } }"}'{
"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.