Menu

Edge API

Icon data, SVG, CSS and semantic search from https://api.iconavo.dev, compatible with the Iconify API addresses. The API is public and free, with no key. It runs on Cloudflare Workers on top of the versioned static files of cdn.iconavo.dev.

Icon names follow set:icon, for example lucide:heart. Both parts use lowercase Latin letters, digits and single hyphens.

Icon data: /{set}.json?icons=a,b

Returns several icons of one set in IconifyJSON format.

Text
GET https://api.iconavo.dev/lucide.json?icons=heart,home,nope
JSON
{
  "aliases": { "home": { "parent": "house" } },
  "height": 24,
  "icons": { "heart": { "body": "…" }, "house": { "body": "…" } },
  "lastModified": 1792571709,
  "not_found": ["nope"],
  "prefix": "lucide",
  "width": 24
}

SVG: /{set}/{icon}.svg

Text
GET https://api.iconavo.dev/lucide/heart.svg?color=red&height=64

Without parameters, the SVG is byte for byte the static file from cdn.iconavo.dev: height 1em, width in proportion.

ParameterValues
colorReplaces currentColor. Accepts hex with or without # (ff0000, #f00), a color name (red), or rgb(), rgba(), hsl(), hsla(). Has no effect on multicolor icons.
width, heightA number with an optional CSS unit (24, 2em, 50%), auto for the icon's own size, or unset / none to omit the attribute. If only one is set, the other follows the aspect ratio.
rotate90deg, 180deg, 270deg, or quarter turns 1, 2, 3.
fliphorizontal, vertical, or both, comma-separated. Flip is applied before rotation.
box1 adds a transparent rectangle the size of the view box, for editors that ignore viewBox.
download1 sends the file as an attachment.

CSS: /{set}.css?icons=a,b

HTML
<link rel="stylesheet" href="https://api.iconavo.dev/lucide.css?icons=heart,house">
<span class="icon--lucide icon--lucide--heart"></span>
ParameterValues
colorSame values as for SVG. Switches to background mode unless mode is set.
modemask or background (bg). By default it is detected from the icon.
square1 makes non-square icons square.
formatexpanded (default), compact or compressed.
download1 sends the file as an attachment.

Search: /search?query=…

Hybrid search over all icon sets: words (names, tags, Russian and English synonyms) plus meaning (embeddings). It understands Russian and English and finds icons by what they show, not only by their names.

Text
GET https://api.iconavo.dev/search?query=trash%20can&limit=4
JSON
{
  "icons": ["lucide:trash", "tabler:trash", "ph:trash", "material-symbols:delete"],
  "limit": 4,
  "results": [
    { "icon": "lucide:trash", "tones": [], "variants": [] },
    { "icon": "ph:trash", "tones": [], "variants": ["trash-bold", "trash-duotone"] }
  ],
  "semantic": "full",
  "start": 0,
  "total": 4
}
ParameterValues
queryRequired, up to 100 characters, in any language.
limit1–96 results, 64 by default.
startIndex of the first result; start + limit is at most 1000.
prefix, prefixesOne icon set, or several separated by commas.
palette1 — multicolor sets only, 0 — monochrome sets only.
licenseSPDX license ids separated by commas, for example MIT,ISC.

Errors

Errors are short JSON with an HTTP status:

JSON
{ "error": "set_not_found", "message": "Icon set \"foo\" not found", "status": 404 }
StatusCodes
400icons_required, too_many_icons, duplicate_parameter, invalid_parameter, invalid_color, invalid_size, invalid_rotate, invalid_flip, invalid_mode, invalid_format; search: query_required, invalid_limit, invalid_start, invalid_prefix, invalid_license
404not_found (unknown address), set_not_found, icon_not_found
405method_not_allowed: only GET, HEAD and OPTIONS are allowed
429rate_limited: too many searches, retry after a minute
503storage_unavailable: retry later. The static files on cdn.iconavo.dev and cdn2.iconavo.dev keep working. search_unavailable: the search service is down, retry later; icons keep working.

Differences from the Iconify API

Invalid values are rejected with 400 instead of being silently ignored. Search results group style variants into one result, and /search does not return the collections block yet. For example, rotate=90 means 180° on Iconify; here it is an error. Use 90deg or 1 instead.

These are not supported:

/collections, /collection and /last-modified are planned.

Caching and headers

Edit this page on GitHub