result.design_system carries the design system the Extractor produced. Sub-sections fill in as the workflow streams, so when you read a partial result, expect null for sections that haven’t landed yet.
A brand kit extracted from a guidelines PDF has kind: "brand_kit" and its own shape, described on that page.
For a selective extraction, it contains only the sections you requested. Other top-level keys are absent even after completion. Check the response’s top-level sections to distinguish a selective extraction from a full one (null).
Top-level sections
The freshness of a design system lives on the response envelope:
completed_at is when it was extracted. On a cache hit it reflects the original extraction, not your request. See Caching and freshness.
Requesting only the sections you need
You can choose sections at two points:- Before extraction: send
sectionsin thePOST /design/submissionsJSON body to choose which sections to extract. - When reading a result: send
sectionsin the GET query to filter the data returned. This does not change extraction work or add sections you did not originally request.
assets is commonly around 40% of it and layout around 20%. When you only need part of the brand, pass sections to GET /design/submissions/{id}/result and get back only those sections:
422.
Filtering applies to result.design_system only. The response envelope (status, source_url, completed_at, and the rest) and result.artifacts always come back, so you can poll with a narrow request and still see when the job finishes.
Omit the query filter to return all originally requested sections. If the submission selected colors and typography, querying ?sections=colors,layout returns only colors. The top-level sections still reports ["colors", "typography"].
This matters most for AI agents, where the response is charged as context. The same filter is available on the MCP server as get_brand_extraction_result(submission_id, sections=[...]).
The brand profile
profile summarizes the brand and its intent:
brand_name,source_urltagline: the brand’s existing tagline, ornull(see below)industry,primary_purpose,main_ctapage_type_category,page_typecopy_tone: tone adjectives, e.g.["Confident", "Technical", "Direct"]brand_signature: a short description of the visual identityvisual_language:keywords,accent_strategy,highlightsstrategy:target_audienceandexecutive_synthesisstyle_classification: design-style classification (see below)
Tagline
Read the tagline atresult.design_system.profile.tagline. The extractor copies an existing brand tagline from the submitted page, preserving its original language, capitalization, and punctuation.
An absent, unreadable, or ambiguous tagline returns null. A well-known brand slogan can still return null when it does not appear on the submitted page. The extractor does not substitute a hero headline or generate a slogan.
For example, a profile can contain:
null by omitting the tagline from your interface. You can request just the profile with GET /design/submissions/{id}/result?sections=profile.
Cached extractions are not reprocessed when a field is added, so an older result may return null. Submit the URL again with force: true to run a fresh extraction. See Caching and freshness.
Style classification
style_classification.primary_style is constrained to a fixed set of styles, with no custom values. secondary_style is drawn from the same set.
Allowed primary_style values
Allowed primary_style values
Historical movement: Bauhaus, Swiss Style / International Typographic Style, De Stijl / Neoplasticism, Art Nouveau, Art Deco, Constructivism, Futurism, Pop Art, Psychedelic, Postmodernism, Brutalism, Grunge, Retro, MaximalismDigital / UI design: Flat Design, Skeuomorphism, Neumorphism / Neomorphism, Glassmorphism, Claymorphism, Isometric DesignTonal / audience: Corporate, Elegant, Luxurious, Playful, Whimsical, Feminine, Masculine, Gen-Z, Bold, Friendly, OrganicContemporary aesthetic: Vaporwave, Y2K, Cyberpunk, Synthwave, Corporate Memphis / Alegria, Kawaii / Cute Design, Anime / Manga Style, Hand-Drawn

