Discover datasets, available windows and source-specific history.
Sources and available datasets
Use selected datasets from these 13 active source families. Open each dataset for its available dates, original sources and record-level validation details.
Compare electricity prices and generation, weekly petroleum inventories and natural-gas storage with charts, source receipts, exports and private threshold alerts.
Account required; four selected datasets fetched on demand; history varies by series
Discover futures markets and compare weekly trader positioning across seven report families. Inspect long, short and net positions, changes and open-interest ratios with source receipts.
Account required; interactive comparisons cover up to four markets and 104 weeks; retained history is available by completed archive window; no price feed
Compare inflation breakdowns, employment across 12 industries, production/nonsupervisory hourly earnings, unemployment and participation. Combine sources and save economic dashboards.
Compare GDP, consumer spending, income, saving, private investment, industry compensation and corporate profits, with explicit units and current source revisions.
Search filings and exhibits, compare financial disclosures, and research reported ownership, fund portfolios, private offerings and supplemental SEC records.
Public examples; account and indexed-coverage limits apply
Screen 16 bank financial measures, including estimated uninsured deposits, noncurrent loans and property lending. Compare up to 25 banks across eight quarters; explore deposit geography and failure history.
Account required; select banks by FDIC certificate; history varies
Explore stored history and comparisons across six selected datasets: credit, debt service, credit gaps, nominal and real property prices, debt securities and foreign exchange across 42 countries and areas.
Public, without login or paid quota; selected areas and series
Research federal debt outstanding, average interest rates, interest expense and the Monthly Statement of the Public Debt summary over time.
Account required; four history datasets; combined reports cover the original three
Historical data, ready to research.
Explore bank financials, repo financing, the Financial Stress Index, international credit, legal-entity snapshots and federal debt. Filter by date and source identifier, view charts and export records with original source receipts.
Available dates vary by dataset. Check accepted coverage and remaining gaps in the library. GLEIF snapshots show observed identities and reported accounting parents; they are not complete ownership history. BIS history is free without login; other datasets require account access.
Additional integrations · not currently available
Companies House, USAspending.gov, Federal Register, Japan EDINET, ESMA are implemented but remain source-gated. They are not included as usable datasets in a subscription. Their appearance in navigation or OpenAPI is not evidence of availability.
Signed-in customers can inspect the source desk at GET /account/open-source-research and organization source status at GET /account/open-source-research/coverage. Source admission, account permissions and provider availability are checked at request time.
Reference and coverage resources
Endpoint
Use it for
GET /coverage/status
Public SEC ingestion, measured latency and the separate financing-corpus receipt
GET /catalog/filings
Authenticated historical metadata discovery; not a guarantee of extracted text
POST /search/market
Watchlist-independent search of entitled indexed records, with coverage limits
GET /reference/bis/compare
Public bounded comparisons of selected BIS datasets
GET /intelligence/issuers/{ticker}/financing-conditions
New York Fed rates beside entitled SEC context
GET /account/reference-history
Stored bank financials, OFR repo and stress series, legal-entity snapshots, and federal debt history. Filter by source identifier and dates; export page records with original source receipts. Inspect accepted and pending windows through /catalog. Reference-history entitlements apply.
GET /reference/bis/history
Free public stored BIS history across selected credit datasets. No sign-in or paid quota; source coverage and pagination remain explicit.
GET /intelligence/issuers/{ticker}/financing-environment
SOFR averages and Index; nominal and real Treasury yields, bill rates and historical auctions; 33 selected SLOOS series; and OFR repo context. Expired admissions or unavailable datasets return explicit availability states, not observations
POST /account/bank-peers/compare
Browser-session selected FDIC bank comparisons
POST /account/entity-matches/{ticker}/candidates
Browser-session GLEIF candidate review, not automatic identity matching
GET /account/open-source-research
Current source-desk and dataset availability
POST /account/open-source-research/query
Admitted Treasury Fiscal Data queries
Query historical reference data
The historical library serves retained FDIC, OFR, BIS, GLEIF and Treasury Fiscal Data. New York Fed rates, Treasury curves/auctions and SLOOS remain in the separate issuer financing endpoints listed above. These records preserve source receipts and original units; they are separate from SEC facts and their verification states.
Dataset selector
Data and identifier
fdic_financials
Ten bank metrics; FDIC certificate. Amounts in thousands of USD, ratios in percent. Net income is year-to-date.
fdic_institutions
Current bank directory snapshots; FDIC certificate. A reported LEI does not automatically match a bank to an SEC issuer.
ofr_repo
Repo rates/volumes; series mnemonic. Keep preliminary/final variants and exact units separate.
ofr_stress
Financial Stress Index and eight contributions. No entity filter is needed.
bis
Six selected dataflows; exact dataset/country/sector identifier from the public entities route.
gleif
Observed identity and reported accounting-parent snapshots; LEI. Not complete historical or beneficial ownership.
treasury_debt
Federal debt in USD. No entity filter is needed.
treasury_rates
Average interest rates in percent; security description.
treasury_expense
Monthly and fiscal-year-to-date expense in USD; category/group/type identifier.
treasury_mspd
MSPD summary table 1 in millions of USD; security type/class identifier.
Choose public or account access
GET /reference/bis/history, /reference/bis/history/catalog and /reference/bis/history/entities?dataset=bis are public, without a key or paid metering. The query defaults to BIS; identifier discovery requires dataset=bis.
Other datasets use GET /account/reference-history, /account/reference-history/catalog and /account/reference-history/entities. Send a server-side API key with intelligence:read, or use your signed-in browser session. Eligible Free accounts can use these routes within their access limits. The private catalog also lists BIS; query it through the public route.
Private queries enforce referenceHistoryDays: currently 365 days for Free, 1,095 for Builder, 2,555 for Professional and 3,650 for Team. Check the live plan catalog. Decades stored in the archive do not grant every account access to those dates. Catalog and identifier visibility do not override this limit. Public BIS has no plan lookback. Indexed SEC history is a separate access rule.
Discover, filter and paginate
Read the appropriate /catalog for enabled datasets, definitions, units and download coverage. Its dates describe requested windows, not the earliest/latest actual observation. available does not certify a complete provider archive.
Use /entities?dataset=…&search=… to obtain an exact identifier; do not substitute a ticker or CIK. At most 30 identifiers are returned; narrow your search if data.truncated is true. FDIC financial discovery uses the current bank directory and can omit closed historical banks.
Query with dataset, inclusive startDate/endDate, and optional entity. Dates must be from 1900 onward, not in the future, and at most 3,660 days apart. Omitting entity queries all retained identifiers. There is no adjustable limit or offset.
Read up to 100 data.records per page. Pass data.pagination.nextCursor unchanged with identical filters until it is null. There is no hasMore. The examples below stop at ten pages and explicitly mark partial output.
A 409 reference_history_changed means the accepted snapshots or filters changed. Discard the incomplete result and restart without a cursor; never combine pages across that restart. Empty records with a null cursor are a valid result, not proof that the provider has no data.
Keep values and source receipts together
Each record contains key, entity, date, label, dataset-specific fields, state and snapshotSha256. Join that hash to data.receipts for original source URLs, retrieval timestamps, HTTP status and hashes. Numeric values are exact decimal strings or null; keep null distinct from zero. Units and notices are in data.dataset, with field-level definitions in OpenAPI.
data.coverage counts dataset-wide registered, accepted and pending/failed download windows. These counts can overlap after a failed refresh, and an accepted window can be empty. They do not measure completeness of your selected dates. Stored values are latest retrieved revisions, not what was known at a historical publication time. Page exports retain only that page and its receipts.
Runnable requests
Download the dependency-free Python example or Node.js example. Defaults query one public BIS quarter and follow up to ten pages. For private data, set FILINGSIFT_API_KEY securely in your environment, then pass the dataset, start date, end date and optional exact entity. For example: python3 reference_history.py fdic_financials 2026-06-01 2026-06-30 3510; choose dates permitted by your current plan. Empty results remain valid. These are direct REST examples; they do not imply new SDK helper methods.
curl --fail-with-body --max-time 30 --get 'https://api.filingsift.com/api/v1/reference/bis/history' --data-urlencode 'dataset=bis' --data-urlencode 'startDate=2020-01-01' --data-urlencode 'endDate=2020-03-31'
# This is one page. Use the Python or Node.js example to follow nextCursor.
"""Python 3.10+. Read-only; at most ten requests; no third-party dependencies.
Usage: python3 reference_history.py [dataset] [startDate] [endDate] [entity]
"""
import json
import os
import sys
from urllib.error import HTTPError
from urllib.parse import urlencode
from urllib.request import HTTPRedirectHandler, Request, build_opener
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None # Never forward an API key to a redirect destination.
def main():
args = sys.argv[1:]
dataset = args[0] if args else "bis"
filters = {
"dataset": dataset,
"startDate": args[1] if len(args) > 1 else "2020-01-01",
"endDate": args[2] if len(args) > 2 else "2020-03-31",
}
if len(args) > 3:
filters["entity"] = args[3]
public_bis = dataset == "bis"
base = os.environ.get("FILINGSIFT_API_URL", "https://api.filingsift.com/api/v1").rstrip("/")
headers = {"Accept": "application/json"}
if not public_bis:
key = os.environ.get("FILINGSIFT_API_KEY")
if not key:
raise ValueError("Set FILINGSIFT_API_KEY with intelligence:read access.")
headers["Authorization"] = "Bearer " + key
path = "/reference/bis/history" if public_bis else "/account/reference-history"
opener = build_opener(NoRedirect())
pages, seen, cursor = [], set(), None
for _ in range(10):
query = dict(filters)
if cursor is not None:
query["cursor"] = cursor
try:
with opener.open(Request(base + path + "?" + urlencode(query), headers=headers), timeout=30) as response:
envelope = json.load(response)
except HTTPError as error:
if error.code == 409:
raise ValueError("Source snapshots changed: discard this run and restart without a cursor.") from error
raise ValueError(f"HTTP {error.code}: check access, dates and coverage; for 429 honor Retry-After before another run.") from error
data = envelope.get("data", {})
pagination = data.get("pagination", {})
if (data.get("schemaVersion") != "filingsift-reference-library-v1"
or not isinstance(data.get("records"), list)
or not isinstance(data.get("receipts"), list)
or "nextCursor" not in pagination
or not (pagination["nextCursor"] is None or isinstance(pagination["nextCursor"], str))):
raise ValueError("Unexpected history response.")
pages.append(envelope) # Preserve exact decimal strings, nulls, units and receipts.
cursor = pagination["nextCursor"]
if cursor is None:
break
if not cursor or cursor in seen:
raise ValueError("Repeated or empty cursor; stop and inspect the response.")
seen.add(cursor)
print(json.dumps({"request": filters, "complete": cursor is None, "nextCursor": cursor, "pages": pages}, indent=2))
if cursor is not None:
print("Stopped at ten pages. Output is partial; resume with the same filters and nextCursor, or narrow the dates/entity.", file=sys.stderr)
if __name__ == "__main__":
try:
main()
except Exception as error:
# Nothing is printed to stdout until the bounded run succeeds.
print(str(error), file=sys.stderr)
sys.exit(1)
// Node.js 20+. Read-only; at most ten requests. Preserve each page and its receipts.
// Usage: node reference-history.mjs [dataset] [startDate] [endDate] [entity]
const [dataset = 'bis', startDate = '2020-01-01', endDate = '2020-03-31', entity] = process.argv.slice(2);
const publicBis = dataset === 'bis';
const base = (process.env.FILINGSIFT_API_URL || 'https://api.filingsift.com/api/v1').replace(/\/$/, '');
const headers = {Accept: 'application/json'};
if (!publicBis) {
if (!process.env.FILINGSIFT_API_KEY) throw new Error('Set FILINGSIFT_API_KEY with intelligence:read access.');
headers.Authorization = `Bearer ${process.env.FILINGSIFT_API_KEY}`;
}
const filters = {dataset, startDate, endDate, ...(entity ? {entity} : {})};
const pages = [], seen = new Set();
let cursor = null;
try {
for (let page = 0; page < 10; page++) {
const query = new URLSearchParams({...filters, ...(cursor ? {cursor} : {})});
const response = await fetch(`${base}${publicBis ? '/reference/bis/history' : '/account/reference-history'}?${query}`, {
headers, redirect: 'error', signal: AbortSignal.timeout(30_000),
});
if (response.status === 409) throw new Error('Source snapshots changed: discard this run and restart without a cursor.');
if (!response.ok) throw new Error(`HTTP ${response.status}: check access, dates and coverage; for 429 honor Retry-After before another run.`);
const envelope = await response.json();
const data = envelope.data;
if (data?.schemaVersion !== 'filingsift-reference-library-v1' || !Array.isArray(data.records)
|| !Array.isArray(data.receipts) || !data.pagination
|| !(data.pagination.nextCursor === null || typeof data.pagination.nextCursor === 'string')) throw new Error('Unexpected history response.');
pages.push(envelope); // Keep exact decimal strings, nulls, units, coverage and receipts together.
cursor = data.pagination.nextCursor;
if (cursor === null) break;
if (!cursor || seen.has(cursor)) throw new Error('Repeated or empty cursor; stop and inspect the response.');
seen.add(cursor);
}
console.log(JSON.stringify({request: filters, complete: cursor === null, nextCursor: cursor, pages}, null, 2));
if (cursor !== null) console.error('Stopped at ten pages. Output is partial; resume with the same filters and nextCursor, or narrow the dates/entity.');
} catch (error) {
// No partial pages are written on failure, including a mid-query snapshot change.
console.error(error.message);
process.exitCode = 1;
}
Errors and request budgets
400: unsupported filters, dataset, dates or cursor; 401: missing/invalid credentials on private routes; 402: inactive billing entitlement; 403: scope or reference-history access; 409: restart pagination; 429: honor Retry-After; 503: history/source unavailable. The three routes share a 20-request/minute action budget per organization for private access, or per IP for public BIS, plus platform limits. Responses use Cache-Control: no-store. The examples stop on errors without printing partial pages or automatically retrying.
BIS expansion covers 42 selected countries/areas and six dataflows, including nominal and CPI-deflated residential property indices. New retained histories are populated in bounded batches; use catalog coverage before requesting old dates. Live public comparisons accept up to 20 completed quarters from 1970 onward where available; debt-service ratios begin no earlier than 1999. Public BIS data has no login or paid quota requirement.