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?
  • Messages: 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

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
  • 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
  • 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
    • Events

MCP

  • MCP server

Connectors

  • Brand connectors

Nödo and agents

  • Nödo in the brand

Genome

  • Genome specification
API/Brand API
Reference3 min read

Sync

Your own copy of what you can see: groups, bootstrap, records by id and each group's changes in order.

On this page
  • sync.deltas · Group deltas
  • sync.groups.list · Your sync groups
  • sync.bootstrap · Bootstrap a sync group
  • sync.records.read · Records by id
Русский
한국어
日本語
中文
हिन्दी
Open the app

Read-only in every door.

sync.deltas · Group deltas

The frames of one sync group after a cursor, in order and contiguous (seq). cursor_expired means bootstrap the group again; group_forbidden means you may not hold it (any more): drop it locally. The server decides group membership.

FieldValue
KindRead
HTTP methodPOST /api/v1/sync.deltas
MCP toolsync_deltas
Scopesync.read
Minimum roleself
Human confirmationNo
DoorsScreens, Apps, API
StatusAvailable

Input

{
  group: string  // `<kind>:<uuid>` (person, workspace, brand, brand-staff, conversation, team, team-space, mailbox).
  after?: integer  // 0–9007199254740991 · default 0 · The last `seq` applied; 0 right after a bootstrap at seq 0.
  limit?: integer  // 1–500 · default 200
  shapes?: Record<string, integer>  // Shape versions the client understands (served N and N-1).
}

Output

{
  group: string
  frames: Array<{
    type: "delta"
    group: string
    seq: integer  // 1–9007199254740991
    event: {
      id: string
      type: string
      occurredAt: string
      actor?: {
        kind: "person" | "agent" | "system" | "service"
        id: string | null
      }
      idempotencyKey?: string | null
    }
    changes: Array<{
      op: "put" | "patch" | "delete" | "stale"
      entity: string
      id: string
      version: string
    }>
  }>
  head: integer  // 0–9007199254740991
  hasMore: boolean
}

sync.groups.list · Your sync groups

The sync groups the person may hold now (their own inbox, their workspaces and brands) with each group's policy: whether a copy may be kept on the device and how many records fit. Conversations open from a list the person already reads. The database decides membership; the client never infers it.

FieldValue
KindRead
HTTP methodPOST /api/v1/sync.groups.list
MCP toolsync_groups_list
Scopesync.read
Minimum roleself
Human confirmationNo
DoorsScreens, Apps, API
StatusAvailable

Input

{}

Output

{
  groups: Array<{
    group: string
    persist: boolean
    maxRecords: integer  // -9007199254740991–9007199254740991
  }>
}

sync.bootstrap · Bootstrap a sync group

One page of a group's records and its sequence number, read in the same database snapshot. Page with nextPageToken; the group's cursor is the lowest seq of all pages, after which sync.deltas follows. Refused (forbidden, detail group_forbidden) when the person is not in the group.

FieldValue
KindRead
HTTP methodPOST /api/v1/sync.bootstrap
MCP toolsync_bootstrap
Scopesync.read
Minimum roleself
Human confirmationNo
DoorsScreens, Apps, API
StatusAvailable

Input

{
  group: string  // A sync group: `<kind>:<uuid>` (person, workspace, brand, brand-staff, conversation, team, team-space, mailbox).
  pageToken?: string | null  // `nextPageToken` of the previous page; absent for the first.
  shapes?: Record<string, integer>  // Shape versions the client understands, by entity. A version the server no longer serves answers `shape_unsupported`.
  limit?: integer  // 1–1000 · Records per page (500 by default).
}

Output

{
  group: string
  seq: integer  // 0–9007199254740991
  records: Array<{
    entity: string
    id: string  // uuid
    version: string
    data: Record<string, unknown>
  }>
  nextPageToken: string | null
  shapes: Record<string, integer>
  bytes?: integer  // -9007199254740991–9007199254740991
}

sync.records.read · Records by id

Current records of one entity by id, only those the person may read: missing ids are gone or hidden. Used for stale changes (too large, or fields that differ per reader).

FieldValue
KindRead
HTTP methodPOST /api/v1/sync.records.read
MCP toolsync_records_read
Scopesync.read
Minimum roleself
Human confirmationNo
DoorsScreens, Apps, API
StatusAvailable

Input

{
  entity: "notification" | "read_mark" | "conversation" | "message" | "inbox_item" | "work" | "task" | "calendar_event" | "library_asset" | "internal_note" | "team_space" | "team_message" | "mail_thread" | "person"
  ids: string[]  // ≤ 200 items
  group?: string  // The group the ids belong to, when the caller knows it: refused unless the person is in it.
}

Output

{
  records: Array<{
    entity: string
    id: string  // uuid
    version: string
    data: Record<string, unknown>
  }>
}

Updated on January 1, 1970

PreviousBillingNextWebsite and domains

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

  • sync.deltas · Group deltas
  • sync.groups.list · Your sync groups
  • sync.bootstrap · Bootstrap a sync group
  • sync.records.read · Records by id