API Documentation
    Add a header to begin generating the table of contents
    Scroll to Top

    API Documentation

    DataDock provides developers with real-time access to Global Sanctions Lists and SEC Filing Data. Our APIs are designed to be secure, scalable, and high-performance.
    1. Introduction

    Dashboard URL

    				
    					https://app.datadock.ai
    
    				
    			

    API Base URL

    				
    					 https://api.datadock.ai
    
    				
    			

    2. Getting Started

    2.1 Registration
    Users can register in two ways:
    Recommended Method — Dashboard Registration
    It is strongly recommended that users register through the dashboard at https://app.datadock.ai
    From the dashboard, users can:

    Create an account easily

    Register with your email address. Upon successful registration, you will receive a confirmation email.

    Verify their email

    Click on the verification link in your email to activate your account.

    Log in

    After verification, log in to your dashboard.

    Retrieve their API token

    Your API token will be displayed on the dashboard and sent to your email.

    View and manage their subscription plan

    See your current plan details and usage limits.

    Upgrade or downgrade plans

    Change your subscription based on your needs.

    Monitor real-time API usage

    Track your API calls and data consumption.

    View billing history

    Access invoices and payment records.

    Alternative Method — Register via API Endpoint

    Developers may also register directly through the API:
    POST
    https://api.datadock.ai/auth/register
    Field Type Required Description
    username string Yes Unique username
    email string Yes Valid email address
    password string Yes Account password (hashed server-side)

    Request Body (application/json)

    				
    					{
      "username": "your_username",
      "email": "your_email@example.com",
      "password": "your_secure_password"
    }
    				
    			

    Sample Response

    				
    					{
      "message": "User registered. Please check your email to verify your account and get your API token."
    }
    				
    			
    2.2 Email Verification
    After registration (either via dashboard or API), users receive an email containing:

    Subject: Welcome to Datadock!

    Once the email is verified, the token becomes active and can be used immediately to access the APIs.

    2.3 Authentication
    All protected endpoints (e.g., /api/v1/filingflow, /api/v1/globalcomply require the API token to be included in the request header.
    Method Header Format
    API Key (direct) X-API-Key 778ce6d012f4a21d...
    API Key (Bearer) Authorization Bearer 778ce6d012f4a21d...
    JWT Token Authorization Bearer eyJhbGciOiJIUzI1NiIs...
    JWT tokens are obtained from POST /auth/signin and expire after 2 hours. Use POST /auth/refresh-token with your refresh token (valid 30 days) to get a new access token.
    Header Format

    Authorization Header

    				
    					Authorization: Bearer your_api_token
    				
    			
    Example Request

    cURL

    				
    					GET /api/v1/filingflow?form_type=form_8k
    Authorization: Bearer c49ca84bcc452f873********b280776d
    				
    			

    If the token is missing or invalid, the API will return an authentication error.

    2.4 Rate Limiting
    To ensure reliable performance for all users, rate limits apply:
    Endpoint Type Limit
    Default 100 requests per hour
    High-load endpoints 5 requests per minute
    2.5 Plans & Quota
    Plan Daily Calls Monthly Bulk Quota Bulk Export Price
    Explorer 50 None No Free
    Growth 1,000 20 GB Yes $35/mo - $370/yr
    Scale 10,000 250 GB Yes $149/mo - $1,520/yr
    Enterprise Unlimited Custom Yes Custom (contact sales)
    Extra +100/unit +5 GB/unit Yes $4/unit (add-on)
    Extra quota units can be purchased on top of Growth or Scale plans. Units allowed: up to 15GB for Growth, up to 150GB for Scale.

    3. FilingFlow Query API – SEC Filings

    The FilingFlow API enables querying metadata from U.S. Securities and Exchange Commission (SEC) filings across various form types. The data is pulled from the EDGAR index and made available for structured search and export.

    Each filing is returned in JSON format, containing metadata such as company name, form type, filing and event dates, geographic info, reporting persons, and filing sources.

    3.1 Use Cases
    3.2 Global Filterable Fields
    Filter keys available globally:
    form_type
    company_name
    cik
    accession
    filing_date
    city
    state
    zipcode
    former_name
    event_date
    name_address
    names_of_reporting_persons
    owner_cik
    issuer_name
    owner_name
    report_period
    address
    report_type
    filer_cik
    issuer_cik
    issuer_city
    issuer_state
    issuer_zip
    owner_zip
    issuer_symbol
    cusip
    Range Filters
    filing_date_min / filing_date_max
    report_period_min / report_period_max
    Key Features
    3.2.1 Field Availability Exceptions
    While the above fields are globally supported, not all forms contain all fields. Users should be aware of the following limitations when constructing queries.
    Forms Without Date Fields
    The following forms do not include a filing_date or report_period field. Date-based filters will not apply directly to these forms.
    These forms typically inherit their reporting period from a parent filing and must be queried using joins or indirect filters.
    • Affected Forms:
    form_10k_balance_sheet
    form_10k_balance_sheet_parenthetical
    form_10k_cash_flow
    form_10k_comprehensive_income
    form_10k_comprehensive_loss
    form_10k_comprehensive_loss_parenthetical
    form_10k_consolidated_statements_of_equity
    form_10k_consolidated_statements_of_shareholders_equity
    form_10k_consolidated_stmts_shareholders_equity_parenthetical
    form_10k_operation
    form_10kt_balance_sheet
    form_10kt_cashflow_statement
    form_10kt_equity_statement
    form_10kt_operations_statement
    form_10q_balance_sheet
    form_10q_cashflow_statement
    form_10q_equity_statement
    form_10q_income_statement
    form_10q_operations_statement
    form_10qt_balance_sheet
    form_10qt_cashflow_statement
    form_10qt_equity_statement
    form_10qt_income_statement
    form_10qt_operations_statement
    form_11k_changes_in_net_assets_available_for_benefits
    form_11k_net_assets_available_for_benefits
    form_11k_schedule_h_4i_assets_held_at_end_of_year
    form_11k_schedule_h_4j_reportable_transactions
    form_11kt_changes_in_net_assets_available_for_benefits
    form_11kt_net_assets_available_for_benefits
    form_11kt_schedule_h_4i_assets_held_at_end_of_year
    form_144
    form_1a
    form_1a_pos
    form_d
    form_f1mef
    form_f3
    form_f3asr
    form_f3dpos
    form_f3mef
    form_ma
    form_n18f1
    form_n2
    form_n23c3c
    Forms Without CIK Fields
    The following forms do not include a cik, owner_cik, filer_cik, or issuer_cik field. Entity-based filtering will not apply directly to these forms.
    These forms require joins with related filings or metadata tables to resolve the associated entity.
    • Affected Forms:
    form_1012b
    form_1012g
    form_10k_consolidated_statements_of_equity
    form_10k_consolidated_statements_of_shareholders_equity
    form_10k_consolidated_stmts_shareholders_equity_parenthetical
    form_10q
    form_10qt
    form_11k
    form_11k_changes_in_net_assets_available_for_benefits
    form_11k_net_assets_available_for_benefits
    form_11k_schedule_h_4i_assets_held_at_end_of_year
    form_11k_schedule_h_4j_reportable_transactions
    form_11kt
    form_11kt_changes_in_net_assets_available_for_benefits
    form_11kt_net_assets_available_for_benefits
    form_11kt_schedule_h_4i_assets_held_at_end_of_year
    form_1512b
    form_1512g
    form_1515d
    form_1aw
    form_f1mef
    form_f3
    form_f3asr
    form_irannotice
    form_ma
    form_n14mef
    form_n18f1
    form_n2
    form_n23c3c
    form_n2asr
    form_sc_13d
    form_sc_13g
    3.3 Endpoints
    Method Endpoint Description
    GET /api/v1/filingflow/forms List all available form types
    GET /api/v1/filingflow/columns?form_type=<type> List filterable columns for a given form type
    POST /api/v1/filingflow Query filing records (paginated, 20 per page)
    POST /api/v1/filingflow/fortune500 Bulk export Fortune 500 company filings (async job)
    GET /api/v1/filingflow/fortune500/jobs/<job_id> Poll Fortune 500 job status
    GET /api/v1/filingflow/fortune500/download/<job_id> Download completed Fortune 500 export (one-time)
    3.4 Example Queries
    GET
    /api/v1/filingflow
    Example Request

    cURL

    				
    					https://api.datadock.ai/api/v1/filingflow?form_type=form_8k&cik=0000104169&api_key=xxx
    Authorization: Beareryour_api_token
    				
    			
    JSON Response

    Response

    				
    					{
      "count": 1,
      "results": [
        {
          "schema_location": "example_value",
          "schema_version": "example_value",
          "document_type": "example_value",
          "livetest_flag": "example_value",
          "confirming_copy_flag": "example_value",
          "return_copy_flag": "example_value",
          "filing_website_notice_flag": "example_value",
          "filer_cik": "0000123456"
        }
      ]
    }
    				
    			
    3.5 Step-by-Step Guide
    Step 1: Install and Set Up Postman (or your preferred API testing tool)
    Parameters:
    3.6 Query Parameters — POST /api/v1/filingflow

    This endpoint accepts a JSON body. Use GET /api/v1/filingflow/columns?form_type= first to discover valid filter fields for each form.

    Filter Key Description
    date Exact date match — YYYY-MM-DD
    date_min Date range start — YYYY-MM-DD
    date_max Date range end — YYYY-MM-DD
    Flexible date input is supported: 2024-10-11 · 2024-Oct-11 · Oct 11 2024 · October 11 2024 · 11 Oct 2024 · 10/11/2024. The API normalises all formats server-side.

    Example request body:

    				
    					{
      "form_type": "form_8k",
      "filters": { 
       "owner_cik": "789019”
        "date_min": "2024-01-01",
        "date_max": "2024-12-31"
      },
      "format": "json"
    }
    
    				
    			

    Example response:

    				
    					{'next': None, 
    'previous': None, 
      'results': [{'amendment_flag': 'false', 'city_area_code': '425',
      'commission_file_number': '001-37845', 'document_type': '8-K',     
      'emerging_growth_company': 'false', 'entity_ex_transition_period': 'N/A',     'exchange_name': 'NASDAQ; NASDAQ; NASDAQ', 'file_name': 'form_8k_0000789019_0000950170-24-008809', 'former_name': 'N/A', 'incorporation_jurisdiction': 'Washington', 'irs_employer_id': '91-1144442', 'issuer_symbol': 'MSFT; MSFT; MSFT', 'item_1': 'N/A', 'item_2': '# Item 2.02. Results of Operations and Financial Condition \n\nOn January 30, 2024, Microsoft Corporation issued a press release announcing its financial results for the fiscal quarter ended December 31, 2023. A copy of the press release is furnished as Exhibit 99.1 to this report.\n\nIn accordance with General Instruction B. 2 of Form 8-K, the information in this Current Report on Form 8-K, including Exhibit 99.1, shall not be deemed to be "filed" for purposes of Section 18 of the Securities Exchange Act of 1934, as amended (the "Exchange Act"), or otherwise subject to the liability of that section, and shall not be incorporated by reference into any registration statement or other document filed under the Securities Act of 1933, as amended, or the Exchange Act, except as shall be expressly set forth by specific reference in such filing.', ..., 'written_communications': 'false'}]}
    
    				
    			
    3.7 Supported Form Types
    Use GET /api/v1/filingflow/forms to retrieve the live list. Selected common form types are shown below.
    Form Type Key Description Available Filters/Column Names (besides date/date_min/date_max)
    form_13fhr Institutional investment manager quarterly holdings schema_location, schema_version, document_type, livetest_flag, confirming_copy_flag, return_copy_flag, filing_website_notice_flag, filer_cik, filer_ccc, report_period, report_calendar_or_quarter_ended, is_amendment, amendment_number, amendment_type_restatement, amendment_type_new_holdings, filing_manager_name, filing_manager_address_street1, filing_manager_address_street2, filing_manager_address_city, filing_manager_address_state_or_country, filing_manager_address_zip_code, report_type, form_13f_file_number, crd_number, sec_file_number, instruction_5_info_provided, additional_information, signatory_name, signatory_title, signatory_phone, signatory_signature, signatory_city, signatory_state_or_country, signature_date, other_included_managers_count, table_entry_total, table_value_total, is_confidential_info_omitted, other_manager2_sequence_number, other_manager2_cik, other_manager2_form_13f_file_number, other_manager2_crd_number, other_manager2_sec_file_number, other_manager2_name
    form_13fnt 13F notice filings (no holdings table) form_13fnt 13F notice filings (no holdings table) schema_location, schema_version, document_type, livetest_flag, flags, confirming_copy_flag, return_copy_flag, filing_website_notice_flag, filer_cik, filer_ccc, report_period, report_calendar_or_quarter_ended, is_amendment, amendment_number, amendment_type_restatement, amendment_type_new_holdings, confidentiality_denied_or_expired, filing_manager_name, filing_manager_address_street1, filing_manager_address_street2, filing_manager_address_city, filing_manager_address_state_or_country, filing_manager_address_zip_code, report_type, form_13f_file_number, crd_number, sec_file_number, instruction_5_info_provided, additional_information, other_manager_form_13f_file_number, other_manager_crd_number, other_manager_sec_file_number, other_manager_name, other_manager_cik, signatory_name, signatory_title, signatory_phone, signatory_signature, signatory_city, signatory_state_or_country, signature_date
    form_3 Initial statement of beneficial ownership schema_version, document_type, report_period, no_securities_owned, issuer_cik, issuer_name, issuer_symbol, owner_cik, owner_name, owner_street1, owner_street2, owner_city, owner_state, owner_zip, owner_state_description, is_director, is_officer, is_ten_percent_owner, is_other_relationship, nonderivative_holding_security_title, nonderivative_holding_shares_owned_after, nonderivative_holding_shares_owned_after_footnote_id, nonderivative_holding_ownership_nature, derivativetable, footnote_id, footnote_text, remarks, signature_name, signature_date, nonderivativetable, footnotes, officer_title, other_relationship_text, derivative_holding_expiration_date_footnote_id, nonderivative_holding_price_per_share, nonderivative_holding_transaction_code, nonderivative_holding_transaction_date, derivative_holding_underlying_security_shares_footnote_id, nonderivative_holding_price_footnote_id, derivative_holding_exercise_date, derivative_holding_shares_footnote_id, nonderivative_holding_equity_swap_involved, derivative_holding_date, derivative_holding_underlying_security_title, nonderivative_holding_timeliness, derivative_holding_conversion_exercise_price_footnote_id, derivative_holding_security_title_footnote_id, derivative_holding_underlying_security_title_footnote_id, derivative_holding_security_title, derivative_holding_transaction_form_type, derivative_holding_shares_owned_after, derivative_holding_deemed_execution_date_footnote_id, derivative_holding_exercise_date_footnote_id, derivative_holding_ownership_nature_footnote_id, derivative_holding_equity_swap_involved, derivative_holding_conversion_exercise_price, nonderivative_holding_security_title_footnote_id, nonderivative_holding_acquired_disposed_code, derivative_holding_underlying_security_shares, derivative_holding_timeliness, nonderivative_holding_ownership_nature_details, derivative_holding_acquired_disposed_code, derivative_holding_shares_owned_after_footnote_id, nonderivative_holding_transaction_code_footnote_id, derivative_holding_deemed_execution_date, derivative_holding_code_footnote_id, derivative_holding_ownership_nature, rule_10b5_1_c_conditions, derivative_holding_price_per_share, derivative_holding_price_footnote_id, derivative_holding_ownership_nature_details_footnote_id, derivative_holding_shares, nonderivative_holding_transaction_form_type, derivative_holding_ownership_nature_details, derivative_holding_expiration_date, nonderivative_holding_shares_footnote_id, nonderivative_holding_ownership_nature_details_footnote_id, nonderivative_holding_shares, derivative_holding_code, nonderivative_holding_deemed_execution_date_footnote_id, nonderivative_holding_deemed_execution_date
    form_4 Statement of changes in beneficial ownership (insider trades) schema_version, document_type, report_period, not_subject_to_section16, issuer_cik, issuer_name, issuer_symbol, owner_cik, owner_name, owner_street1, owner_street2, owner_city, owner_state, owner_zip, owner_state_description, is_director, is_officer, is_ten_percent_owner, is_other_relationship, other_relationship_text, officer_title, rule_10b5_1_c_conditions, nonderivative_transaction_security_title, nonderivative_transaction_date, nonderivative_transaction_date_footnote_id, nonderivative_transaction_deemed_exec_date, nonderivative_transaction_deemed_exec_date_footnote_id, nonderivative_transaction_transaction_form_type, nonderivative_transaction_transaction_code, nonderivative_transaction_equity_swap_involved, nonderivative_transaction_transaction_timeliness, nonderivative_transaction_transaction_shares, nonderivative_transaction_transaction_shares_footnote_id, nonderivative_transaction_price_per_share, nonderivative_transaction_price_per_share_footnote_id, nonderivative_transaction_acquired_disposed_code, nonderivative_transaction_shares_owned_after, nonderivative_transaction_ownership_type, nonderivative_transaction_ownership_nature, nonderivative_holding_security_title, nonderivative_holding_shares_owned_after, nonderivative_holding_ownership_type, nonderivative_holding_ownership_nature, nonderivative_holding_ownership_nature_footnote_id, nonderivative_transaction_shares_owned_after_footnote_id, nonderivative_table, derivative_table, derivative_security_title, derivative_transaction_date, derivative_transaction_date_footnote_id, conversion_or_exercise_price, derivative_conversion_or_exercise_price_footnote_id, derivative_transaction_form_type, derivative_transaction_code, derivative_equity_swap_involved, derivative_transaction_shares, derivative_transaction_shares_footnote_id, derivative_transaction_price_per_share, derivative_transaction_price_per_share_footnote_id, derivative_transaction_acquired_disposed_code, derivative_exercise_date, derivative_exercise_date_footnote_id, derivative_expiration_date, derivative_expiration_date_footnote_id, underlying_security_title, underlying_security_title_footnote_id, underlying_security_shares, underlying_security_shares_footnote_id, derivative_shares_owned_after, derivative_shares_owned_after_footnote_id, derivative_ownership_type, derivative_ownership_type_footnote_id, footnote_id, footnote_text, signature_name, signature_date, remarks
    form_5 Annual statement of changes in beneficial ownership schema_version, document_type, report_period, not_subject_to_section16, form3_holdings_reported, form4_transactions_reported, issuer_cik, issuer_name, issuer_symbol, owner_cik, owner_name, owner_street1, owner_street2, owner_city, owner_state, owner_zip, owner_state_description, is_director, is_officer, is_ten_percent_owner, is_other_relationship, officer_title, nonderivative_transaction_security_title, nonderivative_transaction_date, nonderivative_transaction_date_footnote_id, nonderivative_transaction_deemed_execution_date, nonderivative_transaction_form_type, nonderivative_transaction_code, nonderivative_transaction_equity_swap_involved, nonderivative_transaction_timeliness, nonderivative_transaction_shares, nonderivative_transaction_price_per_share, nonderivative_transaction_acquired_disposed_code, nonderivative_transaction_shares_owned_after, nonderivative_transaction_ownership_nature, derivative_holding_security_title, derivative_holding_conversion_exercise_price_footnote_id, derivative_holding_transaction_form_type, derivative_holding_exercise_date_footnote_id, derivative_holding_expiration_date_footnote_id, derivative_holding_underlying_security_title, derivative_holding_underlying_security_title_footnote_id, derivative_holding_underlying_security_shares_footnote_id, derivative_holding_shares_owned_after, derivative_holding_ownership_nature, footnote_id, footnote_text, remarks, signature_name, signature_date, nonderivative_transaction_code_footnote_id, nonderivative_transaction_ownership_nature_details, other_relationship_text, nonderivative_holding_security_title, nonderivative_holding_shares_owned_after, nonderivative_holding_ownership_nature, nonderivative_holding_ownership_nature_details_footnote_id, nonderivative_holding_ownership_nature_details, derivativetable, derivative_holding_date, nonderivative_holding_price_per_share, derivative_transaction_shares_owned_after_footnote_id, nonderivative_holding_equity_swap_involved, derivative_holding_conversion_exercise_price, derivative_transaction_acquired_disposed_code, derivative_transaction_code_footnote_id, derivative_holding_shares_footnote_id, derivative_transaction_shares_footnote_id, nonderivative_holding_acquired_disposed_code, nonderivative_transaction_deemed_execution_date_footnote_id, derivative_transaction_security_title_footnote_id, derivative_transaction_ownership_nature_details_footnote_id, derivative_transaction_shares_owned_after, nonderivative_holding_transaction_date_footnote_id, derivative_transaction_ownership_nature_details, derivative_holding_deemed_execution_date, nonderivative_holding_shares_footnote_id, derivative_holding_timeliness, nonderivative_transaction_shares_footnote_id, nonderivative_transaction_shares_owned_after_footnote_id, nonderivative_holding_deemed_execution_date, derivative_holding_price_per_share, rule_10b5_1_c_conditions, nonderivative_holding_code_footnote_id, derivative_holding_ownership_nature_details_footnote_id, derivative_holding_expiration_date, derivative_transaction_exercise_date, derivative_holding_equity_swap_involved, derivative_holding_code_footnote_id, nonderivative_transaction_price_footnote_id, derivative_transaction_security_title, derivative_transaction_date, derivative_holding_ownership_nature_details, derivative_transaction_underlying_security_shares, nonderivative_holding_transaction_form_type, derivative_holding_price_footnote_id, derivative_transaction_ownership_nature, derivative_transaction_exercise_date_footnote_id, derivative_holding_acquired_disposed_code, derivative_transaction_expiration_date_footnote_id, derivative_holding_shares_owned_after_footnote_id, derivative_transaction_form_type, derivative_holding_ownership_nature_footnote_id, derivative_transaction_price_per_share, nonderivative_transaction_ownership_nature_footnote_id, derivative_holding_exercise_date, nonderivative_holding_deemed_execution_date_footnote_id, derivative_holding_security_title_footnote_id, derivative_transaction_conversion_exercise_price_footnote_id, derivative_transaction_underlying_security_title, derivative_holding_code, derivative_holding_shares, nonderivative_holding_security_title_footnote_id, nonderivative_holding_transaction_code, derivative_transaction_ownership_nature_footnote_id, derivative_transaction_conversion_exercise_price, derivative_transaction_shares, derivative_transaction_code, derivative_transaction_price_footnote_id, nonderivative_holding_shares_owned_after_footnote_id, derivative_holding_deemed_execution_date_footnote_id, nonderivative_holding_timeliness, nonderivative_transaction_ownership_nature_details_footnote_, derivative_transaction_deemed_execution_date, derivative_transaction_expiration_date, nonderivative_holding_transaction_date, nonderivative_transaction_security_title_footnote_id, derivative_holding_underlying_security_shares, derivative_transaction_deemed_execution_date_footnote_id, derivative_transaction_equity_swap_involved, nonderivative_holding_ownership_nature_footnote_id, nonderivative_holding_shares, nonderivative_holding_price_footnote_id, derivative_transaction_underlying_security_title_footnote_id, derivative_transaction_timeliness, derivative_transaction_underlying_security_shares_footnote_i
    form_8k Current report — major corporate events file_name, amendment_flag, owner_cik, document_type, report_period, owner_name, incorporation_jurisdiction, commission_file_number, irs_employer_id, owner_street1, owner_street2, owner_city, owner_state, owner_zip, city_area_code, registrant_phone_number, former_name, written_communications, soliciting_material, pre_commencement_tender, pre_commencement_issuer, security_title, issuer_symbol, exchange_name, emerging_growth_company, entity_ex_transition_period, item_1, item_2, item_3, item_4, item_5, item_6, item_7, item_8, item_9, signatures, signatory_date, signatory_name, signatory_title
    form_10k Annual report amendment_flag, document_type, is_annual_report, report_period, is_transition_report, owner_name, incorporation_jurisdiction, owner_cik, commission_file_number, owner_street1, owner_street2, owner_city, owner_state, owner_zip, city_area_code, irs_employer_id, registrant_phone_number, security_title, issuer_symbol, exchange_name, is_well_known_seasoned_issuer, is_voluntary_filer, current_reporting_status, interactive_data_current, filer_category, small_business, emerging_growth_company, is_icfr_auditor_attestation, is_finstmt_error_correction, is_shell_company, public_float_decimals, public_float_unit, public_float_value, common_stock_context, common_stock_decimals, common_stock_id, common_stock_unit, common_stock_value, item_1_business, item_1_business_summarized, item_1a_risk_factors, item_1a_risk_factors_summarized, item_1b_unresolved_staff_comments, item_1b_unresolved_staff_comments_summarized, item_1c_cybersecurity, item_1c_cybersecurity_summarized, item_2_properties, item_2_properties_summarized, item_3_legal_proceedings, item_3_legal_proceedings_summarized, item_4_mine_safety, item_4_mine_safety_summarized, item_5_market_common_equity, item_5_market_common_equity_summarized, item_6_reserved, item_6_reserved_summarized, item_7_management_discussion_analysis, item_7_management_discussion_analysis_summarized, item_7a_quantitative_qualitative_disclosures, item_7a_quantitative_qualitative_disclosures_summarized, item_8_financial_statements, item_8_financial_statements_summarized, item_9_changes_disagreements_accountants, item_9_changes_disagreements_accountants_summarized, item_9a_controls_procedures, item_9a_controls_procedures_summarized, item_9b_other_information, item_9b_other_information_summarized, item_9c_foreign_jurisdictions_disclosure, item_9c_foreign_jurisdictions_disclosure_summarized, item_10_directors_executive_officers, item_10_directors_executive_officers_summarized, item_11_executive_compensation, item_11_executive_compensation_summarized, item_12_security_ownership, item_12_security_ownership_summarized, item_13_certain_relationships, item_13_certain_relationships_summarized, item_14_principal_accountant_fees, item_14_principal_accountant_fees_summarized, item_15_exhibits_schedules, item_15_exhibits_schedules_summarized, item_16_form_10k_summary, item_16_form_10k_summary_summarized, signature, signature_name, signature_title, signature_date
    form_10q Quarterly report amendment_flag, transition_period, document_type, report_period_start_date, report_period_end_date, fiscal_year_focus, commission_file_number, owner_name, incorporation_jurisdiction, irs_employer_id, owner_street1, owner_street2, owner_city, owner_state, owner_zip, city_area_code, registrant_phone_number, former_name, current_reporting_status, interactive_data_current, filer_category, small_business, emerging_growth_company, entity_shell_company, common_stock_shares_outstanding_time_period, common_stock_shares_outstanding, listing_par_value_per_share, security_title, issuer_symbol, exchange_name, part_1_item_1, part_1_item_2, part_1_item_3, part_1_item_4, part_2_item_1, part_2_item_1a, part_2_item_2, part_2_item_3, part_2_item_4, part_2_item_5, part_2_item_6, signatures, signatory_date, signatory_name, signatory_title, file_name, part_1_item_1_summarized, part_1_item_2_summarized, part_1_item_3_summarized, part_1_item_4_summarized, part_2_item_1_summarized, part_2_item_1a_summarized, part_2_item_2_summarized, part_2_item_3_summarized, part_2_item_4_summarized, part_2_item_5_summarized, part_2_item_6_summarized
    form_d Regulation D private placement offering notice schema_version, document_type, test_or_live, issuer_cik, issuer_name, issuer_street1, issuer_street2, issuer_city, issuer_state, issuer_state_description, issuer_zip, issuer_phone_number, incorporation_jurisdiction, issuer_previous_names, edgar_previous_names, entity_type, year_of_incorporation_over_5_years, year_of_incorporation_within_5_years, year_of_incorporation_yet_to_be_formed, related_person_first_name, related_person_last_name, related_person_middle_name, related_person_street1, related_person_street2, related_person_city, related_person_state, related_person_state_description, related_person_zip, related_person_relationships, related_person_relationship_clarification, industry_group_type, investment_fund_type, is_1940_act, issuer_size_revenue_range, issuer_size_aggregate_net_asset_value_range, federal_exemptions_exclusions, type_of_filing_is_amendment, type_of_filing_is_new_notice, type_of_filing_first_sale_yet_to_occur, type_of_filing_previous_accession_number, type_of_filing_date_of_first_sale, duration_of_offering_more_than_one_year, types_of_securities_offered_is_equity_type, types_of_securities_offered_is_pooled_investment_fund_type, types_of_securities_offered_is_debt_type, types_of_securities_offered_is_options_warrants, types_of_securities_offered_is_tenant_in_common, types_of_securities_offered_is_mineral_property, types_of_securities_offered_is_security_to_be_acquired, types_of_securities_offered_is_other, business_combination_transaction, business_combination_transaction_clarification, minimum_investment_accepted, sales_compensation_list, sales_compensation_recipient_name, sales_compensation_recipient_crd_number, sales_compensation_associated_bd_name, sales_compensation_associated_bd_crd_number, sales_compensation_recipient_street1, sales_compensation_recipient_street2, sales_compensation_recipient_city, sales_compensation_recipient_state, sales_compensation_recipient_state_description, sales_compensation_recipient_zip, sales_compensation_states_of_solicitation, sales_compensation_states_of_solicitation_description, sales_compensation_foreign_solicitation, sales_compensation_foreign_solicitation_description, offering_sales_total_offering_amount, offering_sales_total_amount_sold, offering_sales_total_remaining, offering_sales_clarification, investors_has_non_accredited_investors, investors_number_non_accredited_investors, investors_total_number_already_invested, sales_commissions_dollar_amount, sales_finders_fees_dollar_amount, sales_commissions_clarification, use_of_proceeds_gross_proceeds_used, use_of_proceeds_gross_proceeds_used_is_estimate, use_of_proceeds_clarification, signature_authorized_representative, signature_name_of_issuer, signature_name, name_of_signer, signature_title, signature_date
    form_sc_13d Schedule 13D — activist investor beneficial ownership >5% filename, explanatory_note, item_1_security_issuer, item_2_identity_background, item_3_source_funds, item_4_purpose_transaction, item_5_interest_securities, item_6_contracts_arrangements, item_7_exhibits, signature_date, signatories, signatory_titles, document_type, cusip, filing_date, issuer_name, security_type, authorized_person_name, authorized_person_address, authorized_person_phone, total_reporting_persons, reporting_person_name_table[i], member_of_group_a_table[i], member_of_group_b_table[i], source_of_funds_table[i], legal_proceedings_required_table[i], citizenship_table[i], sole_voting_power_table[i], shared_voting_power_table[i], sole_dispositive_power_table[i], shared_dispositive_power_table[i], aggregate_amount_table[i], excludes_certain_shares_table[i], percentage_of_class_table[i], type_of_reporting_person_table[i]
    form_sc_13g Schedule 13G — passive investor beneficial ownership >5% filename, rule_designation, item_1, item_2, item_3, item_4, item_5, item_6, item_7, item_8, item_9, item_10, signature_date, signatories, signatory_titles, document_type, cusip, filing_date, issuer_name, security_type, total_reporting_persons, reporting_person_name_table[i], member_of_group_a_table[i], member_of_group_b_table[i], citizenship_table[i], sole_voting_power_table[i], shared_voting_power_table[i], sole_dispositive_power_table[i], shared_dispositive_power_table[i], aggregate_amount_table[i], excludes_certain_shares_table[i], percentage_of_class_table[i], type_of_reporting_person_table[i]
    form_1012b Registration statement under Section 12(b) filename, company_name, filing_date, state_of_incorporation, irs_employer_id, address, telephone_number, securities_12g, large_accelerated_filer, accelerated_filer, non_accelerated_filer, smaller_reporting_company, emerging_growth_company, extended_transition_period_elected, item_1_business, item_1a_risk_factors, item_2_financial_information, item_3_properties, item_4_security_ownership, item_5_directors_and_executive_officers, item_6_executive_compensation, item_7_related_transactions_and_independence, item_8_legal_proceedings, item_9_market_price_and_dividends, item_10_recent_sales_unregistered_securities, item_11_description_of_securities, item_12_indemnification, item_13_financial_statements_and_data, item_14_changes_and_disagreements_with_accountants, item_15_financial_statements_and_exhibits, signature_date, signatories, signatory_titles, security_title, security_exchange
    form_1a Regulation A offering statement document_type, livetest_flag, issuer_ccc, return_copy_flag, dos_file_number, offering_file_number, since_last_filing_flag, filing_website_notice_flag, issuer_name, incorporation_jurisdiction, incorporation_year, issuer_cik, irs_employer_id, fulltime_employees_count, parttime_employees_count, issuer_street1, issuer_street2, issuer_city, issuer_state, issuer_zip, registrant_phone_number, connection_name, connection_street1, connection_street2, connection_city, connection_state, connection_zip, connection_phone_number, industry_group, cash_equivalent, investment_securities, accounts_receivable, property_plant_equipment, total_assets, accounts_payable, longterm_debt, total_liabilities, total_stockholder_equity, total_liabilities_and_equity, total_revenues, cost_and_expenses_appl_to_revenues, depreciation_and_amortization, net_income, earnings_per_share_basic, earnings_per_share_diluted, issuer_auditor_name, total_investments, loans, property_and_equipment, policy_liabilities_and_accruals, deposits, total_interest_income, total_interest_expenses, common_equity_name, common_equity_outstanding_units, common_equity_cusip, common_equity_trading_centre, preferred_equity_name, outstanding_preferred_equity, preferred_cusip_equity, publicly_traded_preferred_equity, debtsecuritiesclassname, outstanding_debt_securities, cusip_debt_securities, publicly_traded_debt_securities, issuer_eligibility_flag, application_disqualification_flag, summission_tier1tier2_offering, summission_financial_audit_status, summission_securities_offered_types, summission_offer_delayed_continuous_flag, summission_offering_year_flag, summission_offering_after_qualification, summission_offering_best_efforts, summission_solicitation_proposed_offering, summission_resale_securities_affiliates, summission_securities_offered, summission_outstanding_securities, summission_price_per_security, summission_issuer_aggregate_offering, summission_security_holder_aggegate, summission_qualification_offering_aggregate, summission_concurrent_offering_aggregate, summission_total_aggregate_offering, summission_underwriters_serviceprovider_name, summission_underwriters_fees, summission_salescommissions_serviceprovider_name, summission_salescommissions_serviceprovider_fees, summission_finders_fees_serviceprovider_name, summission_finder_fees, summission_auditor_serviceprovider_name, summission_auditor_fees, summission_legal_serviceprovider_name, summission_legal_fees, summission_promoters_serviceprovider_name, summission_promoters_fees, summission_bluesky_serviceprovider_name, summission_bluesky_fees, broker_dealer_crd_number, summission_estimated_net_amount, summission_clarification_responses, juridiction_security_offering, sec_offerred_none_jurisdiction_flag, sec_offerred_same_jurisdiction_flag, dealers_security_offering, security_issuer_name, security_issuer_title, security_issuer_total_amount, security_issuer_principal_amount, security_issuer_aggreg_amount, security_act_excemption
    form_irannotice IRAN notice — administrative communication filename, filing_date, fiscal_date, sender_address, recipient_address, telephone, fax, website, handled_by, our_reference, re_subject, body, submitter, signature, signer_name, signer_title
    Note: The different cik fields (owner_cik, filer_cik etc ) are filtered for by passing the filter field cik which gets resolved to the original cik field for the form. But the real cik field name is used in the column filtering.. For example {“filters”: {“cik”:”00033434340”, “date”:”2026-01-01”} , “columns”: {“owner_cik”,”filing_date”}
    3.8 Fortune 500 Endpoint
    POST /api/v1/filingflow/fortune500 queues an async bulk export of SEC filings filtered to Fortune 500 companies (matched by owner_cik). A date filter is required.
    Field Type Required Description
    form_type string Yes form_8k or form_10k
    date / date_min / date_max string Yes (at least one) Generic date filter in YYYY-MM-DD format — resolves to the correct column for the given form type
    format string No json (default) or excel
    compression string No zip | gzip — optional compression
    estimate boolean No If true, returns estimated size & row count. No quota consumed.
    preview boolean No If true, returns first 50 rows in JSON. No quota consumed.
    job_name string No Optional label for tracking in the dashboard
    On success, returns HTTP 202 with a job_id and status_url. Poll the status endpoint until status is ‘complete’, then call the download endpoint once to retrieve the file (one-time, blob is deleted after download).

    Example request body:

    				
    					{
      "form_type": "form_8k",
      "compression": "zip"
      "date": "2026-01-01",
      "date_max": "2026-01-01",
      "date_min": "2026-01-01",
      "estimate": false,
      "format": "json",
      "job_name": "Fortune500_8K_Q1_2024",
      "preview": false
    }
    
    				
    			

    4. GlobalComply Query API – Sanctions and Compliance

    The GlobalComply API allows real-time filtering and export of sanctioned individuals, entities, ships, programs, and places from multiple official sources including OFAC, UK, EU, DFAT (Australia), Canada, and SECO (Switzerland).

    Returned results include sanctioned names, aliases, identifiers, nationalities, addresses, program IDs, and relevant listing metadata — all unified in JSON format.

    4.1 Use Cases
    4.2 Filterable Fields
    Searchable by:
    Key Features
    Supported Sanctions Agencies
    dfat_sanctions
    canada_sanctions
    eu_sanctions
    uk_sanctions
    ofac_sdn_sanctions
    ofac_non_sdn_sanctions
    seco_place_sanctions
    seco_program_sanctions
    seco_target_sanctions
    4.3 Example Queries
    GET
    /api/v1/globalcomply

    Example Request

    				
    					GET /api/v1/globalcomply?sanctions_agency=eu_sanctions&Naal_lastname=Putin&Leba_publication_date_min=2023-01-01
    Authorization: Bearer your_api_token
    
    
    				
    			
    Step-by-Step Guide
    Step 1: Install and Set Up Postman
    Parameters:
    4.4 Query Parameters by Agency
    Canada Sanctions
    Parameter Type Description
    country string Country associated with the individual or entity
    last_name string Last name of sanctioned individual
    given_name string Given name of sanctioned individual
    aliases string Alternate names of individuals/entities
    entity string Entity name
    date_of_listing string Official listing date
    schedule string Associated sanction schedule
    date_of_listing_min string Start date for listing filter
    date_of_listing_max string End date for listing filter
    DFAT Sanctions (Australia)
    Parameter Type Description
    Reference string Unique identifier in DFAT listing
    Name of Individual or Entity string Name of subject
    Type string Subject type: individual, entity, ship
    Place of Birth string Subject's place of birth
    Citizenship string Country of citizenship
    Address string Address string
    Listing Information string Additional listing notes
    Committees string Related committees
    EU Sanctions
    Parameter Type Description
    Reference string Unique identifier in DFAT listing
    Name of Individual or Entity string Name of subject
    Type string Subject type: individual, entity, ship
    Place of Birth string Subject's place of birth
    Citizenship string Country of citizenship
    Address string Address string
    Listing Information string Additional listing notes
    Committees string Related committees
    UK Sanctions
    Parameter Type Description
    last_update string Last update date for UK listings
    regime_name string Regime name in UK lists
    sanctions_imposed string Imposed sanctions types
    names_name1 string First part of name
    OFAC Sanctions (SDN & Non-SDN)
    Parameter Type Description
    addresses_city string City in address entries
    uid string Unique ID in OFAC listings
    sdntype string SDN type field (Entity or Individual)
    programs_program string OFAC sanctions program
    akas_firstname string OFAC alternate first name
    akas_lastname string OFAC alternate last name
    date_of_birth_dateOfBirthItem string Date of birth field
    identity_id_number string Document number
    national_country string Nationality
    citizenship_country string Citizenship
    vesselinfo_vesselFlag string Flag of a sanctioned vessel (SDN only)
    SECO Sanctions (Switzerland)
    Parameter Type Description
    location string seco_place_sanctions
    area_variant_type string seco_place_sanctions
    program-key_0_#text string seco_program_sanctions
    origin string seco_program_sanctions
    ind_address_address_details string seco_target_sanctions
    modification_modification_type string seco_target_sanctions
    4.5 Endpoints
    Method Endpoint Description
    GET /api/v1/globalcomply/agencies List all available sanctions agencies
    GET /api/v1/globalcomply/columns?sanctions_agency=<agency> List filterable fields and types for an agency
    GET /api/v1/globalcomply Query sanctions records (paginated, 20 per page)

    5. Bulk Data Download API

    POST
    /api/v1/bulk
    Bulk access requires a Growth, Scale, or Enterprise plan. Explorer plan users do not have bulk access.
    5.1 Supported Workstreams
    Workstream Description
    filingflow SEC filings data such as Form D, 13F-HR, and 13F-NT
    globalcomply Global sanctions and compliance lists from government and international agencies
    5.2 Authentication
    This endpoint requires a valid API key with bulk access permissions.

    Header Example

    				
    					Authorization: "Bearer <YOUR_API_KEY>"
    Content-Type: "application/json"
    
    				
    			
    5.3 Request Parameters
    Field Type Required Description
    workstream string Yes filingflow | globalcomply
    filters object Varies Same filters as the corresponding query endpoint. form_type is required for filingflow. Use date, date_min, date_max for date filtering (not the underlying column name).
    format string No json (default) or excel
    compression string No zip | gzip — optional. Omit for no compression.
    columns array No (FilingFlow only) Column names to include. Omit for all columns.
    delivery string / object / null No null = direct download. String or {type, account_name} to route to a saved delivery account.
    estimate boolean No If true, returns estimated file size (KB) and row count. No quota consumed, no file generated.
    preview boolean No If true, returns first 50 rows in JSON. No quota consumed, no file generated.
    job_name string No Label for tracking in the dashboard (max 100 chars).
    Example Request (JSON Format)

    Request Body

    				
    					{
      "workstream": "globalcomply",
      "filters": {
        "country": "Belarus",
        "sanction_type": "canada_sanctions"
      },
      "format": "json"
    }
    				
    			
    Example Request (Excel Format)

    Request Body

    				
    					{
      "workstream": "globalcomply",
      "filters": {
        "country": "Belarus",
        "sanction_type": "canada_sanctions"
      },
      "format": "excel"
    }
    				
    			
    5.4 Successful Responses
    JSON Download

    Example Response

    				
    					[
      {
        "country": "Belarus",
        "last_name": "Atabekov",
        "given_name": "Khazalbek Bakhtibekovich",
        "aliases": null,
        "schedule": "1, Part 1",
        "item": "1",
        "dob": "1800-01-01",
        "entity": null,
        "date_of_listing": "2020-09-28",
        "sanctions_origin": "Canada"
      }
    ]
    				
    			
    5.5 Job Status & Download Endpoints
    Method Endpoint Description
    GET /api/v1/bulk/jobs/<job_id> Poll job status. Returns download_url when complete.
    GET /api/v1/bulk/download/<job_id> Download file (one-time). Blob deleted after download.
    Job status values: pending · running · complete · failed · downloaded
    Excel Download

    The response body contains an Excel file with the requested dataset.

    5.6 Error Responses
    Status Code Description Example
    400 Invalid or missing parameters {"error": "Invalid or missing workstream..."}
    403 Download quota exceeded {"error": "Quota exceeded", "message": "..."}
    404 No data found {"message": "No data found for the given filters"}
    500 Internal server error {"error": "Internal server error..."}
    5.7 Quota Policy
    Each user account has a monthly data download quota based on their subscription plan. The API measures the total file size of each download and tracks it toward your quota.
    If a request exceeds your remaining quota, the system returns a 403 Quota Exceeded error.
    5.8 Usage Notes
    5.9 Example Use Cases

    6. Delivery Accounts

    Delivery accounts configure where bulk export files are sent. Once created, reference the account by its provider type (and optionally its name) in bulk requests. Credentials are validated and encrypted at rest.
    6.1 Endpoints
    Method Endpoint Description
    POST /delivery-accounts Create a delivery account (credentials validated)
    GET /delivery-accounts List all active delivery accounts
    PATCH /delivery-accounts/<account_id> Update name, credentials, or config
    DELETE /delivery-accounts/<account_id> Soft-delete a delivery account
    Delivery account endpoints require a JWT Bearer token (from /auth/signin), not an API key.
    6.2 Supported Providers
    Provider Required Credential Fields Optional Fields
    azure_blob connection_string, container config
    s3 aws_access_key, aws_secret_key, bucket, region config
    gcp service_account_json (object), bucket project_id, config
    sftp host, username, password port (default 22)
    webhook url auth_header (Authorization header value)
    6.3 Create Account — Examples

    Azure Blob Storage

    				
    					{
      "provider": "azure_blob",
      "name": "my-azure-exports",
      "credentials": {
        "connection_string": "DefaultEndpointsProtocol=https;AccountName=myacct;AccountKey=xxx;...",
        "container": "datadock-exports"
      }
    }
    
    				
    			

    Amazon S3

    				
    					{
      "provider": "s3",
      "name": "my-s3-bucket",
      "credentials": {
        "aws_access_key": "AKIAIOSFODNN7EXAMPLE",
        "aws_secret_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
        "bucket": "my-exports-bucket",
        "region": "us-east-1"
      }
    }
    
    				
    			

    Google Cloud Storage

    				
    					{
      "provider": "gcp",
      "name": "my-gcp-bucket",
      "credentials": {
        "bucket": "my-exports-bucket",
        "service_account_json": {
          "type": "service_account",
          "project_id": "my-project",
          "client_email": "datadock@my-project.iam.gserviceaccount.com",
          "private_key": "-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----"
        }
      }
    }
    
    				
    			

    7. Scheduled Downloads

    Scheduled downloads automate recurring or one-time data exports. Jobs run in the background and deliver results to a configured delivery account.
    7.1 Schedule Types
    Type Behavior
    once Runs once at the next occurrence of the specified hour/minute
    daily Runs every day at the specified hour/minute
    weekly Runs every week on day_of_week (0=Monday, 6=Sunday) at specified time
    weekly Runs every week on day_of_week (0=Monday, 6=Sunday) at specified time
    monthly Runs every month on day_of_month (1–31) at specified time
    7.2 Request Fields
    Field Type Required Description
    job_name string Yes Unique name for this job (max 150 chars)
    workstream string Yes filingflow | globalcomply
    filters object Varies Same as /bulk endpoint. form_type required for filingflow. Use date, date_min, date_max for date filtering.
    columns array No (FilingFlow only) Columns to include
    format string No json (default) | excel
    compression string No zip | gzip — optional
    delivery object No {type, account_name} — delivery account to use
    schedule_type string Yes once | daily | weekly | monthly
    timezone string No IANA timezone string e.g. America/New_York. Defaults to UTC.
    recurrence_config object Yes {hour (0–23), minute (0–59), day_of_week (weekly), day_of_month (monthly)}
    max_runs integer No Maximum executions (null = unlimited for recurring)
    7.3 Example — Monthly FilingFlow Export
    				
    					{
      "job_name": "Monthly_10K_Export",
      "workstream": "filingflow",
      "filters": { "form_type": "form_10k" },
      "columns": ["company_name", "owner_cik", "filing_date", "accession"],
      "format": "excel",
      "compression": "zip",
      "delivery": { "type": "azure_blob" },
      "schedule_type": "monthly",
      "timezone": "America/New_York",
      "recurrence_config": { "hour": 10, "minute": 30, "day_of_month": 1 }
    }
    
    				
    			
    7.4 Example — Weekly GlobalComply Export to S3
    				
    					{
      "job_name": "Weekly_OFAC_SDN",
      "workstream": "globalcomply",
      "filters": { "sanctions_agency": "ofac_sdn_sanctions" },
      "format": "json",
      "compression": "gzip",
      "delivery": { "type": "s3", "account_name": "primary-s3-bucket" },
      "schedule_type": "weekly",
      "timezone": "UTC",
      "recurrence_config": { "hour": 6, "minute": 0, "day_of_week": 1 }
    }
    
    				
    			

    8. Authentication Endpoints

    Method Endpoint Description
    POST /auth/register Register a new user (username, email, password)
    GET /auth/verify?token=<token> Verify email using token from registration email
    POST /auth/signin Sign in — returns JWT access token (2hr) + refresh token (30d)
    POST /auth/refresh-token Exchange refresh token for a new access token
    POST /auth/forgot_password Request a password reset email
    POST /auth/reset_password Reset password using token from email
    POST /auth/reset_api_token Regenerate API key (requires email + password)
    GET /auth/get-user-details Get account info, quota, and usage stats (JWT required)
    GET /auth/jobs/history Get paginated job history across bulk, scheduled & Fortune 500 (JWT required)
    POST /auth/upgrade_plan Apply a paid plan upgrade after Stripe checkout
    GET /auth/google Initiate Google OAuth sign-in
    8.1 Sign In Response
    				
    					{
      "message": "Login successful",
      "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
      "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
      "user": {
        "email": "user@example.com",
        "username": "johndoe",
        "plan": "Growth",
        "annual": false,
        "daily_limit": 1000,
        "cycle_quota_kb": 20971520
      }
    }
    
    				
    			

    9. Subscription & Billing

    9.1 Create Checkout Session
    POST
    /api/v1/create-checkout-session
    Field Type Required Description
    plan_name string Yes Growth | Scale | Extra
    email string Yes User email address
    billing_cycle string No monthly (default) | annual
    amount integer Extra plan only Dollar amount in whole dollars (min $5)
    Returns: { url: ‘https://checkout.stripe.com/…’ } — redirect the user to this URL to complete payment.
    9.2 Cancel Subscription
    POST
    /cancel-subscription
    Required fields: email, password, stripe_subscription_id. Optional: immediate (boolean, default true). Set immediate=false to cancel at the end of the current billing period.

    10. Health & Monitoring

    Endpoint Description
    /api/v1/monitor/health Deep health check — verifies auth DB and data DB. Returns 200 (healthy) or 503 (degraded). Used by Better Uptime / UptimeRobot.
    /api/v1/monitor/ready Shallow readiness check — confirms Flask process is alive. Always returns 200. Used by Azure App Service health probes.

    11. Error Handling

    Status Code Meaning Common Cause
    200 OK Request succeeded
    201 Created Resource created successfully
    202 Accepted Background job queued
    400 Bad Request Missing required field, invalid filter, or malformed request body
    401 Unauthorized Missing, invalid, or expired API key / JWT token
    402 Payment Required Payment not completed
    403 Forbidden Monthly bulk quota exceeded
    404 Not Found No records match the given filters, or job not found
    409 Conflict Account already exists (Google OAuth on password account)
    429 Too Many Requests Rate limit exceeded
    500 Internal Server Error Database failure or unhandled exception
    503 Service Unavailable Health check failure — one or more dependencies degraded

    12. Code Examples

    The examples below show how to authenticate and call the DataDock FilingFlow API using Python and JavaScript (Node.js). Replace your_api_key_here with your actual API key from the dashboard.
    12.1 Python (requests)
    Install the requests library if you haven’t already:

    Authentication — API Key via X-API-Key header

    The simplest authentication method. Pass your API key directly in the X-API-Key header:
    				
    					import requests
    
    API_KEY = 'your_api_key_here'
    BASE_URL = 'https://api.datadock.ai'
    
    headers = {
    'X-API-Key': API_KEY,
    'Content-Type': 'application/json'
    }
    
    # Query Form 8-K filings for Apple in 2024
    response = requests.post(
    f'{BASE_URL}/api/v1/filingflow',
    headers=headers,
    json={
    'form_type': 'form_8k',
    'filters': {
    'company_name': 'Apple',
    'date_min': '2024-01-01',
    'date_max': '2024-12-31'
    },
    'format': 'json'
    }
    )
    
    data = response.json()
    print(f'Found {len(data["results"])} filings')
    for filing in data['results']:
    print(filing['company_name'], '|', filing.get('filing_date'))
    				
    			

    Authentication — Sign In to Get a JWT Token

    For user-facing applications, sign in with email and password to get a short-lived JWT access token (2 hours) and a long-lived refresh token (30 days):
    				
    					import requests
     
    API_KEY  = 'your_api_key_here'
    BASE_URL = 'https://api.datadock.ai'
     
    # Pass API key as a Bearer token in Authorization header
    headers = {
        'Authorization': f'Bearer {API_KEY}',
        'Content-Type': 'application/json'
    }
     
    # Query Form 13F-HR filings for a specific filer
    response = requests.post(
        f'{BASE_URL}/api/v1/filingflow',
        headers=headers,
        json={
            'form_type': 'form_13f_hr',
            'filters': {
                'filer_cik': '0000102909',
                'date_min': '2024-01-01'
            },
            'format': 'json'
        }
    )
     
    data = response.json()
    for filing in data.get('results', []):
        print(filing)
    
    				
    			

    Authentication — Sign In to Get a JWT Token

    For user-facing applications, sign in with email and password to get a short-lived JWT access token (2 hours) and a long-lived refresh token (30 days):
    				
    					import requests
     
    BASE_URL = 'https://api.datadock.ai'
     
    # Step 1: Sign in to get tokens
    login_resp = requests.post(
        f'{BASE_URL}/auth/signin',
        json={
            'email': 'you@example.com',
            'password': 'your_password'
        }
    )
     
    tokens        = login_resp.json()
    ACCESS_TOKEN  = tokens['access_token']   # valid for 2 hours
    REFRESH_TOKEN = tokens['refresh_token']  # valid for 30 days
     
    # Step 2: Use the JWT access token
    headers = {
        'Authorization': f'Bearer {ACCESS_TOKEN}',
        'Content-Type': 'application/json'
    }
     
    # Query Form 4 insider trades for Tesla
    response = requests.post(
        f'{BASE_URL}/api/v1/filingflow',
        headers=headers,
        json={
            'form_type': 'form_4',
            'filters': {
                'issuer_name': 'Tesla',
                'date_min': '2024-01-01',
                'date_max': '2024-06-30'
            },
            'format': 'json'
        }
    )
     
    print(response.json())
    
    				
    			

    Python — Refreshing an Expired JWT Token

    Access tokens expire after 2 hours. Use the refresh token to get a new one without signing in again:
    				
    					import requests
     
    BASE_URL      = 'https://api.datadock.ai'
    REFRESH_TOKEN = 'your_refresh_token_here'
     
    refresh_resp = requests.post(
        f'{BASE_URL}/auth/refresh-token',
        json={'refresh_token': REFRESH_TOKEN}
    )
     
    new_access_token = refresh_resp.json()['access_token']
    print('New access token:', new_access_token)
    
    				
    			

    Python — Discover Available Columns for a Form

    Call the columns endpoint first to see exactly which filters are valid for your chosen form type:
    				
    					import requests
     
    API_KEY  = 'your_api_key_here'
    BASE_URL = 'https://api.datadock.ai'
    headers  = {'X-API-Key': API_KEY}
     
    # Get all available filter columns for Form 10-K
    resp = requests.get(
        f'{BASE_URL}/api/v1/filingflow/columns',
        headers=headers,
        params={'form_type': 'form_10k'}
    )
     
    cols = resp.json()
    print('Form type:', cols['form_type'])
    print('Available columns:', cols['available_columns'])
    
    				
    			

    Python — Bulk Export with Job Polling

    For large exports, submit a bulk job and poll until it is ready, then download the file once (the file is deleted from storage after the first download):
    				
    					import requests, time
     
    API_KEY  = 'your_api_key_here'
    BASE_URL = 'https://api.datadock.ai'
    headers  = {'X-API-Key': API_KEY, 'Content-Type': 'application/json'}
     
    # Step 1: Submit the bulk job
    job_resp = requests.post(
        f'{BASE_URL}/api/v1/bulk',
        headers=headers,
        json={
            'workstream': 'filingflow',
            'filters': {
                'form_type': 'form_10k',
                'date_min': '2023-01-01',
                'date_max': '2023-12-31'
            },
            'columns': ['company_name', 'cik', 'filing_date', 'accession'],
            'format': 'json',
            'job_name': 'Annual_10K_2023'
        }
    )
    job_id = job_resp.json()['job_id']
    print(f'Job queued: {job_id}')
     
    # Step 2: Poll until complete
    while True:
        status_resp = requests.get(
            f'{BASE_URL}/api/v1/bulk/jobs/{job_id}',
            headers={'X-API-Key': API_KEY}
        )
        status = status_resp.json()['status']
        print(f'Status: {status}')
     
        if status == 'complete':
            download_url = status_resp.json()['download_url']
            break
        elif status == 'failed':
            print('Job failed:', status_resp.json().get('error_message'))
            exit(1)
     
        time.sleep(10)  # wait 10 seconds before polling again
     
    # Step 3: Download the file (one-time — deleted from storage after)
    file_resp = requests.get(download_url, headers={'X-API-Key': API_KEY})
    with open('10k_filings_2023.json', 'wb') as f:
        f.write(file_resp.content)
    print('Saved: 10k_filings_2023.json')
    
    				
    			

    Python — Estimate Bulk Size Before Downloading

    Use estimate=true to check how much quota a request will consume before committing:
    				
    					import requests
     
    API_KEY  = 'your_api_key_here'
    BASE_URL = 'https://api.datadock.ai'
    headers  = {'X-API-Key': API_KEY, 'Content-Type': 'application/json'}
     
    resp = requests.post(
        f'{BASE_URL}/api/v1/bulk',
        headers=headers,
        json={
            'workstream': 'filingflow',
            'filters': {
                'form_type': 'form_sc_13g',
                'date_min': '2024-01-01'
            },
            'format': 'json',
            'estimate': True  # dry run — no quota consumed
        }
    )
     
    est = resp.json()
    print(f'Estimated size : {est["estimated_size_kb"]} KB')
    print(f'Matching rows  : {est["row_count"]}')
    
    				
    			
    12.2 JavaScript (Node.js — fetch / axios)
    The examples below use the built-in fetch API available in Node.js 18+. For older Node versions install node-fetch: npm install node-fetch

    Authentication — API Key via X-API-Key header

    Pass your API key in the X-API-Key header for all requests:
    				
    					const BASE_URL = 'https://api.datadock.ai';
    const API_KEY  = 'your_api_key_here';
     
    // Query Form 8-K filings for Apple in 2024
    const response = await fetch(`${BASE_URL}/api/v1/filingflow`, {
      method: 'POST',
      headers: {
        'X-API-Key': API_KEY,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        form_type: 'form_8k',
        filters: {
          company_name: 'Apple',
          date_min: '2024-01-01',
          date_max: '2024-12-31'
        },
        format: 'json'
      })
    });
     
    const data = await response.json();
    console.log(`Found ${data.results.length} filings`);
    data.results.forEach(f => console.log(f.company_name, f.filing_date));
    
    				
    			

    Authentication — API Key as Bearer Token

    Alternatively, pass the API key in the Authorization header using the Bearer scheme:
    				
    					const BASE_URL = 'https://api.datadock.ai';
    const API_KEY  = 'your_api_key_here';
     
    // Query Form 13F-HR holdings for a specific filer
    const response = await fetch(`${BASE_URL}/api/v1/filingflow`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${API_KEY}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        form_type: 'form_13f_hr',
        filters: {
          cik: '0000102909',
          date_min: '2024-01-01'
        },
        format: 'json'
      })
    });
     
    const data = await response.json();
    console.log(data.results);
    
    				
    			

    Authentication — Sign In to Get a JWT Token

    Sign in with email and password to get a JWT access token, then use it in subsequent API requests:
    				
    					const BASE_URL = 'https://api.datadock.ai';
     
    // Step 1: Sign in
    const loginResp = await fetch(`${BASE_URL}/auth/signin`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        email: 'you@example.com',
        password: 'your_password'
      })
    });
     
    const { access_token, refresh_token } = await loginResp.json();
    // access_token expires in 2 hours
    // refresh_token is valid for 30 days
     
    // Step 2: Query Form 4 insider trades using JWT
    const queryResp = await fetch(`${BASE_URL}/api/v1/filingflow`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${access_token}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        form_type: 'form_4',
        filters: {
          issuer_name: 'Tesla',
          date_min: '2024-01-01',
          date_max: '2024-06-30'
        },
        format: 'json'
      })
    });
     
    const filings = await queryResp.json();
    console.log(filings.results);
    
    				
    			

    JavaScript — Refreshing an Expired JWT Token

    Exchange the refresh token for a new access token before the 2-hour window expires:
    				
    					const BASE_URL     = 'https://api.datadock.ai';
    const refreshToken = 'your_refresh_token_here';
     
    const resp = await fetch(`${BASE_URL}/auth/refresh-token`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ refresh_token: refreshToken })
    });
     
    const { access_token } = await resp.json();
    console.log('New access token:', access_token);
    
    				
    			

    JavaScript — Discover Available Columns for a Form

    Check valid filter columns for any form type before querying to avoid 400 errors:
    				
    					const BASE_URL = 'https://api.datadock.ai';
    const API_KEY  = 'your_api_key_here';
     
    // Get all available filter columns for Form 10-K
    const colResp = await fetch(
      `${BASE_URL}/api/v1/filingflow/columns?form_type=form_10k`,
      { headers: { 'X-API-Key': API_KEY } }
    );
    const cols = await colResp.json();
    console.log('Form type:', cols.form_type);
    console.log('Available columns:', cols.available_columns);
    
    				
    			

    JavaScript — Bulk Export with Job Polling

    Submit a bulk FilingFlow job and poll for completion, then download the file once:
    				
    					const BASE_URL = 'https://api.datadock.ai';
    const API_KEY  = 'your_api_key_here';
    const headers  = { 'X-API-Key': API_KEY, 'Content-Type': 'application/json' };
     
    // Step 1: Submit the bulk job
    const jobResp = await fetch(`${BASE_URL}/api/v1/bulk`, {
      method: 'POST',
      headers,
      body: JSON.stringify({
        workstream: 'filingflow',
        filters: {
          form_type: 'form_10k',
          date_min: '2023-01-01',
          date_max: '2023-12-31'
        },
        columns: ['company_name', 'cik', 'filing_date', 'accession'],
        format: 'json',
        job_name: 'Annual_10K_2023'
      })
    });
    const { job_id } = await jobResp.json();
    console.log('Queued job:', job_id);
     
    // Step 2: Poll every 10 seconds until done
    const sleep = ms => new Promise(res => setTimeout(res, ms));
    let downloadUrl;
     
    while (true) {
      const statusResp = await fetch(
        `${BASE_URL}/api/v1/bulk/jobs/${job_id}`,
        { headers: { 'X-API-Key': API_KEY } }
      );
      const status = await statusResp.json();
      console.log('Status:', status.status);
     
      if (status.status === 'complete') {
        downloadUrl = status.download_url;
        break;
      } else if (status.status === 'failed') {
        throw new Error('Job failed: ' + status.error_message);
      }
      await sleep(10000);
    }
     
    // Step 3: Download once (file deleted from storage after this call)
    const fileResp = await fetch(downloadUrl, {
      headers: { 'X-API-Key': API_KEY }
    });
    const buffer = await fileResp.arrayBuffer();
    const fs = await import('fs');
    fs.writeFileSync('10k_filings_2023.json', Buffer.from(buffer));
    console.log('Saved: 10k_filings_2023.json');
    
    				
    			

    JavaScript — Using axios

    If you prefer axios (npm install axios), set up a client instance with your API key and call FilingFlow directly:
    				
    					const axios = require('axios');
     
    const client = axios.create({
      baseURL: 'https://api.datadock.ai',
      headers: { 'X-API-Key': 'your_api_key_here' }
    });
     
    // Query Form SC 13G filings for a specific company
    const { data: sc13g } = await client.post('/api/v1/filingflow', {
      form_type: 'form_sc_13g',
      filters: {
        issuer_name: 'Microsoft',
        date_min: '2024-01-01'
      },
      format: 'json'
    });
    console.log('SC 13G filings:', sc13g.results);
     
    // Query Form D private placements for a state
    const { data: formD } = await client.post('/api/v1/filingflow', {
      form_type: 'form_d',
      filters: {
        issuer_state: 'CA',
        date_min: '2024-06-01',
        date_max: '2024-12-31'
      },
      format: 'json'
    });
    console.log('Form D filings:', formD.results);
    
    				
    			

    13. Tips for Success

    14. Contact & Support

    Channel Details
    Email support@datadock.ai
    Dashboard https://app.datadock.ai
    Live API Base URL https://api.datadock.ai
    For further assistance, refer to the official documentation or contact our support team.

    Happy coding!

    Happy coding! — The DataDock Team

    Enterprise: Enterprise & Institutions

    For large organizations and institutions with specialized requirements, this plan offers customizable solutions. Contact us for options like multiple API keys, priority support, redistribution rights, or unlimited data access. Example use cases include:

    Scale: Business / Internal Use

    Built for organizations leveraging the platform for internal operations, this tier supports data-driven teams and professionals. Common applications include:

    Growth: Personal & Startups

    Designed for innovators, individual developers, and university researchers, this plan supports small-scale projects and early-stage experimentation. Typical scenarios include:

    Explorer:

    For testing purposes.