Paginação
A maioria dos endpoints que retornam listas suportam paginação via parâmetros limit e offset.
Parâmetros
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
limit |
integer | varia | Número máximo de resultados por página |
offset |
integer | 0 | Número de registros a pular |
Limites por endpoint
| Endpoint | Mínimo | Máximo | Padrão |
|---|---|---|---|
GET /dags/{dag_id}/runs |
1 | 100 | 20 |
GET /phases/{phase}/logs |
1 | 500 | 50 |
GET /phases/{phase}/data |
1 | 500 | 50 |
GET /phases/{phase}/errors |
1 | 500 | 50 |
Estrutura de resposta paginada
Todos os endpoints paginados incluem estes campos:
| Campo | Descrição |
|---|---|
total |
Total de registros que correspondem aos filtros, independentemente da página atual |
has_more |
true se existirem mais resultados a partir de offset + limit |
Exemplo: percorrer todas as páginas
# Página 1
curl "http://<host>:<port>/api/v1/dags/my-dag/runs/2026-05-01/run-id/phases/extract/logs?limit=50&offset=0" \
-H "Authorization: Bearer <token>"
# Página 2
curl "http://<host>:<port>/api/v1/dags/my-dag/runs/2026-05-01/run-id/phases/extract/logs?limit=50&offset=50" \
-H "Authorization: Bearer <token>"
import requests
headers = {"Authorization": f"Bearer {token}"}
base_url = "http://<host>:<port>/api/v1/dags/my-dag/runs/2026-05-01/run-id/phases/extract/logs"
all_logs = []
offset = 0
limit = 50
while True:
response = requests.get(
base_url,
params={"limit": limit, "offset": offset},
headers=headers,
)
data = response.json()
all_logs.extend(data["items"])
if not data["has_more"]:
break
offset += limit
const headers = { Authorization: `Bearer ${token}` };
const allLogs = [];
let offset = 0;
const limit = 50;
while (true) {
const res = await fetch(
`/api/v1/dags/my-dag/runs/2026-05-01/run-id/phases/extract/logs?limit=${limit}&offset=${offset}`,
{ headers }
);
const data = await res.json();
allLogs.push(...data.items);
if (!data.has_more) break;
offset += limit;
}
Alternativa: stream
Para obter todos os logs de uma fase sem gerenciar páginas, o endpoint GET /phases/{phase}/logs suporta streaming no formato NDJSON (JSON Lines). Envie o header Accept: application/x-ndjson na requisição.
Datasets grandes
O stream não aplica nenhum limite de resultados. Consuma-o de forma incremental para evitar problemas de memória.
import json, requests
with requests.get(
"http://<host>:<port>/api/v1/dags/my-dag/runs/2026-05-01/run-id/phases/extract/logs",
params={"level": "ERROR"},
headers={
"Authorization": f"Bearer {token}",
"Accept": "application/x-ndjson",
},
stream=True,
) as r:
for line in r.iter_lines():
if line:
log = json.loads(line)
print(log)