Need Instagram, Telegram, or X in a footer or newsletter? Request a PNG with one GET.
Size, shape, and color live in the query string: drop the URL into <img>, a CMS field, or email HTML.
Open CORS. No signup. Icons update at the source so you do not redeploy a folder of files.
Returns brands for a picker or grid. Each item includes id, name, category, tags, and an absolute iconUrl for the default PNG. Discontinued brands are omitted by default.
Parameter
Type
Description
category
string
Filter by topic. One of social-networks · messengers · files · others. Omit for all categories.
category must be one of: social-networks, messengers, files, others
size must be an integer between 16 and 128
shape must be one of: circle, round, square
border requires shape other than none
color must be brand, black, gray, white, or RRGGBB hex (6 digits, no #)
radius is only valid when shape=round
CORS
Every response, including HEAD and error responses, includes Access-Control-Allow-Origin: *,
so icons work from any origin in <img src="…"> or fetch from browser apps.
Caching
PNG responses carry Cache-Control: public, max-age=86400, stale-while-revalidate=604800 and an ETag.
Send that ETag back as If-None-Match to get a bodyless 304 Not Modified instead of re-downloading the PNG.
Catalog JSON (/v1/categories, /v1/brands) carries Cache-Control: public, max-age=300, stale-while-revalidate=86400 and does not set an ETag.
A brand's logo can change behind the same PNG URL: the browser revalidates on the schedule above, so cached copies pick up a rebrand within a day at the outside.
Limitations
Listed size steps: 16, 32, 64, 128; any integer 16–128 also works. Default 64. With retina, the PNG can be up to 256 px.
Catalog JSON: /v1/categories and /v1/brands. PNG: /v1/icons/{brandId}.png. No batch render endpoint.
Output format is PNG only.
Brand IDs
Use these ids in the path, or fetch GET /v1/brands. Reference this table or the Icon Picker.