/api/v1/xbrl/bulk/{filename}Download one file from the latest nightly bulk snapshot.
Download one file from the latest nightly bulk snapshot. The response body is the raw gzip ND-JSON file streamed from disk (never buffered into memory), with `Content-Disposition: attachment` and the `X-Bulk-Snapshot` header naming the snapshot. Supports HTTP Range requests and conditional (If-Modified-Since) requests, so a large download is resumable. Filenames come from the manifest's `files[].filename` (or `download_path`).
Why use this
Common use case
Streams one file from the current nightly bulk snapshot straight off disk — the file is never loaded into memory, and the transfer supports Range + conditional requests so a multi-hundred-MB download resumes cleanly. The success body is the gzip file itself (not the JSON envelope); the X-Bulk-Snapshot response header tells you which snapshot you got. Always fetch GET /api/v1/xbrl/bulk first to learn the valid filenames and their SHA-256 digests, then verify the downloaded bytes against the digest before ingesting. Errors use the standard JSON error envelope: 400 INVALID_PARAM (malformed filename), 404 NOT_FOUND (no export yet, or the file is not in the current snapshot).
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| filename | path | required | — | — | The bulk file to download, exactly as listed in the manifest's `files[].filename`. Only the current snapshot's `*.ndjson.gz` files are served. An unknown or malformed name returns 400 `INVALID_PARAM`; a name not in the current snapshot returns 404 `NOT_FOUND`. | standardized_values.ndjson.gz |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| (binary) | string | no | The raw gzip ND-JSON file bytes (Content-Type `application/gzip`). This endpoint does NOT return the JSON envelope on success — it streams the file. Errors (400/404) DO use the standard JSON error envelope. |
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/xbrl/bulk/standardized_values.ndjson.gz?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).