EmojiKit API
Free, fast, and reliable emoji API for developers. Access 1,190+ emojis with a simple REST API.
https://emojikit.app/api/v1Get Free API Key
Free tier: 60 req/min, 1,000 req/day. No credit card needed.
Quick Start
Get Your API Key
Register for a free API key above, or use the API without a key (rate limited to 60 req/min).
curl -X POST https://emojikit.app/api/v1/api-keys \
-H "Content-Type: application/json" \
-d '{"name": "Your Name", "email": "you@example.com"}'Make Your First Request
Use the API key in the x-api-key header or api_key query parameter.
curl https://emojikit.app/api/v1/emojis \
-H "x-api-key: ek_your_api_key_here"const response = await fetch(
'https://emojikit.app/api/v1/emojis',
{
headers: {
'x-api-key': 'ek_your_api_key_here'
}
}
);
const data = await response.json();
console.log(data);import requests
response = requests.get(
'https://emojikit.app/api/v1/emojis',
headers={'x-api-key': 'ek_your_api_key_here'}
)
data = response.json()
print(data)Endpoints
/api/v1/emojisList all emojis with pagination and optional filtering by category, search term, or platform.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| page | integer | Optional | Page number (default: 1) |
| limit | integer | Optional | Results per page, max 100 (default: 20) |
| category | string | Optional | Filter by category name (e.g., "Smileys & Emotion") |
| search | string | Optional | Search emoji name, slug, or unicode |
| platform | string | Optional | Filter by platform slug (e.g., "apple", "discord") |
Response Example
{
"error": false,
"data": [
{
"name": "Grinning Face",
"slug": "grinning-face",
"character": "😀",
"unicode": "U+1F600",
"category": "Smileys & Emotion"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 1190,
"totalPages": 60,
"hasNext": true,
"hasPrev": false
}
}Code Examples
curl "https://emojikit.app/api/v1/emojis?limit=5&category=Smileys+%26+Emotion" \
-H "x-api-key: ek_your_api_key_here"const res = await fetch(
'https://emojikit.app/api/v1/emojis?limit=5',
{ headers: { 'x-api-key': 'ek_your_api_key_here' } }
);
const { data, pagination } = await res.json();import requests
res = requests.get(
'https://emojikit.app/api/v1/emojis',
params={'limit': 5},
headers={'x-api-key': 'ek_your_api_key_here'}
)
data = res.json()/api/v1/emoji/:slugGet detailed information about a specific emoji, including aliases, platform renders, keywords, related emojis, and combinations.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| slug | string | Required | URL-friendly emoji slug (e.g., "fire", "grinning-face") |
Response Example
{
"error": false,
"data": {
"name": "Fire",
"slug": "fire",
"character": "🔥",
"unicode": "U+1F525",
"codepoint": "1F525",
"category": "Objects",
"aliases": [
{ "alias": "flame emoji", "aliasSlug": "flame-emoji", "isPrimary": true }
],
"platformRenders": [
{ "platform": "apple", "imageUrl": "/emoji/apple/fire.png", "shortCode": ":fire:" },
{ "platform": "discord", "imageUrl": "/emoji/discord/fire.png", "shortCode": ":fire:" }
],
"keywords": [
{ "keyword": "hot" },
{ "keyword": "flame" }
],
"related": [...],
"combinations": [...]
}
}Code Examples
curl "https://emojikit.app/api/v1/emoji/fire" \
-H "x-api-key: ek_your_api_key_here"const res = await fetch(
'https://emojikit.app/api/v1/emoji/fire',
{ headers: { 'x-api-key': 'ek_your_api_key_here' } }
);
const { data } = await res.json();
console.log(data.character); // 🔥import requests
res = requests.get(
'https://emojikit.app/api/v1/emoji/fire',
headers={'x-api-key': 'ek_your_api_key_here'}
)
emoji = res.json()['data']
print(emoji['character']) # 🔥/api/v1/categoriesGet all emoji categories with their emoji counts.
Response Example
{
"error": false,
"data": [
{
"name": "Smileys & Emotion",
"slug": "smileys-emotion",
"icon": "😀",
"emojiCount": 140
},
{
"name": "People & Body",
"slug": "people-body",
"icon": "👋",
"emojiCount": 121
}
]
}Code Examples
curl "https://emojikit.app/api/v1/categories" \
-H "x-api-key: ek_your_api_key_here"const res = await fetch(
'https://emojikit.app/api/v1/categories',
{ headers: { 'x-api-key': 'ek_your_api_key_here' } }
);
const { data } = await res.json();import requests
res = requests.get(
'https://emojikit.app/api/v1/categories',
headers={'x-api-key': 'ek_your_api_key_here'}
)
categories = res.json()['data']/api/v1/searchSearch emojis by name, alias, or keyword. Returns matching emojis sorted by popularity.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| q | string | Required | Search query (e.g., "happy", "fire", "heart") |
| limit | integer | Optional | Max results, up to 50 (default: 20) |
Response Example
{
"error": false,
"data": [
{
"name": "Fire",
"slug": "fire",
"character": "🔥",
"category": "Objects"
},
{
"name": "Fireworks",
"slug": "fireworks",
"character": "🎆",
"category": "Activities"
}
],
"query": "fire",
"count": 2
}Code Examples
curl "https://emojikit.app/api/v1/search?q=fire&limit=5" \
-H "x-api-key: ek_your_api_key_here"const query = 'fire';
const res = await fetch(
`https://emojikit.app/api/v1/search?q=${encodeURIComponent(query)}&limit=5`,
{ headers: { 'x-api-key': 'ek_your_api_key_here' } }
);
const { data } = await res.json();import requests
res = requests.get(
'https://emojikit.app/api/v1/search',
params={'q': 'fire', 'limit': 5},
headers={'x-api-key': 'ek_your_api_key_here'}
)
results = res.json()['data']/api/v1/randomGet one or more random emojis. Optionally filter by category.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| count | integer | Optional | Number of emojis, max 20 (default: 1) |
| category | string | Optional | Filter by category name |
Response Example
{
"error": false,
"data": [
{
"name": "Rocket",
"slug": "rocket",
"character": "🚀",
"unicode": "U+1F680",
"category": "Travel & Places"
}
],
"count": 1
}Code Examples
curl "https://emojikit.app/api/v1/random?count=5" \
-H "x-api-key: ek_your_api_key_here"const res = await fetch(
'https://emojikit.app/api/v1/random?count=5',
{ headers: { 'x-api-key': 'ek_your_api_key_here' } }
);
const { data } = await res.json();import requests
res = requests.get(
'https://emojikit.app/api/v1/random',
params={'count': 5},
headers={'x-api-key': 'ek_your_api_key_here'}
)
emojis = res.json()['data']/api/v1/api-keysRegister for a free API key. Max 3 registrations per email per day.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Your name (min 2 characters) |
| string | Required | Your email address |
Response Example
{
"error": false,
"data": {
"key": "ek_a1b2c3d4e5f6...",
"name": "John Doe",
"email": "john@example.com",
"rateLimit": 60,
"createdAt": "2025-03-04T12:00:00.000Z"
},
"message": "API key created successfully!",
"usage": {
"header": "x-api-key: ek_a1b2c3d4e5f6...",
"query": "?api_key=ek_a1b2c3d4e5f6...",
"baseUrl": "https://emojikit.app/api/v1"
}
}Code Examples
curl -X POST https://emojikit.app/api/v1/api-keys \
-H "Content-Type: application/json" \
-d '{"name": "John Doe", "email": "john@example.com"}'const res = await fetch(
'https://emojikit.app/api/v1/api-keys',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
name: 'John Doe',
email: 'john@example.com'
})
}
);
const { data } = await res.json();
console.log(data.key); // ek_a1b2c3d4e5f6...import requests
res = requests.post(
'https://emojikit.app/api/v1/api-keys',
json={
'name': 'John Doe',
'email': 'john@example.com'
}
)
data = res.json()['data']
print(data['key']) # ek_a1b2c3d4e5f6...Rate Limits
Per Minute
60
Requests per minute for free tier
Per Day
1,000
Requests per day for free tier
Rate Limit Headers
Every API response includes these headers to help you track your usage:
| Header | Description |
|---|---|
| X-RateLimit-Limit | Maximum requests allowed in the current window |
| X-RateLimit-Remaining | Requests remaining in the current window |
| X-RateLimit-Reset | Unix timestamp when the rate limit window resets |
| Retry-After | Seconds until you can retry (only on 429 responses) |
429 Too Many Requests
When you exceed the rate limit, the API returns a 429 status with this response:
{
"error": true,
"status": 429,
"message": "Rate limit exceeded. Please slow down."
}Abuse Prevention
If the same IP hits the rate limit 3 times within 1 hour, it will be automatically blocked for 1 hour. This is to prevent bot abuse and ensure fair access for all developers.
Response Format
Success Response
All successful responses return JSON with an error: false field and a data field:
{
"error": false,
"data": { ... },
// Additional fields like "pagination", "query", "count" depending on endpoint
}Error Response
Errors return a consistent JSON structure with error: true:
{
"error": true,
"status": 404,
"message": "Emoji with slug \"nonexistent\" not found"
}HTTP Status Codes
| Code | Meaning |
|---|---|
| 200 | Success — the request was processed |
| 400 | Bad Request — missing or invalid parameters |
| 404 | Not Found — the requested resource doesn't exist |
| 429 | Too Many Requests — rate limit exceeded |
| 500 | Server Error — something went wrong on our end |
API Key Management
How to Get an API Key
You can register for a free API key in two ways:
- Use the form at the top of this page
- Make a POST request to
/api/v1/api-keys
Each email can register up to 3 API keys per day. No credit card required.
How to Use Your API Key
Include your API key in one of two ways:
Option 1: Header (Recommended)
curl https://emojikit.app/api/v1/emojis \
-H "x-api-key: ek_your_api_key_here"Option 2: Query Parameter
curl "https://emojikit.app/api/v1/emojis?api_key=ek_your_api_key_here"Best Practices
- • Store your API key in environment variables
- • Use the header method over query params
- • Monitor your usage via rate limit headers
- • Implement exponential backoff on 429 errors
- • Hardcode API keys in client-side code
- • Share your API key publicly
- • Commit API keys to version control
- • Make excessive parallel requests
Ready to Build?
Get your free API key and start integrating emojis into your app today.