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

# API

> Conecte seu fluxo com serviços externos via chamadas HTTP

O nó **API** permite que você se comunique com serviços externos a partir do seu fluxo de conversa. Você pode consultar dados, enviar informações, autenticar contra APIs e processar respostas — tudo sem escrever código.

Pense neste nó como um mensageiro: você diz a ele para onde ir (URL), o que carregar (body) e o que trazer de volta (resposta).

***

## URL e método HTTP

Na parte superior do painel você configura os dois campos essenciais:

**Método HTTP** — define que tipo de operação você vai realizar:

| Método     | Finalidade                     | Exemplo                               |
| :--------- | :----------------------------- | :------------------------------------ |
| **GET**    | Recuperar dados                | Consultar o saldo de um cliente       |
| **POST**   | Criar um recurso               | Registrar um novo pedido              |
| **PUT**    | Substituir um recurso completo | Atualizar todos os dados de um perfil |
| **PATCH**  | Atualização parcial            | Alterar apenas o e-mail de um usuário |
| **DELETE** | Excluir um recurso             | Cancelar uma assinatura               |

**URL** — o endereço do serviço. Você pode injetar variáveis diretamente:

```
https://api.example.com/users/{{$user.id}}/orders/{{$memory.orderId}}
```

<Note>
  Se você colar uma URL que já contém parâmetros (como `?key=value`), o nó os extrai automaticamente e os move para a aba Parâmetros.
</Note>

### Importar a partir de cURL

Se você tiver um comando cURL pronto (por exemplo, da documentação de uma API), pode colá-lo diretamente no campo URL. O nó interpreta automaticamente o método, cabeçalhos, body e autenticação do comando.

***

## Abas de configuração

O painel tem **5 abas** para configurar todos os aspectos da requisição:

### Parâmetros

Adicione parâmetros de query string como pares chave-valor. Cada parâmetro tem uma caixa de seleção para ativar ou desativar sem excluí-lo.

```
user: {{$user.id}}
date: {{$context.date}}
```

Os parâmetros são automaticamente adicionados à URL no formato `?param1=value1&param2=value2`.

### Autenticação

Dois métodos de autenticação disponíveis:

| Método           | Configuração                                                         |
| :--------------- | :------------------------------------------------------------------- |
| **Basic Auth**   | Nome de usuário e senha. Codificados automaticamente em base64       |
| **Bearer Token** | Token de acesso enviado no cabeçalho `Authorization: Bearer <token>` |

Ambos os métodos suportam variáveis nos seus campos, permitindo o uso de credenciais armazenadas dinamicamente.

<Note>
  As credenciais são mantidas no contexto durante a execução do fluxo. Você pode editá-las a partir do modal de credenciais se já estiverem armazenadas.
</Note>

### Cabeçalhos

Adicione cabeçalhos HTTP personalizados como pares chave-valor. Cada cabeçalho tem uma caixa de seleção para ativar ou desativar.

```
Content-Type: application/json
X-API-Key: {{$memory.apiKey}}
```

<Note>
  O cabeçalho `Content-Type` é atualizado automaticamente quando você altera o tipo de body.
</Note>

### Body

Para métodos que enviam dados (POST, PUT, PATCH), configure o body da requisição em diferentes formatos:

| Formato              | Uso típico                                                      |
| :------------------- | :-------------------------------------------------------------- |
| **JSON**             | O mais comum para APIs REST. Editor com validação em tempo real |
| **XML**              | APIs SOAP ou serviços legados                                   |
| **Texto simples**    | Dados não estruturados                                          |
| **Multipart Form**   | Envio de arquivos junto com dados de texto                      |
| **Form URL Encoded** | Formulários web tradicionais                                    |

O editor JSON valida a estrutura em tempo real e suporta variáveis dentro do conteúdo:

```json theme={null}
{
  "user_id": "{{$user.id}}",
  "email": "{{$memory.email}}",
  "name": "{{$user.names}}"
}
```

### Configurações

Configurações avançadas para controlar o comportamento da requisição:

#### Certificado SSL

Ativa a verificação SSL/TLS para conexões seguras. Inclui um campo de **timeout** em milissegundos (padrão 3000ms).

#### Certificados mTLS

Autenticação TLS mútua com o servidor. Esta opção só aparece se a sua empresa tiver pelo menos um certificado configurado.

* Quando mTLS está ativado, o certificado SSL é automaticamente desativado (são mutuamente exclusivos)
* Se existir um certificado primário, ele é automaticamente selecionado
* Você pode escolher qualquer certificado da lista disponível
* Inclui um campo de **timeout** configurável entre **1000ms (1s)** e **120000ms (2min)** (padrão 30000ms)

[Ver gerenciamento de certificados mTLS](/pt/guias/configuracao/empresa/certificados-mtls)

#### Tentativas

Configure tentativas automáticas quando uma requisição falhar:

| Opção                     | Descrição                                                   |
| :------------------------ | :---------------------------------------------------------- |
| **Condição de tentativa** | Apenas erros de rede (padrão) ou sempre tentar novamente    |
| **Número de tentativas**  | Número de tentativas adicionais                             |
| **Tipo de espera**        | Sem espera, exponencial ou personalizado (em milissegundos) |
| **Redefinir timeout**     | Redefine o tempo de espera em cada tentativa                |

***

## Salvando a resposta

Ative o toggle **"Salvar resposta"** na parte superior e defina um nome de variável. A resposta completa da API será armazenada nessa variável.

### Acessando a resposta sem manipulação

Use a variável diretamente em outros nós:

```
{{$context.apiResponse}}
```

### Manipulando a resposta em um nó de Código

Se você precisar extrair dados específicos do JSON:

```javascript theme={null}
let apiResponse = $context.getHttpResponse('apiResponse')
apiResponse = apiResponse.json()

let name = apiResponse.data.user.name
$memory.set('name', name)
```

<Warning>
  A chave que você usa em `$context.getHttpResponse('apiResponse')` deve corresponder exatamente à que você especificou no campo "Salvar resposta".
</Warning>

***

## Resposta de teste

Após executar um teste a partir do painel, a resposta é exibida em uma seção expansível com:

* **Código de status** (por exemplo, `200 OK`)
* **Aba Body** — Resposta formatada como JSON com botão de cópia
* **Aba Headers** — Cabeçalhos de resposta do servidor
