Extract brand identity
extract_brandUse when the user wants a site's brand: its colors, fonts, logo, theme or social links - 'what colors does stripe use', 'match this brand', 'build something in the style of X'. Returns role colors (primary, accent, background, text) as hex with human-readable names, the wider palette, fonts by role, logo candidates, social profiles, dark/light theme, and a 0-1 confidence score with signals explaining where the colors came from: read signals.explanation and tell the user whether they were declared by the site ('css-var'/'theme-color') or inferred from usage frequency ('usage', a guess) - never present inferred colors as the official palette. Not for: markup or layout (use extract_code) or the full token list (use extract_design_tokens).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The website URL, e.g. stripe.com | |
| fresh | No | Skip the 24-hour cache and re-extract the live page - use when the site just changed and a cached result would be stale. Charged normally; the fresh result replaces the cached copy. | |
| render | No | Force a real browser so the page's JavaScript runs before it is read. Slower, and adds 5 credits. Usually not needed: when the plain read comes back as a JavaScript app shell or the site refuses it (401/403/406) or timed out, the server already re-runs the page in a browser by itself at no extra cost, and usage.autoRender says so. Pass it for images, videos or Lottie that only load on scroll, with screenshot=true, or when a result is still thin after that automatic pass. If a 403 says the browser was refused too, the site cannot be extracted - do not retry. extract_code always runs in a real browser at no extra cost, so render=true is not needed there (only together with screenshot=true). On extract_design_tokens, render=true only permits the browser: the plain read still runs first, and the 5 credits are charged only if the browser was actually needed. | |
| screenshot | No | Requires render=true. Adds a screenshot field to the result: a public URL of a capture of the page (live 7 days), taken by the same browser that rendered it. Pass true for the 1440x900 viewport or 'full' for the entire page height. No extra credits beyond the render surcharge. Useful for showing the user what the extracted site looks like. | |
| response_format | No | How much to return. 'concise' keeps lists to 10 entries and strings short - right for a summary or a chat answer. 'detailed' returns everything the tool has (same as limit=200 + full_output=true). Omit for the default, which fits a typical chat context. The generated code is never trimmed in any mode. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| logo | No | The site's real logo when we found one: the wordmark from its header, read in a real browser and hosted by MiroMiro (permanent URL, safe to embed); otherwise its best declared icon. Show this one to the user. | |
| next | No | The most likely follow-up call for this result, with the tool and arguments to use. Offer it to the user when it fits what they are doing. | |
| fonts | No | ||
| logos | No | All logo/icon candidates, tagged by source: header (the wordmark, hosted, with background light|dark it is drawn for), icon, apple-touch-icon, mask-icon, og | |
| theme | No | dark | light | |
| title | No | Page/og title - the brand name | |
| usage | No | Credit usage for the authed key (spent, remaining, monthly limit). | |
| colors | No | Role colors as hex: primary, accent, background, text | |
| ogImage | No | ||
| palette | No | The wider brand palette | |
| signals | No | WHY the result looks the way it does - the provenance behind `confidence`. Read `signals.explanation` and tell the user what it says instead of quoting the confidence number, which means nothing to them on its own. `primarySource` is the key field: 'css-var' or 'theme-color' means the site declared these colors and they are its real tokens; 'logo' means they were sampled from its logo; 'usage' means nothing was declared and the colors are a frequency-based GUESS - say so rather than presenting them as the brand's official palette. | |
| socials | No | Social profiles found on the page | |
| siteName | No | ||
| colorNames | No | Human-readable names for the role colors ("Royal Blue") | |
| confidence | No | 0-1: how much the site declared vs how much was inferred | |
| themeColor | No | The site's own declared theme-color | |
| typography | No | Fonts split by role: primary, mono | |
| description | No | ||
| logoVariants | No | The header logo per background: onLight is the file for a light background, onDark for a dark one. A one-color logo gets a recolored copy for the other background; a multi-color one only has its original. null when no header logo was found. | |
| truncation_note | No | Present when the result was trimmed to fit chat context - says what was dropped and how to get more (limit / full_output arguments, or the REST API). |