Reference

Channels

Connect, pause, update, the web widget, WhatsApp templates and Telegram bot settings

All of these need CHANNELS_MANAGE. See Channels.

channelTelegramBotSettings

Query

ScopeCHANNELS_MANAGE

Cached bot settings of a Telegram channel (null if never synced). Unknown, foreign and non-Telegram channel ids are the same NotFound.

Arguments

integrationIdString!Required

Returns

nameString!
Bot display name
descriptionString!
Bot description (shown on empty chat screen, up to 512 chars)
shortDescriptionString!
Short description (profile page, up to 120 chars)
Bot commands list
Chat menu button configuration
syncedAtString!
ISO timestamp of last sync from Telegram API
query {
  channelTelegramBotSettings(integrationId: "…") { name description shortDescription commands menuButton }
}

channels

Query

ScopeCHANNELS_MANAGE

List the calling organisation's messaging channels with their status.

Arguments

Returns

createdAtDateTime!
updatedAtDateTime!
_idString!
Integration category
Integration provider (AI, Messaging, CRM)
nameString
Custom integration name (required for CUSTOM provider)
Per-integration AI auto-reply config: whether a new contact gets AI enabled by default and which assistant. Seeded on the first message.
Integration connection status
Structured error information if connection failed
organisationIdString!
Organization this integration belongs to
lastTestedAtDateTime
When the integration was last tested
disconnectedAtDateTime
When the integration was disconnected (token removed)
commentWebhookStatusCommentWebhookStatus
Whether this Instagram integration is set up to receive comment webhooks (LIVE / NEEDS_RECONNECT / NEEDS_RESUBSCRIBE). Derived from stored metadata only - never calls Meta on read. Use checkCommentWebhookConnection to refresh it against Meta on demand. Null for non-Instagram integrations.
query {
  channels(provider: OPENAI) { createdAt updatedAt _id category provider }
}

connectInstagramChannel

Mutation

ScopeCHANNELS_MANAGE

Connect an Instagram account using an Instagram User Access Token already obtained via Meta Business Login.

Arguments

accessTokenString!Required

Returns

createdAtDateTime!
updatedAtDateTime!
_idString!
Integration category
Integration provider (AI, Messaging, CRM)
nameString
Custom integration name (required for CUSTOM provider)
Per-integration AI auto-reply config: whether a new contact gets AI enabled by default and which assistant. Seeded on the first message.
Integration connection status
Structured error information if connection failed
organisationIdString!
Organization this integration belongs to
lastTestedAtDateTime
When the integration was last tested
disconnectedAtDateTime
When the integration was disconnected (token removed)
commentWebhookStatusCommentWebhookStatus
Whether this Instagram integration is set up to receive comment webhooks (LIVE / NEEDS_RECONNECT / NEEDS_RESUBSCRIBE). Derived from stored metadata only - never calls Meta on read. Use checkCommentWebhookConnection to refresh it against Meta on demand. Null for non-Instagram integrations.
mutation {
  connectInstagramChannel(accessToken: "…") { createdAt updatedAt _id category provider }
}

connectTelegramChannel

Mutation

ScopeCHANNELS_MANAGE

Connect a Telegram bot (BotFather token) to the calling organisation.

Arguments

botTokenString!Required

Returns

createdAtDateTime!
updatedAtDateTime!
_idString!
Integration category
Integration provider (AI, Messaging, CRM)
nameString
Custom integration name (required for CUSTOM provider)
Per-integration AI auto-reply config: whether a new contact gets AI enabled by default and which assistant. Seeded on the first message.
Integration connection status
Structured error information if connection failed
organisationIdString!
Organization this integration belongs to
lastTestedAtDateTime
When the integration was last tested
disconnectedAtDateTime
When the integration was disconnected (token removed)
commentWebhookStatusCommentWebhookStatus
Whether this Instagram integration is set up to receive comment webhooks (LIVE / NEEDS_RECONNECT / NEEDS_RESUBSCRIBE). Derived from stored metadata only - never calls Meta on read. Use checkCommentWebhookConnection to refresh it against Meta on demand. Null for non-Instagram integrations.
mutation {
  connectTelegramChannel(botToken: "…") { createdAt updatedAt _id category provider }
}

connectViberChannel

Mutation

ScopeCHANNELS_MANAGE

Connect a Viber bot (Admin Panel auth token) to the calling organisation.

Arguments

authTokenString!Required

Returns

createdAtDateTime!
updatedAtDateTime!
_idString!
Integration category
Integration provider (AI, Messaging, CRM)
nameString
Custom integration name (required for CUSTOM provider)
Per-integration AI auto-reply config: whether a new contact gets AI enabled by default and which assistant. Seeded on the first message.
Integration connection status
Structured error information if connection failed
organisationIdString!
Organization this integration belongs to
lastTestedAtDateTime
When the integration was last tested
disconnectedAtDateTime
When the integration was disconnected (token removed)
commentWebhookStatusCommentWebhookStatus
Whether this Instagram integration is set up to receive comment webhooks (LIVE / NEEDS_RECONNECT / NEEDS_RESUBSCRIBE). Derived from stored metadata only - never calls Meta on read. Use checkCommentWebhookConnection to refresh it against Meta on demand. Null for non-Instagram integrations.
mutation {
  connectViberChannel(authToken: "…") { createdAt updatedAt _id category provider }
}

connectWhatsAppChannel

Mutation

ScopeCHANNELS_MANAGE

Connect a WhatsApp number using credentials already obtained via Meta embedded signup (access token + WABA id + phone number id). Does not run the Meta OAuth flow.

Arguments

ConnectWhatsAppChannelInput

accessTokenString!Required
Meta (system-user / business) access token for the WABA
wabaIdString!Required
WhatsApp Business Account id
phoneNumberIdString!Required
Phone number id to connect
tokenExpiresInInt
Access-token lifetime in seconds (default ~60 days)

Returns

createdAtDateTime!
updatedAtDateTime!
_idString!
Integration category
Integration provider (AI, Messaging, CRM)
nameString
Custom integration name (required for CUSTOM provider)
Per-integration AI auto-reply config: whether a new contact gets AI enabled by default and which assistant. Seeded on the first message.
Integration connection status
Structured error information if connection failed
organisationIdString!
Organization this integration belongs to
lastTestedAtDateTime
When the integration was last tested
disconnectedAtDateTime
When the integration was disconnected (token removed)
commentWebhookStatusCommentWebhookStatus
Whether this Instagram integration is set up to receive comment webhooks (LIVE / NEEDS_RECONNECT / NEEDS_RESUBSCRIBE). Derived from stored metadata only - never calls Meta on read. Use checkCommentWebhookConnection to refresh it against Meta on demand. Null for non-Instagram integrations.
mutation {
  connectWhatsAppChannel(input: { … }) { createdAt updatedAt _id category provider }
}

createWebIntegration

Mutation

ScopeCHANNELS_MANAGE

Create the web messenger integration for the current organisation. Returns the integration row plus the plaintext sharedSecret - the ONLY response that surfaces the secret. Copy it into your backend now; subsequent queries won't expose it.

Arguments

CreateWebIntegrationInput

nameString!Required
allowedOrigins[String!]!Required
aiAutoReplyModeAiAutoReplyMode!Required
aiAutoReplyAssistantIdID
aiAutoReplyRules[AiAutoReplyRuleInput!]

Returns

integrationWebIntegration!
sharedSecretString!
mutation {
  createWebIntegration(input: { … }) { integration sharedSecret }
}

createWhatsAppTemplate

Mutationexpensive

ScopeCHANNELS_MANAGE

Create a new WhatsApp template and submit to Meta for approval. API keys have a per-organisation daily create cap (default 20).

Arguments

CreateWhatsAppTemplateInput

integrationIdString!Required
Integration ID (WhatsApp Business Account)
nameString!Required
Template name (lowercase, alphanumeric, underscores only)
displayNameString
Human-readable display name
languageString!Required
Language code (e.g., en, en_US, es, de)
Template category
Template components

Returns

successBoolean!
errorString
externalTemplateIdString
External template ID from Meta
mutation {
  createWhatsAppTemplate(input: { … }) { success template error externalTemplateId }
}

deleteChannelTelegramBotCommands

Mutation

ScopeCHANNELS_MANAGE

Delete all Telegram bot commands. Unknown, foreign and non-Telegram channel ids are the same NotFound.

Arguments

integrationIdString!Required

Returns

nameString!
Bot display name
descriptionString!
Bot description (shown on empty chat screen, up to 512 chars)
shortDescriptionString!
Short description (profile page, up to 120 chars)
Bot commands list
Chat menu button configuration
syncedAtString!
ISO timestamp of last sync from Telegram API
mutation {
  deleteChannelTelegramBotCommands(integrationId: "…") { name description shortDescription commands menuButton }
}

deleteWebIntegration

Mutationirreversible

ScopeCHANNELS_MANAGE

Hard-delete the integration. Active visitor sessions become orphans and clean up via existing People retention sweeps. Visitor-facing endpoints start returning 503 immediately.

Arguments

idID!Required

Returns

Boolean!
mutation {
  deleteWebIntegration(id: "…")
}

deleteWhatsAppTemplate

Mutationexpensiveirreversible

ScopeCHANNELS_MANAGE

Delete a WhatsApp template. On Meta this deletes ALL language variants of the template name (other local language rows drop on the next sync), and Meta blocks reusing the name for several weeks.

Arguments

idString!Required

Returns

successBoolean!
errorString
mutation {
  deleteWhatsAppTemplate(id: "…") { success error }
}

disconnectChannel

Mutationirreversible

ScopeCHANNELS_MANAGE

Disconnect a messaging channel of the calling organisation (stops the bot, reconciles chats/conversations). Unknown / foreign ids are NotFound.

Arguments

integrationIdString!Required
deletePeopleBoolean
Defaults to false.

Returns

integrationIdString!
organisationIdString!
dryRunBoolean!
If true, this was a preview - no data was actually deleted
deletedPeopleInt!
Number of People (lead) records deleted (only if deletePeople=true)
deletedPeopleFieldValuesInt!
Number of PeopleFieldValue records deleted (only if deletePeople=true)
deletedChatsInt!
Number of Chat records deleted (always deleted on disconnect)
deletedMessagesInt!
Number of Message records deleted (always deleted on disconnect)
deletedMessageReactionsInt!
Number of MessageReaction records deleted (always deleted on disconnect)
deletedMediaInt!
Number of Media files deleted from S3 and database (always deleted on disconnect)
deletedCollectionsInt!
Number of ChatCollections deleted (collections with INTEGRATION_ID rules referencing this integration)
deletedTemplatesInt!
Number of WhatsApp templates deleted (only for WhatsApp integrations)
updatedFlowsInt!
Number of Flows updated (integration removed from integrationIds array)
errors[String!]!
Any errors that occurred during cleanup
mutation {
  disconnectChannel(integrationId: "…", deletePeople: false) { integrationId organisationId dryRun deletedPeople deletedPeopleFieldValues }
}

partnerChannelConnectUrl

Mutation

ScopeCHANNELS_MANAGE

Start a hosted WhatsApp/Instagram connect for one of the partner's MANAGED client orgs. Returns the Meta OAuth URL to send the customer to; after consent the browser is 302ed to `returnUrl` with ?status=connected|error&provider=..&reason=..

Arguments

childOrganisationIdString!Required
channelHostedConnectChannel!Required
returnUrlString!Required

Returns

String!
mutation {
  partnerChannelConnectUrl(childOrganisationId: "…", channel: WHATSAPP, returnUrl: "…")
}

pauseChannel

Mutation

ScopeCHANNELS_MANAGE

Pause a messaging channel of the calling organisation (stops inbound processing). Unknown / foreign ids are NotFound.

Arguments

integrationIdString!Required

Returns

createdAtDateTime!
updatedAtDateTime!
_idString!
Integration category
Integration provider (AI, Messaging, CRM)
nameString
Custom integration name (required for CUSTOM provider)
Per-integration AI auto-reply config: whether a new contact gets AI enabled by default and which assistant. Seeded on the first message.
Integration connection status
Structured error information if connection failed
organisationIdString!
Organization this integration belongs to
lastTestedAtDateTime
When the integration was last tested
disconnectedAtDateTime
When the integration was disconnected (token removed)
commentWebhookStatusCommentWebhookStatus
Whether this Instagram integration is set up to receive comment webhooks (LIVE / NEEDS_RECONNECT / NEEDS_RESUBSCRIBE). Derived from stored metadata only - never calls Meta on read. Use checkCommentWebhookConnection to refresh it against Meta on demand. Null for non-Instagram integrations.
mutation {
  pauseChannel(integrationId: "…") { createdAt updatedAt _id category provider }
}

resumeChannel

Mutationexpensive

ScopeCHANNELS_MANAGE

Resume a paused messaging channel of the calling organisation. Unknown / foreign ids are NotFound.

Arguments

integrationIdString!Required

Returns

createdAtDateTime!
updatedAtDateTime!
_idString!
Integration category
Integration provider (AI, Messaging, CRM)
nameString
Custom integration name (required for CUSTOM provider)
Per-integration AI auto-reply config: whether a new contact gets AI enabled by default and which assistant. Seeded on the first message.
Integration connection status
Structured error information if connection failed
organisationIdString!
Organization this integration belongs to
lastTestedAtDateTime
When the integration was last tested
disconnectedAtDateTime
When the integration was disconnected (token removed)
commentWebhookStatusCommentWebhookStatus
Whether this Instagram integration is set up to receive comment webhooks (LIVE / NEEDS_RECONNECT / NEEDS_RESUBSCRIBE). Derived from stored metadata only - never calls Meta on read. Use checkCommentWebhookConnection to refresh it against Meta on demand. Null for non-Instagram integrations.
mutation {
  resumeChannel(integrationId: "…") { createdAt updatedAt _id category provider }
}

rotateWebIntegrationSecret

Mutation

ScopeCHANNELS_MANAGE

Mint a new sharedSecret for the integration. The old secret stops verifying user_hash IMMEDIATELY - stage the new secret in your backend BEFORE calling this mutation if you need zero-downtime rotation. Returns the plaintext exactly once.

Arguments

idID!Required

Returns

integrationWebIntegration!
sharedSecretString!
mutation {
  rotateWebIntegrationSecret(id: "…") { integration sharedSecret }
}

setChannelTelegramBotCommands

Mutation

ScopeCHANNELS_MANAGE

Replace the Telegram bot command list (max 100). Unknown, foreign and non-Telegram channel ids are the same NotFound.

Arguments

SetTelegramBotCommandsInput

integrationIdString!Required
Integration ID
Commands to set (max 100)

Returns

nameString!
Bot display name
descriptionString!
Bot description (shown on empty chat screen, up to 512 chars)
shortDescriptionString!
Short description (profile page, up to 120 chars)
Bot commands list
Chat menu button configuration
syncedAtString!
ISO timestamp of last sync from Telegram API
mutation {
  setChannelTelegramBotCommands(input: { … }) { name description shortDescription commands menuButton }
}

setChannelTelegramBotDescription

Mutation

ScopeCHANNELS_MANAGE

Set the Telegram bot description (up to 512 chars; empty clears). Unknown, foreign and non-Telegram channel ids are the same NotFound.

Arguments

SetTelegramBotDescriptionInput

integrationIdString!Required
Integration ID
descriptionString!Required
Bot description (up to 512 chars, empty to clear)

Returns

nameString!
Bot display name
descriptionString!
Bot description (shown on empty chat screen, up to 512 chars)
shortDescriptionString!
Short description (profile page, up to 120 chars)
Bot commands list
Chat menu button configuration
syncedAtString!
ISO timestamp of last sync from Telegram API
mutation {
  setChannelTelegramBotDescription(input: { … }) { name description shortDescription commands menuButton }
}

setChannelTelegramBotName

Mutation

ScopeCHANNELS_MANAGE

Set the Telegram bot display name (up to 64 chars; empty resets). Unknown, foreign and non-Telegram channel ids are the same NotFound.

Arguments

SetTelegramBotNameInput

integrationIdString!Required
Integration ID
nameString!Required
Bot name (up to 64 chars, empty to reset to username)

Returns

nameString!
Bot display name
descriptionString!
Bot description (shown on empty chat screen, up to 512 chars)
shortDescriptionString!
Short description (profile page, up to 120 chars)
Bot commands list
Chat menu button configuration
syncedAtString!
ISO timestamp of last sync from Telegram API
mutation {
  setChannelTelegramBotName(input: { … }) { name description shortDescription commands menuButton }
}

setChannelTelegramBotShortDescription

Mutation

ScopeCHANNELS_MANAGE

Set the Telegram bot short description (up to 120 chars; empty clears). Unknown, foreign and non-Telegram channel ids are the same NotFound.

SetTelegramBotShortDescriptionInput

integrationIdString!Required
Integration ID
shortDescriptionString!Required
Short description for profile page (up to 120 chars, empty to clear)

Returns

nameString!
Bot display name
descriptionString!
Bot description (shown on empty chat screen, up to 512 chars)
shortDescriptionString!
Short description (profile page, up to 120 chars)
Bot commands list
Chat menu button configuration
syncedAtString!
ISO timestamp of last sync from Telegram API
mutation {
  setChannelTelegramBotShortDescription(input: { … }) { name description shortDescription commands menuButton }
}

setChannelTelegramMenuButton

Mutation

ScopeCHANNELS_MANAGE

Set the Telegram chat menu button (DEFAULT, COMMANDS, or WEB_APP with text + HTTPS URL). Unknown, foreign and non-Telegram channel ids are the same NotFound.

Arguments

SetTelegramMenuButtonInput

integrationIdString!Required
Integration ID
menuButtonTelegramMenuButtonInput!Required
Menu button to set

Returns

nameString!
Bot display name
descriptionString!
Bot description (shown on empty chat screen, up to 512 chars)
shortDescriptionString!
Short description (profile page, up to 120 chars)
Bot commands list
Chat menu button configuration
syncedAtString!
ISO timestamp of last sync from Telegram API
mutation {
  setChannelTelegramMenuButton(input: { … }) { name description shortDescription commands menuButton }
}

syncChannelTelegramBotSettings

Mutationexpensive

ScopeCHANNELS_MANAGE

Pull all bot settings of a Telegram channel from Telegram and cache them. Unknown, foreign and non-Telegram channel ids are the same NotFound.

Arguments

integrationIdString!Required

Returns

nameString!
Bot display name
descriptionString!
Bot description (shown on empty chat screen, up to 512 chars)
shortDescriptionString!
Short description (profile page, up to 120 chars)
Bot commands list
Chat menu button configuration
syncedAtString!
ISO timestamp of last sync from Telegram API
mutation {
  syncChannelTelegramBotSettings(integrationId: "…") { name description shortDescription commands menuButton }
}

syncWhatsAppTemplates

Mutationexpensive

ScopeCHANNELS_MANAGE

Sync templates from Meta for a WhatsApp integration

Arguments

integrationIdString!Required

Returns

syncedInt!
createdInt!
updatedInt!
deletedInt!
errors[String!]!
mutation {
  syncWhatsAppTemplates(integrationId: "…") { synced created updated deleted errors }
}

updateChannel

Mutation

ScopeCHANNELS_MANAGE

Rename a messaging channel and/or set its AI auto-reply default. Credentials, provider and category cannot be changed here. Unknown / foreign ids are NotFound.

Arguments

integrationIdString!Required
inputUpdateChannelInput!Required

UpdateChannelInput

nameString
Display name of the channel
AI auto-reply default for NEW contacts on this channel (SPECIFIC needs an assistant of the same organisation).

Returns

createdAtDateTime!
updatedAtDateTime!
_idString!
Integration category
Integration provider (AI, Messaging, CRM)
nameString
Custom integration name (required for CUSTOM provider)
Per-integration AI auto-reply config: whether a new contact gets AI enabled by default and which assistant. Seeded on the first message.
Integration connection status
Structured error information if connection failed
organisationIdString!
Organization this integration belongs to
lastTestedAtDateTime
When the integration was last tested
disconnectedAtDateTime
When the integration was disconnected (token removed)
commentWebhookStatusCommentWebhookStatus
Whether this Instagram integration is set up to receive comment webhooks (LIVE / NEEDS_RECONNECT / NEEDS_RESUBSCRIBE). Derived from stored metadata only - never calls Meta on read. Use checkCommentWebhookConnection to refresh it against Meta on demand. Null for non-Instagram integrations.
mutation {
  updateChannel(integrationId: "…", input: { … }) { createdAt updatedAt _id category provider }
}

updateWebIntegration

Mutation

ScopeCHANNELS_MANAGE

Patch operator-mutable fields on the web integration. publicKey is immutable (would break embedded loader snippets); use rotateWebIntegrationSecret to spin a new sharedSecret.

Arguments

idID!Required

UpdateWebIntegrationInput

nameString
allowedOrigins[String!]
defaultLocaleString
supportedLocales[String!]
contentLocaleFallbackBoolean
localeStrategyWebLocaleStrategy
greetingI18nJSON
messengerI18nJSON
prechatFormI18nJSON
homeLayoutI18nJSON
aiAutoReplyModeAiAutoReplyMode
aiAutoReplyAssistantIdID
aiAutoReplyRules[AiAutoReplyRuleInput!]
defaultTabWebDefaultTab
homeLayoutJSON
disabledBoolean

Returns

_idID!
nameString!
defaultLocaleString!
supportedLocales[String!]!
contentLocaleFallbackBoolean!
localeStrategyWebLocaleStrategy!
greetingI18nJSON
messengerI18nJSON
prechatFormI18nJSON
homeLayoutI18nJSON
publicKeyString!
allowedOrigins[String!]!
showLogoInLauncherBoolean
mutation {
  updateWebIntegration(id: "…", input: { … }) { _id name defaultLocale supportedLocales contentLocaleFallback }
}

updateWhatsAppTemplate

Mutation

ScopeCHANNELS_MANAGE

Update local metadata for a WhatsApp template (variableMappings, defaultMedia)

Arguments

UpdateWhatsAppTemplateInput

templateIdString!Required
Template ID to update
Component updates (only variableMappings and defaultMediaId can be updated)

Returns

successBoolean!
errorString
mutation {
  updateWhatsAppTemplate(input: { … }) { success error template }
}

webIntegration

Query

ScopeCHANNELS_MANAGE

The web messenger integration for the current organisation, or null when none is configured. At most one per org by design.

Returns

_idID!
nameString!
defaultLocaleString!
supportedLocales[String!]!
contentLocaleFallbackBoolean!
localeStrategyWebLocaleStrategy!
greetingI18nJSON
messengerI18nJSON
prechatFormI18nJSON
homeLayoutI18nJSON
publicKeyString!
allowedOrigins[String!]!
showLogoInLauncherBoolean
query {
  webIntegration { _id name defaultLocale supportedLocales contentLocaleFallback }
}

webIntegrationById

Query

ScopeCHANNELS_MANAGE

Look up a web integration by _id (scoped to the operator org).

Arguments

idID!Required

Returns

_idID!
nameString!
defaultLocaleString!
supportedLocales[String!]!
contentLocaleFallbackBoolean!
localeStrategyWebLocaleStrategy!
greetingI18nJSON
messengerI18nJSON
prechatFormI18nJSON
homeLayoutI18nJSON
publicKeyString!
allowedOrigins[String!]!
showLogoInLauncherBoolean
query {
  webIntegrationById(id: "…") { _id name defaultLocale supportedLocales contentLocaleFallback }
}

whatsAppTemplate

Query

ScopeCHANNELS_MANAGE

Get a specific WhatsApp template by ID

Arguments

idString!Required

Returns

_idString!
organisationString!
integrationString!
nameString!
displayNameString
languageString!
externalTemplateIdString
rejectionReasonString
qualityScoreString
variableCountFloat
lastSyncedAtDateTime
createdAtDateTime
updatedAtDateTime
query {
  whatsAppTemplate(id: "…") { _id organisation integration name displayName }
}

whatsAppTemplates

Query

ScopeCHANNELS_MANAGE

Get all WhatsApp templates for the organisation with filtering and pagination

WhatsAppTemplateFilterInput

integrationIds[String!]
Filter by integration IDs
Filter by categories
Filter by statuses
languages[String!]
Filter by languages
searchString
Search by name or content
skipInt
Skip (offset) for pagination
limitInt
Limit (page size) for pagination
sortOrderSortOrder

Returns

totalCountInt!
hasNextPageBoolean!
hasPreviousPageBoolean!
query {
  whatsAppTemplates(filter: { … }) { items totalCount hasNextPage hasPreviousPage }
}

On this page