DataBolsa docs
Referência da APISistemaSistema

Saúde da ingestão (pipeline, fontes, pollers, histórico)

`latest` é o último run do pipeline completo, não o último run a terminar: reparos e recargas pontuais têm trigger próprio e aparecem em `latest_by_trigger`, com as mensagens de erro em `errors`. Uma fonte pode estar fresca e oca ao mesmo tempo — `missing_ratio` mede a fração de partições sem dado e `status: incomplete` sinaliza quando ela deixa de ser sazonal. O frescor é julgado contra a cadência da própria fonte: `expected_max_age_days` é o intervalo de atualização que ela declara e `stale_after_days`, o silêncio tolerado antes de `status: stale`. **`latest.ok` fala do RUN, não da sua fonte.** Um run vermelho por causa de uma série do Banco Central não diz nada sobre as ofertas da CVM, que no mesmo run vieram inteiras — e quem lê só o booleano recusa uma pergunta que a base responde. `latest.error_sources` nomeia quais fontes falharam; `sources[]` traz a saúde de cada uma por si. **São 57 fontes.** Use `source` para recortar — casa por substring, então `oferta` acha `cvm_ofertas`. O recorte vale só para `sources[]`: o run e os pollers continuam inteiros, porque é cruzando os dois que se separa 'o pipeline falhou' de 'esta fonte falhou'.

GET
/v1/ingest
AuthorizationBearer <token>

In: header

Query Parameters

source?string

Recorta sources[] por substring do nome da fonte: oferta, cvm, b3.

Response Body

curl -X GET "https://api.databolsa.com/v1/ingest?source=string"
{
  "latest": {
    "errors": [
      "string"
    ],
    "run_id": "string",
    "trigger": "string",
    "started_at": "string",
    "finished_at": "string",
    "duration_s": 0,
    "exit": 0,
    "ok": true,
    "error_count": 0,
    "error_sources": [
      "string"
    ]
  },
  "latest_by_trigger": [
    {
      "errors": [
        "string"
      ],
      "run_id": "string",
      "trigger": "string",
      "started_at": "string",
      "finished_at": "string",
      "duration_s": 0,
      "exit": 0,
      "ok": true,
      "error_count": 0,
      "error_sources": [
        "string"
      ]
    }
  ],
  "sources": [
    {
      "source": "string",
      "status": "ok",
      "last_fetch": "string",
      "age_days": 0,
      "datasets": 0,
      "missing": 0,
      "missing_ratio": 0,
      "unavailable": 0,
      "failed_validation": 0,
      "expected_max_age_days": 0,
      "stale_after_days": 0,
      "ok": 0,
      "skip": 0,
      "miss": 0,
      "err": 0,
      "rows": 0,
      "duration_s": 0
    }
  ],
  "pollers": [
    {
      "source": "string",
      "status": "ok",
      "last_cycle_at": "string",
      "last_write_at": "string",
      "age_seconds": 0,
      "cycle_seconds": 0,
      "sleeping_until": "string",
      "in_window": true,
      "universe_size": 0,
      "rows_written": 0,
      "consecutive_errors": 0,
      "last_error": "string",
      "last_error_at": "string"
    }
  ],
  "recent_runs": [
    {
      "run_id": "string",
      "trigger": "string",
      "started_at": "string",
      "finished_at": "string",
      "duration_s": 0,
      "exit": 0,
      "ok": true,
      "error_count": 0,
      "error_sources": [
        "string"
      ]
    }
  ]
}
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "details": {
    "property1": null,
    "property2": null
  }
}