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
Parâmetros de consulta
limitintegerDe 1 a 100. Padrão: 20.afterstringCursor da próxima página.beforestringCursor da página anterior.statusstringStatus HTTP ou faixas separados por vírgula, como4xx,500.methodstringMétodos separados por vírgula, comoPOST,PATCH. Envios SMTP usam o métodoSMTP.sourcestringapiousmtp.user_agentstringParte do User-Agent.api_key_idstringSó requisições de uma chave.searchstringBusca no caminho, como/emails/batch.start_datestringA partir desta data (ISO 8601).end_datestringAté esta data (ISO 8601).
Erros
- 422
validation_errorAlgum campo é inválido. A mensagem diz qual.
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);
{
"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}
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órioID do log.
Erros
- 404
not_foundO recurso não existe ou é de outro time.
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);
{
"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"
}
}