API documentation
Earnings Feed API
Real-time SEC data for developers. Retrieve filings, company profiles, insider transactions, and institutional holdings through a documented REST API.
curl --get 'https://earningsfeed.com/api/v1/filings' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data-urlencode 'ticker=AAPL' \
--data-urlencode 'forms=10-K' \
--data-urlencode 'limit=5'{
"items": [
{
"accessionNumber": "0000320193-25-000079",
"formType": "10-K",
"filedAt": "2025-10-31T00:00:00.000Z"
}
],
"hasMore": true
}Explore the API
Start with a resource group, then use the interactive reference for parameters and live requests.
Filings
Search the live EDGAR feed, filter by form or company, and retrieve filing details by accession.
Companies
Resolve tickers and CIKs, search issuers, and retrieve normalized company profiles.
Insider transactions
Query Form 3, 4, and 5 transactions with issuer, owner, security, and transaction details.
Institutional holdings
Retrieve 13F holdings and institutional ownership data through structured JSON responses.
Rate limits and retries
Free accounts include 15 requests per minute and 5,000 requests per UTC calendar month. Pro includes 60/min and 250,000/month; Trader includes 300/min and 2,000,000/month. Tier-specific minute limits apply to API-key and MCP requests; interactive docs tokens retain a fixed 10/minute limit. The monthly quota is account-wide across API keys, interactive docs, and MCP.
For X-RateLimit-Scope: minute, wait for Retry-After, add jitter, and cap retries. A monthly response should not be retried in a loop: wait for the UTC reset, upgrade, or contact support. Monthly allowances are hard caps on Free, Pro, and Trader.
async function fetchWithBackoff(url, options) {
for (let attempt = 0; attempt < 3; attempt++) {
const response = await fetch(url, options);
if (response.status !== 429 || attempt === 2) return response;
if (response.headers.get("X-RateLimit-Scope") === "monthly") {
return response; // Upgrade, contact support, or wait for the UTC monthly reset.
}
const seconds = Number(response.headers.get("Retry-After") ?? "1");
const jitterMs = Math.floor(Math.random() * 250);
await sleep(seconds * 1000 + jitterMs);
}
}Interactive API reference
Inspect every endpoint, authentication requirement, parameter, schema, and response.