invinite-data-api 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- invinite_data_api/__init__.py +534 -0
- invinite_data_api/api/__init__.py +25 -0
- invinite_data_api/api/account_api.py +316 -0
- invinite_data_api/api/as_reported_balance_sheet_api.py +1086 -0
- invinite_data_api/api/as_reported_cash_flow_statement_api.py +1086 -0
- invinite_data_api/api/as_reported_income_statement_api.py +1086 -0
- invinite_data_api/api/as_reported_snapshot_api.py +1035 -0
- invinite_data_api/api/company_api.py +1907 -0
- invinite_data_api/api/earnings_calls_api.py +11855 -0
- invinite_data_api/api/financial_metrics_api.py +1101 -0
- invinite_data_api/api/health_api.py +280 -0
- invinite_data_api/api/insider_trades_api.py +434 -0
- invinite_data_api/api/institutional_ownership_api.py +1480 -0
- invinite_data_api/api/ipos_api.py +397 -0
- invinite_data_api/api/market_api.py +344 -0
- invinite_data_api/api/metadata_api.py +540 -0
- invinite_data_api/api/sec_filings_api.py +1325 -0
- invinite_data_api/api/segmented_financials_api.py +759 -0
- invinite_data_api/api/standardized_balance_sheet_api.py +1086 -0
- invinite_data_api/api/standardized_cash_flow_statement_api.py +1086 -0
- invinite_data_api/api/standardized_income_statement_api.py +1086 -0
- invinite_data_api/api/standardized_snapshot_api.py +1035 -0
- invinite_data_api/api/status_api.py +535 -0
- invinite_data_api/api_client.py +804 -0
- invinite_data_api/api_response.py +21 -0
- invinite_data_api/configuration.py +605 -0
- invinite_data_api/exceptions.py +218 -0
- invinite_data_api/models/__init__.py +239 -0
- invinite_data_api/models/account_usage200_response.py +133 -0
- invinite_data_api/models/account_usage200_response_by_family_inner.py +94 -0
- invinite_data_api/models/account_usage200_response_by_key_inner.py +108 -0
- invinite_data_api/models/account_usage200_response_daily_inner.py +99 -0
- invinite_data_api/models/account_usage200_response_daily_inner_errors.py +96 -0
- invinite_data_api/models/account_usage200_response_period.py +109 -0
- invinite_data_api/models/as_reported_income_statement200_response.py +96 -0
- invinite_data_api/models/as_reported_income_statement200_response_companies_inner.py +102 -0
- invinite_data_api/models/as_reported_income_statement200_response_companies_inner_periods_inner.py +100 -0
- invinite_data_api/models/as_reported_income_statement_detailed200_response.py +96 -0
- invinite_data_api/models/as_reported_income_statement_detailed200_response_companies_inner.py +102 -0
- invinite_data_api/models/as_reported_income_statement_detailed200_response_companies_inner_periods_inner.py +113 -0
- invinite_data_api/models/as_reported_income_statement_detailed200_response_companies_inner_periods_inner_facts_value.py +120 -0
- invinite_data_api/models/as_reported_income_statement_presentation200_response.py +96 -0
- invinite_data_api/models/as_reported_income_statement_presentation200_response_companies_inner.py +102 -0
- invinite_data_api/models/as_reported_income_statement_presentation200_response_companies_inner_periods_inner.py +108 -0
- invinite_data_api/models/as_reported_snapshot_detailed200_response.py +97 -0
- invinite_data_api/models/as_reported_snapshot_detailed200_response_companies_inner.py +117 -0
- invinite_data_api/models/as_reported_snapshot_detailed200_response_companies_inner_statements.py +117 -0
- invinite_data_api/models/as_reported_snapshot_detailed200_response_companies_inner_statements_income_statement.py +101 -0
- invinite_data_api/models/as_reported_snapshot_presentation200_response.py +97 -0
- invinite_data_api/models/as_reported_snapshot_presentation200_response_companies_inner.py +117 -0
- invinite_data_api/models/as_reported_snapshot_presentation200_response_companies_inner_statements.py +117 -0
- invinite_data_api/models/as_reported_snapshot_presentation200_response_companies_inner_statements_income_statement.py +96 -0
- invinite_data_api/models/bad_request_error.py +90 -0
- invinite_data_api/models/company_available_companies200_response.py +98 -0
- invinite_data_api/models/company_available_companies200_response_companies_inner.py +92 -0
- invinite_data_api/models/company_available_companies401_response.py +90 -0
- invinite_data_api/models/company_details200_response.py +96 -0
- invinite_data_api/models/company_details200_response_companies_inner.py +279 -0
- invinite_data_api/models/company_dividends200_response.py +96 -0
- invinite_data_api/models/company_dividends200_response_companies_inner.py +102 -0
- invinite_data_api/models/company_dividends200_response_companies_inner_dividends_inner.py +101 -0
- invinite_data_api/models/company_fiscal_periods200_response.py +96 -0
- invinite_data_api/models/company_fiscal_periods200_response_companies_inner.py +102 -0
- invinite_data_api/models/company_fiscal_periods200_response_companies_inner_periods_inner.py +97 -0
- invinite_data_api/models/company_search200_response.py +100 -0
- invinite_data_api/models/company_search200_response_companies_inner.py +99 -0
- invinite_data_api/models/company_splits200_response.py +96 -0
- invinite_data_api/models/company_splits200_response_companies_inner.py +102 -0
- invinite_data_api/models/company_splits200_response_companies_inner_splits_inner.py +95 -0
- invinite_data_api/models/earnings_calls_analysts200_response.py +102 -0
- invinite_data_api/models/earnings_calls_analysts200_response_analysts_inner.py +116 -0
- invinite_data_api/models/earnings_calls_audio200_response.py +135 -0
- invinite_data_api/models/earnings_calls_audio202_response.py +97 -0
- invinite_data_api/models/earnings_calls_calendar200_response.py +103 -0
- invinite_data_api/models/earnings_calls_calendar200_response_events_inner.py +228 -0
- invinite_data_api/models/earnings_calls_company_document200_response.py +98 -0
- invinite_data_api/models/earnings_calls_company_documents200_response.py +104 -0
- invinite_data_api/models/earnings_calls_company_documents200_response_company.py +92 -0
- invinite_data_api/models/earnings_calls_company_documents200_response_documents_inner.py +293 -0
- invinite_data_api/models/earnings_calls_diff200_response.py +190 -0
- invinite_data_api/models/earnings_calls_diff200_response_hedging.py +100 -0
- invinite_data_api/models/earnings_calls_diff200_response_new_topics_inner.py +97 -0
- invinite_data_api/models/earnings_calls_diff200_response_prior_event.py +92 -0
- invinite_data_api/models/earnings_calls_diff200_response_slide_diff.py +98 -0
- invinite_data_api/models/earnings_calls_document_search200_response.py +98 -0
- invinite_data_api/models/earnings_calls_document_search200_response_hits_inner.py +177 -0
- invinite_data_api/models/earnings_calls_documents200_response.py +104 -0
- invinite_data_api/models/earnings_calls_documents200_response_documents_inner.py +206 -0
- invinite_data_api/models/earnings_calls_events200_response.py +104 -0
- invinite_data_api/models/earnings_calls_events200_response_events_inner.py +238 -0
- invinite_data_api/models/earnings_calls_events200_response_events_inner_observations_inner.py +119 -0
- invinite_data_api/models/earnings_calls_extractions200_response.py +123 -0
- invinite_data_api/models/earnings_calls_extractions200_response_guidance_inner.py +187 -0
- invinite_data_api/models/earnings_calls_extractions200_response_guidance_inner_sources_inner.py +110 -0
- invinite_data_api/models/earnings_calls_extractions200_response_guidance_inner_sources_inner_speaker.py +107 -0
- invinite_data_api/models/earnings_calls_extractions200_response_kpis_inner.py +155 -0
- invinite_data_api/models/earnings_calls_extractions200_response_kpis_inner_filing_link.py +166 -0
- invinite_data_api/models/earnings_calls_extractions200_response_kpis_inner_filing_link_fact_period.py +110 -0
- invinite_data_api/models/earnings_calls_guidance_history200_response.py +102 -0
- invinite_data_api/models/earnings_calls_guidance_history200_response_series_inner.py +183 -0
- invinite_data_api/models/earnings_calls_guidance_history200_response_series_inner_change_vs_prior.py +107 -0
- invinite_data_api/models/earnings_calls_live200_response.py +99 -0
- invinite_data_api/models/earnings_calls_live200_response_events_inner.py +236 -0
- invinite_data_api/models/earnings_calls_live_stream200_response.py +141 -0
- invinite_data_api/models/earnings_calls_live_stream200_response_event.py +96 -0
- invinite_data_api/models/earnings_calls_metrics200_response.py +158 -0
- invinite_data_api/models/earnings_calls_participants200_response.py +109 -0
- invinite_data_api/models/earnings_calls_participants200_response_participants_inner.py +148 -0
- invinite_data_api/models/earnings_calls_participants200_response_participants_inner_evidence_inner.py +90 -0
- invinite_data_api/models/earnings_calls_participants200_response_participation_events_inner.py +105 -0
- invinite_data_api/models/earnings_calls_person200_response.py +133 -0
- invinite_data_api/models/earnings_calls_person200_response_appearances_inner.py +134 -0
- invinite_data_api/models/earnings_calls_press_release200_response.py +146 -0
- invinite_data_api/models/earnings_calls_press_release200_response_participants_inner.py +102 -0
- invinite_data_api/models/earnings_calls_price_attribution200_response.py +190 -0
- invinite_data_api/models/earnings_calls_price_attribution200_response_buckets_inner.py +105 -0
- invinite_data_api/models/earnings_calls_price_attribution200_response_buckets_inner_utterance_refs_inner.py +92 -0
- invinite_data_api/models/earnings_calls_price_attribution200_response_top_minutes_inner.py +101 -0
- invinite_data_api/models/earnings_calls_prosody200_response.py +111 -0
- invinite_data_api/models/earnings_calls_prosody200_response_speakers_inner.py +177 -0
- invinite_data_api/models/earnings_calls_prosody200_response_speakers_inner_speaker.py +109 -0
- invinite_data_api/models/earnings_calls_qa200_response.py +101 -0
- invinite_data_api/models/earnings_calls_qa200_response_pairs_inner.py +149 -0
- invinite_data_api/models/earnings_calls_qa200_response_pairs_inner_analyst.py +110 -0
- invinite_data_api/models/earnings_calls_qa200_response_pairs_inner_answers_inner.py +110 -0
- invinite_data_api/models/earnings_calls_qa200_response_pairs_inner_scores.py +119 -0
- invinite_data_api/models/earnings_calls_qa200_response_pairs_inner_scores_evidence.py +97 -0
- invinite_data_api/models/earnings_calls_search200_response.py +98 -0
- invinite_data_api/models/earnings_calls_search200_response_hits_inner.py +161 -0
- invinite_data_api/models/earnings_calls_search200_response_hits_inner_slide.py +95 -0
- invinite_data_api/models/earnings_calls_slides200_response.py +113 -0
- invinite_data_api/models/earnings_calls_slides200_response_deck.py +124 -0
- invinite_data_api/models/earnings_calls_slides200_response_slides_inner.py +104 -0
- invinite_data_api/models/earnings_calls_transcript200_response.py +140 -0
- invinite_data_api/models/earnings_calls_transcript404_response.py +98 -0
- invinite_data_api/models/earnings_calls_transcript_diff200_response.py +111 -0
- invinite_data_api/models/earnings_calls_transcript_diff200_response_changes_inner.py +104 -0
- invinite_data_api/models/earnings_calls_transcript_diff200_response_stats.py +90 -0
- invinite_data_api/models/earnings_calls_transcript_versions200_response.py +106 -0
- invinite_data_api/models/earnings_calls_transcript_versions200_response_versions_inner.py +116 -0
- invinite_data_api/models/earnings_calls_webhooks_create201_response.py +126 -0
- invinite_data_api/models/earnings_calls_webhooks_create_request.py +97 -0
- invinite_data_api/models/earnings_calls_webhooks_create_request_filters.py +91 -0
- invinite_data_api/models/earnings_calls_webhooks_deliveries200_response.py +97 -0
- invinite_data_api/models/earnings_calls_webhooks_deliveries200_response_data_inner.py +133 -0
- invinite_data_api/models/earnings_calls_webhooks_list200_response.py +96 -0
- invinite_data_api/models/earnings_calls_webhooks_list200_response_data_inner.py +124 -0
- invinite_data_api/models/earnings_calls_webhooks_list200_response_data_inner_filters.py +90 -0
- invinite_data_api/models/earnings_calls_webhooks_rotate_secret200_response.py +91 -0
- invinite_data_api/models/earnings_calls_webhooks_test202_response.py +98 -0
- invinite_data_api/models/earnings_calls_webhooks_update_request.py +95 -0
- invinite_data_api/models/financial_metrics_ratios200_response.py +97 -0
- invinite_data_api/models/financial_metrics_ratios200_response_companies_inner.py +103 -0
- invinite_data_api/models/financial_metrics_ratios200_response_companies_inner_periods_inner.py +109 -0
- invinite_data_api/models/forbidden_error.py +90 -0
- invinite_data_api/models/health_get200_response.py +90 -0
- invinite_data_api/models/insider_trades_list200_response.py +102 -0
- invinite_data_api/models/insider_trades_list200_response_transactions_inner.py +146 -0
- invinite_data_api/models/institutional_ownership_holdings_by_company200_response.py +102 -0
- invinite_data_api/models/institutional_ownership_holdings_by_investor200_response.py +100 -0
- invinite_data_api/models/institutional_ownership_holdings_by_investor200_response_holdings_inner.py +171 -0
- invinite_data_api/models/institutional_ownership_institutions200_response.py +98 -0
- invinite_data_api/models/institutional_ownership_institutions200_response_institutions_inner.py +132 -0
- invinite_data_api/models/institutional_ownership_transactions200_response.py +98 -0
- invinite_data_api/models/institutional_ownership_transactions200_response_transactions_inner.py +186 -0
- invinite_data_api/models/internal_server_error.py +90 -0
- invinite_data_api/models/ipos_list200_response.py +98 -0
- invinite_data_api/models/ipos_list200_response_ipos_inner.py +130 -0
- invinite_data_api/models/market_holidays200_response.py +98 -0
- invinite_data_api/models/market_holidays200_response_holidays_inner.py +105 -0
- invinite_data_api/models/metadata_available_metrics200_response.py +96 -0
- invinite_data_api/models/metadata_available_metrics200_response_metrics_inner.py +90 -0
- invinite_data_api/models/metadata_available_section_ids200_response.py +96 -0
- invinite_data_api/models/metadata_available_section_ids200_response_form_types_inner.py +105 -0
- invinite_data_api/models/metadata_available_section_ids200_response_form_types_inner_sections_inner.py +94 -0
- invinite_data_api/models/not_found_error.py +90 -0
- invinite_data_api/models/presentation_fact.py +112 -0
- invinite_data_api/models/sec_filings_available_form_types200_response.py +88 -0
- invinite_data_api/models/sec_filings_list200_response.py +96 -0
- invinite_data_api/models/sec_filings_list200_response_companies_inner.py +102 -0
- invinite_data_api/models/sec_filings_list200_response_companies_inner_filings_inner.py +127 -0
- invinite_data_api/models/sec_filings_search200_response.py +98 -0
- invinite_data_api/models/sec_filings_search200_response_sources_inner.py +99 -0
- invinite_data_api/models/sec_filings_sections200_response.py +96 -0
- invinite_data_api/models/sec_filings_sections200_response_companies_inner.py +100 -0
- invinite_data_api/models/sec_filings_sections200_response_companies_inner_sections_inner.py +132 -0
- invinite_data_api/models/segmented_financials200_response.py +96 -0
- invinite_data_api/models/segmented_financials200_response_companies_inner.py +102 -0
- invinite_data_api/models/segmented_financials200_response_companies_inner_periods_inner.py +123 -0
- invinite_data_api/models/segmented_financials200_response_companies_inner_periods_inner_facts_value_inner.py +104 -0
- invinite_data_api/models/segmented_financials_detailed200_response.py +96 -0
- invinite_data_api/models/segmented_financials_detailed200_response_companies_inner.py +102 -0
- invinite_data_api/models/segmented_financials_detailed200_response_companies_inner_periods_inner.py +123 -0
- invinite_data_api/models/segmented_financials_detailed200_response_companies_inner_periods_inner_facts_value_inner.py +141 -0
- invinite_data_api/models/service_unavailable_error.py +90 -0
- invinite_data_api/models/standardized_income_statement200_response.py +97 -0
- invinite_data_api/models/standardized_income_statement200_response_companies_inner.py +103 -0
- invinite_data_api/models/standardized_income_statement200_response_companies_inner_periods_inner.py +109 -0
- invinite_data_api/models/standardized_income_statement_detailed200_response.py +97 -0
- invinite_data_api/models/standardized_income_statement_detailed200_response_companies_inner.py +103 -0
- invinite_data_api/models/standardized_income_statement_detailed200_response_companies_inner_periods_inner.py +122 -0
- invinite_data_api/models/standardized_income_statement_detailed200_response_companies_inner_periods_inner_facts_value.py +120 -0
- invinite_data_api/models/standardized_income_statement_detailed200_response_companies_inner_periods_inner_facts_value_formula.py +98 -0
- invinite_data_api/models/standardized_income_statement_detailed200_response_companies_inner_periods_inner_facts_value_formula_members_inner.py +137 -0
- invinite_data_api/models/standardized_income_statement_detailed200_response_companies_inner_periods_inner_facts_value_formula_members_inner_one_of.py +134 -0
- invinite_data_api/models/standardized_income_statement_detailed200_response_companies_inner_periods_inner_facts_value_formula_members_inner_one_of1.py +120 -0
- invinite_data_api/models/standardized_income_statement_presentation200_response.py +97 -0
- invinite_data_api/models/standardized_income_statement_presentation200_response_companies_inner.py +103 -0
- invinite_data_api/models/standardized_income_statement_presentation200_response_companies_inner_periods_inner.py +117 -0
- invinite_data_api/models/standardized_presentation_fact.py +101 -0
- invinite_data_api/models/standardized_snapshot200_response.py +97 -0
- invinite_data_api/models/standardized_snapshot200_response_companies_inner.py +117 -0
- invinite_data_api/models/standardized_snapshot200_response_companies_inner_statements.py +117 -0
- invinite_data_api/models/standardized_snapshot200_response_companies_inner_statements_income_statement.py +88 -0
- invinite_data_api/models/standardized_snapshot_detailed200_response.py +97 -0
- invinite_data_api/models/standardized_snapshot_detailed200_response_companies_inner.py +117 -0
- invinite_data_api/models/standardized_snapshot_detailed200_response_companies_inner_statements.py +117 -0
- invinite_data_api/models/standardized_snapshot_detailed200_response_companies_inner_statements_income_statement.py +101 -0
- invinite_data_api/models/standardized_snapshot_presentation200_response.py +97 -0
- invinite_data_api/models/standardized_snapshot_presentation200_response_companies_inner.py +117 -0
- invinite_data_api/models/standardized_snapshot_presentation200_response_companies_inner_statements.py +117 -0
- invinite_data_api/models/standardized_snapshot_presentation200_response_companies_inner_statements_income_statement.py +96 -0
- invinite_data_api/models/status_get200_response.py +110 -0
- invinite_data_api/models/status_get200_response_services_inner.py +125 -0
- invinite_data_api/models/status_get200_response_universe.py +99 -0
- invinite_data_api/models/status_get200_response_universe_earnings_calls.py +90 -0
- invinite_data_api/models/status_licensing200_response.py +130 -0
- invinite_data_api/models/status_licensing200_response_families_inner.py +105 -0
- invinite_data_api/models/status_licensing200_response_families_inner_routes_inner.py +106 -0
- invinite_data_api/models/status_licensing200_response_notes.py +98 -0
- invinite_data_api/models/status_licensing200_response_tiers.py +107 -0
- invinite_data_api/models/status_licensing200_response_tiers_free.py +98 -0
- invinite_data_api/models/unauthorized_error.py +90 -0
- invinite_data_api/models/web_socket_call_lifecycle_event.py +116 -0
- invinite_data_api/models/web_socket_error_event.py +109 -0
- invinite_data_api/models/web_socket_filing.py +127 -0
- invinite_data_api/models/web_socket_gap_event.py +104 -0
- invinite_data_api/models/web_socket_guidance_flash_event.py +156 -0
- invinite_data_api/models/web_socket_keyword_hit_event.py +177 -0
- invinite_data_api/models/web_socket_new_filing_event.py +101 -0
- invinite_data_api/models/web_socket_ping_event.py +95 -0
- invinite_data_api/models/web_socket_price_tick_event.py +170 -0
- invinite_data_api/models/web_socket_speaker_names_event.py +112 -0
- invinite_data_api/models/web_socket_speaker_names_event_assignments_inner.py +120 -0
- invinite_data_api/models/web_socket_subscribe_earnings_call.py +183 -0
- invinite_data_api/models/web_socket_subscribed_event.py +142 -0
- invinite_data_api/models/web_socket_transcript_segment_event.py +118 -0
- invinite_data_api/models/web_socket_unsubscribe.py +98 -0
- invinite_data_api/models/web_socket_unsubscribed_event.py +107 -0
- invinite_data_api/models/web_socket_warning_event.py +109 -0
- invinite_data_api/models/webhook_envelope.py +103 -0
- invinite_data_api/py.typed +0 -0
- invinite_data_api/rest.py +263 -0
- invinite_data_api-0.1.0.dist-info/METADATA +133 -0
- invinite_data_api-0.1.0.dist-info/RECORD +257 -0
- invinite_data_api-0.1.0.dist-info/WHEEL +5 -0
- invinite_data_api-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Invinite API
|
|
5
|
+
|
|
6
|
+
Invinite financial data API. Each endpoint has a base credit cost: `x-credits` is the base cost; responses add 1 credit per started 1,000 rows beyond the first 1,000; `X-Credits-Charged` reports the final debit and `X-Credits-Included-Remaining` what is left of the plan's included credits. `GET /v1/account/usage` returns your account's usage by day, endpoint family and key (it costs no credits). SEC filing search has a 100-credit base cost. ## Webhooks Accounts on LITE and above subscribe with `POST /v1/earnings-calls/webhooks` to the `earnings_call.*` lifecycle events (filtered by CIK); see `x-webhooks` for each `data` object. What a subscription may hold depends on the plan (a create / update beyond it is refused with the plan's limit; `ping` needs no subscription — the test route and the disabled notice send it to any subscription): | Plan | Webhooks | Events | CIKs per webhook | Keywords per webhook | |---|---|---|---|---| | FREE | 0 | — | — | — | | LITE | 5 | `.scheduled`, `.rescheduled`, `.started`, `.ended`, `.transcript_ready`, `.assets_ready` | ≤ 10 | — | | STANDARD | 15 | LITE + `.transcript_provisional`, `.transcript_corrected`, `.documents_updated` | ≤ 25 | — | | PRO / ENTERPRISE | 50 | STANDARD + `.guidance_flash`, `.keyword_hit` | ≤ 100 | ≤ 20 (on ≤ 10 webhooks) | Every delivery is a `POST` with `Content-Type: application/json`, `X-Invinite-Event`, `X-Invinite-Delivery` and `X-Invinite-Signature: t=<unix seconds>,v1=<hex>` where `v1` = HMAC-SHA256(secret, `<t>.<raw body>`); during a secret rotation the header carries one `v1` per valid secret. Reject a signature older than 5 minutes. Any 2xx within 10 s acknowledges; redirects are not followed. A failed delivery is retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h, 24 h (8 attempts in all, the same delivery id each time). A subscription is disabled after 8 consecutive dead-lettered deliveries (a final `ping` with `notice: subscription_disabled` is sent). Deliveries are at-least-once and unordered: dedupe on the delivery id, order by `created_at`. ## Licensing | Tier | display | redistribute | rag | train | audio | resell | | --- | --- | --- | --- | --- | --- | --- | | FREE | ✓ | – | – | – | – | – | | LITE | ✓ | – | – | – | – | – | | STANDARD | ✓ | – | ✓ | – | – | – | | PRO | ✓ | ✓ | ✓ | – | ✓ | – | Invinite data may be shown and, from PRO, redistributed inside the licensee's own product with attribution (\"Source: Invinite\" on screen or in the API response that carries it). It may never be resold, relicensed, white-labelled or offered as a data feed as the licensee's own data, at any tier, under any contract. Policy version: 2026-10-draft. Draft — pending counsel sign-off. Audio files are forensically watermarked per customer. Audio is served through signed URLs, is subject to per-company takedown and may not be re-hosted; every delivered file carries a per-account forensic watermark: a copy found elsewhere is traced to the account that received it. SEC data: Figures and filings originate from SEC EDGAR; the standardisation, mapping and derived metrics are Invinite's. Every `/v1/*` data operation carries `x-license`, the minimum use right its data ships with; `GET /status/licensing` serves the same matrix per route, rendered at [data.invinite.com/docs/licensing](https://data.invinite.com/docs/licensing). `/v1/account/usage` serves no licensed data and carries none. ## Status [`/status`](/status) reports whether each product family works (a status and its uptime over 7, 30 and 90 days); [`/status/licensing`](/status/licensing) serves the licensing matrix per route. The status routes need no API key and are cached for 5 minutes. The public status page is [status.data.invinite.com](https://status.data.invinite.com): a snapshot of `/status` every 15 minutes plus an external reachability probe of the API. Uptime is the share of requests answered without a server error, measured by the API per product family; a window with too little traffic to judge shows no figure. Status reflects the last 24 hours. Product families: Company, Financials, SEC Filings, Insider Trades, Institutional Ownership, IPOs, Market, Metadata, Earnings Calls, WebSocket, Account.
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictFloat, StrictInt, StrictStr, field_validator
|
|
21
|
+
from typing import Any, ClassVar, Dict, List, Optional, Union
|
|
22
|
+
from uuid import UUID
|
|
23
|
+
from invinite_data_api.models.earnings_calls_extractions200_response_guidance_inner_sources_inner import EarningsCallsExtractions200ResponseGuidanceInnerSourcesInner
|
|
24
|
+
from typing import Optional, Set
|
|
25
|
+
from typing_extensions import Self
|
|
26
|
+
from pydantic_core import to_jsonable_python
|
|
27
|
+
|
|
28
|
+
class EarningsCallsExtractions200ResponseGuidanceInner(BaseModel):
|
|
29
|
+
"""
|
|
30
|
+
EarningsCallsExtractions200ResponseGuidanceInner
|
|
31
|
+
""" # noqa: E501
|
|
32
|
+
id: UUID = Field(description="Guidance item identifier")
|
|
33
|
+
metric: StrictStr = Field(description="Metric as stated")
|
|
34
|
+
metric_normalized: StrictStr = Field(description="Normalized metric (guidance/history vocabulary)")
|
|
35
|
+
period_label: StrictStr = Field(description="Guided period (e.g. Q1 FY2027, FY2027)")
|
|
36
|
+
period_kind: StrictStr = Field(description="Kind of period")
|
|
37
|
+
low: Optional[Union[StrictFloat, StrictInt]] = Field(description="Low end, base units")
|
|
38
|
+
high: Optional[Union[StrictFloat, StrictInt]] = Field(description="High end, base units")
|
|
39
|
+
midpoint: Optional[Union[StrictFloat, StrictInt]] = Field(description="Midpoint (or point guidance), base units")
|
|
40
|
+
unit: Optional[StrictStr] = Field(description="usd, pct, shares, ratio or other")
|
|
41
|
+
currency: Optional[StrictStr] = Field(description="ISO currency")
|
|
42
|
+
basis: StrictStr = Field(description="Accounting basis")
|
|
43
|
+
direction: StrictStr = Field(description="Versus the prior call's guidance")
|
|
44
|
+
prior_item_id: Optional[UUID] = Field(description="The prior call's item")
|
|
45
|
+
confidence: Union[StrictFloat, StrictInt] = Field(description="Calibrated confidence 0..1 (not a probability)")
|
|
46
|
+
cross_validated: StrictBool = Field(description="Call and press release agree")
|
|
47
|
+
review_status: StrictStr = Field(description="Review state")
|
|
48
|
+
sources: List[EarningsCallsExtractions200ResponseGuidanceInnerSourcesInner] = Field(description="Citations")
|
|
49
|
+
__properties: ClassVar[List[str]] = ["id", "metric", "metric_normalized", "period_label", "period_kind", "low", "high", "midpoint", "unit", "currency", "basis", "direction", "prior_item_id", "confidence", "cross_validated", "review_status", "sources"]
|
|
50
|
+
|
|
51
|
+
@field_validator('period_kind')
|
|
52
|
+
def period_kind_validate_enum(cls, value):
|
|
53
|
+
"""Validates the enum"""
|
|
54
|
+
if value not in set(['quarter', 'fiscal_year', 'half', 'other']):
|
|
55
|
+
raise ValueError("must be one of enum values ('quarter', 'fiscal_year', 'half', 'other')")
|
|
56
|
+
return value
|
|
57
|
+
|
|
58
|
+
@field_validator('basis')
|
|
59
|
+
def basis_validate_enum(cls, value):
|
|
60
|
+
"""Validates the enum"""
|
|
61
|
+
if value not in set(['gaap', 'non_gaap', 'unknown']):
|
|
62
|
+
raise ValueError("must be one of enum values ('gaap', 'non_gaap', 'unknown')")
|
|
63
|
+
return value
|
|
64
|
+
|
|
65
|
+
@field_validator('direction')
|
|
66
|
+
def direction_validate_enum(cls, value):
|
|
67
|
+
"""Validates the enum"""
|
|
68
|
+
if value not in set(['raised', 'lowered', 'maintained', 'withdrawn', 'new', 'unknown']):
|
|
69
|
+
raise ValueError("must be one of enum values ('raised', 'lowered', 'maintained', 'withdrawn', 'new', 'unknown')")
|
|
70
|
+
return value
|
|
71
|
+
|
|
72
|
+
@field_validator('review_status')
|
|
73
|
+
def review_status_validate_enum(cls, value):
|
|
74
|
+
"""Validates the enum"""
|
|
75
|
+
if value not in set(['auto', 'needs_review', 'approved']):
|
|
76
|
+
raise ValueError("must be one of enum values ('auto', 'needs_review', 'approved')")
|
|
77
|
+
return value
|
|
78
|
+
|
|
79
|
+
model_config = ConfigDict(
|
|
80
|
+
validate_by_name=True,
|
|
81
|
+
validate_by_alias=True,
|
|
82
|
+
validate_assignment=True,
|
|
83
|
+
protected_namespaces=(),
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def to_str(self) -> str:
|
|
88
|
+
"""Returns the string representation of the model using alias"""
|
|
89
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
90
|
+
|
|
91
|
+
def to_json(self) -> str:
|
|
92
|
+
"""Returns the JSON representation of the model using alias"""
|
|
93
|
+
return json.dumps(to_jsonable_python(self.to_dict()))
|
|
94
|
+
|
|
95
|
+
@classmethod
|
|
96
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
97
|
+
"""Create an instance of EarningsCallsExtractions200ResponseGuidanceInner from a JSON string"""
|
|
98
|
+
return cls.from_dict(json.loads(json_str))
|
|
99
|
+
|
|
100
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
101
|
+
"""Return the dictionary representation of the model using alias.
|
|
102
|
+
|
|
103
|
+
This has the following differences from calling pydantic's
|
|
104
|
+
`self.model_dump(by_alias=True)`:
|
|
105
|
+
|
|
106
|
+
* `None` is only added to the output dict for nullable fields that
|
|
107
|
+
were set at model initialization. Other fields with value `None`
|
|
108
|
+
are ignored.
|
|
109
|
+
"""
|
|
110
|
+
excluded_fields: Set[str] = set([
|
|
111
|
+
])
|
|
112
|
+
|
|
113
|
+
_dict = self.model_dump(
|
|
114
|
+
by_alias=True,
|
|
115
|
+
exclude=excluded_fields,
|
|
116
|
+
exclude_none=True,
|
|
117
|
+
)
|
|
118
|
+
# override the default output from pydantic by calling `to_dict()` of each item in sources (list)
|
|
119
|
+
_items = []
|
|
120
|
+
if self.sources:
|
|
121
|
+
for _item_sources in self.sources:
|
|
122
|
+
if _item_sources:
|
|
123
|
+
_items.append(_item_sources.to_dict())
|
|
124
|
+
_dict['sources'] = _items
|
|
125
|
+
# set to None if low (nullable) is None
|
|
126
|
+
# and model_fields_set contains the field
|
|
127
|
+
if self.low is None and "low" in self.model_fields_set:
|
|
128
|
+
_dict['low'] = None
|
|
129
|
+
|
|
130
|
+
# set to None if high (nullable) is None
|
|
131
|
+
# and model_fields_set contains the field
|
|
132
|
+
if self.high is None and "high" in self.model_fields_set:
|
|
133
|
+
_dict['high'] = None
|
|
134
|
+
|
|
135
|
+
# set to None if midpoint (nullable) is None
|
|
136
|
+
# and model_fields_set contains the field
|
|
137
|
+
if self.midpoint is None and "midpoint" in self.model_fields_set:
|
|
138
|
+
_dict['midpoint'] = None
|
|
139
|
+
|
|
140
|
+
# set to None if unit (nullable) is None
|
|
141
|
+
# and model_fields_set contains the field
|
|
142
|
+
if self.unit is None and "unit" in self.model_fields_set:
|
|
143
|
+
_dict['unit'] = None
|
|
144
|
+
|
|
145
|
+
# set to None if currency (nullable) is None
|
|
146
|
+
# and model_fields_set contains the field
|
|
147
|
+
if self.currency is None and "currency" in self.model_fields_set:
|
|
148
|
+
_dict['currency'] = None
|
|
149
|
+
|
|
150
|
+
# set to None if prior_item_id (nullable) is None
|
|
151
|
+
# and model_fields_set contains the field
|
|
152
|
+
if self.prior_item_id is None and "prior_item_id" in self.model_fields_set:
|
|
153
|
+
_dict['prior_item_id'] = None
|
|
154
|
+
|
|
155
|
+
return _dict
|
|
156
|
+
|
|
157
|
+
@classmethod
|
|
158
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
159
|
+
"""Create an instance of EarningsCallsExtractions200ResponseGuidanceInner from a dict"""
|
|
160
|
+
if obj is None:
|
|
161
|
+
return None
|
|
162
|
+
|
|
163
|
+
if not isinstance(obj, dict):
|
|
164
|
+
return cls.model_validate(obj)
|
|
165
|
+
|
|
166
|
+
_obj = cls.model_validate({
|
|
167
|
+
"id": obj.get("id"),
|
|
168
|
+
"metric": obj.get("metric"),
|
|
169
|
+
"metric_normalized": obj.get("metric_normalized"),
|
|
170
|
+
"period_label": obj.get("period_label"),
|
|
171
|
+
"period_kind": obj.get("period_kind"),
|
|
172
|
+
"low": obj.get("low"),
|
|
173
|
+
"high": obj.get("high"),
|
|
174
|
+
"midpoint": obj.get("midpoint"),
|
|
175
|
+
"unit": obj.get("unit"),
|
|
176
|
+
"currency": obj.get("currency"),
|
|
177
|
+
"basis": obj.get("basis"),
|
|
178
|
+
"direction": obj.get("direction"),
|
|
179
|
+
"prior_item_id": obj.get("prior_item_id"),
|
|
180
|
+
"confidence": obj.get("confidence"),
|
|
181
|
+
"cross_validated": obj.get("cross_validated"),
|
|
182
|
+
"review_status": obj.get("review_status"),
|
|
183
|
+
"sources": [EarningsCallsExtractions200ResponseGuidanceInnerSourcesInner.from_dict(_item) for _item in obj["sources"]] if obj.get("sources") is not None else None
|
|
184
|
+
})
|
|
185
|
+
return _obj
|
|
186
|
+
|
|
187
|
+
|
invinite_data_api/models/earnings_calls_extractions200_response_guidance_inner_sources_inner.py
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Invinite API
|
|
5
|
+
|
|
6
|
+
Invinite financial data API. Each endpoint has a base credit cost: `x-credits` is the base cost; responses add 1 credit per started 1,000 rows beyond the first 1,000; `X-Credits-Charged` reports the final debit and `X-Credits-Included-Remaining` what is left of the plan's included credits. `GET /v1/account/usage` returns your account's usage by day, endpoint family and key (it costs no credits). SEC filing search has a 100-credit base cost. ## Webhooks Accounts on LITE and above subscribe with `POST /v1/earnings-calls/webhooks` to the `earnings_call.*` lifecycle events (filtered by CIK); see `x-webhooks` for each `data` object. What a subscription may hold depends on the plan (a create / update beyond it is refused with the plan's limit; `ping` needs no subscription — the test route and the disabled notice send it to any subscription): | Plan | Webhooks | Events | CIKs per webhook | Keywords per webhook | |---|---|---|---|---| | FREE | 0 | — | — | — | | LITE | 5 | `.scheduled`, `.rescheduled`, `.started`, `.ended`, `.transcript_ready`, `.assets_ready` | ≤ 10 | — | | STANDARD | 15 | LITE + `.transcript_provisional`, `.transcript_corrected`, `.documents_updated` | ≤ 25 | — | | PRO / ENTERPRISE | 50 | STANDARD + `.guidance_flash`, `.keyword_hit` | ≤ 100 | ≤ 20 (on ≤ 10 webhooks) | Every delivery is a `POST` with `Content-Type: application/json`, `X-Invinite-Event`, `X-Invinite-Delivery` and `X-Invinite-Signature: t=<unix seconds>,v1=<hex>` where `v1` = HMAC-SHA256(secret, `<t>.<raw body>`); during a secret rotation the header carries one `v1` per valid secret. Reject a signature older than 5 minutes. Any 2xx within 10 s acknowledges; redirects are not followed. A failed delivery is retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h, 24 h (8 attempts in all, the same delivery id each time). A subscription is disabled after 8 consecutive dead-lettered deliveries (a final `ping` with `notice: subscription_disabled` is sent). Deliveries are at-least-once and unordered: dedupe on the delivery id, order by `created_at`. ## Licensing | Tier | display | redistribute | rag | train | audio | resell | | --- | --- | --- | --- | --- | --- | --- | | FREE | ✓ | – | – | – | – | – | | LITE | ✓ | – | – | – | – | – | | STANDARD | ✓ | – | ✓ | – | – | – | | PRO | ✓ | ✓ | ✓ | – | ✓ | – | Invinite data may be shown and, from PRO, redistributed inside the licensee's own product with attribution (\"Source: Invinite\" on screen or in the API response that carries it). It may never be resold, relicensed, white-labelled or offered as a data feed as the licensee's own data, at any tier, under any contract. Policy version: 2026-10-draft. Draft — pending counsel sign-off. Audio files are forensically watermarked per customer. Audio is served through signed URLs, is subject to per-company takedown and may not be re-hosted; every delivered file carries a per-account forensic watermark: a copy found elsewhere is traced to the account that received it. SEC data: Figures and filings originate from SEC EDGAR; the standardisation, mapping and derived metrics are Invinite's. Every `/v1/*` data operation carries `x-license`, the minimum use right its data ships with; `GET /status/licensing` serves the same matrix per route, rendered at [data.invinite.com/docs/licensing](https://data.invinite.com/docs/licensing). `/v1/account/usage` serves no licensed data and carries none. ## Status [`/status`](/status) reports whether each product family works (a status and its uptime over 7, 30 and 90 days); [`/status/licensing`](/status/licensing) serves the licensing matrix per route. The status routes need no API key and are cached for 5 minutes. The public status page is [status.data.invinite.com](https://status.data.invinite.com): a snapshot of `/status` every 15 minutes plus an external reachability probe of the API. Uptime is the share of requests answered without a server error, measured by the API per product family; a window with too little traffic to judge shows no figure. Status reflects the last 24 hours. Product families: Company, Financials, SEC Filings, Insider Trades, Institutional Ownership, IPOs, Market, Metadata, Earnings Calls, WebSocket, Account.
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator
|
|
21
|
+
from typing import Any, ClassVar, Dict, List, Optional
|
|
22
|
+
from invinite_data_api.models.earnings_calls_extractions200_response_guidance_inner_sources_inner_speaker import EarningsCallsExtractions200ResponseGuidanceInnerSourcesInnerSpeaker
|
|
23
|
+
from typing import Optional, Set
|
|
24
|
+
from typing_extensions import Self
|
|
25
|
+
from pydantic_core import to_jsonable_python
|
|
26
|
+
|
|
27
|
+
class EarningsCallsExtractions200ResponseGuidanceInnerSourcesInner(BaseModel):
|
|
28
|
+
"""
|
|
29
|
+
EarningsCallsExtractions200ResponseGuidanceInnerSourcesInner
|
|
30
|
+
""" # noqa: E501
|
|
31
|
+
origin: StrictStr = Field(description="Where the sentence comes from")
|
|
32
|
+
sentence: StrictStr = Field(description="The verbatim source sentence")
|
|
33
|
+
start_ms: Optional[StrictInt] = Field(description="Where it was spoken (ms into the call)")
|
|
34
|
+
speaker: EarningsCallsExtractions200ResponseGuidanceInnerSourcesInnerSpeaker
|
|
35
|
+
__properties: ClassVar[List[str]] = ["origin", "sentence", "start_ms", "speaker"]
|
|
36
|
+
|
|
37
|
+
@field_validator('origin')
|
|
38
|
+
def origin_validate_enum(cls, value):
|
|
39
|
+
"""Validates the enum"""
|
|
40
|
+
if value not in set(['transcript', 'press_release']):
|
|
41
|
+
raise ValueError("must be one of enum values ('transcript', 'press_release')")
|
|
42
|
+
return value
|
|
43
|
+
|
|
44
|
+
model_config = ConfigDict(
|
|
45
|
+
validate_by_name=True,
|
|
46
|
+
validate_by_alias=True,
|
|
47
|
+
validate_assignment=True,
|
|
48
|
+
protected_namespaces=(),
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def to_str(self) -> str:
|
|
53
|
+
"""Returns the string representation of the model using alias"""
|
|
54
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
55
|
+
|
|
56
|
+
def to_json(self) -> str:
|
|
57
|
+
"""Returns the JSON representation of the model using alias"""
|
|
58
|
+
return json.dumps(to_jsonable_python(self.to_dict()))
|
|
59
|
+
|
|
60
|
+
@classmethod
|
|
61
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
62
|
+
"""Create an instance of EarningsCallsExtractions200ResponseGuidanceInnerSourcesInner from a JSON string"""
|
|
63
|
+
return cls.from_dict(json.loads(json_str))
|
|
64
|
+
|
|
65
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
66
|
+
"""Return the dictionary representation of the model using alias.
|
|
67
|
+
|
|
68
|
+
This has the following differences from calling pydantic's
|
|
69
|
+
`self.model_dump(by_alias=True)`:
|
|
70
|
+
|
|
71
|
+
* `None` is only added to the output dict for nullable fields that
|
|
72
|
+
were set at model initialization. Other fields with value `None`
|
|
73
|
+
are ignored.
|
|
74
|
+
"""
|
|
75
|
+
excluded_fields: Set[str] = set([
|
|
76
|
+
])
|
|
77
|
+
|
|
78
|
+
_dict = self.model_dump(
|
|
79
|
+
by_alias=True,
|
|
80
|
+
exclude=excluded_fields,
|
|
81
|
+
exclude_none=True,
|
|
82
|
+
)
|
|
83
|
+
# override the default output from pydantic by calling `to_dict()` of speaker
|
|
84
|
+
if self.speaker:
|
|
85
|
+
_dict['speaker'] = self.speaker.to_dict()
|
|
86
|
+
# set to None if start_ms (nullable) is None
|
|
87
|
+
# and model_fields_set contains the field
|
|
88
|
+
if self.start_ms is None and "start_ms" in self.model_fields_set:
|
|
89
|
+
_dict['start_ms'] = None
|
|
90
|
+
|
|
91
|
+
return _dict
|
|
92
|
+
|
|
93
|
+
@classmethod
|
|
94
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
95
|
+
"""Create an instance of EarningsCallsExtractions200ResponseGuidanceInnerSourcesInner from a dict"""
|
|
96
|
+
if obj is None:
|
|
97
|
+
return None
|
|
98
|
+
|
|
99
|
+
if not isinstance(obj, dict):
|
|
100
|
+
return cls.model_validate(obj)
|
|
101
|
+
|
|
102
|
+
_obj = cls.model_validate({
|
|
103
|
+
"origin": obj.get("origin"),
|
|
104
|
+
"sentence": obj.get("sentence"),
|
|
105
|
+
"start_ms": obj.get("start_ms"),
|
|
106
|
+
"speaker": EarningsCallsExtractions200ResponseGuidanceInnerSourcesInnerSpeaker.from_dict(obj["speaker"]) if obj.get("speaker") is not None else None
|
|
107
|
+
})
|
|
108
|
+
return _obj
|
|
109
|
+
|
|
110
|
+
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Invinite API
|
|
5
|
+
|
|
6
|
+
Invinite financial data API. Each endpoint has a base credit cost: `x-credits` is the base cost; responses add 1 credit per started 1,000 rows beyond the first 1,000; `X-Credits-Charged` reports the final debit and `X-Credits-Included-Remaining` what is left of the plan's included credits. `GET /v1/account/usage` returns your account's usage by day, endpoint family and key (it costs no credits). SEC filing search has a 100-credit base cost. ## Webhooks Accounts on LITE and above subscribe with `POST /v1/earnings-calls/webhooks` to the `earnings_call.*` lifecycle events (filtered by CIK); see `x-webhooks` for each `data` object. What a subscription may hold depends on the plan (a create / update beyond it is refused with the plan's limit; `ping` needs no subscription — the test route and the disabled notice send it to any subscription): | Plan | Webhooks | Events | CIKs per webhook | Keywords per webhook | |---|---|---|---|---| | FREE | 0 | — | — | — | | LITE | 5 | `.scheduled`, `.rescheduled`, `.started`, `.ended`, `.transcript_ready`, `.assets_ready` | ≤ 10 | — | | STANDARD | 15 | LITE + `.transcript_provisional`, `.transcript_corrected`, `.documents_updated` | ≤ 25 | — | | PRO / ENTERPRISE | 50 | STANDARD + `.guidance_flash`, `.keyword_hit` | ≤ 100 | ≤ 20 (on ≤ 10 webhooks) | Every delivery is a `POST` with `Content-Type: application/json`, `X-Invinite-Event`, `X-Invinite-Delivery` and `X-Invinite-Signature: t=<unix seconds>,v1=<hex>` where `v1` = HMAC-SHA256(secret, `<t>.<raw body>`); during a secret rotation the header carries one `v1` per valid secret. Reject a signature older than 5 minutes. Any 2xx within 10 s acknowledges; redirects are not followed. A failed delivery is retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h, 24 h (8 attempts in all, the same delivery id each time). A subscription is disabled after 8 consecutive dead-lettered deliveries (a final `ping` with `notice: subscription_disabled` is sent). Deliveries are at-least-once and unordered: dedupe on the delivery id, order by `created_at`. ## Licensing | Tier | display | redistribute | rag | train | audio | resell | | --- | --- | --- | --- | --- | --- | --- | | FREE | ✓ | – | – | – | – | – | | LITE | ✓ | – | – | – | – | – | | STANDARD | ✓ | – | ✓ | – | – | – | | PRO | ✓ | ✓ | ✓ | – | ✓ | – | Invinite data may be shown and, from PRO, redistributed inside the licensee's own product with attribution (\"Source: Invinite\" on screen or in the API response that carries it). It may never be resold, relicensed, white-labelled or offered as a data feed as the licensee's own data, at any tier, under any contract. Policy version: 2026-10-draft. Draft — pending counsel sign-off. Audio files are forensically watermarked per customer. Audio is served through signed URLs, is subject to per-company takedown and may not be re-hosted; every delivered file carries a per-account forensic watermark: a copy found elsewhere is traced to the account that received it. SEC data: Figures and filings originate from SEC EDGAR; the standardisation, mapping and derived metrics are Invinite's. Every `/v1/*` data operation carries `x-license`, the minimum use right its data ships with; `GET /status/licensing` serves the same matrix per route, rendered at [data.invinite.com/docs/licensing](https://data.invinite.com/docs/licensing). `/v1/account/usage` serves no licensed data and carries none. ## Status [`/status`](/status) reports whether each product family works (a status and its uptime over 7, 30 and 90 days); [`/status/licensing`](/status/licensing) serves the licensing matrix per route. The status routes need no API key and are cached for 5 minutes. The public status page is [status.data.invinite.com](https://status.data.invinite.com): a snapshot of `/status` every 15 minutes plus an external reachability probe of the API. Uptime is the share of requests answered without a server error, measured by the API per product family; a window with too little traffic to judge shows no figure. Status reflects the last 24 hours. Product families: Company, Financials, SEC Filings, Insider Trades, Institutional Ownership, IPOs, Market, Metadata, Earnings Calls, WebSocket, Account.
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictStr
|
|
21
|
+
from typing import Any, ClassVar, Dict, List, Optional
|
|
22
|
+
from typing import Optional, Set
|
|
23
|
+
from typing_extensions import Self
|
|
24
|
+
from pydantic_core import to_jsonable_python
|
|
25
|
+
|
|
26
|
+
class EarningsCallsExtractions200ResponseGuidanceInnerSourcesInnerSpeaker(BaseModel):
|
|
27
|
+
"""
|
|
28
|
+
EarningsCallsExtractions200ResponseGuidanceInnerSourcesInnerSpeaker
|
|
29
|
+
""" # noqa: E501
|
|
30
|
+
label: Optional[StrictStr] = Field(description="Speaker label of the transcript (A, B, …); null for press-release text")
|
|
31
|
+
name: Optional[StrictStr] = Field(description="Speaker name (participants route)")
|
|
32
|
+
title: Optional[StrictStr] = Field(description="Speaker title")
|
|
33
|
+
__properties: ClassVar[List[str]] = ["label", "name", "title"]
|
|
34
|
+
|
|
35
|
+
model_config = ConfigDict(
|
|
36
|
+
validate_by_name=True,
|
|
37
|
+
validate_by_alias=True,
|
|
38
|
+
validate_assignment=True,
|
|
39
|
+
protected_namespaces=(),
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def to_str(self) -> str:
|
|
44
|
+
"""Returns the string representation of the model using alias"""
|
|
45
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
46
|
+
|
|
47
|
+
def to_json(self) -> str:
|
|
48
|
+
"""Returns the JSON representation of the model using alias"""
|
|
49
|
+
return json.dumps(to_jsonable_python(self.to_dict()))
|
|
50
|
+
|
|
51
|
+
@classmethod
|
|
52
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
53
|
+
"""Create an instance of EarningsCallsExtractions200ResponseGuidanceInnerSourcesInnerSpeaker from a JSON string"""
|
|
54
|
+
return cls.from_dict(json.loads(json_str))
|
|
55
|
+
|
|
56
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
57
|
+
"""Return the dictionary representation of the model using alias.
|
|
58
|
+
|
|
59
|
+
This has the following differences from calling pydantic's
|
|
60
|
+
`self.model_dump(by_alias=True)`:
|
|
61
|
+
|
|
62
|
+
* `None` is only added to the output dict for nullable fields that
|
|
63
|
+
were set at model initialization. Other fields with value `None`
|
|
64
|
+
are ignored.
|
|
65
|
+
"""
|
|
66
|
+
excluded_fields: Set[str] = set([
|
|
67
|
+
])
|
|
68
|
+
|
|
69
|
+
_dict = self.model_dump(
|
|
70
|
+
by_alias=True,
|
|
71
|
+
exclude=excluded_fields,
|
|
72
|
+
exclude_none=True,
|
|
73
|
+
)
|
|
74
|
+
# set to None if label (nullable) is None
|
|
75
|
+
# and model_fields_set contains the field
|
|
76
|
+
if self.label is None and "label" in self.model_fields_set:
|
|
77
|
+
_dict['label'] = None
|
|
78
|
+
|
|
79
|
+
# set to None if name (nullable) is None
|
|
80
|
+
# and model_fields_set contains the field
|
|
81
|
+
if self.name is None and "name" in self.model_fields_set:
|
|
82
|
+
_dict['name'] = None
|
|
83
|
+
|
|
84
|
+
# set to None if title (nullable) is None
|
|
85
|
+
# and model_fields_set contains the field
|
|
86
|
+
if self.title is None and "title" in self.model_fields_set:
|
|
87
|
+
_dict['title'] = None
|
|
88
|
+
|
|
89
|
+
return _dict
|
|
90
|
+
|
|
91
|
+
@classmethod
|
|
92
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
93
|
+
"""Create an instance of EarningsCallsExtractions200ResponseGuidanceInnerSourcesInnerSpeaker from a dict"""
|
|
94
|
+
if obj is None:
|
|
95
|
+
return None
|
|
96
|
+
|
|
97
|
+
if not isinstance(obj, dict):
|
|
98
|
+
return cls.model_validate(obj)
|
|
99
|
+
|
|
100
|
+
_obj = cls.model_validate({
|
|
101
|
+
"label": obj.get("label"),
|
|
102
|
+
"name": obj.get("name"),
|
|
103
|
+
"title": obj.get("title")
|
|
104
|
+
})
|
|
105
|
+
return _obj
|
|
106
|
+
|
|
107
|
+
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Invinite API
|
|
5
|
+
|
|
6
|
+
Invinite financial data API. Each endpoint has a base credit cost: `x-credits` is the base cost; responses add 1 credit per started 1,000 rows beyond the first 1,000; `X-Credits-Charged` reports the final debit and `X-Credits-Included-Remaining` what is left of the plan's included credits. `GET /v1/account/usage` returns your account's usage by day, endpoint family and key (it costs no credits). SEC filing search has a 100-credit base cost. ## Webhooks Accounts on LITE and above subscribe with `POST /v1/earnings-calls/webhooks` to the `earnings_call.*` lifecycle events (filtered by CIK); see `x-webhooks` for each `data` object. What a subscription may hold depends on the plan (a create / update beyond it is refused with the plan's limit; `ping` needs no subscription — the test route and the disabled notice send it to any subscription): | Plan | Webhooks | Events | CIKs per webhook | Keywords per webhook | |---|---|---|---|---| | FREE | 0 | — | — | — | | LITE | 5 | `.scheduled`, `.rescheduled`, `.started`, `.ended`, `.transcript_ready`, `.assets_ready` | ≤ 10 | — | | STANDARD | 15 | LITE + `.transcript_provisional`, `.transcript_corrected`, `.documents_updated` | ≤ 25 | — | | PRO / ENTERPRISE | 50 | STANDARD + `.guidance_flash`, `.keyword_hit` | ≤ 100 | ≤ 20 (on ≤ 10 webhooks) | Every delivery is a `POST` with `Content-Type: application/json`, `X-Invinite-Event`, `X-Invinite-Delivery` and `X-Invinite-Signature: t=<unix seconds>,v1=<hex>` where `v1` = HMAC-SHA256(secret, `<t>.<raw body>`); during a secret rotation the header carries one `v1` per valid secret. Reject a signature older than 5 minutes. Any 2xx within 10 s acknowledges; redirects are not followed. A failed delivery is retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h, 24 h (8 attempts in all, the same delivery id each time). A subscription is disabled after 8 consecutive dead-lettered deliveries (a final `ping` with `notice: subscription_disabled` is sent). Deliveries are at-least-once and unordered: dedupe on the delivery id, order by `created_at`. ## Licensing | Tier | display | redistribute | rag | train | audio | resell | | --- | --- | --- | --- | --- | --- | --- | | FREE | ✓ | – | – | – | – | – | | LITE | ✓ | – | – | – | – | – | | STANDARD | ✓ | – | ✓ | – | – | – | | PRO | ✓ | ✓ | ✓ | – | ✓ | – | Invinite data may be shown and, from PRO, redistributed inside the licensee's own product with attribution (\"Source: Invinite\" on screen or in the API response that carries it). It may never be resold, relicensed, white-labelled or offered as a data feed as the licensee's own data, at any tier, under any contract. Policy version: 2026-10-draft. Draft — pending counsel sign-off. Audio files are forensically watermarked per customer. Audio is served through signed URLs, is subject to per-company takedown and may not be re-hosted; every delivered file carries a per-account forensic watermark: a copy found elsewhere is traced to the account that received it. SEC data: Figures and filings originate from SEC EDGAR; the standardisation, mapping and derived metrics are Invinite's. Every `/v1/*` data operation carries `x-license`, the minimum use right its data ships with; `GET /status/licensing` serves the same matrix per route, rendered at [data.invinite.com/docs/licensing](https://data.invinite.com/docs/licensing). `/v1/account/usage` serves no licensed data and carries none. ## Status [`/status`](/status) reports whether each product family works (a status and its uptime over 7, 30 and 90 days); [`/status/licensing`](/status/licensing) serves the licensing matrix per route. The status routes need no API key and are cached for 5 minutes. The public status page is [status.data.invinite.com](https://status.data.invinite.com): a snapshot of `/status` every 15 minutes plus an external reachability probe of the API. Uptime is the share of requests answered without a server error, measured by the API per product family; a window with too little traffic to judge shows no figure. Status reflects the last 24 hours. Product families: Company, Financials, SEC Filings, Insider Trades, Institutional Ownership, IPOs, Market, Metadata, Earnings Calls, WebSocket, Account.
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr, field_validator
|
|
21
|
+
from typing import Any, ClassVar, Dict, List, Optional, Union
|
|
22
|
+
from invinite_data_api.models.earnings_calls_extractions200_response_guidance_inner_sources_inner_speaker import EarningsCallsExtractions200ResponseGuidanceInnerSourcesInnerSpeaker
|
|
23
|
+
from invinite_data_api.models.earnings_calls_extractions200_response_kpis_inner_filing_link import EarningsCallsExtractions200ResponseKpisInnerFilingLink
|
|
24
|
+
from typing import Optional, Set
|
|
25
|
+
from typing_extensions import Self
|
|
26
|
+
from pydantic_core import to_jsonable_python
|
|
27
|
+
|
|
28
|
+
class EarningsCallsExtractions200ResponseKpisInner(BaseModel):
|
|
29
|
+
"""
|
|
30
|
+
EarningsCallsExtractions200ResponseKpisInner
|
|
31
|
+
""" # noqa: E501
|
|
32
|
+
seq: StrictInt = Field(description="Order in the call / release")
|
|
33
|
+
metric: StrictStr = Field(description="Metric as stated")
|
|
34
|
+
metric_normalized: Optional[StrictStr] = Field(description="Normalized metric; null = outside the dictionary")
|
|
35
|
+
value: Optional[Union[StrictFloat, StrictInt]] = Field(description="Value, base units")
|
|
36
|
+
value_text: StrictStr = Field(description="As spoken ('$1.2 billion', '14%')")
|
|
37
|
+
unit: Optional[StrictStr] = Field(description="Unit")
|
|
38
|
+
period_label: Optional[StrictStr] = Field(description="Reported period")
|
|
39
|
+
source_sentence: StrictStr = Field(description="The verbatim source sentence")
|
|
40
|
+
start_ms: Optional[StrictInt] = Field(description="Where it was spoken (ms into the call)")
|
|
41
|
+
speaker: EarningsCallsExtractions200ResponseGuidanceInnerSourcesInnerSpeaker
|
|
42
|
+
origin: StrictStr = Field(description="transcript or press_release")
|
|
43
|
+
filing_link: Optional[EarningsCallsExtractions200ResponseKpisInnerFilingLink]
|
|
44
|
+
__properties: ClassVar[List[str]] = ["seq", "metric", "metric_normalized", "value", "value_text", "unit", "period_label", "source_sentence", "start_ms", "speaker", "origin", "filing_link"]
|
|
45
|
+
|
|
46
|
+
@field_validator('origin')
|
|
47
|
+
def origin_validate_enum(cls, value):
|
|
48
|
+
"""Validates the enum"""
|
|
49
|
+
if value not in set(['transcript', 'press_release']):
|
|
50
|
+
raise ValueError("must be one of enum values ('transcript', 'press_release')")
|
|
51
|
+
return value
|
|
52
|
+
|
|
53
|
+
model_config = ConfigDict(
|
|
54
|
+
validate_by_name=True,
|
|
55
|
+
validate_by_alias=True,
|
|
56
|
+
validate_assignment=True,
|
|
57
|
+
protected_namespaces=(),
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def to_str(self) -> str:
|
|
62
|
+
"""Returns the string representation of the model using alias"""
|
|
63
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
64
|
+
|
|
65
|
+
def to_json(self) -> str:
|
|
66
|
+
"""Returns the JSON representation of the model using alias"""
|
|
67
|
+
return json.dumps(to_jsonable_python(self.to_dict()))
|
|
68
|
+
|
|
69
|
+
@classmethod
|
|
70
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
71
|
+
"""Create an instance of EarningsCallsExtractions200ResponseKpisInner from a JSON string"""
|
|
72
|
+
return cls.from_dict(json.loads(json_str))
|
|
73
|
+
|
|
74
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
75
|
+
"""Return the dictionary representation of the model using alias.
|
|
76
|
+
|
|
77
|
+
This has the following differences from calling pydantic's
|
|
78
|
+
`self.model_dump(by_alias=True)`:
|
|
79
|
+
|
|
80
|
+
* `None` is only added to the output dict for nullable fields that
|
|
81
|
+
were set at model initialization. Other fields with value `None`
|
|
82
|
+
are ignored.
|
|
83
|
+
"""
|
|
84
|
+
excluded_fields: Set[str] = set([
|
|
85
|
+
])
|
|
86
|
+
|
|
87
|
+
_dict = self.model_dump(
|
|
88
|
+
by_alias=True,
|
|
89
|
+
exclude=excluded_fields,
|
|
90
|
+
exclude_none=True,
|
|
91
|
+
)
|
|
92
|
+
# override the default output from pydantic by calling `to_dict()` of speaker
|
|
93
|
+
if self.speaker:
|
|
94
|
+
_dict['speaker'] = self.speaker.to_dict()
|
|
95
|
+
# override the default output from pydantic by calling `to_dict()` of filing_link
|
|
96
|
+
if self.filing_link:
|
|
97
|
+
_dict['filing_link'] = self.filing_link.to_dict()
|
|
98
|
+
# set to None if metric_normalized (nullable) is None
|
|
99
|
+
# and model_fields_set contains the field
|
|
100
|
+
if self.metric_normalized is None and "metric_normalized" in self.model_fields_set:
|
|
101
|
+
_dict['metric_normalized'] = None
|
|
102
|
+
|
|
103
|
+
# set to None if value (nullable) is None
|
|
104
|
+
# and model_fields_set contains the field
|
|
105
|
+
if self.value is None and "value" in self.model_fields_set:
|
|
106
|
+
_dict['value'] = None
|
|
107
|
+
|
|
108
|
+
# set to None if unit (nullable) is None
|
|
109
|
+
# and model_fields_set contains the field
|
|
110
|
+
if self.unit is None and "unit" in self.model_fields_set:
|
|
111
|
+
_dict['unit'] = None
|
|
112
|
+
|
|
113
|
+
# set to None if period_label (nullable) is None
|
|
114
|
+
# and model_fields_set contains the field
|
|
115
|
+
if self.period_label is None and "period_label" in self.model_fields_set:
|
|
116
|
+
_dict['period_label'] = None
|
|
117
|
+
|
|
118
|
+
# set to None if start_ms (nullable) is None
|
|
119
|
+
# and model_fields_set contains the field
|
|
120
|
+
if self.start_ms is None and "start_ms" in self.model_fields_set:
|
|
121
|
+
_dict['start_ms'] = None
|
|
122
|
+
|
|
123
|
+
# set to None if filing_link (nullable) is None
|
|
124
|
+
# and model_fields_set contains the field
|
|
125
|
+
if self.filing_link is None and "filing_link" in self.model_fields_set:
|
|
126
|
+
_dict['filing_link'] = None
|
|
127
|
+
|
|
128
|
+
return _dict
|
|
129
|
+
|
|
130
|
+
@classmethod
|
|
131
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
132
|
+
"""Create an instance of EarningsCallsExtractions200ResponseKpisInner from a dict"""
|
|
133
|
+
if obj is None:
|
|
134
|
+
return None
|
|
135
|
+
|
|
136
|
+
if not isinstance(obj, dict):
|
|
137
|
+
return cls.model_validate(obj)
|
|
138
|
+
|
|
139
|
+
_obj = cls.model_validate({
|
|
140
|
+
"seq": obj.get("seq"),
|
|
141
|
+
"metric": obj.get("metric"),
|
|
142
|
+
"metric_normalized": obj.get("metric_normalized"),
|
|
143
|
+
"value": obj.get("value"),
|
|
144
|
+
"value_text": obj.get("value_text"),
|
|
145
|
+
"unit": obj.get("unit"),
|
|
146
|
+
"period_label": obj.get("period_label"),
|
|
147
|
+
"source_sentence": obj.get("source_sentence"),
|
|
148
|
+
"start_ms": obj.get("start_ms"),
|
|
149
|
+
"speaker": EarningsCallsExtractions200ResponseGuidanceInnerSourcesInnerSpeaker.from_dict(obj["speaker"]) if obj.get("speaker") is not None else None,
|
|
150
|
+
"origin": obj.get("origin"),
|
|
151
|
+
"filing_link": EarningsCallsExtractions200ResponseKpisInnerFilingLink.from_dict(obj["filing_link"]) if obj.get("filing_link") is not None else None
|
|
152
|
+
})
|
|
153
|
+
return _obj
|
|
154
|
+
|
|
155
|
+
|