API reference

Free HTTP endpoints for builders. No key, no signup, no SDK — just curl.

Base URL https://dibbed.devNo authenticationFreeOpenAPI spec ↓

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.
platforms
Your request
curl -X POST --data-binary @"logo.png" \
  "https://dibbed.dev/api/icons?platforms=web,pwa&bg=0ea5e9" \
  -o icons.zip
Choose an image (≤10 MB, ≤1024×1024) to run it from here.

Request 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

ParameterTypeDefaultDescription
platformsstring"web"Comma-separated sets to include: web, pwa, android, ios. Unknown values are ignored.
bgstring"ffffff"Hex background (no #) used where transparency isn't allowed: iOS icons and maskable PWA icons.

Responses

StatusContent-TypeDescription
200application/zipicons.zip, sent with a Content-Disposition attachment header.
400text/plainEmpty body, or no valid platform in ?platforms=.
405text/plainMethod is not POST. The body is usage help.
413text/plainImage larger than 10 MB or 1024×1024 px.
422text/plainBody is not a decodable PNG, JPEG, or WebP.

What's in the ZIP

PlatformFiles
webfavicon.ico (16/32/48) · favicon-16x16/32x32/48x48.png · apple-touch-icon.png (180)
pwaicon-192/512.png · maskable variants of both · site.webmanifest
androidmipmap-mdpi → mipmap-xxxhdpi/ic_launcher.png (48–192)
iosAppIcon.appiconset/ (17 sizes + Contents.json), drag-droppable into Xcode
alwaysREADME.txt with the exact <head> tags to paste
cURL
curl -X POST --data-binary @logo.png \
  "https://dibbed.dev/api/icons?platforms=web,pwa,android,ios&bg=0ea5e9" \
  -o icons.zip
JavaScript
const res = await fetch(
  "https://dibbed.dev/api/icons?platforms=web,pwa",
  { method: "POST", body: await file.arrayBuffer() },
);
const zip = await res.blob(); // application/zip
GitHub Actions
- 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.
scope
Your request
curl "https://dibbed.dev/api/check?name=acme"

Endpoints & parameters

EndpointReturns
/api/checkEverything: 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

StatusContent-TypeDescription
200application/jsonThe check payload — see the TypeScript type.
400application/jsonMissing or too-long ?name=.
404application/jsonUnknown category in the path.
502application/jsonUpstream checks failed — retry shortly.
cURL
curl "https://dibbed.dev/api/check?name=acme"
curl "https://dibbed.dev/api/check/domains?name=acme"
Response type (TypeScript)
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/check launched: 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/icons launched, with an OpenAPI 3.1 spec at /api/openapi.json.