result.design_system has kind: "brand_kit" and its own shape. Use it when the source of truth is the guidelines document, not a website.
Extract a brand kit
Upload the PDF asmultipart/form-data in a field named file:
submission_id until status is completed or failed, following the submission lifecycle. On completion, read result.design_system.
To read only part of a finished kit, pass its section names to the result endpoint, for example ?sections=colors,buttons. Brand kits appear in GET /design/submissions next to website extractions; filter them with ?kind=brand_kit. A brand kit’s source_url is file:// followed by the uploaded file name.
The file must be a PDF of up to 50 MB. The extractor reads up to the first 150 pages. Every upload is a fresh extraction: brand kits are never served from cache.
Give it to your agents
Hand your agent the sections a task needs instead of the whole kit. Fetch them with thesections query parameter:
A few fields help most:
colors.palette[].proportion: tell the agent how much of each color to use, not only which colors exist. Preferstated, thendrawn.logo.misuseandruleswithkind: "dont": the book’s own list of what not to do. Ask the agent to check its output against them.buttons[].cssandcards[].css: drop-in styles for UI work, already converted from the PDF.asset.url: real logos, graphics, and photos from the book. Use them as references or as files to place in the design.
Read the result
The following example shows one palette color. Other sections are omitted.
A section the book does not cover comes back empty: an empty list, or an object with empty fields.
Where values come from
The kit keeps the book’s word apart from what the engine worked out:
Fields with
when_to_use also carry when_to_use_source (declared or inferred). profile.inferred lists the profile fields the engine wrote because the book did not. rules contains only the book’s own guidelines.
Files from the PDF
Logos, misuse examples, photos, graphics, icons, templates, buttons, cards, and font files carry anasset object with a hosted url and a format:
asset is null when the book only describes the item in words.
Colors
Each palette color has the book’sname, hex, and group (the book’s heading, such as primary or secondary). cmyk and rgb are the values the book prints, or null when it prints none. They are never converted from the hex.
proportion says how much of the brand the color takes, as a share from 0 to 1:
Read
stated first. drawn is kept even when it disagrees with stated, so you can see both. Either is null when the book does not give it.
colors.proportion_sources points to where the proportions come from: the page, the zones on it as boxes (x0, y0, x1, y1 as fractions of the page), and an asset with the zones marked. Each source has a kind of stated or drawn.
colors.pairs lists text and background combinations as hex values, with what they are approved for (headers, body, cta), the WCAG 2 contrast ratio, and a source: declared when the book approves the pair, measured when the book sets text that way.
Typography
typography.typefaces lists each family with its roles, the weights the book names, and a licence of google_fonts or proprietary.
typography.hierarchy lists the type levels by the book’s names (headline, body copy, and so on) with size, size_max for a stated range, line_height, unit (pt, px, or empty when the book gives none), CSS weight, and case. A level is measured when the book gives no type scale and the engine read it off the pages.
typography.font_files lists the fonts the PDF embeds, to render a visual sample. An embedded font is often a subset: it only renders the glyphs in its sample.
Buttons and cards
Buttons and cards are measured from the PDF’s vectors, preferring a page that defines components when the book has one. Each button has arole, a state, its colors named after the palette, border, radius, padding, height, and type, plus:
background, border, radius_pt, padding_pt, size), whether it holds an image (media), its text levels in reading order, and css.
When a book draws its components as a flat image instead of vectors, there is nothing to measure, and buttons or cards can come back empty.
