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

Calendar

Deliveries, posts, meetings and dates.

On this page
  • calendar.window · View the calendar
  • calendar.dates.save · Mark a date
  • calendar.meetings.create · Create a meeting
  • calendar.meetings.update_notes · Save meeting notes
Русский
한국어
日本語
中文
हिन्दी
Open the app
  • calendar.meetings.trash · Remove a meeting
  • calendar.meetings.restore · Restore a removed meeting
  • calendar.brand_events.create · Add an event
  • calendar.brand_events.update · Change an event
  • calendar.brand_events.delete · Delete an event
  • calendar.marked_dates.create · Mark a date
  • calendar.marked_dates.update · Change a marked date
  • calendar.marked_dates.delete · Delete a marked date
  • calendar.preferences.save · Save my calendar view
  • calendar.upcoming · Upcoming calendar days
  • calendar.screen.window · Calendar window (screen)
  • calendar.screen.page · Calendar opening view
  • calendar.preferences.get · My calendar view
  • calendar.events.detail · Calendar event detail
  • calendar.window · View the calendar

    Deliveries, tasks, campaigns, social posts, meetings, events and marked dates between two dates, at most 62 days apart, in the caller time zone.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/calendar.window
    MCP toolcalendar_window
    Scopecalendar.read
    Minimum roleViewer
    Human confirmationNo
    DoorsNödo, Voice, MCP, API, Chat, Screens, Apps
    StatusAvailable
    Widgetcalendar_week

    Input

    {
      from: string
      to: string
      kinds?: Array<"delivery" | "task" | "campaign" | "social" | "meeting" | "event" | "marked_date">
      timeZone?: string  // ≤ 64 · default "Europe/Madrid"
    }

    Output

    {
      events: Array<{
        id: string
        kind: "delivery" | "task" | "campaign" | "social" | "meeting" | "event" | "marked_date"
        title: string
        start: string
        end: string | null
        allDay: boolean
        link: string | null
      }>
    }

    calendar.dates.save · Mark a date

    Creates, changes or deletes a marked date (launch, event, holiday) that the whole brand team sees. Only its creator or a brand owner/admin may delete it.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/calendar.dates.save
    MCP toolcalendar_dates_save
    Scopecalendar.write
    Minimum roleMember
    Human confirmationYes
    DoorsNödo, MCP, API, Chat, Screens, Apps
    StatusAvailable
    Widgetconfirm

    Input

    {
      op: "upsert"
      id?: string  // uuid
      title: string  // ≤ 120
      date: string
      endDate?: string
      note?: string  // ≤ 500
    }
    | {
      op: "delete"
      id: string  // uuid
    }

    Output

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

    calendar.meetings.create · Create a meeting

    Schedules a brand meeting at a local date and time with its duration and place. The rest of the brand is told (never its creator). Returns the stored meeting.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/calendar.meetings.create
    MCP toolcalendar_meetings_create
    Scopecalendar.write
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      title: string  // ≤ 300
      description?: string  // ≤ 10000
      date: string
      time: string
      durationMinutes?: integer  // 1–1440 · default 60
      location?: string  // ≤ 500
    }

    Output

    {
      meeting: {
        id: string  // uuid
      }
    }

    calendar.meetings.update_notes · Save meeting notes

    Saves the notes of a meeting and nothing else (link, agenda and date stay). Its creator or whoever administers the brand may write them.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/calendar.meetings.update_notes
    MCP toolcalendar_meetings_update_notes
    Scopecalendar.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      meetingId: string  // uuid
      notes: string  // ≤ 100000
    }

    Output

    {
      ok: true
    }

    calendar.meetings.trash · Remove a meeting

    Removes a meeting for everyone at once (soft delete). Whoever removed it can take it back for ten minutes with calendar.meetings.restore; a meeting still to come is announced as cancelled once that window passes.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/calendar.meetings.trash
    MCP toolcalendar_meetings_trash
    Scopecalendar.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      meetingId: string  // uuid
    }

    Output

    {
      ok: true
    }

    calendar.meetings.restore · Restore a removed meeting

    Undo of calendar.meetings.trash: only whoever removed it, within ten minutes (conflict, undo_expired afterwards). The held cancellation notice never goes out.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/calendar.meetings.restore
    MCP toolcalendar_meetings_restore
    Scopecalendar.write
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      meetingId: string  // uuid
    }

    Output

    {
      ok: true
    }

    calendar.brand_events.create · Add an event

    Adds one of the brand's own events to its calendar, all day or timed, in the given IANA time zone. startsOn/endsOn are the local days of startsAt/endsAt. Returns the stored event.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/calendar.brand_events.create
    MCP toolcalendar_brand_events_create
    Scopecalendar.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      title: string  // ≤ 160
      description?: string | null
      location?: string | null
      allDay: boolean
      startsOn: string
      endsOn: string
      startsAt: string  // date-time
      endsAt: string  // date-time
      timeZone: string  // ≤ 80
    }

    Output

    {
      event: Record<string, unknown>
    }

    calendar.brand_events.update · Change an event

    Replaces the fields of one of the brand's own calendar events, with the same rules as creating one. Returns the stored event.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/calendar.brand_events.update
    MCP toolcalendar_brand_events_update
    Scopecalendar.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      eventId: string  // uuid
      title: string  // ≤ 160
      description?: string | null
      location?: string | null
      allDay: boolean
      startsOn: string
      endsOn: string
      startsAt: string  // date-time
      endsAt: string  // date-time
      timeZone: string  // ≤ 80
    }

    Output

    {
      event: Record<string, unknown>
    }

    calendar.brand_events.delete · Delete an event

    Deletes one of the brand's own calendar events. Only whoever created it, or someone who administers the brand (owner or admin), may: anyone else gets forbidden (detail not_own_entry). Deliveries, tasks and posts are not events and are never touched.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/calendar.brand_events.delete
    MCP toolcalendar_brand_events_delete
    Scopecalendar.write
    Minimum roleMember
    Human confirmationYes
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      eventId: string  // uuid
    }

    Output

    {
      ok: true
    }

    calendar.marked_dates.create · Mark a date

    Marks a date on the brand calendar, optionally repeating every recurrenceInterval days, weeks, months or years until recurrenceEndsOn. Returns the stored marked date.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/calendar.marked_dates.create
    MCP toolcalendar_marked_dates_create
    Scopecalendar.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      title: string  // ≤ 160
      notes?: string | null
      startsOn: string
      startsAt: string  // date-time
      timeZone: string  // ≤ 80
      recurrence: "none" | "daily" | "weekly" | "monthly" | "yearly"
      recurrenceInterval: integer  // 1–365
      recurrenceEndsOn?: string | null
    }

    Output

    {
      markedDate: {
        id: string  // uuid
        brand_id: string  // uuid
        title: string
        notes: string | null
        starts_on: string
        starts_at: string
        time_zone: string
        recurrence: string  // none, daily, weekly, monthly or yearly.
        recurrence_interval: integer  // -9007199254740991–9007199254740991
        recurrence_ends_on: string | null
        created_at: string
        updated_at: string
      }
    }

    calendar.marked_dates.update · Change a marked date

    Replaces the fields of one marked date of the brand, its repetition included. Returns the stored marked date.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/calendar.marked_dates.update
    MCP toolcalendar_marked_dates_update
    Scopecalendar.write
    Minimum roleMember
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      markedDateId: string  // uuid
      title: string  // ≤ 160
      notes?: string | null
      startsOn: string
      startsAt: string  // date-time
      timeZone: string  // ≤ 80
      recurrence: "none" | "daily" | "weekly" | "monthly" | "yearly"
      recurrenceInterval: integer  // 1–365
      recurrenceEndsOn?: string | null
    }

    Output

    {
      markedDate: {
        id: string  // uuid
        brand_id: string  // uuid
        title: string
        notes: string | null
        starts_on: string
        starts_at: string
        time_zone: string
        recurrence: string  // none, daily, weekly, monthly or yearly.
        recurrence_interval: integer  // -9007199254740991–9007199254740991
        recurrence_ends_on: string | null
        created_at: string
        updated_at: string
      }
    }

    calendar.marked_dates.delete · Delete a marked date

    Deletes one marked date of the brand, every repetition included. Only whoever created it, or someone who administers the brand (owner or admin), may: anyone else gets forbidden (detail not_own_entry).

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/calendar.marked_dates.delete
    MCP toolcalendar_marked_dates_delete
    Scopecalendar.write
    Minimum roleMember
    Human confirmationYes
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      markedDateId: string  // uuid
    }

    Output

    {
      ok: true
    }

    calendar.preferences.save · Save my calendar view

    Saves how the caller sees this brand's calendar: first weekday (0 Sunday, 1 Monday), last view, category filters and an optional IANA time zone (null follows the device). Affects only the caller. Returns the stored preferences.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/calendar.preferences.save
    MCP toolcalendar_preferences_save
    Scopecalendar.write
    Minimum roleViewer
    Human confirmationNo
    DoorsScreens, Apps
    StatusAvailable

    Input

    {
      weekStartsOn: 0 | 1
      lastView: "agenda" | "day" | "week" | "month" | "year"
      activeFilters: string[]  // ≤ 40 items
      timeZone?: string | null  // default null
    }

    Output

    {
      preferences: {
        userId: string
        brandId: string
        weekStartsOn: integer  // 0–1 · 0 Sunday, 1 Monday.
        lastView: "agenda" | "day" | "week" | "month" | "year"
        activeFilters: string[]  // Categories in display order; every category means «all».
        timeZone: string | null  // IANA zone; null follows the device.
        sourceDeviceId: string | null
        updatedAt: string | null
      }
    }

    calendar.upcoming · Upcoming calendar days

    What happens at the brand in the next days (posts, deliveries, meetings, dates) in the zone the person saved for its calendar, else fallbackTimeZone. savedTimeZone is that saved zone, if any.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/calendar.upcoming
    MCP toolcalendar_upcoming
    Scopecalendar.read
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      days?: integer  // 1–14 · default 8
      fallbackTimeZone: string  // ≤ 64
      asClient?: boolean  // Read as the brand sees it (a staff viewer previewing as client). Only narrows.
    }

    Output

    {
      events: Record<string, unknown>[]
      timeZone: string
      savedTimeZone: string | null
    }

    calendar.screen.window · Calendar window (screen)

    The events and per-day summary of a window of the brand calendar exactly as the screen draws them (work dates, posts, campaigns, meetings, the brand's own events and marked dates), with what the reader can edit. from/to are instants (at most 380 days apart); mode: "summary" returns the day summary only. For the compact agent shape use calendar.window.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/calendar.screen.window
    MCP toolcalendar_screen_window
    Scopecalendar.read
    Minimum roleViewer
    Human confirmationNo
    DoorsScreens, Apps, API, MCP
    StatusAvailable

    Input

    {
      brandShortId?: string  // ≤ 80 · The brand's short id, for the links; read when absent.
      from: string  // date-time
      to: string  // date-time
      timeZone: string  // ≤ 80
      filters: string[]  // ≤ 12 items
      mode?: "detail" | "summary"  // default "detail"
      preview?: boolean  // Staff previewing the brand as a client: edit controls are left out.
    }

    Output

    {
      brandId: string  // uuid
      from: string
      to: string
      timeZone: string
      mode: "detail" | "summary"
      events: Array<{
        id: string
        sourceId: string
        brandId: string
        kind: string
        title: string
        status: string | null
        allDay: boolean
        startsAt: string | null
        endsAt: string | null
        startsOn: string | null
        endsOn: string | null
        href: string | null
        recurrence: string | null  // Marked dates only: none, daily, weekly, monthly or yearly.
        recurrenceInterval: integer | null
        recurrenceEndsOn: string | null
        notes?: string | null
        subtitle?: string | null
        statusTone?: string  // neutral, progress, attention, done or failed.
        needsAction?: boolean
        workId?: string | null
        workHref?: string | null
        editable?: boolean
        deletable?: boolean
        facts?: {
          kind: string
        }
      }>
      summary: Array<{
        date: string
        total: integer  // -9007199254740991–9007199254740991
        counts: Record<string, integer>
      }>
      canManage: boolean
      canDeleteAny?: boolean
    }

    calendar.screen.page · Calendar opening view

    What the calendar paints on opening: the reader's preferences and the window they land on (the requested view and date, else the device's, else their last view; today in their zone). seed is null when no time zone is known (neither saved nor reported by the device).

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/calendar.screen.page
    MCP toolcalendar_screen_page
    Scopecalendar.read
    Minimum roleViewer
    Human confirmationNo
    DoorsScreens, Apps, API
    StatusAvailable

    Input

    {
      brandShortId?: string  // ≤ 80
      view?: string | null
      date?: string | null
      device?: {
        view: string  // ≤ 20
        grid: boolean
        timeZone: string | null
      }
      | null
      preview?: boolean  // Staff previewing the brand as a client: edit controls are left out.
    }

    Output

    {
      preferences: {
        userId: string
        brandId: string
        weekStartsOn: integer  // 0–1 · 0 Sunday, 1 Monday.
        lastView: "agenda" | "day" | "week" | "month" | "year"
        activeFilters: string[]  // Categories in display order; every category means «all».
        timeZone: string | null  // IANA zone; null follows the device.
        sourceDeviceId: string | null
        updatedAt: string | null
      }
      seed: {
        data: {
          brandId: string  // uuid
          from: string
          to: string
          timeZone: string
          mode: "detail" | "summary"
          events: Array<{
            id: string
            sourceId: string
            brandId: string
            kind: string
            title: string
            status: string | null
            allDay: boolean
            startsAt: string | null
            endsAt: string | null
            startsOn: string | null
            endsOn: string | null
            href: string | null
            recurrence: string | null  // Marked dates only: none, daily, weekly, monthly or yearly.
            recurrenceInterval: integer | null
            recurrenceEndsOn: string | null
            notes?: string | null
            subtitle?: string | null
            statusTone?: string  // neutral, progress, attention, done or failed.
            needsAction?: boolean
            workId?: string | null
            workHref?: string | null
            editable?: boolean
            deletable?: boolean
            facts?: {
              kind: string
            }
          }>
          summary: Array<{
            date: string
            total: integer  // -9007199254740991–9007199254740991
            counts: Record<string, integer>
          }>
          canManage: boolean
          canDeleteAny?: boolean
        }
      }
      | null
    }

    calendar.preferences.get · My calendar view

    How the caller sees this brand's calendar: first weekday, last view, category filters and time zone (null follows the device). calendar.preferences.save changes it.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/calendar.preferences.get
    MCP toolcalendar_preferences_get
    Scopecalendar.read
    Minimum roleViewer
    Human confirmationNo
    DoorsScreens, Apps, API
    StatusAvailable

    Input

    {}

    Output

    {
      preferences: {
        userId: string
        brandId: string
        weekStartsOn: integer  // 0–1 · 0 Sunday, 1 Monday.
        lastView: "agenda" | "day" | "week" | "month" | "year"
        activeFilters: string[]  // Categories in display order; every category means «all».
        timeZone: string | null  // IANA zone; null follows the device.
        sourceDeviceId: string | null
        updatedAt: string | null
      }
    }

    calendar.events.detail · Calendar event detail

    Everything one calendar event holds once opened (a work date, post, campaign, meeting, brand event or marked date), by the id the window gave it. detail is null when it no longer exists.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/calendar.events.detail
    MCP toolcalendar_events_detail
    Scopecalendar.read
    Minimum roleViewer
    Human confirmationNo
    DoorsScreens, Apps, API, MCP
    StatusAvailable

    Input

    {
      brandShortId?: string  // ≤ 80
      eventId: string  // ≤ 120
    }

    Output

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

    Updated on January 1, 1970

    PreviousWorksNextConnections

    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

    • calendar.window · View the calendar
    • calendar.dates.save · Mark a date
    • calendar.meetings.create · Create a meeting
    • calendar.meetings.update_notes · Save meeting notes
    • calendar.meetings.trash · Remove a meeting
    • calendar.meetings.restore · Restore a removed meeting
    • calendar.brand_events.create · Add an event
    • calendar.brand_events.update · Change an event
    • calendar.brand_events.delete · Delete an event
    • calendar.marked_dates.create · Mark a date
    • calendar.marked_dates.update · Change a marked date
    • calendar.marked_dates.delete · Delete a marked date
    • calendar.preferences.save · Save my calendar view
    • calendar.upcoming · Upcoming calendar days
    • calendar.screen.window · Calendar window (screen)
    • calendar.screen.page · Calendar opening view
    • calendar.preferences.get · My calendar view
    • calendar.events.detail · Calendar event detail