Skip to main content

Channel Kinds

The surfaces and predicates each connectable channel kind publishes — what a route's surface and match can name.

Overview

Every connectable kind (whatsapp, discord) declares its own surfaces — named conversational shapes, like a 1:1 DM or a shared server thread — and the predicates its routes can match on: an engine-wide vocabulary every kind shares (address_known), plus whatever the kind itself contributes (guild_id on Discord). GET /v1/channel-kinds reads this registry directly, so a console can render a route's condition builder without hardcoding either vocabulary.

See the OpenAPI spec for the full schema reference, or browse it rendered under API Reference → Channel Kinds.

Data Model

ChannelKind

FieldTypeDescription
kindstringwhatsapp or discord.
surfacesarray of object{ name, title, shared } — this kind's conversational shapes.
predicatesarray of object{ name, type } — the match keys a route on this kind can use.

shared: true means several humans share one conversation there (a thread) — worth knowing before you route it to an agent with account-scoped tools.

Key Concepts

Today's surfaces

KindSurfacesharedIdentifier
whatsappdmfalsewhatsapp:dm:<phone>
discorddmfalsediscord:dm:<user_id>
discordguild_threadtruediscord:thread:<guild_id>:<channel_id>

Today's predicates

PredicateScopeTypeMatches
address_knownevery kindbooleanWhether this project has seen the identifier before.
guild_iddiscordstringWhich server the message came from — how a guild is granted an agent at all.

Examples

List every channel kind, its surfaces and its predicates:

naturali list-channel-kinds