Skip to main content
GET
https://api.fintool.com
/
v1
/
documents
/
{publication_id}
Documents
curl --request GET \
  --url https://api.fintool.com/v1/documents/{publication_id}
{
  "error": {
    "code": "document_not_found",
    "message": "Document with publication_id '0001193125-25-000000' not found"
  }
}

Overview

Access SEC filings and financial documents in clean Markdown format. Documents are intelligently chunked into sections for easy processing and analysis. Retrieve full document content by publication ID or list documents with filtering options.
Coverage: ~8,000 US public companies. New filings available within 1 minute of SEC publication.

GET /v1/documents/

Retrieve a specific document by its SEC accession number.

Path Parameters

publication_id
string
required
SEC accession number (e.g., 0001193125-25-269432)

Query Parameters

format
string
default:"markdown"
Response format for the document body:
  • markdown - Full document as markdown (default)
  • sections - Document split into labeled sections
  • metadata - Metadata only, no body content
include_exhibits
boolean
default:false
Include attached exhibits (e.g., press releases, financial statements)

Request Example

curl -X GET "https://api.fintool.com/v1/documents/0001193125-25-269432?format=markdown&include_exhibits=true" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

publication_id
string
SEC accession number
ticker
string
Stock ticker symbol
company_name
string
Full company name
cik
string
SEC Central Index Key (useful for cross-referencing with EDGAR)
doc_type
string
Document type (10-K, 10-Q, 8-K, etc.)
filing_date
string
Date the document was filed (ISO 8601)
period
string
Reporting period (e.g., “Q4 2025”, “FY 2024”)
body
string
Document content in the requested format. Not included when format=metadata.
word_count
number
Total word count of the document body. Useful for estimating processing time.
sec_url
string
Direct link to the document on SEC EDGAR
sections
array
Document sections (only when format=sections)
exhibits
array
Attached exhibits (only when include_exhibits=true)

Response Example

{
  "publication_id": "0001193125-25-269432",
  "ticker": "ABNB",
  "company_name": "Airbnb, Inc.",
  "cik": "1559720",
  "doc_type": "8-K",
  "filing_date": "2025-11-14",
  "period": "Q4 2025",
  "word_count": 1250,
  "sec_url": "https://www.sec.gov/Archives/edgar/data/1559720/000119312525269432",
  "body": "# Form 8-K\n\n## Item 2.02 Results of Operations and Financial Condition\n\nOn November 14, 2025, Airbnb, Inc. issued a press release announcing its financial results for the quarter ended September 30, 2025. A copy of the press release is furnished as Exhibit 99.1 to this Current Report on Form 8-K.\n\n## Item 9.01 Financial Statements and Exhibits\n\n(d) Exhibits\n\n| Exhibit No. | Description |\n|-------------|-------------|\n| 99.1 | Press Release dated November 14, 2025 |",
  "sections": [
    {
      "title": "Item 2.02 Results of Operations and Financial Condition",
      "content": "On November 14, 2025, Airbnb, Inc. issued a press release...",
      "page_start": 1
    },
    {
      "title": "Item 9.01 Financial Statements and Exhibits",
      "content": "(d) Exhibits\n\n| Exhibit No. | Description |...",
      "page_start": 2
    }
  ],
  "exhibits": [
    {
      "exhibit_number": "99.1",
      "title": "Press Release dated November 14, 2025",
      "content": "# Airbnb Announces Third Quarter 2025 Results\n\n**SAN FRANCISCO** - Airbnb, Inc. (NASDAQ: ABNB) today reported..."
    }
  ]
}

GET /v1/documents

List documents with filtering by ticker, document type, and date range.
At least one filter (tickers, doc_types, or date range) is required. Results are sorted by filing_date descending (most recent first) by default.

Query Parameters

tickers
string
Comma-separated list of ticker symbols (e.g., AAPL,MSFT,GOOGL). Required if no other filters provided.
doc_types
string
Comma-separated list of document types. Available types:
  • 10-K - Annual reports
  • 10-Q - Quarterly reports
  • 8-K - Current reports (material events)
  • S-1 - Registration statements (IPOs)
  • 6-K - Foreign private issuer reports
  • 20-F - Foreign private issuer annual reports
  • DEF 14A - Proxy statements
  • EARNINGS_CALL - Earnings call transcripts
start_date
string
Filter documents from this date forward (ISO 8601: YYYY-MM-DD)
end_date
string
Filter documents up to this date (ISO 8601: YYYY-MM-DD)
limit
number
default:50
Maximum number of documents to return (1-100)
offset
number
default:0
Number of documents to skip for pagination
sort
string
default:"filing_date_desc"
Sort order for results:
  • filing_date_desc - Most recent first (default)
  • filing_date_asc - Oldest first

Request Example

curl -X GET "https://api.fintool.com/v1/documents?tickers=AAPL,MSFT&doc_types=10-K,10-Q&start_date=2024-01-01&limit=20" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

documents
array
Array of document metadata objects
total
number
Total number of documents matching the query
limit
number
Number of documents returned
offset
number
Current offset for pagination

Response Example

{
  "documents": [
    {
      "publication_id": "0000320193-24-000123",
      "ticker": "AAPL",
      "company_name": "Apple Inc.",
      "cik": "320193",
      "doc_type": "10-K",
      "title": "Annual Report for fiscal year ended September 28, 2024",
      "filing_date": "2024-11-01",
      "period": "FY 2024",
      "url": "/v1/documents/0000320193-24-000123",
      "sec_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019324000123"
    },
    {
      "publication_id": "0000320193-24-000089",
      "ticker": "AAPL",
      "company_name": "Apple Inc.",
      "cik": "320193",
      "doc_type": "10-Q",
      "title": "Quarterly Report for period ended June 29, 2024",
      "filing_date": "2024-08-02",
      "period": "Q3 2024",
      "url": "/v1/documents/0000320193-24-000089",
      "sec_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019324000089"
    },
    {
      "publication_id": "0000789019-24-000456",
      "ticker": "MSFT",
      "company_name": "Microsoft Corporation",
      "cik": "789019",
      "doc_type": "10-K",
      "title": "Annual Report for fiscal year ended June 30, 2024",
      "filing_date": "2024-07-30",
      "period": "FY 2024",
      "url": "/v1/documents/0000789019-24-000456",
      "sec_url": "https://www.sec.gov/Archives/edgar/data/789019/000078901924000456"
    }
  ],
  "total": 47,
  "limit": 20,
  "offset": 0
}

Use Cases

Document Analysis

Fetch full SEC filings for detailed analysis and processing

Data Pipelines

Build automated workflows to ingest new filings as they’re published

Compliance Monitoring

Track 8-K filings for material events across your portfolio

Research Archives

Build searchable archives of historical filings

Pagination Example

For large result sets, use offset and limit to paginate:
import requests

def get_all_documents(tickers, doc_types, start_date):
    """Fetch all documents with pagination"""
    url = "https://api.fintool.com/v1/documents"
    headers = {"Authorization": "Bearer YOUR_API_KEY"}

    all_documents = []
    offset = 0
    limit = 100

    while True:
        params = {
            "tickers": tickers,
            "doc_types": doc_types,
            "start_date": start_date,
            "limit": limit,
            "offset": offset
        }

        response = requests.get(url, headers=headers, params=params)
        data = response.json()

        all_documents.extend(data["documents"])

        # Check if we've fetched all documents
        if offset + limit >= data["total"]:
            break

        offset += limit

    return all_documents

# Fetch all 10-K and 10-Q filings for 2024
docs = get_all_documents("AAPL,MSFT,GOOGL", "10-K,10-Q", "2024-01-01")
print(f"Found {len(docs)} documents")

Format Options

Returns the full document as a single markdown string. Best for displaying or processing entire documents.
response = requests.get(
    f"{url}/{publication_id}",
    params={"format": "markdown"}
)
print(response.json()["body"])  # Full markdown content
Returns the document split into labeled sections. Useful for navigating to specific parts of a filing.
response = requests.get(
    f"{url}/{publication_id}",
    params={"format": "sections"}
)
for section in response.json()["sections"]:
    print(f"{section['title']} (page {section['page_start']})")
Returns only metadata without document content. Efficient for checking document details without downloading the full body.
response = requests.get(
    f"{url}/{publication_id}",
    params={"format": "metadata"}
)
doc = response.json()
print(f"{doc['ticker']} {doc['doc_type']} filed {doc['filing_date']}")
# Note: 'body' field is not included

Rate Limits

PlanLimit
Standard100 requests/minute
EnterpriseCustom limits available
Rate limit headers are included in every response:
  • X-RateLimit-Limit - Maximum requests per minute
  • X-RateLimit-Remaining - Requests remaining in current window
  • X-RateLimit-Reset - Unix timestamp when the limit resets

Error Responses

StatusCodeDescription
400invalid_requestInvalid publication_id format or missing required parameters
401unauthorizedMissing or invalid API key
404document_not_foundDocument with the specified publication_id doesn’t exist
429rate_limit_exceededToo many requests - wait and retry
{
  "error": {
    "code": "document_not_found",
    "message": "Document with publication_id '0001193125-25-000000' not found"
  }
}

Next Steps