Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: KaiCalls Public Channels API
version: '2026-06-05'
description: Machine-readable surface for KaiCalls external developers and client agents.
servers:
- url: https://www.kaicalls.com/api
security:
- bearerAuth: []
tags:
- name: Channels
paths:
/v1/channels:
get:
summary: Return every customer channel's state and next blocker for a workspace…
description: 'One row per channel (voice, sms, whatsapp, imessage, rcs, messenger, instagram, webchat, email) with `availability` (live, built_off, planned), `state` (ready, needs_setup, blocked, not_available), `canSend`, `canReceive` and `nextStep` (`id`, `description`, optional `tool` naming the connector tool that takes the step). Read-only and derived from the same reads the per-channel endpoints use: sms is ready only once the business text registration is approved, and whatsapp only on a verified number. Email includes a separate managedEmail object (state, canSend, reasons, tool) for campaign sender/trust/release readiness; a connected mailbox does not prove campaign readiness. Sender readiness never proves owner approval or delivery. Mirrors the get_channel_status tool.'
parameters:
- name: business_id
in: query
required: true
schema:
type: string
responses:
'200':
description: Every channel with its state and next step
'400':
description: business_id is missing
'403':
description: Missing sms:read scope, or no access to this business
x-required-scopes: sms:read
tags:
- Channels
operationId: getV1Channels
x-operation-id-source: derived
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'KaiCalls API key. Per-operation scope requirements are published on each operation as `x-required-scopes` — a scope string, or a nested `{ allOf: [...] }` / `{ anyOf: [...] }` expression. An operation with no `x-required-scopes` requires a valid key but no particular scope.'
x-scopes:
- workspaces:read
- workspaces:write
- numbers:read
- numbers:write
- agents:read
- agents:write
- communication-runs:read
- communication-runs:write
- calls:read
- calls:write
- sms:read
- sms:write
- webhooks:read
- webhooks:write
- events:read
- events:replay
- lifecycle:write
- leads:read
- leads:write
- emails:read
- emails:write
- sdr:read
- sdr:write
- evals:read
- evals:write
- appointments:read
- appointments:write
- knowledge:read
- knowledge:write
- products:read
- products:write
- integrations:write
- approvals:write
- concierge:write
- billing:read
- billing:write
- call_evidence:read
- call_evidence:write
- support:write
sessionAuth:
type: apiKey
in: cookie
name: sb-access-token
description: Authenticated dashboard session cookie. Used by first-party flows that mint or manage API keys.