API
REST API at https://better-edgar.com/api/v1. Bearer-token
auth, JSON in/out, cursor-paginated.
Just plugging Claude or ChatGPT into Better EDGAR? Use the MCP server instead →
1. API key
Send as Authorization: Bearer <key> on any /api/v1/* endpoint.
Sign in to generate a bearer key. Sign in free
2. Reference
Versioned under /api/v1. All responses
are JSON. Results are cursor-paginated, newest-first.
- Base URL
https://better-edgar.com/api/v1- Auth
Authorization: Bearer <key>- Content-Type
application/json(request & response)- Pagination
- Responses carry a
cursor. Pass it back to continue.
Endpoints
| Method | Path | Summary |
|---|---|---|
| POST | /filings/search | Search filings by ticker/CIK, form, topic, date, sector, market cap. |
| GET | /filings/{accession}/pdf | Composed PDF of the primary filing (vision-friendly). |
| GET | /issuers/search?q= | Resolve a fuzzy ticker or name to a CIK. |
| GET | /meta | Enum reference: active forms, sectors, industries, exchanges. |
| GET | /watchlists | List, create, and manage named CIK watchlists. |
| GET | /saved-searches | List, create, preview, and schedule email digests on feeds. |
| GET | /system/status | Data freshness and pipeline health. |
Example response — POST /filings/search
{
"filings": [
{
"accession": "0000320193-24-000123",
"cik": "0000320193",
"ticker": "AAPL",
"form": "10-K",
"filing_date": "2024-11-01",
"topics": ["RESULTS"],
"pdf_url": "https://better-edgar.com/api/v1/filings/0000320193-24-000123/pdf"
}
],
"cursor": "eyJhY2Nlc3Npb24iOiIwMDAw...",
"count": 1
}Errors
Every error has the shape { error: { code, message } }. Read the
code to know what to fix.
| Code | HTTP | Meaning |
|---|---|---|
| unauthenticated | 401 | Missing or invalid bearer token. |
| validation | 400 | Request body failed schema validation. |
| filter_required | 400 | Search needs at least one filter. |
| invalid_cursor | 400 | Cursor is malformed or has expired. |
| unknown_field | 400 | Unsupported field in the request body. |
| rate_limited | 429 | Too many requests. Back off and retry. |
| internal | 500 | Server-side failure. Retry with backoff. |
Rate limits. Free plan is capped per month; paid plans raise that cap. The
X-RateLimit-* response headers report your current
budget.3. Examples
Set BEDGAR_API_KEY in your
environment, then hit the search endpoint.
cURL
curl -X POST https://better-edgar.com/api/v1/filings/search \
-H "Authorization: Bearer $BEDGAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"tickers":["AAPL"],"form":["10-K"],"limit":5}' Node / TypeScript
const r = await fetch('https://better-edgar.com/api/v1/filings/search', {
method: 'POST',
headers: {
authorization: `Bearer ${process.env.BEDGAR_API_KEY}`,
'content-type': 'application/json'
},
body: JSON.stringify({ tickers: ['AAPL'], form: ['10-K'], limit: 5 })
});
const { filings } = await r.json(); Python
import os, requests
r = requests.post(
'https://better-edgar.com/api/v1/filings/search',
headers={'Authorization': f'Bearer {os.environ["BEDGAR_API_KEY"]}'},
json={'tickers': ['AAPL'], 'form': ['10-K'], 'limit': 5},
)
filings = r.json()['filings']