Docs/Brand
/v1/brand15 creditsThe curated brand identity: color roles (primary, accent, background, text) with human-readable color names, the clean brand palette, primary fonts, the logo, the social share image, the brand's social profiles, and a 0-1 confidence score. The opinionated view - start here. Add &fields= to return only the parts you need.
urlrequiredThe page to extract from. With or without protocol (https:// is assumed).fieldsoptionalComma-separated list of fields to return (e.g. fields=logo,palette). Omit for the full object. url is always included. Trims the response only - the credit cost is unchanged. see the fields table belowrenderoptionalLoad the page in a real browser and run its JavaScript before extracting. Use for client-rendered sites (React, Next, SPAs) where the default static fetch returns little - runtime-injected images, styles, media and Lotties become visible. Slower (a real page load), and adds 5 credits to the call. Cache hits stay free. You rarely have to guess: when a static extraction comes back thin because the page is client-rendered, the response includes a top-level hint field telling you to retry with render=true. true · false (default)freshoptionalSkip the 24-hour cache and re-extract from the live page. Use it when you know the site just changed (a redeploy, a rebrand) and a cached copy would be stale. The call is charged normally - the extraction really runs - and the fresh result replaces the cached copy for the next caller. Off by default: identical repeat calls within 24 hours are served from cache at 0 credits. true · false (default)screenshotoptionalRequires render=true. The same real browser that renders the page also captures a screenshot - true for the 1440x900 viewport, full for the entire page height. The response gains a screenshot field with a public image URL that stays live for 7 days. No extra credits beyond the render surcharge. Captured on fresh extractions - a cache hit returns the screenshot stored with the cached result (pass fresh=true to force a new one). true · full · false (default)fields valuestitlePage / og:title - usually the brand name.descriptionMeta / og:description of the site.siteNameog:site_name, when the page declares one.themeColorThe <meta name="theme-color"> the site declares about itself, when present.themeWhether the site's default presentation is dark or light.colorsColor roles: primary, accent, background, text.colorNamesHuman-readable names for the role colors ("Royal Blue"), parallel to colors.paletteFull brand palette, each { color, count, name }, brand colors first.fontsPrimary font families, most-prominent first.typographyFonts split by role: { primary, mono }.logoBest single logo / icon URL.logosAll logo / icon candidates, each tagged by source.ogImageThe og:image social share URL, when present.socialsSocial profiles found on the page, one per platform: { platform, url, handle }.confidence0-1 score: how much of the identity the site declared vs how much was inferred.Build a request
GEThttps://miromiro.app/api/v1/v1/brand?url=stripe.com
urlrequiredfieldsNothing selected returns the full response.
renderfreshscreenshot Options at their default are left out of the URL - the API assumes them. Auth isn't shown here: send your key as an Authorization: Bearer header (see the example below).
Response
{
"url": "https://stripe.com",
"selector": "section.hero-section-container",
"autoDetected": true,
"sections": [
{ "selector": "section.hero-section-container", "label": "Financial infrastructure…", "elements": 343 },
{ "selector": "section.business-sizes-section", "label": "Powering businesses of all sizes.", "elements": 604 },
…
],
"framework": "tailwind",
"code": "<section class=\"relative w-full\">\n <h1 class=\"text-[#000000] …\">…</h1>\n</section>",
"css": null,
"tokens": {
"colors": ["#000000", "#533afd"],
"fontFamilies": ["sohne-var"],
"fontSizes": ["48px", "16px"],
"spacing": ["16px", "24px"],
"radii": ["8px"],
"shadows": ["0 2px 4px rgba(0,0,0,.1)"]
},
"theme": "light",
"assets": { "images": ["https://…/hero.png"], "fonts": [] },
"summary": { "elements": 42, "declarations": 310, "mappedToTailwind": 180, "arbitrary": 44, "styledCoverage": 97, "repeatedGroups": 1, "truncated": false },
"usage": { "creditsSpent": 25, "creditsThisMonth": 25, "monthlyLimit": 100, "remaining": 75, "cached": false }
}urlstringThe resolved URL that was extracted.titlestring | nullPage / og:title - usually the brand name.descriptionstring | nullMeta / og:description of the site.siteNamestring | nullog:site_name, when the page declares one.themeColorstring | nullThe <meta name="theme-color"> the site declares, when present. A vivid theme-color also outranks usage-count guessing when picking colors.primary.theme'dark' | 'light'Whether the site's default presentation is dark or light. background and text are picked to match.colors.primarystring | nullThe brand color, as hex. Read from the site's own signals in order: a brand-role CSS variable (--color-brand, --accent, …) > a vivid theme-color > the site's SVG logo > most-used vivid color.colors.accentstring | nullSecondary / accent color, same signal order.colors.backgroundstring | nullPage background color, theme-aware (dark sites return their real dark background).colors.textstring | nullPrimary body-text color, theme-aware.colorNamesobjectHuman-readable names for the role colors ("Royal Blue" for #533afd) - nearest CSS color name, parallel to colors. For labeling swatches without shipping your own color-naming code.palette[]arrayFull brand palette (up to 12 colors, near-duplicate shades merged), each { color, count, name }, brand colors first.fonts[]string[]Primary font families (up to 4), most-prominent first.typographyobjectFonts split by role: the primary text face and the monospace face, when the site uses one.logostring | nullBest-guess logo / icon URL.logos[]arrayEvery logo / icon candidate, each { url, source, sizes }. source ∈ icon, apple-touch-icon, mask-icon, og.ogImagestring | nullThe og:image social share URL, when present.socials[]arraySocial profiles found on the page - JSON-LD sameAs first, then anchor links; one per platform. platform ∈ x, github, linkedin, youtube, instagram, facebook, tiktok, threads, bluesky, dribbble, discord, twitch, producthunt, crunchbase.confidencenumber0-1: how much of this identity the site declared vs how much was inferred. ≥0.8 = role colors came from the site's own CSS variables or theme-color plus a real logo and fonts; ≤0.4 = mostly usage-count heuristics. Gate on this before applying a brand automatically in bulk.usageobjectMetering for this call: credits spent this month, your monthly cap (null = unlimited), credits remaining, what this call cost (0 on cache hits), and whether it was served from the 24-hour cache.Example request
curl "https://miromiro.app/api/v1/code?url=stripe.com&framework=jsx" \
-H "Authorization: Bearer $MIROMIRO_API_KEY"
# Client-rendered site (React, Next, SPA)? Add render=true to run its
# JavaScript in a real browser first (+5 credits):
curl "https://miromiro.app/api/v1/code?url=stripe.com&framework=jsx&render=true" \
-H "Authorization: Bearer $MIROMIRO_API_KEY"