# 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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-firehose.blip.ai/configuracoes/configuracao-de-saida/http.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
