> For the complete documentation index, see [llms.txt](https://docs-firehose.blip.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs-firehose.blip.ai/configuracoes/configuracao-de-saida/http.md).

# HTTP

Permite a configuração de um endpoint que receberá uma requisição com as mensagens trafegadas.

## Parâmetros

Parâmetros aceitos para esse tipo de sindicância de destino:

| Campo                                                       | Descrição                                                                      | Valor                                                               |
| ----------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------- |
| http.verify\_token                                          | Token de verificação enviado no header de cada mensagem entregue pelo Firehose | <p><strong>DEPRECATED</strong><br>Tipo: string<br>Obrigatório</p>   |
| [http.verify\_token\_private\_key](#assinatura-de-conteudo) | Chave de assinatura de conteúdo (HMAC-SHA256)                                  | <p>Tipo: string<br>Obrigatório</p>                                  |
| http.verb                                                   | Tipo da requisição                                                             | <p>Tipo: enum\[POST PUT PATCH]<br>Obrigatório</p>                   |
| http.headers                                                | Cabeçalhos da requisição                                                       | <p>Tipo: object<br>Valor padrão: <code>{}</code></p>                |
| http.timeout\_seconds                                       | Tempo de espera pela resposta da requisição                                    | <p>Tipo: int \[1-300]<br>Valor padrão: <code>1</code></p>           |
| http.basic\_auth                                            | Autenticação básica da requisição                                              | <p>Tipo: object<br>Valor padrão: <code>{}</code></p>                |
| http.basic\_auth.user\_id                                   | Identificador de acesso                                                        | <p>Tipo: string<br>Valor padrão: <code>-</code></p>                 |
| http.basic\_auth.password                                   | Senha de acesso                                                                | <p>Tipo: string<br>Valor padrão: <code>-</code></p>                 |
| http.oauth2                                                 | Autenticação oauth 2 da requisição                                             | <p>Tipo: object<br>Valor padrão: <code>{}</code></p>                |
| http.oauth2.client\_key                                     | Chave do cliente da API                                                        | <p>Tipo: string<br>Obrigatório</p>                                  |
| http.oauth2.client\_secret                                  | Segredo do cliente da API                                                      | <p>Tipo: string<br>Obrigatório</p>                                  |
| http.oauth2.token\_url                                      | Url do serviço de autenticação                                                 | <p>Tipo: string<br>Obrigatório</p>                                  |
| http.oauth2.scopes                                          | Escopos de autenticação                                                        | <p>Tipo: \[]string<br>Valor padrão: <code>\[]</code></p>            |
| http.oauth2.endpoint\_params                                | Parâmetros adicionais do serviço de autenticação                               | <p>Tipo: map\[string]\[]string<br>Valor padrão: <code>{}</code></p> |
| http.tls                                                    | Configuração de TLS                                                            | <p>Tipo: object<br>Valor padrão: <code>{}</code></p>                |
| http.tls.enabled                                            | Habilitar TLS                                                                  | <p>Tipo: boolean<br>Obrigatório</p>                                 |
| http.tls.skip\_cert\_verify                                 | Ignorar verificação de certificado                                             | <p>Tipo: boolean<br>Obrigatório</p>                                 |
| http.tls.root\_cas                                          | Certificado principal                                                          | <p>Tipo: boolean<br>Valor padrão: <code>""</code></p>               |
| http.tls.enable\_renegotiation                              | Se o servidor remoto deve solicitar renegociação                               | <p>Tipo: boolean<br>Valor padrão: <code>false</code></p>            |
| http.tls.client\_certs                                      | Lista de certificados do cliente                                               | <p>Tipo: list<br>Valor padrão: <code>\[]</code></p>                 |
| http.tls.client\_certs.cert                                 | Certificado                                                                    | <p>Tipo: string<br>Obrigatório</p>                                  |
| http.tls.client\_certs.key                                  | Chave do certificado                                                           | <p>Tipo: string<br>Obrigatório</p>                                  |
| http.tls.client\_certs.password                             | Senha do certificado                                                           | Tipo: string                                                        |

{% hint style="danger" %}
O uso do parâmetro `verify_token` está obsoleto e não é recomendado. Sugerimos utilizar o parâmetro `verify_token_private_key`.
{% endhint %}

## Requisição

```bash
curl --location '<HOST>/v1/configs' \
--header 'Content-Type: application/json' \
--header 'Authorization: <ACCESS-TOKEN>' \
--data '{
  "output": {
    "target": "http://localhost:4195",
    "type": "HTTP",
    "http": {
      "verify_token": "VERIFY-TOKEN",
      "verify_token_private_key": "my-key",
      "verb": "POST",
      "headers": {
        "Authorization": "TOKEN"
      },
      "timeout_seconds": 1,
      "basic_auth": {
        "user_id": "USER",
        "password": "PASSWORD"
      },
      "oauth2": {
        "client_key": "CLIENT-KEY",
        "client_secret": "CLIENT-SECRET",
        "token_url": "TOKEN-URL",
        "scopes": [
          "SCOPE"
        ],
        "endpoint_params": {
          "param1": [
            "VALUE1"
          ],
          "param2": [
            "VALUE2"
          ]
        }
      },
      "tls": {
        "enabled": true,
        "skip_cert_verify": true,
        "root_cas": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
        "enable_renegotiation": false,
        "client_certs": [
          {
            "cert": "CERT",
            "key": "KEY",
            "password": "PASSWORD"
          }
        ]
      }
    }
  }
}'
```

## Resposta

A resposta desse endpoint será no seguinte formato:

```json
{
  "id": "FIREHOSE-ID",
  "output": {
    "target": "http://localhost:4195",
    "type": "HTTP",
    "http": {
      "verify_token": "VERIFY-TOKEN",
      "verb": "POST",
      "headers": {
        "Authorization": "TOKEN"
      },
      "timeout_seconds": 1,
      "basic_auth": {
        "user_id": "USER",
        "password": "PASSWORD"
      },
      "oauth2": {
        "client_key": "CLIENT-KEY",
        "client_secret": "CLIENT-SECRET",
        "token_url": "TOKEN-URL",
        "scopes": [
          "SCOPE"
        ],
        "endpoint_params": {
          "param1": [
            "VALUE1"
          ],
          "param2": [
            "VALUE2"
          ]
        }
      },
      "tls": {
        "enabled": true,
        "skip_cert_verify": true,
        "root_cas": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
        "enable_renegotiation": false,
        "client_certs": [
          {
            "cert": "CERT",
            "key": "KEY",
            "password": "PASSWORD"
          }
        ]
      }
    }
  }
}
```

O campo `verify_token` enviado dentro do objeto `http` no payload da requisição pode ser utilizado para validar as mensagens recebidas pelo endpoint HTTP garantindo que as mesmas foram entregues pelo Firehose. Ele é um campo **obrigatório**.

Um token de verificação `Firehose-Verify-Token`, passado na configuração do Firehose, será adicionado no header da mensagem para a saída HTTP.

## Assinatura de conteúdo

Ao utilizar o parâmetro `verify_token_private_key`, o Firehose assinará o conteúdo da mensagem com o algoritmo `HMAC-SHA256` e adicionará dois headers na requisição: `Firehose-Verify-Signature-Algorithm` e `Firehose-Verify-Signature-HMAC-SHA256`. O último cabeçalho conterá a assinatura do conteúdo.

{% hint style="info" %}
Caso não saiba como realizar a validação da assinatura, um exemplo pode ser encontrado [nessa documentação](https://developers.facebook.com/docs/messenger-platform/webhooks#validar-cargas).
{% endhint %}
