Channel APIs
Overview
Manage channels (integrations) in a workspace. Channels are the integrations that connect Bread Crumbs with external messaging providers. Each channel has its own setup flow and integration properties, you can setup a new channel in the Channels (opens in a new tab) page.
Most of the channels require to be created from the Channels (opens in a new tab) page visually while it needs some steps to be completed from the provider's website. For now you can only use the API to create Telegram and Custom Channel.
Channel properties
| Property | Type | Description |
|---|---|---|
workspaceId | number | The workspace ID. |
id | string | The channel ID. |
name | string | The channel name. |
identifier | string | The channel identifier (Business phone nuumber for WhatsApp and business/page name for Instagram). |
type | IntegrationType | The channel type, it can be 'WHATSAPP', 'INSTAGRAM', 'TELEGRAM' or 'CUSTOM'. |
createdAt | DateTime | The created timestamp. |
patchedAt | DateTime | The last updated timestamp. |
properties | json | The channel properties, it's explained in the next section. |
Channel assignment properties (properties)
| Property | Type | Description |
|---|---|---|
startWith | StartWithType | The conversation assignment strategy. Possible values: AUTO, AI, AGENT, AI_BY_COUNTRY_CODE, AGENT_BY_COUNTRY_CODE. |
assigneeId | string | The default assignee ID used by assignment rules, it can be a live agent or an AI assistant. |
byCountryCodeConfig | json | Array of assignment rules by country code. |
byCountryCodeConfig[].code | string | The country code used in the routing rule. |
byCountryCodeConfig[].assigneeId | string | The assignee ID for that country code rule, it can be a live agent or AI assistant. |
List Channels API
List the channels in a workspace. Next are the available filters to list the channels.
| Attribute | Type | Description |
|---|---|---|
workspaceId | number | Required. The workspace ID. |
name | string | Name filter. |
state | IntegrationState | State filter. |
type | IntegrationType | Type filter, it can be 'WHATSAPP', 'INSTAGRAM', 'TELEGRAM' or 'CUSTOM'. |
Request & Response
POST https://gateway.bcrumbs.net/core/gqquery integrations($input: IntegrationsInput!) {
integrations(input: $input) {
nodes {
id
name
type
state
identifier
createdAt
}
}
}
input IntegrationsInput {
workspaceId: Int! # Workspace ID.
name: String # Name filter.
state: IntegrationState # State filter.
type: IntegrationType # Type filter.
}The query above returns JSON structured like this:
{
"data": {
"integrations": {
"nodes": [
{
"id": "id_123",
"name": "sample",
"type": "whatsapp",
"state": "active",
"identifier": "sample",
"createdAt": "2026-03-16T00:00:00.000Z"
}
]
}
}
}Programming language examples
curl -X POST 'https://gateway.bcrumbs.net/core/gq' \
-H 'authorization: API-KEY' \
-H 'content-type: application/json' \
-d '{"operationName":"integrations","variables":{"input":{"workspaceId":12,"name":"sample","state":"VALUE","type":"VALUE"}},"query":"query integrations($input: IntegrationsInput!) {\\n integrations(input: $input) {\\n nodes {\\n id\\n name\\n type\\n state\\n identifier\\n createdAt\\n }\\n }\\n}"}'Create Channel API
Create a channel. You can only create Telegram and Custom Channel through the API.
| Attribute | Type | Description |
|---|---|---|
workspaceId | number | Required. The workspace ID. |
integrationProperties | json | Required. Provider-specific channel properties. |
name | string | Required. The name of the channel. |
type | string | Required. Channel type, it can be 'TELEGRAM' or 'CUSTOM'. |
integrationProperties by channel type
Telegram channel (type: TELEGRAM)
| Property | Type | Description |
|---|---|---|
accessToken | string | Required. Telegram bot token. |
Custom channel (type: CUSTOM)
| Property | Type | Description |
|---|---|---|
endpoint | string | Required. Custom channel endpoint URL. |
validateToken | string | Required. Verification token used for validating callbacks/webhooks. |
accessToken | string | Required. Access token used when communicating with the custom endpoint. |
externalId | string | Required. External identifier for the custom channel. |
Request & Response
POST https://gateway.bcrumbs.net/core/gqmutation createIntegration($input: IntegrationCreateInput!) {
createIntegration(input: $input) {
id
name
type
state
identifier
createdAt
}
}
input IntegrationCreateInput {
workspaceId: Int! # Workspace ID.
integrationProperties: JSON! # Provider-specific channel properties.
name: String! # Channel name.
type: IntegrationType! # Channel type.
}The mutation above returns JSON structured like this:
{
"data": {
"createIntegration": {
"id": "id_123",
"name": "sample",
"type": "whatsapp",
"state": "active",
"identifier": "sample",
"createdAt": "2026-03-16T00:00:00.000Z"
}
}
}Programming language examples
curl -X POST 'https://gateway.bcrumbs.net/core/gq' \
-H 'authorization: API-KEY' \
-H 'content-type: application/json' \
-d '{"operationName":"createIntegration","variables":{"input":{"workspaceId":12,"integrationProperties":{"key":"value"},"name":"sample","type":"VALUE"}},"query":"mutation createIntegration($input: IntegrationCreateInput!) {\\n createIntegration(input: $input) {\\n id\\n name\\n type\\n state\\n identifier\\n createdAt\\n }\\n}"}'Patch Channel API
Patch a channel. You should have the MANAGE_WORKSPACE permission to patch a channel.
| Attribute | Type | Description |
|---|---|---|
workspaceId | number | Required. The workspace ID. |
id | string | Required. The ID. |
properties | JSON | Partial channel properties update. |
name | string | The name. |
Request & Response
POST https://gateway.bcrumbs.net/core/gqmutation patchIntegration($input: IntegrationPatchInput!) {
patchIntegration(input: $input) {
id
name
type
state
identifier
patchedAt
}
}
input IntegrationPatchInput {
workspaceId: Int! # Workspace ID.
id: ID! # Channel ID.
properties: JSON # Partial channel properties update.
name: String # New channel name.
}The mutation above returns JSON structured like this:
{
"data": {
"patchIntegration": {
"id": "id_123",
"name": "sample",
"type": "whatsapp",
"state": "active",
"identifier": "sample",
"patchedAt": "2026-03-16T00:00:00.000Z"
}
}
}Programming language examples
curl -X POST 'https://gateway.bcrumbs.net/core/gq' \
-H 'authorization: API-KEY' \
-H 'content-type: application/json' \
-d '{"operationName":"patchIntegration","variables":{"input":{"workspaceId":12,"id":"id_123","properties":{"key":"value"},"name":"sample"}},"query":"mutation patchIntegration($input: IntegrationPatchInput!) {\\n patchIntegration(input: $input) {\\n id\\n name\\n type\\n state\\n identifier\\n patchedAt\\n }\\n}"}'Waba Message Templates API
Get the WhatsApp message templates for a channel.
| Attribute | Type | Description |
|---|---|---|
workspaceId | number | Required. The workspace ID. |
integrationId | string | Required. The channel ID. |
Request & Response
POST https://gateway.bcrumbs.net/core/gqquery wabaMessageTemplates($input: WabaMessageTemplatesInput!) {
wabaMessageTemplates(input: $input) {
nodes {
id
name
language
status
category
library_template_name
}
}
}
input WabaMessageTemplatesInput {
workspaceId: Int! # Workspace ID.
integrationId: ID! # WhatsApp channel ID.
}The query above returns JSON structured like this:
{
"data": {
"wabaMessageTemplates": {
"nodes": [
{
"id": "tmpl_123",
"name": "sample",
"language": "en_US",
"status": "APPROVED",
"category": "UTILITY",
"library_template_name": "sample_template"
}
]
}
}
}Programming language examples
curl -X POST 'https://gateway.bcrumbs.net/core/gq' \
-H 'authorization: API-KEY' \
-H 'content-type: application/json' \
-d '{"operationName":"wabaMessageTemplates","variables":{"input":{"workspaceId":12,"integrationId":"id_123"}},"query":"query wabaMessageTemplates($input: WabaMessageTemplatesInput!) {\\n wabaMessageTemplates(input: $input) {\\n nodes {\\n id\\n name\\n language\\n status\\n category\\n library_template_name\\n }\\n }\\n}"}'