Biblioteca
Archivos de la marca.
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.
Archivos de la marca.
Busca archivos de la marca por nombre, categoría o tipo. Agentes y apps externas solo ven lo aprobado para su uso.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/library.search |
| Herramienta MCP | library_search |
| Alcance | library.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | carousel |
Entrada
{
query?: string // ≤ 200
category?: string // ≤ 60
type?: "image" | "video" | "audio" | "document" | "logo" | "font"
cursor?: string // ≤ 512 · Opaque cursor from a previous `nextCursor`.
limit?: integer // 1–50 · default 20
}Salida
{
items: Array<{
id: string // uuid
name: string
category: string | null
mimeType: string
status: "proposed" | "approved" | "archived"
createdAt: string
}>
nextCursor: string | null
}Detalle de un archivo y un enlace firmado que caduca en una hora.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/library.asset.get |
| Herramienta MCP | library_asset_get |
| Alcance | library.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | record |
Entrada
{
assetId: string // uuid
}Salida
{
id: string // uuid
name: string
category: string | null
mimeType: string
status: "proposed" | "approved" | "archived"
createdAt: string
description: string | null
sizeBytes: integer // -9007199254740991–9007199254740991
url: string // uri
urlExpiresAt: string
}Aprueba o archiva un archivo propuesto, por ejemplo una imagen generada por Nödo.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.asset.review |
| Herramienta MCP | library_asset_review |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | Nödo, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | confirm |
Entrada
{
assetId: string // uuid
decision: "approve" | "archive"
note?: string // ≤ 500
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Devuelve una URL firmada para subir un archivo y lo registra al terminar. Respeta la cuota de almacenamiento del plan.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.upload.create |
| Herramienta MCP | library_upload_create |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, Nödo, Chat, Pantallas, Apps |
| Estado | Próximamente |
Entrada
{
step: "start"
fileName: string // ≤ 200
mimeType: string // ≤ 120
sizeBytes: integer // –9007199254740991
category?: string // ≤ 60
}
| {
step: "complete"
uploadId: string
name?: string // ≤ 200
}Salida
{
uploadId: string
uploadUrl?: string // uri
assetId?: string // uuid
}Lleva archivos de la Biblioteca a «Eliminados», de donde se pueden restaurar durante el plazo de recuperación.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.files.trash |
| Herramienta MCP | library_files_trash |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
assetIds: string[] // ≤ 100 items
}Salida
{
ids: string[]
blocked: integer // -9007199254740991–9007199254740991
}Devuelve archivos de «Eliminados» a la Biblioteca con el estado que tenían; nunca los aprueba.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.files.restore |
| Herramienta MCP | library_files_restore |
| Alcance | library.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[]
blocked: integer // -9007199254740991–9007199254740991
}Borra para siempre archivos que ya están en «Eliminados». Todo o nada; no se puede deshacer.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.files.purge |
| Herramienta MCP | library_files_purge |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | API, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
assetIds: string[] // ≤ 100 items
}Salida
{
ids: string[]
blocked: integer // -9007199254740991–9007199254740991
}Borra para siempre todo lo que hay en «Eliminados»; lo que está retenido se queda y se cuenta.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.trash.empty |
| Herramienta MCP | library_trash_empty |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | API, Pantallas, Apps |
| Estado | Disponible |
Entrada
{}Salida
{
ids: string[]
blocked: integer // -9007199254740991–9007199254740991
}Antes de subir un archivo a la Biblioteca: comprueba la categoría y el espacio del plan, reserva los bytes y devuelve una URL firmada de un solo uso (2 h) para una ruta que elige el servidor.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.files.prepare_upload |
| Herramienta MCP | library_files_prepare_upload |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | Pantallas, Apps, API |
| Estado | Disponible |
Entrada
{
fileName: string // ≤ 255
fileSize: integer // –9007199254740991
mimeType: string // ≤ 255
category: string // ≤ 64
}Salida
{
storagePath: string
uploadUrl: string // uri
token: string
}Da de alta en la Biblioteca un archivo ya subido con su URL firmada: comprueba el objeto, cuenta su espacio y lo procesa.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.files.register |
| Herramienta MCP | library_files_register |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | Pantallas, Apps, API |
| Estado | Disponible |
Entrada
{
storagePath: string // ≤ 1024
fileName: string // ≤ 255
fileSize: integer // –9007199254740991
mimeType: string // ≤ 255
name: string // ≤ 160
category: string // ≤ 64
description?: string // ≤ 1000
type?: string // ≤ 64
posterPending?: boolean
}Salida
{
asset: {
id: string // uuid
}
}Da de alta en la Biblioteca de la marca la copia de un archivo que vive en otro sitio (otra biblioteca, un correo, una imagen de la pantalla), ya guardada en su ruta. Se procesa y cuenta como una subida y recuerda de dónde vino.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.files.import |
| Herramienta MCP | library_files_import |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | Pantallas, Apps, API |
| Estado | Disponible |
Entrada
{
storagePath: string // ≤ 1024
fileName: string // ≤ 180
fileSize: integer // –9007199254740991
mimeType: string // ≤ 255
sha256: string
source: {
kind: string
}
}Salida
{
id: string // uuid
name: string
}Cambia el nombre, la descripción, el texto alternativo o la categoría de un archivo de la Biblioteca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.files.update |
| Herramienta MCP | library_files_update |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
assetId: string // uuid
name?: string // ≤ 160
description?: string // ≤ 1000
altText?: string | null
type?: string // ≤ 64
categoryId?: string | null
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Registra como miniatura de un vídeo el fotograma WebP que el navegador ya subió a su ruta.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.files.poster |
| Herramienta MCP | library_files_poster |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | Pantallas, Apps |
| Estado | Disponible |
Entrada
{
assetId: string // uuid
width: integer // –10000
height: integer // –10000
fileSize: integer // –1048576
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Cambia la función de un archivo (logo, producto, icono…) dentro de su formato: una imagen nunca pasa a tipografía.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.files.set_section |
| Herramienta MCP | library_files_set_section |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
assetId: string // uuid
group: "logos" | "fonts" | "images" | "icons" | "products" | "videos" | "audio" | "documents"
}Salida
{
type: string
}El objeto ya subido pasa a ser la versión actual del archivo; el archivo conserva su id y se vuelve a procesar.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.versions.commit |
| Herramienta MCP | library_versions_commit |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
assetId: string // uuid
storagePath: string // ≤ 1024
fileName: string // ≤ 255
}Salida
{
version: integer // -9007199254740991–9007199254740991
}Una versión anterior vuelve a ser la actual, como versión nueva encima.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.versions.restore |
| Herramienta MCP | library_versions_restore |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
assetId: string // uuid
versionNumber: integer // 1–9007199254740991
}Salida
{
version: integer // -9007199254740991–9007199254740991
}Crea una colección de la Biblioteca al final de la lista. Los nombres no se repiten.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.collections.create |
| Herramienta MCP | library_collections_create |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
name: string // ≤ 80
}Salida
{
id: string // uuid
name: string
}Cambia el nombre de una colección de la Biblioteca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.collections.rename |
| Herramienta MCP | library_collections_rename |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
collectionId: string // uuid
name: string // ≤ 80
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Quita una colección; sus archivos siguen en la Biblioteca. Devuelve lo borrado para poder deshacerlo.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.collections.delete |
| Herramienta MCP | library_collections_delete |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
collectionId: string // uuid
}Salida
{
collection: {
id: string // uuid
brandId: string // uuid
name: string // ≤ 80
position: integer // -9007199254740991–9007199254740991
items: Array<{
assetId: string // uuid
position: integer // -9007199254740991–9007199254740991
}> // ≤ 2000 items
}
}«Deshacer» de eliminar una colección: vuelve con su id y sus archivos (los borrados para siempre se omiten).
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.collections.restore |
| Herramienta MCP | library_collections_restore |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
collection: {
id: string // uuid
brandId: string // uuid
name: string // ≤ 80
position: integer // -9007199254740991–9007199254740991
items: Array<{
assetId: string // uuid
position: integer // -9007199254740991–9007199254740991
}> // ≤ 2000 items
}
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Añade archivos de la Biblioteca al final de una colección; los que ya estaban se ignoran.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.collections.add_files |
| Herramienta MCP | library_collections_add_files |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
collectionId: string // uuid
assetIds: string[] // ≤ 100 items
}Salida
{
added: integer // -9007199254740991–9007199254740991
}Quita un archivo de una colección; el archivo sigue en la Biblioteca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.collections.remove_file |
| Herramienta MCP | library_collections_remove_file |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
collectionId: string // uuid
assetId: string // uuid
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Guarda el orden de los archivos de una colección en una sola escritura.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.collections.reorder |
| Herramienta MCP | library_collections_reorder |
| Alcance | library.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
collectionId: string // uuid
assetIds: string[] // ≤ 500 items
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Convierte o empaqueta archivos de la Biblioteca de la marca con una receta. Lo ligero vuelve terminado; vídeo, audio y lotes grandes quedan en cola. Convertir depende del plan.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/library.exports.create |
| Herramienta MCP | library_exports_create |
| Alcance | library.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Pantallas |
| Estado | Disponible |
Entrada
{
sources: Array<{
kind: "brand_file"
id: string // uuid
}> // ≤ 50 items
recipe: {
preset: string // ≤ 80
} // An export recipe of the dialog (`lib/file-export/catalog`): a preset and the settings per kind of file.
returnTo?: string | null
}Salida
{
ok: true
queued: boolean
job: Record<string, unknown>
}
| {
ok: false
reason: string // ≤ 60
job?: Record<string, unknown>
denial?: Record<string, unknown>
}El tamaño real de una imagen tras la receta, sin guardar nada; de una fuente, sus ejes variables y su tipo de contorno.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/library.exports.estimate |
| Herramienta MCP | library_exports_estimate |
| Alcance | library.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Pantallas |
| Estado | Disponible |
Entrada
{
source: {
kind: "brand_file"
id: string // uuid
}
recipe: {
preset: string // ≤ 80
} // An export recipe of the dialog (`lib/file-export/catalog`): a preset and the settings per kind of file.
}Salida
{
ok: true
}
| {
ok: false
reason: string // ≤ 60
job?: Record<string, unknown>
denial?: Record<string, unknown>
}Cancela una exportación propia mientras está en cola o en curso; un archivo terminado no se toca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/library.exports.cancel |
| Herramienta MCP | library_exports_cancel |
| Alcance | library.write |
| Rol mínimo | self |
| Confirmación humana | No |
| Puertas | Pantallas |
| Estado | Disponible |
Entrada
{
id: string // uuid
}Salida
{
job: Record<string, unknown>
}Cuántos archivos de la Biblioteca de la marca están en la papelera.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/library.trash.count |
| Herramienta MCP | library_trash_count |
| Alcance | library.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{}Salida
{
count: integer // 0–9007199254740991
}Una página de la Biblioteca para una sección (todo, un grupo, una colección, favoritos, «Subidos por ti» o papelera), ordenada como se pide; con los recuentos, lo que dibuja el raíl. Lo mismo que leen los selectores.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/library.files.page |
| Herramienta MCP | library_files_page |
| Alcance | library.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
view: string // ≤ 80
query?: string // ≤ 120
sort?: string // ≤ 20
offset?: integer // 0–5000
includeCounts?: boolean
}Salida
{
files: Array<{
id: string
brand_id: string
name: string | null // The file name when the row has no display name of its own.
description: string | null
type: string // The stored role: logo, icon, image, typography, document, video, audio…
status: string // proposed, approved or archived.
file_url: string
thumbnail_url?: string | null
preview_url?: string | null
file_name: string | null
file_size: integer | null
mime_type: string | null
category_id: string | null
created_at: string
show_in_brand_kit?: boolean | null
uploader_name?: string | null
metadata?: Record<string, unknown> | null // Public metadata only (`projectAssetMetadata`): technical, logoVariant, altText…
storage_path?: string | null
storage_bucket?: string | null
group: string // The Library section: logos, fonts, images, icons, products, videos, audio or documents.
agentVisible: boolean
favorite: boolean // The reader's own favourite.
mine: boolean // Uploaded (or saved here) by the reader.
isPrimaryLogo: boolean
audience: string
version: integer // -9007199254740991–9007199254740991
versionsCount: integer // -9007199254740991–9007199254740991
collectionIds: string[]
trashedAt?: string | null
}>
total: integer // -9007199254740991–9007199254740991
nextOffset: integer | null // The `offset` of the next page; null on the last one.
counts: Record<string, integer> | null
collections: Array<{
id: string
name: string
count: integer // -9007199254740991–9007199254740991
coverUrl: string | null
}>
| null
brandName: string
canManage: boolean
isStaff: boolean
primaryLogoAssetId: string | null
trashCount: integer | null
error: "not_allowed" | "read_failed" | null // A page that could not be read answers empty with its reason.
}El archivo de un enlace ?asset=, como lo pinta la vista previa (también si está en la papelera); file: null si no existe o no lo puedes ver.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/library.files.preview |
| Herramienta MCP | library_files_preview |
| Alcance | library.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
assetId: string // uuid
}Salida
{
file: {
id: string
brand_id: string
name: string | null // The file name when the row has no display name of its own.
description: string | null
type: string // The stored role: logo, icon, image, typography, document, video, audio…
status: string // proposed, approved or archived.
file_url: string
thumbnail_url?: string | null
preview_url?: string | null
file_name: string | null
file_size: integer | null
mime_type: string | null
category_id: string | null
created_at: string
show_in_brand_kit?: boolean | null
uploader_name?: string | null
metadata?: Record<string, unknown> | null // Public metadata only (`projectAssetMetadata`): technical, logoVariant, altText…
storage_path?: string | null
storage_bucket?: string | null
group: string // The Library section: logos, fonts, images, icons, products, videos, audio or documents.
agentVisible: boolean
favorite: boolean // The reader's own favourite.
mine: boolean // Uploaded (or saved here) by the reader.
isPrimaryLogo: boolean
audience: string
version: integer // -9007199254740991–9007199254740991
versionsCount: integer // -9007199254740991–9007199254740991
collectionIds: string[]
trashedAt?: string | null
}
| null
}Enlaces firmados de una hora para ver o descargar archivos de la Biblioteca (el original o sus variantes), solo de archivos vivos que la marca ve.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/library.files.sign |
| Herramienta MCP | library_files_sign |
| Alcance | library.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
assets: Array<{
assetId: string // uuid
storagePath: string // ≤ 1024
}> // ≤ 100 items
}Salida
{
urls: Record<string, string>
}La ficha de un archivo de la Biblioteca con las categorías y si puedes gestionarlo. Un archivo en «Eliminados» devuelve solo deleted (nombre, cuándo y quién) para enseñar que se eliminó.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/library.files.detail |
| Herramienta MCP | library_files_detail |
| Alcance | library.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
assetId: string // uuid
}Salida
Record<string, unknown>Actualizado el 1 de enero de 1970