MediaRouter / docs /brand-kits.md
basyx's picture
Upload 376 files
8bf0d31 verified
|
Raw
History Blame Contribute Delete
2.98 kB

Brand Kit

Status

The current working tree implements Brand Kit as a real workspace-owned domain under app/brand/ with /v1/brand REST routes, frontend brand-kit feature modules, TypeScript/Python SDK resources, MCP brand tools, and an n8n MediaBrandKit node. Authoritative PostgreSQL migrations, RLS runtime certification, Docker/Hugging Face runtime verification, and final production certification remain deferred until all planned product phases are complete.

Domain model

BrandKit and BrandKitVersion are the canonical records. A kit owns versions through brand_kit_versions, includes workspace/creator ownership fields, and tracks status, timestamps, and an active_version_id. Versions store bounded branding fields such as colors, fonts, voice/tone metadata, asset references, watermark settings, and a metadata JSON column mapped safely away from the SQLAlchemy reserved metadata attribute.

API

Method Endpoint Purpose
GET /v1/brand List workspace brand kits with active version metadata.
POST /v1/brand Create a workspace brand kit.
PATCH /v1/brand/{brand_kit_id} Update a workspace brand kit.
DELETE /v1/brand/{brand_kit_id} Delete a workspace brand kit.

POST /v1/brand accepts name, optional description, and initial_version payload data. The response surface returns the kit plus its current active_version_id; it does not expose invitation tokens or secret fields.

Version-specific brand-kit routes are not exposed in the current backend contract. Python and TypeScript SDKs therefore fail closed with NotImplementedError for get_version and create_version instead of inventing endpoints.

Frontend

The frontend uses /v1/brand through frontend/features/brand-kits/api/index.ts. Brand kits appear in workspace settings navigation with permission: "admin", and capability discovery treats the brand area as active when the backend advertises the expected routes.

SDK

Both official SDKs use /v1/brand for list/get/create/update/delete operations. The Python client is defined in sdk/python/media_platform/brand_kits.py, and the TypeScript client is defined in sdk/typescript/src/resources/brand-kits.ts. Static contract tests verify route paths, request bodies, and fail-closed versioned-operation behavior.

MCP and n8n

MCP registers narrow typed brand tools through app/mcp/tools/brand.py and app/mcp/server.py. The official n8n MediaBrandKit node consumes the shared MediaRouter SDK/credential boundary; no provider credentials or raw brand documents are exposed to n8n transports.

Security and runtime

Brand kit routes reuse the existing API-key authentication, scoped workspace context, and structured audit boundary. Sensitive fields remain backend-only. PostgreSQL FORCE RLS, migration ordering, and provider-facing certification are intentionally deferred to the final production certification phase.