---
name: azion-personalize-o-payload-do-http-post
description: >-
  Defina o formato, o separador de linhas de log, o tamanho máximo e os headers do payload de um endpoint HTTP POST, no Azion Console ou com a Azion API.
---

# Personalize o payload do HTTP POST

Você pode personalizar o payload que um endpoint Standard HTTP/HTTPS POST recebe de um stream, no Azion Console ou com a Azion API. Para criar um stream que envia para um endpoint HTTP, com a fonte de dados e o template, consulte [Envie logs para um endpoint HTTP](/pt-br/documentacao/guias/plataforma/observabilidade/conector-standard-https-post/).

O payload é o corpo de cada requisição `POST` que o [Data Stream](/pt-br/documentacao/plataforma/data-stream/) envia. Quatro campos do endpoint definem esse corpo: **Payload Format**, **Payload Log Line Separator**, **Payload Max Size** e **Custom Headers**. Nenhum outro tipo de endpoint tem esses campos. No formulário do stream, o endpoint é definido no campo **Connector**. O template decide quais variáveis cada linha de log carrega. Para todos os campos do payload e os limites de cada um, consulte [Templates e payload](/pt-br/documentacao/plataforma/data-stream/templates-e-payload/#payload).

---

Selecione a interface uma vez. Os pré-requisitos e todas as tarefas abaixo mostram só esse caminho.

## Pré-requisitos

- Uma conta Azion com a permissão **Edit Data Stream**. Para as permissões, consulte [Configurações do stream](/pt-br/documentacao/plataforma/data-stream/configuracoes-do-stream/#permissoes).
- Um [workload](/pt-br/documentacao/plataforma/workloads/) na conta que recebe requisições.
- Uma URL HTTP ou HTTPS que aceita requisições `POST`, e os headers que ela exige, como um token de autenticação.

**Console**

- Acesso ao Azion Console. Para entrar, consulte [Acessar Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/).
- Uma conta com menos de 3.000 workloads. A partir de 3.000 workloads, o Console bloqueia os formulários de stream, e você gerencia os streams só pela API.

**API**

- Um personal token. Para criar um, consulte [Criar um personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/).
- O ID do workload.
- `curl`.

---

## Defina os campos do payload

Os campos ficam na seção **Output** do formulário do stream, em um stream que você cria ou em um que você edita. Com os valores padrão, o endpoint recebe NDJSON: uma linha de log por linha, sem colchetes e sem vírgula entre as linhas.

**Console**

Para definir os campos do payload no Azion Console:

1. **Abra o Data Stream**

   Acesse [Azion Console](https://console.azion.com/) > **Data Stream**.

2. **Abra o formulário do stream**

   Selecione **+ Stream** para criar um stream, ou selecione a linha de um stream existente para editá-lo.

3. **Selecione o endpoint**

   Na seção **Output**, defina **Connector** como *Standard HTTP/HTTPS POST*. Em **URL**, informe o endereço do seu endpoint, como `https://logs.example.com/ingest`.

4. **Defina o formato do payload**

   Em **Payload Format**, mantenha `$dataset` ou informe até 250 caracteres em volta dele. O Data Stream substitui `$dataset` pelas linhas de log do lote, unidas pelo separador.

5. **Defina o separador de linhas de log**

   Em **Payload Log Line Separator**, mantenha `\n` para colocar cada linha de log em uma linha própria. Você pode informar até 100 caracteres no lugar dele.

6. **Defina o tamanho máximo**

   Em **Payload Max Size**, informe o tamanho máximo de um pacote de dados em bytes, de `1000000` a `2147483647`. O padrão é `1000000`.

7. **Adicione os headers**

   Em **Custom Headers**, informe um header em cada linha **Header**, como `header-name:value`. Para um token, informe `Authorization:Bearer <your-token>`.

   Para adicionar uma linha, selecione **Header**. O Console aceita até cinco headers e exige pelo menos um.

8. **Selecione Save**

9. **Confirme o aviso de sampling**

   Se o stream usar sampling, a caixa de diálogo **Attention** abre. Nesse caso, salvar desativa todos os outros streams da conta. Selecione **Confirm**.

O Console mostra `Your data stream has been created` para um stream que você cria, ou `Your data stream has been updated` para uma edição.

**API**

Para definir os campos do payload com a API, envie-os em `outputs[0].attributes` da requisição de criação. Este exemplo coleta as requisições de um workload com a fonte de dados *Applications* e o template `2`, *Applications Event Collector*. Substitua `<workload-id>` pelo ID do seu workload e `[TOKEN]` pelo token que o seu endpoint espera:

```bash
curl --request POST \
  --url https://api.azion.com/v4/workspace/stream/streams \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "requests-to-http",
  "active": true,
  "inputs": [
    { "type": "raw_logs", "attributes": { "data_source": "workloads" } }
  ],
  "transform": [
    { "type": "filter_workloads", "attributes": { "workloads": [<workload-id>] } },
    { "type": "render_template", "attributes": { "template": 2 } }
  ],
  "outputs": [
    {
      "type": "standard",
      "attributes": {
        "url": "https://logs.example.com/ingest",
        "headers": { "Authorization": "Bearer [TOKEN]" },
        "log_line_separator": "\\n",
        "payload_format": "$dataset",
        "max_size": 1000000
      }
    }
  ]
}'
```

Um `201` traz o stream, com os campos do payload como foram armazenados:

```json
{
  "state": "executed",
  "data": {
    "id": 12347,
    "name": "requests-to-http",
    "last_editor": "user@example.com",
    "created": "2026-01-01T12:10:22.000000Z",
    "last_modified": "2026-01-01T12:10:22.000000Z",
    "product_version": "1.0",
    …
    "outputs": [
      {
        "type": "standard",
        "attributes": {
          "url": "https://logs.example.com/ingest",
          "log_line_separator": "\\n",
          "payload_format": "$dataset",
          "max_size": 1000000,
          "headers": { "Authorization": "Bearer [TOKEN]" }
        }
      }
    ]
  }
}
```

O stream existe com o payload que você enviou. Como ele usa um filtro de workloads, e não sampling, criá-lo não desativa nenhum outro stream.

Em JSON, `"\\n"` é a sequência de escape `\n`, o separador que o Console mostra por padrão. O campo `headers` é obrigatório, e `{}` não envia nenhum header. Uma requisição que omite os outros campos armazena `$dataset`, `\n` e um `max_size` igual a `null`. Para alterar o payload de um stream existente, envie uma requisição `PATCH` para `/v4/workspace/stream/streams/<stream-id>` com o array `outputs` inteiro.

Uma alteração no payload de um stream existente leva alguns minutos para se propagar. Salvar verifica o formato dos campos, não o endpoint, então uma URL ou um header errado aparece depois como envios com falha.

---

## Envie as linhas de log como um único array JSON

Um receptor que lê cada corpo de requisição como um único documento JSON precisa das linhas de log em um array JSON, com colchetes em volta delas e uma vírgula entre elas. Dois campos mudam: **Payload Format** envolve `$dataset` em colchetes, e o separador passa a ser uma vírgula. Para ver os corpos NDJSON e array JSON lado a lado, consulte [Templates e payload](/pt-br/documentacao/plataforma/data-stream/templates-e-payload/#payload).

**Console**

Para enviar um array JSON no Azion Console:

1. **Abra o Data Stream**

   Acesse [Azion Console](https://console.azion.com/) > **Data Stream**.

2. **Abra o stream**

   Na lista, selecione a linha do stream que envia para o endpoint HTTP.

3. **Envolva as linhas de log em colchetes**

   Na seção **Output**, defina **Payload Format** como `[$dataset]`.

4. **Separe as linhas de log com uma vírgula**

   Defina **Payload Log Line Separator** como `,`.

5. **Selecione Save**

6. **Confirme o aviso de sampling**

   Se a caixa de diálogo **Attention** abrir, selecione **Confirm**.

O Console mostra `Your data stream has been updated`. A partir daí, cada corpo de requisição é um único array JSON de linhas de log.

**API**

Para enviar um array JSON com a API, defina `payload_format` como `[$dataset]` e `log_line_separator` como `,` no endpoint do stream. O item de `outputs` fica assim:

```json
{
  "type": "standard",
  "attributes": {
    "url": "https://logs.example.com/ingest",
    "headers": { "Authorization": "Bearer [TOKEN]" },
    "log_line_separator": ",",
    "payload_format": "[$dataset]",
    "max_size": 1000000
  }
}
```

Envie esse item no array `outputs` de uma requisição de criação, ou de uma requisição `PATCH` para `/v4/workspace/stream/streams/<stream-id>`. A partir daí, cada corpo de requisição é um único array JSON de linhas de log.

---

## Confirme a entrega

O [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/fontes-de-dados/#data-stream) registra cada envio de um stream, aceito ou não, com o status code que o seu endpoint retornou. Envie algumas requisições ao workload e aguarde cerca de um minuto. Um lote sai depois de 60 segundos, ou antes, ao chegar a 2.000 linhas de log ou ao **Payload Max Size**.

**Console**

Para encontrar os envios no Azion Console:

1. **Abra o Real-Time Events**

   Acesse [Azion Console](https://console.azion.com/) > **Real-Time Events**.

2. **Selecione a fonte de dados Data Stream**

3. **Leia os envios mais recentes**

   Cada linha é um envio. Encontre as linhas com `HTTP_POST` em **Endpoint Type** e leia o **Status Code** delas.

Um **Status Code** `200` significa que o seu endpoint aceitou o lote. **Streamed Lines** informa o número de linhas de log do lote.

**API**

Para ler os envios com a API, consulte o dataset `dataStreamedEvents` da GraphQL API do Real-Time Events. Substitua as datas por um intervalo que inclua o momento em que você salvou o stream:

```bash
curl -X POST 'https://api.azion.com/v4/events/graphql' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Token [TOKEN VALUE]' \
  -d '{"query":"query { dataStreamedEvents(limit: 20, filter: {tsRange: {begin: \"2026-01-01T11:40:00\", end: \"2026-01-01T12:00:00\"}}, orderBy: [ts_DESC]) { ts jobName endpointType statusCode streamedLines url } }"}'
```

A API responde `200` com um registro para cada envio, do mais recente para o mais antigo:

```json
{
  "data": {
    "dataStreamedEvents": [
      {
        "ts": "2026-01-01T11:44:00Z",
        "jobName": "Data Streaming RTM Activity",
        "endpointType": "HTTP_POST",
        "statusCode": 405,
        "streamedLines": 2,
        "url": "https://example.com/logs"
      },
      {
        "ts": "2026-01-01T11:43:00Z",
        "jobName": "Data Streaming RTM Activity",
        "endpointType": "HTTP_POST",
        "statusCode": 405,
        "streamedLines": 1,
        "url": "https://example.com/logs"
      }
    ]
  }
}
```

Um `statusCode` `405` significa que o endpoint em `url` recusou o lote, e `streamedLines` dá o número de linhas de log dele. Um `statusCode` igual a `200` significa que o seu endpoint aceitou o lote. Uma lista `dataStreamedEvents` vazia significa que o stream não enviou nada no intervalo. Para todos os campos, consulte [Campos GraphQL do Real-Time Events](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-events/#datastreamedevents-data-stream).

Um status diferente de `200`, como `405`, é a resposta do seu endpoint. Um `503` significa que o Data Stream encontrou o endpoint indisponível. Para as causas, consulte [Solucionar problemas de Data Stream](/pt-br/documentacao/plataforma/data-stream/solucao-de-problemas/).

---

## Próximos passos

- [Templates e payload](/pt-br/documentacao/plataforma/data-stream/templates-e-payload.md#payload): Compare os corpos NDJSON e array JSON e consulte cada campo do payload.
- [Envie logs para um endpoint HTTP](/pt-br/documentacao/guias/plataforma/observabilidade/conector-standard-https-post.md): Crie um stream que envia os logs para uma URL HTTP ou HTTPS.
- [Crie um template personalizado](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/frameworks/data-stream-template-personalizado.md): Escolha as variáveis e as chaves que cada linha de log do payload carrega.
- [Solucionar problemas de Data Stream](/pt-br/documentacao/plataforma/data-stream/solucao-de-problemas.md): Corrija um stream cujo endpoint recusa os lotes ou não recebe nada.
