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.
Files changed (257) hide show
  1. invinite_data_api/__init__.py +534 -0
  2. invinite_data_api/api/__init__.py +25 -0
  3. invinite_data_api/api/account_api.py +316 -0
  4. invinite_data_api/api/as_reported_balance_sheet_api.py +1086 -0
  5. invinite_data_api/api/as_reported_cash_flow_statement_api.py +1086 -0
  6. invinite_data_api/api/as_reported_income_statement_api.py +1086 -0
  7. invinite_data_api/api/as_reported_snapshot_api.py +1035 -0
  8. invinite_data_api/api/company_api.py +1907 -0
  9. invinite_data_api/api/earnings_calls_api.py +11855 -0
  10. invinite_data_api/api/financial_metrics_api.py +1101 -0
  11. invinite_data_api/api/health_api.py +280 -0
  12. invinite_data_api/api/insider_trades_api.py +434 -0
  13. invinite_data_api/api/institutional_ownership_api.py +1480 -0
  14. invinite_data_api/api/ipos_api.py +397 -0
  15. invinite_data_api/api/market_api.py +344 -0
  16. invinite_data_api/api/metadata_api.py +540 -0
  17. invinite_data_api/api/sec_filings_api.py +1325 -0
  18. invinite_data_api/api/segmented_financials_api.py +759 -0
  19. invinite_data_api/api/standardized_balance_sheet_api.py +1086 -0
  20. invinite_data_api/api/standardized_cash_flow_statement_api.py +1086 -0
  21. invinite_data_api/api/standardized_income_statement_api.py +1086 -0
  22. invinite_data_api/api/standardized_snapshot_api.py +1035 -0
  23. invinite_data_api/api/status_api.py +535 -0
  24. invinite_data_api/api_client.py +804 -0
  25. invinite_data_api/api_response.py +21 -0
  26. invinite_data_api/configuration.py +605 -0
  27. invinite_data_api/exceptions.py +218 -0
  28. invinite_data_api/models/__init__.py +239 -0
  29. invinite_data_api/models/account_usage200_response.py +133 -0
  30. invinite_data_api/models/account_usage200_response_by_family_inner.py +94 -0
  31. invinite_data_api/models/account_usage200_response_by_key_inner.py +108 -0
  32. invinite_data_api/models/account_usage200_response_daily_inner.py +99 -0
  33. invinite_data_api/models/account_usage200_response_daily_inner_errors.py +96 -0
  34. invinite_data_api/models/account_usage200_response_period.py +109 -0
  35. invinite_data_api/models/as_reported_income_statement200_response.py +96 -0
  36. invinite_data_api/models/as_reported_income_statement200_response_companies_inner.py +102 -0
  37. invinite_data_api/models/as_reported_income_statement200_response_companies_inner_periods_inner.py +100 -0
  38. invinite_data_api/models/as_reported_income_statement_detailed200_response.py +96 -0
  39. invinite_data_api/models/as_reported_income_statement_detailed200_response_companies_inner.py +102 -0
  40. invinite_data_api/models/as_reported_income_statement_detailed200_response_companies_inner_periods_inner.py +113 -0
  41. invinite_data_api/models/as_reported_income_statement_detailed200_response_companies_inner_periods_inner_facts_value.py +120 -0
  42. invinite_data_api/models/as_reported_income_statement_presentation200_response.py +96 -0
  43. invinite_data_api/models/as_reported_income_statement_presentation200_response_companies_inner.py +102 -0
  44. invinite_data_api/models/as_reported_income_statement_presentation200_response_companies_inner_periods_inner.py +108 -0
  45. invinite_data_api/models/as_reported_snapshot_detailed200_response.py +97 -0
  46. invinite_data_api/models/as_reported_snapshot_detailed200_response_companies_inner.py +117 -0
  47. invinite_data_api/models/as_reported_snapshot_detailed200_response_companies_inner_statements.py +117 -0
  48. invinite_data_api/models/as_reported_snapshot_detailed200_response_companies_inner_statements_income_statement.py +101 -0
  49. invinite_data_api/models/as_reported_snapshot_presentation200_response.py +97 -0
  50. invinite_data_api/models/as_reported_snapshot_presentation200_response_companies_inner.py +117 -0
  51. invinite_data_api/models/as_reported_snapshot_presentation200_response_companies_inner_statements.py +117 -0
  52. invinite_data_api/models/as_reported_snapshot_presentation200_response_companies_inner_statements_income_statement.py +96 -0
  53. invinite_data_api/models/bad_request_error.py +90 -0
  54. invinite_data_api/models/company_available_companies200_response.py +98 -0
  55. invinite_data_api/models/company_available_companies200_response_companies_inner.py +92 -0
  56. invinite_data_api/models/company_available_companies401_response.py +90 -0
  57. invinite_data_api/models/company_details200_response.py +96 -0
  58. invinite_data_api/models/company_details200_response_companies_inner.py +279 -0
  59. invinite_data_api/models/company_dividends200_response.py +96 -0
  60. invinite_data_api/models/company_dividends200_response_companies_inner.py +102 -0
  61. invinite_data_api/models/company_dividends200_response_companies_inner_dividends_inner.py +101 -0
  62. invinite_data_api/models/company_fiscal_periods200_response.py +96 -0
  63. invinite_data_api/models/company_fiscal_periods200_response_companies_inner.py +102 -0
  64. invinite_data_api/models/company_fiscal_periods200_response_companies_inner_periods_inner.py +97 -0
  65. invinite_data_api/models/company_search200_response.py +100 -0
  66. invinite_data_api/models/company_search200_response_companies_inner.py +99 -0
  67. invinite_data_api/models/company_splits200_response.py +96 -0
  68. invinite_data_api/models/company_splits200_response_companies_inner.py +102 -0
  69. invinite_data_api/models/company_splits200_response_companies_inner_splits_inner.py +95 -0
  70. invinite_data_api/models/earnings_calls_analysts200_response.py +102 -0
  71. invinite_data_api/models/earnings_calls_analysts200_response_analysts_inner.py +116 -0
  72. invinite_data_api/models/earnings_calls_audio200_response.py +135 -0
  73. invinite_data_api/models/earnings_calls_audio202_response.py +97 -0
  74. invinite_data_api/models/earnings_calls_calendar200_response.py +103 -0
  75. invinite_data_api/models/earnings_calls_calendar200_response_events_inner.py +228 -0
  76. invinite_data_api/models/earnings_calls_company_document200_response.py +98 -0
  77. invinite_data_api/models/earnings_calls_company_documents200_response.py +104 -0
  78. invinite_data_api/models/earnings_calls_company_documents200_response_company.py +92 -0
  79. invinite_data_api/models/earnings_calls_company_documents200_response_documents_inner.py +293 -0
  80. invinite_data_api/models/earnings_calls_diff200_response.py +190 -0
  81. invinite_data_api/models/earnings_calls_diff200_response_hedging.py +100 -0
  82. invinite_data_api/models/earnings_calls_diff200_response_new_topics_inner.py +97 -0
  83. invinite_data_api/models/earnings_calls_diff200_response_prior_event.py +92 -0
  84. invinite_data_api/models/earnings_calls_diff200_response_slide_diff.py +98 -0
  85. invinite_data_api/models/earnings_calls_document_search200_response.py +98 -0
  86. invinite_data_api/models/earnings_calls_document_search200_response_hits_inner.py +177 -0
  87. invinite_data_api/models/earnings_calls_documents200_response.py +104 -0
  88. invinite_data_api/models/earnings_calls_documents200_response_documents_inner.py +206 -0
  89. invinite_data_api/models/earnings_calls_events200_response.py +104 -0
  90. invinite_data_api/models/earnings_calls_events200_response_events_inner.py +238 -0
  91. invinite_data_api/models/earnings_calls_events200_response_events_inner_observations_inner.py +119 -0
  92. invinite_data_api/models/earnings_calls_extractions200_response.py +123 -0
  93. invinite_data_api/models/earnings_calls_extractions200_response_guidance_inner.py +187 -0
  94. invinite_data_api/models/earnings_calls_extractions200_response_guidance_inner_sources_inner.py +110 -0
  95. invinite_data_api/models/earnings_calls_extractions200_response_guidance_inner_sources_inner_speaker.py +107 -0
  96. invinite_data_api/models/earnings_calls_extractions200_response_kpis_inner.py +155 -0
  97. invinite_data_api/models/earnings_calls_extractions200_response_kpis_inner_filing_link.py +166 -0
  98. invinite_data_api/models/earnings_calls_extractions200_response_kpis_inner_filing_link_fact_period.py +110 -0
  99. invinite_data_api/models/earnings_calls_guidance_history200_response.py +102 -0
  100. invinite_data_api/models/earnings_calls_guidance_history200_response_series_inner.py +183 -0
  101. invinite_data_api/models/earnings_calls_guidance_history200_response_series_inner_change_vs_prior.py +107 -0
  102. invinite_data_api/models/earnings_calls_live200_response.py +99 -0
  103. invinite_data_api/models/earnings_calls_live200_response_events_inner.py +236 -0
  104. invinite_data_api/models/earnings_calls_live_stream200_response.py +141 -0
  105. invinite_data_api/models/earnings_calls_live_stream200_response_event.py +96 -0
  106. invinite_data_api/models/earnings_calls_metrics200_response.py +158 -0
  107. invinite_data_api/models/earnings_calls_participants200_response.py +109 -0
  108. invinite_data_api/models/earnings_calls_participants200_response_participants_inner.py +148 -0
  109. invinite_data_api/models/earnings_calls_participants200_response_participants_inner_evidence_inner.py +90 -0
  110. invinite_data_api/models/earnings_calls_participants200_response_participation_events_inner.py +105 -0
  111. invinite_data_api/models/earnings_calls_person200_response.py +133 -0
  112. invinite_data_api/models/earnings_calls_person200_response_appearances_inner.py +134 -0
  113. invinite_data_api/models/earnings_calls_press_release200_response.py +146 -0
  114. invinite_data_api/models/earnings_calls_press_release200_response_participants_inner.py +102 -0
  115. invinite_data_api/models/earnings_calls_price_attribution200_response.py +190 -0
  116. invinite_data_api/models/earnings_calls_price_attribution200_response_buckets_inner.py +105 -0
  117. invinite_data_api/models/earnings_calls_price_attribution200_response_buckets_inner_utterance_refs_inner.py +92 -0
  118. invinite_data_api/models/earnings_calls_price_attribution200_response_top_minutes_inner.py +101 -0
  119. invinite_data_api/models/earnings_calls_prosody200_response.py +111 -0
  120. invinite_data_api/models/earnings_calls_prosody200_response_speakers_inner.py +177 -0
  121. invinite_data_api/models/earnings_calls_prosody200_response_speakers_inner_speaker.py +109 -0
  122. invinite_data_api/models/earnings_calls_qa200_response.py +101 -0
  123. invinite_data_api/models/earnings_calls_qa200_response_pairs_inner.py +149 -0
  124. invinite_data_api/models/earnings_calls_qa200_response_pairs_inner_analyst.py +110 -0
  125. invinite_data_api/models/earnings_calls_qa200_response_pairs_inner_answers_inner.py +110 -0
  126. invinite_data_api/models/earnings_calls_qa200_response_pairs_inner_scores.py +119 -0
  127. invinite_data_api/models/earnings_calls_qa200_response_pairs_inner_scores_evidence.py +97 -0
  128. invinite_data_api/models/earnings_calls_search200_response.py +98 -0
  129. invinite_data_api/models/earnings_calls_search200_response_hits_inner.py +161 -0
  130. invinite_data_api/models/earnings_calls_search200_response_hits_inner_slide.py +95 -0
  131. invinite_data_api/models/earnings_calls_slides200_response.py +113 -0
  132. invinite_data_api/models/earnings_calls_slides200_response_deck.py +124 -0
  133. invinite_data_api/models/earnings_calls_slides200_response_slides_inner.py +104 -0
  134. invinite_data_api/models/earnings_calls_transcript200_response.py +140 -0
  135. invinite_data_api/models/earnings_calls_transcript404_response.py +98 -0
  136. invinite_data_api/models/earnings_calls_transcript_diff200_response.py +111 -0
  137. invinite_data_api/models/earnings_calls_transcript_diff200_response_changes_inner.py +104 -0
  138. invinite_data_api/models/earnings_calls_transcript_diff200_response_stats.py +90 -0
  139. invinite_data_api/models/earnings_calls_transcript_versions200_response.py +106 -0
  140. invinite_data_api/models/earnings_calls_transcript_versions200_response_versions_inner.py +116 -0
  141. invinite_data_api/models/earnings_calls_webhooks_create201_response.py +126 -0
  142. invinite_data_api/models/earnings_calls_webhooks_create_request.py +97 -0
  143. invinite_data_api/models/earnings_calls_webhooks_create_request_filters.py +91 -0
  144. invinite_data_api/models/earnings_calls_webhooks_deliveries200_response.py +97 -0
  145. invinite_data_api/models/earnings_calls_webhooks_deliveries200_response_data_inner.py +133 -0
  146. invinite_data_api/models/earnings_calls_webhooks_list200_response.py +96 -0
  147. invinite_data_api/models/earnings_calls_webhooks_list200_response_data_inner.py +124 -0
  148. invinite_data_api/models/earnings_calls_webhooks_list200_response_data_inner_filters.py +90 -0
  149. invinite_data_api/models/earnings_calls_webhooks_rotate_secret200_response.py +91 -0
  150. invinite_data_api/models/earnings_calls_webhooks_test202_response.py +98 -0
  151. invinite_data_api/models/earnings_calls_webhooks_update_request.py +95 -0
  152. invinite_data_api/models/financial_metrics_ratios200_response.py +97 -0
  153. invinite_data_api/models/financial_metrics_ratios200_response_companies_inner.py +103 -0
  154. invinite_data_api/models/financial_metrics_ratios200_response_companies_inner_periods_inner.py +109 -0
  155. invinite_data_api/models/forbidden_error.py +90 -0
  156. invinite_data_api/models/health_get200_response.py +90 -0
  157. invinite_data_api/models/insider_trades_list200_response.py +102 -0
  158. invinite_data_api/models/insider_trades_list200_response_transactions_inner.py +146 -0
  159. invinite_data_api/models/institutional_ownership_holdings_by_company200_response.py +102 -0
  160. invinite_data_api/models/institutional_ownership_holdings_by_investor200_response.py +100 -0
  161. invinite_data_api/models/institutional_ownership_holdings_by_investor200_response_holdings_inner.py +171 -0
  162. invinite_data_api/models/institutional_ownership_institutions200_response.py +98 -0
  163. invinite_data_api/models/institutional_ownership_institutions200_response_institutions_inner.py +132 -0
  164. invinite_data_api/models/institutional_ownership_transactions200_response.py +98 -0
  165. invinite_data_api/models/institutional_ownership_transactions200_response_transactions_inner.py +186 -0
  166. invinite_data_api/models/internal_server_error.py +90 -0
  167. invinite_data_api/models/ipos_list200_response.py +98 -0
  168. invinite_data_api/models/ipos_list200_response_ipos_inner.py +130 -0
  169. invinite_data_api/models/market_holidays200_response.py +98 -0
  170. invinite_data_api/models/market_holidays200_response_holidays_inner.py +105 -0
  171. invinite_data_api/models/metadata_available_metrics200_response.py +96 -0
  172. invinite_data_api/models/metadata_available_metrics200_response_metrics_inner.py +90 -0
  173. invinite_data_api/models/metadata_available_section_ids200_response.py +96 -0
  174. invinite_data_api/models/metadata_available_section_ids200_response_form_types_inner.py +105 -0
  175. invinite_data_api/models/metadata_available_section_ids200_response_form_types_inner_sections_inner.py +94 -0
  176. invinite_data_api/models/not_found_error.py +90 -0
  177. invinite_data_api/models/presentation_fact.py +112 -0
  178. invinite_data_api/models/sec_filings_available_form_types200_response.py +88 -0
  179. invinite_data_api/models/sec_filings_list200_response.py +96 -0
  180. invinite_data_api/models/sec_filings_list200_response_companies_inner.py +102 -0
  181. invinite_data_api/models/sec_filings_list200_response_companies_inner_filings_inner.py +127 -0
  182. invinite_data_api/models/sec_filings_search200_response.py +98 -0
  183. invinite_data_api/models/sec_filings_search200_response_sources_inner.py +99 -0
  184. invinite_data_api/models/sec_filings_sections200_response.py +96 -0
  185. invinite_data_api/models/sec_filings_sections200_response_companies_inner.py +100 -0
  186. invinite_data_api/models/sec_filings_sections200_response_companies_inner_sections_inner.py +132 -0
  187. invinite_data_api/models/segmented_financials200_response.py +96 -0
  188. invinite_data_api/models/segmented_financials200_response_companies_inner.py +102 -0
  189. invinite_data_api/models/segmented_financials200_response_companies_inner_periods_inner.py +123 -0
  190. invinite_data_api/models/segmented_financials200_response_companies_inner_periods_inner_facts_value_inner.py +104 -0
  191. invinite_data_api/models/segmented_financials_detailed200_response.py +96 -0
  192. invinite_data_api/models/segmented_financials_detailed200_response_companies_inner.py +102 -0
  193. invinite_data_api/models/segmented_financials_detailed200_response_companies_inner_periods_inner.py +123 -0
  194. invinite_data_api/models/segmented_financials_detailed200_response_companies_inner_periods_inner_facts_value_inner.py +141 -0
  195. invinite_data_api/models/service_unavailable_error.py +90 -0
  196. invinite_data_api/models/standardized_income_statement200_response.py +97 -0
  197. invinite_data_api/models/standardized_income_statement200_response_companies_inner.py +103 -0
  198. invinite_data_api/models/standardized_income_statement200_response_companies_inner_periods_inner.py +109 -0
  199. invinite_data_api/models/standardized_income_statement_detailed200_response.py +97 -0
  200. invinite_data_api/models/standardized_income_statement_detailed200_response_companies_inner.py +103 -0
  201. invinite_data_api/models/standardized_income_statement_detailed200_response_companies_inner_periods_inner.py +122 -0
  202. invinite_data_api/models/standardized_income_statement_detailed200_response_companies_inner_periods_inner_facts_value.py +120 -0
  203. invinite_data_api/models/standardized_income_statement_detailed200_response_companies_inner_periods_inner_facts_value_formula.py +98 -0
  204. invinite_data_api/models/standardized_income_statement_detailed200_response_companies_inner_periods_inner_facts_value_formula_members_inner.py +137 -0
  205. invinite_data_api/models/standardized_income_statement_detailed200_response_companies_inner_periods_inner_facts_value_formula_members_inner_one_of.py +134 -0
  206. invinite_data_api/models/standardized_income_statement_detailed200_response_companies_inner_periods_inner_facts_value_formula_members_inner_one_of1.py +120 -0
  207. invinite_data_api/models/standardized_income_statement_presentation200_response.py +97 -0
  208. invinite_data_api/models/standardized_income_statement_presentation200_response_companies_inner.py +103 -0
  209. invinite_data_api/models/standardized_income_statement_presentation200_response_companies_inner_periods_inner.py +117 -0
  210. invinite_data_api/models/standardized_presentation_fact.py +101 -0
  211. invinite_data_api/models/standardized_snapshot200_response.py +97 -0
  212. invinite_data_api/models/standardized_snapshot200_response_companies_inner.py +117 -0
  213. invinite_data_api/models/standardized_snapshot200_response_companies_inner_statements.py +117 -0
  214. invinite_data_api/models/standardized_snapshot200_response_companies_inner_statements_income_statement.py +88 -0
  215. invinite_data_api/models/standardized_snapshot_detailed200_response.py +97 -0
  216. invinite_data_api/models/standardized_snapshot_detailed200_response_companies_inner.py +117 -0
  217. invinite_data_api/models/standardized_snapshot_detailed200_response_companies_inner_statements.py +117 -0
  218. invinite_data_api/models/standardized_snapshot_detailed200_response_companies_inner_statements_income_statement.py +101 -0
  219. invinite_data_api/models/standardized_snapshot_presentation200_response.py +97 -0
  220. invinite_data_api/models/standardized_snapshot_presentation200_response_companies_inner.py +117 -0
  221. invinite_data_api/models/standardized_snapshot_presentation200_response_companies_inner_statements.py +117 -0
  222. invinite_data_api/models/standardized_snapshot_presentation200_response_companies_inner_statements_income_statement.py +96 -0
  223. invinite_data_api/models/status_get200_response.py +110 -0
  224. invinite_data_api/models/status_get200_response_services_inner.py +125 -0
  225. invinite_data_api/models/status_get200_response_universe.py +99 -0
  226. invinite_data_api/models/status_get200_response_universe_earnings_calls.py +90 -0
  227. invinite_data_api/models/status_licensing200_response.py +130 -0
  228. invinite_data_api/models/status_licensing200_response_families_inner.py +105 -0
  229. invinite_data_api/models/status_licensing200_response_families_inner_routes_inner.py +106 -0
  230. invinite_data_api/models/status_licensing200_response_notes.py +98 -0
  231. invinite_data_api/models/status_licensing200_response_tiers.py +107 -0
  232. invinite_data_api/models/status_licensing200_response_tiers_free.py +98 -0
  233. invinite_data_api/models/unauthorized_error.py +90 -0
  234. invinite_data_api/models/web_socket_call_lifecycle_event.py +116 -0
  235. invinite_data_api/models/web_socket_error_event.py +109 -0
  236. invinite_data_api/models/web_socket_filing.py +127 -0
  237. invinite_data_api/models/web_socket_gap_event.py +104 -0
  238. invinite_data_api/models/web_socket_guidance_flash_event.py +156 -0
  239. invinite_data_api/models/web_socket_keyword_hit_event.py +177 -0
  240. invinite_data_api/models/web_socket_new_filing_event.py +101 -0
  241. invinite_data_api/models/web_socket_ping_event.py +95 -0
  242. invinite_data_api/models/web_socket_price_tick_event.py +170 -0
  243. invinite_data_api/models/web_socket_speaker_names_event.py +112 -0
  244. invinite_data_api/models/web_socket_speaker_names_event_assignments_inner.py +120 -0
  245. invinite_data_api/models/web_socket_subscribe_earnings_call.py +183 -0
  246. invinite_data_api/models/web_socket_subscribed_event.py +142 -0
  247. invinite_data_api/models/web_socket_transcript_segment_event.py +118 -0
  248. invinite_data_api/models/web_socket_unsubscribe.py +98 -0
  249. invinite_data_api/models/web_socket_unsubscribed_event.py +107 -0
  250. invinite_data_api/models/web_socket_warning_event.py +109 -0
  251. invinite_data_api/models/webhook_envelope.py +103 -0
  252. invinite_data_api/py.typed +0 -0
  253. invinite_data_api/rest.py +263 -0
  254. invinite_data_api-0.1.0.dist-info/METADATA +133 -0
  255. invinite_data_api-0.1.0.dist-info/RECORD +257 -0
  256. invinite_data_api-0.1.0.dist-info/WHEEL +5 -0
  257. 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
+
@@ -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
+