> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.muchau.com.br/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.muchau.com.br/_mcp/server.

# Visão Geral da Referência da API

> URL base, autenticação, erros, paginação e limites de taxa da API do Muchaw DEV.

## URL Base

```
https://dev.muchau.com.br/api
```

Exemplo:

```
https://dev.muchau.com.br/api/messages/send
```

## Autenticação

Todos os endpoints exigem uma chave de API (exceto as rotas públicas de Link de Cadastro):

```http
Authorization: Bearer mk_live_<43-chars>
```

Veja [Autenticação](/docs/authentication) para detalhes.

## Formato da requisição

* Content type: `application/json`
* Datas: strings ISO 8601 (ex: `2024-01-15T10:00:00.000Z`)
* Números de telefone: formato internacional sem `+` (ex: `5511999990000`)

## Formato da resposta

Todas as respostas são JSON. Respostas bem-sucedidas retornam o recurso diretamente (ou um array/objeto paginado).

## Formato de erro

```json
{
  "error": {
    "code": "NOT_FOUND",
    "message": "Number not found",
    "status": 404
  }
}
```

| Status HTTP | Código             | Descrição                                                        |
| ----------- | ------------------ | ---------------------------------------------------------------- |
| 400         | `VALIDATION_ERROR` | Corpo da requisição ou parâmetros de query falharam na validação |
| 401         | `UNAUTHORIZED`     | Chave de API ausente, inválida ou revogada                       |
| 403         | `FORBIDDEN`        | Recurso pertence a uma conta diferente                           |
| 404         | `NOT_FOUND`        | Recurso não existe                                               |
| 409         | `CONFLICT`         | Recurso já existe (ex: slug duplicado)                           |
| 429         | `RATE_LIMITED`     | Muitas requisições — reduza a velocidade                         |
| 500         | `INTERNAL_ERROR`   | Erro do servidor — entre em contato com o suporte                |

## Paginação

Endpoints de listagem retornam uma resposta paginada:

```json
{
  "data": [ ... ],
  "pagination": {
    "total": 42,
    "limit": 20,
    "offset": 0
  }
}
```

**Parâmetros de query:**

| Parâmetro | Padrão | Máximo | Descrição                  |
| --------- | ------ | ------ | -------------------------- |
| `limit`   | 20     | 100    | Número de itens por página |
| `offset`  | 0      | —      | Número de itens a pular    |

## Limites de taxa

| Plano   | Requisições por minuto |
| ------- | ---------------------- |
| Starter | 100                    |
| Pro     | 500                    |

Headers de limite de taxa são incluídos em todas as respostas:

```http
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1720000060
```

Quando excedido: `429 Too Many Requests` com um header `Retry-After`.

## Idempotência

O endpoint `POST /api/messages/send` aceita um header `Idempotency-Key`:

```http
Idempotency-Key: <string-única>
```

Requisições repetidas com a mesma chave dentro de 24 horas retornam a resposta original sem reprocessar.

## Todos os endpoints

| Método | Caminho                         | Auth               | Descrição                                              |
| ------ | ------------------------------- | ------------------ | ------------------------------------------------------ |
| GET    | /api/numbers                    | Chave de API/Clerk | Listar números conectados                              |
| GET    | /api/numbers/:id                | Chave de API/Clerk | Obter um número                                        |
| DELETE | /api/numbers/:id                | Chave de API/Clerk | Desconectar um número                                  |
| POST   | /api/messages/send              | Chave de API/Clerk | Enviar uma mensagem                                    |
| GET    | /api/messages                   | Chave de API/Clerk | Listar mensagens                                       |
| GET    | /api/messages/:id               | Chave de API/Clerk | Obter uma mensagem                                     |
| GET    | /api/webhooks                   | Chave de API/Clerk | Listar webhooks                                        |
| POST   | /api/webhooks                   | Chave de API/Clerk | Criar um webhook                                       |
| GET    | /api/webhooks/:id               | Chave de API/Clerk | Obter um webhook                                       |
| PUT    | /api/webhooks/:id               | Chave de API/Clerk | Atualizar um webhook                                   |
| DELETE | /api/webhooks/:id               | Chave de API/Clerk | Excluir um webhook                                     |
| POST   | /api/webhooks/:id/test          | Chave de API/Clerk | Testar um webhook                                      |
| POST   | /api/webhooks/:id/rotate-secret | Chave de API/Clerk | Rotacionar secret do webhook                           |
| GET    | /api/signup-links               | Chave de API/Clerk | Listar links de cadastro                               |
| POST   | /api/signup-links               | Chave de API/Clerk | Criar um link de cadastro                              |
| GET    | /api/signup-links/:id           | Chave de API/Clerk | Obter um link de cadastro                              |
| PUT    | /api/signup-links/:id           | Chave de API/Clerk | Atualizar um link de cadastro                          |
| DELETE | /api/signup-links/:id           | Chave de API/Clerk | Excluir um link de cadastro                            |
| GET    | /api/templates                  | Chave de API/Clerk | Listar templates                                       |
| POST   | /api/templates                  | Chave de API/Clerk | Criar um template                                      |
| POST   | /api/templates/sync             | Chave de API/Clerk | Sincronizar templates da Meta                          |
| GET    | /api/templates/:id              | Chave de API/Clerk | Obter um template                                      |
| PUT    | /api/templates/:id              | Chave de API/Clerk | Atualizar um template                                  |
| DELETE | /api/templates/:id              | Chave de API/Clerk | Excluir um template                                    |
| GET    | /api/flows                      | Chave de API/Clerk | Listar flows                                           |
| POST   | /api/flows                      | Chave de API/Clerk | Criar um flow                                          |
| POST   | /api/flows/sync                 | Chave de API/Clerk | Sincronizar flows da Meta                              |
| GET    | /api/flows/:id                  | Chave de API/Clerk | Obter um flow                                          |
| PATCH  | /api/flows/:id                  | Chave de API/Clerk | Atualizar metadados do flow                            |
| DELETE | /api/flows/:id                  | Chave de API/Clerk | Excluir um flow                                        |
| GET    | /api/flows/:id/json             | Chave de API/Clerk | Obter JSON do flow                                     |
| PUT    | /api/flows/:id/json             | Chave de API/Clerk | Atualizar JSON do flow                                 |
| POST   | /api/flows/:id/publish          | Chave de API/Clerk | Publicar um flow                                       |
| POST   | /api/flows/:id/deprecate        | Chave de API/Clerk | Deprecar um flow                                       |
| POST   | /api/flows/:id/clone            | Chave de API/Clerk | Clonar um flow                                         |
| GET    | /api/error-shield/catalog       | Chave de API/Clerk | Listar entradas do catálogo Error Shield               |
| GET    | /api/error-shield/catalog/:id   | Chave de API/Clerk | Obter uma entrada do catálogo Error Shield             |
| GET    | /api/error-shield/meta/:code    | Chave de API/Clerk | Buscar entradas ativas do Error Shield por código Meta |
| GET    | /api/health                     | Nenhuma            | Health check                                           |