Credits & Rate Limits

#Credits

Credits are deducted from the account tied to your API key. Amounts and timing are listed under each endpoint and in Credit summary. 402 Payment Required indicates insufficient credits for that operation.

#Credit summary

Credit charges for /data, /metric, /screener, /ownership, and /events are as follows.

EndpointCredits
POST /data/filings10 per successful debit. Debited even if the returned filings list is empty.
POST /data/company8 per successful debit. Debited even if DATA_COMPANY_NOT_FOUND is returned.
GET /data/company/list30 per page.
POST /data/company/search10 per call. A blank query returns no companies and is not charged.
POST /data/line-itemsSum over requested line items: tier L0=10, L1=20, L2=30, L3=50 per line item. If your balance is less than the full sum, the rest of your balance is charged.
POST /data/factsceil(n / 5) × 10 where n is the number of deduplicated fact ids.
POST /data/statement28 per debit, debited even if the filing is missing or nothing matches. role_label mode is tiered 28 / 48: the extra 20 of the higher (48-credit) tier is capped at your remaining balance.
POST /data/filing-statements10 per successful debit. Debited even if the filing is missing.
POST /data/income-statement28 per successful debit. Debited even if the filing is missing or has no such statement.
POST /data/comprehensive-income28 per successful debit. Debited even if the filing is missing or has no such statement.
POST /data/balance-sheet28 per successful debit. Debited even if the filing is missing or has no such statement.
POST /data/cash-flow-statement28 per successful debit. Debited even if the filing is missing or has no such statement.
POST /data/equity-statement28 per successful debit. Debited even if the filing is missing or has no such statement.
POST /data/facts/dimensional-breakdownceil((1 + N) / 5) × 10 where N is the number of the fact's direct dimensional children. 10 credits are debited on DATA_FACT_NOT_FOUND.
POST /data/line-items/dimensional-breakdownTier credit for line_item (L0=10 … L3=50) + ceil(N_total / 5) × 10 for returned slice facts. Partial billing applies.
POST /data/compare/line-itemsFor each line item, (tier credits) × (number of filings compared). Rows listed in failed_filings are not charged. Same partial charging as POST /data/line-items when your balance is below the full price.
POST /data/compare/factsceil(total_deduplicated_ids / 5) × 10 across the compared filing rows. Rows listed in failed_filings are not charged.
POST /data/filings/excel300. Debited even if DATA_EXCEL_OBJECT_NOT_IN_STORAGE is returned.
POST /metric/filings10
POST /metric/all158
POST /metric/all/filing-date158
POST /metric/items158
POST /metric/profitability158
POST /metric/growth158
POST /metric/financial-health158
POST /metric/efficiency158
POST /metric/cash-flow158
POST /metric/valuation158
POST /metric/valuation/filing-date158
POST /metric/historical55 base fee, plus 148 × (number of filing rows on the current page). Default page size is 3 filing rows.
POST /screener/metricsDynamic per request: max(65, 425 − tickerDiscount − lookbackDiscount − quarterlyDiscount + lookbackSurcharge + filterSurcharge + temporalSurcharge + includeSurcharge). Range 89–1825. See Credit formula (/screener/metrics) for the formula. Debited even if results are empty.
GET /screener/metrics/filters0.
POST /ownership/transactions30 per page. Debited even if OWNERSHIP_COMPANY_NOT_FOUND is returned.
POST /ownership/stats40 base + ceil(n / 1000) × 5, where n is the number of participating transactions. The base is debited even if OWNERSHIP_COMPANY_NOT_FOUND is returned.
POST /ownership/transaction-idsceil(n / 5) × 10 where n is the number of deduplicated ids (max 100).
POST /screener/ownershipDynamic per request: max(65, 200 − tickerDiscount − shortWindowDiscount + fullHistorySurcharge + 40 × conditions). Range 65–920. See Credit formula (/screener/ownership) for the formula. Debited even if results are empty.
GET /ownership/tickers30 per page.
POST /ownership/names30 per successful debit. Debited even if OWNERSHIP_COMPANY_NOT_FOUND is returned.
GET /ownership/transaction-types0 — static catalog, no charge.
POST /ownership/initial-holdings30 per page. Debited even if OWNERSHIP_COMPANY_NOT_FOUND is returned.
POST /ownership/initial-holdings/stats40 base + ceil(n / 1000) × 5, where n is the number of participating holdings. The base is debited even if OWNERSHIP_COMPANY_NOT_FOUND is returned.
POST /ownership/initial-holding-idsceil(n / 5) × 10 where n is the number of deduplicated ids (max 100).
POST /screener/initial-holdingsDynamic per request, same formula as POST /screener/ownership (Credit formula (/screener/ownership)). Range 65–920. Debited even if results are empty.
POST /ownership/institutional-holdings/manager-history30 per successful debit. Debited even if OWNERSHIP_MANAGER_NOT_FOUND is returned.
POST /ownership/institutional-holdings/portfolio30 per page. Debited even if the manager or the quarter is not found.
POST /ownership/institutional-holdings/security30 per page (flat mode); 40 flat with group_by_quarter=true. Debited even if OWNERSHIP_SECURITY_NOT_FOUND is returned.
POST /ownership/institutional-holdings/managers10 per call. A blank query returns no managers and is not charged.
POST /screener/institutional-holdingsDynamic per request: max(65, 200 + 40 × conditions − narrowWindowDiscount + noWindowSurcharge). Range 160–720. See Credit formula (/screener/institutional-holdings) for the formula. Debited even if results are empty.
GET /events/types0; Starter or higher required.
POST /events/filings10 per page, including empty results and missing companies.
POST /events/filing30, with or without selected Items or original text; post-charge resource errors remain charged.
POST /screener/events65–280 per page; see Credit formula (/screener/events).
GET /billing/balance0 — free balance check. Returns {"credits_balance": <int>} for the API key's account. Rate-limited at 30/minute.

Metrics resolution tiers (for /data/line-items and /data/compare/line-items): each requested label is classified into L0–L3, which sets that line item’s credit cost. The chosen tier is echoed on each result as _resolution_level ("L0" through "L3"). The response carries _correction when a name was matched by filing label or at L3, matched several concepts, or could not be resolved.

#Workflow budgets

Indicative credit ranges for common workflows, so you can size a plan before you start. Numbers assume the L1 tier on common line-item names (revenue, net income, operating income, etc.). Rarer or ambiguous names land at L2–L3 and cost more; see the tier list in Credit summary.

WorkflowEndpoint patternTypical credits
Discover one company (identity + coverage map)POST /data/company8
List all filings for one company-yearPOST /data/filings10
Pull all three primary statements (income / balance / cash flow) for one filingPOST /data/income-statement + /balance-sheet + /cash-flow-statement84 (28 × 3)
Pull a few specific line items from one filing (3 items × L1)POST /data/line-items60 (3 × 20)
Five-year trend on one metric for one companyPOST /data/line-items × 5 filings, 1 item, L1100 (5 × 20)
Peer comparison: 5 companies × 1 metric × 1 year (L1)POST /data/compare/line-items100 (1 × 20 × 5)
All key metrics snapshot for one company (1 call)POST /metric/all158
Full dimensional breakdown of revenue for one filing (~50 slice facts)POST /data/line-items/dimensional-breakdown~120 (20 + 100)
Download one filing's Excel workbookPOST /data/filings/excel300

Reference: a Starter plan (20,000 credits / month) covers about 330 three-item line-item queries, 240 three-statement pulls, or 126 /metric/all snapshots per month — pick the mix that fits your workflow.

#Rate limiting

When limits are exceeded, the API returns 429 Too Many Requests with detail.error_code RATE_LIMIT_EXCEEDED. Limits apply per account across all API keys on that account.

#Rate limits

Per-account limits (requests per minute, per route):

MethodPathLimit
POST/data/filings120
POST/data/company120
GET/data/company/list120
POST/data/company/search120
POST/data/line-items100
POST/data/facts100
POST/data/statement120
POST/data/filing-statements120
POST/data/income-statement120
POST/data/comprehensive-income120
POST/data/balance-sheet120
POST/data/cash-flow-statement120
POST/data/equity-statement120
POST/data/facts/dimensional-breakdown60
POST/data/line-items/dimensional-breakdown60
POST/data/compare/line-items60
POST/data/compare/facts60
POST/data/filings/excel20
POST/metric/filings100
POST/metric/all60
POST/metric/all/filing-date60
POST/metric/items60
POST/metric/profitability60
POST/metric/growth60
POST/metric/financial-health60
POST/metric/efficiency60
POST/metric/cash-flow60
POST/metric/valuation60
POST/metric/valuation/filing-date60
POST/metric/historical60
POST/screener/metrics10
GET/screener/metrics/filters60
POST/screener/ownership10
POST/ownership/transactions120
POST/ownership/stats120
POST/ownership/transaction-ids120
GET/ownership/tickers120
POST/ownership/names120
GET/ownership/transaction-types60
POST/ownership/initial-holdings120
POST/ownership/initial-holdings/stats120
POST/ownership/initial-holding-ids120
POST/screener/initial-holdings10
POST/ownership/institutional-holdings/manager-history120
POST/ownership/institutional-holdings/portfolio120
POST/ownership/institutional-holdings/security120
POST/ownership/institutional-holdings/managers120
POST/screener/institutional-holdings10
GET/events/types60
POST/events/filings120
POST/events/filing60
POST/screener/events10
GET/billing/balance30