financialfilings-com Financial Data API
Standardized income statement, balance sheet and cash flow data, and the dictionary of line items.
Standardized income statement, balance sheet and cash flow data, and the dictionary of line items.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/financialfilings-com:financialfilings-com-financial-data-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: FinancialFilings Financial Data API
version: 1.4.0
description: 'Filings and company data for listed companies across the G20 and Europe. Send your API key in the `X-API-Key` header on every request. New here? Start with the quickstart.
**Credits.** Every call costs credits, and each endpoint below shows its price. `X-Credits-Charged` on the response says what a call cost, and `GET /usage/` shows the month so far. A free account gets a monthly allowance. Webhooks are an Enterprise feature. Pricing: https://financialfilings.com/developers/
**Rate limits.** Responses carry `X-RateLimit-Burst-Limit` (a rate such as `50/second`), `X-RateLimit-Monthly-Limit`, `X-RateLimit-Monthly-Remaining` and `X-RateLimit-Monthly-Unit` (`requests` or `credits`). All four are strings and can be non-numeric (for example `Unlimited`); the last two are left out when they don''t apply.'
termsOfService: https://financialfilings.com/api-terms/
contact:
name: API Support
url: https://financialfilings.com/
email: api@financialfilings.com
servers:
- url: https://api.financialreports.eu
description: Production API Gateway
tags:
- name: Financial Data
description: Standardized income statement, balance sheet and cash flow data, and the dictionary of line items.
paths:
/line-item-definitions/:
get:
operationId: line_item_definitions_list
description: '**Cost:** 1 credit per request.
---
Every line item a financial statement can contain. `depth` and `parent_code` give the statement hierarchy.
`templates` lists the company types a line item fits (`industrial`, `bank`, `insurer`); filter with `?template=bank`. Industrial-only items still appear for banks and insurers, but mean something different there.
Some codes come only from a filing''s XBRL (`goodwill`, `consolidated_net_income`, `total_debt_incl_leases`, `debt_to_equity` and 30 others), so a filing without XBRL never has them.'
summary: List Line Item Definitions
parameters:
- in: query
name: depth
schema:
type: integer
description: Filter by hierarchy depth (0 = top-level, 1 = component, 2 = sub-component).
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: query
name: parent_code
schema:
type: string
description: Filter by parent line item code (e.g. 'gross_profit' returns its children).
- name: search
required: false
in: query
description: A search term.
schema:
type: string
- in: query
name: statement_type
schema:
type: string
enum:
- BS
- CFS
- IS
- SUP
description: 'Filter by statement type (IS, BS, CFS, SUP).
* `IS` - Income Statement
* `BS` - Balance Sheet
* `CFS` - Cash Flow Statement
* `SUP` - Supplemental / Ratio'
- in: query
name: template
schema:
type: string
enum:
- bank
- industrial
- insurer
description: 'Filter to the line items meaningful for a KPI template (industrial, bank, insurer).
* `industrial` - industrial
* `bank` - bank
* `insurer` - insurer'
tags:
- Financial Data
security:
- ApiKeyAuth: []
- CognitoJWT: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedLineItemDefinitionList'
examples:
Success:
value:
count: 123
next: http://api.example.org/accounts/?page=4
previous: http://api.example.org/accounts/?page=2
results:
- - code: revenue
name: Total Revenue
statement_type: IS
statement_type_display: Income Statement
depth: 0
parent_code: null
sort_order: 10
category: ''
description: ''
aliases: []
templates:
- industrial
description: ''
'403':
description: Missing or invalid API key, or the plan does not include this endpoint.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetail'
examples:
MissingCredentials:
summary: No X-API-Key header
value:
detail: Authentication credentials were not provided.
type: authentication_required
resolution: 'Send your API key in the X-API-Key request header, e.g. curl -H "X-API-Key: <your key>" https://api.financialreports.eu/filings/ . A browser address bar never sends this header. No key yet? Get a free one at https://financialfilings.com/accounts/api-dashboard/ .'
dashboard_url: https://financialfilings.com/accounts/api-dashboard/
InvalidKey:
summary: Unknown or inactive API key
value:
detail: Invalid or inactive API key.
PlanDoesNotPermit:
summary: Plan does not include this endpoint
value:
detail: Your current plan does not permit access. Requires a plan that includes **structured financials**.
'429':
description: Rate limit, plan quota or spend cap reached.
content:
application/json:
schema:
$ref: '#/components/schemas/RateLimitError'
examples:
BurstLimit:
summary: Too many requests per minute
value:
error: Too Many Requests
detail: Request was throttled. Expected available in 12 seconds.
retry_after_seconds: 12
scope: burst
type: burst_limit_exceeded
message: 'Rate limit reached: 120 requests per minute.'
resolution: 'Retry after 12 seconds (Retry-After header). Pay-as-you-go raises this to 50/sec: https://financialfilings.com/accounts/payg/'
rate_limit: 120/minute
payg_url: https://financialfilings.com/accounts/payg/
/line-item-definitions/{code}/:
get:
operationId: line_item_definitions_retrieve
description: '**Cost:** 1 credit per request.
---
One line item definition by its code.'
summary: Retrieve Line Item Definition
parameters:
- in: path
name: code
schema:
type: string
pattern: ^[^/]+$
required: true
tags:
- Financial Data
security:
- ApiKeyAuth: []
- CognitoJWT: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/LineItemDefinition'
examples:
Success:
value:
code: revenue
name: Total Revenue
statement_type: IS
statement_type_display: Income Statement
depth: 0
parent_code: null
sort_order: 10
category: ''
description: ''
aliases: []
templates:
- industrial
description: ''
'403':
description: Missing or invalid API key, or the plan does not include this endpoint.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetail'
examples:
MissingCredentials:
summary: No X-API-Key header
value:
detail: Authentication credentials were not provided.
type: authentication_required
resolution: 'Send your API key in the X-API-Key request header, e.g. curl -H "X-API-Key: <your key>" https://api.financialreports.eu/filings/ . A browser address bar never sends this header. No key yet? Get a free one at https://financialfilings.com/accounts/api-dashboard/ .'
dashboard_url: https://financialfilings.com/accounts/api-dashboard/
InvalidKey:
summary: Unknown or inactive API key
value:
detail: Invalid or inactive API key.
PlanDoesNotPermit:
summary: Plan does not include this endpoint
value:
detail: Your current plan does not permit access. Requires a plan that includes **structured financials**.
'429':
description: Rate limit, plan quota or spend cap reached.
content:
application/json:
schema:
$ref: '#/components/schemas/RateLimitError'
examples:
BurstLimit:
summary: Too many requests per minute
value:
error: Too Many Requests
detail: Request was throttled. Expected available in 12 seconds.
retry_after_seconds: 12
scope: burst
type: burst_limit_exceeded
message: 'Rate limit reached: 120 requests per minute.'
resolution: 'Retry after 12 seconds (Retry-After header). Pay-as-you-go raises this to 50/sec: https://financialfilings.com/accounts/payg/'
rate_limit: 120/minute
payg_url: https://financialfilings.com/accounts/payg/
components:
schemas:
PaginatedLineItemDefinitionList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
description: 'Total matching results. Exact for cheap queries, an estimate on broad or expensive ones. Do not use it to decide when to stop: follow `next` until it is null.'
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/LineItemDefinition'
LineItemDefinition:
type: object
properties:
code:
type: string
description: Stable machine code, e.g. `revenue`, `total_assets`. A code is never renamed; a retired code is replaced by a new one and drops out of this list.
maxLength: 80
name:
type: string
description: Human display name, e.g. 'Total Revenue'.
maxLength: 200
statement_type:
$ref: '#/components/schemas/StatementTypeEnum'
statement_type_display:
type: string
description: Human-readable statement type.
depth:
type: integer
maximum: 32767
minimum: 0
description: 'Hierarchy depth: 0 = top-level total/heading, 1 = component of a parent, 2 = sub-component.'
parent_code:
type:
- string
- 'null'
description: Code of the parent line item in the hierarchy, or null for top-level items.
sort_order:
type: integer
maximum: 2147483647
minimum: 0
description: Display order within (statement_type, category).
category:
type: string
description: Optional grouping within a statement (e.g. 'Operating Expenses').
maxLength: 80
description:
type: string
description: Definition of the line item.
aliases:
type: array
items:
type: string
readOnly: true
description: Alternative labels this line item may appear under in source filings.
templates:
type: array
items:
type: string
readOnly: true
description: 'KPI templates this line item is meaningful for: `industrial`, `bank`, `insurer`. Industrial-only items (gross profit, current assets, ...) are still served for banks and insurers but do not mean the same thing there. A company''s template is the `template` field of its financials.'
required:
- aliases
- code
- name
- statement_type
- statement_type_display
- templates
RateLimitError:
type: object
description: Body of a 429 response. The `Retry-After` header carries the same wait as `retry_after_seconds`. Only `detail` is always present.
properties:
detail:
type: string
description: A human-readable message describing the error.
error:
type: string
description: Always `Too Many Requests`.
retry_after_seconds:
type:
- integer
- 'null'
description: Seconds until the request may be retried, when known.
scope:
type:
- string
- 'null'
description: Which limit was hit, e.g. `burst`, `quota` or `payg_velocity`.
type:
type: string
description: Machine-readable error code, e.g. `burst_limit_exceeded`, `quota_limit_exceeded`, `daily_spend_cap_reached` or `monthly_spend_ceiling_reached`.
message:
type: string
description: A human-readable explanation of the limit.
resolution:
type: string
description: A human-readable hint on what to do next.
upgrade_url:
type: string
description: 'Where to upgrade: the pay-as-you-go card page for free accounts, else the plans page (quota errors).'
limit:
type: integer
description: The plan allowance that was used up (quota errors).
interval:
type: string
description: '`monthly` or `annual` (quota errors).'
resets_on:
type: string
format: date
description: UTC date the allowance resets (quota errors).
rate_limit:
type: string
description: The per-minute limit that refused the request, e.g. `120/minute` (burst errors).
payg_url:
type: string
description: Where to enable pay-as-you-go (quota and burst errors, when it applies).
dashboard_url:
type: string
description: Where to see current spend (spend-cap and spend-ceiling errors).
contact_url:
type: string
description: Where to ask for a higher limit (spend-cap and spend-ceiling errors).
required:
- detail
StatementTypeEnum:
enum:
- IS
- BS
- CFS
- SUP
type: string
description: '* `IS` - Income Statement
* `BS` - Balance Sheet
* `CFS` - Cash Flow Statement
* `SUP` - Supplemental / Ratio'
ErrorDetail:
type: object
properties:
detail:
type: string
description: A human-readable message describing the error.
type:
type: string
description: Machine-readable error code, e.g. `authentication_required`. Present on some errors only.
resolution:
type: string
description: A human-readable hint on how to fix the request. Present on some errors only.
error_type:
type: string
description: Machine-readable error code on validation errors. Present on some errors only.
required:
- detail
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
description: 'Server-to-server API key authentication. Provide your key in the `X-API-Key` request header. Keys can be generated and rotated from your account dashboard: https://financialfilings.com/profile/'
CognitoJWT:
type: http
scheme: bearer
bearerFormat: JWT
description: 'AWS Cognito-issued JWT access token. Provide the token in the `Authorization` header as: `Authorization: Bearer <access_token>`. Tokens are issued via the Cognito hosted UI or the OAuth2 authorization code flow at `https://auth.financialreports.eu`.'