Docs/Brand

GET/v1/brand15 credits

Brand

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

  • Build UI "in the style of" a reference site - feed the colors and fonts to your generator.
  • Pre-fill a brand kit or theme from just a domain - colors, fonts, logo and social links in one call.
  • Power "trusted by" logo strips with a live logo URL.
Parameters
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 below
renderoptionalLoad 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 values
titlePage / 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

urlrequired
fields

Nothing selected returns the full response.

render
fresh
screenshot

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 }
}
Response fields
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"