Use a key to request data by CIK, ticker or accession number, then follow a value back to its source. The examples use the legacy API and show real responses for Amprius Technologies (AMPX), the sandbox company. You can run them on a new account. See the dated API docs for requests using SourceKeel-Version.
Example issuer
AMPX
CIK 0001899287
Indexed history
2021+
Earliest indexed filing: 2021-12-15
Sample filing
10-K
0001899287-26-000015
Data requests use an API key in Authorization: Bearer .... Create and manage your keys in the SourceKeel dashboard.
The examples show selected fields from real AMPX responses. Full responses also include source context, rows, links and file references, with failure details where applicable.
sk_demo_ampx_readonly_v1 to call any public endpoint for AMPX (CIK 0001899287). This key is public, shared and read-only, so it is safe to share and print. For other companies use your own key. A new account's key is sk_sandbox_ and reads the sandbox companies only. Companies beyond the sandbox need a paid account's sk_live_ key.
sourcekeel.failure.v1 envelope and no value. A 404 with reason: not_materialized means we know the company but that data is not ready yet. Check coverage before you retry.
Use the AMPX demo key immediately, or create an account. New accounts start in the sandbox with AMPX.
Check coverage for the company and feature you need. Legacy coverage checks are free.
Call with a Bearer key. Use CIK for stable identity; tickers are aliases.
Follow links, objects, and applicable_extractions back to source.
export SOURCEKEEL_BASE_URL=https://api.sourcekeel.com
export SOURCEKEEL_API_KEY=sk_demo_ampx_readonly_v1
curl -s "$SOURCEKEEL_BASE_URL/v1/companies/0001899287" \
-H "Authorization: Bearer $SOURCEKEEL_API_KEY"
Send Accept-Encoding: gzip for large JSON responses. Authenticate with Authorization: Bearer (or the X-SourceKeel-Key header). Search and feed endpoints are paginated with limit and cursor; follow next_cursor while has_more is true. Company facts and financials return rows; follow next_after_observation_id as after_observation_id. Each page costs one credit.
Check whether SourceKeel has the company and feature you need. The legacy coverage request below is free. Dated API coverage responses cost one credit. Request data marked ready.
curl -s "$SOURCEKEEL_BASE_URL/v1/coverage?identifier=AMPX&feature=financials" \
-H "Authorization: Bearer $SOURCEKEEL_API_KEY"
# -> {"company_known":true,"status":"ready", ...}
# status is one of: ready | not_materialized
# an unknown company returns 404 company_not_found
Use CIK when you have it. If you have a ticker, resolve it first, then store and call by CIK.
curl -s "$SOURCEKEEL_BASE_URL/v1/companies/lookup?ticker=AMPX" \
-H "Authorization: Bearer $SOURCEKEEL_API_KEY"
{
"company": {
"cik": "0001899287",
"ticker": "AMPX",
"name": "Amprius Technologies, Inc.",
"exchange": "NYSE",
"profile_object": "/objects/companies/cik/0001899287/profile.json",
"schema_latest_object": "/objects/companies/cik/0001899287/schema/latest.json",
"revenue_segments_latest_object": "/objects/companies/cik/0001899287/features/revenue_segments/latest.json"
},
"lookup": { "identifier": "AMPX", "resolved_by": "ticker_active_alias" },
"recommended_identifier": "cik"
}
Start with company lookup if you only have a ticker. Use the returned CIK here.
The company response shows its available data and the response schema in use.
curl -s "$SOURCEKEEL_BASE_URL/v1/companies/0001899287" \
-H "Authorization: Bearer $SOURCEKEEL_API_KEY"
{
"company": {
"cik": "0001899287",
"ticker": "AMPX",
"name": "Amprius Technologies, Inc.",
"sic": "3690",
"sic_description": "Miscellaneous Electrical Machinery, Equipment & Supplies",
"ticker_aliases": [
{ "ticker": "AMPX", "active": true, "exchange": "NYSE" },
{ "ticker": "AMPX-WT", "active": true, "exchange": "NYSE" }
]
},
"coverage": {
"earliest_filing_indexed": "2021-12-15",
"latest_filing_indexed": "2026-06-17",
"available_documents": 79,
"facts_total": 5492,
"sections_total": 360,
"forms_available": ["10-K", "10-Q", "144", "4", "424B3", "424B7", "8-K", "DEF 14A", "S-4", "SC 13D"]
},
"links": {
"filings": "/v1/filings?cik=0001899287",
"documents": "/v1/documents?cik=0001899287",
"facts": "/v1/companies/0001899287/facts",
"financials": "/v1/companies/0001899287/financials",
"management_guidance": "/v1/companies/0001899287/guidance",
"debt": "/v1/companies/0001899287/debt",
"operating_items": "/v1/companies/0001899287/operating-items",
"schema": "/v1/companies/0001899287/schema",
"securities": "/v1/companies/0001899287/securities",
"security_lifecycle": "/v1/companies/0001899287/security-lifecycle"
}
}
Start with company details if you need the CIK or want to check whether securities data is available.
This endpoint distinguishes common stock from warrants, units, preferred stock, notes and other listed classes.
curl -s "$SOURCEKEEL_BASE_URL/v1/companies/0001899287/securities" \
-H "Authorization: Bearer $SOURCEKEEL_API_KEY"
{
"schema": "sourcekeel.company_securities.v1",
"as_of": "2026-07-02",
"source_form": "10-K",
"source_accession": "0001899287-26-000015",
"source_filed_date": "2026-03-06",
"sec_ticker_mapping": {
"tickers": ["AMPX", "AMPX-WT"],
"disagreements": [],
"symbol_variants": [
{ "cover_symbol": "AMPX.W", "ticker_file_symbol": "AMPX-WT" }
]
},
"securities": [
{
"trading_symbol": "AMPX",
"title_of_class": "Common Stock, par value $0.0001 per share",
"security_type": "common_stock",
"exchange": "NYSE",
"registration_section": "12b",
"confidence": 0.98
},
{
"trading_symbol": "AMPX.W",
"title_of_class": "Redeemable Warrants",
"security_type": "warrant",
"exchange": "NYSE",
"registration_section": "12b",
"confidence": 0.95
}
]
}
Start with company securities when you need class-level context for ticker symbols, warrants, units, or listed classes.
This endpoint returns SEC filing evidence for a company's active, delisted or deregistered status and its security lifecycle events. Top-level flags describe the current status. Superseded notices remain in the event history and evidence.
curl -s "$SOURCEKEEL_BASE_URL/v1/companies/0001899287/security-lifecycle" \
-H "Authorization: Bearer $SOURCEKEEL_API_KEY"
{
"schema": "sourcekeel.security_lifecycle.v1",
"status": "active",
"status_confidence": 0.92,
"as_of": "2026-07-02",
"delisting_date": null,
"deregistration_date": null,
"flags": {
"delisting_notice": false,
"prior_delisting": true,
"prior_delisting_notice": true,
"needs_cover_page_enrichment": false,
"sec_mapping_disagrees": false
},
"events": [
{ "event_type": "registration_statement", "form": "S-1", "accession": "0001193125-22-013880" },
{ "event_type": "registration_statement", "form": "S-1/A", "accession": "0001193125-22-037353" }
],
"boundary": "Classes and lifecycle status are SEC-filing-backed. OTC trading after delisting and non-SEC venue events are outside this surface."
}
Start with company details if you need the CIK or want to inspect the available filing and document coverage.
curl -s "$SOURCEKEEL_BASE_URL/v1/filings?cik=0001899287" \
-H "Authorization: Bearer $SOURCEKEEL_API_KEY"
{
"object": "list",
"schema": "sourcekeel.filing_query.v1",
"data": [
{
"accession": "0001899287-26-000045",
"form": "10-Q",
"filing_date": "2026-05-07",
"accepted_at": "2026-05-07 21:52:27+01",
"period_end_date": "2026-03-31",
"primary_document": "ampx-20260331.htm"
},
{
"accession": "0001899287-26-000015",
"form": "10-K",
"filing_date": "2026-03-06",
"accepted_at": "2026-03-06 21:21:25+00",
"period_end_date": "2025-12-31",
"primary_document": "ampx-20251231.htm"
}
]
}
Start with company filings if you need an accession number.
For each filing, applicable_extractions lists the available data and its type: a document reference, fact object, section extraction or typed extraction.
curl -s "$SOURCEKEEL_BASE_URL/v1/filings/0001899287-26-000015" \
-H "Authorization: Bearer $SOURCEKEEL_API_KEY"
{
"accession": "0001899287-26-000015",
"form": "10-K",
"filing_date": "2026-03-06",
"period_end_date": "2025-12-31",
"primary_document": "ampx-20251231.htm",
"is_inline_xbrl": true,
"applicable_extractions": [
{ "surface": "source_package", "status": "ready", "endpoint": "/v1/filings/0001899287-26-000015/source-package" },
{ "surface": "documents", "status": "available", "endpoint": "/v1/filings/0001899287-26-000015/documents" },
{ "surface": "revenue_segments", "status": "success", "row_count": 2, "endpoint": "/v1/filings/0001899287-26-000015/revenue-segments" },
{ "surface": "sections", "status": "success", "endpoint": "/v1/filings/0001899287-26-000015/sections" },
{ "surface": "facts", "status": "success", "row_count": 763, "endpoint": "/v1/filings/0001899287-26-000015/facts" }
]
}
Start with company details if you need the CIK or want to confirm the financials object is available.
Financials are served as sourcekeel.delivery_logical_dataset.v1 with rows. Add statement=income_statement|balance_sheet|cash_flow_statement|stockholders_equity to request one statement. Add known_at=YYYY-MM-DD (or as_of as an alias) to include only values, derivations, reconciliations and source evidence known by that date, including the date itself. Use view=full for selection and derivation diagnostics. When has_more is true, send the response's next_after_observation_id as after_observation_id; this is the only continuation parameter. Unsupported query parameters are reported in query.ignored_parameters.
GET /v1/companies/0001899287/financials
GET /v1/companies/0001315098/financials?statement=cash_flow_statement&known_at=2026-03-31
{
"schema": "sourcekeel.delivery_logical_dataset.v1",
"display_version": "v1",
"family_id": "financial_statements",
"projection": "compact",
"availability_status": "available",
"availability_reason": null,
"matched_count": 4,
"returned_count": 1,
"skipped_count": 0,
"has_more": true,
"next_after_observation_id": "af8aaf8aaf8aaf8aaf8aaf8aaf8aaf8a",
"generation": {
"schema": "sourcekeel.delivery_generation_context.v1",
"generation_id": "22042204220422042204220422042204",
"published_at": "2026-10-22T21:25:52Z"
},
"rows": [
{
"schema": "sourcekeel.delivery_logical_row.v1",
"observation_id": "af8aaf8aaf8aaf8aaf8aaf8aaf8aaf8a",
"observation_type": "statement line",
"subject_id": "8b1c8b1c8b1c8b1c8b1c8b1c8b1c8b1c",
"metric_key": "revenue",
"period_end": "2026-03-31",
"value_number": "28536000",
"unit": "USD",
"known_at": "2026-05-07T20:52:27Z",
"availability_status": "available"
}
],
"diagnostics": []
}
Start with normalized financials when you need total revenue for segment reconciliation.
This endpoint returns revenue by reported dimension, with grouped segments, reconciliation status, coverage, warnings and source evidence. Keep incompatible segment views separate when adding values.
GET /v1/companies/0001899287/revenue-segments/latest
{
"schema": "sourcekeel.revenue_segments.v2",
"periods": [
{
"period_end": "2026-03-31",
"total_revenue": 28536000,
"groups": [
{
"group": "product_service",
"reconciliation_status": "reconciled",
"reconciliation_basis": "whole_structural_group",
"source_measure": "{http://fasb.org/us-gaap/2025}RevenueFromContractWithCustomerExcludingAssessedTax",
"source_unit": "iso4217:USD",
"coverage_pct": 99.3,
"segments": [
{
"segment_name": "Sale of battery products",
"source_measure": "{http://fasb.org/us-gaap/2025}RevenueFromContractWithCustomerExcludingAssessedTax",
"source_unit": "iso4217:USD",
"value": 28336000,
"share_pct": 99.3
}
],
"warnings": ["dimension groups are alternative breakdowns and should not be summed together"]
},
{
"group": "geography",
"reconciliation_status": "reconciled",
"coverage_pct": 100
}
]
}
]
}
Start with company details if you need the SIC and schema family SourceKeel assigned.
This endpoint shows the sector schema and canonical tags used for the normalized data. AMPX uses electrical_equipment_company.v1.
GET /v1/companies/0001899287/schema
{
"schema_used": {
"schema_id": "electrical_equipment_company.v1",
"display_name": "Electrical equipment",
"sic_rules": ["3600", "3612", "3613", "3620", "3621"],
"status": "best_effort"
},
"metrics": {
"assets": { "canonical_tag": "Assets" },
"capex": { "canonical_tag": "PaymentsToAcquirePropertyPlantAndEquipment" },
"cash": { "canonical_tag": "CashAndCashEquivalentsAtCarryingValue" },
"revenue": { "canonical_tag": "Revenues" }
}
}
Start with applied schema if you need to compare normalized fields against the accepted raw/source tags.
This endpoint returns facts as sourcekeel.delivery_logical_dataset.v1 with rows: canonical and source tags, units, periods, values and evidence. The default page holds 100 facts and limit accepts up to 1000. metrics, measurement_from, measurement_to, known_at and scope narrow the query. When has_more is true, send the response's next_after_observation_id as after_observation_id; this is the only continuation parameter.
GET /v1/companies/0001899287/facts/latest?limit=500
GET /v1/companies/0001899287/facts?metrics=revenue&known_at=2026-03-31&after_observation_id=af8aaf8aaf8aaf8aaf8aaf8aaf8aaf8a
{
"schema": "sourcekeel.delivery_logical_dataset.v1",
"display_version": "v1",
"family_id": "canonical_observations",
"projection": "compact",
"availability_status": "available",
"availability_reason": null,
"matched_count": 19177,
"returned_count": 1,
"skipped_count": 0,
"has_more": true,
"next_after_observation_id": "af8aaf8aaf8aaf8aaf8aaf8aaf8aaf8a",
"generation": {
"schema": "sourcekeel.delivery_generation_context.v1",
"generation_id": "22042204220422042204220422042204",
"published_at": "2026-10-22T21:25:52Z"
},
"rows": [
{
"schema": "sourcekeel.delivery_logical_row.v1",
"observation_id": "af8aaf8aaf8aaf8aaf8aaf8aaf8aaf8a",
"observation_type": "reported fact",
"subject_id": "8b1c8b1c8b1c8b1c8b1c8b1c8b1c8b1c",
"registry_id": "sec_edgar",
"canonical_tag": "Revenues",
"raw_tag": "us-gaap:Revenues",
"metric_key": "financial.revenue",
"period_end": "2026-03-31",
"value_number": "28536000",
"unit": "USD",
"known_at": "2026-05-07T20:52:27Z",
"availability_status": "available"
}
],
"diagnostics": []
}
Start with filing metadata if you need the accession number and want to confirm section extraction is available for that filing.
This endpoint returns filing text such as MD&A, business descriptions, financial statements or risk factors. It includes section boundaries, confidence evidence and the source document reference.
GET /v1/filings/0001899287-26-000015/sections/item7
{
"schema": "sourcekeel.section.v1",
"accession": "0001899287-26-000015",
"item_code": "item7",
"title": "Management's Discussion and Analysis",
"extraction_status": "success",
"word_count": 7008,
"evidence": { "boundary_confidence": 0.94 },
"clean_text_sample": "Item 7. Management's Discussion and Analysis of Financial Condition and Results of Operations..."
}
Start with filing metadata, company details, or an endpoint response that includes object_key and object_url.
Some responses include authenticated file references. Use /objects/{object_key} to retrieve the referenced JSON, text, source package, or export. Source identity uses the SEC accession and form; origin URLs are intentionally omitted from API responses.
curl -L "$SOURCEKEEL_BASE_URL/objects/filings/accession/0001899287-26-000015/source_manifest.json" \
-H "Authorization: Bearer $SOURCEKEEL_API_KEY" \
-o ampx-source-manifest.json
{
"accession": "0001899287-26-000015",
"form": "10-K",
"primary_document": "ampx-20251231.htm",
"raw_source_available": true,
"documents": [
{
"document": "ampx-20251231.htm",
"document_kind": "primary",
"object_key": "sec/documents/1899287/000189928726000015/ampx-20251231.htm",
"object_url": "/objects/sec/documents/1899287/000189928726000015/ampx-20251231.htm",
"available": true,
"text_available": true
}
]
}
Start with the endpoint-specific section above when you need the success shape. This section shows error responses for unavailable data and missing references.
A successful 2xx response never contains a top-level error or failure_reason. Every response includes an X-Request-Id header for support and tracing. Request failures use the relevant 4xx or 5xx status and repeat that identifier as request_id in this structured envelope. Availability details may still appear on individual fields or rows inside an otherwise successful resource.
GET /v1/filings/0001899287-26-000045/cover-securities
{
"schema": "sourcekeel.failure.v1",
"object": "error",
"error": {
"code": "object_not_found",
"message": "The requested data is not available.",
"status": 404,
"type": "not_found_error"
},
"failure_reason": {
"code": "object_not_found",
"evidence": { "object": "/objects/filings/accession/0001899287-26-000045/cover_securities.json" },
"message": "The requested data is not available."
}
}
GET /v1/filings/0001899287-26-000015/sections/item999
{
"schema": "sourcekeel.failure.v1",
"object": "error",
"error": {
"code": "section_not_materialized",
"message": "The filing is covered, but this section is not available for the requested item.",
"status": 404,
"type": "not_found_error"
},
"failure_reason": {
"code": "section_not_materialized",
"evidence": {
"accession": "0001899287-26-000015",
"item_code": "item999",
"extraction_status": "not_materialized"
},
"message": "The filing is covered, but this section is not available for the requested item."
}
}
Every paid plan reads the same data. Plans differ in included credits, rate limits, and the price of overage. All keys on an account share one allowance.
Each HTTP 200 or 206 data response costs one credit, including empty pages. Each page is a separate response. Legacy coverage checks are free; dated API coverage responses cost one credit. Errors and 304 Not Modified responses are free. A 304 still counts toward your request rate and burst limits.
X-Plan: build
X-Monthly-Limit: 500000
X-Monthly-Used: 128734
X-Overage-Enabled: true
X-Overage-Calls: 0
X-Overage-Charges-Cents: 0
X-Overage-Limit-Cents: 5000
X-Monthly-Capacity: 1928571
X-Monthly-Capacity is how many credits the account can use this month before responses that cost credits stop: the included allowance, plus what the remaining spend limit buys when overage is on.
A 429 with monthly_quota_exceeded means the included allowance is used and overage is off. overage_spend_limit_reached means overage reached the limit you set. key_cap_reached means one key reached the monthly cap its owner set; the account still has credits and its other keys keep working. rate_limited means the per-minute or burst limit was hit. Every 429 carries Retry-After. Overage is billed pro rata and settled after the month ends.
New accounts start in the sandbox. Sandbox keys call the full API for the sandbox companies (Financial & Corporate: Amprius Technologies (AMPX)), are rate-limited, and are not billed. A request for another company returns 403 sandbox_scope. Sandbox responses carry X-Environment: sandbox and X-Sandbox-Scope. A sandbox key is sk_sandbox_... with environment sandbox, and it stays limited to the sandbox companies after you choose a paid plan. Make a live key (sk_live_...) to read every supported company. Both prefixes authenticate the same way.
Endpoints use the same dataset groups and countries as the coverage page and the reference below.
Source: United States Securities and Exchange Commission EDGAR
Free, with no account or API key. The SEC asks automated clients to send a User-Agent header with a company name and a contact email, and to stay at or under 10 requests per second in total, however many machines they use. Above that, it may limit requests from your IP address until the rate has stayed under the limit for 10 minutes. It does not offer technical support for scripted downloads.
Names, tickers, and exchanges come from each company's submissions file. The classes of stock, with their trading symbols and exchanges, are listed on the cover page of the 10-K and 10-Q, so you read those too. To learn that a security was delisted or deregistered, you watch for Form 25 and Form 15 filings.
A company's submissions file holds at least a year of filings or its latest 1,000, whichever is more. Older filings sit in extra files that you fetch and join. New filings also show up in the latest filings feed and the daily index, so you read those and drop duplicates by accession number. Deadlines depend on the filer's category, as the 10-K and 10-Q instructions set out.
10-K and 10-Q documents are HTML with inline XBRL tags inside the text. Each company formats its item headings its own way, so finding where one item ends and the next begins takes rules for many layouts. 8-K items are numbered, and the text under each one is free form.
The company facts API gives you each tagged value, but not the statement or line it belongs to. Companies can pick different tags for the same line, and a company can switch tags from one year to the next, so you map tags to lines yourself and check that the totals add up.
The company facts API only includes facts that use a standard taxonomy and apply to the whole company. Company-specific tags and segment figures stay in the filing itself. The same value appears again in each later filing that repeats it, and an amendment can change it, so you track which filing reported which value and when.
Segment figures are XBRL facts with dimensions, and the company facts API leaves those out, so you parse the inline XBRL in each 10-K and 10-Q. Companies name their own segments and can rename them between years, and you reconcile the parts to the reported total yourself.
Shares outstanding and public float are cover page values, measured on different dates from the balance sheet. Debt rates and maturities mostly sit in the notes as tables and text, so you read the notes to get them.
Results usually arrive as a press release attached to an 8-K under Item 2.02. An 8-K only has to tag its cover page and certain revised financial statements in XBRL, so the release tables are usually plain HTML. You then match each figure to the value in the 10-Q or 10-K that comes later.
Each Form 4 and Form 144 is its own XML file inside a filing, so you fetch them one at a time. The ownership XML format has had several versions, and older filings use older ones. A Form 144 is a notice of an intended sale. For officers and directors, the sale itself shows up later on a Form 4.
Officer and director changes are reported under Item 5.02 of Form 8-K as free text, so you read the text to find the person, the role, and the date. Governance tables sit inside proxy statements, and each company lays them out its own way.
An 8-K's item numbers tell you what kind of event it reports, and the details are in the text. A public offering spreads across a registration statement and later prospectus filings that you link yourself. Form D arrives as XML, and subsidiary lists come from Exhibit 21, usually a simple table.
The same list is on the coverage page.
Coverage checks and file downloads work the same way for all data.
This reference uses openapi.json. It covers every public endpoint, grouped by vertical and country like the list above, with parameters, response schemas, examples, and a Try button. Open a group in the sidebar to see one endpoint at a time.
sk_demo_ampx_readonly_v1 is already loaded, so Try works immediately. Open Authentication only to use your own sk_sandbox_ or sk_live_ key.
Enable external resources in to load the interactive reference. You can also download the OpenAPI document.