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çaisDeutschItaliano

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

Conversation

History of the current thread.

On this page
  • conversation.search · Search the conversation
  • conversation.read · Read a message
  • conversation.choice · Ask with options
  • conversation.request_file · Ask for a file
Português
Русский
한국어
日本語
中文
हिन्दी
Open the app
  • conversation.threads.create · Create a conversation
  • conversation.threads.start · Start a conversation
  • conversation.messages.send · Send a message
  • conversation.threads.rename · Rename a conversation
  • conversation.threads.set_state · Close or reopen a conversation
  • conversation.task_briefing.open · Open the Nödo briefing
  • conversation.drafts.reserve · Reserve a draft
  • conversation.uploads.discard · Discard an unsent file
  • conversation.commands.run · Run a slash command
  • conversation.polls.vote · Vote in a poll
  • conversation.confirmations.decide · Accept or cancel a Nödo change
  • conversation.images.review · Approve or archive a chat image
  • conversation.cards.run · Card action
  • conversation.cards.refresh · Refresh a card
  • conversation.cards.undo · Undo from a card
  • conversation.folders.save · Save a folder
  • conversation.folders.delete · Delete a folder
  • conversation.folders.reorder · Reorder folders
  • conversation.threads.update_view · Pin, archive or mark read
  • conversation.threads.set_audience · Private or shared chat
  • conversation.threads.delete · Delete a Nödo chat
  • conversation.threads.escalate · Hand over to my Brand Manager
  • conversation.agent_runs.start · Ask Nödo for a draft
  • conversation.agent_runs.cancel · Stop Nödo
  • conversation.deliveries.review · Approve or reject a Nödo delivery
  • conversation.feedback.submit · Report an issue
  • conversation.feedback.discard_upload · Discard a ticket file
  • conversation.unread_count · Unread messages
  • conversation.inbox.list · Brand messages
  • conversation.inbox.seed · First screen of Messages
  • conversation.inbox.thread · One messages thread
  • conversation.inbox.archived · Archived messages
  • conversation.inbox.search · Search messages
  • conversation.messages.page · Messages of a thread
  • conversation.team.latest · The open team thread
  • conversation.access · What you can do in the chat
  • conversation.today · Today with Nödo
  • conversation.dictation.prepare_upload · Prepare a dictation
  • conversation.dictation.transcribe · Transcribe a dictation
  • conversation.search · Search the conversation

    Searches earlier messages of the current thread only.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/conversation.search
    MCP toolconversation_search
    Scopeconversation.read
    Minimum roleViewer
    Human confirmationNo
    DoorsNödo, Voice, Chat, Screens, Apps
    StatusAvailable

    Input

    {
      query: string  // ≤ 200
      limit?: integer  // 1–10 · default 10
    }

    Output

    {
      items: Array<{
        sequence: integer  // -9007199254740991–9007199254740991
        role: string
        excerpt: string
        createdAt: string
      }>
    }

    conversation.read · Read a message

    Reads one full message of the current thread by sequence, in 6,000 character pages.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/conversation.read
    MCP toolconversation_read
    Scopeconversation.read
    Minimum roleViewer
    Human confirmationNo
    DoorsNödo, Voice, Chat, Screens, Apps
    StatusAvailable

    Input

    {
      sequence: integer  // 1–9007199254740991
      page?: integer  // 1–9007199254740991 · default 1
    }

    Output

    {
      sequence: integer  // -9007199254740991–9007199254740991
      role: string
      text: string
      hasMore: boolean
    }

    conversation.choice · Ask with options

    Shows one question with 2 to 6 answer buttons in the thread; the person's pick arrives as their next message. Use it only when the next step depends on choosing between concrete options (a format, a date, one of two directions); then end your answer and wait. Stores nothing; for a missing brand fact that must be kept, use ask_brand_question.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/conversation.choice
    MCP toolconversation_choice
    Scopeconversation.read
    Minimum roleViewer
    Human confirmationNo
    DoorsNödo
    StatusAvailable
    Widgetchoice

    Input

    {
      question: string  // ≤ 300
      options: string[]  // ≤ 6 items
      allowOther?: boolean  // default true · Whether the person may write their own answer instead.
    }

    Output

    {
      question: string
      options: string[]
      allowOther: boolean
    }

    conversation.request_file · Ask for a file

    Asks the person to attach a file to the thread (a brand manual, a logo, a photo) with a drop zone on the card; the file arrives with their next message. Use it when a task needs a file you do not have; say why in purpose, then end your answer and wait.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/conversation.request_file
    MCP toolconversation_request_file
    Scopeconversation.read
    Minimum roleViewer
    Human confirmationNo
    DoorsNödo
    StatusAvailable
    Widgetfile_request

    Input

    {
      purpose: string  // ≤ 300
      accept?: "image" | "pdf" | "document" | "any"  // default "any"
      multiple?: boolean  // default false
    }

    Output

    {
      purpose: string
      accept: "image" | "pdf" | "document" | "any"
      multiple: boolean
    }

    conversation.threads.create · Create a conversation

    Opens an empty conversation in the brand, with Nödo (agent) or with the team (team), optionally tied to a work. internal threads are for the Nömad team only. Returns the thread; it sends no message.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.threads.create
    MCP toolconversation_threads_create
    Scopeconversation.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      title: string  // ≤ 160
      workId?: string  // uuid
      audience: "brand" | "internal"
      kind?: "agent" | "team"
    }

    Output

    {
      conversation: Record<string, unknown>
    }

    conversation.threads.start · Start a conversation

    Creates a thread and posts its first message in one step; the message becomes the title. Files uploaded under a reserved draftId move into the thread. With agent, Nödo answers in a run whose id comes back.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.threads.start
    MCP toolconversation_threads_start
    Scopeconversation.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      kind: "agent" | "team"
      content: string  // ≤ 4000
      idempotencyKey: string  // uuid
      workId?: string  // uuid
      draftId?: string  // uuid
      attachments?: Array<{
        path: string  // ≤ 600
        name: string  // ≤ 200
        mime: string  // ≤ 120
        size: integer  // –9007199254740991
      }>  // ≤ 10 items
      mentions?: Array<{
        type: "mention"
        capability: string  // ≤ 80
        input?: Record<string, unknown>  // default {}
        label: string  // ≤ 160
        at?: {
          start: integer  // 0–9007199254740991
          end: integer  // 0–9007199254740991
        }
      }>  // ≤ 6 items
      inserts?: unknown[]  // ≤ 4 items
      screen?: {
        path: string
        title?: string
        navigation?: boolean  // default true
        form?: "phone" | "tablet" | "desktop"
        elements?: string[]  // ≤ 40 items · default []
      }
    }

    Output

    {
      messageId?: string | null
      runId?: string | null
      status?: string | null
      conversation: {
        id: string
        brandId: string
        title: string
        workId: string | null
        audience: string  // `brand`, `internal` or `private`.
        kind: string  // `agent` (Nödo answers) or `team` (the people at Nömad).
        state: string  // `open`, `waiting_brand`, `waiting_team` or `closed`.
        channel: string  // `app`, `whatsapp` or `email`.
        titleAuto: boolean
        assignee: {
          id: string
          name: string
          avatarUrl: string | null
        }
        | null
        lastMessageAt: string | null
        version: integer  // -9007199254740991–9007199254740991
        createdAt: string
        updatedAt: string
      }
    }

    conversation.messages.send · Send a message

    Posts a message in a brand thread as the caller: text, files already uploaded to the thread folder, @ mentions and «+» cards. In a Nödo chat Nödo answers in a run. The same idempotencyKey never posts twice.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.messages.send
    MCP toolconversation_messages_send
    Scopeconversation.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      conversationId: string  // uuid
      content: string  // ≤ 4000
      idempotencyKey: string  // uuid
      visibility?: "shared" | "internal"
      attachments?: Array<{
        path: string  // ≤ 600
        name: string  // ≤ 200
        mime: string  // ≤ 120
        size: integer  // –9007199254740991
      }>  // ≤ 10 items
      mentions?: Array<{
        type: "mention"
        capability: string  // ≤ 80
        input?: Record<string, unknown>  // default {}
        label: string  // ≤ 160
        at?: {
          start: integer  // 0–9007199254740991
          end: integer  // 0–9007199254740991
        }
      }>  // ≤ 6 items
      inserts?: unknown[]  // ≤ 4 items
      screen?: {
        path: string
        title?: string
        navigation?: boolean  // default true
        form?: "phone" | "tablet" | "desktop"
        elements?: string[]  // ≤ 40 items · default []
      }
    }

    Output

    {
      messageId?: string | null
      runId?: string | null
      status?: string | null
    }

    conversation.threads.rename · Rename a conversation

    Changes the title of a thread the caller can see. Returns the updated thread.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.threads.rename
    MCP toolconversation_threads_rename
    Scopeconversation.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      conversationId: string  // uuid
      title: string  // ≤ 160
    }

    Output

    {
      id: string
      brandId: string
      title: string
      workId: string | null
      audience: string  // `brand`, `internal` or `private`.
      kind: string  // `agent` (Nödo answers) or `team` (the people at Nömad).
      state: string  // `open`, `waiting_brand`, `waiting_team` or `closed`.
      channel: string  // `app`, `whatsapp` or `email`.
      titleAuto: boolean
      assignee: {
        id: string
        name: string
        avatarUrl: string | null
      }
      | null
      lastMessageAt: string | null
      version: integer  // -9007199254740991–9007199254740991
      createdAt: string
      updatedAt: string
    }

    conversation.threads.set_state · Close or reopen a conversation

    Closes or reopens a team thread under the same state rule as the staff inbox. Returns the thread state.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.threads.set_state
    MCP toolconversation_threads_set_state
    Scopeconversation.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      conversationId: string  // uuid
      state: "open" | "closed"
    }

    Output

    {
      id: string
      brandId: string
      title: string
      workId: string | null
      audience: string  // `brand`, `internal` or `private`.
      kind: string  // `agent` (Nödo answers) or `team` (the people at Nömad).
      state: string  // `open`, `waiting_brand`, `waiting_team` or `closed`.
      channel: string  // `app`, `whatsapp` or `email`.
      titleAuto: boolean
      assignee: {
        id: string
        name: string
        avatarUrl: string | null
      }
      | null
      lastMessageAt: string | null
      version: integer  // -9007199254740991–9007199254740991
      createdAt: string
      updatedAt: string
    }

    conversation.task_briefing.open · Open the Nödo briefing

    The «Briefing with Nödo» thread of a briefing task: created the first time, the same shared thread afterwards. Fails with not_found for a task that is not a Nödo briefing.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.task_briefing.open
    MCP toolconversation_task_briefing_open
    Scopeconversation.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      taskId: string  // uuid
    }

    Output

    {
      conversation: Record<string, unknown>
    }

    conversation.drafts.reserve · Reserve a draft

    A fresh draft id, so files can be uploaded before the thread exists (conversation.threads.start takes it as draftId). Stores nothing.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.drafts.reserve
    MCP toolconversation_drafts_reserve
    Scopeconversation.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {}

    Output

    {
      draftId: string  // uuid
    }

    conversation.uploads.discard · Discard an unsent file

    Removes a file uploaded for a message and taken out before sending, so storage keeps nothing nobody sent. A file a saved message already carries is never touched.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.uploads.discard
    MCP toolconversation_uploads_discard
    Scopeconversation.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      path: string  // ≤ 600
    }

    Output

    {
      ok: true
    }

    conversation.commands.run · Run a slash command

    Runs one slash command in a thread and writes it with its result; no model is called. Permissions and confirm cards are those of the command capability itself. Returns the message id.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.commands.run
    MCP toolconversation_commands_run
    Scopeconversation.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      conversationId: string  // uuid
      capabilityId: string  // ≤ 60
      content: string  // ≤ 4000
      argument?: unknown
      idempotencyKey: string  // uuid
      locale?: "es" | "en"
    }

    Output

    {
      messageId: string
    }

    conversation.polls.vote · Vote in a poll

    Casts the caller's vote on a «+» poll in a thread they can read; only the team votes in internal notes. An empty choice takes the vote back. Returns the poll as the voter sees it.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.polls.vote
    MCP toolconversation_polls_vote
    Scopeconversation.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      conversationId: string  // uuid
      messageId: string  // uuid
      pollId: string
      optionIds: string[]  // ≤ 10 items
    }

    Output

    {
      ok: true
      poll: unknown
    }

    conversation.confirmations.decide · Accept or cancel a Nödo change

    Accepts or cancels a change Nödo prepared on a confirm card. Only the person it was prepared for; on accept the stored input runs once through the full gate again. Returns the outcome and, for undoable writes, until when it can be undone.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.confirmations.decide
    MCP toolconversation_confirmations_decide
    Scopeconversation.write
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      confirmationId: string  // uuid
      accept: boolean
    }

    Output

    {
      status: string
      error: string | null
      undoUntil?: string  // date-time
    }

    conversation.images.review · Approve or archive a chat image

    Approves or archives an image Nödo proposed in a gallery card. The click is the caller's explicit decision, so library.asset.review runs confirmed, through its own Kit right and brand scope.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.images.review
    MCP toolconversation_images_review
    Scopeconversation.write
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      assetId: string  // uuid
      decision: "approve" | "archive"
    }

    Output

    {
      ok: boolean
      status?: "approved" | "archived"
      error?: string
    }

    conversation.cards.run · Card action

    Runs the action a Nödo card kind declares (CARD_ACTIONS). The capability it names runs for the caller through the full gate, so a card never does more than the person could on the page. Undeclared actions answer action_not_declared.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.cards.run
    MCP toolconversation_cards_run
    Scopeconversation.write
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      kind: string  // ≤ 40
      action: string  // ≤ 40
      input: Record<string, unknown>
    }

    Output

    {
      ok: boolean
      data?: unknown
      error?: string
    }

    conversation.cards.refresh · Refresh a card

    Reads a live card (LIVE_CARDS) again with the input it was built from and returns the same card, current. Only read capabilities.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/conversation.cards.refresh
    MCP toolconversation_cards_refresh
    Scopeconversation.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      capability: string  // ≤ 80
      input: Record<string, unknown>
    }

    Output

    {
      part?: unknown
      error?: string
    }

    conversation.cards.undo · Undo from a card

    Undoes a confirmed write within its window (CARD_INVERSES): only the person who confirmed it, only once, through the same brand action the Kit uses for its own undo.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.cards.undo
    MCP toolconversation_cards_undo
    Scopeconversation.write
    Minimum roleViewer
    Human confirmationYes
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      confirmationId: string  // uuid
    }

    Output

    {
      ok: boolean
      error?: string
    }

    conversation.folders.save · Save a folder

    Creates one of the caller's personal folders of Nödo chats (no folderId) or renames/recolours one of their own. Folders are private to their owner.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.folders.save
    MCP toolconversation_folders_save
    Scopeconversation.write
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      folderId?: string  // uuid
      name: string  // ≤ 60
      tone?: string  // ≤ 20
    }

    Output

    {
      ok: boolean
      data?: Record<string, unknown>
      error?: string
    }

    conversation.folders.delete · Delete a folder

    Deletes one of the caller's own folders (registry conversation_folder.delete); its chats go back to the list. Staff operating the brand never touch someone's folders.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.folders.delete
    MCP toolconversation_folders_delete
    Scopeconversation.write
    Minimum roleViewer
    Human confirmationYes
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      folderId: string  // uuid
    }

    Output

    {
      ok: boolean
      error?: string
    }

    conversation.folders.reorder · Reorder folders

    Saves the order of every one of the caller's folders in the brand, as dragged. Returns how many were placed.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.folders.reorder
    MCP toolconversation_folders_reorder
    Scopeconversation.write
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

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

    Output

    {
      ok: boolean
      data?: integer  // -9007199254740991–9007199254740991
      error?: string
    }

    conversation.threads.update_view · Pin, archive or mark read

    Pins, archives for oneself, files into a folder (folderId: null takes it out) or moves the read mark. Only the caller's view changes; the thread stays as it is for everyone.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.threads.update_view
    MCP toolconversation_threads_update_view
    Scopeconversation.write
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      conversationId: string  // uuid
      pinned?: boolean
      archived?: boolean
      folderId?: string | null
      read?: boolean
    }

    Output

    {
      ok: boolean
      data?: Record<string, unknown>
      error?: string
    }

    conversation.threads.set_audience · Private or shared chat

    The creator of a Nödo chat makes it private or shares it with the brand. Returns the audience and the thread version.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.threads.set_audience
    MCP toolconversation_threads_set_audience
    Scopeconversation.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      conversationId: string  // uuid
      audience: "brand" | "private"
    }

    Output

    {
      ok: boolean
      data?: {
        audience: "brand" | "private"
        version: integer  // -9007199254740991–9007199254740991
      }
      error?: string
    }

    conversation.threads.delete · Delete a Nödo chat

    Deletes a Nödo chat (registry conversation.delete): its creator, or whoever holds the brand's delete right. Team threads are refused (team_thread_not_deletable); they are only archived for oneself.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.threads.delete
    MCP toolconversation_threads_delete
    Scopeconversation.write
    Minimum roleMember
    Human confirmationYes
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      conversationId: string  // uuid
    }

    Output

    {
      ok: boolean
      error?: string
    }

    conversation.threads.escalate · Hand over to my Brand Manager

    From a Nödo chat, opens a new team thread linked back to it, opened by the caller's note (a team-only summary of the chat goes first) and assigned to whoever answers the brand. Clients only: staff are the team already.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.threads.escalate
    MCP toolconversation_threads_escalate
    Scopeconversation.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      conversationId: string  // uuid
      note: string  // ≤ 4000
      requestKey: string  // uuid
    }

    Output

    {
      ok: boolean
      data?: {
        conversationId: string
        created: boolean
      }
      error?: string
    }

    conversation.agent_runs.start · Ask Nödo for a draft

    Queues a Nödo draft run for a work with the brand's AI policy model. Returns the run id and queued, pending_dispatch, not_configured (AI off) or model_unavailable. The same idempotencyKey never queues twice.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.agent_runs.start
    MCP toolconversation_agent_runs_start
    Scopeconversation.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      workId: string  // uuid
      taskId?: string  // uuid
      request: string  // ≤ 4000
      idempotencyKey: string  // uuid
    }

    Output

    {
      id: string | null
      status: "queued" | "pending_dispatch" | "not_configured" | "model_unavailable"
    }

    conversation.agent_runs.cancel · Stop Nödo

    Asks a queued or running Nödo run to stop. Only someone who can see it: the run's thread, or the person who asked for it. A finished run answers ok without change.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.agent_runs.cancel
    MCP toolconversation_agent_runs_cancel
    Scopeconversation.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      runId: string  // uuid
    }

    Output

    {
      ok: true
    }

    conversation.deliveries.review · Approve or reject a Nödo delivery

    Approves (stored as a brand file) or rejects the text a completed Nödo run delivered. version is the run version the person saw; a changed run answers conflict (delivery_revision_changed).

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.deliveries.review
    MCP toolconversation_deliveries_review
    Scopeconversation.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      runId: string  // uuid
      version: integer  // –9007199254740991
      status: "approved" | "rejected"
    }

    Output

    {
      data: Record<string, unknown>
    }

    conversation.feedback.submit · Report an issue

    Sends a support ticket to Nömad as the caller: type, message, page, an optional screenshot, files uploaded to the drafted ticket folder (ticketId) and «+» cards. The person gets a confirmation and the support team the ticket.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.feedback.submit
    MCP toolconversation_feedback_submit
    Scopeconversation.write
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      type: "bug" | "suggestion"
      message: string  // ≤ 20000
      pageUrl?: string | null
      userAgent?: string | null
      brand?: string | null
      ticketId?: string | null
      imageBase64?: string | null
      imageMimeType?: string | null
      attachments?: unknown[]  // ≤ 20 items
      inserts?: unknown[]  // ≤ 4 items
      clientIp?: string | null
    }

    Output

    {
      ok: true
    }

    conversation.feedback.discard_upload · Discard a ticket file

    Removes a file the caller uploaded for a ticket they are still drafting; only while no ticket has that id yet.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.feedback.discard_upload
    MCP toolconversation_feedback_discard_upload
    Scopeconversation.write
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      ticketId: string  // uuid
      path: string  // ≤ 600
    }

    Output

    {
      ok: true
    }

    conversation.unread_count · Unread messages

    How many of the brand's conversations the person has unread: team threads and their own Nödo chats, as the «Messages» entry counts them.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/conversation.unread_count
    MCP toolconversation_unread_count
    Scopeconversation.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.
    }

    Output

    {
      count: integer  // 0–9007199254740991
    }

    conversation.inbox.list · Brand messages

    The «Messages» list as the caller sees it: team threads and Nödo chats with their pin, folder, archive and read state, and the caller's folders. offset reads the next page of Nödo chats.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/conversation.inbox.list
    MCP toolconversation_inbox_list
    Scopeconversation.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      offset?: integer  // 0–10000
    }

    Output

    {
      team: Array<{
        conversation: {
          id: string
          brandId: string
          title: string
          workId: string | null
          audience: string  // `brand`, `internal` or `private`.
          kind: string  // `agent` (Nödo answers) or `team` (the people at Nömad).
          state: string  // `open`, `waiting_brand`, `waiting_team` or `closed`.
          channel: string  // `app`, `whatsapp` or `email`.
          titleAuto: boolean
          assignee: {
            id: string
            name: string
            avatarUrl: string | null
          }
          | null
          lastMessageAt: string | null
          version: integer  // -9007199254740991–9007199254740991
          createdAt: string
          updatedAt: string
        }
        createdBy: string | null
        lastSequence: integer  // -9007199254740991–9007199254740991
        preview: string | null  // Last shared message, one line.
        previewAuthor: {
          kind: string  // `self`, `nodo`, `staff` or `member`.
          name?: string
        }
        | null
        unread: boolean
        folderId: string | null
        pinnedAt: string | null
        archivedAt: string | null
      }>
      nodo: Array<{
        conversation: {
          id: string
          brandId: string
          title: string
          workId: string | null
          audience: string  // `brand`, `internal` or `private`.
          kind: string  // `agent` (Nödo answers) or `team` (the people at Nömad).
          state: string  // `open`, `waiting_brand`, `waiting_team` or `closed`.
          channel: string  // `app`, `whatsapp` or `email`.
          titleAuto: boolean
          assignee: {
            id: string
            name: string
            avatarUrl: string | null
          }
          | null
          lastMessageAt: string | null
          version: integer  // -9007199254740991–9007199254740991
          createdAt: string
          updatedAt: string
        }
        createdBy: string | null
        lastSequence: integer  // -9007199254740991–9007199254740991
        preview: string | null  // Last shared message, one line.
        previewAuthor: {
          kind: string  // `self`, `nodo`, `staff` or `member`.
          name?: string
        }
        | null
        unread: boolean
        folderId: string | null
        pinnedAt: string | null
        archivedAt: string | null
      }>
      nodoNextOffset: integer | null  // Offset of the next page of Nödo chats; null when every chat is here.
      archivedCount: integer  // -9007199254740991–9007199254740991
    }

    conversation.inbox.seed · First screen of Messages

    What «Messages» paints first on the sync engine, read in one database snapshot: the brand's threads (the latest, plus every one the caller pinned or filed) and, from the caller's own group, their private chats, read marks, pins, archive and folders in that brand, with each group's seq. Partial: the client completes both groups with sync.bootstrap and follows them with sync.deltas.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/conversation.inbox.seed
    MCP toolconversation_inbox_seed
    Scopeconversation.read
    Minimum roleViewer
    Human confirmationNo
    DoorsScreens, Apps, API
    StatusAvailable

    Input

    {
      limit?: integer  // 1–200 · Latest brand threads and private chats to include (100 by default).
    }

    Output

    {
      brand: {
        group: string
        seq: integer  // 0–9007199254740991
        records: Array<{
          entity: string
          id: string  // uuid
          version: string
          data: Record<string, unknown>
        }>
        complete: false
        shapes: Record<string, integer>
      }
      person: {
        group: string
        seq: integer  // 0–9007199254740991
        records: Array<{
          entity: string
          id: string  // uuid
          version: string
          data: Record<string, unknown>
        }>
        complete: false
        shapes: Record<string, integer>
      }
    }

    conversation.inbox.thread · One messages thread

    One thread a link asks for, with the caller's state on it (pin, folder, archive, read). thread is null when the caller may not see it.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/conversation.inbox.thread
    MCP toolconversation_inbox_thread
    Scopeconversation.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      conversationId: string  // uuid
    }

    Output

    {
      thread: Record<string, unknown> | null
    }

    conversation.inbox.archived · Archived messages

    The threads the caller archived for themselves («Archived»), newest first.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/conversation.inbox.archived
    MCP toolconversation_inbox_archived
    Scopeconversation.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {}

    Output

    {
      threads: Record<string, unknown>[]
    }

    conversation.inbox.search · Search messages

    Matches in the titles and shared message text of the threads the caller can see.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/conversation.inbox.search
    MCP toolconversation_inbox_search
    Scopeconversation.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      query: string  // ≤ 200
    }

    Output

    {
      hits: Record<string, unknown>[]
    }

    conversation.messages.page · Messages of a thread

    One page of messages of a thread the caller can see, with its pending confirmations. cursor pages back through history; after reads only what follows the newest sequence the caller holds.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/conversation.messages.page
    MCP toolconversation_messages_page
    Scopeconversation.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      conversationId: string  // uuid
      cursor?: string  // ≤ 30
      after?: string
    }

    Output

    {
      items: Array<{
        id: string
        sequence: integer  // -9007199254740991–9007199254740991
        role: string  // `user`, `assistant` or `system`.
        content: string
        attachments: Array<{
          path: string
          name: string
          mime: string
          size: number
          url: string
        }>
        author: {
          id: string
          name: string
          avatarUrl: string | null
          isStaff: boolean
        }
        | null
        visibility: string
        channelMeta: {
          via?: string
        }
        | null
        runId: string | null
        parts: unknown[]
        createdAt: string
      }>
      confirmations: Record<string, {
        status: string
        mine: boolean
      }>
      nextCursor: string | null
      activeRun: {
        id: string
        status: string
        partialText: string | null  // What Nödo has written so far.
      }
      | null
      latestRun: {
        id: string
        status: string
        errorCode: string | null
      }
      | null
      version: integer  // -9007199254740991–9007199254740991
    }

    conversation.team.latest · The open team thread

    The most recent open team thread of the brand's main conversation (not a work's) the caller can see, with its first page of messages; nulls when there is none.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/conversation.team.latest
    MCP toolconversation_team_latest
    Scopeconversation.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {}

    Output

    {
      conversationId: string | null
      page: Record<string, unknown> | null
    }

    conversation.access · What you can do in the chat

    Whether the caller may write, create internal notes, manage billing from a usage card, whether they act as the team, and their name; whether the brand's plan includes a Brand Manager (has_brand_manager), the current plan with its mark, and the plans that include one.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/conversation.access
    MCP toolconversation_access
    Scopeconversation.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {}

    Output

    {
      canWrite: boolean
      canCreateInternal: boolean
      isStaff: boolean
      canManageBilling: boolean
      viewer: {
        id: string
        name: string
      }
      planIncludesManager: boolean  // default true
      plan: {
        name: string
        mark: string | null
      }
      | null  // default null
      managerPlans: Array<{
        name: string
        mark: string | null
      }>  // default []
    }

    conversation.today · Today with Nödo

    What waits for the brand or changed today, one row each with the place to act on it, plus the Store's best match for what the brand needs most, in the reader's language. It is the «Today» card above a new conversation with Nödo, and summary is the same in words. No model.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/conversation.today
    MCP toolconversation_today
    Scopeconversation.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {}

    Output

    {
      day: string
      text: string
      rows: Array<{
        kind: "approval" | "result" | "calendar" | "task" | "genome" | "setup" | "connection" | "question" | "stats" | "offer"
        title: string  // ≤ 160
        meta?: string  // ≤ 200
        href?: string  // ≤ 300
        action?: "open" | "review" | "answer" | "connect"
      }>  // ≤ 6 items
      summary: string  // ≤ 1500
    }

    conversation.dictation.prepare_upload · Prepare a dictation

    Before dictating: returns a single-use signed upload URL (2 h) for the audio (up to 12 MB; webm, m4a/mp4, mp3, wav, ogg, aac, flac) and the storagePath to pass to conversation.dictation.transcribe. PUT the bytes with their content type. Refusals: invalid_input (unsupported_audio, audio_too_large).

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.dictation.prepare_upload
    MCP toolconversation_dictation_prepare_upload
    Scopeconversation.write
    Minimum roleself
    Human confirmationNo
    DoorsApps
    StatusAvailable

    Input

    {
      mimeType: string  // ≤ 100
      fileSize: integer  // –9007199254740991
    }

    Output

    {
      storagePath: string
      uploadUrl: string  // uri
      token: string
      contentType: "audio/webm" | "audio/mp4" | "audio/mpeg" | "audio/wav" | "audio/ogg" | "audio/aac" | "audio/flac"
    }

    conversation.dictation.transcribe · Transcribe a dictation

    Transcribes the audio uploaded with conversation.dictation.prepare_upload and deletes it. Returns { text }; the person still decides to send. brandId, when the caller reaches that brand, only attributes the cost; language is a hint and context the tail of what was dictated just before (segments). Refusals: not_found (no such upload of the caller), invalid_input (unsupported_audio, audio_too_large), unavailable (transcription_failed).

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/conversation.dictation.transcribe
    MCP toolconversation_dictation_transcribe
    Scopeconversation.write
    Minimum roleself
    Human confirmationNo
    DoorsApps
    StatusAvailable

    Input

    {
      storagePath: string  // ≤ 300
      brandId?: string | null
      language?: string | null
      context?: string | null
    }

    Output

    {
      text: string
    }

    Updated on January 1, 1970

    PreviousAccount and teamNextMemory

    In this section

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

    • conversation.search · Search the conversation
    • conversation.read · Read a message
    • conversation.choice · Ask with options
    • conversation.request_file · Ask for a file
    • conversation.threads.create · Create a conversation
    • conversation.threads.start · Start a conversation
    • conversation.messages.send · Send a message
    • conversation.threads.rename · Rename a conversation
    • conversation.threads.set_state · Close or reopen a conversation
    • conversation.task_briefing.open · Open the Nödo briefing
    • conversation.drafts.reserve · Reserve a draft
    • conversation.uploads.discard · Discard an unsent file
    • conversation.commands.run · Run a slash command
    • conversation.polls.vote · Vote in a poll
    • conversation.confirmations.decide · Accept or cancel a Nödo change
    • conversation.images.review · Approve or archive a chat image
    • conversation.cards.run · Card action
    • conversation.cards.refresh · Refresh a card
    • conversation.cards.undo · Undo from a card
    • conversation.folders.save · Save a folder
    • conversation.folders.delete · Delete a folder
    • conversation.folders.reorder · Reorder folders
    • conversation.threads.update_view · Pin, archive or mark read
    • conversation.threads.set_audience · Private or shared chat
    • conversation.threads.delete · Delete a Nödo chat
    • conversation.threads.escalate · Hand over to my Brand Manager
    • conversation.agent_runs.start · Ask Nödo for a draft
    • conversation.agent_runs.cancel · Stop Nödo
    • conversation.deliveries.review · Approve or reject a Nödo delivery
    • conversation.feedback.submit · Report an issue
    • conversation.feedback.discard_upload · Discard a ticket file
    • conversation.unread_count · Unread messages
    • conversation.inbox.list · Brand messages
    • conversation.inbox.seed · First screen of Messages
    • conversation.inbox.thread · One messages thread
    • conversation.inbox.archived · Archived messages
    • conversation.inbox.search · Search messages
    • conversation.messages.page · Messages of a thread
    • conversation.team.latest · The open team thread
    • conversation.access · What you can do in the chat
    • conversation.today · Today with Nödo
    • conversation.dictation.prepare_upload · Prepare a dictation
    • conversation.dictation.transcribe · Transcribe a dictation