# Channel API

> Invoke custom ingress, inspect deployed Channels, send outbound messages, and read receipts and events.

## Ingress and built-in adapters {#ingress}

| Method | Path | Purpose |
| --- | --- | --- |
| `ANY` | `/v1/channels/:tenant/:namespace/:channel/*` | Invoke a deployed custom public Channel through its Auth Provider |
| `POST` | `/v1/chat/completions` | OpenAI Chat Completions adapter |
| `POST` | `/v1/messages` | Anthropic Messages adapter |

Custom ingress authentication is defined by the Channel’s exact Auth Provider. Constal lazily materializes the OpenAI and Anthropic adapters, plus their platform API-key Auth Provider, as canonical tenant Resources; they appear on authenticated discovery or first use without a tenant package deployment. Their `model` field may choose only among Agents that explicitly opt in with `channels.constal.ai/openai=enabled` or `channels.constal.ai/anthropic=enabled` and are matched by that Channel's selector.

## Discovery and operation {#operation}

All namespace endpoints begin `/v1/namespaces/:namespace`.

| Method | Suffix | Purpose |
| --- | --- | --- |
| `GET` | `/channels` | List deployed Channels |
| `GET` | `/channels/:channel` | Read endpoint, protocol, Agent selector and matches, Auth Provider, capabilities, and deployment |
| `POST` | `/channels/:channel/messages` | Send one outbound SDK `ChannelMessage` |
| `GET` | `/channels/:channel/messages/:messageId` | Read a durable delivery receipt |
| `GET` | `/channels/:channel/events` | Read bounded Channel events |

The Channel package must declare optional `send` before outbound messages. Delivery ids are stable idempotency identities managed by Constal. Raw Credential values never appear in these API responses. See [Build Channels and Auth Providers](/docs/sdk/channels-and-auth.md) for executable contracts and [Operate Channels](/docs/channels/operate.md) for troubleshooting.
