Skip to main content
GET
/
filings
/
items
Get SEC filing items
curl --request GET \
  --url https://api.financialdatasets.ai/filings/items \
  --header 'X-API-KEY: <api-key>'
import requests

url = "https://api.financialdatasets.ai/filings/items"

headers = {"X-API-KEY": "<api-key>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};

fetch('https://api.financialdatasets.ai/filings/items', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.financialdatasets.ai/filings/items",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "X-API-KEY: <api-key>"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.financialdatasets.ai/filings/items"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("X-API-KEY", "<api-key>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://api.financialdatasets.ai/filings/items")
  .header("X-API-KEY", "<api-key>")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://api.financialdatasets.ai/filings/items")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'

response = http.request(request)
puts response.read_body
{
  "resource": "<string>",
  "ticker": "<string>",
  "cik": "<string>",
  "filing_type": "<string>",
  "accession_number": "<string>",
  "year": 123,
  "quarter": 123,
  "items": [
    {
      "number": "<string>",
      "name": "<string>",
      "text": "<string>",
      "exhibits": [
        {
          "number": "<string>",
          "description": "<string>",
          "url": "<string>",
          "text": "<string>"
        }
      ]
    }
  ]
}
{
  "status": "processing",
  "request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "result_url": "<string>",
  "estimated_ready_at": "2023-11-07T05:31:56Z",
  "accession_number": "<string>",
  "message": "<string>"
}
{
  "error": "Bad Request",
  "message": "Invalid request parameters"
}
{
  "error": "Unauthorized",
  "message": "Invalid API key provided"
}
{
  "error": "Payment Required",
  "message": "This endpoint requires a paid subscription. Please upgrade your plan."
}
{
  "error": "Not Found",
  "message": "Ticker XXXX not found"
}

Overview

The Items endpoint allows you to retrieve the raw text from the sections (called items) from a given 10-K, 10-Q, or 8-K filing. This lets you easily extract data from a filing without having to parse the entire document on your own. For 8-K filings, items may include an exhibits array when exhibits are present. Use the include_exhibits parameter to retrieve the raw text content of linked exhibits.

Coverage

TickersYears of CoverageUpdated
22,000+30+ yearsReal-time

Available Tickers

You can fetch a list of available tickers with a GET request to: https://api.financialdatasets.ai/filings/tickers/

Valid Item Types

You can fetch a list of valid item types for 10-K, 10-Q, and 8-K filings with a GET request to: https://api.financialdatasets.ai/filings/items/types/ You can optionally filter by filing type using the filing_type query parameter:
  • https://api.financialdatasets.ai/filings/items/types/?filing_type=10-K - returns only 10-K item types
  • https://api.financialdatasets.ai/filings/items/types/?filing_type=10-Q - returns only 10-Q item types
  • https://api.financialdatasets.ai/filings/items/types/?filing_type=8-K - returns only 8-K item types
The response includes the item name, title, and description for each valid item type. 8-K item names follow the SEC’s numbering scheme in the format Item-X.XX, for example Item-1.01, Item-2.02, Item-5.02, Item-8.01, and Item-9.01.

Filtering by item

Use the item query parameter (repeatable) to return only the items you need. This works for all three filing types. Because a given 8-K contains only the items the company chose to report, requesting an item that is not in the filing returns a 404 that names the missing items and the items the filing does contain (see Error handling).

Examples

import requests

# add your API key to the headers
headers = {
    "X-API-KEY": "your_api_key_here"
}

# set your query params
ticker = 'AAPL'
filing_type = '10-K'
year = 2023

# create the URL
url = (
    f'https://api.financialdatasets.ai/filings/items'
    f'?ticker={ticker}'
    f'&filing_type={filing_type}'
    f'&year={year}'
)

# make API request
response = requests.get(url, headers=headers)

# parse filings from the response
items = response.json().get('items')

Asynchronous requests (202 Accepted)

Most requests return data immediately. The first request for a filing we haven’t processed yet can take longer. If your filing isn’t ready within ~10 seconds, the API returns 202 Accepted with a result_url to poll. Your request is never dropped.
HTTP/1.1 202 Accepted
Location: https://api.financialdatasets.ai/filings/items/requests/1c2f0a4e-...
Retry-After: 30
Content-Type: application/json

{
  "status": "processing",
  "request_id": "1c2f0a4e-...",
  "result_url": "https://api.financialdatasets.ai/filings/items/requests/1c2f0a4e-...",
  "estimated_ready_at": "2026-07-13T18:30:45Z",
  "accession_number": "0001277902-25-000182",
  "message": "We are processing this filing. Poll result_url for the result, or retry this request after the estimated ready time."
}
Poll result_url with the same X-API-KEY header. Each poll returns one of three responses:
ResponseMeaningWhat to do
{"status": "processing", ...}Still preparing the filingWait Retry-After seconds, then poll again
The filing items payloadReadyDone. You are billed once, on this response
{"status": "failed", ...}The filing could not be preparedRe-request GET /filings/items with your original parameters
Example with polling (Python):
import time
import requests

def get_filing_items(url, headers):
    response = requests.get(url, headers=headers)

    if response.status_code == 202:
        result_url = response.json()["result_url"]
        while True:
            time.sleep(int(response.headers.get("Retry-After", 30)))
            response = requests.get(result_url, headers=headers)
            body = response.json()
            if body.get("status") == "processing":
                continue
            if body.get("status") == "failed":
                raise RuntimeError(body["message"])
            break  # body is the filing items payload

    return response.json()
Good to know:
  • Most filings are ready within 30 seconds. If a filing can’t be prepared within 5 minutes, polling returns failed.
  • You are only billed when data is delivered. A 202, a processing poll, or a failed request never costs anything.
  • Retrying your original request URL also works: once the filing is ready, the same request returns it immediately. The result_url is simply the version that can also tell you definitively that a filing failed.

Error handling

Requests with mismatched parameters fail immediately with a 400 instead of being accepted for processing. The error message always names the correct value so you can fix the request in one step.
StatusErrorMeaningWhat to do
400Filing type mismatchThe accession number belongs to a different form type than filing_typeRetry with the filing_type named in the message
400Filing company mismatchThe accession number belongs to a different company than tickerRetry with the ticker named in the message
404Filing not foundThe accession number does not exist on SEC EDGAR for this tickerVerify the accession number and ticker
404Items not found in filingAt least one requested item is not in this filing (common for 8-Ks, which contain only the items the company reported)The message lists the items the filing does contain. Retry with those, or drop the item filter to get all items. You are not billed
404No data foundThe filing exists but contains no extractable itemsNothing to retry. You are not billed
200 {"status": "failed"}Returned by result_urlThe filing could not be preparedRe-request GET /filings/items with your original parameters
400 Filing type mismatch
{
  "error": "Filing type mismatch",
  "message": "Accession number 0001277902-25-000182 is a 10-K, not a 8-K. Retry with filing_type=10-K.",
  "accession_number": "0001277902-25-000182"
}
404 Items not found in filing
{
  "error": "Items not found in filing",
  "message": "The following requested item(s) do not exist in this filing: Item 2.02. Items present in this filing: Item 5.02, Item 9.01.",
  "accession_number": "0001277902-25-000182"
}

Authorizations

X-API-KEY
string
header
required

API key for authentication.

Query Parameters

ticker
string
required

The ticker symbol.

filing_type
enum<string>
required

The type of filing.

Available options:
10-K,
10-Q,
8-K
year
integer
required

The year of the filing.

quarter
integer

The quarter of the filing if 10-Q.

item
enum<string>

The item to get.

Available options:
Item-1,
Item-1A,
Item-1B,
Item-2,
Item-3,
Item-4,
Item-5,
Item-6,
Item-7,
Item-7A,
Item-8,
Item-9,
Item-9A,
Item-9B,
Item-10,
Item-11,
Item-12,
Item-13,
Item-14,
Item-15,
Item-16,
Item-1.01,
Item-1.02,
Item-1.03,
Item-1.04,
Item-2.01,
Item-2.02,
Item-2.03,
Item-2.04,
Item-2.05,
Item-2.06,
Item-3.01,
Item-3.02,
Item-3.03,
Item-4.01,
Item-4.02,
Item-5.01,
Item-5.02,
Item-5.03,
Item-5.04,
Item-5.05,
Item-5.06,
Item-5.07,
Item-5.08,
Item-6.01,
Item-6.02,
Item-6.03,
Item-6.04,
Item-6.05,
Item-7.01,
Item-8.01,
Item-9.01
accession_number
string

The accession number of the filing if 8-K.

include_exhibits
boolean
default:false

Whether to include the raw text from linked exhibits. Only applicable for 8-K filings. When true, exhibit objects will include the 'text' field containing the full exhibit content.

Response

SEC filing items response

resource
string

The resource type identifier.

ticker
string

The ticker symbol of the company.

cik
string

The Central Index Key (CIK) of the company.

filing_type
string

The type of filing.

accession_number
string

The accession number of the filing.

year
integer

The year of the filing.

quarter
integer

The quarter of the filing.

items
object[]