API reference
Icons
GET /v1/icons/search
Icons with names, aliases, and embeddings. Search by meaning, serve from the CDN.
Icon sets where every icon has a name, a plain-language description, aliases, and an embedding. Search by meaning, then hotlink or download the PNG or SVG from our CDN. Nothing is served through the API.
MCP: search_icons, get_icon
Two sets ship first. They hold the same icons drawn two ways.
| Set | Style | Size |
|---|---|---|
pixelset |
16-bit village pixel art, dark outlines, warm palette | 128 px PNG with alpha, and lossless SVG |
lineset |
Lucide-style line, even 2 px stroke, moss ink | 160 px (ingredients) or 512 px PNG with alpha, and SVG |
Collections inside a set: ingredients, food-categories, book-genres, general (everyday UI icons), and business (analytics and partnership icons: gem, eye, target, handshake, wallet, and more) in both sets, plus village (the site's own icons) in Pixelset.
Browse on the site at /icons/pixel and /icons/line; each icon has a page at /icons/{style}/{collection}/{slug}, e.g. /icons/pixel/ingredients/wheat.
Search by meaning
GET /v1/icons/search?q=something%20spicy&set=pixelset
| Query | Notes |
|---|---|
q |
Plain words. Required. Name and alias matches rank first, then full text, then vector similarity |
set |
pixelset · lineset. Omit to search both |
collection |
e.g. ingredients |
limit |
Default 24, max 100 |
Each hit carries score (0–1) and match: name, alias, text, or semantic. semantic in the response body tells you whether the vector leg ran. Strong name or alias matches answer from Postgres alone; only vaguer phrasing waits for the embedding model, and repeat queries reuse a cached vector.
Embeddings are @cf/baai/bge-small-en-v1.5 (384 dims), the same model for stored icons and for your query.
Get one icon
GET /v1/icons/{id}
GET /v1/iconsets/{set}/{collection}/{slug}
id is fds_ic_…. The path form mirrors the CDN key, so pixelset/ingredients/wheat is stable across releases. Both return the icon plus siblings: the same slug in the other sets.
{
"id": "fds_ic_2f5dbd205d00da544f45",
"set": "pixelset",
"collection": "ingredients",
"slug": "wheat",
"name": "Wheat and flour",
"description": "Pixel-art icon of single wheat stalk with grains along the head. Village 16-bit style with dark outlines. From the ingredients collection.",
"aliases": ["flour", "grain", "gluten", "bread flour", "cereal grain", "barley", "rye"],
"cdn_url": "https://cdn.fulldatasets.com/fulldatasets/icons/pixelset/ingredients/wheat.png",
"svg_url": "https://cdn.fulldatasets.com/fulldatasets/icons/pixelset/ingredients/wheat.svg",
"svg_bytes": 3120,
"width": 128,
"height": 128,
"bytes": 1488,
"license": "CC-BY-4.0",
"siblings": [{ "set": "lineset", "cdn_url": "https://cdn.fulldatasets.com/fulldatasets/icons/lineset/ingredients/wheat.png" }]
}
List and sets
GET /v1/iconsets
GET /v1/icons?set=lineset&collection=book-genres&limit=200
Lists page with next_cursor.
Get the file
GET /v1/iconsets/{set}/{collection}/{slug}.svg
GET /v1/iconsets/{set}/{collection}/{slug}.png
Both 302 to the file on the CDN, so an agent can hand a client one API URL and let the browser follow it. ?format=svg works too.
Use the PNG or SVG
Every cdn_url and svg_url is a public object on Cloudflare R2 behind cdn.fulldatasets.com, cached for a year and immutable per release. Hotlink it or download it; there is no auth and no meter.
Pixelset SVGs are the pixel grid itself, one path per colour with shape-rendering="crispEdges", so they scale to any size with hard pixel edges and no blur. Lineset SVGs are traced single-colour paths in moss ink #243226; recolour them with fill.
<img src="https://cdn.fulldatasets.com/fulldatasets/icons/pixelset/ingredients/wheat.png" width="32" height="32" alt="Wheat" style="image-rendering: pixelated">
Pixelset icons want image-rendering: pixelated so browsers keep the pixels crisp when scaling. Lineset icons scale normally.
License
Icons are CC BY 4.0. Credit “Icons by FullDatasets” with a link to https://fulldatasets.com/datasets/icons. The catalog rows (names, aliases, descriptions) are CC0.