> 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.

# Links de Cadastro

> Crie links compartilháveis que permitem que usuários conectem seus números de WhatsApp.

## O que são Links de Cadastro?

Links de Cadastro são URLs compartilháveis que acionam o fluxo de Embedded Signup do WhatsApp quando acessadas. Você cria um link no Dashboard ou via API, compartilha com seus usuários finais (por exemplo, via e-mail, SMS ou seu fluxo de onboarding), e quando eles clicam e completam o fluxo, o número de WhatsApp deles é automaticamente conectado à sua conta.

O link redireciona para uma página pública hospedada pelo Muchaw DEV que gerencia o fluxo completo — nenhum código frontend adicional é necessário.

## Criando um Link de Cadastro

```bash
curl -X POST https://dev.muchau.com.br/api/signup-links \
  -H "Authorization: Bearer $MUCHAW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Fluxo de Onboarding",
    "customMessage": "Conecte seu WhatsApp para começar a receber notificações.",
    "redirectUrl": "https://seu-app.com/onboarding/sucesso",
    "maxUsages": 1,
    "expiresAt": "2024-12-31T23:59:59Z"
  }'
```

**Resposta:**

```json
{
  "id": "sl_01j...",
  "slug": "abc123",
  "name": "Fluxo de Onboarding",
  "url": "https://connect.muchaw.dev/abc123",
  "active": true,
  "usageCount": 0,
  "maxUsages": 1,
  "expiresAt": "2024-12-31T23:59:59.000Z",
  "customMessage": "Conecte seu WhatsApp para começar a receber notificações.",
  "redirectUrl": "https://seu-app.com/onboarding/sucesso",
  "createdAt": "2024-01-15T10:00:00.000Z",
  "updatedAt": "2024-01-15T10:00:00.000Z"
}
```

Compartilhe o campo `url` com seus usuários finais.

## Opções de configuração

| Campo           | Descrição                                                                                                      |
| --------------- | -------------------------------------------------------------------------------------------------------------- |
| `name`          | Rótulo interno para o link (não exibido aos usuários finais)                                                   |
| `slug`          | Slug personalizado da URL (gerado automaticamente se não fornecido). Deve ser alfanumérico minúsculo + hífens. |
| `maxUsages`     | Número máximo de vezes que o link pode ser usado. `null` = ilimitado.                                          |
| `expiresAt`     | Data/hora ISO 8601 após a qual o link fica inativo. `null` = nunca expira.                                     |
| `customMessage` | Mensagem exibida na página de cadastro acima do botão de conexão.                                              |
| `redirectUrl`   | URL para redirecionar os usuários após o cadastro bem-sucedido.                                                |

## Gerenciando links

```bash
# Listar todos os links
curl "https://dev.muchau.com.br/api/signup-links" \
  -H "Authorization: Bearer $MUCHAW_API_KEY"

# Atualizar um link
curl -X PUT "https://dev.muchau.com.br/api/signup-links/<id>" \
  -H "Authorization: Bearer $MUCHAW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "active": false }'

# Excluir um link
curl -X DELETE "https://dev.muchau.com.br/api/signup-links/<id>" \
  -H "Authorization: Bearer $MUCHAW_API_KEY"
```

## Como funciona o fluxo público

Quando um usuário final acessa `https://connect.muchaw.dev/<slug>`:

1. A página busca a configuração do link via `GET /api/signup-links/by-slug/<slug>` (público, sem autenticação)
2. O popup de Embedded Signup do Facebook é aberto
3. O usuário completa o fluxo e a página chama `POST /api/signup-links/by-slug/<slug>/complete` com o código de autorização
4. O Muchaw DEV provisiona o número automaticamente
5. O usuário é redirecionado para `redirectUrl` (se configurado)

## Endpoints públicos (sem autenticação)

| Método | Endpoint                                   | Descrição                                                |
| ------ | ------------------------------------------ | -------------------------------------------------------- |
| `GET`  | `/api/signup-links/by-slug/:slug`          | Resolver configuração do link público                    |
| `POST` | `/api/signup-links/by-slug/:slug/complete` | Completar cadastro com código de autorização do Facebook |

Endpoints públicos têm limite de taxa de **10 requisições/minuto** por IP.

## Schema completo de SignupLink

```typescript
type SignupLink = {
  id: string;
  slug: string;
  name: string;
  url: string;              // URL pública completa (ex: "https://connect.muchaw.dev/<slug>")
  active: boolean;
  usageCount: number;
  maxUsages: number | null;
  expiresAt: string | null;
  customMessage: string | null;
  redirectUrl: string | null;
  createdAt: string;
  updatedAt: string;
};
```

## Condições de desativação do link

Um link fica inativo (e retorna 404 na página pública) quando:

* `active` é definido como `false` manualmente
* `maxUsages` é atingido (`usageCount >= maxUsages`)
* `expiresAt` está no passado