Skip to content
/api/v1/xbrl/bulk

Get the latest nightly bulk-export manifest: the list of available files with per-file row count, byte size, and SHA-256 digest, plus the snapshot timestamp, the contract version the export was built against, and the file format.

Get the latest nightly bulk-export manifest: the list of available files with per-file row count, byte size, and SHA-256 digest, plus the snapshot timestamp, the contract version the export was built against, and the file format. The entry point for any bulk workflow — read this, then GET the file(s) you need. Files are regenerated once per night from the current standardized layer; a download always reflects the most recent completed snapshot.

Why use this

Enumerate the nightly bulk inventory before fetching: returns the current snapshot's files (the standardized line-item dataset + the company identity dataset) with row counts and SHA-256 digests for integrity verification, plus `generated_at`, `api_version`, and the `download_path` for each file. Use it to size a download and verify a file after fetching.

Common use case

Building a nightly ingest job that pulls the full standardized-fundamentals corpus into a customer data warehouse: read the manifest, compare `snapshot` against the last one ingested, and download only when it changed.

Returns the manifest for the most recent completed nightly bulk export. The bulk surface regenerates the whole standardized layer once per night into gzip ND-JSON files so institutions do not make thousands of per-company calls to reconstruct the corpus. Two datasets ship today: standardized_values — every company's currently-in-force standardized line items, each row carrying {cik, ticker, entity_name, metric, fiscal_year, fiscal_period, period_end, value, unit, concept_qname, rule_tier, confidence, calc_status, accession_number, form_type, filed_date, engine_version}; and entities — the identity dimension ({cik, entity_name, primary_ticker, sic, fiscal_year_end}) so you can join without a second call. Each file entry carries a SHA-256 digest for integrity verification. Read this manifest, then stream the file(s) via GET /api/v1/xbrl/bulk/{filename}. 404 NOT_FOUND before the first export has run.

Response schema

FieldTypeNullableDescription
data.snapshotstringnoThe UTC timestamp identifying the current nightly snapshot (e.g. `2026-07-16T06-00-00Z`). Compare against your last-ingested value to detect a fresh export.
data.generated_atstringnoISO-8601 UTC time the snapshot finished generating.
data.api_versionstringnoThe API contract version the export was built against — the standardized field set matches this version's documentation.
data.formatstringnoThe file format for every file: `ndjson.gz` — gzip-compressed newline-delimited JSON (one JSON object per line). Decompress, then read line by line.
data.datasetsarraynoThe datasets in this snapshot: `standardized_values` (the current in-force standardized line items for every company) and `entities` (the company identity dimension: CIK, name, primary ticker, SIC).
data.file_countintegernoNumber of files in the snapshot.
data.total_rowsintegernoSum of `row_count` across all files — a quick sanity gauge of corpus size.
data.filesarraynoOne entry per file: `{dataset, filename, row_count, byte_size, sha256, download_path}`. `download_path` is the ready-to-call path for GET /api/v1/xbrl/bulk/{filename}.
data.files[].sha256stringnoSHA-256 hex digest of the compressed file — verify your download against it before ingesting.

Sample response

·
  • "status": "success"
  • "data":
    • "snapshot": "2026-07-16T06-00-00Z"
    • "generated_at": "2026-07-16T06-04-11.512000Z"
    • "api_version": "3.103.0"
    • "format": "ndjson.gz"
    • "datasets":
    • "file_count": 2
    • "total_rows": 4821337
    • "files":
    }
  • "meta":
    • "snapshot": "2026-07-16T06-00-00Z"
    }
}

Errors

StatusLabelDescription
200OKRequest succeeded.
400Bad RequestInvalid query, body, or path parameter.
401UnauthorizedMissing or invalid Authorization header / api_Token.
402Payment RequiredInsufficient token balance for this call. Top up
429Too Many RequestsRate limit exceeded for your tier (see /pricing for tier limits). Tier limits
500Server ErrorUnexpected server-side failure. Retry with backoff; report if persistent.

Code samples

curl "https://api.finradar.ai/api/v1/xbrl/bulk?api_Token=YOUR_API_KEY" \
  -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).