API reference
Free HTTP endpoints for builders. No key, no signup, no SDK — just curl.
POST/api/icons
Send an image, get back icons.zip with every size and format your platforms need — the same output as the browser icon generator, generated server-side so you can script it.
Build a request
Runs against this site — nothing is stored.curl -X POST --data-binary @"logo.png" \
"https://dibbed.dev/api/icons?platforms=web,pwa&bg=0ea5e9" \
-o icons.zipRequest body
Raw image bytes — image/png, image/jpeg, or image/webp. Max 10 MB and 1024×1024 px — icons are generated at 1024 max, so larger sources gain nothing. Square sources between 512 and 1024px are the sweet spot; for bigger files, resize first or use the browser generator, which handles any size locally.
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| platforms | string | "web" | Comma-separated sets to include: web, pwa, android, ios. Unknown values are ignored. |
| bg | string | "ffffff" | Hex background (no #) used where transparency isn't allowed: iOS icons and maskable PWA icons. |
Responses
| Status | Content-Type | Description |
|---|---|---|
| 200 | application/zip | icons.zip, sent with a Content-Disposition attachment header. |
| 400 | text/plain | Empty body, or no valid platform in ?platforms=. |
| 405 | text/plain | Method is not POST. The body is usage help. |
| 413 | text/plain | Image larger than 10 MB or 1024×1024 px. |
| 422 | text/plain | Body is not a decodable PNG, JPEG, or WebP. |
What's in the ZIP
| Platform | Files |
|---|---|
| web | favicon.ico (16/32/48) · favicon-16x16/32x32/48x48.png · apple-touch-icon.png (180) |
| pwa | icon-192/512.png · maskable variants of both · site.webmanifest |
| android | mipmap-mdpi → mipmap-xxxhdpi/ic_launcher.png (48–192) |
| ios | AppIcon.appiconset/ (17 sizes + Contents.json), drag-droppable into Xcode |
| always | README.txt with the exact <head> tags to paste |
curl -X POST --data-binary @logo.png \
"https://dibbed.dev/api/icons?platforms=web,pwa,android,ios&bg=0ea5e9" \
-o icons.zipconst res = await fetch(
"https://dibbed.dev/api/icons?platforms=web,pwa",
{ method: "POST", body: await file.arrayBuffer() },
);
const zip = await res.blob(); // application/zip- name: Rebuild icon pack
run: |
curl -sf -X POST --data-binary @assets/logo.png \
"https://dibbed.dev/api/icons?platforms=web,pwa" -o icons.zip
unzip -o icons.zip -d public/GET/api/check
The data behind the name checker, as JSON — the same endpoints the results page streams from. CORS is open (*), so it works straight from a browser app.
Build a request
Runs against this site — cold names take a few seconds.curl "https://dibbed.dev/api/check?name=acme"Endpoints & parameters
| Endpoint | Returns |
|---|---|
| /api/check | Everything: all 33 results, the brand-strength verdict, and alternative suggestions for weak names. Cold names take 2–3s; repeats within ~6h are served from cache in milliseconds. |
| /api/check/{category} | One category — domains, apps, dev, socials, or trademark. Individually cached and fast. |
| ?name= | Required on both — the name to check, 1–64 characters. |
Responses
| Status | Content-Type | Description |
|---|---|---|
| 200 | application/json | The check payload — see the TypeScript type. |
| 400 | application/json | Missing or too-long ?name=. |
| 404 | application/json | Unknown category in the path. |
| 502 | application/json | Upstream checks failed — retry shortly. |
curl "https://dibbed.dev/api/check?name=acme"
curl "https://dibbed.dev/api/check/domains?name=acme"type Status = "available" | "taken" | "manual" | "unknown";
interface CheckResult {
service: string; // ".com", "GitHub", "USPTO", ...
category: "domain" | "app" | "social" | "trademark";
status: Status;
url?: string;
note?: string;
details?: Record<string, string | number | undefined>;
}
// GET /api/check?name=
interface CheckResponse {
checkedAt: string; // ISO 8601
name: string;
results: CheckResult[];
strength: {
tier: "strong" | "moderate" | "weak" | "conflict";
score: number; // 0-100
summary: string;
};
suggestions?: { domain: string; tld: string; price?: string }[];
}
// GET /api/check/{category}?name=
interface CategoryResponse {
name: string;
category: string;
checkedAt: string;
results: CheckResult[];
}Authentication & fair use
There's no API key and no account. Be reasonable — heavy automated traffic may be rate-limited. If you're building something that needs volume, email us first.
Privacy
Uploaded images are processed in memory and never written to storage or logged. If you'd rather not upload at all, the browser version does identical work locally with the Canvas API.
Changelog
- 2026-06 —
GET /api/checklaunched: the full name check (and per-category endpoints) as JSON. The results page now streams from these same endpoints. - 2026-06 — Source images are now capped at 1024×1024 px with a clear 413 (previously, very large uploads could fail opaquely under CPU limits). Icons are generated at 1024 max, so nothing is lost.
- 2026-06 —
POST /api/iconslaunched, with an OpenAPI 3.1 spec at /api/openapi.json.