> ## Documentation Index
> Fetch the complete documentation index at: https://docs.keebai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# GET /v1/channels

> List a company's active channels, filterable by type.

Returns the connected channels for the company tied to the PAT. Handy for discovering which channel to use when sending messages or registering webhooks.

```http theme={null}
GET /v1/channels
GET /v1/channels?type=whatsapp
```

**Required scope:** `channels:read`

## Query params

| Param  | Type          | Description                                                                                                 |
| ------ | ------------- | ----------------------------------------------------------------------------------------------------------- |
| `type` | optional enum | Filter by type. Values: `whatsapp`, `whatsapp_qr`, `instagram`, `messenger`, `tiktok`, `web`, `playground`. |

## Request

```bash theme={null}
curl 'https://api.keebai.com/v1/channels?type=whatsapp' \
  -H "Authorization: Bearer kbai_pk_xxx"
```

## Response 200

```json theme={null}
{
  "data": [
    {
      "id": "ch_01HXYZ...",
      "name": "Soporte Chile",
      "type": "whatsapp",
      "is_active": true,
      "phone_number": "+56987654321",
      "phone_number_id": "1234567890",
      "business_account_id": "9876543210",
      "created_at": "2026-04-15T10:00:00Z"
    }
  ]
}
```

| Field                                                      | Type    | Description                                                                                     |
| ---------------------------------------------------------- | ------- | ----------------------------------------------------------------------------------------------- |
| `id`                                                       | string  | Channel ID. Use it in `POST /v1/messages` (`channel_id`) and when filtering webhook deliveries. |
| `name`                                                     | string  | Channel display name.                                                                           |
| `type`                                                     | enum    | Channel type.                                                                                   |
| `is_active`                                                | boolean | `false` only for channels that are paused or have credential issues.                            |
| `phone_number` / `phone_number_id` / `business_account_id` | string  | Only for `type: whatsapp`.                                                                      |

## Fetch a channel by id

`GET /v1/channels/:id` — same shape as a list item, no filters.

```bash theme={null}
curl https://api.keebai.com/v1/channels/ch_01HXYZ \
  -H "Authorization: Bearer kbai_pk_xxx"
```

If the id doesn't exist or belongs to another company, it returns `404 CHANNEL_NOT_FOUND`.


## OpenAPI

````yaml GET /v1/channels
openapi: 3.0.0
info:
  title: Keebai Public API
  description: Superficie pública REST autenticada con Personal Access Tokens (PAT).
  version: 1.0.0
  contact: {}
servers:
  - url: https://api.keebai.com
    description: Production
security: []
tags: []
paths:
  /v1/channels:
    get:
      tags:
        - channels
      summary: Listar canales activos de la company.
      operationId: PublicChannelsController_list
      parameters:
        - name: type
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicChannelListResponseDto'
      security:
        - PAT: []
components:
  schemas:
    PublicChannelListResponseDto:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/PublicChannelResponseDto'
      required:
        - data
    PublicChannelResponseDto:
      type: object
      properties:
        id:
          type: string
          description: ObjectId del canal
        type:
          type: string
          description: whatsapp | instagram | messenger …
        name:
          type: string
        is_active:
          type: boolean
        whatsapp:
          $ref: '#/components/schemas/PublicChannelWhatsappDto'
        instagram:
          $ref: '#/components/schemas/PublicChannelInstagramDto'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
      required:
        - id
        - type
        - name
        - is_active
        - created_at
        - updated_at
    PublicChannelWhatsappDto:
      type: object
      properties:
        phone_number_id:
          type: string
          description: phone_number_id emitido por Meta
        phone_number:
          type: string
        business_account_id:
          type: string
        coexistence_enabled:
          type: boolean
        token_expires_at:
          type: object
          format: date-time
          nullable: true
      required:
        - phone_number_id
        - phone_number
        - business_account_id
        - coexistence_enabled
        - token_expires_at
    PublicChannelInstagramDto:
      type: object
      properties:
        scope_id:
          type: string
        igb_business_account_id:
          type: string
        username:
          type: string
        token_expires_at:
          type: object
          format: date-time
          nullable: true
      required:
        - scope_id
        - igb_business_account_id
        - username
        - token_expires_at
  securitySchemes:
    PAT:
      scheme: bearer
      bearerFormat: kbai_pk_<hex>
      type: http
      description: >-
        Personal Access Token con prefijo `kbai_pk_`. Generar desde el portal
        con permiso `developer.manage_tokens`.

````