Privacy and analytics

We use necessary technical cookies and, only with your consent, analytics and marketing pixels to improve the website and measure campaigns.

Privacy policyCookie policy
Docs
English
EspañolEnglishFrançaisDeutschItalianoPortuguês

Getting started

  • What is Nömad?
  • Getting started with Nömad
  • Create your brand and complete the Genome
  • Invite your team
  • Glossary

Brand OS

  • What is inside Brand OS
  • What is the Genome?
  • Who is Nödo?
  • Talk to Nödo: voice, cards and ordering from the Store
  • Conversations: your team and Nödo
  • What does a Brand Manager do?
  • Brand Kit and Library
  • Posts and calendar
  • Connections
  • Meetings
  • Files we send you with NödoTransfer
  • Your quotes

Work

  • Work and tasks
  • Ordering work
  • Following, reviewing and approving deliveries
  • Approving the posts Nömad prepares
  • Custom quotes
  • Brand history
  • Yes, there are humans behind it

Account and billing

  • Plans and pricing
  • Billing and payments
  • Paying from the apps (iPhone and Android)
  • People and access
  • Organization and brand roles
  • Workspaces and multiple brands
  • Your name and @username
  • Languages, apps and data
  • Leave, close or delete: account, brands and workspaces
  • Delete and restore: what goes and what stays
  • Inbox and notifications: how we let you know
  • Push notifications on your phone and browser
  • Nömad emails and your preferences

Help

  • How to get help

API

  • Brand API
    • Errors
    • Permissions and roles
    • Events and webhooks
    • Brand
    • Genome
    • Brand Kit
    • Library
    • Works
    • Calendar
    • Connections
    • Publishing
    • Inbox
    • Team
    • Account and team
    • Conversation
    • Memory
    • Questions
    • Media
    • Store
    • Plan
    • Orders
    • Activity
    • Workspace
    • Your account
    • Billing
    • Sync
    • Website and domains
    • Statistics
    • Events

MCP

  • MCP server

Connectors

  • Brand connectors

Nödo and agents

  • Nödo in the brand

Genome

  • Genome specification
API/Brand API
Reference16 min read

Library

Brand files.

On this page
  • library.search · Search the Library
  • library.asset.get · Open a file
  • library.asset.review · Approve or archive a file
  • library.upload.create · Upload a file
Русский
한국어
日本語
中文
हिन्दी
Open the app
library.files.trash · Delete files
  • library.files.restore · Restore files
  • library.files.purge · Delete files for good
  • library.trash.empty · Empty the trash
  • library.files.prepare_upload · Prepare an upload
  • library.files.register · Register an uploaded file
  • library.files.import · Import a copy into the Library
  • library.files.update · Edit a file
  • library.files.poster · Save a video poster
  • library.files.set_section · Move a file to another section
  • library.versions.commit · Add a new version
  • library.versions.restore · Restore a version
  • library.collections.create · Create a collection
  • library.collections.rename · Rename a collection
  • library.collections.delete · Delete a collection
  • library.collections.restore · Restore a collection
  • library.collections.add_files · Add files to a collection
  • library.collections.remove_file · Remove a file from a collection
  • library.collections.reorder · Reorder a collection
  • library.exports.create · Export files
  • library.exports.estimate · Estimate an export
  • library.exports.cancel · Cancel an export
  • library.trash.count · Files in the trash
  • library.files.page · Library page
  • library.files.preview · One Library file
  • library.files.sign · Temporary file links
  • library.files.detail · File detail
  • library.search · Search the Library

    Searches brand files by name, category or type. Agents and external clients only see files approved for agent use; people see what their role allows.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/library.search
    MCP toollibrary_search
    Scopelibrary.read
    Minimum roleViewer
    Human confirmationNo
    DoorsNödo, Voice, MCP, API, Chat, Screens, Apps
    StatusAvailable
    Widgetcarousel

    Input

    {
      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
    }

    Output

    {
      items: Array<{
        id: string  // uuid
        name: string
        category: string | null
        mimeType: string
        status: "proposed" | "approved" | "archived"
        createdAt: string
      }>
      nextCursor: string | null
    }

    library.asset.get · Open a file

    Details of one file plus a signed download URL valid for one hour. The URL is signed from the stored record, never from a caller-supplied path.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/library.asset.get
    MCP toollibrary_asset_get
    Scopelibrary.read
    Minimum roleViewer
    Human confirmationNo
    DoorsNödo, Voice, MCP, API, Chat, Screens, Apps
    StatusAvailable
    Widgetrecord

    Input

    {
      assetId: string  // uuid
    }

    Output

    {
      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
    }

    library.asset.review · Approve or archive a file

    Approves or archives a proposed file, for example an image Nödo generated. Only approved files can be used by agents or published.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.asset.review
    MCP toollibrary_asset_review
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsNödo, MCP, API, Chat, Screens, Apps
    StatusAvailable
    Widgetconfirm

    Input

    {
      assetId: string  // uuid
      decision: "approve" | "archive"
      note?: string  // ≤ 500
    }

    Output

    {
      ok: true
      id?: string
      revision?: integer  // -9007199254740991–9007199254740991
    }

    library.upload.create · Upload a file

    Returns a signed upload URL for one file within the plan storage quota; call again with complete: true and the upload id to register it.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.upload.create
    MCP toollibrary_upload_create
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, Nödo, Chat, Screens, Apps
    StatusPlanned

    Input

    {
      step: "start"
      fileName: string  // ≤ 200
      mimeType: string  // ≤ 120
      sizeBytes: integer  // –9007199254740991
      category?: string  // ≤ 60
    }
    | {
      step: "complete"
      uploadId: string
      name?: string  // ≤ 200
    }

    Output

    {
      uploadId: string
      uploadUrl?: string  // uri
      assetId?: string  // uuid
    }

    library.files.trash · Delete files

    Moves up to 100 Library files to the trash, where they can be restored during the recovery window. Files on hold (a publication in progress, a legal hold) are refused.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.files.trash
    MCP toollibrary_files_trash
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      assetIds: string[]  // ≤ 100 items
    }

    Output

    {
      ids: string[]
      blocked: integer  // -9007199254740991–9007199254740991
    }

    library.files.restore · Restore files

    Brings up to 100 files back from the trash with the status they had (restoring never approves). Fails once the recovery window is over.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.files.restore
    MCP toollibrary_files_restore
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      assetIds: string[]  // ≤ 100 items
    }

    Output

    {
      ids: string[]
      blocked: integer  // -9007199254740991–9007199254740991
    }

    library.files.purge · Delete files for good

    Deletes for good files that are already in the trash, all or nothing. Owner and admin of the brand only; there is no undo.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.files.purge
    MCP toollibrary_files_purge
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      assetIds: string[]  // ≤ 100 items
    }

    Output

    {
      ids: string[]
      blocked: integer  // -9007199254740991–9007199254740991
    }

    library.trash.empty · Empty the trash

    Deletes for good everything in the brand trash; files on hold stay and are counted in blocked. There is no undo.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.trash.empty
    MCP toollibrary_trash_empty
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {}

    Output

    {
      ids: string[]
      blocked: integer  // -9007199254740991–9007199254740991
    }

    library.files.prepare_upload · Prepare an upload

    Before uploading one file to the Library: checks the category and the plan storage, reserves the bytes and returns a single-use signed upload URL (2 h) for a path the server chooses. Upload the bytes to uploadUrl (HTTP PUT), then call library.files.register with storagePath. Refusals: invalid_input (category), conflict with detail QUOTA_EXCEEDED (plan storage or file size).

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.files.prepare_upload
    MCP toollibrary_files_prepare_upload
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsScreens, Apps, API
    StatusAvailable

    Input

    {
      fileName: string  // ≤ 255
      fileSize: integer  // –9007199254740991
      mimeType: string  // ≤ 255
      category: string  // ≤ 64
    }

    Output

    {
      storagePath: string
      uploadUrl: string  // uri
      token: string
    }

    library.files.register · Register an uploaded file

    Registers in the Library a file already uploaded with its signed URL: checks the stored object matches, counts it against the plan storage, then processes and indexes it. Brand uploads are approved; staff uploads wait for review. Registering the same object twice returns the same file.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.files.register
    MCP toollibrary_files_register
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsScreens, Apps, API
    StatusAvailable

    Input

    {
      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
    }

    Output

    {
      asset: {
        id: string  // uuid
      }
    }

    library.files.import · Import a copy into the Library

    Records in the brand Library a copy of a file that lives elsewhere (another Library, a mail, a picture on screen) whose bytes are already stored at its Library path, checked against the stored object. Processed, indexed and counted like an upload, with where it came from in its metadata. Brand imports are approved; staff imports wait for review. The same bytes under the same name return the same file.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.files.import
    MCP toollibrary_files_import
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsScreens, Apps, API
    StatusAvailable

    Input

    {
      storagePath: string  // ≤ 1024
      fileName: string  // ≤ 180
      fileSize: integer  // –9007199254740991
      mimeType: string  // ≤ 255
      sha256: string
      source: {
        kind: string
      }
    }

    Output

    {
      id: string  // uuid
      name: string
    }

    library.files.update · Edit a file

    Changes the name, description, alt text or category of one Library file. altText describes an image for screen readers and publications; an empty string or null clears it. A category and a type that disagree are rejected.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.files.update
    MCP toollibrary_files_update
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      assetId: string  // uuid
      name?: string  // ≤ 160
      description?: string  // ≤ 1000
      altText?: string | null
      type?: string  // ≤ 64
      categoryId?: string | null
    }

    Output

    {
      ok: true
      id?: string
      revision?: integer  // -9007199254740991–9007199254740991
    }

    library.files.poster · Save a video poster

    Registers as the thumbnail of a Library video the WebP frame the browser already uploaded to the poster path of its current version.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.files.poster
    MCP toollibrary_files_poster
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsScreens, Apps
    StatusAvailable

    Input

    {
      assetId: string  // uuid
      width: integer  // –10000
      height: integer  // –10000
      fileSize: integer  // –1048576
    }

    Output

    {
      ok: true
      id?: string
      revision?: integer  // -9007199254740991–9007199254740991
    }

    library.files.set_section · Move a file to another section

    Moves a Library file to another section by changing its role within its own format (an image can become a logo or a product photo, never a font). Returns the new type.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.files.set_section
    MCP toollibrary_files_set_section
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      assetId: string  // uuid
      group: "logos" | "fonts" | "images" | "icons" | "products" | "videos" | "audio" | "documents"
    }

    Output

    {
      type: string
    }

    library.versions.commit · Add a new version

    Makes an object already uploaded for the file the current version. The file keeps its id; renditions are rebuilt. Fails on another format or over the plan storage.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.versions.commit
    MCP toollibrary_versions_commit
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      assetId: string  // uuid
      storagePath: string  // ≤ 1024
      fileName: string  // ≤ 255
    }

    Output

    {
      version: integer  // -9007199254740991–9007199254740991
    }

    library.versions.restore · Restore a version

    Makes an earlier version current again, as a new version on top. Restoring the current version changes nothing.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.versions.restore
    MCP toollibrary_versions_restore
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      assetId: string  // uuid
      versionNumber: integer  // 1–9007199254740991
    }

    Output

    {
      version: integer  // -9007199254740991–9007199254740991
    }

    library.collections.create · Create a collection

    Creates one Library collection at the end of the list. Names are unique per brand (conflict otherwise).

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.collections.create
    MCP toollibrary_collections_create
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      name: string  // ≤ 80
    }

    Output

    {
      id: string  // uuid
      name: string
    }

    library.collections.rename · Rename a collection

    Renames one Library collection. Names are unique per brand (conflict otherwise).

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.collections.rename
    MCP toollibrary_collections_rename
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      collectionId: string  // uuid
      name: string  // ≤ 80
    }

    Output

    {
      ok: true
      id?: string
      revision?: integer  // -9007199254740991–9007199254740991
    }

    library.collections.delete · Delete a collection

    Removes one collection; its files stay in the Library. Returns what was deleted so library.collections.restore can put it back.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.collections.delete
    MCP toollibrary_collections_delete
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      collectionId: string  // uuid
    }

    Output

    {
      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
      }
    }

    library.collections.restore · Restore a collection

    Undo of library.collections.delete: the same collection comes back with its id, place and files; files removed for good meanwhile are skipped.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.collections.restore
    MCP toollibrary_collections_restore
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      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
      }
    }

    Output

    {
      ok: true
      id?: string
      revision?: integer  // -9007199254740991–9007199254740991
    }

    library.collections.add_files · Add files to a collection

    Appends up to 100 Library files to a collection; files already in it are skipped. Returns how many were added.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.collections.add_files
    MCP toollibrary_collections_add_files
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      collectionId: string  // uuid
      assetIds: string[]  // ≤ 100 items
    }

    Output

    {
      added: integer  // -9007199254740991–9007199254740991
    }

    library.collections.remove_file · Remove a file from a collection

    Takes one file out of a collection; the file stays in the Library.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.collections.remove_file
    MCP toollibrary_collections_remove_file
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      collectionId: string  // uuid
      assetId: string  // uuid
    }

    Output

    {
      ok: true
      id?: string
      revision?: integer  // -9007199254740991–9007199254740991
    }

    library.collections.reorder · Reorder a collection

    Saves the order of the files of one collection in a single write, first to last.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.collections.reorder
    MCP toollibrary_collections_reorder
    Scopelibrary.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      collectionId: string  // uuid
      assetIds: string[]  // ≤ 500 items
    }

    Output

    {
      ok: true
      id?: string
      revision?: integer  // -9007199254740991–9007199254740991
    }

    library.exports.create · Export files

    Converts or packs brand Library files with a recipe. Light work comes back finished (queued: false, with its signed link); video, audio and large batches are queued (queued: true). Converting needs the plan's library export; at most five exports in flight per person.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/library.exports.create
    MCP toollibrary_exports_create
    Scopelibrary.read
    Minimum roleViewer
    Human confirmationNo
    DoorsScreens
    StatusAvailable

    Input

    {
      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
    }

    Output

    {
      ok: true
      queued: boolean
      job: Record<string, unknown>
    }
    | {
      ok: false
      reason: string  // ≤ 60
      job?: Record<string, unknown>
      denial?: Record<string, unknown>
    }

    library.exports.estimate · Estimate an export

    The real size of one picture after a recipe, without storing anything (and, for a cover crop, where the subject was found); for a font, its variable axes and outline flavour.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/library.exports.estimate
    MCP toollibrary_exports_estimate
    Scopelibrary.read
    Minimum roleViewer
    Human confirmationNo
    DoorsScreens
    StatusAvailable

    Input

    {
      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.
    }

    Output

    {
      ok: true
    }
    | {
      ok: false
      reason: string  // ≤ 60
      job?: Record<string, unknown>
      denial?: Record<string, unknown>
    }

    library.exports.cancel · Cancel an export

    Cancels one of the person's own exports while it is queued or running; a finished file is left as it is. Returns the job as it stands.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/library.exports.cancel
    MCP toollibrary_exports_cancel
    Scopelibrary.write
    Minimum roleself
    Human confirmationNo
    DoorsScreens
    StatusAvailable

    Input

    {
      id: string  // uuid
    }

    Output

    {
      job: Record<string, unknown>
    }

    library.trash.count · Files in the trash

    How many of the brand Library's files sit in the trash (whole files, not their parts).

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/library.trash.count
    MCP toollibrary_trash_count
    Scopelibrary.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {}

    Output

    {
      count: integer  // 0–9007199254740991
    }

    library.files.page · Library page

    One page of the brand Library for one section (all, a file group, collection:<id>, favorites, mine = files the caller uploaded, or trash), ordered as asked; each file says whether it is the caller's (mine). With includeCounts also the rail counts and whether the caller may manage files. The same read the file pickers use.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/library.files.page
    MCP toollibrary_files_page
    Scopelibrary.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      view: string  // ≤ 80
      query?: string  // ≤ 120
      sort?: string  // ≤ 20
      offset?: integer  // 0–5000
      includeCounts?: boolean
    }

    Output

    {
      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.
    }

    library.files.preview · One Library file

    The file behind a shared ?asset= link, as the preview draws it (trashed files too); file is null when it does not exist or is not the caller's to see.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/library.files.preview
    MCP toollibrary_files_preview
    Scopelibrary.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      assetId: string  // uuid
    }

    Output

    {
      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
    }

    library.files.sign · Temporary file links

    One-hour signed URLs to view or download Library files: each storagePath must be the original or a variant of a live file of this brand that its members see (brand or public audience); anything else is refused. Up to 100 at once; urls maps asset id to URL.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/library.files.sign
    MCP toollibrary_files_sign
    Scopelibrary.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      assets: Array<{
        assetId: string  // uuid
        storagePath: string  // ≤ 1024
      }>  // ≤ 100 items
    }

    Output

    {
      urls: Record<string, string>
    }

    library.files.detail · File detail

    The detail page of a Library file with the category catalogue and whether the caller may manage it. A file in the trash answers asset: null and deleted (name, when, who) so its deleted state can be shown instead of a 404.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/library.files.detail
    MCP toollibrary_files_detail
    Scopelibrary.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      assetId: string  // uuid
    }

    Output

    Record<string, unknown>

    Updated on January 1, 1970

    PreviousBrand KitNextWorks

    In this section

    • Errors
    • Permissions and roles
    • Events and webhooks
    • Brand
    • Genome
    • Brand Kit
    • Works
    • Calendar
    Can't find what you need? Write to usWrite to usGo to the app
    © 2026 Nömad · Nömad documentationLinkedInInstagramThreadsFacebookTikTokYouTubeX
    Go to nomad.oooBack to top

    On this page

    • library.search · Search the Library
    • library.asset.get · Open a file
    • library.asset.review · Approve or archive a file
    • library.upload.create · Upload a file
    • library.files.trash · Delete files
    • library.files.restore · Restore files
    • library.files.purge · Delete files for good
    • library.trash.empty · Empty the trash
    • library.files.prepare_upload · Prepare an upload
    • library.files.register · Register an uploaded file
    • library.files.import · Import a copy into the Library
    • library.files.update · Edit a file
    • library.files.poster · Save a video poster
    • library.files.set_section · Move a file to another section
    • library.versions.commit · Add a new version
    • library.versions.restore · Restore a version
    • library.collections.create · Create a collection
    • library.collections.rename · Rename a collection
    • library.collections.delete · Delete a collection
    • library.collections.restore · Restore a collection
    • library.collections.add_files · Add files to a collection
    • library.collections.remove_file · Remove a file from a collection
    • library.collections.reorder · Reorder a collection
    • library.exports.create · Export files
    • library.exports.estimate · Estimate an export
    • library.exports.cancel · Cancel an export
    • library.trash.count · Files in the trash
    • library.files.page · Library page
    • library.files.preview · One Library file
    • library.files.sign · Temporary file links
    • library.files.detail · File detail