sifting/io
Reference · v1

API documentation.
One key, every dataset.

Authentication, conventions, and the full REST endpoint reference for US fundamentals, search, filings, XBRL financials, insider trades, 13F holdings, and live tick projections for crypto, DEX, and forex.

Getting started

Getting started

An API key, a base URL, and a single request. The same authentication and rate-limiting rules apply across fundamentals and live market data.

endpoints

Production endpoint

Every endpoint lives under one production host. Versioned under /v1; fields are additive within a version, breaking changes ship under a new prefix.

REST · https
https://api.sifting.io
WebSocket · wss
wss://ws.sifting.io
  1. API key & headers

    Generate an API key from your dashboard, then send it on every request, the header form is preferred, the query parameter is accepted as a fallback.

    credentials
    # preferred, query strings can leak in logs
    X-API-Key: sft_•••
    
    # accepted fallback
    ?api_key=sft_•••
  2. Your first request

    Resolve a ticker through the search endpoint to verify your key is live before pulling deeper data.

    request · shell
    curl -H "X-API-Key: $KEY" \
      "https://api.sifting.io/v1/fnd/us/search?q=apple&limit=5"
Conventions

Conventions

Predictable rules that hold across every product, every endpoint, every payload.

Versioning

Every endpoint is pinned under /v1. Within a version, fields are additive, never removed. Breaking changes ship under a new version with a deprecation window.

Identifiers

Tickers are case-insensitive (AAPL = aapl). CIKs are always exposed as 10-digit zero-padded strings ("0000320193"). Accession numbers come back in dashed form ("0000320193-25-000089") and are accepted in either dashed or undashed form on input.

Dates & timestamps

ISO 8601. filed_at, period_end, transaction_date are date-only (YYYY-MM-DD). accepted_at, as_of are full timestamps (YYYY-MM-DDTHH:MM:SSZ). Live-tick timestamps (t) are int64 Unix epoch milliseconds.

Money & units

XBRL data carries the unit explicitly. Monetary observations come back as { value, unit } where unit is one of USD, USD/shares (EPS), shares, or pure (dimensionless ratios).

Pagination

List endpoints accept ?limit (default 50, max 200; default 10, max 25 for /insiders) and ?cursor (opaque, from meta.next_cursor on the previous response). meta.next_cursor is null/omitted on the final page; meta.total carries the count and meta.as_of the snapshot timestamp.

Compression

All /v1/fnd/us/* responses negotiate gzip when the client sends Accept-Encoding: gzip. Three heavy endpoints, /financials/:ticker, /financials/:ticker/:concept, /screener/:concept/:period, require gzip and return 406 gzip_required if the client didn't ask for it.

Fundamentals · Discovery

Fundamentals · Discovery

Resolve a company across the SEC's US ticker registry and pull its profile, name, CIK, exchanges, SIC industry, and fiscal year end.

GET/v1/fnd/us/companies/:ticker

Company profile

Name, exchange listings, SIC industry classification, fiscal year end, and entity type for a single issuer.

Parameters · 1click to expand
  • tickerpathstringrequired

    Ticker symbol. Case-insensitive (AAPL, aapl, Aapl all resolve identically).

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/fnd/us/companies/AAPL"
200 OK · application/json
{
  "ticker": "AAPL",
  "cik": "0000320193",
  "name": "Apple Inc.",
  "exchanges": ["Nasdaq"],
  "other_tickers": [],
  "sic_code": "3571",
  "sic_description": "Electronic Computers",
  "entity_type": "operating",
  "fiscal_year_end": "0928"
}
Fundamentals · SEC filings

Fundamentals · SEC filings

Form metadata for every recent SEC filing. Ten-K / 10-Q / 8-K / DEF 14A / SC 13D-G, listed, fetched by accession, and filtered by form or item code.

GET/v1/fnd/us/sec-filings/:ticker

Recent SEC filings

Up to 1000 most recent filings across all form types for a company. Filterable by form and filing-date window.

Parameters · 6click to expand
  • tickerpathstringrequired

    Ticker symbol (case-insensitive).

  • formquerystringoptional

    Comma-separated list of exact form types, e.g. 10-K,10-Q,10-K/A.

  • fromquerydateoptional

    Inclusive lower bound on filed_at (YYYY-MM-DD).

  • toquerydateoptional

    Inclusive upper bound on filed_at (YYYY-MM-DD).

  • limitqueryintegeroptional

    Page size. Default 50, max 200.

  • cursorquerystringoptional

    Opaque cursor from meta.next_cursor on the previous page.

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/fnd/us/sec-filings/AAPL?form=10-K&limit=10"
200 OK · application/json
{
  "data": [
    {
      "accession": "0000320193-26-000013",
      "form": "10-Q",
      "filed_at": "2026-05-01",
      "period_end": "2026-03-28",
      "accepted_at": "2026-05-01T16:30:21Z",
      "items": "",
      "primary_document_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000013/aapl-20260328.htm",
      "description": "Form 10-Q",
      "has_xbrl": true
    }
  ],
  "meta": { "next_cursor": "eyJvIjo1MH0", "as_of": "2026-05-02T12:34:56Z", "total": 1000 }
}
GET/v1/fnd/us/sec-filings/:ticker/:accession

Single filing detail

One filing's metadata plus the full file manifest from its EDGAR archive folder.

Parameters · 2click to expand
  • tickerpathstringrequired

    Ticker symbol (case-insensitive).

  • accessionpathstringrequired

    Accession number, accepts dashed (0000320193-26-000013) or undashed (000032019326000013).

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/fnd/us/sec-filings/AAPL/0000320193-26-000013"
200 OK · application/json
{
  "accession": "0000320193-26-000013",
  "form": "10-Q",
  "filed_at": "2026-05-01",
  "period_end": "2026-03-28",
  "accepted_at": "2026-05-01T16:30:21Z",
  "primary_document_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000013/aapl-20260328.htm",
  "description": "Form 10-Q",
  "has_xbrl": true,
  "ticker": "AAPL",
  "cik": "0000320193",
  "archive_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000013/",
  "files": ["aapl-20260328.htm", "aapl-20260328.xsd", "Financial_Report.xlsx", "..."]
}
GET/v1/fnd/us/events/:ticker

8-K material events

8-K filings for material corporate events. Optionally filter by item code (substring match).

Parameters · 4click to expand
  • tickerpathstringrequired

    Ticker symbol (case-insensitive).

  • itemquerystringoptional

    Substring match against the comma-joined 8-K item codes for the filing (e.g. 2.02 to find earnings releases).

  • limitqueryintegeroptional

    Page size. Default 50, max 200.

  • cursorquerystringoptional

    Opaque cursor from the previous page.

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/fnd/us/events/AAPL?item=2.02&limit=10"
200 OK · application/json
{
  "data": [
    {
      "accession": "0000320193-26-000010",
      "filed_at": "2026-04-25",
      "accepted_at": "2026-04-25T16:32:11Z",
      "items": ["2.02", "9.01"],
      "primary_document_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000010/aapl8-k.htm",
      "description": "Form 8-K"
    }
  ],
  "meta": { "next_cursor": "eyJvIjo1MH0", "as_of": "2026-05-02T12:34:56Z", "total": 124 }
}
Common 8-K item codes
1.01
Entry into a material definitive agreement
2.02
Results of operations and financial condition (earnings)
5.02
Departure / election / appointment of officers / directors
7.01
Regulation FD disclosure
8.01
Other events
9.01
Financial statements and exhibits
GET/v1/fnd/us/ownership/:ticker

Schedule 13D / 13G beneficial ownership

Filings (and amendments) triggered when an investor crosses the 5% beneficial-ownership threshold. v1 returns metadata + canonical document URL; body parsing is deferred.

Parameters · 3click to expand
  • tickerpathstringrequired

    Ticker symbol (case-insensitive).

  • limitqueryintegeroptional

    Page size. Default 50, max 200.

  • cursorquerystringoptional

    Opaque cursor from the previous page.

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/fnd/us/ownership/AAPL"
200 OK · application/json
{
  "data": [
    {
      "form": "SC 13G/A",
      "accession": "0001104659-26-012345",
      "filed_at": "2026-02-12",
      "primary_document_url": "https://www.sec.gov/Archives/edgar/data/320193/000110465926012345/sc13ga.htm",
      "description": "Amendment No. 5"
    }
  ],
  "meta": { "next_cursor": null, "as_of": "2026-05-02T12:34:56Z", "total": 18 }
}
GET/v1/fnd/us/compensation/:ticker

DEF 14A proxy statements

DEF 14A filings (and amendments / additional definitive material). v1 ships metadata + canonical document URL; HTML body parsing for summary compensation tables is deferred.

Parameters · 3click to expand
  • tickerpathstringrequired

    Ticker symbol (case-insensitive).

  • limitqueryintegeroptional

    Page size. Default 50, max 200.

  • cursorquerystringoptional

    Opaque cursor from the previous page.

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/fnd/us/compensation/AAPL"
200 OK · application/json
{
  "data": [
    {
      "form": "DEF 14A",
      "accession": "0000320193-26-000005",
      "filed_at": "2026-01-08",
      "period_end": "2026-02-28",
      "primary_document_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000005/aapl-2026def14a.htm"
    }
  ],
  "meta": { "next_cursor": null, "as_of": "2026-05-02T12:34:56Z", "total": 12 }
}
GET/v1/fnd/us/earnings/:ticker

Earnings release history

Every 8-K filed with item 2.02 ('Results of Operations and Financial Condition') for this company, the canonical timeline of when this company has reported earnings.

Parameters · 3click to expand
  • tickerpathstringrequired

    Ticker symbol (case-insensitive).

  • limitqueryintegeroptional

    Page size. Default 50, max 200.

  • cursorquerystringoptional

    Opaque cursor from the previous page.

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/fnd/us/earnings/AAPL?limit=20"
200 OK · application/json
{
  "data": [
    {
      "accession": "0000320193-25-000077",
      "filed_at": "2025-10-30",
      "accepted_at": "2025-10-30T16:30:11Z",
      "items": ["2.02", "9.01"],
      "primary_document_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000077/aapl-20250930.htm",
      "description": "Form 8-K"
    }
  ],
  "meta": { "next_cursor": "eyJvIjo1MH0", "as_of": "2026-05-02T12:34:56Z", "total": 124 }
}
Scope
Historical only
Does not predict the next earnings date. Consensus estimates and forward calendars come from press-release / IR-page scraping (paid-vendor territory).
vs /events
Same plumbing as /events/:ticker but pre-filtered to item=2.02, use this when you specifically want earnings releases.
Fundamentals · Filing text & analysis

Fundamentals · Filing text & analysis

Extracted, machine-readable text from 10-K / 10-Q HTML, Risk Factors, MD&A, Business, Legal Proceedings, Market Risk, plus a year-over-year diff of Risk Factors so you can answer 'what changed?' without reading the full filing.

Section codes (10-K / 10-Q)
business
Item 1, Business overview · 10-K
risk-factors
Item 1A, Risk Factors · 10-K, sometimes 10-Q
legal-proceedings
Item 3, Legal Proceedings · 10-K
mda
Item 7 (10-K) or Item 2 (10-Q), Management's Discussion & Analysis
market-risk
Item 7A, Quantitative & Qualitative Disclosures About Market Risk · 10-K
GET/v1/fnd/us/sec-filings/:ticker/:accession/sections

Extract every section

Returns every standard 10-K / 10-Q item we could extract from a filing's primary HTML, as clean text. Missing keys mean we couldn't locate that section in this particular filing, extraction is best-effort, SEC HTML formatting varies.

Parameters · 2click to expand
  • tickerpathstringrequired

    Ticker symbol (case-insensitive).

  • accessionpathstringrequired

    Accession number, accepts dashed (0000320193-25-000079) or undashed.

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/fnd/us/sec-filings/AAPL/0000320193-25-000079/sections"
200 OK · application/json
{
  "ticker": "AAPL",
  "cik": "0000320193",
  "accession": "0000320193-25-000079",
  "form": "10-K",
  "filed_at": "2025-10-31",
  "sections": [
    {
      "section": "business",
      "content": "Apple Inc. designs, manufactures and markets smartphones..."
    },
    {
      "section": "risk-factors",
      "content": "The following summarizes factors that could have a material adverse effect on the Company's business..."
    }
  ]
}
GET/v1/fnd/us/sec-filings/:ticker/:accession/sections/:section

Extract one section

Same data as /sections but returns just one section. Smaller payload, drop straight into a single LLM prompt.

Parameters · 3click to expand
  • tickerpathstringrequired

    Ticker symbol (case-insensitive).

  • accessionpathstringrequired

    Accession number, dashed or undashed.

  • sectionpathenumrequired

    business | risk-factors | legal-proceedings | mda | market-risk.

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/fnd/us/sec-filings/AAPL/0000320193-25-000079/sections/risk-factors"
200 OK · application/json
{
  "ticker": "AAPL",
  "cik": "0000320193",
  "accession": "0000320193-25-000079",
  "form": "10-K",
  "filed_at": "2025-10-31",
  "section": "risk-factors",
  "content": "The following summarizes factors that could have a material adverse effect on the Company's business, reputation, results of operations, financial condition and stock price..."
}
Error responses
400 invalid_section
:section not in the allowed list, body includes valid_options
404 section_not_found
Section couldn't be extracted from this filing, body includes available (sections that *were* extracted)
GET/v1/fnd/us/risk-factors-diff/:ticker

Risk Factors year-over-year diff

Compares the latest 10-K's Risk Factors against the prior year's. Paragraph-level diff with three buckets: added, removed, modified, the killer 'what changed in this company's risk profile' answer without analyst-hours of reading.

Parameters · 1click to expand
  • tickerpathstringrequired

    Ticker symbol (case-insensitive).

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/fnd/us/risk-factors-diff/AAPL"
200 OK · application/json
{
  "ticker": "AAPL",
  "cik": "0000320193",
  "current": {
    "accession": "0000320193-25-000079",
    "form": "10-K",
    "filed_at": "2025-10-31",
    "period_end": "2025-09-27"
  },
  "previous": {
    "accession": "0000320193-24-000123",
    "form": "10-K",
    "filed_at": "2024-11-01",
    "period_end": "2024-09-28"
  },
  "diff": {
    "added": [
      "The Company's increased reliance on AI services exposes it to..."
    ],
    "removed": [
      "Risks related to the COVID-19 pandemic..."
    ],
    "modified": [
      {
        "before": "Uncertainty about, or a decline in, global or regional economic conditions can have a significant impact...",
        "after": "In addition to an adverse impact on demand for the Company's products and services, uncertainty about..."
      }
    ],
    "stats": {
      "before_paragraphs": 110,
      "after_paragraphs": 101,
      "unchanged_count": 55,
      "added_count": 7,
      "removed_count": 16,
      "modified_count": 39
    }
  }
}
Methodology
matching
Paragraphs matched by Jaccard token similarity
> 0.92
Treated as unchanged
> 0.50
Same risk factor, edited (modified)
< 0.50
Added or removed
10-K only
10-Qs commonly say 'no material changes' → empty diffs. Annual is the meaningful unit for risk-factor change tracking.
Fundamentals · Financials (XBRL)

Fundamentals · Financials (XBRL)

Standardized XBRL concept data extracted from 10-K / 10-Q filings. Pull the full bundle, a single concept across periods, or a cross-sectional snapshot for one concept across every filer.

SEC calendar period codes
CY2024Q1
Duration · Q1 of calendar year 2024
CY2024Q1I
Instantaneous · end of Q1 2024 (balance-sheet items)
CY2024
Full calendar year 2024 (duration)
GET/v1/fnd/us/financials/:tickergzip required

Full XBRL bundle

Every reported XBRL concept for a company across every period and unit. Payload is large (5+ MB for a mature filer); strictly requires Accept-Encoding: gzip.

Parameters · 2click to expand
  • tickerpathstringrequired

    Ticker symbol (case-insensitive).

  • Accept-Encodingheaderstringrequired

    Must include gzip; otherwise the endpoint returns 406 gzip_required.

request · shell
curl -H "X-API-Key: $KEY" -H "Accept-Encoding: gzip" --compressed \
  "https://api.sifting.io/v1/fnd/us/financials/AAPL"
200 OK · application/json (gzip)
{
  "ticker": "AAPL",
  "cik": "0000320193",
  "name": "Apple Inc.",
  "concepts": [
    {
      "taxonomy": "us-gaap",
      "concept": "Revenues",
      "label": "Revenues",
      "description": "Aggregate revenue recognized...",
      "series": [
        {
          "value": 94836000000,
          "unit": "USD",
          "period_start": "2024-01-01",
          "period_end": "2024-03-30",
          "fiscal_year": 2024,
          "fiscal_period": "Q2",
          "form": "10-Q",
          "accession": "0000320193-24-000089",
          "filed_at": "2024-05-02"
        }
      ]
    }
  ]
}
GET/v1/fnd/us/financials/:ticker/:conceptgzip required

Single concept across periods

One XBRL concept across every reported period for a company. Smaller than the full bundle but still gzip-required.

Parameters · 4click to expand
  • tickerpathstringrequired

    Ticker symbol (case-insensitive).

  • conceptpathstringrequired

    XBRL tag in CamelCase (e.g. Revenues, EarningsPerShareBasic, EntityCommonStockSharesOutstanding).

  • taxonomyqueryenumoptional

    us-gaap (default) | dei | ifrs-full | srt.

  • Accept-Encodingheaderstringrequired

    Must include gzip.

request · shell
curl -H "X-API-Key: $KEY" -H "Accept-Encoding: gzip" --compressed \
  "https://api.sifting.io/v1/fnd/us/financials/AAPL/Revenues"
200 OK · application/json (gzip)
{
  "ticker": "AAPL",
  "cik": "0000320193",
  "taxonomy": "us-gaap",
  "concept": "Revenues",
  "label": "Revenues",
  "description": "Aggregate revenue recognized during the period...",
  "series": [
    {
      "value": 94836000000,
      "unit": "USD",
      "period_start": "2024-01-01",
      "period_end": "2024-03-30",
      "fiscal_year": 2024,
      "fiscal_period": "Q2",
      "form": "10-Q",
      "accession": "0000320193-24-000089",
      "filed_at": "2024-05-02"
    }
  ]
}
GET/v1/fnd/us/screener/:concept/:periodgzip required

Cross-sectional screener

Every filer's reported value for one concept in one period. The screener primitive, answer 'who reported the highest Revenue in Q1 2024?' in a single call.

Parameters · 7click to expand
  • conceptpathstringrequired

    XBRL tag (e.g. Revenues, Assets).

  • periodpathstringrequired

    SEC calendar period code (see legend below).

  • taxonomyqueryenumoptional

    us-gaap (default) | dei | ifrs-full | srt.

  • unitquerystringoptional

    Unit filter. Default USD. Other examples: shares, USD/shares, pure.

  • limitqueryintegeroptional

    Page size. Default 50, max 200.

  • cursorquerystringoptional

    Opaque cursor from the previous page.

  • Accept-Encodingheaderstringrequired

    Must include gzip.

request · shell
curl -H "X-API-Key: $KEY" -H "Accept-Encoding: gzip" --compressed \
  "https://api.sifting.io/v1/fnd/us/screener/Revenues/CY2024Q1?unit=USD&limit=100"
200 OK · application/json (gzip)
{
  "taxonomy": "us-gaap",
  "concept": "Revenues",
  "period": "CY2024Q1",
  "unit": "USD",
  "label": "Revenues",
  "rows": [
    {
      "cik": "0000320193",
      "name": "Apple Inc.",
      "value": 90753000000,
      "unit": "USD",
      "period_end": "2024-03-30",
      "accession": "0000320193-24-000089"
    }
  ],
  "meta": { "next_cursor": "eyJvIjo1MH0", "as_of": "2026-05-02T12:34:56Z", "total": 4823 }
}
GET/v1/fnd/us/ratios/:ticker

Fundamental ratios

Standard fundamental ratios computed from XBRL data, across every reported period (newest-first). Pure XBRL, no stock-price-dependent ratios (P/E, P/B, EV/EBITDA) since this version doesn't carry equity prices.

Parameters · 1click to expand
  • tickerpathstringrequired

    Ticker symbol (case-insensitive).

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/fnd/us/ratios/AAPL"
200 OK · application/json
{
  "ticker": "AAPL",
  "cik": "0000320193",
  "latest": {
    "fiscal_year": 2026,
    "fiscal_period": "Q2",
    "period_end": "2025-03-29",
    "form": "10-Q",
    "accession": "0000320193-26-000013",
    "gross_margin": 0.4696,
    "operating_margin": 0.3297,
    "net_margin": 0.2782,
    "return_on_equity": 1.0730,
    "return_on_assets": 0.1701,
    "debt_to_equity": 5.0133,
    "current_ratio": 0.8933,
    "quick_ratio": 0.8588,
    "asset_turnover": 0.6115,
    "free_cash_flow": 47876000000,
    "fcf_margin": 0.2180
  },
  "history": [
    {
      "fiscal_year": 2026,
      "fiscal_period": "Q2",
      "period_end": "2025-03-29",
      "gross_margin": 0.4696,
      "...": "..."
    },
    {
      "fiscal_year": 2026,
      "fiscal_period": "Q1",
      "period_end": "2024-12-28",
      "gross_margin": 0.4691,
      "...": "..."
    }
  ]
}
Ratios returned per period
gross_margin
GrossProfit / Revenues
operating_margin
OperatingIncomeLoss / Revenues
net_margin
NetIncomeLoss / Revenues
return_on_equity
NetIncome / StockholdersEquity
return_on_assets
NetIncome / Assets
debt_to_equity
TotalLiabilities / StockholdersEquity
current_ratio
CurrentAssets / CurrentLiabilities
quick_ratio
(CurrentAssets − Inventory) / CurrentLiabilities
asset_turnover
Revenues / Assets
free_cash_flow
OperatingCashFlow − Capex (whole USD, not thousands)
fcf_margin
FreeCashFlow / Revenues
Format
decimal
All ratios are decimal, 0.4696 means 46.96%
null fields
Underlying XBRL concept wasn't reported, or denominator was zero
history cadence
Quarterly (Q1–Q4) and full-year (FY) periods are interleaved, filter by fiscal_period for one cadence
latest
Convenience pointer to history[0], same content, so single-card UIs don't need to index in
Fundamentals · Insiders & holdings

Fundamentals · Insiders & holdings

Form 3 / 4 / 5 ownership filings parsed into row-per-transaction shape, and 13F-HR institutional positions for any manager.

GET/v1/fnd/us/insiders/:ticker

Insider transactions (Form 3 / 4 / 5)

Insider ownership filings parsed into a flat row-per-transaction view. Each Form 4 produces one or more rows, buys, sales, grants, option exercises, gifts, and tax withholdings.

Parameters · 3click to expand
  • tickerpathstringrequired

    Ticker symbol (case-insensitive).

  • limitqueryintegeroptional

    Page size. Default 10, max 25, each filing in the page may trigger one upstream XML fetch on cold cache.

  • cursorquerystringoptional

    Opaque cursor from the previous page.

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/fnd/us/insiders/AAPL?limit=20"
200 OK · application/json
{
  "data": [
    {
      "accession": "0001140361-26-017175",
      "filed_at": "2026-04-25",
      "reporter": "MAESTRI LUCA",
      "reporter_cik": "0001513362",
      "roles": ["officer"],
      "officer_title": "Senior Vice President, CFO",
      "security": "Common Stock",
      "transaction_date": "2026-04-23",
      "transaction_code": "S",
      "transaction_description": "Open-market sale",
      "direction": "disposed",
      "shares": 1534,
      "price_per_share": 275,
      "notional_usd": 421850,
      "shares_owned_after": 13366,
      "ownership": "direct",
      "derivative": false
    }
  ],
  "meta": { "next_cursor": "eyJvIjoxMH0", "as_of": "2026-05-02T12:34:56Z", "total": 240 }
}
transaction_code legend
P
Purchase
S
Sale
A
Grant or award
M
Option exercise
F
Tax withholding
G
Gift
D
Disposition to issuer
X
Option exercise (expiring)
C
Derivative conversion
J
Other
Enums
roles
any subset of [director, officer, ten_percent_owner, other]
ownership
direct | indirect
direction
acquired | disposed
GET/v1/fnd/us/holdings/:filer

13F-HR institutional holdings

Latest 13F-HR positions for an institutional manager. Accepts a ticker (if the manager is also a public issuer) or a CIK (for managers not in the SEC ticker map).

Parameters · 3click to expand
  • filerpathstringrequired

    Ticker (e.g. BRK.B for Berkshire) or CIK (e.g. 1037389 for Renaissance Technologies).

  • limitqueryintegeroptional

    Page size. Default 50, max 200.

  • cursorquerystringoptional

    Opaque cursor from the previous page.

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/fnd/us/holdings/BRK.B"
200 OK · application/json
{
  "filer_cik": "0001067983",
  "filer_name": "BERKSHIRE HATHAWAY INC",
  "accession": "0000950123-26-001234",
  "filed_at": "2026-02-14",
  "period_end": "2025-12-31",
  "total_value_usd": 312456000000,
  "positions": [
    {
      "issuer": "APPLE INC",
      "security_type": "COM",
      "cusip": "037833100",
      "value_usd": 75123000000,
      "shares": 280000000,
      "shares_type": "SH",
      "discretion": "DFND"
    }
  ],
  "meta": { "next_cursor": "eyJvIjo1MH0", "as_of": "2026-05-02T12:34:56Z", "total": 47 }
}
Fundamentals · Economic calendar

Fundamentals · Economic calendar

Upcoming US economic events sourced from official agency calendars, 25 events across 11 source agencies (BLS, BEA, Census, Fed, DOL, EIA, ISM, Conference Board, UMich, NAR, Treasury). Updated hourly, schedule entries appear within 60 minutes of the source agency publishing them.

Current coverage · 25 events
us_nfp
Nonfarm Payrolls · BLS · high · monthly (1st Fri) · 08:30 ET
us_unemployment_rate
Unemployment Rate · BLS · high · monthly (with NFP) · 08:30 ET
us_cpi
Consumer Price Index · BLS · high · monthly · 08:30 ET
us_ppi
Producer Price Index · BLS · medium · monthly · 08:30 ET
us_jolts
JOLTS Job Openings · BLS · medium · monthly · 10:00 ET
us_jobless_claims
Initial Jobless Claims · DOL · medium · weekly (Thu) · 08:30 ET
us_gdp
GDP · BEA · high · quarterly (3 estimates) · 08:30 ET
us_pce
PCE Price Index · BEA · high · monthly · 08:30 ET
us_personal_income
Personal Income & Outlays · BEA · medium · monthly · 08:30 ET
us_trade_balance
Trade Balance · BEA · medium · monthly · 08:30 ET
us_retail_sales
Retail Sales · Census · high · monthly · 08:30 ET
us_durable_goods
Durable Goods Orders · Census · medium · monthly · 08:30 ET
us_housing_starts
Housing Starts · Census · medium · monthly · 08:30 ET
us_new_home_sales
New Home Sales · Census · medium · monthly · 10:00 ET
us_fomc_decision
FOMC Rate Decision · Fed · high · 8 per year · 14:00 ET
us_fomc_minutes
FOMC Minutes · Fed · high · 8 per year · 14:00 ET
us_fed_speakers
Fed Speakers · Fed · medium · irregular · varies
us_beige_book
Beige Book · Fed · low · 8 per year · 14:00 ET
us_ism_manufacturing
ISM Manufacturing PMI · ISM · high · monthly · 10:00 ET
us_ism_services
ISM Services PMI · ISM · high · monthly · 10:00 ET
us_consumer_confidence
Conference Board Consumer Confidence · ConferenceBoard · medium · monthly · 10:00 ET
us_michigan_sentiment
University of Michigan Sentiment · UMich · medium · monthly (prelim + final) · 10:00 ET
us_existing_home_sales
Existing Home Sales · NAR · medium · monthly · 10:00 ET
us_crude_inventories
EIA Crude Oil Inventories · EIA · low · weekly (Wed) · 10:30 ET
us_treasury_auction
Treasury Auctions (10Y, 30Y) · Treasury · low · per refunding cycle · 13:00 ET
GET/v1/fnd/us/economic-calendar

Upcoming US economic events

Schedule of upcoming US economic releases, CPI, NFP, FOMC, GDP, etc., sourced from official agency calendars. Filter by date range, impact tier, agency, or specific event_id. All parameters are optional; defaults return the next 30 days of US events ordered by scheduled_at.

Parameters · 7click to expand
  • fromqueryISO date / RFC3339optional

    Inclusive lower bound on scheduled_at. Defaults to now (UTC). Accepts 2026-05-13 (interpreted as midnight UTC) or 2026-05-13T12:30:00Z.

  • toqueryISO date / RFC3339optional

    Exclusive upper bound on scheduled_at. Defaults to from + 30 days. Must be strictly after from. Max range = 365 days.

  • countryquerystring (ISO 3166-1 α-2)optional

    Filter by country code. Default US, only US events at launch.

  • impactqueryenumoptional

    low | medium | high, relative market-impact tier.

  • agencyqueryenumoptional

    BLS | BEA | Census | Fed | DOL | EIA | ISM | ConferenceBoard | UMich | NAR | Treasury, issuing agency.

  • event_idquerystringoptional

    Recurring event identifier (e.g. us_cpi). See the coverage table above for valid IDs.

  • limitqueryintegeroptional

    Page size, 1–500. Default 100.

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/fnd/us/economic-calendar?impact=high&limit=10"
200 OK · application/json
{
  "events": [
    {
      "event_id": "us_cpi",
      "name": "US Consumer Price Index",
      "country": "US",
      "currency": "USD",
      "agency": "BLS",
      "impact": "high",
      "scheduled_at": "2026-05-13T12:30:00Z",
      "actual": null,
      "previous": null,
      "consensus": null,
      "released_at": null
    },
    {
      "event_id": "us_fomc_decision",
      "name": "FOMC Rate Decision",
      "country": "US",
      "currency": "USD",
      "agency": "Fed",
      "impact": "high",
      "scheduled_at": "2026-06-17T18:00:00Z",
      "actual": null,
      "previous": null,
      "consensus": null,
      "released_at": null
    }
  ],
  "count": 2,
  "filter": {
    "from": "2026-05-04T00:00:00Z",
    "to": "2026-06-30T00:00:00Z",
    "country": "US",
    "impact": "high",
    "agency": "",
    "event_id": "",
    "limit": 100
  }
}
Field reference
event_id
Stable identifier for the recurring event, same value for every monthly recurrence
name
Human-readable label
country
ISO 3166-1 α-2 code
currency
Most-affected currency (ISO 4217)
agency
Issuing agency
impact
low / medium / high, market-impact tier
scheduled_at
RFC3339 UTC timestamp, official scheduled release time
actual / previous / consensus / released_at
Currently null, populated as release-page parsers and consensus aggregation ship
count
Number of events returned
filter
Echo of the applied filter, including resolved defaults
Caching & sort
sort
Always ascending by scheduled_at
Server-side (Redis)
5 minutes per unique filter, upper bound on how long a newly-published date takes to surface
HTTP
Cache-Control: public, max-age=60
Rate limits by tier
Free
30 calls/minute · 5,000 calls/day
Pro
300 calls/minute · 100,000 calls/day
Business
1,500 calls/minute · unlimited per day
429
Too Many Requests with a Retry-After header on overage
Example variations
all CPI · year
?event_id=us_cpi&from=2026-05-04&to=2026-12-31
Fed · next month
?agency=Fed&from=2026-06-01&to=2026-07-01
top 10 upcoming
?limit=10
Live market data

Live market data

Real-time tick projections served from Redis (written by MarketEngine, our central market-data ingestion service). Tiny payloads using the Type0 short field names (s, p, b, a, t…). Cache-Control: no-store on every response so edges never serve stale ticks.

Venues
crypto
Centralised crypto exchanges (Binance, Coinbase, Kraken, …)
forex
FX feeds
Symbol format
shape
6–12 uppercase alphanumeric, no separators
good
BTCUSDT, ETHUSDC, EURUSD
bad
BTC-USDT, BTC/USD
GET/v1/last/trade/:venue/:symbol

Last trade

Latest trade snapshot, symbol, price, size, exchange timestamp. Returns 503 with last_t if the underlying snapshot is older than the staleness threshold (default 5s).

Parameters · 2click to expand
  • venuepathenumrequired

    crypto | forex. (DEX & DeFi has its own dedicated endpoints below.)

  • symbolpathstringrequired

    6–12 uppercase alphanumeric, no separators (e.g. BTCUSDT). Input is upper-cased before validation.

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/last/trade/crypto/BTCUSDT"
200 OK · application/json
{
  "s": "BTCUSDT",
  "p": "67234.5",
  "P": "0.00432",
  "t": 1746189123456
}
Field key
s
symbol · string
p
last trade price · string (precision-trimmed)
P
last trade size · string
t
exchange timestamp · int64 (Unix epoch ms)
GET/v1/last/quote/:venue/:symbol

Last top-of-book quote

Latest best bid / bid size / ask / ask size / timestamp for a symbol. Same staleness semantics as /trade.

Parameters · 2click to expand
  • venuepathenumrequired

    crypto | forex. (DEX & DeFi has its own dedicated endpoints below.)

  • symbolpathstringrequired

    6–12 uppercase alphanumeric, no separators.

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/last/quote/forex/EURUSD"
200 OK · application/json
{
  "b": "67234.4",
  "B": "1.234",
  "a": "67234.6",
  "A": "0.987",
  "t": 1746189123456
}
Field key
b
best bid price · string (precision-trimmed)
B
best bid size · string
a
best ask price · string (precision-trimmed)
A
best ask size · string
t
exchange timestamp · int64 (Unix epoch ms)
Live · DEX & DeFi

Live · DEX & DeFi

Real-time on-chain market data. Cross-chain aggregated trade/quote per symbol (one number per symbol, computed across every supported pool on every supported chain), plus per-pair, per-chain total value locked. Cache-Control: no-store on every response.

Chain whitelist
eth
Ethereum mainnet
base
Base
arbitrum
Arbitrum One
bsc
BNB Smart Chain
polygon
Polygon PoS
USD valuation (TVL)
Volatile assets
Priced against the CEX reference for the asset (e.g. WETH ← price:crypto:cex:ETHUSDT)
Stablecoins
Pinned at $1
Pool USD
Sum of both leg valuations, 100 WETH + 200k USDC at ETH=$3,400 → usd ≈ 540,000
GET/v1/last/trade/dex/:symbol

Last DEX trade

Cross-chain aggregated last trade for a DEX symbol, one number computed across every pool MarketEngine tracks for that symbol on every supported chain.

Parameters · 1click to expand
  • symbolpathstringrequired

    6–12 uppercase alphanumeric, no separator (e.g. ETHUSDT, WBTCUSDT).

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/last/trade/dex/ETHUSDT"
200 OK · application/json
{
  "s": "ETHUSDT",
  "p": "3421.85",
  "P": "0.512",
  "t": 1777813200526
}
Field key
s
symbol · string
p
last trade price (USD) · string
P
last trade size (base units) · string
t
timestamp · int64 (Unix epoch ms)
GET/v1/last/quote/dex/:symbol

Last DEX quote

Best bid/ask for a DEX symbol, derived from AMM pool depth at the current reserves. DEX pools have no traditional order book, bid/ask reflect the fill price for a small marketable order.

Parameters · 1click to expand
  • symbolpathstringrequired

    6–12 uppercase alphanumeric, no separator (e.g. ETHUSDT).

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/last/quote/dex/ETHUSDT"
200 OK · application/json
{
  "b": "3421.40",
  "B": "0.85",
  "a": "3422.30",
  "A": "0.91",
  "t": 1777813200526
}
Field key
b / a
best bid / ask price (USD) · string
B / A
bid / ask size at the top of book · string
t
timestamp · int64 (Unix epoch ms)
GET/v1/last/tvl/:chain/:pair

Aggregated TVL · per chain, per pair

Total value locked for a specific token pair on a specific chain. Sums across every pool MarketEngine tracks for that pair on that chain (Uniswap v2/v3 across fee tiers, Curve, etc.).

Parameters · 2click to expand
  • chainpathenumrequired

    eth | base | arbitrum | bsc | polygon, see chain whitelist above.

  • pairpathstringrequired

    TOKEN0-TOKEN1, single hyphen separator. Each leg is 3–10 uppercase alphanumeric (e.g. WETH-USDC).

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/last/tvl/polygon/WETH-USDC"
200 OK · application/json
{
  "chain": "polygon",
  "pair": "WETH-USDC",
  "usd": "231543.82179",
  "r0": "153.96483",
  "r1": "231543.82179",
  "n": 1,
  "v": 1,
  "t": 1777813200526
}
Field key
chain
echoed chain segment
pair
echoed pair
usd
total USD value locked across all contributing pools (string, full precision)
r0 / r1
summed reserves of token0 / token1 (raw token units)
n
number of pools contributing to this aggregation
v
schema version
t
timestamp · int64 (Unix epoch ms)
Fundamentals · DEX wallets

Fundamentals · DEX wallets

Per-wallet, per-chain portfolio holdings on supported EVM networks. Native coin and ERC-20 token balances with metadata (symbol, decimals, name, logo) attached to each row. Powers wallet dashboards, portfolio trackers, treasury monitoring, and address-level analytics.

Native coin per chain
eth
ETH · 18 decimals
base
ETH · 18 decimals
arbitrum
ETH · 18 decimals
bsc
BNB · 18 decimals
polygon
MATIC · 18 decimals
GET/v1/fnd/dex/wallet/:chain/:address

Wallet portfolio

Native-coin and ERC-20 token holdings for one wallet on one EVM chain. The native row only appears when the wallet has a non-zero native balance.

Parameters · 2click to expand
  • chainpathenumrequired

    eth | base | arbitrum | bsc | polygon.

  • addresspathstringrequired

    EVM wallet address. Must be 0x followed by 40 hex characters. Case-insensitive (canonicalised to lowercase server-side).

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/fnd/dex/wallet/eth/0x742d35cc6634c0532925a3b844bc9e7595f0beb1"
200 OK · application/json
{
  "chain": "eth",
  "address": "0x742d35cc6634c0532925a3b844bc9e7595f0beb1",
  "tokens": [
    {
      "symbol": "ETH",
      "name": "Ether",
      "decimals": 18,
      "raw_balance": "2345600000000000000",
      "balance": "2.3456",
      "native": true
    },
    {
      "contract_address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
      "symbol": "USDC",
      "name": "USD Coin",
      "decimals": 6,
      "logo": "https://static.alchemyapi.io/images/assets/3408.png",
      "raw_balance": "5000000",
      "balance": "5"
    }
  ],
  "count": 2,
  "updated_at": 1746230400
}
Top-level fields
chain
Echoed chain segment, lowercase
address
Echoed wallet address, lowercase
tokens
One row per non-zero holding, native first when present
count
Length of tokens
updated_at
Unix epoch (seconds, UTC) when the snapshot was assembled upstream
Token row fields
contract_address
ERC-20 contract address. Omitted for the native row.
symbol
Token symbol (e.g. USDC, WETH). Rows with no resolvable symbol are dropped.
name
Full token name
decimals
Decimal places for converting raw_balance → balance
logo
Token logo URL when known. May be empty.
raw_balance
On-chain integer balance as a decimal string (no scaling). Stable for clients that need exact arithmetic.
balance
Human-readable balance: raw_balance / 10^decimals, trailing zeros trimmed.
native
true for the chain's native gas coin (ETH, BNB, MATIC). Omitted for ERC-20 rows.
v1 caveats
Precision
raw_balance and balance are strings to preserve precision. Don't parse as floats; use a big-integer / decimal library for math.
No USD valuation
balance is denominated in the token's own units. USD valuation is a planned follow-up that bolts onto the existing rows.
One chain per call
A multi-chain portfolio means one call per chain in eth | base | arbitrum | bsc | polygon.
Spam tokens
Rows with no resolvable metadata are dropped, but no spam denylist is applied.
No NFTs
ERC-721 / ERC-1155 are not included.
Error reference

Error reference

Every error response carries a JSON body with an error code and a human-readable message. HTTP status follows standard conventions; the error code (snake_case) is the stable machine-readable identifier you should switch on.

error envelope · application/json
{ "error": "error_code", "message": "human-readable details" }
  • 400(raw message)

    Malformed query, invalid cursor, bad limit, missing required parameter.

  • 401unauthorized

    API key missing or invalid.

  • 403(raw message)

    Authenticated but not entitled, your subscription doesn't include this product or market.

  • 404unknown_ticker

    :ticker not in the SEC's US ticker registry.

  • 404unknown_filer

    :filer (ticker or CIK) not found.

  • 404filing_not_found

    Specific accession isn't in this filer's recent-filings window.

  • 404no_13f_filings

    Filer has never filed 13F-HR.

  • 404not_found

    Concept / period / unit combination has no data, or symbol absent from live feed.

  • 404section_not_found

    Requested filing section couldn't be extracted, body includes `available` (sections that were extracted).

  • 404insufficient_filings

    Risk-factors diff needs ≥ 2 10-Ks; this filer has fewer on record.

  • 400invalid_section

    :section not in the allowed list, body includes `valid_options`.

  • 400invalid_accession_format

    Accession number didn't match the dashed/undashed shape.

  • 400invalid_date_range

    Economic calendar: `to` must be strictly after `from`, range capped at 365 days.

  • 406gzip_required

    Heavy endpoint called without Accept-Encoding: gzip.

  • 422risk_factors_unavailable

    Item 1A couldn't be extracted from one or both 10-K filings being diffed.

  • 429rate_limit_exceeded

    Per-tier rate budget exhausted, inspect Retry-After.

  • 502upstream_error

    SEC EDGAR returned non-2xx.

  • 502malformed_upstream

    SEC EDGAR returned an invalid payload, or live snapshot couldn't be parsed.

  • 503stale_snapshot

    Live snapshot older than the configured threshold (default 5s). Body carries last_t and server_now.

  • 503upstream_rate_limited

    SEC EDGAR throttled our edge, retry shortly.

Rate limits

Rate limits

Limits scale with your plan. Headers on every response surface the current window so client code can self-throttle.

X-RateLimit-Limit

Token bucket burst capacity for your subscription tier.

X-RateLimit-Remaining

Tokens remaining in the current window.

Retry-After

Seconds to wait before retrying. Sent on 429 responses.

Ready to ship?

Generate an API key and start hitting fundamentals or live market data endpoints. Need a dataset we don’t yet cover? Tell us.

New to the API? Browse all products, review pricing tiers, or jump straight to US stocks data and crypto data for product-level context.

Base URL · https://api.sifting.io