Brand Kit
Colores, tipografías, logos e instrucciones.
Privacidad y analítica
Utilizamos cookies técnicas necesarias y, solo si das tu consentimiento, analítica y pixels de marketing para mejorar la web y medir campañas.
Colores, tipografías, logos e instrucciones.
Colores con su función, tipografías del Kit (también las pendientes de revisar), logos aprobados e instrucciones de uso. Nunca devuelve rutas de almacenamiento.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/kit.read |
| Herramienta MCP | kit_read |
| Alcance | kit.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | palette |
Entrada
{
parts?: Array<"colors" | "typography" | "logos" | "instructions">
}Salida
{
colors: Array<{
name: string
hex: string
role: "primary" | "secondary" | "accent" | "background" | "foreground" | "neutral" | "unspecified"
}>
typography: Array<{
family: string
role: string
weights: string[]
provider?: "google" | "custom"
status?: "approved" | "proposed"
}>
logos: Array<{
assetId: string // uuid
name: string
form: string
theme: string
primary: boolean
}>
instructions: Record<string, string>
}Añade un color al Kit con su nombre y función.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.colors.add |
| Herramienta MCP | kit_colors_add |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | Nödo, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | confirm |
Entrada
{
name: string // ≤ 60
hex: string
role?: "primary" | "secondary" | "accent" | "background" | "foreground" | "neutral" | "unspecified" // default "unspecified"
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Busca familias de Google Fonts (licencia libre) por nombre o estilo y las muestra con su espécimen.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/kit.fonts.search |
| Herramienta MCP | kit_fonts_search |
| Alcance | kit.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | fonts |
Entrada
{
query?: string // ≤ 80
category?: "sans-serif" | "serif" | "display" | "handwriting" | "monospace"
limit?: integer // 1–6 · default 4
}Salida
{
items: Array<{
family: string
category: "sans-serif" | "serif" | "display" | "handwriting" | "monospace"
weights: string[]
}>
}Añade una familia de Google Fonts al Kit con su función y sus pesos.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.fonts.add |
| Herramienta MCP | kit_fonts_add |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | Nödo, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | confirm |
Entrada
{
family: string // ≤ 80
role?: "heading" | "body" | "accent" // default "body"
weights?: string[] // ≤ 9 items
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Cambia el texto de uso de una sección del Kit (logos, colores, tipografía, tono visual).
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.instructions.update |
| Herramienta MCP | kit_instructions_update |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | Nödo, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | confirm |
Entrada
{
section: "logos" | "colors" | "typography" | "imagery" | "general"
text: string // ≤ 4000
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}El sistema de marca: estado, versiones, el trabajo en curso con sus preguntas y los archivos pedidos (por defecto README.md y tokens.json de la versión publicada).
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/kit.system.read |
| Herramienta MCP | kit_system_read |
| Alcance | kit.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
version?: "published" | "latest" | string // default "published" · `published` (default; falls back to the newest ready version), `latest`, or a version id.
files?: string[] // ≤ 60 items · Paths to return, e.g. ["README.md", "tokens.json", "components/Button/README.md"]. Default README.md and tokens.json.
assetUrls?: boolean // default false · Also return a short-lived URL for each asset system.json lists (marks, imagery).
}Salida
{
status: "none" | "draft" | "published"
title: string | null
version: {
id: string // uuid
number: integer // -9007199254740991–9007199254740991
state: "building" | "ready" | "failed"
note: string | null
createdAt: string // date-time
readyAt: string | null
publishedAt: string | null
published: boolean
issues: integer // -9007199254740991–9007199254740991
}
| null
paths: Array<{
path: string
bytes: integer // -9007199254740991–9007199254740991
generated: boolean
}>
files: Array<{
path: string
content: string
}>
versions: Array<{
id: string // uuid
number: integer // -9007199254740991–9007199254740991
state: "building" | "ready" | "failed"
note: string | null
createdAt: string // date-time
readyAt: string | null
publishedAt: string | null
published: boolean
issues: integer // -9007199254740991–9007199254740991
}>
run: {
id: string // uuid
kind: "build" | "refresh" | "update"
status: "queued" | "running" | "waiting" | "succeeded" | "failed" | "canceled"
phase: "reading" | "asking" | "writing" | "checking" | "saving" | null
instruction: string | null
questions: Array<{
key: string
title: string
reason?: string
options: Array<{
value: string
label: string
recommended?: boolean
}>
multiple?: boolean
}>
summary: string | null
errorCode: string | null
versionId: string | null
createdAt: string // date-time
finishedAt: string | null
usage: Record<string, unknown> | null
}
| null
assets: Array<{
group: string
name: string
type: string | null
url: string | null
libraryId: string | null
}>
}Encarga a Nödo (con Opus, en segundo plano) crear el sistema de marca o actualizarlo desde las fuentes: Genoma, web, Kit y Biblioteca. Con answers continúa un trabajo que esperaba respuestas.
Consume presupuesto de IA de la marca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.system.build |
| Herramienta MCP | kit_system_build |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | Nödo, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | confirm |
Entrada
{
mode?: "build" | "refresh" // default "build" · `build` for a first system or a fresh start, `refresh` to update one from the sources.
instruction?: string // ≤ 2000 · What the person asked for, in their words, when it adds something.
answers?: Record<string, string> // Answers to the questions of the run waiting on them.
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
status: "queued" | "running"
}Un cambio concreto en el sistema de marca («el botón con esquinas rectas», «añade una plantilla de story»). Lo hace Nödo con Opus en segundo plano y deja una versión nueva.
Consume presupuesto de IA de la marca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.system.update |
| Herramienta MCP | kit_system_update |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | Nödo, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | confirm |
Entrada
{
instruction: string // ≤ 2000
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
status: "queued" | "running"
}Publica una versión del sistema de marca: desde ese momento es la que leen Nödo, las generaciones y cualquier agente.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.system.publish |
| Herramienta MCP | kit_system_publish |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | Nödo, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | confirm |
Entrada
{
versionId?: string // uuid
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
number: integer // -9007199254740991–9007199254740991
}Quita un color del Kit. Devuelve la fila borrada para poder deshacerlo con kit.colors.restore.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.colors.delete |
| Herramienta MCP | kit_colors_delete |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
colorId: string // uuid
}Salida
{
color: {
id: string // uuid
brand_id: string // uuid
name: string
hex_code: string
category: string | null
position: integer // -9007199254740991–9007199254740991
sort_order: integer | null
description: string | null
show_in_brand_kit: boolean
created_at: string
}
}Muestra u oculta un archivo de la Biblioteca en el Brand Kit.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.assets.toggle |
| Herramienta MCP | kit_assets_toggle |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
assetId: string // uuid
show: boolean
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Lleva varios logos, iconos o tipografías de la Biblioteca al Brand Kit de una vez. Todo o nada.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.assets.add |
| Herramienta MCP | kit_assets_add |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
assetIds: string[] // ≤ 100 items
}Salida
{
ids: string[]
}«Deshacer» de eliminar un color: vuelve la misma fila, con su id y su lugar.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.colors.restore |
| Herramienta MCP | kit_colors_restore |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
color: {
id: string // uuid
brand_id: string // uuid
name: string // ≤ 120
hex_code: string
category: string | null
position: integer // -9007199254740991–9007199254740991
sort_order: integer | null
description: string | null
show_in_brand_kit: boolean
created_at: string
}
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Cambia el nombre, la función o el HEX de un color del Kit. Una edición manual pasa a ser de la marca: la web no la vuelve a sobrescribir.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.colors.update |
| Herramienta MCP | kit_colors_update |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
colorId: string // uuid
name?: string // ≤ 120
category?: string | null
hex?: string // ≤ 16
description?: string // ≤ 2000
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Guarda el orden de la paleta en una sola escritura; no cambia la función de ningún color.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.colors.reorder |
| Herramienta MCP | kit_colors_reorder |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
colors: Array<{
id: string // uuid
sortOrder: integer // -9007199254740991–9007199254740991
}> // ≤ 200 items
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Añade al Kit una tipografía solo con su nombre, familia y función, sin archivo.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.fonts.create |
| Herramienta MCP | kit_fonts_create |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
name: string // ≤ 160
family: string // ≤ 120
role?: string // ≤ 40
provider?: string // ≤ 40
}Salida
{
font: {
id: string // uuid
}
}Descarga un peso de una familia de Google Fonts, lo guarda en la marca y lo añade al Kit.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.fonts.install_weight |
| Herramienta MCP | kit_fonts_install_weight |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
family: string // ≤ 120
variant: string // ≤ 20
role?: string // ≤ 40
}Salida
{
font: {
id: string // uuid
}
}Instala en el Kit los pesos elegidos de una familia de Google Fonts, cada uno como archivo de la marca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.fonts.install |
| Herramienta MCP | kit_fonts_install |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
family: string // ≤ 120
variants: string[] // ≤ 40 items
role?: string // ≤ 40 · default "body"
}Salida
{
count: integer // -9007199254740991–9007199254740991
assets: Array<{
id: string // uuid
}>
}Cambia la variante de un logo, la función de una tipografía o la sección de un recurso visual del Kit, a la versión que la persona vio.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.identity.update |
| Herramienta MCP | kit_identity_update |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
assetId: string // uuid
expectedUpdatedAt: string | null
change: {
kind: "logo" | "font" | "resource"
}
}Salida
{
asset: {
id: string // uuid
}
}Hace de un logo o icono aprobado de la Biblioteca el logo principal de la marca (cabecera, menú, selector).
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.logo.set_primary |
| Herramienta MCP | kit_logo_set_primary |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
assetId: string // uuid
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Hace el Brand Kit privado o público (enlace que cualquiera puede ver).
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.visibility.set |
| Herramienta MCP | kit_visibility_set |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | API, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
visibility: "private" | "public"
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Registra una imagen PNG ya subida al almacén privado como sticker de la marca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/kit.stickers.register |
| Herramienta MCP | kit_stickers_register |
| Alcance | kit.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
name: string // ≤ 80
storagePath: string // ≤ 180
sha256: string
}Salida
{
id: string // uuid
}Los colores, los logos y las tipografías del Kit, con el logo principal, como los pinta la tarjeta del inicio.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/kit.overview |
| Herramienta MCP | kit_overview |
| Alcance | kit.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
asClient?: boolean // Read as the brand sees it (a staff viewer previewing as client). Only narrows.
primaryLogoId?: string | null // The brand's primary logo when the caller already knows it (saves a read); it must belong to the brand.
}Salida
{
colors: Record<string, unknown>[]
logos: Record<string, unknown>[]
fonts: Record<string, unknown>[]
primaryLogo: Record<string, unknown> | null
}Actualizado el 1 de enero de 1970