HTTP API · v1 · No API key

PNG icon API for social & messenger brands

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.

Open Icon Picker Guides About Footerico

Quick start

Minimal request: flat logo, brand colors, 64×64 px.

Embed in HTML:

Instagram icon preview

Live preview from the URL above.

Endpoints

GET/v1/categories Categories

Returns the catalog category list (id, label) for building tabs or filters in a third-party UI.

No query or path parameters.

Examples

https://api.footeri.co/v1/categories

Response

{
  "categories": [
    { "id": "messengers", "label": "Messengers" }
  ]
}
GET/v1/brands Brand catalog

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.

Examples

https://api.footeri.co/v1/brands
https://api.footeri.co/v1/brands?category=messengers

Response

{
  "brands": [
    {
      "id": "telegram",
      "name": "Telegram",
      "category": "messengers",
      "tags": ["tg", "chat", "messenger"],
      "iconUrl": "https://api.footeri.co/v1/icons/telegram.png"
    }
  ]
}
GET/v1/icons/{brandId}.png Render PNG

Returns a single styled PNG for a bundled brand. Omit any parameter below to use its default.

Parameter Type Description
brandId string (path) Kebab-case brand id (e.g. telegram, instagram). See brand list or GET /v1/brands.
size integer Optional. Listed sizes: 16, 32, 64, 128; any integer 16–128 also works. Default 64 (64×64 PNG). With retina, PNG pixels are min(size × 2, 256).
shape enum Background shape: circle · round · square. Default: flat logo, no shape (also settable explicitly as none).
color enum | hex Style color: brand · black · gray · white, or a 6-digit hex (e.g. 3ef941; a leading # is accepted too, URL-encoded as %23). Default brand.
radius integer Corner radius in px at the current size (1 … floor(size/2)-1). Only when shape=round. Default 10 at size 64, scaled proportionally for other sizes.
border flag Outline around the shape. Requires a shape. Use ?border or border=true.
retina flag Render a 2× PNG for high-DPI displays. Query size stays logical. Use ?retina or retina=true.

Examples

https://api.footeri.co/v1/icons/telegram.png
https://api.footeri.co/v1/icons/instagram.png?shape=circle
https://api.footeri.co/v1/icons/telegram.png?size=64&shape=round&radius=12&color=black&border
https://api.footeri.co/v1/icons/x.png?size=128&shape=square&color=3ef941
https://api.footeri.co/v1/icons/telegram.png?size=32&shape=circle&retina

HTTP methods

Method Description
GET Return PNG body with headers.
HEAD Same headers as GET without a body.
OPTIONS CORS preflight. Returns 204 with allowed methods.

Other methods receive 405 Method Not Allowed.

Errors

Error responses use text/plain; charset=utf-8.

Status When
400Invalid query parameters
404Unknown brandId or unknown path
405Method not allowed
500Internal error

Example 400 messages

  • 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.

ID Name Category