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

> ## Agent Instructions
> Wabox é uma API não-oficial de WhatsApp (aparelho vinculado). Tudo é snake_case; a base é https://api.wabox.me/instances/{instance_id}/token/{token}.
> Envios respondem { id, message_id, wabox_id, status: "queued" } na hora; o resultado real chega no webhook delivery. Envios não são idempotentes: confira GET /queue antes de repetir.
> Sempre verifique X-Wabox-Signature (HMAC-SHA256 de "<t>.<corpo cru>") nos webhooks e deduplique por event_id.
> Botões, listas, carrossel e catálogo são best effort e não renderizam no WhatsApp Web/Desktop. Não existem: chamadas, listas de transmissão, histórico de mensagens, instância mobile.
> Não invente endpoints ou campos: use o OpenAPI em https://api.wabox.me/openapi.json.

# Primeiros passos

> Crie a conta, conecte um número e envie a primeira mensagem em cinco minutos.

<Steps>
  <Step title="Crie a conta e uma instância">
    Cadastre-se em [app.wabox.me/signup](https://app.wabox.me/signup). Cada instância representa **um número de WhatsApp**. Clique em **Nova instância**, dê um nome e abra a instância criada.

    Na aba **Dados da instância**, em **Credenciais**, você encontra o **ID da instância** e o **Token da instância**. Eles formam a base de todas as chamadas:

    ```text theme={"system"}
    https://api.wabox.me/instances/{instance_id}/token/{token}
    ```

    <Note>Toda instância nasce com um período de teste. Quando ele termina, os endpoints de envio respondem `402 subscription_required` até você assinar; leitura, status e webhooks continuam funcionando.</Note>
  </Step>

  <Step title="Conecte o número">
    No celular que vai ser conectado, abra o WhatsApp em **Configurações › Aparelhos conectados › Conectar aparelho** e leia o QR code mostrado no painel.

    Prefere fazer isso pela API? O QR muda a cada \~20 segundos; consulte-o em loop enquanto o status for `qr`:

    <CodeGroup>
      ```bash cURL theme={"system"}
      curl https://api.wabox.me/instances/{instance_id}/token/{token}/qr-code
      # { "value": "data:image/png;base64,...", "expires_at": "...", "connected": false }
      ```

      ```bash Imagem PNG theme={"system"}
      curl -o qr.png https://api.wabox.me/instances/{instance_id}/token/{token}/qr-code/image
      ```

      ```bash Código de pareamento (sem câmera) theme={"system"}
      curl https://api.wabox.me/instances/{instance_id}/token/{token}/phone-code/5511999998888
      # { "value": "ABCD-EFGH" } → digite em "Conectar com número de telefone"
      ```
    </CodeGroup>

    Confirme com `GET /status`:

    ```json theme={"system"}
    { "connected": true, "smartphone_connected": true, "status": "connected", "phone": "5511999998888", "error": null }
    ```
  </Step>

  <Step title="Envie a primeira mensagem">
    Use um número seu para testar. `phone` é só dígitos, com DDI e DDD.

    <CodeGroup>
      ```bash cURL theme={"system"}
      curl -X POST https://api.wabox.me/instances/{instance_id}/token/{token}/send-text \
        -H "Content-Type: application/json" \
        -d '{ "phone": "5511988887777", "message": "Olá! Mensagem enviada pelo Wabox." }'
      ```

      ```javascript Node.js theme={"system"}
      const res = await fetch(`https://api.wabox.me/instances/${instanceId}/token/${token}/send-text`, {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ phone: "5511988887777", message: "Olá! Mensagem enviada pelo Wabox." }),
      });
      console.log(await res.json());
      ```

      ```python Python theme={"system"}
      import requests

      r = requests.post(
          f"https://api.wabox.me/instances/{instance_id}/token/{token}/send-text",
          json={"phone": "5511988887777", "message": "Olá! Mensagem enviada pelo Wabox."},
      )
      print(r.json())
      ```

      ```php PHP theme={"system"}
      $ch = curl_init("https://api.wabox.me/instances/$instanceId/token/$token/send-text");
      curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
        CURLOPT_POSTFIELDS => json_encode(["phone" => "5511988887777", "message" => "Olá! Mensagem enviada pelo Wabox."]),
      ]);
      echo curl_exec($ch);
      ```
    </CodeGroup>

    A resposta chega na hora, antes de a mensagem sair do aparelho:

    ```json theme={"system"}
    { "id": "3EB0A9C6D2F1E4B5A7C8", "message_id": "3EB0A9C6D2F1E4B5A7C8", "wabox_id": "wbx_01J5Q8ZK3M4N5P6Q7R8S9T0M01", "status": "queued" }
    ```

    `message_id` já é o id definitivo da mensagem no WhatsApp — o mesmo que vai aparecer nos webhooks. O envio em si é assíncrono: passa pela [fila](/guides/queue-and-retries) com um pequeno intervalo aleatório (anti-ban) e o resultado chega no webhook `delivery`.
  </Step>

  <Step title="Receba mensagens por webhook">
    No painel, em **Webhooks e configurações gerais**, informe a URL que vai receber cada tipo de evento — ou faça pela API:

    ```bash theme={"system"}
    curl -X PUT https://api.wabox.me/instances/{instance_id}/token/{token}/webhooks \
      -H "Content-Type: application/json" \
      -d '{
        "received_url": "https://seu-servidor.com/wabox/received",
        "delivery_url": "https://seu-servidor.com/wabox/delivery",
        "message_status_url": "https://seu-servidor.com/wabox/status"
      }'
    ```

    Responda qualquer mensagem para o número conectado e o seu endpoint recebe um `POST` como este:

    ```json theme={"system"}
    {
      "type": "received",
      "event_id": "01J5Q8ZK3M4N5P6Q7R8S9T0V1X",
      "instance_id": "8f2a3c1e-6b7d-4e5f-9a0b-1c2d3e4f5a6b",
      "momment": 1786968300000,
      "message_id": "3EB0A9C6D2F1E4B5A7C8",
      "phone": "5511988887777",
      "from_me": false,
      "is_group": false,
      "chat_name": "Maria",
      "sender_name": "Maria",
      "status": "RECEIVED",
      "text": { "message": "Olá! Tudo bem?" }
    }
    ```

    Responda `200` rápido e processe depois. Para testar sem servidor público, use um túnel (ngrok, Cloudflare Tunnel) ou um serviço de "request bin".
  </Step>
</Steps>

## Próximos passos

<CardGroup cols={2}>
  <Card title="Conceitos" icon="lightbulb" href="/concepts">
    Instância, fila, webhooks e os identificadores que aparecem em tudo.
  </Card>

  <Card title="Assinatura dos webhooks" icon="shield-check" href="/security/webhook-signature">
    Verifique que cada entrega veio do Wabox.
  </Card>

  <Card title="Tipos de mensagem" icon="message-square" href="/guides/message-types">
    Mídia, localização, contatos, enquetes, reações e edição.
  </Card>

  <Card title="Aba Testes" icon="flask-conical" href="/guides/diagnostics">
    Rode o checklist automático da sua instância pelo painel.
  </Card>
</CardGroup>
