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

# Canais

> Lista os canais do negócio e sua chave pública

<Info>
  **Endpoint** · `GET /channels`
</Info>

<Note>
  Endpoint **somente de consulta**: devolve informação e não modifica nada. Não é enviado dentro do array `actions` — é chamado direto.
</Note>

Devolve os canais ativos do negócio, cada um com sua **chave pública** (`key`, com prefixo `ch_`). Essa chave é o dado mais usado de toda a API: o campo `channel` da referência de conversa é **obrigatório em todas as ações** de `POST /conversation/actions` e também é aceito como filtro opcional em vários endpoints de consulta.

Comece por esta página: liste os canais uma vez, guarde a chave do canal com o qual vai trabalhar e reutilize-a em cada requisição. Você também pode copiá-la do painel em **Configurações → Canais**, campo **Chave de canal**.

**Parâmetros**

* Este endpoint **não aceita parâmetros de consulta**. Devolve a lista completa, sem paginação.
* `{slug}` — identificador do negócio na rota (**obrigatório**).
* `Authorization: Bearer <chave>` — cabeçalho de autenticação (**obrigatório**).

### Resposta

```json theme={null}
{
  "data": [
    {
      "key": "ch_7A9K2M4Q",
      "name": "WhatsApp Vendas",
      "type": "whatsapp",
      "is_tester": false
    },
    {
      "key": "ch_3F5T8B1Z",
      "name": "WhatsApp Testes",
      "type": "whatsapp",
      "is_tester": true
    }
  ]
}
```

<ResponseField name="data" type="array" required>
  Lista completa de canais ativos. Canais excluídos não aparecem.
</ResponseField>

<ResponseField name="data[].key" type="string" required>
  Chave pública do canal (`ch_...`). É o valor que se passa como `channel`.
</ResponseField>

<ResponseField name="data[].name" type="string" required>
  Nome do canal como aparece no painel.
</ResponseField>

<ResponseField name="data[].type" type="string" required>
  Tipo de canal, por exemplo `whatsapp`.
</ResponseField>

<ResponseField name="data[].is_tester" type="boolean" required>
  `true` se for o canal de testes do negócio. Útil para não enviar tráfego real a um canal de teste.
</ResponseField>

### Exemplo

É uma leitura: o `GET` não cria, não modifica nem exclui nada. Seu único efeito é entregar a chave que você depois vai colocar em `channel` ao executar uma ação.

```bash theme={null}
curl -X GET "https://app.1to1.ai/api/v1/public/{slug}/channels" \
  -H "Authorization: Bearer sk_1to1_sua_api_key"
```

Com a chave em mãos, já é possível identificar uma conversa em qualquer ação:

```jsonc theme={null}
{
  "conversation": {
    "phone": "+5215512345678",
    "channel": "ch_7A9K2M4Q"
  },
  "actions": [{ "type": "mark_resolved" }]
}
```

**Erros**

| Status HTTP | Código                    | Quando ocorre                                                           |
| ----------- | ------------------------- | ----------------------------------------------------------------------- |
| `401`       | `INVALID_API_TOKEN`       | Chave ausente, malformada ou inválida.                                  |
| `403`       | `TOKEN_BUSINESS_MISMATCH` | O `{slug}` da rota não corresponde ao negócio da chave.                 |
| `429`       | `RATE_LIMIT_EXCEEDED`     | Limite de requisições excedido. Tente novamente conforme `Retry-After`. |
| `500`       | `UNKNOWN_ERROR`           | Erro inesperado do servidor.                                            |

Detalhe completo em [Erros](/pt/errors).

Uma chave de canal inexistente não falha aqui, e sim na requisição que a usa: a ação responde `404` (`CHANNEL_NOT_FOUND`). Para ver onde `channel` entra dentro de um grupo de ações, veja [Ações — Visão geral](/pt/action-groups/overview); para a ordem de resolução de uma conversa, veja [Identificar uma conversa](/pt/conversations).
