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

# Conectar Instância

> Inicia a conexão com o WhatsApp e retorna QR code ou pairing code

**Auth:** `TokenAccount` ou `TokenInstance` • **Rate-limit:** `Global` (100/min) • **Idempotente:** parcial

## Descrição

Inicia a conexão via whatsmeow. Sem parâmetros, gera **QR code**. Com `?number=...`, gera **pairing code** (8 caracteres). Bloqueia até obter código ou erro (timeout interno \~60s).

## Exemplos

### QR code (uso padrão)

Sem nenhum query param, o servidor gera o QR code para escanear no celular. Retorna a string ASCII e o PNG em base64 prontos para renderizar.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://ryzeapi.cloud/api/instance/connect/minha-instancia" \
    -H "token: $Token_Instance"
  ```

  ```javascript JavaScript theme={null}
  await fetch("https://ryzeapi.cloud/api/instance/connect/minha-instancia", {
    method: "GET",
    headers: {
      "token": process.env.Token_Instance
    }
  });
  ```

  ```python Python theme={null}
  import os, requests

  requests.get(
      "https://ryzeapi.cloud/api/instance/connect/minha-instancia",
      headers={
          "token": os.environ["Token_Instance"]
      }
  )
  ```

  ```go Go theme={null}
  package main

  import (
      "net/http"
      "os"
  )

  func main() {
      req, _ := http.NewRequest("GET", "https://ryzeapi.cloud/api/instance/connect/minha-instancia", nil)
      req.Header.Set("token", os.Getenv("Token_Instance"))
      http.DefaultClient.Do(req)
  }
  ```
</CodeGroup>

### Pairing code

Passando `?number=5511999999999`, o servidor força login via pairing code de 8 caracteres em vez de QR, útil quando o usuário não tem acesso à câmera para escanear.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://ryzeapi.cloud/api/instance/connect/minha-instancia?number=5511999999999" \
    -H "token: $Token_Instance"
  ```

  ```javascript JavaScript theme={null}
  await fetch("https://ryzeapi.cloud/api/instance/connect/minha-instancia?number=5511999999999", {
    method: "GET",
    headers: {
      "token": process.env.Token_Instance
    }
  });
  ```

  ```python Python theme={null}
  import os, requests

  requests.get(
      "https://ryzeapi.cloud/api/instance/connect/minha-instancia?number=5511999999999",
      headers={
          "token": os.environ["Token_Instance"]
      }
  )
  ```

  ```go Go theme={null}
  package main

  import (
      "net/http"
      "os"
  )

  func main() {
      req, _ := http.NewRequest("GET", "https://ryzeapi.cloud/api/instance/connect/minha-instancia?number=5511999999999", nil)
      req.Header.Set("token", os.Getenv("Token_Instance"))
      http.DefaultClient.Do(req)
  }
  ```
</CodeGroup>

### Com 7 dias de histórico

Solicita os últimos 7 dias de mensagens no primeiro pareamento via `?history=7`. A presença do parâmetro força a sincronização mesmo se `disableHistorySync=true` estiver nos settings da instância.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://ryzeapi.cloud/api/instance/connect/minha-instancia?history=7" \
    -H "token: $Token_Instance"
  ```

  ```javascript JavaScript theme={null}
  await fetch("https://ryzeapi.cloud/api/instance/connect/minha-instancia?history=7", {
    method: "GET",
    headers: {
      "token": process.env.Token_Instance
    }
  });
  ```

  ```python Python theme={null}
  import os, requests

  requests.get(
      "https://ryzeapi.cloud/api/instance/connect/minha-instancia?history=7",
      headers={
          "token": os.environ["Token_Instance"]
      }
  )
  ```

  ```go Go theme={null}
  package main

  import (
      "net/http"
      "os"
  )

  func main() {
      req, _ := http.NewRequest("GET", "https://ryzeapi.cloud/api/instance/connect/minha-instancia?history=7", nil)
      req.Header.Set("token", os.Getenv("Token_Instance"))
      http.DefaultClient.Do(req)
  }
  ```
</CodeGroup>

<Tip>
  **Pairing code**: sem câmera. O usuário digita os 8 caracteres no WhatsApp em **Dispositivos Vinculados > Vincular Outro Dispositivo > Vincular com número**.
</Tip>

## Resposta de sucesso

<Tabs>
  <Tab title="QR code gerado">
    ```json 200 OK theme={null}
    {
      "success": true,
      "message": "QR code generated",
      "qrCode": "1@abc...,xyz==,base64string",
      "qrCodeBase64": "data:image/png;base64,iVBORw0K...",
      "status": "qr"
    }
    ```

    * `qrCode`, string ASCII do QR (o que o WhatsApp espera). Pode ser renderizado em qualquer biblioteca de QR.
    * `qrCodeBase64`, PNG renderizado pelo servidor (base64). Pronto para usar como `<img src="data:image/png;base64,...">`.
  </Tab>

  <Tab title="Pairing code gerado">
    ```json 200 OK theme={null}
    {
      "success": true,
      "message": "Pairing code generated",
      "pairingCode": "ABCD-EFGH",
      "status": "qr"
    }
    ```

    `pairingCode` é o que o usuário digita no celular.
  </Tab>
</Tabs>

## Path parameters

<ParamField path="instance" type="string" required>
  Nome da instância a conectar.
</ParamField>

## Headers

<ParamField header="token" type="string" required>
  TokenAccount ou TokenInstance da instância do path.
</ParamField>

## Query parameters

<ParamField query="number" type="string">
  Telefone em formato internacional (ex.: `5511999999999`). Se preenchido, força login via **pairing code** em vez de QR.
</ParamField>

<ParamField query="history" type="integer">
  Solicita os últimos **N dias** de histórico no primeiro pareamento (ex.: `?history=5`). Requer suporte do servidor WhatsApp, não é garantido. A presença do parâmetro força a sincronização mesmo se `disableHistorySync=true` nos settings.
</ParamField>

## Notas

<Note>
  **O QR expira**, o WhatsApp emite um novo QR após \~20s. Se o usuário demorar e você precisar de uma nova tentativa, refaça a chamada.
</Note>

<Warning>
  **Pairing code** não é reutilizável. Se o usuário errar, refaça o request para gerar um novo.
</Warning>

<Tip>
  Após chamar `connect`, faça poll de [`GET /api/instance/list?instanceName=<nome>`](/pt/api/instance/list) para detectar quando o estado virar `connected`. Webhook/WebSocket avisam em tempo real via evento `instance.state`.
</Tip>

## Erros

| HTTP | `error.message`                         | Quando                                                     |
| :--: | --------------------------------------- | ---------------------------------------------------------- |
|  400 | `Instance name is required`             | Path vazio.                                                |
|  401 | `Invalid token`                         | Token ausente ou inválido.                                 |
|  404 | `Instance not found`                    | Nome não existe.                                           |
|  429 | `Rate limit exceeded. Try again later.` | Mais de 100 req/min.                                       |
|  500 | `Failed to generate QR code`            | Falha ao gerar QR/pairing (rede, proxy, store corrompido). |

```json theme={null}
{
  "success": false,
  "error": {
    "message": "Instance not found"
  }
}
```

## Próximo

<CardGroup cols={2}>
  <Card title="Reconectar sem QR" icon="rotate" href="/pt/api/instance/reconnect">
    `POST /api/instance/reconnect/:instance`, reaproveita a sessão salva.
  </Card>

  <Card title="Verificar estado" icon="list-check" href="/pt/api/instance/list">
    `GET /api/instance/list?instanceName=<nome>` mostra o estado atual.
  </Card>
</CardGroup>
