API Reference

Programmatic access to SEC EDGAR crypto ETF filing data, issuer profiles, regulatory review history, and pipeline intelligence.

Base URL: https://api.cryptoetfsentinel.com

For interactive testing, try the Swagger UI.

Disclaimer: Data provided through this API is for informational purposes only and does not constitute investment advice. Predictions and risk scores are estimates based on historical filing patterns. See our full Data Disclaimer.

Quick Start

1. Try a free endpoint — no API key needed:

curl https://api.cryptoetfsentinel.com/v1/currencies

2. Search filings with natural language:

curl "https://api.cryptoetfsentinel.com/v1/filings/search?q=bitcoin+spot+ETF"

3. Unlock paid featuressubscribe, then add your API key:

curl -H "X-Api-Key: sk_live_YOUR_KEY" \
  https://api.cryptoetfsentinel.com/v1/issuers

Authentication

Pass your API key in the X-Api-Key header. Requests without a key receive free-tier access.

curl

curl -H "X-Api-Key: sk_live_YOUR_KEY" \
  https://api.cryptoetfsentinel.com/v1/issuers

Python

import requests

resp = requests.get(
    "https://api.cryptoetfsentinel.com/v1/issuers",
    headers={"X-Api-Key": "sk_live_YOUR_KEY"}
)
print(resp.json())

JavaScript

const resp = await fetch(
  "https://api.cryptoetfsentinel.com/v1/issuers",
  { headers: { "X-Api-Key": "sk_live_YOUR_KEY" } }
);
const data = await resp.json();
console.log(data);

Tiers

FeatureFreeDeveloper ($10/mo)Professional ($25/mo)
Filing history (3,000+)AllAllAll
Semantic searchUnlimitedUnlimitedUnlimited
Currencies & form typesAllAllAll
Aggregate statsFullFullFull
API calls25 / dayUnlimited dailyUnlimited daily
Data freshness24-hour delayReal-timeReal-time
ETF profiles & comparison--Full accessFull access
Issuers listAll 105+All 105+All 105+
Activity feed & events--Full accessFull access
Regulatory Review Profile--Full accessFull access
Comment letter history--Full historyFull history
Query Intelligence (parse, aggregate)Full accessFull accessFull access
ETF Financials (AUM, NAV, expenses)--Full accessFull access
ETF Profiles (custodian, fees, APs)--Single issuerAll + history
ETF Comparison (side-by-side)--Full accessFull access
Pipeline Intelligence (risk, predictions, velocity)----Full access
Terminal Dashboard----Full access

Get a key by subscribing on the pricing page: Developer $10/mo, Professional $25/mo.

Discovery Endpoints

FREE No API key required. Rate limit: 300 requests/minute.

GET /v1/currencies

List all tracked cryptocurrencies with their filing counts.

Response

{
  "data": [
    { "currency": "bitcoin", "count": 892 },
    { "currency": "ethereum", "count": 456 },
    { "currency": "solana", "count": 127 }
  ],
  "meta": { "total": 29 },
  "error": null
}
GET /v1/form-types

List all SEC form types present in the database with counts.

Response

{
  "data": [
    { "filing_type": "S-1", "count": 245 },
    { "filing_type": "19b-4", "count": 189 },
    { "filing_type": "EFFECT", "count": 88 }
  ],
  "meta": { "total": 42 },
  "error": null
}
GET /v1/stats

Aggregate statistics: total filings, date range, breakdowns by currency and form type.

Response

{
  "data": {
    "total_filings": 2580,
    "earliest_filing": "2013-07-01",
    "latest_filing": "2026-03-07",
    "filings_by_currency": [
      { "currency": "bitcoin", "count": 892 }
    ],
    "filings_by_type": [
      { "filing_type": "S-1", "count": 245 }
    ],
    "known_issuers": 110
  },
  "meta": {},
  "error": null
}
GET /v1/issuers

List all known crypto ETF issuers, sorted alphabetically. Includes ticker, exchange, SEC office, and entity type.

Response

{
  "data": [
    {
      "cik": "0001559992",
      "name": "Grayscale Bitcoin Trust (BTC)",
      "crypto": "bitcoin",
      "currencies": [],
      "ticker": "GBTC",
      "exchange": "NYSE Arca",
      "owner_org": "09 Crypto Assets",
      "sic": "6221",
      "entity_type": "operating",
      "issuer_type": "dedicated"
    }
  ],
  "meta": { "total": 15, "full_count": 110 },
  "error": null
}

meta.full_count shows the true total across all tiers.

Filing Endpoints

FREE No API key required. Rate limit: 100 requests/minute.

GET /v1/filings

Paginated list of filings with powerful filtering.

Query Parameters

NameTypeDefaultDescription
currencystring--Filter by cryptocurrency (e.g. bitcoin, ethereum)
filing_typestring--Filter by SEC form type (e.g. S-1, 19b-4)
companystring--Substring match on company name
date_afterstring--ISO date (YYYY-MM-DD), filings after this date
date_beforestring--ISO date (YYYY-MM-DD), filings before this date
title_containsstring--Substring match on filing title
limitinteger20Results per page (1-100)
offsetinteger0Skip this many results
order_bystringpublished_descSort order: published_desc, published_asc, company_asc, company_desc

Example

curl "https://api.cryptoetfsentinel.com/v1/filings?currency=bitcoin&filing_type=S-1&limit=5"

Response

{
  "data": [
    {
      "link": "https://www.sec.gov/Archives/edgar/data/...",
      "title": "Registration Statement",
      "company": "Grayscale Bitcoin Trust (BTC)",
      "filing_type": "S-1",
      "changes": "Filed",
      "published": "2026-03-05",
      "keywords": ["bitcoin", "etf"],
      "source": "SEC",
      "currency": "bitcoin",
      "currencies": [],
      "primary_doc": "0001193125-26-061537.txt",
      "accession": "0001193125-26-061537",
      "sec_url": "https://www.sec.gov/cgi-bin/browse-edgar?action=..."
    }
  ],
  "meta": { "total": 245, "limit": 5, "offset": 0, "page": 1 },
  "error": null
}
GET /v1/filings/{accession}

Retrieve a single filing by accession number with metadata, currency classification, and direct EDGAR link. Accepts dashed (0001193125-26-061537) or undashed format.

Example

curl https://api.cryptoetfsentinel.com/v1/filings/0001193125-26-061537

FREE Semantic search powered by FAISS vector embeddings with keyword fallback. Rate limit: 100 requests/minute.

GET /v1/filings/search

Natural language search across all filings. Uses FAISS cosine similarity when the index is loaded, falling back to keyword matching.

Query Parameters

NameTypeDefaultDescription
qstringrequiredSearch query (2-500 characters)
limitinteger10Max results (1-50)

Example

curl "https://api.cryptoetfsentinel.com/v1/filings/search?q=solana+spot+ETF+approval&limit=5"

Response

{
  "data": {
    "query": "solana spot ETF approval",
    "results": [
      {
        "filing": {
          "link": "https://www.sec.gov/...",
          "title": "EFFECT",
          "company": "Grayscale Solana Trust",
          "filing_type": "EFFECT",
          "currency": "solana",
          "accession": "...",
          "published": "2026-02-15"
        },
        "score": 0.8721
      }
    ],
    "method": "faiss"
  },
  "meta": { "total": 5 },
  "error": null
}

method is faiss for vector search or keyword for text fallback. Returns 503 if the FAISS index is unavailable.

Issuer Endpoints

GET /v1/issuers/{cik}

Detailed issuer profile including regulatory review status, the 5-node journey position (journey_node) and real trading_date, filing count, and registered series. The review_profile field is gated for free-tier users.

Path Parameters

NameTypeDescription
cikstringSEC CIK (bare or zero-padded, e.g. 1559992)

Response (Developer / Professional)

{
  "data": {
    "cik": "0001559992",
    "name": "Grayscale Bitcoin Trust (BTC)",
    "crypto": "bitcoin",
    "currencies": [],
    "ticker": "GBTC",
    "exchange": "NYSE Arca",
    "owner_org": "09 Crypto Assets",
    "issuer_type": "dedicated",
    "review_profile": {
      "review_status": "approved",
      "review_rounds": 18,
      "first_letter": "2017-01-06",
      "last_letter": "2024-01-10",
      "review_duration_days": 2561,
      "days_since_last_letter": 789,
      "approval_date": "2024-01-10",
      "uploads": 18,
      "correspondences": 15,
      "stage": "trading",
      "listing_date": "2024-01-10",
      "effectiveness_date": "2024-01-10",
      "trading_date": "2024-01-10",
      "completing_signal": "EFFECT",
      "journey_node": "Trading"
    },
    "filing_count": 127,
    "series": [
      {
        "series_id": "S000076502",
        "name": "Grayscale Bitcoin Trust (BTC)",
        "tickers": ["GBTC"],
        "crypto": "bitcoin",
        "product_type": "etf"
      }
    ]
  },
  "meta": {},
  "error": null
}

Regulatory journey fields

  • journey_node — the issuer's position on the 5-node journey: Registration FiledUnder ReviewLaunch ImminentApprovedTrading (null for off-track stages such as withdrawn/delisted).
  • listing_date / effectiveness_date — the two legs that complete a launch: '34 Act exchange listing (CERT) and '33 Act registration effectiveness (EFFECT/424B). They can land in either order.
  • trading_date — when the fund actually became tradeable: the later of the two legs. null until both land. Use this (not approval_date) as the "now trading" milestone.
  • completing_signal — the SEC form type of the leg that landed second (completed trading).

Response (Free Tier)

The review_profile field returns a gated sentinel instead of data:

"review_profile": { "gated": true, "required_tier": "developer" }
GET /v1/issuers/{cik}/filings

All filings for a specific issuer, paginated. FREE

Query Parameters

NameTypeDefaultDescription
limitinteger20Results per page (1-100)
offsetinteger0Skip this many results

Example

curl https://api.cryptoetfsentinel.com/v1/issuers/1559992/filings?limit=5

Activity Feed

DEVELOPER Real-time filing activity feed. Returns 402 for free-tier requests. Rate limit: 100 requests/minute.

GET /v1/events

Recent filing activity across all tracked issuers. Returns the latest filings with ticker symbols and issuer metadata. Useful for building activity feeds and monitoring new filings in real-time.

Query Parameters

NameTypeDefaultDescription
limitinteger20Results per page (1-50)
currencystringallFilter by cryptocurrency (e.g. bitcoin, ethereum)

Example

curl -H "X-Api-Key: YOUR_KEY" \
  https://api.cryptoetfsentinel.com/v1/events?limit=10

Response

{
  "data": [
    {
      "title": "S-1/A filing",
      "company": "Grayscale Bitcoin Trust",
      "filing_type": "S-1/A",
      "published": "2025-03-20",
      "currency": "bitcoin",
      "ticker": "GBTC",
      "link": "https://www.sec.gov/Archives/edgar/data/..."
    }
  ],
  "meta": { "total": 10 },
  "error": null
}

Comment Letters

DEVELOPER Returns 402 for free-tier requests. Rate limit: 100 requests/minute.

GET /v1/issuers/comment-letters?cik={cik}

SEC comment letter history and regulatory review profile for an issuer. Includes both UPLOAD (SEC to issuer) and CORRESP (issuer to SEC) filings. The cik param is optional — omit it for the largest issuer by AUM (a live sample), or pass a CIK to target a specific issuer.

Response

{
  "data": {
    "review_profile": {
      "review_status": "approved",
      "review_rounds": 18,
      "uploads": 18,
      "correspondences": 15,
      "first_letter": "2017-01-06",
      "last_letter": "2024-01-10",
      "approval_date": "2024-01-10",
      "stage": "trading",
      "trading_date": "2024-01-10",
      "journey_node": "Trading"
    },
    "letters": [
      {
        "accession": "0001193125-24-006237",
        "cik": "0001559992",
        "form_type": "UPLOAD",
        "filing_date": "2024-01-10",
        "file_number": "333-259574",
        "company": "Grayscale Bitcoin Trust (BTC)",
        "crypto_relevant": 1
      }
    ]
  },
  "meta": { "total": 33 },
  "error": null
}

Query Intelligence

FREE Natural-language query parsing and filing aggregation. No API key required.

POST /v1/query/parse

Parse a natural-language question into a structured intent with extracted filters. Lightweight — no database or vector search calls. Useful for building search UIs or routing queries programmatically. Rate limit: 100/min.

Request Body

FieldTypeDescription
qstringNatural-language query (e.g. "How many Solana ETF filings are there?")

Example

curl -X POST https://api.cryptoetfsentinel.com/v1/query/parse \
  -H "Content-Type: application/json" \
  -d '{"q": "How many Solana ETF filings are there?"}'

Response

{
  "data": {
    "intent": "count",
    "confidence": 0.95,
    "filters": {
      "currency": "solana",
      "filing_type": null,
      "company": null,
      "date_after": null,
      "date_before": null
    },
    "group_by": null,
    "limit": null,
    "topic": null,
    "education": null
  },
  "meta": { "total": 0 },
  "error": null
}

Intent Types

IntentDescription
searchSemantic search across filings (FAISS)
countNumeric count of matching filings
listList matching filings
aggregateGroup and count by field
explainEducational explanation of a topic
GET /v1/query/aggregate

Group filings by a field and return value + count pairs, sorted by count descending. Rate limit: 60/min.

Query Parameters

NameTypeRequiredDescription
group_bystringYesField to group by: company, filing_type, currency, or issuer
currencystringNoFilter by cryptocurrency
filing_typestringNoFilter by SEC form type
companystringNoFilter by company name

Example

curl "https://api.cryptoetfsentinel.com/v1/query/aggregate?group_by=company¤cy=bitcoin"

Response

{
  "data": [
    { "value": "Grayscale Bitcoin Trust (BTC)", "count": 187 },
    { "value": "iShares Bitcoin Trust ETF", "count": 94 },
    { "value": "Bitwise Bitcoin ETF", "count": 62 }
  ],
  "meta": { "total": 28 },
  "error": null
}

ETF Financials

DEVELOPER Structured financial data from SEC filings (10-K, 10-Q). Covers AUM, NAV, expense ratios, sponsor fees, and more for 40+ crypto ETFs. Returns 402 for free-tier requests.

GET /v1/xbrl/leaderboard

Rank crypto ETFs by a financial metric. Default: AUM (assets under management). Uses each issuer's latest reported value.

Query Parameters

NameTypeDefaultDescription
conceptstringInvestmentOwnedAtFairValueFinancial metric to rank by (see valid concepts below)
unitstringautoUnit filter (auto-resolved from concept if omitted)
taxonomystringautoTaxonomy filter (auto-resolved if omitted)
limitinteger20Max results (1-50)

Valid Concepts

ConceptUnitDescription
InvestmentOwnedAtFairValueUSDAssets under management (AUM)
NetAssetValuePerShareUSD/sharesNAV per share
SharesOutstandingsharesTotal shares outstanding
SponsorFeesUSDSponsor/management fees (period)
InvestmentCompanyExpenseRatioIncludingIncentiveFeepureExpense ratio (decimal)
StockIssuedDuringPeriodSharesNewIssuessharesShares created (period)
StockRedeemedOrCalledDuringPeriodSharessharesShares redeemed (period)
InvestmentCompanyTotalReturnpureTotal return (decimal)
EntityPublicFloatUSDPublic float (dei taxonomy)

Example

curl -H "X-Api-Key: sk_live_YOUR_KEY" \
  "https://api.cryptoetfsentinel.com/v1/xbrl/leaderboard?limit=5"

Response

{
  "data": [
    {
      "cik": "0001980994",
      "company": "iShares Bitcoin Trust ETF",
      "value": 67400000000,
      "period_end": "2025-09-30",
      "fiscal_year": 2025,
      "fiscal_period": "Q3"
    },
    {
      "cik": "0001588489",
      "company": "Grayscale Bitcoin Trust (BTC)",
      "value": 20200000000,
      "period_end": "2025-09-30",
      "fiscal_year": 2025,
      "fiscal_period": "Q3"
    }
  ],
  "meta": {
    "total": 28,
    "concept": "InvestmentOwnedAtFairValue",
    "unit": "USD"
  },
  "error": null
}
GET /v1/xbrl/issuer?cik={cik}

Financial snapshot for a single issuer: latest AUM, NAV per share, shares outstanding, expense ratio, sponsor fees, and total return. The cik param is optional — omit it for the largest issuer by AUM (a live sample), or pass a CIK to target a specific issuer.

Query Parameters

NameTypeDescription
cikstringSEC CIK (bare or zero-padded, e.g. 1588489)

Example

curl -H "X-Api-Key: sk_live_YOUR_KEY" \
  "https://api.cryptoetfsentinel.com/v1/xbrl/issuer?cik=1588489"

Response

{
  "data": {
    "cik": "0001588489",
    "company": "Grayscale Bitcoin Trust (BTC)",
    "period_end": "2025-09-30",
    "aum": 14500000000,
    "nav_per_share": 68.42,
    "shares_outstanding": 211900000,
    "expense_ratio": 0.0152,
    "sponsor_fees": 290500000,
    "total_return": 0.6084,
    "fact_count": 1048
  },
  "meta": {},
  "error": null
}
GET /v1/xbrl/series?cik={cik}

Historical time series for one financial metric. Ideal for charting AUM growth, NAV trends, or expense changes over time. Ordered by period end date ascending. The cik param is optional — omit it for the largest issuer by AUM (a live sample), or pass a CIK to target a specific issuer.

Query Parameters

NameTypeDefaultDescription
cikstringoptionalSEC CIK; omit for largest issuer by AUM
conceptstringInvestmentOwnedAtFairValueFinancial metric (see valid concepts above)
unitstringautoUnit filter (auto-resolved if omitted)
taxonomystringautoTaxonomy filter (auto-resolved if omitted)

Example

curl -H "X-Api-Key: sk_live_YOUR_KEY" \
  "https://api.cryptoetfsentinel.com/v1/xbrl/series?cik=1588489&concept=NetAssetValuePerShare"

Response

{
  "data": [
    {
      "period_end": "2024-12-31",
      "value": 42.18,
      "filed_date": "2025-02-28",
      "form_type": "10-K",
      "fiscal_year": 2024,
      "fiscal_period": "FY"
    },
    {
      "period_end": "2025-03-31",
      "value": 55.67,
      "filed_date": "2025-05-15",
      "form_type": "10-Q",
      "fiscal_year": 2025,
      "fiscal_period": "Q1"
    }
  ],
  "meta": {
    "total": 8,
    "concept": "NetAssetValuePerShare",
    "unit": "USD/shares"
  },
  "error": null
}
GET /v1/xbrl/aum-growth

Quarterly aggregate AUM across all crypto ETFs, broken down by cryptocurrency category (Bitcoin, Ethereum, Solana, Multi-crypto, Other). Data sourced from SEC XBRL filings.

Example

curl -H "X-Api-Key: sk_live_YOUR_KEY" \
  https://api.cryptoetfsentinel.com/v1/xbrl/aum-growth

Response

{
  "data": [
    {
      "quarter": "2025-Q3",
      "period_end": "2025-09-30",
      "total_aum": 125400000000,
      "issuer_count": 28,
      "breakdown": {
        "bitcoin": 98200000000,
        "ethereum": 18600000000,
        "solana": 2100000000,
        "multi": 4200000000,
        "other": 2300000000
      }
    }
  ],
  "meta": {
    "total": 6,
    "concept": "InvestmentOwnedAtFairValue",
    "unit": "USD"
  },
  "error": null
}
GET /v1/xbrl/fee-war

Current expense ratio for each crypto ETF, sorted cheapest first. Uses a multi-concept priority fallback to maximise coverage. Includes raw sponsor fees, AUM, and fee waiver expiry dates where applicable.

Query Parameters

NameTypeDefaultDescription
cryptostringallFilter by cryptocurrency (e.g. bitcoin, ethereum)

Example

curl -H "X-Api-Key: sk_live_YOUR_KEY" \
  "https://api.cryptoetfsentinel.com/v1/xbrl/fee-war?crypto=bitcoin"

Response

{
  "data": [
    {
      "cik": "0002044319",
      "company": "Franklin Bitcoin ETF",
      "crypto": "bitcoin",
      "ticker": "EZBC",
      "expense_ratio": 0.0019,
      "expense_ratio_bps": 19.0,
      "period_end": "2025-09-30",
      "sponsor_fees": 1250000,
      "aum": 694000000,
      "fee_waiver_expiry": "2026-08-02"
    }
  ],
  "meta": { "total": 12, "concept": "expense_ratio", "unit": "pure" },
  "error": null
}
GET /v1/xbrl/fee-war/history

Quarterly fee history for all crypto ETFs. Each quarter contains a list of issuers with their expense ratio at that point. Useful for charting the fee war progression over time.

Query Parameters

NameTypeDefaultDescription
cryptostringallFilter by cryptocurrency

Example

curl -H "X-Api-Key: sk_live_YOUR_KEY" \
  https://api.cryptoetfsentinel.com/v1/xbrl/fee-war/history

Response

{
  "data": [
    {
      "quarter": "2025-Q1",
      "period_end": "2025-03-31",
      "issuers": [
        {
          "cik": "0002044319",
          "company": "Franklin Bitcoin ETF",
          "ticker": "EZBC",
          "expense_ratio": 0.0019,
          "expense_ratio_bps": 19.0
        }
      ]
    }
  ],
  "meta": { "total": 4, "concept": "expense_ratio", "unit": "pure" },
  "error": null
}

ETF Profiles

Operational data extracted from POS AM (Post-Effective Amendment) filings. Includes custodian, sponsor fee, reference rate, basket size, authorized participant counts, and in-kind eligibility. Rate limit: 100 requests/minute.

GET /v1/profiles/issuer?cik={cik} DEVELOPER

Current operational profile for a single issuer. Returns the most recent POS AM extraction. The cik param is optional — omit it for the largest issuer by AUM (a live sample), or pass a CIK to target a specific issuer.

Response

{
  "data": {
    "cik": "0002044319",
    "filing_date": "2025-11-04",
    "custodian": "Coinbase Custody Trust Company",
    "sponsor_fee": "0.25%",
    "fee_waiver_expiry": null,
    "reference_rate": "CME CF Bitcoin Reference Rate",
    "basket_size": 4000,
    "inkind_eligible": true,
    "ap_count_cash": 8,
    "ap_count_inkind": 4,
    "fee_delta": null,
    "custodian_changed": false,
    "ap_count_cash_delta": null
  },
  "meta": { "total": 0, "limit": 20, "offset": 0, "page": 1 },
  "error": null
}
GET /v1/profiles/latest PROFESSIONAL

Latest profile per trading issuer. Bulk export of all current ETF operational data.

GET /v1/profiles/history?cik={cik} PROFESSIONAL

Profile evolution timeline for an issuer. Each entry shows what changed vs the prior POS AM filing — fee adjustments, custodian switches, AP roster changes, and in-kind eligibility transitions. The cik param is optional — omit it for the largest issuer by AUM (a live sample), or pass a CIK to target a specific issuer.

Query params

ParamDefaultDescription
cikoptionalSEC CIK; omit for largest issuer by AUM
limit20Max entries (1–50)
GET /v1/profiles/comparison DEVELOPER

Side-by-side comparison of all trading crypto ETFs. Merges operational profile data (custodian, fees, authorized participants) with XBRL financial data (AUM, NAV, expense ratio), market data (price, volume, returns), and fund health metrics (tracking error, premium/discount, implied NAV). Sorted by AUM descending. Rate limit: 60/min.

Example

curl -H "X-Api-Key: sk_live_YOUR_KEY" \
  https://api.cryptoetfsentinel.com/v1/profiles/comparison

Response

{
  "data": [
    {
      "cik": "0001980994",
      "name": "iShares Bitcoin Trust ETF",
      "ticker": "IBIT",
      "crypto": "bitcoin",
      "exchange": "NASDAQ",
      "custodian": "Coinbase Custody Trust Company",
      "sponsor_fee": "0.25%",
      "basket_size": 4000,
      "inkind_eligible": true,
      "ap_count_cash": 8,
      "aum": 67400000000,
      "nav_per_share": 55.12,
      "expense_ratio": 0.0025,
      "market_price": 55.28,
      "premium_discount_pct": 0.29,
      "tracking_error_live_pct": 0.12,
      "return_1d": 0.018,
      "return_1w": 0.042,
      "return_1m": 0.15
    }
  ],
  "meta": { "total": 42 },
  "error": null
}

Pipeline Intelligence

PROFESSIONAL Predictive analytics and regulatory pipeline monitoring. Returns 402 for Developer and free-tier requests. Rate limit: 100 requests/minute.

GET /v1/pipeline/risk-scores

Review risk assessment for issuers currently under SEC review. Scores reflect how each issuer's review timeline compares to historical patterns. Returns risk level (normal, moderate, elevated, high) and days under review.

Example

curl -H "X-Api-Key: YOUR_KEY" \
  https://api.cryptoetfsentinel.com/v1/pipeline/risk-scores
GET /v1/pipeline/outcome-signals

Approval likelihood predictions for issuers in the regulatory pipeline. Each issuer receives a score (1-99) based on filing pattern analysis, with sentiment indicators for contributing factors.

Example

curl -H "X-Api-Key: YOUR_KEY" \
  https://api.cryptoetfsentinel.com/v1/pipeline/outcome-signals
GET /v1/pipeline/launch-monitor

Issuers approaching exchange launch. Shows how long each issuer has been waiting post-registration and where they stand relative to historical launch timelines.

Example

curl -H "X-Api-Key: YOUR_KEY" \
  https://api.cryptoetfsentinel.com/v1/pipeline/launch-monitor
GET /v1/pipeline/velocity

Filing velocity tracking for active pipeline issuers. Shows filing counts, types, and activity signals (ramping up, new activity, active) based on recent filing cadence.

Example

curl -H "X-Api-Key: YOUR_KEY" \
  https://api.cryptoetfsentinel.com/v1/pipeline/velocity
GET /v1/pipeline/stalled

DEVELOPER Issuers with no recent filing activity. Useful for identifying applications that may have stalled or been withdrawn.

Example

curl -H "X-Api-Key: YOUR_KEY" \
  https://api.cryptoetfsentinel.com/v1/pipeline/stalled
GET /v1/pipeline/cohort-state

DEVELOPER Per-cryptocurrency cohort wave state. Returns a map keyed by crypto (e.g. bitcoin, solana) describing where each cohort sits in the approval-wave lifecycle.

Each cohort is in one of three states:

  • holding_pool — no active wave; waiting for the next EFFECT or CERT to anchor a new 50-day window. Issuers with a pending 8-A12B sit at the front of the queue.
  • in_wave — within 50 days of wave_anchor. Pending issuers in the cohort are wave riders; subsequent EFFECT/CERTs become graduates of the same wave.
  • cohort_cleared — every cohort member has been approved; no pending issuers remain.

The wave clock anchors on the earliest EFFECT or CERT filing (NOT 8-A12B, which can hang ~50 days before approval). The wave window is fixed at 50 days from anchor; a new wave starts only when an EFFECT/CERT lands more than 50 days after the previous approval.

Response shape

{
  "data": {
    "bitcoin": {
      "state": "in_wave",
      "wave_anchor": "2026-04-15",
      "wave_end": "2026-06-04",
      "latest_approval_date": "2026-04-15",
      "latest_8a12b": "2026-05-03",
      "current_wave_graduate_ciks": ["1234567"]
    },
    "solana": {
      "state": "holding_pool",
      "wave_anchor": null,
      "wave_end": null,
      "latest_approval_date": "2026-01-20",
      "latest_8a12b": null,
      "current_wave_graduate_ciks": []
    }
  },
  "meta": { "total": 2 },
  "error": null
}

Example

curl -H "X-Api-Key: YOUR_KEY" \
  https://api.cryptoetfsentinel.com/v1/pipeline/cohort-state
GET /v1/pipeline/deltas

DEVELOPER Week-over-week changes in pipeline metrics. Shows stage transitions, new filings, and score movements compared to the previous snapshot.

Example

curl -H "X-Api-Key: YOUR_KEY" \
  https://api.cryptoetfsentinel.com/v1/pipeline/deltas

Subscription

Programmatic access to the Stripe-powered subscription flow. Use these endpoints to create checkout sessions and retrieve API keys after purchase.

POST /stripe/create-checkout-session

Create a Stripe Checkout session for a new subscription. Returns a URL to redirect the user to Stripe's hosted payment page. Rate limit: 5/min.

Query Parameters

NameTypeDefaultDescription
tierstringdeveloperdeveloper or professional

Example

curl -X POST \
  "https://api.cryptoetfsentinel.com/stripe/create-checkout-session?tier=professional"

Response

{
  "url": "https://checkout.stripe.com/c/pay/cs_live_..."
}
GET /stripe/checkout-success

Retrieve the API key created after a successful checkout. Poll this endpoint after the user completes payment — returns 202 while the webhook is still processing. Rate limit: 10/min.

Query Parameters

NameTypeDescription
session_idstringStripe Checkout session ID (e.g. cs_live_...)

Response (ready)

{
  "api_key": "sk_dev_a1b2c3d4e5f6...",
  "tier": "developer"
}

Response (pending — 202)

{
  "status": "pending",
  "message": "Webhook not yet received. Retry in 2 seconds."
}

Response Format

All endpoints return a standard JSON envelope:

{
  "data": ...        // Payload (object, array, or scalar)
  "meta": {
    "total": 245,    // Results matching your filters
    "limit": 20,     // Page size
    "offset": 0,     // Current offset
    "page": 1,       // Current page number
    "full_count": 245  // True total (shown when list is tier-capped)
  },
  "error": null      // Error message string, or null on success
}

When a list is capped by tier (e.g. issuers), meta.total reflects the visible count and meta.full_count shows the true total.

Error Codes

StatusMeaningWhen
200SuccessNormal response
400Bad RequestInvalid parameter or value
402Payment RequiredEndpoint requires Developer or Professional tier
404Not FoundFiling or issuer not found
422UnprocessableInvalid accession number format
429Rate LimitedToo many requests (see limits below)
500Server ErrorUnexpected internal error
503UnavailableFAISS index not loaded or external service down

402 Response Example

{
  "detail": {
    "error": "tier_required",
    "required": "developer",
    "current": "free",
    "upgrade_url": "https://cryptoetfsentinel.com/#pricing",
    "message": "This endpoint requires a paid subscription."
  }
}

Rate Limits

Rate limits are per IP address within a sliding 1-minute window.

CategoryEndpointsLimit
Discovery /v1/currencies, /v1/form-types, /v1/issuers, /v1/stats 300/min
Data /v1/filings, /v1/filings/{accession}, /v1/issuers/{cik}/* 100/min
Search & Query /v1/filings/search, /v1/query/parse 100/min
Aggregation /v1/query/aggregate, /v1/profiles/comparison 60/min
ETF Financials /v1/xbrl/* (leaderboard, snapshot, series, AUM growth, fee war) 100/min
Pipeline /v1/pipeline/* (risk scores, outcomes, velocity, launch, deltas, stalled) 100/min
Subscription /stripe/create-checkout-session 5/min

When rate limited, the API returns 429 Too Many Requests with a Retry-After header.