FilingSift XBRL API

Deployed public raw-fact and network resources. The current router does not apply issuer or plan-history filters; composite responses are bounded.

Operations 10

GET /xbrl/mappings Get the versioned transparent standard-concept mapping registry #
GET /xbrl/facts List raw XBRL facts with source context IDs, parsed contexts, and units #
GET /xbrl/statements Get as-reported financial statement networks and their raw facts #
GET /xbrl/disclosures Get disclosure-topic and roll-forward-candidate networks #
GET /xbrl/quarters Get reported quarters and compatible source-linked YTD disaggregation #
GET /xbrl/revisions Get cross-filing fact revision history #
GET /xbrl/timeseries Get chart-ready source-linked standard-concept history #
GET /xbrl/peers Get a bounded cross-company period table #
GET /xbrl/conflicts List unresolved values sharing concept, period, dimensions, and unit #
GET /xbrl/comparability Review bounded financial fact alternatives without selecting a winner #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/filingsift:filingsift-xbrl-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

filingsift-xbrl-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: FilingSift XBRL API
  version: 1.0.0
  description: FilingSift v1 REST contract for source-cited SEC filing facts, facilities, covenants, filing comparisons, research workflows, and reference-source intelligence. Responses preserve source evidence, provenance, uncertainty, and validation status so every result can be traced to its origin. Route availability follows the production service and the authenticated account's permissions; current endpoint responses are authoritative. FilingSift does not automatically assign materiality, investment, financial, or legal conclusions. Request limits, authentication, issuer/history access, and pagination differ by resource. The URL query guard does not count JSON body fields. Query cost equals 5 plus the effective query-string limit (20 when omitted), plus 3 for each query parameter other than limit and cursor, plus 2 when a cursor is present. X-Query-Cost and X-Max-Query-Cost report the applied and allowed amounts when the request reaches the query guard; earlier refusals may omit them. Plan limits stop requests or account actions; they do not create overage charges. The SEC worker restarts one minute after its prior bounded run completes, plus randomized delay, with an operating target of discovery within five minutes of SEC acceptance. Extraction and delivery follow asynchronously. Active reference sources fetch on the first eligible cache miss with source-specific caches from five minutes to six hours. Treasury, Federal Reserve Board, OFR, BIS, the FDIC and GLEIF expansion datasets, and the Treasury Fiscal combined report have no deployed saved monitor. Alert mode instant makes a processed alert due for the next ingestion monitoring stage; quiet hours, capacity, and retries can defer delivery. Operating targets are not current-state claims; GET /coverage/status is authoritative for current SEC backlog and delay.
  contact:
    name: FilingSift Support
    email: support@filingsift.com
servers:
- url: https://api.filingsift.com/api/v1
  description: FilingSift production API
- url: http://127.0.0.1:5000/api/v1
  description: Local development
tags:
- name: XBRL
  description: Deployed public raw-fact and network resources. The current router does not apply issuer or plan-history filters; composite responses are bounded.
paths:
  /xbrl/mappings:
    get:
      tags:
      - XBRL
      operationId: getXbrlMappings
      summary: Get the versioned transparent standard-concept mapping registry
      description: Public exact-concept mappings for 11 standard concepts; issuer extensions can remain unmapped. This is not a complete normalized taxonomy.
      responses:
        '200':
          description: Mapping registry
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse'
        '429':
          $ref: '#/components/responses/RateLimited'
  /xbrl/facts:
    get:
      tags:
      - XBRL
      operationId: listXbrlFacts
      summary: List raw XBRL facts with source context IDs, parsed contexts, and units
      description: Public fact-ID pagination in meta.pagination. Reuse nextCursor as cursor; it is not a filter-bound snapshot cursor. Contexts retain parsed entity, period, dimensions, and a scenario-present flag, not arbitrary scenario XML. Shared query-cost and response-size limits also apply, so the route maximum of 500 may exceed the configured request budget.
      parameters:
      - in: query
        name: cik
        schema:
          type: string
          pattern: ^[0-9]{1,10}$
      - in: query
        name: accession
        schema:
          type: string
      - in: query
        name: concept
        schema:
          type: string
      - in: query
        name: standard_concept
        schema:
          type: string
      - in: query
        name: period_end
        schema:
          type: string
          format: date
      - in: query
        name: dimension_kind
        schema:
          type: string
          enum:
          - segment
          - geography
          - product
          - legal_entity
          - other
      - in: query
        name: cursor
        schema:
          type: string
          pattern: ^[0-9a-f]{64}$
      - in: query
        name: limit
        schema:
          type: integer
          minimum: 1
          maximum: 500
          default: 100
      responses:
        '200':
          description: Raw XBRL facts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '429':
          $ref: '#/components/responses/RateLimited'
  /xbrl/statements:
    get:
      tags:
      - XBRL
      operationId: getXbrlStatements
      summary: Get as-reported financial statement networks and their raw facts
      description: Public bounded view of one package; reads at most 5000 facts and 500 conflicts without continuation. Use paged raw facts for larger packages.
      parameters:
      - in: query
        name: accession
        required: true
        schema:
          type: string
      - in: query
        name: statement
        schema:
          type: string
          enum:
          - income_statement
          - balance_sheet
          - cash_flow_statement
      responses:
        '200':
          description: As-reported statements
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
  /xbrl/disclosures:
    get:
      tags:
      - XBRL
      operationId: getXbrlDisclosures
      summary: Get disclosure-topic and roll-forward-candidate networks
      description: Public view reading at most 5000 facts without continuation. Network roles and roll-forward flags do not establish complete footnote extraction.
      parameters:
      - in: query
        name: accession
        required: true
        schema:
          type: string
      - in: query
        name: topic
        schema:
          type: string
      responses:
        '200':
          description: As-reported disclosure networks
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
  /xbrl/quarters:
    get:
      tags:
      - XBRL
      operationId: getXbrlQuarters
      summary: Get reported quarters and compatible source-linked YTD disaggregation
      description: Reads at most 5000 facts. Reported-quarter candidates use 70–110-day durations; YTD subtraction uses compatible observations up to 300 days. Annual-minus-nine-month Q4 derivation is outside this endpoint.
      parameters:
      - in: query
        name: cik
        required: true
        schema:
          type: string
      - in: query
        name: standard_concept
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Reported and derived quarters
        '400':
          $ref: '#/components/responses/BadRequest'
  /xbrl/revisions:
    get:
      tags:
      - XBRL
      operationId: getXbrlRevisions
      summary: Get cross-filing fact revision history
      description: Public view of differing comparable observations from at most 5000 facts. It does not identify formal restatements or retain every parser revision.
      parameters:
      - in: query
        name: cik
        required: true
        schema:
          type: string
      - in: query
        name: standard_concept
        schema:
          type: string
      responses:
        '200':
          description: Revision history
        '400':
          $ref: '#/components/responses/BadRequest'
  /xbrl/timeseries:
    get:
      tags:
      - XBRL
      operationId: getXbrlTimeSeries
      summary: Get chart-ready source-linked standard-concept history
      description: Public bounded view reading at most 5000 facts without continuation; not a complete historical archive.
      parameters:
      - in: query
        name: cik
        required: true
        schema:
          type: string
      - in: query
        name: standard_concept
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Time-series data
        '400':
          $ref: '#/components/responses/BadRequest'
  /xbrl/peers:
    get:
      tags:
      - XBRL
      operationId: getXbrlPeerTable
      summary: Get a bounded cross-company period table
      description: Accepts 2–25 distinct comma-separated CIKs and reads at most 500 matching facts per issuer. Missing values and conflicts remain explicit.
      parameters:
      - in: query
        name: ciks
        required: true
        schema:
          type: string
      - in: query
        name: standard_concept
        required: true
        schema:
          type: string
      - in: query
        name: period_end
        required: true
        schema:
          type: string
          format: date
      responses:
        '200':
          description: Peer table
        '400':
          $ref: '#/components/responses/BadRequest'
  /xbrl/conflicts:
    get:
      tags:
      - XBRL
      operationId: listXbrlConflicts
      summary: List unresolved values sharing concept, period, dimensions, and unit
      description: Public bounded result of at most 500 conflicts with no continuation cursor; the server does not select a winning value.
      parameters:
      - in: query
        name: cik
        schema:
          type: string
      - in: query
        name: accession
        schema:
          type: string
      - in: query
        name: limit
        schema:
          type: integer
          minimum: 1
          maximum: 500
          default: 100
      responses:
        '200':
          description: Explicit XBRL conflicts
        '400':
          $ref: '#/components/responses/BadRequest'
  /xbrl/comparability:
    get:
      tags:
      - XBRL
      operationId: reviewXbrlComparability
      summary: Review bounded financial fact alternatives without selecting a winner
      description: Deployed with representative public-data and automated competing-context, unit, period, source-availability and pair-bound acceptance. Requires CIK and a registry standard concept; optional period_end narrows the candidate set. Reads limit plus one facts to detect truncation, then compares at most limit facts. No continuation cursor; narrow the request or use paged raw facts. A nontruncated read does not establish complete SEC coverage. Context, unit, scope, mapping and numeric alternatives remain explicit. No winning value, analyst override, formal restatement or verification upgrade is produced. All bounded pairs are evaluated; at most 200 prioritized pair details are returned with separate comparisonsTruncated and inputTruncated flags. Summary counts include all evaluated pairs. Shared response-size limits apply. A missing XBRL fact source returns HTTP 503, not an empty successful review.
      security: []
      parameters:
      - in: query
        name: cik
        required: true
        schema:
          type: string
          pattern: ^[0-9]{1,10}$
      - in: query
        name: standard_concept
        required: true
        description: A standardConcept from /xbrl/mappings
        schema:
          type: string
      - in: query
        name: period_end
        schema:
          type: string
          format: date
      - in: query
        name: limit
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 40
      responses:
        '200':
          description: Bounded no-winner comparability review with explicit input truncation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FinancialComparabilityResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '429':
          $ref: '#/components/responses/RateLimited'
        '503':
          description: XBRL fact source unavailable; error code xbrl_review_unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    ErrorResponse:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          - reason
          properties:
            code:
              type: string
            message:
              type: string
            reason:
              $ref: '#/components/schemas/ErrorReason'
        requestId:
          type: string
        meta:
          $ref: '#/components/schemas/ApiMeta'
    ErrorReason:
      type: object
      required:
      - category
      - retryable
      properties:
        category:
          type: string
          enum:
          - request
          - rate_limit
          - response_limit
          - service
        retryable:
          type: boolean
        retryAfterSeconds:
          type: integer
        details:
          type:
          - object
          - 'null'
          additionalProperties: true
        maximumCost:
          type: integer
        calculatedCost:
          type: integer
        maximumBytes:
          type: integer
        actualBytes:
          type: integer
    ApiMeta:
      type: object
      required:
      - schemaVersion
      - apiVersion
      properties:
        schemaVersion:
          type: string
          const: 1.0.0
        apiVersion:
          type: string
          const: '1'
        mode:
          type: string
        pagination:
          $ref: '#/components/schemas/Pagination'
    GenericResponse:
      type: object
      required:
      - data
      - meta
      properties:
        data:
          type: object
          additionalProperties: true
        meta:
          $ref: '#/components/schemas/ApiMeta'
    FinancialComparabilityReason:
      type: object
      required:
      - code
      - category
      - status
      - left
      - right
      - message
      properties:
        code:
          type: string
        category:
          type: string
        status:
          type: string
          enum:
          - same
          - different
          - unknown
          - observation
        left: {}
        right: {}
        message:
          type: string
        blocking:
          type: boolean
          description: Present on a candidate issue; whether unresolved candidate metadata prevents scalar resolution
    Pagination:
      type: object
      required:
      - limit
      - returned
      - hasMore
      - nextCursor
      properties:
        limit:
          type: integer
          minimum: 1
          maximum: 100
        returned:
          type: integer
          minimum: 0
          maximum: 100
        hasMore:
          type: boolean
        nextCursor:
          type:
          - string
          - 'null'
    FinancialComparabilityReview:
      type: object
      description: All-pairs review of a bounded candidate set. Reported numeric text is normalized without currency or scale conversion. Different rounding declarations may explain a disagreement but never resolve it. same_observed_value records exact numeric agreement while financial comparability remains a separate analyst determination. selectedFactId and value remain null in this read-only review, including when observed values are the same.
      required:
      - schemaVersion
      - scope
      - reviewState
      - selectedFactId
      - value
      - candidates
      - comparisons
      - summary
      - bounds
      - limitations
      properties:
        schemaVersion:
          type: string
          const: filingsift-financial-comparability-v1
        scope:
          type: object
          description: Echoed normalized review scope; not an immutable data edition
          required:
          - cik
          - standardConcept
          - periodEnd
          - limit
          - order
          properties:
            cik:
              type: string
              pattern: ^[0-9]{10}$
            standardConcept:
              type: string
            periodEnd:
              type:
              - string
              - 'null'
              format: date
            limit:
              type: integer
              minimum: 1
              maximum: 100
            order:
              type: string
              const: fact_id_ascending
        reviewState:
          type: string
          enum:
          - insufficient_facts
          - unresolved_value_conflict
          - scope_difference
          - insufficient_metadata
          - same_observed_value
        selectedFactId:
          type: 'null'
        value:
          type: 'null'
        candidates:
          type: array
          maxItems: 100
          items:
            type: object
            required:
            - candidateId
            - sourceFact
            - normalizedNumericValue
            - valueState
            - issues
            properties:
              candidateId:
                type: string
              sourceFact:
                type: object
                additionalProperties: true
                description: Unmodified source fact retaining its accession, SEC/evidence provenance, exact parsed context, unit, taxonomy/mapping metadata and verification state; missing metadata is not invented
              normalizedNumericValue:
                type:
                - string
                - 'null'
              valueState:
                type: string
                enum:
                - numeric
                - nil
                - missing
                - invalid
                - unsafe_numeric_input
              issues:
                type: array
                items:
                  allOf:
                  - $ref: '#/components/schemas/FinancialComparabilityReason'
                  - type: object
                    required:
                    - blocking
        comparisons:
          type: array
          maxItems: 200
          description: Prioritized sample ordered by value conflict, scope difference, insufficient metadata, then same observed value, with stable input-index ties
          items:
            type: object
            required:
            - comparisonId
            - leftCandidateId
            - rightCandidateId
            - leftFactId
            - rightFactId
            - reviewState
            - selectedFactId
            - value
            - reasons
            properties:
              comparisonId:
                type: string
              leftCandidateId:
                type: string
              rightCandidateId:
                type: string
              leftFactId:
                type:
                - string
                - 'null'
              rightFactId:
                type:
                - string
                - 'null'
              reviewState:
                type: string
                enum:
                - unresolved_value_conflict
                - scope_difference
                - insufficient_metadata
                - same_observed_value
              selectedFactId:
                type: 'null'
              value:
                type: 'null'
              reasons:
                type: array
                items:
                  $ref: '#/components/schemas/FinancialComparabilityReason'
        summary:
          type: object
          description: Counts all pairs evaluated within the bounded candidate set, including pair details omitted from comparisons
          required:
          - factCount
          - comparisonCount
          - unresolvedPairCount
          - scopeDifferencePairCount
          - insufficientMetadataPairCount
          - sameObservedValuePairCount
          properties:
            factCount:
              type: integer
              minimum: 0
              maximum: 100
            comparisonCount:
              type: integer
              minimum: 0
              maximum: 4950
            unresolvedPairCount:
              type: integer
              minimum: 0
              maximum: 4950
            scopeDifferencePairCount:
              type: integer
              minimum: 0
              maximum: 4950
            insufficientMetadataPairCount:
              type: integer
              minimum: 0
              maximum: 4950
            sameObservedValuePairCount:
              type: integer
              minimum: 0
              maximum: 4950
        bounds:
          type: object
          required:
          - maximumFacts
          - maximumComparisons
          - maximumReturnedComparisons
          - returnedComparisonCount
          - comparisonsTruncated
          - inputTruncated
          properties:
            maximumFacts:
              type: integer
              const: 100
            maximumComparisons:
              type: integer
              const: 4950
            maximumReturnedComparisons:
              type: integer
              const: 200
            returnedComparisonCount:
              type: integer
              minimum: 0
              maximum: 200
            comparisonsTruncated:
              type: boolean
            inputTruncated:
              type: boolean
        limitations:
          type: array
          items:
            type: string
    FinancialComparabilityResponse:
      type: object
      required:
      - data
      - meta
      properties:
        data:
          $ref: '#/components/schemas/FinancialComparabilityReview'
        meta:
          $ref: '#/components/schemas/ApiMeta'
  responses:
    RateLimited:
      description: API-wide fixed-window request limit exceeded
      headers:
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimitLimit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimitRemaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimitReset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    BadRequest:
      description: Invalid filter, cursor, request, or query cost
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  headers:
    RateLimitReset:
      description: Seconds until the current fixed window resets
      schema:
        type: integer
    RateLimitRemaining:
      description: Requests remaining in the current window
      schema:
        type: integer
    RetryAfter:
      description: Seconds before retrying
      schema:
        type: integer
    RateLimitLimit:
      description: Request limit for the current fixed window
      schema:
        type: integer
  securitySchemes:
    BrowserSession:
      type: apiKey
      in: cookie
      name: __Host-filingsift_session
      description: Secure HttpOnly SameSite=Lax production browser cookie, set by authentication responses. Raw tokens are not returned to browser JavaScript. Cookie-authenticated mutations require a trusted Origin and X-FilingSift-CSRF header equal to 1. API keys do not authenticate browser-only workspace operations.
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: FilingSift API key
      description: High-entropy fs_live API key in Authorization. FilingSift persists only token hashes. Production browser sessions use BrowserSession cookies, not Bearer tokens.