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.signalsWhy the result looks the way it does: where the primary color came from, what else the site declared, and a ready-to-show explanation sentence.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
Authorization: Bearer mm_live_…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.signalsobjectThe provenance behind confidence - why the result looks the way it does. primarySource says where colors.primary came from, strongest first: css-var (the site's own brand variable) > theme-color > logo (sampled from its SVG mark) > usage (inferred from frequency - a guess, not a declared token). explanation is a ready-to-show sentence saying how much was declared vs inferred; surface it instead of the raw score when you are showing a result to a person.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. packCredits appears only when you hold a credit pack: the never-expiring balance left after this call.Example request
https://miromiro.app/api/v1/extract?url=stripe.com&access_key=mm_live_…