Runs
7 endpoint(s)
GET /api/v1/dags/{dag_id}/runs
Search runs for a DAG
Scope of keyword filters (event/extract/transform/load): each ILIKE matches against (log->'<phase>')::text, which contains:
- Phase status (success, message, total)
- The s3_data_path to the parquet artifact
- The first 100 rows of the phase's data array (writer caps inline)
For DEEP search across ALL rows of a specific phase's data parquet (rows 101+), use the per-run drill-down: GET /dags/{dag_id}/runs/{date}/{run_id}/phases/{phase}/data?keyword=... — that one goes to S3+DuckDB and scans the full data file.
Autenticación
Bearer Token requerido. El id_company se extrae automáticamente del token.
Parámetros de ruta
| Parámetro | Tipo | Requerido | Default | Descripción |
|---|---|---|---|---|
dag_id |
string |
✅ | — |
Query parameters
| Parámetro | Tipo | Requerido | Default | Descripción |
|---|---|---|---|---|
date_from |
string |
✅ | — |
|
date_to |
string |
✅ | — |
|
extract_status |
string |
— | all |
|
transform_status |
string |
— | all |
|
load_status |
string |
— | all |
|
event_keyword |
string | null |
— | — |
|
extract_keyword |
string | null |
— | — |
|
transform_keyword |
string | null |
— | — |
|
load_keyword |
string | null |
— | — |
|
run_ids |
string | null |
— | — |
Comma-separated run_id allowlist (consolidates the old /runs/search/keyword) |
page |
integer |
— | 0 |
|
limit |
integer |
— | 20 |
Respuestas
| Código | Descripción |
|---|---|
200 |
Runs matching the filters — SearchRunsResponse |
401 |
Unauthorized — ErrorResponse |
422 |
Invalid date range or filter — ErrorResponse |
502 |
Run lookup failed — ErrorResponse |
GET /api/v1/dags/{dag_id}/runs/{date}/{run_id}
Run summary
Single PVT lookup (no S3) returning per-phase status + paths. Same shape as the items in /dags/{dag_id}/runs.
Autenticación
Bearer Token requerido. El id_company se extrae automáticamente del token.
Parámetros de ruta
| Parámetro | Tipo | Requerido | Default | Descripción |
|---|---|---|---|---|
dag_id |
string |
✅ | — |
DAG/ETL UUID |
date |
string |
✅ | — |
Run partition date (YYYY-MM-DD) |
run_id |
string |
✅ | — |
Airflow run_id (URL-encoded) |
Respuestas
| Código | Descripción |
|---|---|
200 |
Run found — SearchRunResult |
401 |
Unauthorized — ErrorResponse |
404 |
Run not found in etl.logs — ErrorResponse |
422 |
Validation Error — HTTPValidationError |
GET /api/v1/dags/{dag_id}/runs/{date}/{run_id}/event
Event payload (combined queue_data + processed event)
Returns both queue_data.parquet (raw trigger message) and event.parquet (processed event JSON) in a single response. Reads are parallelized via asyncio.gather so latency = max(queue_data_read, event_read) instead of sum.
Autenticación
Bearer Token requerido. El id_company se extrae automáticamente del token.
Parámetros de ruta
| Parámetro | Tipo | Requerido | Default | Descripción |
|---|---|---|---|---|
dag_id |
string |
✅ | — |
DAG/ETL UUID |
date |
string |
✅ | — |
Run partition date (YYYY-MM-DD) |
run_id |
string |
✅ | — |
Airflow run_id (URL-encoded) |
Respuestas
| Código | Descripción |
|---|---|
200 |
Successful Response |
422 |
Validation Error — HTTPValidationError |
GET /api/v1/dags/{dag_id}/runs/{date}/{run_id}/phases/{phase}
Phase attempt summary (metadata + counts)
Returns metadata.parquet (1 row, ~1KB) for the given phase + attempt. Counts (log_count, error_log_count) are inside the metadata row.
Autenticación
Bearer Token requerido. El id_company se extrae automáticamente del token.
Parámetros de ruta
| Parámetro | Tipo | Requerido | Default | Descripción |
|---|---|---|---|---|
dag_id |
string |
✅ | — |
DAG/ETL UUID |
date |
string |
✅ | — |
Run partition date (YYYY-MM-DD) |
run_id |
string |
✅ | — |
Airflow run_id (URL-encoded) |
phase |
string |
✅ | — |
Query parameters
| Parámetro | Tipo | Requerido | Default | Descripción |
|---|---|---|---|---|
attempt |
integer |
— | 1 |
Attempt number (1-based) |
Respuestas
| Código | Descripción |
|---|---|
200 |
Successful Response — ParquetPageResponse |
422 |
Validation Error — HTTPValidationError |
GET /api/v1/dags/{dag_id}/runs/{date}/{run_id}/phases/{phase}/data
Phase data rows (paginated)
Paginated read of data_NNN.parquet files. With ?keyword= uses index.parquet for full-text matching, then resolves matches in the data files.
Autenticación
Bearer Token requerido. El id_company se extrae automáticamente del token.
Parámetros de ruta
| Parámetro | Tipo | Requerido | Default | Descripción |
|---|---|---|---|---|
dag_id |
string |
✅ | — |
DAG/ETL UUID |
date |
string |
✅ | — |
Run partition date (YYYY-MM-DD) |
run_id |
string |
✅ | — |
Airflow run_id (URL-encoded) |
phase |
string |
✅ | — |
Query parameters
| Parámetro | Tipo | Requerido | Default | Descripción |
|---|---|---|---|---|
attempt |
integer |
— | 1 |
Attempt number (1-based) |
page |
integer |
— | 0 |
0-indexed page |
limit |
integer |
— | 50 |
Page size |
keyword |
string | null |
— | — |
ILIKE on index.parquet._searchable |
Respuestas
| Código | Descripción |
|---|---|
200 |
Successful Response — ParquetPageResponse |
422 |
Validation Error — HTTPValidationError |
GET /api/v1/dags/{dag_id}/runs/{date}/{run_id}/phases/{phase}/errors
Phase errors (paginated)
Reads errors_NNN.parquet directly — RFC 7807-aligned fields (error_type, error_title, error_status, error_detail, traceback).
Autenticación
Bearer Token requerido. El id_company se extrae automáticamente del token.
Parámetros de ruta
| Parámetro | Tipo | Requerido | Default | Descripción |
|---|---|---|---|---|
dag_id |
string |
✅ | — |
DAG/ETL UUID |
date |
string |
✅ | — |
Run partition date (YYYY-MM-DD) |
run_id |
string |
✅ | — |
Airflow run_id (URL-encoded) |
phase |
string |
✅ | — |
Query parameters
| Parámetro | Tipo | Requerido | Default | Descripción |
|---|---|---|---|---|
attempt |
integer |
— | 1 |
Attempt number (1-based) |
page |
integer |
— | 0 |
0-indexed page |
limit |
integer |
— | 50 |
Page size |
Respuestas
| Código | Descripción |
|---|---|
200 |
Successful Response — ParquetPageResponse |
422 |
Validation Error — HTTPValidationError |
GET /api/v1/dags/{dag_id}/runs/{date}/{run_id}/phases/{phase}/logs
Phase logs (paginated or streamed)
Default response is paginated JSON. To stream all logs as NDJSON without pagination, send Accept: application/x-ndjson (Zalando #244 content negotiation).
Autenticación
Bearer Token requerido. El id_company se extrae automáticamente del token.
Parámetros de ruta
| Parámetro | Tipo | Requerido | Default | Descripción |
|---|---|---|---|---|
dag_id |
string |
✅ | — |
DAG/ETL UUID |
date |
string |
✅ | — |
Run partition date (YYYY-MM-DD) |
run_id |
string |
✅ | — |
Airflow run_id (URL-encoded) |
phase |
string |
✅ | — |
Query parameters
| Parámetro | Tipo | Requerido | Default | Descripción |
|---|---|---|---|---|
attempt |
integer |
— | 1 |
Attempt number (1-based) |
page |
integer |
— | 0 |
0-indexed page |
limit |
integer |
— | 50 |
Page size |
level |
string | null |
— | — |
Filter by log level |
keyword |
string | null |
— | — |
ILIKE on message column |
Respuestas
| Código | Descripción |
|---|---|
200 |
Successful Response |
422 |
Validation Error — HTTPValidationError |