Referência da API

Logs

O registro de cada requisição feita com uma chave de API e de cada envio por SMTP.

Cada requisição feita com uma chave de API, e cada mensagem recebida pelo SMTP, fica registrada com o corpo enviado e a resposta. Conteúdos de anexos e textos com mais de 5.000 caracteres são cortados. Requisições feitas pelo painel não entram nos logs.

#Listar logs

GET/logs

Chave de acesso total

Parâmetros de consulta

  • limitinteger
    De 1 a 100. Padrão: 20.
  • afterstring
    Cursor da próxima página.
  • beforestring
    Cursor da página anterior.
  • statusstring
    Status HTTP ou faixas separados por vírgula, como 4xx,500.
  • methodstring
    Métodos separados por vírgula, como POST,PATCH. Envios SMTP usam o método SMTP.
  • sourcestring
    api ou smtp.
  • user_agentstring
    Parte do User-Agent.
  • api_key_idstring
    Só requisições de uma chave.
  • searchstring
    Busca no caminho, como /emails/batch.
  • start_datestring
    A partir desta data (ISO 8601).
  • end_datestring
    Até esta data (ISO 8601).

Erros

  • 422validation_error
    Algum campo é inválido. A mensagem diz qual.
GET /logs

cURL

curl 'https://api.postal.so/logs?status=4xx&source=api' \
  -H "Authorization: Bearer $POSTAL_API_KEY"

Node.js

const response = await fetch('https://api.postal.so/logs?status=4xx&source=api', {
  headers: {
    Authorization: `Bearer ${process.env.POSTAL_API_KEY}`,
  },
});

const data = await response.json();

Python

import os
import requests

response = requests.get(
    "https://api.postal.so/logs",
    headers={"Authorization": f"Bearer {os.environ['POSTAL_API_KEY']}"},
    params={
        "status": "4xx",
        "source": "api",
    },
    timeout=10,
)

data = response.json()

PHP

$client = new \GuzzleHttp\Client(['base_uri' => 'https://api.postal.so']);

$response = $client->get('logs', [
    'headers' => ['Authorization' => 'Bearer '.getenv('POSTAL_API_KEY')],
    'query' => [
        'status' => '4xx',
        'source' => 'api',
    ],
]);

$data = json_decode($response->getBody(), true);
200Resposta
{
  "object": "list",
  "has_more": false,
  "data": [
    {
      "id": "019a1b2d-0000-7b11-a2c3-d4e5f6a7b8c9",
      "created_at": "2026-10-24T13:02:11.000000Z",
      "endpoint": "/emails",
      "method": "POST",
      "response_status": 422,
      "user_agent": "node-fetch/1.0",
      "api_key_id": "0199f0e2-7b8c-7d9e-8f0a-1b2c3d4e5f6a"
    }
  ]
}

#Obter um log

GET/logs/{id}

Chave de acesso total

Devolve o log com request_body (o JSON enviado, ou a query string em requisições GET) e response_body.

Parâmetros de caminho

  • idstringobrigatório
    ID do log.

Erros

  • 404not_found
    O recurso não existe ou é de outro time.
GET /logs/{id}

cURL

curl https://api.postal.so/logs/019a1b2c-4d60-7a11-b2c3-d4e5f6a7b8c9 \
  -H "Authorization: Bearer $POSTAL_API_KEY"

Node.js

const response = await fetch('https://api.postal.so/logs/019a1b2c-4d60-7a11-b2c3-d4e5f6a7b8c9', {
  headers: {
    Authorization: `Bearer ${process.env.POSTAL_API_KEY}`,
  },
});

const data = await response.json();

Python

import os
import requests

response = requests.get(
    "https://api.postal.so/logs/019a1b2c-4d60-7a11-b2c3-d4e5f6a7b8c9",
    headers={"Authorization": f"Bearer {os.environ['POSTAL_API_KEY']}"},
    timeout=10,
)

data = response.json()

PHP

$client = new \GuzzleHttp\Client(['base_uri' => 'https://api.postal.so']);

$response = $client->get('logs/019a1b2c-4d60-7a11-b2c3-d4e5f6a7b8c9', [
    'headers' => ['Authorization' => 'Bearer '.getenv('POSTAL_API_KEY')],
]);

$data = json_decode($response->getBody(), true);
200Resposta
{
  "object": "log",
  "id": "019a1b2c-4d60-7a11-b2c3-d4e5f6a7b8c9",
  "created_at": "2026-10-24T13:02:11.000000Z",
  "endpoint": "/emails",
  "method": "POST",
  "response_status": 200,
  "user_agent": "node-fetch/1.0",
  "api_key_id": "0199f0e2-7b8c-7d9e-8f0a-1b2c3d4e5f6a",
  "request_body": {
    "from": "Loja Exemplo <[email protected]>",
    "to": ["[email protected]"],
    "subject": "Seu pedido #10482 saiu para entrega",
    "html": "<p>O pedido <b>#10482</b> está a caminho.</p>"
  },
  "response_body": {
    "id": "019a1b2c-4d5e-7f60-8a9b-0c1d2e3f4a5b"
  }
}