The audiences and niches arrays use the exact shapes brand_dna.set accepts and returns, so a get → edit → set round-trip is lossless.
Returns
false when the org hasn't generated a Brand DNA yet. Remaining fields will be empty strings / empty lists (not null) so agents can inspect this flag once.
AI-generated summary of the brand identity.
Raw brand description the user originally provided.
Hex color codes.
Typography guidance.
Voice-and-tone descriptor.
Product category names associated with the brand.
Fully-qualified CDN URL for the uploaded logo, or null if none.
AI description of the logo, or null if no logo.
Target audiences. Each: key, label, age_range ("min-max" string), gender_options, ethnicity_options, description, is_preset, created_at. The key + gender_options are what you pass to virtual_model.generate / virtual_model.list and what drive VTO mockups. Virtual models are auto-generated when an audience is created.
Business niches driving trend discovery. Each: name, is_preset. Pass them back through brand_dna.set to keep them — omitting niches there replaces them with [].