{"openapi":"3.0.0","paths":{"/api/emoji/search":{"get":{"operationId":"SearchController_search","parameters":[{"name":"group","required":false,"in":"query","description":"Unicode group name, e.g. \"Smileys & Emotion\"","schema":{"type":"string"}},{"name":"subgroup","required":false,"in":"query","description":"Unicode subgroup, e.g. \"face-smiling\"","schema":{"type":"string"}},{"name":"version","required":false,"in":"query","description":"Emoji specification version, e.g. \"15.1\"","schema":{"type":"string"}},{"name":"year","required":false,"in":"query","description":"Year the emoji was released","schema":{"type":"number"}},{"name":"platform","required":false,"in":"query","description":"Only emoji with artwork for this platform","schema":{"type":"string","enum":["apple","google","samsung","microsoft","whatsapp","facebook","twitter","openmoji","noto","joypixels","noto-animated","joypixels-animated","microsoft-3d-fluent","microsoft-teams","twitter-stickers","toss-face","emojidex","huawei","lg","sony","htc","sharp","nec","serenityos","telegram","icons8","catrinity","skype","messenger","mozilla","discord","au-kddi","docomo","softbank","emojipedia"]}},{"name":"language","required":false,"in":"query","schema":{"default":"en","type":"string","enum":["en","es","fr","de","it","pt","ja","ko","zh","ar"]}},{"name":"limit","required":false,"in":"query","schema":{"maximum":500,"default":60,"type":"number"}},{"name":"offset","required":false,"in":"query","schema":{"default":0,"type":"number"}},{"name":"q","required":false,"in":"query","description":"Search text — name, keyword, alias, shortcode, emoji, or codepoint","schema":{"type":"string"}},{"name":"facets","required":false,"in":"query","description":"Include facet counts (costs an extra engine round-trip)","schema":{"type":"boolean"}}],"responses":{"200":{"description":""}},"summary":"Search emoji by name, keyword, alias, shortcode, character or codepoint","tags":["search"]}},"/api/emoji/autocomplete":{"get":{"operationId":"SearchController_autocomplete","parameters":[{"name":"q","required":false,"in":"query","description":"Prefix to complete","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"maximum":50,"default":10,"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Prefix completions for search-as-you-type","tags":["search"]}},"/api/search/popular":{"get":{"operationId":"SearchController_popular","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Most frequent search terms","tags":["search"]}},"/api/search/recent":{"get":{"operationId":"SearchController_recent","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Most recently searched terms","tags":["search"]}},"/api/emoji":{"get":{"operationId":"EmojiController_list","parameters":[{"name":"group","required":false,"in":"query","description":"Unicode group name, e.g. \"Smileys & Emotion\"","schema":{"type":"string"}},{"name":"subgroup","required":false,"in":"query","description":"Unicode subgroup, e.g. \"face-smiling\"","schema":{"type":"string"}},{"name":"version","required":false,"in":"query","description":"Emoji specification version, e.g. \"15.1\"","schema":{"type":"string"}},{"name":"year","required":false,"in":"query","description":"Year the emoji was released","schema":{"type":"number"}},{"name":"platform","required":false,"in":"query","description":"Only emoji with artwork for this platform","schema":{"type":"string","enum":["apple","google","samsung","microsoft","whatsapp","facebook","twitter","openmoji","noto","joypixels","noto-animated","joypixels-animated","microsoft-3d-fluent","microsoft-teams","twitter-stickers","toss-face","emojidex","huawei","lg","sony","htc","sharp","nec","serenityos","telegram","icons8","catrinity","skype","messenger","mozilla","discord","au-kddi","docomo","softbank","emojipedia"]}},{"name":"language","required":false,"in":"query","schema":{"default":"en","type":"string","enum":["en","es","fr","de","it","pt","ja","ko","zh","ar"]}},{"name":"limit","required":false,"in":"query","schema":{"maximum":500,"default":60,"type":"number"}},{"name":"offset","required":false,"in":"query","schema":{"default":0,"type":"number"}}],"responses":{"200":{"description":""}},"summary":"List emoji with optional filters","tags":["emoji"]}},"/api/emoji/categories":{"get":{"operationId":"EmojiController_categories","parameters":[],"responses":{"200":{"description":""}},"summary":"All categories with live counts","tags":["emoji"]}},"/api/emoji/versions":{"get":{"operationId":"EmojiController_versions","parameters":[],"responses":{"200":{"description":""}},"summary":"All emoji versions with counts","tags":["emoji"]}},"/api/emoji/recent":{"get":{"operationId":"EmojiController_recent","parameters":[],"responses":{"200":{"description":""}},"summary":"Most recently added emoji","tags":["emoji"]}},"/api/emoji/popular":{"get":{"operationId":"EmojiController_popular","parameters":[],"responses":{"200":{"description":""}},"summary":"Most viewed and copied emoji","tags":["emoji"]}},"/api/emoji/random":{"get":{"operationId":"EmojiController_random","parameters":[{"name":"group","required":false,"in":"query","description":"Unicode group name, e.g. \"Smileys & Emotion\"","schema":{"type":"string"}},{"name":"subgroup","required":false,"in":"query","description":"Unicode subgroup, e.g. \"face-smiling\"","schema":{"type":"string"}},{"name":"version","required":false,"in":"query","description":"Emoji specification version, e.g. \"15.1\"","schema":{"type":"string"}},{"name":"year","required":false,"in":"query","description":"Year the emoji was released","schema":{"type":"number"}},{"name":"platform","required":false,"in":"query","description":"Only emoji with artwork for this platform","schema":{"type":"string","enum":["apple","google","samsung","microsoft","whatsapp","facebook","twitter","openmoji","noto","joypixels","noto-animated","joypixels-animated","microsoft-3d-fluent","microsoft-teams","twitter-stickers","toss-face","emojidex","huawei","lg","sony","htc","sharp","nec","serenityos","telegram","icons8","catrinity","skype","messenger","mozilla","discord","au-kddi","docomo","softbank","emojipedia"]}},{"name":"language","required":false,"in":"query","schema":{"default":"en","type":"string","enum":["en","es","fr","de","it","pt","ja","ko","zh","ar"]}},{"name":"limit","required":false,"in":"query","schema":{"maximum":500,"default":60,"type":"number"}},{"name":"offset","required":false,"in":"query","schema":{"default":0,"type":"number"}}],"responses":{"200":{"description":""}},"summary":"A random emoji","tags":["emoji"]}},"/api/emoji/category/{slug}":{"get":{"operationId":"EmojiController_byCategory","parameters":[{"name":"slug","required":true,"in":"path","schema":{"example":"smileys-emotion","type":"string"}},{"name":"group","required":false,"in":"query","description":"Unicode group name, e.g. \"Smileys & Emotion\"","schema":{"type":"string"}},{"name":"subgroup","required":false,"in":"query","description":"Unicode subgroup, e.g. \"face-smiling\"","schema":{"type":"string"}},{"name":"version","required":false,"in":"query","description":"Emoji specification version, e.g. \"15.1\"","schema":{"type":"string"}},{"name":"year","required":false,"in":"query","description":"Year the emoji was released","schema":{"type":"number"}},{"name":"platform","required":false,"in":"query","description":"Only emoji with artwork for this platform","schema":{"type":"string","enum":["apple","google","samsung","microsoft","whatsapp","facebook","twitter","openmoji","noto","joypixels","noto-animated","joypixels-animated","microsoft-3d-fluent","microsoft-teams","twitter-stickers","toss-face","emojidex","huawei","lg","sony","htc","sharp","nec","serenityos","telegram","icons8","catrinity","skype","messenger","mozilla","discord","au-kddi","docomo","softbank","emojipedia"]}},{"name":"language","required":false,"in":"query","schema":{"default":"en","type":"string","enum":["en","es","fr","de","it","pt","ja","ko","zh","ar"]}},{"name":"limit","required":false,"in":"query","schema":{"maximum":500,"default":60,"type":"number"}},{"name":"offset","required":false,"in":"query","schema":{"default":0,"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Emoji in a category","tags":["emoji"]}},"/api/emoji/platform/{platform}":{"get":{"operationId":"EmojiController_byPlatform","parameters":[{"name":"platform","required":true,"in":"path","schema":{"example":"openmoji","type":"string"}},{"name":"group","required":false,"in":"query","description":"Unicode group name, e.g. \"Smileys & Emotion\"","schema":{"type":"string"}},{"name":"subgroup","required":false,"in":"query","description":"Unicode subgroup, e.g. \"face-smiling\"","schema":{"type":"string"}},{"name":"version","required":false,"in":"query","description":"Emoji specification version, e.g. \"15.1\"","schema":{"type":"string"}},{"name":"year","required":false,"in":"query","description":"Year the emoji was released","schema":{"type":"number"}},{"name":"language","required":false,"in":"query","schema":{"default":"en","type":"string","enum":["en","es","fr","de","it","pt","ja","ko","zh","ar"]}},{"name":"limit","required":false,"in":"query","schema":{"maximum":500,"default":60,"type":"number"}},{"name":"offset","required":false,"in":"query","schema":{"default":0,"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Emoji with artwork for a platform","tags":["emoji"]}},"/api/emoji/version/{version}":{"get":{"operationId":"EmojiController_byVersion","parameters":[{"name":"version","required":true,"in":"path","schema":{"example":"15.1","type":"string"}},{"name":"group","required":false,"in":"query","description":"Unicode group name, e.g. \"Smileys & Emotion\"","schema":{"type":"string"}},{"name":"subgroup","required":false,"in":"query","description":"Unicode subgroup, e.g. \"face-smiling\"","schema":{"type":"string"}},{"name":"year","required":false,"in":"query","description":"Year the emoji was released","schema":{"type":"number"}},{"name":"platform","required":false,"in":"query","description":"Only emoji with artwork for this platform","schema":{"type":"string","enum":["apple","google","samsung","microsoft","whatsapp","facebook","twitter","openmoji","noto","joypixels","noto-animated","joypixels-animated","microsoft-3d-fluent","microsoft-teams","twitter-stickers","toss-face","emojidex","huawei","lg","sony","htc","sharp","nec","serenityos","telegram","icons8","catrinity","skype","messenger","mozilla","discord","au-kddi","docomo","softbank","emojipedia"]}},{"name":"language","required":false,"in":"query","schema":{"default":"en","type":"string","enum":["en","es","fr","de","it","pt","ja","ko","zh","ar"]}},{"name":"limit","required":false,"in":"query","schema":{"maximum":500,"default":60,"type":"number"}},{"name":"offset","required":false,"in":"query","schema":{"default":0,"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Emoji introduced in a specific version","tags":["emoji"]}},"/api/emoji/history/{slug}":{"get":{"operationId":"EmojiController_history","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"language","required":false,"in":"query","schema":{"default":"en","type":"string","enum":["en","es","fr","de","it","pt","ja","ko","zh","ar"]}}],"responses":{"200":{"description":""}},"summary":"Full timeline for an emoji","tags":["emoji"]}},"/api/emoji/related/{slug}":{"get":{"operationId":"EmojiController_related","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"language","required":false,"in":"query","schema":{"default":"en","type":"string","enum":["en","es","fr","de","it","pt","ja","ko","zh","ar"]}},{"name":"type","required":false,"in":"query","description":"Restrict to one relationship type","schema":{"type":"string","enum":["similar","variant","skin_tone","family","flag","component","gender","direction","predecessor"]}}],"responses":{"200":{"description":""}},"summary":"Related emoji","tags":["emoji"]}},"/api/emoji/download/svg/{slug}":{"get":{"operationId":"EmojiController_downloadSvg","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Redirect to the SVG asset","tags":["emoji"]}},"/api/emoji/download/png/{slug}":{"get":{"operationId":"EmojiController_downloadPng","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Redirect to the PNG asset","tags":["emoji"]}},"/api/emoji/{slug}/copy":{"post":{"operationId":"EmojiController_recordCopy","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Recorded"}},"summary":"Record that an emoji was copied","tags":["emoji"]}},"/api/emoji/{slug}":{"get":{"operationId":"EmojiController_detail","parameters":[{"name":"slug","required":true,"in":"path","schema":{"example":"grinning-face","type":"string"}},{"name":"language","required":false,"in":"query","schema":{"default":"en","type":"string","enum":["en","es","fr","de","it","pt","ja","ko","zh","ar"]}}],"responses":{"200":{"description":""}},"summary":"Full detail for one emoji","tags":["emoji"]}},"/api/stats":{"get":{"operationId":"StatsController_getStats","parameters":[],"responses":{"200":{"description":""}},"summary":"Database and coverage statistics","tags":["meta"]}},"/api/platforms":{"get":{"operationId":"StatsController_platforms","parameters":[],"responses":{"200":{"description":""}},"summary":"Platform registry, including licence terms","tags":["meta"]}},"/api/languages":{"get":{"operationId":"StatsController_languages","parameters":[],"responses":{"200":{"description":""}},"summary":"Supported languages","tags":["meta"]}},"/api/health":{"get":{"operationId":"StatsController_health","parameters":[],"responses":{"200":{"description":""}},"summary":"Liveness and dependency health","tags":["meta"]}},"/api/admin/overview":{"get":{"operationId":"AdminController_overview","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Dashboard summary","tags":["admin"]}},"/api/admin/imports":{"get":{"operationId":"AdminController_listImports","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Recent import runs","tags":["admin"]}},"/api/admin/imports/{kind}":{"post":{"operationId":"AdminController_runImport","parameters":[{"name":"kind","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunImportDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Run an importer","tags":["admin"]}},"/api/admin/unicode/check":{"get":{"operationId":"AdminController_checkUnicode","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Check upstream for a newer Unicode emoji release","tags":["admin"]}},"/api/admin/jobs":{"get":{"operationId":"AdminController_jobStatus","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Background job status and schedule","tags":["admin"]}},"/api/admin/jobs/{name}":{"post":{"operationId":"AdminController_triggerJob","parameters":[{"name":"name","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Trigger a background job immediately","tags":["admin"]}},"/api/admin/emoji/{slug}/keywords":{"get":{"operationId":"AdminController_keywords","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"language","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Keywords for an emoji","tags":["admin"]}},"/api/admin/keywords":{"post":{"operationId":"AdminController_addKeyword","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertKeywordDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Add or update a manual keyword","tags":["admin"]}},"/api/admin/keywords/{id}":{"delete":{"operationId":"AdminController_deleteKeyword","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete a keyword","tags":["admin"]}},"/api/admin/aliases":{"post":{"operationId":"AdminController_addAlias","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertAliasDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Add an alias or shortcode","tags":["admin"]}},"/api/admin/aliases/{id}":{"delete":{"operationId":"AdminController_deleteAlias","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete an alias","tags":["admin"]}},"/api/admin/images":{"post":{"operationId":"AdminController_uploadImage","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadImageDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Upload platform artwork","tags":["admin"]}},"/api/admin/images/broken":{"get":{"operationId":"AdminController_brokenImages","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Images that failed validation","tags":["admin"]}},"/api/admin/images/{id}":{"delete":{"operationId":"AdminController_deleteImage","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete a stored image","tags":["admin"]}},"/api/admin/analytics/search":{"get":{"operationId":"AdminController_searchAnalytics","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Search analytics, including zero-result terms","tags":["admin"]}},"/api/admin/analytics/api":{"get":{"operationId":"AdminController_apiUsage","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"API usage by key","tags":["admin"]}},"/api/admin/api-keys":{"get":{"operationId":"AdminController_listKeys","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List API keys (hashes are never returned)","tags":["admin"]},"post":{"operationId":"AdminController_createKey","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Issue a new API key — the plaintext is shown once","tags":["admin"]}},"/api/admin/api-keys/{id}":{"delete":{"operationId":"AdminController_revokeKey","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Revoke an API key","tags":["admin"]}},"/api/admin/webhooks":{"get":{"operationId":"AdminController_listWebhooks","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List webhooks","tags":["admin"]},"post":{"operationId":"AdminController_createWebhook","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Register a webhook — the signing secret is shown once","tags":["admin"]}},"/api/admin/webhooks/{id}":{"delete":{"operationId":"AdminController_deleteWebhook","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete a webhook","tags":["admin"]}},"/api/admin/cache/clear":{"post":{"operationId":"AdminController_clearCache","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Rebuild the search index (the only server-side cache we own)","tags":["admin"]}}},"info":{"title":"Emojipedia API","description":"Complete Unicode emoji database, cross-platform render archive, and developer API.\n\nAnonymous access is rate limited. Supply an API key via `Authorization: Bearer <key>` or `X-API-Key: <key>` for a higher limit.\n\nNote on artwork: image URLs are only returned for platforms whose licence permits redistribution. Renderings from proprietary sets are described in the response with `licenseRestricted: true` and a null URL.","version":"1.0","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"},"api-key":{"type":"apiKey","in":"header","name":"X-API-Key"}},"schemas":{"RunImportDto":{"type":"object","properties":{"force":{"type":"boolean","description":"Re-download source files even if cached"},"dryRun":{"type":"boolean","description":"Parse and report without writing"},"emojiVersion":{"type":"string","description":"Override the Unicode emoji version, e.g. \"16.0\""},"locales":{"type":"array","items":{"type":"string","enum":["en","es","fr","de","it","pt","ja","ko","zh","ar"]}},"platforms":{"type":"array","items":{"type":"string","enum":["apple","google","samsung","microsoft","whatsapp","facebook","twitter","openmoji","noto","joypixels","noto-animated","joypixels-animated","microsoft-3d-fluent","microsoft-teams","twitter-stickers","toss-face","emojidex","huawei","lg","sony","htc","sharp","nec","serenityos","telegram","icons8","catrinity","skype","messenger","mozilla","discord","au-kddi","docomo","softbank","emojipedia"]}}}},"UpsertKeywordDto":{"type":"object","properties":{"emojiSlug":{"type":"string"},"language":{"type":"string","enum":["en","es","fr","de","it","pt","ja","ko","zh","ar"]},"keyword":{"type":"string"},"weight":{"type":"number","default":1,"description":"Ranking multiplier"}},"required":["emojiSlug","language","keyword"]},"UpsertAliasDto":{"type":"object","properties":{"emojiSlug":{"type":"string"},"alias":{"type":"string"},"source":{"type":"string","enum":["MANUAL","GITHUB","SLACK","DISCORD"],"default":"MANUAL"}},"required":["emojiSlug","alias"]},"UploadImageDto":{"type":"object","properties":{"emojiSlug":{"type":"string"},"platform":{"type":"string","enum":["apple","google","samsung","microsoft","whatsapp","facebook","twitter","openmoji","noto","joypixels","noto-animated","joypixels-animated","microsoft-3d-fluent","microsoft-teams","twitter-stickers","toss-face","emojidex","huawei","lg","sony","htc","sharp","nec","serenityos","telegram","icons8","catrinity","skype","messenger","mozilla","discord","au-kddi","docomo","softbank","emojipedia"]},"platformVersion":{"type":"string","example":"iOS 18.4"},"format":{"type":"string","enum":["svg","png","webp"]},"data":{"type":"string","description":"Base64-encoded file contents"},"resolution":{"type":"number","description":"Pixel width; omit for SVG"}},"required":["emojiSlug","platform","platformVersion","format","data"]},"CreateApiKeyDto":{"type":"object","properties":{"name":{"type":"string"},"rateLimitPerHour":{"type":"number","description":"Requests per hour; omit for the global default"},"isAdmin":{"type":"boolean","default":false},"expiresInDays":{"type":"number","description":"Days until expiry; omit for no expiry"}},"required":["name"]},"CreateWebhookDto":{"type":"object","properties":{"url":{"type":"string"},"events":{"type":"array","items":{"type":"string","enum":["UNICODE_RELEASE","PLATFORM_UPDATE","IMPORT_COMPLETED"]}}},"required":["url","events"]}}}}