Fetch a Brand Kit's brand identity (writing_tone, writing_persona) and associated entities (product lines, audiences, content types, regions, writing rules, custom variables, visual/design assets). Call AFTER list_brand_kits confirms brand_management_enabled: true.
1. Specific entity by ID → includes=["<type>"], filters=[{field: "<type>.id", operator: "EQ", value: <id>}]. 2. Entity by name (product_lines, content_types, audiences, regions, custom_variables, visual_examples) → filters=[{field: "<type>.name", operator: "CONTAINS", value: "<fragment>"}]. 3. Find text content ("rule about tone", "any mention of Red List") → filter by the text field: filters=[{field: "writing_rules.text", operator: "CONTAINS", value: "tone"}]. 4. Structural discovery → small includes with fields=["<type>.id","<type>.name"] only.
Most kits are small — these rarely need filtering:
- audiences, regions, usage_rules, palettes, content_samples: usually 0-2, rarely >10
- content_types, product_lines: usually 1-3
These have tails you must handle:
- writing_rules: usually 3, outliers exceed 200. Never include in full without a filter —
filter by text (CONTAINS) or by id.
- competitors: usually 10, outliers exceed 250. Include via product_lines.competitors only
when needed, and consider a name filter.
- custom_variables: outliers exceed 150. Filter by name (CONTAINS) for known variables
(e.g. "Red List"), or by value (CONTAINS) for content.
- Scoped writing_rules via audience/region/content_type nesting: outliers exceed 200.
Filter the parent by id or name first.
Writing rules are EITHER global OR scoped to a single audience/content_type/region (never both). For content targeting a specific audience/region/content_type, fetch BOTH: 1. Top-level writing_rules include → global rules. 2. Nested writing_rules on the scoping parent → scoped rules. Merge client-side.
includes=["writing_rules","custom_variables","product_lines.competitors",
"content_types.writing_rules"] without filters → blows context on outlier kits.
- Calling without
fields on a large kit → returns full text (template_outline,
rule text, ICP) for every row.
- Forgetting filters on
writing_rules, custom_variables, or competitors — those
are the three biggest tails.
version: "draft" reads pending edits; defaults to "active". Use active for on-brand output unless the user explicitly asks for draft.