Icons8 APIicons8.com ↗
Search millions of Icons8 icons by keyword and style. Returns icon metadata, 512px PNG URLs, and preview URLs. Two endpoints: search and list styles.
What is the Icons8 API?
The Icons8 API exposes 2 endpoints for discovering and retrieving icons from the Icons8 catalog. The search_icon endpoint accepts a keyword and an optional style code, returning a matching icon's ID, display name, platform, canonical name, and both a 512px image URL and a 100px preview URL. The list_styles endpoint enumerates every available style code, giving you the exact values to pass into search filters.
curl -X GET 'https://api.parse.bot/scraper/6087783d-8314-4fed-a664-6c222b7847db/search_icon?style=color&keyword=dog' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace icons8-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Icons8 API — search icons across visual styles, bounded and re-runnable."""
from parse_apis.icons8_api import Icons8, Style_, IconNotFound
client = Icons8()
# List available styles (single-page, cap iteration)
for style in client.styles.list(limit=5):
print(style.name, style.value)
# Search for an icon in a specific style
icon = client.icons.search(keyword="home", style=Style_.COLOR)
print(icon.name, icon.platform, icon.image_url)
# Handle not-found: some keyword+style combos have no results
try:
missing = client.icons.search(keyword="xyznonexistent", style=Style_.FLUENT)
print(missing.name)
except IconNotFound as exc:
print(f"No icon found for keyword: {exc.keyword}")
# Search without a style filter
dog_icon = client.icons.search(keyword="dog")
print(dog_icon.name, dog_icon.common_name, dog_icon.preview_url)
print("exercised: styles.list / icons.search / IconNotFound catch")
Search for a single icon by keyword and optional style. Returns the first matching icon with metadata and image URLs. The style parameter accepts any code from list_styles. When no icons match the keyword+style combination, returns input_not_found. Not all styles have icons for every keyword.
| Param | Type | Description |
|---|---|---|
| style | string | Style/platform code from list_styles (e.g. 'color', 'cotton', 'bubbles', 'dotty', '3d-fluency'). Not all styles have icons for every keyword. |
| keywordrequired | string | Search keyword (e.g. 'dog', 'home', 'car'). |
{
"type": "object",
"fields": {
"id": "string icon identifier",
"name": "string display name of the icon",
"platform": "string style/platform the icon belongs to",
"image_url": "string URL for 512px PNG",
"common_name": "string canonical name",
"preview_url": "string URL for 100px PNG preview"
},
"sample": {
"data": {
"id": "16018",
"name": "Dog",
"platform": "color",
"image_url": "https://img.icons8.com/?size=512&id=16018&format=png",
"common_name": "dog",
"preview_url": "https://img.icons8.com/?size=100&id=16018&format=png"
},
"status": "success"
}
}About the Icons8 API
What the API Returns
The search_icon endpoint takes a required keyword (such as dog, home, or car) and an optional style parameter, then returns the first matching icon. The response includes six fields: id (a unique icon identifier), name (display name), platform (the style or platform the icon belongs to), common_name (canonical name), image_url (a 512px PNG), and preview_url (a 100px PNG thumbnail). If no icon matches the keyword-and-style combination, the endpoint returns input_not_found rather than an empty result set, so callers can distinguish a bad query from a real empty state.
Discovering Available Styles
The list_styles endpoint returns an array of style objects, each containing a name (human-readable display label) and a value (the code you pass as the style param to search_icon). Style codes cover a wide range including colorful sets like color, illustrative sets like cotton and bubbles, and minimalist options. The keyword input on list_styles is optional and does not filter the returned list — the full catalog of styles is returned regardless.
Behavior and Scope
Both endpoints are read-only and require only a keyword string to return results. The search_icon endpoint returns a single best-match icon, not a paginated list. There is no endpoint for retrieving multiple icons per query in one call, nor for filtering by icon size, file format beyond PNG, or tags beyond keyword and style. The platform field in the response mirrors the style code used in the request, which is useful for confirming which style set the returned icon came from.
The Icons8 API is a managed, monitored endpoint for icons8.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when icons8.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official icons8.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Auto-populate app UI mockups with matching icons by keyword and preferred visual style
- Build a style preview tool that iterates over all
list_stylesvalues and shows the same keyword rendered in every available style - Validate icon availability for a given keyword before including it in a design system
- Generate icon reference sheets by looping keywords and capturing the
preview_urlthumbnails - Embed contextually relevant icons in documentation or README files using the
image_url512px PNGs - Power an icon search widget in a CMS that maps user queries to Icons8 results by keyword
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Icons8 have an official developer API?+
What does search_icon return when no icon matches a keyword and style combination?+
input_not_found rather than an empty array. This lets you distinguish a genuinely missing result from a query error. If you drop the style parameter and search by keyword alone, you are more likely to get a result since the filter is less restrictive.Does the API return multiple icons per search query or support pagination?+
search_icon returns only the single best-matching icon for a keyword and style combination. There is no pagination and no multi-result response. You can fork this API on Parse and revise the endpoint to add multi-result or paginated responses if your use case requires browsing several options per keyword.Can I retrieve icons in formats other than PNG, such as SVG or WebP?+
image_url field provides a 512px PNG and preview_url provides a 100px PNG. No SVG, WebP, or other format URLs are returned by either endpoint. You can fork this API on Parse and revise it to add an SVG URL field if that format is available for a given icon.Are all Icons8 style codes stable, or do they change over time?+
list_styles endpoint always returns the current full set of styles, so calling it before building a style selector is the safest approach. Hardcoding style codes like color or cotton is practical for common styles, but less common codes may be added or renamed. Calling list_styles programmatically keeps your style list in sync.