/api/v1/financials/statusSystem status for the XBRL pipeline: table row counts, last sync times, and pipeline health.
System status for the XBRL pipeline: table row counts, last sync times, and pipeline health.
Why use this
Common use case
System-status probe for the XBRL ETL pipeline (Phase 49+). No authentication, free (cost: 0). Returns table row counts (raw facts → standardized metrics → derived ratios), recent-sync timing per pipeline step, overall pipeline health, and staleness hours. The right endpoint for: status-page dashboards, ETL monitoring, debugging data-staleness alerts, and pre-flight checks before downstream consumers fetch financial data. Pair with GET /api/v1/financials/changes for the per-ticker delta feed and GET /api/v1/status for the broader system-wide health view (covers all FinRadar services beyond just XBRL).
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| data.database | object | no | Row counts for each XBRL pipeline table. Useful for capacity-planning and ETL-completeness checks. Sub-fields: `cf_facts` (raw concept-level facts — typically 40-50M post-Phase-49), `cf_standardized_metrics` (Phase-49 standardized metrics — typically 2-3M), `cf_derived_metrics` (Phase-49 derived ratios — typically 1.5-2M), `cf_companies` (covered ticker count — typically 7000-7300), `cf_concepts` (unique us-gaap + dei concepts seen — typically 20K-25K). |
| data.database.cf_facts | integer | no | Total raw concept-level facts in the system (e.g. one row per (cik, concept, period, value) tuple from EDGAR's companyfacts JSON). Grows ~50K rows/day during normal filing cadence. |
| data.database.cf_standardized_metrics | integer | no | Total Phase-49-standardized metrics (e.g. `revenue` collapsing across `us-gaap:Revenues` + `us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax` + `us-gaap:SalesRevenueNet`). One row per (ticker, fiscal-period, metric-name). |
| data.database.cf_derived_metrics | integer | no | Total derived ratios (e.g. ROE, debt-to-equity, gross_margin). One row per (ticker, fiscal-period, ratio-name). Computed nightly from `cf_standardized_metrics`. |
| data.database.cf_companies | integer | no | Distinct ticker count with at least one parsed XBRL fact. Equals the result count of `/api/v1/financials/tickers` with empty `q`. |
| data.last_update | string | no | ISO-8601 UTC timestamp of the most-recent ETL completion (any step). Compare against current time for staleness detection. |
| data.recent_syncs[] | array | no | Recent ETL step executions, sorted by `time DESC`. Each row represents one daily-pipeline step run. |
| data.recent_syncs[].step | string | no | Pipeline step name. Values: `companyfacts_download` (EDGAR bulk JSON download), `facts_load` (ingest into cf_facts), `standardized_metrics` (Phase-49 standardization pass), `derived_metrics` (Phase-49 ratio computation), `delta_detection` (changes-feed population). |
| data.recent_syncs[].time | string | no | ISO-8601 UTC timestamp of step completion. |
| data.recent_syncs[].records | integer | no | Records processed in this step run. For incremental loads this is the delta count; for full re-syncs (rare) this is the total table count. |
| data.recent_syncs[].duration_sec | number | no | Step duration in seconds. Use as performance baseline (e.g. companyfacts_download typically 400-600 sec; standardized_metrics typically 150-200 sec). Spikes >2x baseline indicate degradation. |
| data.recent_syncs[].status | string | no | Step outcome: `success` / `failed` / `partial` / `skipped`. Failed steps surface in `pipeline_health: degraded`. |
| data.pipeline_health | string | no | Overall pipeline health summary. Values: `healthy` (last 4 step runs all succeeded, staleness < 24h), `degraded` (any failed step in last 24h OR staleness > 24h but < 48h), `critical` (staleness > 48h OR multiple consecutive failures). For status-page dashboards consume this directly; for deep diagnostics inspect `recent_syncs[]`. |
| data.staleness_hours | number | no | Hours since `last_update` (rounded to 1 decimal). Useful for staleness-alert thresholds (e.g. alert if > 30h — XBRL pipeline runs daily ~01:00 UTC, so 24-30h is normal weekend/holiday cycle). |
Sample response
- "status": "success"
- "data":
- "database":
- "last_update": "2026-05-02T01:45:00Z"
- "recent_syncs":
- "pipeline_health": "healthy"
- "staleness_hours": 8.5
Errors
| Status | Label | Description |
|---|---|---|
| 200 | OK | Request succeeded. |
| 400 | Bad Request | Invalid query, body, or path parameter. |
| 401 | Unauthorized | Missing or invalid Authorization header / api_Token. |
| 402 | Payment Required | Insufficient token balance for this call. Top up |
| 429 | Too Many Requests | Rate limit exceeded for your tier (see /pricing for tier limits). Tier limits |
| 500 | Server Error | Unexpected server-side failure. Retry with backoff; report if persistent. |
Code samples
curl "https://api.finradar.ai/api/v1/financials/status" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"Generate an API key in /account/credentials to run live queries (literal YOUR_API_KEY placeholder shown until then).