Skip to content

Channels API Reference

All channel endpoints require authentication via Bearer token.

Create Channel

POST /channels

Request Body:

FieldTypeRequiredDescription
namestringChannel name (e.g., my-slack-bot)
platformstringslack, discord, telegram, whatsapp, twilio-voice, or webhook
agentIdstringAgent UUID to handle messages
platformConfigobjectPlatform-specific credentials (see below)
allowedSendersstring[]NoPlatform user IDs allowed to interact
groupPolicystringNodisabled (default), allowlist, or open
allowedGroupsstring[]NoGroup IDs (when groupPolicy is allowlist)
requireMentionbooleanNoOnly respond when @mentioned in groups

Platform Config by Platform

Slack:

json
{ "signingSecret": "abc123...", "botToken": "xoxb-..." }

Discord:

json
{ "publicKey": "abc123...", "botToken": "MTIz..." }

Telegram:

json
{ "botToken": "123456:ABC-DEF..." }

WhatsApp:

json
{ "verifyToken": "my-verify-token", "accessToken": "EAAx...", "phoneNumberId": "123456789" }

Twilio Voice:

json
{ "accountSid": "ACxxx...", "authToken": "xxx...", "phoneNumber": "+12125551234" }

Webhook (Generic):

json
{ "secret": "optional-hmac-secret" }

Response:

json
{
  "data": {
    "channelId": "ch-xxx",
    "name": "my-slack-bot",
    "platform": "slack",
    "agentId": "agent-xxx",
    "status": "active",
    "webhookUrl": "https://api.universalapi.co/channels/inbound/ch-xxx/slack",
    "createdAt": "2026-04-17T..."
  }
}

List Channels

GET /channels

Returns all channels for the authenticated user.

Get Channel

GET /channels/{channelId}

Returns full details including platform config (sensitive values masked).

Update Channel

PUT /channels/{channelId}

Only include fields you want to change.

FieldTypeDescription
namestringNew name
agentIdstringNew agent UUID
statusstringactive or paused
platformConfigobjectUpdated credentials
allowedSendersstring[]Updated sender allowlist
groupPolicystringUpdated group policy
allowedGroupsstring[]Updated allowed groups
requireMentionbooleanUpdated mention requirement

Setting status to active resets the failure counter.

Delete Channel

DELETE /channels/{channelId}

Permanently deletes the channel. For Telegram channels, also deregisters the webhook with the Telegram API.

Test Channel

POST /channels/{channelId}/test

Request Body:

json
{ "message": "Hello! This is a test message." }

Sends a test prompt to the connected agent and returns the response. Useful for verifying the integration works.

Make Outbound Call (Twilio Voice Only)

POST /channels/{channelId}/call

Request Body:

json
{ "to": "+12125559876" }

Initiates an outbound phone call from the channel's Twilio phone number to the target number. The recipient is connected to the voice agent when they answer.

Phone number must be in E.164 format (e.g., +12125551234).

Inbound Webhooks

These endpoints receive messages from platforms. They are called by the platforms themselves — no user auth required (verified via platform signatures).

POST /channels/inbound/{channelId}/{platform}

For WhatsApp webhook verification:

GET /channels/inbound/{channelId}/whatsapp

Error Handling

StatusDescription
400Missing required fields or invalid platform
401Invalid or missing Bearer token
403Channel belongs to another user
404Channel not found
429Rate limit exceeded

Universal API - The agentic entry point to the universe of APIs