Docyrus Tenant Brand Management
A tenant brand (tenant_brand) is a tenant-owned brand-identity record: the
visual system (colors, typography, spacing, components, logos), the verbal system
(voice, tone, terminology, content constraints), and presentation/chart/illustration
defaults that downstream features (documents, slides, AI generation) read from.
Manage brands with docyrus account brands. There is no design-time vs runtime
split — these commands directly CRUD the live records for the active tenant.
- A brand is identified by its UUID (
--brandId). There is no brand slug.
- The only required field is
--name (on create); everything else is optional.
- The record is large. For the complete field catalog (every flag, its
snake_case column, type, and meaning) read
references/fields.md. Keep this open while building a brand.
Workflow
Confirm auth + tenant.
docyrus auth who --json
No session → stop and ask the user to run docyrus auth login. Brands are
tenant-scoped, so confirm the active tenant is the intended one.
List existing brands before creating one — a tenant often already has a
default brand to update rather than duplicate.
docyrus account brands list --json
Create or update. Start with identity + the few fields the user cares
about; the rest can be filled in later updates. See Commands.
Validate. Re-read the brand and confirm the values landed.
docyrus account brands get --brandId <uuid> --json
Commands
Add --json for machine-readable output. Run docyrus account brands <cmd> --help
for the live flag list.
# List non-archived brands (default brand first)
docyrus account brands list --json
# Get one brand by id
docyrus account brands get --brandId <uuid> --json
# Create — only --name is required
docyrus account brands create --name "Acme" --json
# Create with common identity + visual fields
docyrus account brands create \
--name "Acme" \
--description "Acme corporate brand" \
--websiteUrl "https://acme.com" \
--isDefault true \
--colorPrimary "#1d4ed8" \
--colorSecondary "#9333ea" \
--logoUrl "https://acme.com/logo.svg" \
--fontFamilyPrimary "Inter" \
--voiceIntent "bold,concise,friendly" \
--json
# Update specific fields (partial; only sent keys change)
docyrus account brands update --brandId <uuid> \
--colorPrimary "#0f766e" \
--formalityLevel "casual" \
--json
# Archive / restore (update-only flag)
docyrus account brands update --brandId <uuid> --archived true --json
docyrus account brands update --brandId <uuid> --archived false --json
# Delete (hard delete — returns { deleted: true, id })
docyrus account brands delete --brandId <uuid> --json
# Import branding from the brand's website (Firecrawl scrape, applied to the record)
docyrus account brands fetch-from-website --brandId <uuid> --json
Structured (json/list) fields and bulk payloads
Key rules
--name required on create; the CLI rejects a create with no name before
calling the API.
--archived is update-only. Passing it to create fails (unknown flag).
list hides archived brands; get still returns them.
- One default per tenant.
is_default has a unique partial index — don't try
to create a second default; update the intended brand instead.
delete is a hard delete and returns { deleted: true, id } (the API
itself returns { data: { success: true } }). There is no restore for a
deleted brand — prefer --archived true when the user may want it back.
fetch-from-website requires the brand to have website_url set and
overwrites scraped fields (colors, typography, spacing, components, images,
icons/animations/layout/personality) on the record.
- Flags are camelCase and map 1:1 onto the
snake_case columns; the full mapping
is in references/fields.md.
Related skills
- docyrus-cli-app — full
docyrus CLI command index and global conventions (--json, auth, environments).
- docyrus-platform — Docyrus platform concepts and building blocks.
1---2name: docyrus-tenant-brand-management3description: Create, read, update, and delete a tenant's brand identity records (`tenant_brand`) using the `docyrus account brands` CLI commands. Use when the user wants to manage a Docyrus brand — set or change the brand's colors, typography, spacing, logos/favicons, voice & messaging guidelines, slide/presentation defaults, chart styling, illustration rules, or content constraints; mark a default brand; archive a brand; or import branding from a website. Triggers on "create a brand", "set brand colors", "update the brand voice/typography", "add a logo to the brand", "make this the default brand", "archive a brand", "import brand from website", "brand guidelines", `docyrus account brands`, `account brands create`, `account brands update`, `tenant_brand`, or any tenant brand identity / brand-kit management task in Docyrus. For the full CLI command index see docyrus-cli-app; for platform concepts see docyrus-platform.4---5
6# Docyrus Tenant Brand Management
7
8A **tenant brand** (`tenant_brand`) is a tenant-owned brand-identity record: the
9visual system (colors, typography, spacing, components, logos), the verbal system
10(voice, tone, terminology, content constraints), and presentation/chart/illustration
11defaults that downstream features (documents, slides, AI generation) read from.
12
13Manage brands with `docyrus account brands`. There is **no design-time vs runtime
14split** — these commands directly CRUD the live records for the active tenant.
15
16- A brand is identified by its UUID (`--brandId`). There is no brand slug.
17- The only required field is `--name` (on create); everything else is optional.
18- The record is large. For the **complete field catalog** (every flag, its
19 `snake_case` column, type, and meaning) read
20 [references/fields.md](references/fields.md). Keep this open while building a brand.
21
22## Workflow
23
241. **Confirm auth + tenant.**
25 ```bash
26 docyrus auth who --json
27 ```
28 No session → stop and ask the user to run `docyrus auth login`. Brands are
29 tenant-scoped, so confirm the active tenant is the intended one.
30
312. **List existing brands** before creating one — a tenant often already has a
32 default brand to update rather than duplicate.
33 ```bash
34 docyrus account brands list --json
35 ```
36
373. **Create or update.** Start with identity + the few fields the user cares
38 about; the rest can be filled in later updates. See [Commands](#commands).
39
404. **Validate.** Re-read the brand and confirm the values landed.
41 ```bash
42 docyrus account brands get --brandId <uuid> --json
43 ```
44
45## Commands
46
47Add `--json` for machine-readable output. Run `docyrus account brands <cmd> --help`
48for the live flag list.
49
50```bash
51# List non-archived brands (default brand first)
52docyrus account brands list --json
53
54# Get one brand by id
55docyrus account brands get --brandId <uuid> --json
56
57# Create — only --name is required
58docyrus account brands create --name "Acme" --json
59
60# Create with common identity + visual fields
61docyrus account brands create \
62 --name "Acme" \
63 --description "Acme corporate brand" \
64 --websiteUrl "https://acme.com" \
65 --isDefault true \
66 --colorPrimary "#1d4ed8" \
67 --colorSecondary "#9333ea" \
68 --logoUrl "https://acme.com/logo.svg" \
69 --fontFamilyPrimary "Inter" \
70 --voiceIntent "bold,concise,friendly" \
71 --json
72
73# Update specific fields (partial; only sent keys change)
74docyrus account brands update --brandId <uuid> \
75 --colorPrimary "#0f766e" \
76 --formalityLevel "casual" \
77 --json
78
79# Archive / restore (update-only flag)
80docyrus account brands update --brandId <uuid> --archived true --json
81docyrus account brands update --brandId <uuid> --archived false --json
82
83# Delete (hard delete — returns { deleted: true, id })
84docyrus account brands delete --brandId <uuid> --json
85
86# Import branding from the brand's website (Firecrawl scrape, applied to the record)
87docyrus account brands fetch-from-website --brandId <uuid> --json
88```
89
90### Structured (`json`/`list`) fields and bulk payloads
91
92- **`list` flags** are comma-separated and sent as arrays:
93 `--grammarDo "Use active voice,Lead with the verb"`.
94- **`json` flags** take a JSON string parsed into an object/array:
95 `--spacingPadding '{"sm":"8px","md":"16px"}'`,
96 `--fonts '[{"family":"Inter","weights":[400,700]}]'`.
97- For many fields at once, pass the whole record as JSON. Use the `snake_case`
98 **column** names (see [references/fields.md](references/fields.md)):
99 ```bash
100 docyrus account brands create --from-file brand.json --json
101 docyrus account brands update --brandId <uuid> --data '{"color_primary":"#1d4ed8","tone_by_context":{"support":"warm"}}' --json
102 ```
103 `--data` / `--from-file` accept **JSON only**. When a convenience flag and a
104 `--data` key set the same field, the **flag wins**.
105
106## Key rules
107
108- **`--name` required on create**; the CLI rejects a create with no name before
109 calling the API.
110- **`--archived` is update-only.** Passing it to `create` fails (unknown flag).
111 `list` hides archived brands; `get` still returns them.
112- **One default per tenant.** `is_default` has a unique partial index — don't try
113 to create a second default; update the intended brand instead.
114- **`delete` is a hard delete** and returns `{ deleted: true, id }` (the API
115 itself returns `{ data: { success: true } }`). There is no restore for a
116 deleted brand — prefer `--archived true` when the user may want it back.
117- **`fetch-from-website` requires the brand to have `website_url` set** and
118 overwrites scraped fields (colors, typography, spacing, components, images,
119 icons/animations/layout/personality) on the record.
120- Flags are camelCase and map 1:1 onto the `snake_case` columns; the full mapping
121 is in [references/fields.md](references/fields.md).
122
123## Related skills
124
125- **docyrus-cli-app** — full `docyrus` CLI command index and global conventions (`--json`, auth, environments).
126- **docyrus-platform** — Docyrus platform concepts and building blocks.