EmojiSelect API

A free public JSON API over the same catalog that powers emojiselect.com — deterministic ranking, catalog facts, 30-locale names. No API key, no sign-up.

Endpoints

GET
/api/v1/emoji/{slug}
GET
/api/v1/search?q=&locale=&limit=&types=
GET
/api/v1/categories
GET
/api/v1/random

Full endpoint reference and interactive examples: /api/docs, or grab the OpenAPI 3.0 spec and import it into Postman or Insomnia.

Rate limits

The free tier allows 1,000 requests per day per IP address (UTC day). Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers; when the limit is hit the API answers 429 with a rate_limit_exceeded error.

Code examples

One emoji — full details

curl https://emojiselect.com/api/v1/emoji/red-heart

Search (deterministic, same ranking as the site search)

curl 'https://emojiselect.com/api/v1/search?q=heart&locale=en&limit=5'

JavaScript (fetch)

const res = await fetch(
  "https://emojiselect.com/api/v1/search?q=heart&limit=5"
);
const data = await res.json();
console.log(data.results.map((r) => r.char + " " + r.name));

Python (requests)

import requests

r = requests.get(
    "https://emojiselect.com/api/v1/emoji/red-heart",
    timeout=10,
)
print(r.json()["char"], r.json()["names"]["ar"])

What the API does not do: it does not generate content, guess intent with AI, or invent statistics. It returns catalog data as it is. Meanings are included only for the languages where they were editorially authored. That is 984 emoji across 16 locales (de, es, fr, hi, id, it, ja, ko, nl, pl, pt-BR, ru, th, tr, vi, zh-CN) plus Czech (cs, 984) and the en/ar editorial base — other locales carry names only.