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
Reference13 min read

Brand Kit

Colors, typography, logos and instructions.

On this page
  • kit.read · Read the Brand Kit
  • kit.colors.add · Add a color
  • kit.fonts.search · Search typefaces
  • kit.fonts.add · Add a typeface
  • kit.instructions.update · Edit Kit instructions
Русский
한국어
日本語
中文
हिन्दी
Open the app
  • kit.system.read · Read the brand system
  • kit.system.build · Build or refresh the brand system
  • kit.system.update · Change something in the brand system
  • kit.system.publish · Publish the brand system
  • kit.colors.delete · Delete a color
  • kit.assets.toggle · Show or hide a file in the Kit
  • kit.assets.add · Add files to the Kit
  • kit.colors.restore · Restore a color
  • kit.colors.update · Edit a color
  • kit.colors.reorder · Reorder the colors
  • kit.fonts.create · Add a typeface by name
  • kit.fonts.install_weight · Install one Google Fonts weight
  • kit.fonts.install · Install a Google Fonts family
  • kit.identity.update · Adjust an identity asset
  • kit.logo.set_primary · Choose the primary logo
  • kit.visibility.set · Change Kit visibility
  • kit.stickers.register · Add a brand sticker
  • kit.overview · Brand Kit at a glance
  • kit.read · Read the Brand Kit

    Colors with their role, the Kit typography (families pending review included, marked proposed), approved logos and usage instructions. Bounded to what agents may use; never returns storage paths (use library.asset.get for a file).

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/kit.read
    MCP toolkit_read
    Scopekit.read
    Minimum roleViewer
    Human confirmationNo
    DoorsNödo, Voice, MCP, API, Chat, Screens, Apps
    StatusAvailable
    Widgetpalette

    Input

    {
      parts?: Array<"colors" | "typography" | "logos" | "instructions">
    }

    Output

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

    kit.colors.add · Add a color

    Adds one color to the Kit with a name and role. The HEX value is normalized; an existing HEX with the same role is rejected.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.colors.add
    MCP toolkit_colors_add
    Scopekit.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsNödo, MCP, API, Chat, Screens, Apps
    StatusAvailable
    Widgetconfirm

    Input

    {
      name: string  // ≤ 60
      hex: string
      role?: "primary" | "secondary" | "accent" | "background" | "foreground" | "neutral" | "unspecified"  // default "unspecified"
    }

    Output

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

    kit.fonts.search · Search typefaces

    Finds Google Fonts families (open licences) by name or category, most popular first, shown as specimens. Only Google Fonts: other foundries need a licence the brand must upload itself.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/kit.fonts.search
    MCP toolkit_fonts_search
    Scopekit.read
    Minimum roleViewer
    Human confirmationNo
    DoorsNödo, Voice, MCP, API, Chat, Screens, Apps
    StatusAvailable
    Widgetfonts

    Input

    {
      query?: string  // ≤ 80
      category?: "sans-serif" | "serif" | "display" | "handwriting" | "monospace"
      limit?: integer  // 1–6 · default 4
    }

    Output

    {
      items: Array<{
        family: string
        category: "sans-serif" | "serif" | "display" | "handwriting" | "monospace"
        weights: string[]
      }>
    }

    kit.fonts.add · Add a typeface

    Adds a Google Fonts family to the Kit with a role and its upright weights (all of them when none are given). The family must exist in Google Fonts; it is stored in the brand and approved once the person confirms.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.fonts.add
    MCP toolkit_fonts_add
    Scopekit.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsNödo, MCP, API, Chat, Screens, Apps
    StatusAvailable
    Widgetconfirm

    Input

    {
      family: string  // ≤ 80
      role?: "heading" | "body" | "accent"  // default "body"
      weights?: string[]  // ≤ 9 items
    }

    Output

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

    kit.instructions.update · Edit Kit instructions

    Replaces the usage text of one Kit section (logos, colors, typography, imagery).

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.instructions.update
    MCP toolkit_instructions_update
    Scopekit.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsNödo, MCP, API, Chat, Screens, Apps
    StatusAvailable
    Widgetconfirm

    Input

    {
      section: "logos" | "colors" | "typography" | "imagery" | "general"
      text: string  // ≤ 4000
    }

    Output

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

    kit.system.read · Read the brand system

    The brand's design system: its status, versions, the run at work (with any questions it is waiting on) and the files asked for — by default README.md (the brand book, written as rules) and tokens.json of the PUBLISHED version, falling back to the newest ready one. Read it before designing any piece for the brand: README first, then tokens; a component's README before using it. status: none means the brand has no system yet (kit.system.build makes one).

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/kit.system.read
    MCP toolkit_system_read
    Scopekit.read
    Minimum roleViewer
    Human confirmationNo
    DoorsNödo, Voice, MCP, API, Chat, Screens, Apps
    StatusAvailable

    Input

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

    Output

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

    kit.system.build · Build or refresh the brand system

    Starts the background job (Opus) that builds the brand's design system from everything Nömad knows — the Genome, the site, the Kit and the Library — or refreshes an existing one from those sources (a refresh keeps every note and anything a person added). It takes minutes; a brand's first system is on Nömad, refreshes spend the brand's AI budget. The result is a new version to review and publish. A run that stopped with questions continues when called with answers (question key → chosen value). Never ask the person stock questions first: the job reads the sources and asks only what they cannot settle.

    Consumes the brand AI budget.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.system.build
    MCP toolkit_system_build
    Scopekit.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsNödo, MCP, API, Chat, Screens, Apps
    StatusAvailable
    Widgetconfirm

    Input

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

    Output

    {
      ok: true
      id?: string
      revision?: integer  // -9007199254740991–9007199254740991
      status: "queued" | "running"
    }

    kit.system.update · Change something in the brand system

    A targeted change to an existing brand system, in the person's words ("square corners on buttons", "add a story template", "the accent is too loud in dark mode"). The background job (Opus) changes only that, checks it and saves a new version to publish; it spends the brand's AI budget. Use kit.system.build for a first system or a refresh from the sources.

    Consumes the brand AI budget.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.system.update
    MCP toolkit_system_update
    Scopekit.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsNödo, MCP, API, Chat, Screens, Apps
    StatusAvailable
    Widgetconfirm

    Input

    {
      instruction: string  // ≤ 2000
    }

    Output

    {
      ok: true
      id?: string
      revision?: integer  // -9007199254740991–9007199254740991
      status: "queued" | "running"
    }

    kit.system.publish · Publish the brand system

    Publishes a ready version of the brand system (default: the newest). From then on it is the version Nödo, generations and every agent read. Publishing an older version rolls back.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.system.publish
    MCP toolkit_system_publish
    Scopekit.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsNödo, MCP, API, Chat, Screens, Apps
    StatusAvailable
    Widgetconfirm

    Input

    {
      versionId?: string  // uuid
    }

    Output

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

    kit.colors.delete · Delete a color

    Removes one color from the Kit. Returns the deleted row so kit.colors.restore can put it back.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.colors.delete
    MCP toolkit_colors_delete
    Scopekit.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      colorId: string  // uuid
    }

    Output

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

    kit.assets.toggle · Show or hide a file in the Kit

    Shows or hides one Library file in the Brand Kit.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.assets.toggle
    MCP toolkit_assets_toggle
    Scopekit.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      assetId: string  // uuid
      show: boolean
    }

    Output

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

    kit.assets.add · Add files to the Kit

    Shows up to 100 Library logos, icons or typography files in the Brand Kit at once, all or nothing. Returns the ids shown.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.assets.add
    MCP toolkit_assets_add
    Scopekit.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

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

    Output

    {
      ids: string[]
    }

    kit.colors.restore · Restore a color

    Undo of kit.colors.delete: puts back the same row, with its id and place. Needs the same right as deleting it.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.colors.restore
    MCP toolkit_colors_restore
    Scopekit.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

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

    Output

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

    kit.colors.update · Edit a color

    Changes the name, role or HEX of one Kit color. Any manual edit takes ownership: the website extractor no longer overwrites it. Only six-digit HEX values are stored.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.colors.update
    MCP toolkit_colors_update
    Scopekit.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      colorId: string  // uuid
      name?: string  // ≤ 120
      category?: string | null
      hex?: string  // ≤ 16
      description?: string  // ≤ 2000
    }

    Output

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

    kit.colors.reorder · Reorder the colors

    Saves the palette order in one write. It never changes roles or extraction provenance; every color must belong to the brand.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.colors.reorder
    MCP toolkit_colors_reorder
    Scopekit.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      colors: Array<{
        id: string  // uuid
        sortOrder: integer  // -9007199254740991–9007199254740991
      }>  // ≤ 200 items
    }

    Output

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

    kit.fonts.create · Add a typeface by name

    Adds a typeface to the Kit by name, family and role only, without a font file. Approved and shown in the Kit.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.fonts.create
    MCP toolkit_fonts_create
    Scopekit.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      name: string  // ≤ 160
      family: string  // ≤ 120
      role?: string  // ≤ 40
      provider?: string  // ≤ 40
    }

    Output

    {
      font: {
        id: string  // uuid
      }
    }

    kit.fonts.install_weight · Install one Google Fonts weight

    Downloads one weight (400, 700italic…) of a Google Fonts family, stores the WOFF2 in the brand and adds it to the Kit.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.fonts.install_weight
    MCP toolkit_fonts_install_weight
    Scopekit.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      family: string  // ≤ 120
      variant: string  // ≤ 20
      role?: string  // ≤ 40
    }

    Output

    {
      font: {
        id: string  // uuid
      }
    }

    kit.fonts.install · Install a Google Fonts family

    Installs the chosen weights of a Google Fonts family in the Kit, each one as a brand font file. Returns how many were installed and their files.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.fonts.install
    MCP toolkit_fonts_install
    Scopekit.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      family: string  // ≤ 120
      variants: string[]  // ≤ 40 items
      role?: string  // ≤ 40 · default "body"
    }

    Output

    {
      count: integer  // -9007199254740991–9007199254740991
      assets: Array<{
        id: string  // uuid
      }>
    }

    kit.identity.update · Adjust an identity asset

    Changes the variant of a logo, the role of a font or the section of a visual resource of the Kit. expectedUpdatedAt must match the stored file (conflict otherwise).

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.identity.update
    MCP toolkit_identity_update
    Scopekit.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      assetId: string  // uuid
      expectedUpdatedAt: string | null
      change: {
        kind: "logo" | "font" | "resource"
      }
    }

    Output

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

    kit.logo.set_primary · Choose the primary logo

    Makes an approved Library logo or icon the brand primary logo, shown in the header, sidebar and switcher.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.logo.set_primary
    MCP toolkit_logo_set_primary
    Scopekit.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      assetId: string  // uuid
    }

    Output

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

    kit.visibility.set · Change Kit visibility

    Makes the Brand Kit private or public (a link anyone can open).

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.visibility.set
    MCP toolkit_visibility_set
    Scopekit.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      visibility: "private" | "public"
    }

    Output

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

    kit.stickers.register · Add a brand sticker

    Registers an already-uploaded private PNG as a brand sticker. The object must belong to the caller and brand.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/kit.stickers.register
    MCP toolkit_stickers_register
    Scopekit.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      name: string  // ≤ 80
      storagePath: string  // ≤ 180
      sha256: string
    }

    Output

    {
      id: string  // uuid
    }

    kit.overview · Brand Kit at a glance

    The Kit's colours, logos and typefaces with the primary logo and signed links, as the home card draws them. For the full Kit use kit.read.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/kit.overview
    MCP toolkit_overview
    Scopekit.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

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

    Output

    {
      colors: Record<string, unknown>[]
      logos: Record<string, unknown>[]
      fonts: Record<string, unknown>[]
      primaryLogo: Record<string, unknown> | null
    }

    Updated on January 1, 1970

    PreviousGenomeNextLibrary

    In this section

    • Errors
    • Permissions and roles
    • Events and webhooks
    • Brand
    • Genome
    • Library
    • 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

    • kit.read · Read the Brand Kit
    • kit.colors.add · Add a color
    • kit.fonts.search · Search typefaces
    • kit.fonts.add · Add a typeface
    • kit.instructions.update · Edit Kit instructions
    • kit.system.read · Read the brand system
    • kit.system.build · Build or refresh the brand system
    • kit.system.update · Change something in the brand system
    • kit.system.publish · Publish the brand system
    • kit.colors.delete · Delete a color
    • kit.assets.toggle · Show or hide a file in the Kit
    • kit.assets.add · Add files to the Kit
    • kit.colors.restore · Restore a color
    • kit.colors.update · Edit a color
    • kit.colors.reorder · Reorder the colors
    • kit.fonts.create · Add a typeface by name
    • kit.fonts.install_weight · Install one Google Fonts weight
    • kit.fonts.install · Install a Google Fonts family
    • kit.identity.update · Adjust an identity asset
    • kit.logo.set_primary · Choose the primary logo
    • kit.visibility.set · Change Kit visibility
    • kit.stickers.register · Add a brand sticker
    • kit.overview · Brand Kit at a glance