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

Connections

Connected networks, website and analytics.

On this page
  • connections.list · List connections
  • connections.connect · Connect an account
  • connections.disconnect · Disconnect
  • connections.setup_resources · Accounts of an authorization
Português
Русский
한국어
日本語
中文
हिन्दी
Open the app
  • connections.resources_attach · Connect the chosen accounts
  • connections.integration_disconnect · Disconnect an account
  • connections.setup_cancel · Cancel a pending setup
  • connections.backup_remove · Remove a backup authorization
  • connections.backup_primary_set · Choose the primary authorization
  • connections.posts_retry_failed · Retry the failed posts
  • connections.email_api_key_connect · Connect email marketing with an API key
  • connections.wordpress_connect · Connect WordPress
  • connections.verification_linkedin_publish · Publish the LinkedIn review post
  • connections.verification_linkedin_delete · Delete the LinkedIn review post
  • connections.verification_youtube_publish · Upload the YouTube review video
  • connections.external_access_revoke · Revoke an outside app's access
  • connections.external_access_grant · Grant an outside app access
  • connections.attention · Connections needing attention
  • connections.overview · Brand connections overview
  • connections.list · List connections

    Brand integrations (social networks, website, analytics) with their status, plus the providers available to connect. When an item has attention, say plainly which account needs reconnecting (or new permissions) and why, from attention.cause and attention.renewBy, and that a brand owner or admin fixes it in Nömad › Connections; never ask for passwords. A post on an account that stopped working, or whose access ends before its time, will not go out: before proposing a publish time, read that health in publishing.accounts.list.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/connections.list
    MCP toolconnections_list
    Scopeconnections.read
    Minimum roleAdmin
    Human confirmationNo
    DoorsNödo, Voice, MCP, API, Chat, Screens, Apps
    StatusAvailable
    Widgetlist

    Input

    {
      includeCatalog?: boolean  // default false
    }

    Output

    {
      items: Array<{
        id: string  // uuid
        provider: string  // Provider key, e.g. instagram, wordpress, google_analytics.
        account: string | null
        status: "connected" | "needs_attention" | "disconnected" | "pending_setup"
        connectedAt: string | null
        attention?: {
          state: "reconnect" | "permissions" | "expiring" | "paused" | "rate_limited"  // `reconnect`: it stopped working and only a new sign-in fixes it. `permissions`: some permissions are missing. `expiring`: access ends at `renewBy` unless someone signs in again. `paused`: paused in Nömad. `rate_limited`: the network paused requests until `until`; nothing to do.
          cause: "password_changed" | "security_checkpoint" | "session_expired" | "app_removed" | "page_role_removed" | "missing_permissions" | "instagram_page_link" | "account_restricted" | "rate_limited" | "provider_unavailable" | "token_expiry" | "data_access_expiry" | "unknown" | null  // Why, in plain terms: password_changed (the person who connected it changed their password), security_checkpoint (the network asks them to complete a security check), session_expired, app_removed (Nömad was removed from the connected apps), page_role_removed (they no longer manage the page), missing_permissions, instagram_page_link (the Instagram account is no longer linked to its Facebook page), account_restricted, token_expiry (sign-in access ends), data_access_expiry (Meta asks to confirm data access every 90 days).
          renewBy: string | null  // When access ends unless someone signs in again (past when it already ended).
          until: string | null  // When a network pause lifts.
          canReconnect: boolean  // A new sign-in is the way out. Only a brand owner or admin can do it, in Nömad › Connections.
        }
        | null  // Present when the account needs a person or ends soon; null when it is fine.
      }>
      catalog?: Array<{
        provider: string
        name: string
        available: boolean
      }>
    }

    connections.connect · Connect an account

    Returns the provider authorization link for a person to open; credentials are never requested or accepted in the conversation. provider is the product key connections.list and connections.overview name (e.g. instagram, facebook_page, linkedin, google_analytics). From the web, the API or an agent the link starts the consent in the person's signed-in browser and comes back to Connections. From the apps (app door) the consent is bound to that installation (clientBindingHash, the base64url SHA-256 of a 32-byte secret the app keeps) and returns to nomad://integration-callback; the app then lists the accounts with connections.setup_resources and attaches them with connections.resources_attach. Products connected with a credential (WordPress, MailerLite, Brevo) refuse with conflict credential_required. Other refusals in detail: product_unavailable, provider_not_configured, mode_unavailable, variant_unavailable, revocation_pending (a disconnect still settling; try again in minutes), app_update_required.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/connections.connect
    MCP toolconnections_connect
    Scopeconnections.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsScreens, Apps, API, MCP
    StatusAvailable
    Widgetconfirm

    Input

    {
      provider: string  // ≤ 60 · Product key to connect, as connections.list / connections.overview name it.
      mode?: "profile" | "organization"  // LinkedIn only: the member profile or a Page.
      variant?: string  // ≤ 60 · Way to connect when the product offers several (Instagram); omitted = the default.
      account?: string  // ≤ 253 · Login hint for the provider.
      platform?: "ios" | "android"  // Apps only: the platform the consent returns to.
      clientBindingHash?: string  // Apps only: base64url SHA-256 of the secret the app keeps for this consent.
    }

    Output

    {
      authorizationUrl: string  // uri
      expiresAt: string | null  // When the started consent lapses (apps); null for a link that starts it when opened.
      clientBinding: "bound" | "none"  // `bound`: tied to this app installation.
    }

    connections.disconnect · Disconnect

    Disconnects one integration and revokes its grant. Scheduled posts on that account stop publishing.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/connections.disconnect
    MCP toolconnections_disconnect
    Scopeconnections.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsNödo, MCP, API, Chat, Screens, Apps
    StatusPlanned
    Widgetconfirm

    Input

    {
      connectionId: string  // uuid
    }

    Output

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

    connections.setup_resources · Accounts of an authorization

    After consenting at the provider, the accounts and pages that authorization (grantId) reaches, to pick which to connect with connections.resources_attach. A consent an app started (connections.connect from the app door) needs that installation's proof: clientBindingSecret (the secret whose hash went to connections.connect) and integrationCode (from the nomad://integration-callback return); the first listing with it binds the authorization. Refusals in detail: grant_not_available (not_found), setup_expired, resource_token_missing, client_binding_required, client_binding_mismatch, client_binding_expired, app_update_required (conflict).

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/connections.setup_resources
    MCP toolconnections_setup_resources
    Scopeconnections.read
    Minimum roleAdmin
    Human confirmationNo
    DoorsScreens, Apps
    StatusAvailable

    Input

    {
      grantId: string  // uuid
      clientBindingSecret?: string
      integrationCode?: string
    }

    Output

    {
      resources: Array<{
        id: string  // uuid · Pass in `externalResourceIds` of `connections.resources_attach`.
        productId: string
        resourceType: string
        displayName: string
        handle: string | null
        avatarUrl: string | null
        alreadyConnected: boolean  // Connected to this brand already.
        unavailable: boolean  // Cannot be attached here (it does not say why).
        upgradesConnection: boolean
        reconnectsConnection: boolean
        backsUpConnection: boolean  // Finishing adds this authorization as a backup («Añadir como respaldo»).
        reconnectsFromOtherAccount: boolean
        businessId: string | null
        businessName: string | null
        linkedPageId: string | null  // Setup row of the Facebook Page an Instagram account is linked to, when listed.
      }>
    }

    connections.resources_attach · Connect the chosen accounts

    After consenting at the provider, connects the accounts the person picked from that authorization (grantId, externalResourceIds). Instagram, Facebook Page and Threads bring their last 90 days of posts. already_connected, setup_expired and token_missing explain a refusal.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/connections.resources_attach
    MCP toolconnections_resources_attach
    Scopeconnections.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      grantId: string  // uuid
      externalResourceIds: string[]  // ≤ 100 items
    }

    Output

    {
      connectionIds: string[]
    }

    connections.integration_disconnect · Disconnect an account

    Disconnects one connected account and withdraws its authorization at the provider when nothing else uses it. What was scheduled on it pauses until a reconnect. Never an agent's.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/connections.integration_disconnect
    MCP toolconnections_integration_disconnect
    Scopeconnections.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      brandIntegrationId: string  // uuid
    }

    Output

    {
      remoteRevoked: boolean
      revocation: {
        revocation_status: string  // `revoked`, `already_revoked`, `kept` (another account uses it) or `failed`.
      }  // What happened to the provider authorization.
    }

    connections.setup_cancel · Cancel a pending setup

    Discards an authorization that was given but whose accounts were never connected, and withdraws it at the provider. Never an agent's.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/connections.setup_cancel
    MCP toolconnections_setup_cancel
    Scopeconnections.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      grantId: string  // uuid
    }

    Output

    {
      remoteRevoked: boolean
      revocation: {
        revocation_status: string  // `revoked`, `already_revoked`, `kept` (another account uses it) or `failed`.
      }  // What happened to the provider authorization.
    }

    connections.backup_remove · Remove a backup authorization

    Removes one person's backup authorization from a connected account. It is withdrawn at the provider only when nothing else uses it (a shared consent). Never an agent's.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/connections.backup_remove
    MCP toolconnections_backup_remove
    Scopeconnections.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      brandIntegrationId: string  // uuid
      grantId: string  // uuid
    }

    Output

    {
      revocationStatus: string
    }

    connections.backup_primary_set · Choose the primary authorization

    Chooses whose authorization a connected account works with. Choosing a backup switches to it now and it must be working (not_ready otherwise). switched is false when it already was the primary.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/connections.backup_primary_set
    MCP toolconnections_backup_primary_set
    Scopeconnections.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      brandIntegrationId: string  // uuid
      grantId: string  // uuid
    }

    Output

    {
      switched: boolean
    }

    connections.posts_retry_failed · Retry the failed posts

    After a reconnect, queues again every destination of this connection that failed while it was down and runs one delivery now; approvals and revisions are checked again. connection_not_ready while it is still down, nothing_to_retry when nothing failed.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/connections.posts_retry_failed
    MCP toolconnections_posts_retry_failed
    Scopeconnections.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {
      connectionId: string  // uuid
    }

    Output

    {
      requested: integer  // -9007199254740991–9007199254740991
      retried: integer  // -9007199254740991–9007199254740991
      failed: integer  // -9007199254740991–9007199254740991
    }

    connections.email_api_key_connect · Connect email marketing with an API key

    Connects the brand's MailerLite or Brevo accounts with an API key, stored encrypted. Refusals in detail: key_invalid, no_accounts, unavailable. Only from the person's own screens and apps.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/connections.email_api_key_connect
    MCP toolconnections_email_api_key_connect
    Scopeconnections.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsScreens, Apps
    StatusAvailable

    Input

    {
      providerSlug: "mailerlite" | "brevo"
      apiKey: string  // ≤ 1000
      accountLabel?: string  // ≤ 120
    }

    Output

    {
      connectionIds: string[]
    }

    connections.wordpress_connect · Connect WordPress

    Connects a WordPress site with an application password, stored encrypted. Refusals in detail: connector_required, credentials_invalid, application_passwords_unavailable, site_unreachable. Only from the person's own screens and apps.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/connections.wordpress_connect
    MCP toolconnections_wordpress_connect
    Scopeconnections.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsScreens, Apps
    StatusAvailable

    Input

    {
      siteUrl: string  // ≤ 2048
      username: string  // ≤ 120
      applicationPassword: string  // ≤ 500
    }

    Output

    {
      connectionIds: string[]
    }

    connections.verification_linkedin_publish · Publish the LinkedIn review post

    LinkedIn's review canary: publishes one text post through the production publisher on a connected LinkedIn account and records it so it can be deleted afterwards. Only for the accounts and people the expiring canary names.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/connections.verification_linkedin_publish
    MCP toolconnections_verification_linkedin_publish
    Scopeconnections.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsScreens, Apps
    StatusAvailable

    Input

    {
      brandIntegrationId: string  // uuid
      message: string  // ≤ 3000
      confirmed: true
    }

    Output

    {
      permalink: string
      remoteStatus: "published" | "processing"
      auditId: string
    }

    connections.verification_linkedin_delete · Delete the LinkedIn review post

    Deletes at LinkedIn the review canary post published before (auditId of its record) and records the deletion. Deleting it twice is harmless.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/connections.verification_linkedin_delete
    MCP toolconnections_verification_linkedin_delete
    Scopeconnections.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsScreens, Apps
    StatusAvailable

    Input

    {
      auditId: string  // ≤ 20
      confirmed: true
    }

    Output

    {
      ok: true
    }

    connections.verification_youtube_publish · Upload the YouTube review video

    Google's verification canary: uploads one video of the brand's Library through the production YouTube publisher, private by default (privacyStatus). Only for the accounts and people the expiring canary names.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/connections.verification_youtube_publish
    MCP toolconnections_verification_youtube_publish
    Scopeconnections.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsScreens, Apps
    StatusAvailable

    Input

    {
      brandIntegrationId: string  // uuid
      brandFileId: string  // uuid
      title: string  // ≤ 100
      description?: string  // ≤ 5000 · default ""
      privacyStatus?: "private" | "unlisted" | "public"  // default "private"
      confirmed: true
    }

    Output

    {
      permalink: string
      remoteStatus: "published" | "processing"
    }

    connections.external_access_revoke · Revoke an outside app's access

    Cuts one outside app's (MCP) access to the brand, whoever granted it. When it was that person's last grant for the app, its OAuth consent and sessions end too. Never an agent's.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/connections.external_access_revoke
    MCP toolconnections_external_access_revoke
    Scopeconnections.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsScreens, Apps
    StatusAvailable

    Input

    {
      grantId: string  // uuid
    }

    Output

    {
      id: string
    }

    connections.external_access_grant · Grant an outside app access

    Gives an outside app (MCP client) the person already authorized access to this brand with the chosen scopes; each scope must be one the person can use here. Only from the person's own signed-in screen, which proves the app is theirs.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/connections.external_access_grant
    MCP toolconnections_external_access_grant
    Scopeconnections.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsScreens
    StatusAvailable

    Input

    {
      clientId: string  // ≤ 256
      scopes: string[]  // ≤ 20 items
    }

    Output

    {
      id: string
    }

    connections.attention · Connections needing attention

    How many of the brand's connections stopped working or need new permissions (the shell's badge and banner); summary is null when all of them work.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/connections.attention
    MCP toolconnections_attention
    Scopeconnections.read
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {}

    Output

    {
      summary: {
        attentionCount: integer  // -9007199254740991–9007199254740991
        brokenCount: integer  // -9007199254740991–9007199254740991
      }
      | null
    }

    connections.overview · Brand connections overview

    The brand's connections as its home groups them: how many, of what and in which state. For the list with its attention details use connections.list.

    FieldValue
    KindRead
    HTTP methodPOST /api/v1/connections.overview
    MCP toolconnections_overview
    Scopeconnections.read
    Minimum roleAdmin
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps, Nödo
    StatusAvailable

    Input

    {}

    Output

    {
      overview: {
        products: Array<{
          id: string
          slug: string
          name: string
          category: string  // `channel`, `ads`, `analytics`, `tag_management`, `website` or `email_marketing`.
          rolloutStatus: string  // `planned`, `active`, `standby` or `disabled`.
          defaultAccessMode: string
          providerSlug: string
          providerName: string
          providerRolloutStatus: string
          authStrategy: string  // `oauth2`, `api_key`…
          linkedinModeRollout: Record<string, string> | null
          linkedinModeConfigured: Record<string, boolean> | null
          implemented: boolean
          configured: boolean
          capabilities: string[]
          requiredScopes: string[]
          docsUrl: string | null
          connections: Array<{
            id: string
            grantId: string
            label: string | null
            status: string  // `connected`, `needs_attention`, `disconnected`, `pending_setup`…
            accessMode: string
            resourceType: string
            externalId: string
            displayName: string
            handle: string | null
            avatarUrl: string | null
            connectedAt: string
            lastErrorCode: string | null
            renewBy: string | null  // When access ends unless someone signs in again; null when it renews by itself.
            renewReason: string | null  // `token_expiry` or `data_access_expiry`; null without a deadline.
          }>  // Current, listed connections only.
        }>
        connectedCount: integer  // -9007199254740991–9007199254740991
        needsAttentionCount: integer  // -9007199254740991–9007199254740991
      }
    }

    Updated on January 1, 1970

    PreviousCalendarNextPublishing

    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

    • connections.list · List connections
    • connections.connect · Connect an account
    • connections.disconnect · Disconnect
    • connections.setup_resources · Accounts of an authorization
    • connections.resources_attach · Connect the chosen accounts
    • connections.integration_disconnect · Disconnect an account
    • connections.setup_cancel · Cancel a pending setup
    • connections.backup_remove · Remove a backup authorization
    • connections.backup_primary_set · Choose the primary authorization
    • connections.posts_retry_failed · Retry the failed posts
    • connections.email_api_key_connect · Connect email marketing with an API key
    • connections.wordpress_connect · Connect WordPress
    • connections.verification_linkedin_publish · Publish the LinkedIn review post
    • connections.verification_linkedin_delete · Delete the LinkedIn review post
    • connections.verification_youtube_publish · Upload the YouTube review video
    • connections.external_access_revoke · Revoke an outside app's access
    • connections.external_access_grant · Grant an outside app access
    • connections.attention · Connections needing attention
    • connections.overview · Brand connections overview