Point your agent at any website and it builds from the real code, colors and fonts - not hallucinated ones.
300 free credits every month. No credit card.
Works with your agent
Every way you feed it a reference site today loses the design on the way in.
Guessed hexes, no real font.
HTML soup - the tokens don’t survive.
Default indigo and Inter, every time.
Every call is a GET with a URL and a bearer token, and every response is typed JSON. Request a section and get a working component; request the design and get tokens, assets and fonts.
GET /v1/codeconst API_KEY = process.env.MIROMIRO_API_KEY
export const extractCode = async (url) => {
const params = new URLSearchParams({ url, framework: 'jsx' })
const res = await fetch(`https://miromiro.app/api/v1/code?${params}`, {
headers: { Authorization: `Bearer ${API_KEY}` },
})
if (!res.ok) {
// Failures return { statusCode, statusMessage }
const { statusMessage } = await res
.json()
.catch(() => ({ statusMessage: res.statusText }))
throw new Error(`MiroMiro /code failed (${res.status}): ${statusMessage}`)
}
return res.json()
}
extractCode('https://stripe.com').then(console.log)Real responses for stripe.com, captured from the live API. Pick an endpoint to see what comes back.
stripe.com
Description
Stripe is a financial services platform that helps all types of businesses accept payments, build flexible billing models, and manage money movement.
Colors
Typography
sohne-var
The quick brown fox jumps over
SourceCodePro
The quick brown fox jumps over
Logos
Social profiles
Want more than one example? Browse the same output for 21 well-known sites - Stripe, Spotify, Linear, Figma and more.
Four jobs it does on day one. Each one is a full walkthrough with the real calls and what they cost.
Your agent reads the real tokens of any reference site before it writes UI - so what it builds matches the reference, not an estimate of it.
Ask a new customer for their URL at signup and their workspace is themed in their own colors on first render.
Diff what production actually renders against your design tokens in CI - and catch the rogue hex at one, not eleven.
Port a hero or pricing table you like into your own stack - as Tailwind, HTML, JSX or Vue, with its assets resolved.
Hand it to a coding agent and it wires itself up from our docs. Or call it from your own code like any REST API - one GET, a bearer token, typed JSON back.
Any language, any runtime. One GET, a bearer token, typed JSON back.
Get your key
Create a free developer account - 300 credits a month, no card.
Call an endpoint
GET /v1/brand?url=... with an Authorization: Bearer header. Every endpoint takes a URL.
Read the JSON
Typed, consistent shapes - plus the credits you have left in the usage field.
Paste one line into your coding agent - it reads our docs, grabs a key, and integrates MiroMiro for you. No config file, no restart.
Get an API key (free, no card) at miromiro.app/api/docs/authentication.md, then follow miromiro.app/api/docs/agent-quickstart.md to integrate the MiroMiro design API into this codebase.
Every endpoint is one authenticated GET that returns JSON, so there is nothing to install and nothing to wrap. These run as-is in JavaScript, TypeScript, Python, Go, PHP, Ruby - or plain cURL.
const API_KEY = process.env.MIROMIRO_API_KEY
export const extractBrand = async (url) => {
const params = new URLSearchParams({ url })
const res = await fetch(`https://miromiro.app/api/v1/brand?${params}`, {
headers: { Authorization: `Bearer ${API_KEY}` },
})
if (!res.ok) {
// Failures return { statusCode, statusMessage }
const { statusMessage } = await res
.json()
.catch(() => ({ statusMessage: res.statusText }))
throw new Error(`MiroMiro /brand failed (${res.status}): ${statusMessage}`)
}
return res.json()
}
extractBrand('https://stripe.com').then(console.log)Same call shape across all nine endpoints. Full reference in the docs Missing your language or want a native SDK?
Start with all endpoints and 300 free credits - no card.
Failed calls are never billed, cached repeats are free, and you can cancel anytime - no questions asked.
Solo devs and side projects past the free tier.
Billed €190/year
5,000 credits / month Credits are weighted by endpoint - from 1 for an asset scrape up to 25 for a full URL-to-code call. Failed calls are never charged.
60 requests / minute Burst rate limit per API key. Requests over it return a 429 - wait a moment and retry.
Free cached repeat calls Save credits: repeat calls to a URL you've already extracted are served from cache and cost 0 credits.
JS rendering +5 cr / call Optional: add render=true to any call to load the page in a real browser first, so client-rendered sites (React, Next) return everything. Flat +5 credits, only when you use it. Rendered calls can also return a screenshot of the page (viewport or full-page) at no extra credits - add screenshot=true.
For teams running extraction in production.
Billed €790/year
30,000 credits / month Credits are weighted by endpoint - from 1 for an asset scrape up to 25 for a full URL-to-code call. Failed calls are never charged.
120 requests / minute Burst rate limit per API key. Requests over it return a 429 - wait a moment and retry.
Free cached repeat calls Save credits: repeat calls to a URL you've already extracted are served from cache and cost 0 credits.
JS rendering +5 cr / call Optional: add render=true to any call to load the page in a real browser first, so client-rendered sites (React, Next) return everything. Flat +5 credits, only when you use it. Rendered calls can also return a screenshot of the page (viewport or full-page) at no extra credits - add screenshot=true.
For platforms extracting across many customer sites.
Billed €1990/year
200,000 credits / month Credits are weighted by endpoint - from 1 for an asset scrape up to 25 for a full URL-to-code call. Failed calls are never charged.
300 requests / minute Burst rate limit per API key. Requests over it return a 429 - wait a moment and retry.
Free cached repeat calls Save credits: repeat calls to a URL you've already extracted are served from cache and cost 0 credits.
JS rendering +5 cr / call Optional: add render=true to any call to load the page in a real browser first, so client-rendered sites (React, Next) return everything. Flat +5 credits, only when you use it. Rendered calls can also return a screenshot of the page (viewport or full-page) at no extra credits - add screenshot=true.
For volume that outgrows a plan, on your paperwork.
Volume pricing
Unlimited credits Credits are weighted by endpoint - from 1 for an asset scrape up to 25 for a full URL-to-code call. Failed calls are never charged.
Negotiated volume & rate limits
Free cached repeat calls Save credits: repeat calls to a URL you've already extracted are served from cache and cost 0 credits.
JS rendering +5 cr / call Optional: add render=true to any call to load the page in a real browser first, so client-rendered sites (React, Next) return everything. Flat +5 credits, only when you use it. Rendered calls can also return a screenshot of the page (viewport or full-page) at no extra credits - add screenshot=true.
No credit card required to start. Prices don't include VAT. Need more credits or a different plan?
Scrapers return HTML or markdown - text soup you still have to parse. MiroMiro reads the page as design: typed design tokens, resolved asset URLs, real font files, and inline SVG code. One call returns structured design data, not a document.
Credits are weighted by how much work an endpoint does - from 1 credit for an asset scrape up to 25 for a full URL-to-code extraction, which resolves the page's entire CSS cascade. Failed and blocked requests are never billed, and a cached repeat call is free - the meter only moves on fresh, successful work.
The API reads a page’s static HTML and CSS, which captures everything declared in markup - and that’s a lot (tokens, most images, inline SVGs, font files). Assets injected later by JavaScript, like most runtime Lottie animations, are best captured with the MiroMiro browser extension.
Two ways. Paste one instruction and the agent reads our Markdown docs and integrates itself - no config file, no restart, works in Cursor, Claude Code, Codex, Windsurf or anything that speaks HTTP. Or install the MCP server (npx miromiro-mcp) and your agent gets the extraction tools natively, so it reaches for them on its own.
An API key with 300 credits every month, every endpoint, and the MCP server - no credit card. The playground needs no signup at all. Upgrade when you need more volume, not to get started.
On the free plan, calls return a 429 with a clear message until your credits reset at the start of the next month - or you upgrade, which takes effect immediately and keeps the same key. Paid plans keep working: extra credits are billed at your plan's per-1,000 overage rate on a separate invoice, capped at one extra month of credits so a runaway script can never produce an unbounded bill. Prefer a hard stop? Switch overage billing off in your console and your key stops at the quota instead - nothing extra is ever billed.
We fetch only public pages - no logins, no cookies, no authenticated sessions. The raw page we fetch is processed in memory and discarded - it is never stored. The extracted result - the same JSON you get back - is cached for 24 hours so a repeat call by anyone is instant and free, then it's deleted; pass fresh=true when you need a live re-extraction. We do record which URL each of your calls hit, because that's what powers the usage history in your dashboard; those rows are row-level-security scoped to your account, so nobody else can read them. Your API key is stored only as a SHA-256 hash - we cannot recover the raw secret, which is why it's shown exactly once.
One call returns the design a site actually ships - typed, resolved, and ready for your agent or your own code.
300 free credits every month. No credit card.