moolabs 0.3.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 (1417) hide show
  1. moolabs/__init__.py +1487 -0
  2. moolabs/_dx_attribution_context.py +213 -0
  3. moolabs/_dx_attribution_db_time.py +2126 -0
  4. moolabs/_dx_attribution_db_time_transport.py +173 -0
  5. moolabs/_dx_attribution_delta.py +142 -0
  6. moolabs/_dx_attribution_deposits.py +552 -0
  7. moolabs/_dx_attribution_instrument.py +416 -0
  8. moolabs/_dx_attribution_middleware.py +541 -0
  9. moolabs/_dx_attribution_propagate.py +509 -0
  10. moolabs/_dx_attribution_signal_transport.py +232 -0
  11. moolabs/_dx_attribution_signals.py +927 -0
  12. moolabs/_dx_buffer.py +429 -0
  13. moolabs/_dx_client.py +726 -0
  14. moolabs/_dx_exceptions.py +84 -0
  15. moolabs/_dx_namespaces.py +1780 -0
  16. moolabs/_dx_pagination.py +131 -0
  17. moolabs/_dx_routing.py +276 -0
  18. moolabs/_dx_urls.py +629 -0
  19. moolabs/_dx_webhooks.py +82 -0
  20. moolabs/api/__init__.py +121 -0
  21. moolabs/api/account_team_api.py +1444 -0
  22. moolabs/api/accounts_api.py +4950 -0
  23. moolabs/api/acute_analytics_api.py +5750 -0
  24. moolabs/api/acute_integrations_api.py +3449 -0
  25. moolabs/api/admin_api.py +3347 -0
  26. moolabs/api/alerts_api.py +1626 -0
  27. moolabs/api/allocation_rules_api.py +1720 -0
  28. moolabs/api/analytics_api.py +3204 -0
  29. moolabs/api/app_custom_invoicing_api.py +952 -0
  30. moolabs/api/app_stripe_api.py +958 -0
  31. moolabs/api/apps_api.py +3064 -0
  32. moolabs/api/arc_admin_api.py +8773 -0
  33. moolabs/api/arc_communications_api.py +1991 -0
  34. moolabs/api/arc_portal_api.py +1737 -0
  35. moolabs/api/arc_webhooks_api.py +2087 -0
  36. moolabs/api/attribution_allocation_api.py +2345 -0
  37. moolabs/api/attribution_api.py +1717 -0
  38. moolabs/api/attribution_customer_keys_api.py +600 -0
  39. moolabs/api/attribution_db_time_api.py +918 -0
  40. moolabs/api/attribution_opencost_api.py +1372 -0
  41. moolabs/api/attribution_readouts_api.py +393 -0
  42. moolabs/api/attribution_signals_api.py +315 -0
  43. moolabs/api/auto_topup_api.py +3095 -0
  44. moolabs/api/batch_api.py +6714 -0
  45. moolabs/api/billing_api.py +300 -0
  46. moolabs/api/bom_api.py +2769 -0
  47. moolabs/api/budgets_api.py +2112 -0
  48. moolabs/api/buyer_quotes_api.py +2007 -0
  49. moolabs/api/cases_api.py +5075 -0
  50. moolabs/api/cash_credits_api.py +1548 -0
  51. moolabs/api/chat_api.py +3101 -0
  52. moolabs/api/clause_packs_api.py +2785 -0
  53. moolabs/api/cloud_billing_api.py +1747 -0
  54. moolabs/api/contract_editor_api.py +3384 -0
  55. moolabs/api/cost_events_api.py +1732 -0
  56. moolabs/api/credit_memos_api.py +3478 -0
  57. moolabs/api/customers_api.py +3931 -0
  58. moolabs/api/dashboard_api.py +771 -0
  59. moolabs/api/debug_api.py +300 -0
  60. moolabs/api/default_api.py +526 -0
  61. moolabs/api/disputes_api.py +3586 -0
  62. moolabs/api/dunning_templates_api.py +8737 -0
  63. moolabs/api/email_provider_api.py +526 -0
  64. moolabs/api/entitlements_api.py +9846 -0
  65. moolabs/api/escalations_api.py +2541 -0
  66. moolabs/api/events_api.py +1125 -0
  67. moolabs/api/fx_rates_api.py +1452 -0
  68. moolabs/api/governance_api.py +4402 -0
  69. moolabs/api/grants_api.py +1370 -0
  70. moolabs/api/handoffs_api.py +2138 -0
  71. moolabs/api/health_api.py +281 -0
  72. moolabs/api/homepage_api.py +305 -0
  73. moolabs/api/integrations_api.py +3374 -0
  74. moolabs/api/internal_api.py +7145 -0
  75. moolabs/api/internal_credit_memos_api.py +914 -0
  76. moolabs/api/internal_grants_api.py +1000 -0
  77. moolabs/api/internal_period_settlements_api.py +657 -0
  78. moolabs/api/internal_plan_pricing_api.py +326 -0
  79. moolabs/api/internal_subscriptions_api.py +326 -0
  80. moolabs/api/ledger_api.py +1483 -0
  81. moolabs/api/lookup_information_api.py +587 -0
  82. moolabs/api/mapping_rules_api.py +1782 -0
  83. moolabs/api/mappings_api.py +632 -0
  84. moolabs/api/margin_simulation_api.py +595 -0
  85. moolabs/api/margins_api.py +2301 -0
  86. moolabs/api/meter_billing_api.py +7419 -0
  87. moolabs/api/meter_portal_api.py +1368 -0
  88. moolabs/api/meter_subscriptions_api.py +4358 -0
  89. moolabs/api/meters_api.py +3707 -0
  90. moolabs/api/monitoring_api.py +561 -0
  91. moolabs/api/moolabs_api.py +1182 -0
  92. moolabs/api/moometer_proxy_api.py +1357 -0
  93. moolabs/api/netsuite_sync_api.py +2180 -0
  94. moolabs/api/notes_api.py +1425 -0
  95. moolabs/api/notifications_api.py +4490 -0
  96. moolabs/api/ops_api.py +315 -0
  97. moolabs/api/outbox_api.py +653 -0
  98. moolabs/api/payments_api.py +2889 -0
  99. moolabs/api/performance_api.py +2471 -0
  100. moolabs/api/plan_pricing_api.py +3409 -0
  101. moolabs/api/plans_api.py +2197 -0
  102. moolabs/api/pools_api.py +2358 -0
  103. moolabs/api/portal_api.py +1103 -0
  104. moolabs/api/product_catalog_api.py +7644 -0
  105. moolabs/api/promises_api.py +2814 -0
  106. moolabs/api/quote_agents_api.py +2036 -0
  107. moolabs/api/quote_contract_webhooks_api.py +327 -0
  108. moolabs/api/quote_contracts_api.py +2551 -0
  109. moolabs/api/quote_sessions_api.py +881 -0
  110. moolabs/api/quotes_api.py +12880 -0
  111. moolabs/api/rate_cards_api.py +578 -0
  112. moolabs/api/rate_catalog_api.py +2120 -0
  113. moolabs/api/rate_schedules_api.py +1224 -0
  114. moolabs/api/rating_api.py +617 -0
  115. moolabs/api/reconstruction_api.py +1281 -0
  116. moolabs/api/remittances_api.py +1521 -0
  117. moolabs/api/reports_api.py +722 -0
  118. moolabs/api/rollover_api.py +313 -0
  119. moolabs/api/sdk_ingest_api.py +312 -0
  120. moolabs/api/snapshots_api.py +1218 -0
  121. moolabs/api/state_projection_api.py +961 -0
  122. moolabs/api/steering_api.py +1862 -0
  123. moolabs/api/subjects_api.py +1160 -0
  124. moolabs/api/subscription_overrides_api.py +579 -0
  125. moolabs/api/subscriptions_api.py +1200 -0
  126. moolabs/api/tasks_api.py +1509 -0
  127. moolabs/api/tenant_api.py +22395 -0
  128. moolabs/api/tenant_config_api.py +282 -0
  129. moolabs/api/topup_api.py +632 -0
  130. moolabs/api/unpriced_api.py +933 -0
  131. moolabs/api/usage_api.py +999 -0
  132. moolabs/api/variance_api.py +1327 -0
  133. moolabs/api/wallets_api.py +3787 -0
  134. moolabs/api/webhooks_api.py +281 -0
  135. moolabs/api/well_known_api.py +278 -0
  136. moolabs/api/word_addin_api.py +623 -0
  137. moolabs/api_client.py +797 -0
  138. moolabs/api_response.py +21 -0
  139. moolabs/configuration.py +620 -0
  140. moolabs/exceptions.py +199 -0
  141. moolabs/models/__init__.py +1286 -0
  142. moolabs/models/account_create.py +114 -0
  143. moolabs/models/account_filter_options_response.py +97 -0
  144. moolabs/models/account_invoice_list_response.py +95 -0
  145. moolabs/models/account_list_item_response.py +152 -0
  146. moolabs/models/account_list_item_response_subsidiaries_inner.py +152 -0
  147. moolabs/models/account_list_response.py +101 -0
  148. moolabs/models/account_overview_bucket_response.py +91 -0
  149. moolabs/models/account_overview_response.py +106 -0
  150. moolabs/models/account_response.py +132 -0
  151. moolabs/models/account_segment_row.py +91 -0
  152. moolabs/models/account_subsidiary_option.py +89 -0
  153. moolabs/models/account_summary.py +97 -0
  154. moolabs/models/account_team_member_in.py +97 -0
  155. moolabs/models/account_team_member_out.py +101 -0
  156. moolabs/models/account_team_member_patch.py +97 -0
  157. moolabs/models/account_team_role.py +39 -0
  158. moolabs/models/account_update.py +106 -0
  159. moolabs/models/action_kind.py +45 -0
  160. moolabs/models/acute_approve_request.py +87 -0
  161. moolabs/models/acute_demo_seed_lifecycle_request.py +103 -0
  162. moolabs/models/acute_http_validation_error.py +95 -0
  163. moolabs/models/acute_validation_error.py +99 -0
  164. moolabs/models/add_contract_participant_request.py +107 -0
  165. moolabs/models/addon.py +178 -0
  166. moolabs/models/addon1.py +115 -0
  167. moolabs/models/addon2.py +95 -0
  168. moolabs/models/addon_create.py +123 -0
  169. moolabs/models/addon_instance_type.py +37 -0
  170. moolabs/models/addon_order_by.py +40 -0
  171. moolabs/models/addon_paginated_response.py +101 -0
  172. moolabs/models/addon_replace_update.py +105 -0
  173. moolabs/models/addon_status.py +38 -0
  174. moolabs/models/address.py +110 -0
  175. moolabs/models/adjusted_total.py +152 -0
  176. moolabs/models/adjustment_amount.py +152 -0
  177. moolabs/models/aging_bucket_detail.py +93 -0
  178. moolabs/models/aging_report_response.py +106 -0
  179. moolabs/models/alb_bootstrap_response.py +89 -0
  180. moolabs/models/alb_connector_config.py +128 -0
  181. moolabs/models/alb_connector_health_response.py +112 -0
  182. moolabs/models/alb_connector_list_response.py +138 -0
  183. moolabs/models/alb_load_balancer_config.py +111 -0
  184. moolabs/models/alb_route_rule.py +107 -0
  185. moolabs/models/alb_source_config.py +123 -0
  186. moolabs/models/alb_source_health_response.py +93 -0
  187. moolabs/models/alb_status_patch_request.py +94 -0
  188. moolabs/models/alb_status_patch_response.py +94 -0
  189. moolabs/models/alb_target_group_config.py +103 -0
  190. moolabs/models/algorithm_breakdown_item.py +89 -0
  191. moolabs/models/algorithm_info.py +93 -0
  192. moolabs/models/alignment.py +87 -0
  193. moolabs/models/allocate_credits_request.py +95 -0
  194. moolabs/models/allocation_coverage_response.py +157 -0
  195. moolabs/models/allocation_fact_page_response.py +97 -0
  196. moolabs/models/allocation_fact_response.py +146 -0
  197. moolabs/models/allocation_key.py +91 -0
  198. moolabs/models/allocation_rule_create.py +114 -0
  199. moolabs/models/allocation_rule_response.py +113 -0
  200. moolabs/models/allocation_rule_update.py +111 -0
  201. moolabs/models/allocation_run_create_request.py +100 -0
  202. moolabs/models/allocation_run_create_response.py +142 -0
  203. moolabs/models/allocation_run_open_cost_snapshot_response.py +120 -0
  204. moolabs/models/allocation_run_readout_response.py +110 -0
  205. moolabs/models/allocation_run_response.py +133 -0
  206. moolabs/models/allocations_list_response.py +97 -0
  207. moolabs/models/amount.py +152 -0
  208. moolabs/models/amount1.py +152 -0
  209. moolabs/models/api_key_item.py +103 -0
  210. moolabs/models/app.py +164 -0
  211. moolabs/models/app_api_v1_auto_topup_router_trigger_response.py +108 -0
  212. moolabs/models/app_api_v1_fx_rates_router_fx_rate_response.py +104 -0
  213. moolabs/models/app_api_v1_integrations_netsuite_sync_router_trigger_response.py +89 -0
  214. moolabs/models/app_api_v1_internal_subscription_sync_schemas_subscription_sync_request.py +123 -0
  215. moolabs/models/app_api_v1_portal_router_create_portal_token_request.py +92 -0
  216. moolabs/models/app_api_v1_quotes_schemas_quote_settings_response.py +91 -0
  217. moolabs/models/app_api_v1_quotes_schemas_update_quote_settings_request.py +89 -0
  218. moolabs/models/app_api_v1_subscriptions_router_subscription_sync_request.py +125 -0
  219. moolabs/models/app_api_v1_tenant_access_router_create_portal_token_request.py +101 -0
  220. moolabs/models/app_api_v1_tenant_fx_rates_router_fx_rate_response.py +93 -0
  221. moolabs/models/app_api_v1_tenant_quote_settings_router_quote_settings_response.py +89 -0
  222. moolabs/models/app_api_v1_tenant_quote_settings_router_update_quote_settings_request.py +87 -0
  223. moolabs/models/app_capability.py +102 -0
  224. moolabs/models/app_capability_type.py +40 -0
  225. moolabs/models/app_paginated_response.py +101 -0
  226. moolabs/models/app_reference.py +95 -0
  227. moolabs/models/app_replace_update.py +164 -0
  228. moolabs/models/app_status.py +37 -0
  229. moolabs/models/app_type.py +38 -0
  230. moolabs/models/apply_credit_request.py +92 -0
  231. moolabs/models/approval_action_request.py +88 -0
  232. moolabs/models/approval_action_response.py +95 -0
  233. moolabs/models/approval_policy_response.py +91 -0
  234. moolabs/models/approve_request.py +88 -0
  235. moolabs/models/approve_response.py +91 -0
  236. moolabs/models/approver_in.py +95 -0
  237. moolabs/models/arc_demo_seed_lifecycle_request.py +103 -0
  238. moolabs/models/arc_dunning_permission_grant_request.py +96 -0
  239. moolabs/models/arc_dunning_permission_revoke_request.py +90 -0
  240. moolabs/models/arc_dunning_template_admin_grant_request.py +90 -0
  241. moolabs/models/arc_dunning_template_admin_grant_response.py +115 -0
  242. moolabs/models/arc_dunning_template_admin_revoke_request.py +88 -0
  243. moolabs/models/arc_dunning_template_admin_user_dto.py +107 -0
  244. moolabs/models/arc_dunning_template_admin_user_grant_dto.py +105 -0
  245. moolabs/models/arc_dunning_template_admin_users_response.py +110 -0
  246. moolabs/models/arc_http_validation_error.py +95 -0
  247. moolabs/models/arc_transaction_request.py +110 -0
  248. moolabs/models/arc_validation_error.py +99 -0
  249. moolabs/models/ask_customer_request.py +97 -0
  250. moolabs/models/ask_customer_response.py +91 -0
  251. moolabs/models/ask_moo_redline_request.py +98 -0
  252. moolabs/models/attribution_allocation_error_detail.py +94 -0
  253. moolabs/models/attribution_allocation_error_response.py +91 -0
  254. moolabs/models/attribution_completeness_response.py +97 -0
  255. moolabs/models/attribution_signal_conflict_detail.py +94 -0
  256. moolabs/models/attribution_signal_conflict_response.py +91 -0
  257. moolabs/models/attribution_signal_delta.py +98 -0
  258. moolabs/models/attribution_signal_request.py +123 -0
  259. moolabs/models/attribution_signal_response.py +96 -0
  260. moolabs/models/audit_request.py +91 -0
  261. moolabs/models/auto_topup_activity_item.py +104 -0
  262. moolabs/models/auto_topup_activity_response.py +97 -0
  263. moolabs/models/auto_topup_rule_response.py +114 -0
  264. moolabs/models/availability.py +43 -0
  265. moolabs/models/backfill_candidate.py +97 -0
  266. moolabs/models/backfill_malformed_disputes_request.py +87 -0
  267. moolabs/models/backfill_malformed_disputes_response.py +101 -0
  268. moolabs/models/balance_history_window.py +99 -0
  269. moolabs/models/basis.py +37 -0
  270. moolabs/models/batch_ingest_request.py +96 -0
  271. moolabs/models/batch_wallet_state_request.py +105 -0
  272. moolabs/models/batch_wallet_state_request_item.py +91 -0
  273. moolabs/models/batch_wallet_state_response.py +97 -0
  274. moolabs/models/batch_wallets_by_subjects_request.py +88 -0
  275. moolabs/models/billing_customer_profile.py +109 -0
  276. moolabs/models/billing_discount_percentage.py +100 -0
  277. moolabs/models/billing_discount_reason.py +164 -0
  278. moolabs/models/billing_discount_usage.py +107 -0
  279. moolabs/models/billing_discounts.py +97 -0
  280. moolabs/models/billing_import_request.py +105 -0
  281. moolabs/models/billing_import_response.py +104 -0
  282. moolabs/models/billing_invoice_customer_extended_details.py +116 -0
  283. moolabs/models/billing_party.py +110 -0
  284. moolabs/models/billing_party_replace_update.py +106 -0
  285. moolabs/models/billing_party_tax_identity.py +88 -0
  286. moolabs/models/billing_profile.py +140 -0
  287. moolabs/models/billing_profile_app_references.py +107 -0
  288. moolabs/models/billing_profile_apps.py +107 -0
  289. moolabs/models/billing_profile_apps_create.py +113 -0
  290. moolabs/models/billing_profile_apps_or_reference.py +148 -0
  291. moolabs/models/billing_profile_create.py +112 -0
  292. moolabs/models/billing_profile_customer_override.py +116 -0
  293. moolabs/models/billing_profile_customer_override_create.py +98 -0
  294. moolabs/models/billing_profile_customer_override_expand.py +37 -0
  295. moolabs/models/billing_profile_customer_override_order_by.py +40 -0
  296. moolabs/models/billing_profile_customer_override_with_details.py +113 -0
  297. moolabs/models/billing_profile_customer_override_with_details_paginated_response.py +101 -0
  298. moolabs/models/billing_profile_expand.py +36 -0
  299. moolabs/models/billing_profile_order_by.py +39 -0
  300. moolabs/models/billing_profile_paginated_response.py +101 -0
  301. moolabs/models/billing_profile_replace_update_with_workflow.py +106 -0
  302. moolabs/models/billing_tenant_settings_out.py +89 -0
  303. moolabs/models/billing_tenant_settings_update.py +88 -0
  304. moolabs/models/billing_workflow.py +109 -0
  305. moolabs/models/billing_workflow_collection_alignment.py +150 -0
  306. moolabs/models/billing_workflow_collection_alignment_anchored.py +100 -0
  307. moolabs/models/billing_workflow_collection_alignment_subscription.py +94 -0
  308. moolabs/models/billing_workflow_collection_settings.py +93 -0
  309. moolabs/models/billing_workflow_create.py +109 -0
  310. moolabs/models/billing_workflow_invoicing_settings.py +99 -0
  311. moolabs/models/billing_workflow_payment_settings.py +88 -0
  312. moolabs/models/billing_workflow_tax_settings.py +89 -0
  313. moolabs/models/bom_component_in.py +105 -0
  314. moolabs/models/bom_component_out.py +109 -0
  315. moolabs/models/bom_create_request.py +107 -0
  316. moolabs/models/bom_out.py +127 -0
  317. moolabs/models/bom_update_request.py +103 -0
  318. moolabs/models/bom_variance_out.py +115 -0
  319. moolabs/models/breakdown_response.py +124 -0
  320. moolabs/models/breakdown_row.py +121 -0
  321. moolabs/models/breakdown_row_kind.py +39 -0
  322. moolabs/models/budget_alert_response.py +107 -0
  323. moolabs/models/budget_amount.py +152 -0
  324. moolabs/models/budget_amount1.py +152 -0
  325. moolabs/models/budget_create.py +110 -0
  326. moolabs/models/budget_pace_status.py +38 -0
  327. moolabs/models/budget_response.py +113 -0
  328. moolabs/models/budget_status_item.py +105 -0
  329. moolabs/models/budget_update.py +107 -0
  330. moolabs/models/budget_with_utilization.py +119 -0
  331. moolabs/models/bulk_action_request.py +92 -0
  332. moolabs/models/bulk_replay_request.py +92 -0
  333. moolabs/models/buyer_accept_request.py +95 -0
  334. moolabs/models/buyer_otp_request_response.py +91 -0
  335. moolabs/models/buyer_otp_verify_request.py +95 -0
  336. moolabs/models/buyer_otp_verify_response.py +89 -0
  337. moolabs/models/buyer_quote_line_item.py +103 -0
  338. moolabs/models/buyer_quote_pricing.py +93 -0
  339. moolabs/models/buyer_quote_projection.py +133 -0
  340. moolabs/models/buyer_reject_request.py +88 -0
  341. moolabs/models/buyer_request_changes_request.py +94 -0
  342. moolabs/models/buyer_request_changes_response.py +93 -0
  343. moolabs/models/buyer_requested_changes.py +90 -0
  344. moolabs/models/cancel_subscription_request.py +91 -0
  345. moolabs/models/card_type.py +37 -0
  346. moolabs/models/case_create.py +112 -0
  347. moolabs/models/case_escalate_request.py +90 -0
  348. moolabs/models/case_invoice_create.py +127 -0
  349. moolabs/models/case_invoice_response.py +150 -0
  350. moolabs/models/case_list_item_response.py +171 -0
  351. moolabs/models/case_list_response.py +101 -0
  352. moolabs/models/case_pause_request.py +91 -0
  353. moolabs/models/case_response.py +169 -0
  354. moolabs/models/case_update.py +102 -0
  355. moolabs/models/case_write_off_request.py +90 -0
  356. moolabs/models/cash_app_config_update_request.py +96 -0
  357. moolabs/models/cei_response.py +102 -0
  358. moolabs/models/change_item.py +101 -0
  359. moolabs/models/channel_policy_schema.py +112 -0
  360. moolabs/models/channel_preference_create.py +99 -0
  361. moolabs/models/channel_preference_response.py +106 -0
  362. moolabs/models/channel_preference_update.py +95 -0
  363. moolabs/models/channel_preferences_response.py +95 -0
  364. moolabs/models/chat_feedback_in.py +91 -0
  365. moolabs/models/chat_message_in.py +89 -0
  366. moolabs/models/chat_request.py +101 -0
  367. moolabs/models/check_trigger_request.py +88 -0
  368. moolabs/models/checkout_session_custom_text_after_submit_params.py +109 -0
  369. moolabs/models/checkout_session_custom_text_after_submit_params_after_submit.py +88 -0
  370. moolabs/models/checkout_session_custom_text_after_submit_params_shipping_address.py +88 -0
  371. moolabs/models/checkout_session_custom_text_after_submit_params_submit.py +88 -0
  372. moolabs/models/checkout_session_custom_text_after_submit_params_terms_of_service_acceptance.py +88 -0
  373. moolabs/models/checkout_session_ui_mode.py +37 -0
  374. moolabs/models/clause_citations.py +91 -0
  375. moolabs/models/clause_family.py +129 -0
  376. moolabs/models/clause_finding.py +110 -0
  377. moolabs/models/clause_pack.py +118 -0
  378. moolabs/models/clause_position.py +91 -0
  379. moolabs/models/client_app_start_response.py +87 -0
  380. moolabs/models/cloud_cost_row_input.py +105 -0
  381. moolabs/models/cloud_provider.py +38 -0
  382. moolabs/models/cloud_provider_data_through.py +116 -0
  383. moolabs/models/cloud_provider_quality_axis.py +107 -0
  384. moolabs/models/cloud_temporal_coverage_summary.py +114 -0
  385. moolabs/models/collection_method.py +37 -0
  386. moolabs/models/commercial_basis.py +39 -0
  387. moolabs/models/commercial_overrides.py +113 -0
  388. moolabs/models/commercial_overrides_input.py +115 -0
  389. moolabs/models/commercial_overrides_payload.py +113 -0
  390. moolabs/models/communication_create.py +110 -0
  391. moolabs/models/communication_list_response.py +101 -0
  392. moolabs/models/communication_response.py +138 -0
  393. moolabs/models/comparison_mode.py +37 -0
  394. moolabs/models/completeness_response.py +105 -0
  395. moolabs/models/component_coverage_response.py +123 -0
  396. moolabs/models/compute_variance_request.py +96 -0
  397. moolabs/models/compute_variance_response.py +105 -0
  398. moolabs/models/config_upload_gap_out.py +89 -0
  399. moolabs/models/config_upload_response.py +109 -0
  400. moolabs/models/config_upload_summary_out.py +95 -0
  401. moolabs/models/connector_config_response.py +93 -0
  402. moolabs/models/connector_health_response.py +102 -0
  403. moolabs/models/connector_item.py +105 -0
  404. moolabs/models/contact_create.py +100 -0
  405. moolabs/models/contact_list_response.py +101 -0
  406. moolabs/models/contact_response.py +134 -0
  407. moolabs/models/contact_update.py +102 -0
  408. moolabs/models/contract_document_response.py +104 -0
  409. moolabs/models/contract_event_response.py +108 -0
  410. moolabs/models/contract_inbound_message_response.py +106 -0
  411. moolabs/models/contract_participant_response.py +131 -0
  412. moolabs/models/contract_segment_response.py +95 -0
  413. moolabs/models/contract_thread_response.py +115 -0
  414. moolabs/models/contract_thread_snapshot_response.py +121 -0
  415. moolabs/models/contract_upload_detail_response.py +103 -0
  416. moolabs/models/contract_version_response.py +128 -0
  417. moolabs/models/contributor_item.py +123 -0
  418. moolabs/models/contributor_kind.py +38 -0
  419. moolabs/models/contributor_query_request.py +146 -0
  420. moolabs/models/contributor_response.py +174 -0
  421. moolabs/models/cost.py +152 -0
  422. moolabs/models/cost_adjustment_create.py +131 -0
  423. moolabs/models/cost_adjustment_response.py +102 -0
  424. moolabs/models/cost_driver_rule_create_request.py +158 -0
  425. moolabs/models/cost_driver_rule_response.py +126 -0
  426. moolabs/models/cost_driver_rule_update_request.py +100 -0
  427. moolabs/models/cost_event_detail_response.py +132 -0
  428. moolabs/models/cost_event_ingest.py +177 -0
  429. moolabs/models/cost_event_response.py +122 -0
  430. moolabs/models/cost_event_summary_item.py +103 -0
  431. moolabs/models/cost_event_summary_request.py +88 -0
  432. moolabs/models/cost_event_summary_response.py +95 -0
  433. moolabs/models/cost_explorer_response.py +155 -0
  434. moolabs/models/cost_scope.py +37 -0
  435. moolabs/models/coverage_snapshot_response.py +114 -0
  436. moolabs/models/cpu_core_hours.py +152 -0
  437. moolabs/models/cpu_cost_weight.py +152 -0
  438. moolabs/models/create_allocation_run_api422_response.py +147 -0
  439. moolabs/models/create_api_key_request.py +89 -0
  440. moolabs/models/create_api_key_response.py +105 -0
  441. moolabs/models/create_auto_topup_rule_request.py +106 -0
  442. moolabs/models/create_checkout_session_tax_id_collection.py +90 -0
  443. moolabs/models/create_checkout_session_tax_id_collection_required.py +37 -0
  444. moolabs/models/create_contract_thread_request.py +87 -0
  445. moolabs/models/create_credit_request.py +97 -0
  446. moolabs/models/create_fx_rate_request.py +103 -0
  447. moolabs/models/create_grant_request.py +136 -0
  448. moolabs/models/create_mapping_request.py +91 -0
  449. moolabs/models/create_matrix_price_row_request.py +91 -0
  450. moolabs/models/create_matrix_price_row_response.py +89 -0
  451. moolabs/models/create_portal_token_response.py +91 -0
  452. moolabs/models/create_quote_redline_request.py +103 -0
  453. moolabs/models/create_quote_request.py +119 -0
  454. moolabs/models/create_quote_template_request.py +102 -0
  455. moolabs/models/create_rate_card_request.py +105 -0
  456. moolabs/models/create_reconstruction_run_request.py +101 -0
  457. moolabs/models/create_session_response.py +97 -0
  458. moolabs/models/create_snapshot_request.py +98 -0
  459. moolabs/models/create_stripe_checkout_session_billing_address_collection.py +37 -0
  460. moolabs/models/create_stripe_checkout_session_consent_collection.py +97 -0
  461. moolabs/models/create_stripe_checkout_session_consent_collection_payment_method_reuse_agreement.py +88 -0
  462. moolabs/models/create_stripe_checkout_session_consent_collection_payment_method_reuse_agreement_position.py +37 -0
  463. moolabs/models/create_stripe_checkout_session_consent_collection_promotions.py +37 -0
  464. moolabs/models/create_stripe_checkout_session_consent_collection_terms_of_service.py +37 -0
  465. moolabs/models/create_stripe_checkout_session_customer_update.py +92 -0
  466. moolabs/models/create_stripe_checkout_session_customer_update_behavior.py +37 -0
  467. moolabs/models/create_stripe_checkout_session_redirect_on_completion.py +38 -0
  468. moolabs/models/create_stripe_checkout_session_request.py +112 -0
  469. moolabs/models/create_stripe_checkout_session_request_customer.py +163 -0
  470. moolabs/models/create_stripe_checkout_session_request_options.py +147 -0
  471. moolabs/models/create_stripe_checkout_session_result.py +139 -0
  472. moolabs/models/create_stripe_customer_portal_session_params.py +91 -0
  473. moolabs/models/create_threshold_request.py +99 -0
  474. moolabs/models/create_value_recognition_request.py +100 -0
  475. moolabs/models/create_wallet_request.py +106 -0
  476. moolabs/models/credit_config.py +119 -0
  477. moolabs/models/credit_config_payload.py +135 -0
  478. moolabs/models/credit_cost_ratio_item.py +93 -0
  479. moolabs/models/credit_cost_ratio_response.py +101 -0
  480. moolabs/models/credit_memo_apply_request.py +90 -0
  481. moolabs/models/credit_memo_create.py +104 -0
  482. moolabs/models/credit_memo_create_internal.py +114 -0
  483. moolabs/models/credit_memo_create_public.py +108 -0
  484. moolabs/models/credit_memo_item.py +102 -0
  485. moolabs/models/credit_memo_line_in.py +90 -0
  486. moolabs/models/credit_memo_list_response.py +101 -0
  487. moolabs/models/credit_memo_out.py +138 -0
  488. moolabs/models/credit_memo_response.py +124 -0
  489. moolabs/models/credit_memo_update.py +94 -0
  490. moolabs/models/credit_note_original_invoice_ref.py +114 -0
  491. moolabs/models/credit_override.py +87 -0
  492. moolabs/models/credit_override_input.py +101 -0
  493. moolabs/models/credit_override_payload.py +100 -0
  494. moolabs/models/crm_quote_context_request.py +94 -0
  495. moolabs/models/crm_quote_context_response.py +101 -0
  496. moolabs/models/crm_quote_draft_request.py +98 -0
  497. moolabs/models/crm_quote_draft_response.py +107 -0
  498. moolabs/models/crm_quote_record_card_response.py +97 -0
  499. moolabs/models/crm_surface_response.py +97 -0
  500. moolabs/models/currency.py +101 -0
  501. moolabs/models/current.py +152 -0
  502. moolabs/models/custom_invoicing_app.py +142 -0
  503. moolabs/models/custom_invoicing_app_replace_update.py +105 -0
  504. moolabs/models/custom_invoicing_customer_app_data.py +117 -0
  505. moolabs/models/custom_invoicing_draft_synchronized_request.py +91 -0
  506. moolabs/models/custom_invoicing_finalized_invoicing_request.py +91 -0
  507. moolabs/models/custom_invoicing_finalized_payment_request.py +87 -0
  508. moolabs/models/custom_invoicing_finalized_request.py +97 -0
  509. moolabs/models/custom_invoicing_line_discount_external_id_mapping.py +97 -0
  510. moolabs/models/custom_invoicing_line_external_id_mapping.py +97 -0
  511. moolabs/models/custom_invoicing_payment_trigger.py +41 -0
  512. moolabs/models/custom_invoicing_sync_result.py +110 -0
  513. moolabs/models/custom_invoicing_tax_config.py +87 -0
  514. moolabs/models/custom_invoicing_update_payment_status_request.py +92 -0
  515. moolabs/models/custom_plan_input.py +136 -0
  516. moolabs/models/custom_subscription_change.py +119 -0
  517. moolabs/models/custom_subscription_create.py +153 -0
  518. moolabs/models/customer.py +172 -0
  519. moolabs/models/customer_access.py +102 -0
  520. moolabs/models/customer_app_data.py +164 -0
  521. moolabs/models/customer_app_data_create_or_update_item.py +164 -0
  522. moolabs/models/customer_app_data_paginated_response.py +101 -0
  523. moolabs/models/customer_cost_item.py +95 -0
  524. moolabs/models/customer_create.py +120 -0
  525. moolabs/models/customer_expand.py +36 -0
  526. moolabs/models/customer_id.py +95 -0
  527. moolabs/models/customer_item.py +114 -0
  528. moolabs/models/customer_key.py +87 -0
  529. moolabs/models/customer_key_page_response.py +101 -0
  530. moolabs/models/customer_key_put_request.py +103 -0
  531. moolabs/models/customer_key_response.py +94 -0
  532. moolabs/models/customer_margin_item.py +99 -0
  533. moolabs/models/customer_margin_response.py +101 -0
  534. moolabs/models/customer_order_by.py +38 -0
  535. moolabs/models/customer_paginated_response.py +101 -0
  536. moolabs/models/customer_replace_update.py +120 -0
  537. moolabs/models/customer_subscription_order_by.py +37 -0
  538. moolabs/models/customer_upsert_request.py +102 -0
  539. moolabs/models/customer_usage_attribution.py +88 -0
  540. moolabs/models/danger_request.py +89 -0
  541. moolabs/models/dashboard_meta.py +172 -0
  542. moolabs/models/dashboard_overview_response.py +115 -0
  543. moolabs/models/data_through.py +115 -0
  544. moolabs/models/db_time_coverage_response.py +154 -0
  545. moolabs/models/db_time_evidence_batch_readback_response.py +135 -0
  546. moolabs/models/db_time_evidence_batch_request.py +147 -0
  547. moolabs/models/db_time_evidence_batch_response.py +100 -0
  548. moolabs/models/db_time_evidence_conflict_detail.py +94 -0
  549. moolabs/models/db_time_evidence_conflict_response.py +91 -0
  550. moolabs/models/db_time_evidence_not_found_detail.py +94 -0
  551. moolabs/models/db_time_evidence_not_found_response.py +91 -0
  552. moolabs/models/db_time_observation_request.py +131 -0
  553. moolabs/models/db_time_readout_quality_response.py +103 -0
  554. moolabs/models/deal_context.py +97 -0
  555. moolabs/models/deal_context_rule.py +105 -0
  556. moolabs/models/decision_item.py +131 -0
  557. moolabs/models/decision_kind.py +46 -0
  558. moolabs/models/decision_overview_response.py +172 -0
  559. moolabs/models/decision_queue_response.py +115 -0
  560. moolabs/models/decision_reason_code.py +53 -0
  561. moolabs/models/delta.py +152 -0
  562. moolabs/models/delta_pct.py +152 -0
  563. moolabs/models/demo_seed_acute_history_baseline_request.py +106 -0
  564. moolabs/models/demo_seed_acute_tenant_registration_request.py +114 -0
  565. moolabs/models/demo_seed_agent_report_baseline_request.py +106 -0
  566. moolabs/models/demo_seed_arc_invoice_ref.py +107 -0
  567. moolabs/models/demo_seed_arc_portfolio_baseline_request.py +121 -0
  568. moolabs/models/demo_seed_catalog_baseline_request.py +108 -0
  569. moolabs/models/demo_seed_customer_portfolio_baseline_request.py +103 -0
  570. moolabs/models/demo_seed_integration_crm_baseline_request.py +106 -0
  571. moolabs/models/demo_seed_integration_finance_baseline_request.py +106 -0
  572. moolabs/models/demo_seed_integration_netsuite_baseline_request.py +106 -0
  573. moolabs/models/demo_seed_integration_webhook_baseline_request.py +106 -0
  574. moolabs/models/demo_seed_invoice_payment_baseline_request.py +106 -0
  575. moolabs/models/demo_seed_isolation_canary_baseline_request.py +106 -0
  576. moolabs/models/demo_seed_lifecycle_request.py +103 -0
  577. moolabs/models/demo_seed_quote_contract_baseline_request.py +106 -0
  578. moolabs/models/demo_seed_security_credentials_baseline_request.py +106 -0
  579. moolabs/models/demo_seed_settings_baseline_request.py +106 -0
  580. moolabs/models/demo_seed_subscription_baseline_request.py +106 -0
  581. moolabs/models/demo_seed_tenant_config_baseline_request.py +119 -0
  582. moolabs/models/demo_seed_usage_baseline_request.py +106 -0
  583. moolabs/models/derive_request.py +94 -0
  584. moolabs/models/dimension.py +39 -0
  585. moolabs/models/dimension_coverage_response.py +102 -0
  586. moolabs/models/disclosure_policy_response.py +93 -0
  587. moolabs/models/disclosure_policy_update_request.py +102 -0
  588. moolabs/models/discount_percentage.py +87 -0
  589. moolabs/models/discount_reason_maximum_spend.py +94 -0
  590. moolabs/models/discount_reason_ratecard_percentage.py +109 -0
  591. moolabs/models/discount_reason_ratecard_usage.py +116 -0
  592. moolabs/models/discount_usage.py +95 -0
  593. moolabs/models/discounts.py +97 -0
  594. moolabs/models/dismiss_refinement_request.py +87 -0
  595. moolabs/models/dispute_approval_request.py +88 -0
  596. moolabs/models/dispute_list_response.py +101 -0
  597. moolabs/models/dispute_resolve_request.py +92 -0
  598. moolabs/models/dispute_response.py +134 -0
  599. moolabs/models/dispute_summary_response.py +104 -0
  600. moolabs/models/dispute_update_request.py +102 -0
  601. moolabs/models/dns_record.py +119 -0
  602. moolabs/models/domain_response.py +95 -0
  603. moolabs/models/domain_update.py +87 -0
  604. moolabs/models/draft_lock_request.py +88 -0
  605. moolabs/models/draft_lock_response.py +97 -0
  606. moolabs/models/draft_save_request.py +114 -0
  607. moolabs/models/draft_unlock_request.py +90 -0
  608. moolabs/models/driver_item.py +122 -0
  609. moolabs/models/dry_run_request.py +89 -0
  610. moolabs/models/dry_run_response.py +97 -0
  611. moolabs/models/dso_response.py +100 -0
  612. moolabs/models/dynamic_price_with_commitments.py +131 -0
  613. moolabs/models/economics_summary.py +114 -0
  614. moolabs/models/edit_subscription_add_item.py +102 -0
  615. moolabs/models/edit_subscription_add_phase.py +100 -0
  616. moolabs/models/edit_subscription_remove_item.py +98 -0
  617. moolabs/models/edit_subscription_remove_phase.py +99 -0
  618. moolabs/models/edit_subscription_stretch_phase.py +98 -0
  619. moolabs/models/edit_subscription_unschedule_edit.py +94 -0
  620. moolabs/models/effective_permission_grant_dto.py +105 -0
  621. moolabs/models/effective_permissions_response.py +129 -0
  622. moolabs/models/email_config_out.py +188 -0
  623. moolabs/models/email_config_upsert.py +111 -0
  624. moolabs/models/email_context.py +44 -0
  625. moolabs/models/email_message_status.py +42 -0
  626. moolabs/models/email_provider.py +37 -0
  627. moolabs/models/email_provider_identity.py +157 -0
  628. moolabs/models/email_provider_identity_list.py +108 -0
  629. moolabs/models/email_provider_operator_upsert.py +131 -0
  630. moolabs/models/email_provider_route.py +128 -0
  631. moolabs/models/email_provider_route_list.py +108 -0
  632. moolabs/models/enable_tier3_response.py +93 -0
  633. moolabs/models/endpoints_response.py +89 -0
  634. moolabs/models/entitlement.py +164 -0
  635. moolabs/models/entitlement_boolean.py +168 -0
  636. moolabs/models/entitlement_boolean_create_inputs.py +127 -0
  637. moolabs/models/entitlement_boolean_v2.py +170 -0
  638. moolabs/models/entitlement_create_inputs.py +164 -0
  639. moolabs/models/entitlement_grant.py +148 -0
  640. moolabs/models/entitlement_grant_create_input.py +111 -0
  641. moolabs/models/entitlement_grant_create_input_v2.py +113 -0
  642. moolabs/models/entitlement_grant_v2.py +148 -0
  643. moolabs/models/entitlement_metered.py +190 -0
  644. moolabs/models/entitlement_metered_create_inputs.py +143 -0
  645. moolabs/models/entitlement_metered_v2.py +196 -0
  646. moolabs/models/entitlement_metered_v2_create_inputs.py +157 -0
  647. moolabs/models/entitlement_order_by.py +37 -0
  648. moolabs/models/entitlement_override.py +89 -0
  649. moolabs/models/entitlement_override_input.py +95 -0
  650. moolabs/models/entitlement_override_payload.py +93 -0
  651. moolabs/models/entitlement_paginated_response.py +101 -0
  652. moolabs/models/entitlement_payload.py +103 -0
  653. moolabs/models/entitlement_static.py +170 -0
  654. moolabs/models/entitlement_static_create_inputs.py +129 -0
  655. moolabs/models/entitlement_static_v2.py +172 -0
  656. moolabs/models/entitlement_type.py +38 -0
  657. moolabs/models/entitlement_v2.py +164 -0
  658. moolabs/models/entitlement_v2_create_inputs.py +164 -0
  659. moolabs/models/entitlement_v2_paginated_response.py +101 -0
  660. moolabs/models/entitlement_value.py +109 -0
  661. moolabs/models/error_extension.py +110 -0
  662. moolabs/models/escalate_request.py +90 -0
  663. moolabs/models/escalate_response.py +91 -0
  664. moolabs/models/escalation_action_request.py +90 -0
  665. moolabs/models/escalation_action_response.py +91 -0
  666. moolabs/models/escalation_create.py +97 -0
  667. moolabs/models/escalation_dismiss_request.py +90 -0
  668. moolabs/models/escalation_list_response.py +101 -0
  669. moolabs/models/escalation_resolve_request.py +87 -0
  670. moolabs/models/escalation_response.py +112 -0
  671. moolabs/models/escalation_update.py +93 -0
  672. moolabs/models/event.py +115 -0
  673. moolabs/models/event_delivery_attempt_response.py +101 -0
  674. moolabs/models/evidence_create_request.py +96 -0
  675. moolabs/models/evidence_kind.py +39 -0
  676. moolabs/models/evidence_list_response.py +97 -0
  677. moolabs/models/evidence_response.py +106 -0
  678. moolabs/models/evidence_review_request.py +90 -0
  679. moolabs/models/evidence_window.py +37 -0
  680. moolabs/models/exchange_rate.py +152 -0
  681. moolabs/models/expiration_duration.py +40 -0
  682. moolabs/models/expiration_period.py +91 -0
  683. moolabs/models/explorer_alias_hint.py +104 -0
  684. moolabs/models/explorer_alias_hint1.py +110 -0
  685. moolabs/models/explorer_alias_kind.py +39 -0
  686. moolabs/models/explorer_breakdown_page.py +166 -0
  687. moolabs/models/explorer_breakdown_row.py +200 -0
  688. moolabs/models/explorer_cloud_provider_quality_axis.py +107 -0
  689. moolabs/models/explorer_cloud_temporal_coverage_summary.py +115 -0
  690. moolabs/models/explorer_contributor_kind.py +40 -0
  691. moolabs/models/explorer_contributor_query_request.py +190 -0
  692. moolabs/models/explorer_contributor_response.py +201 -0
  693. moolabs/models/explorer_contributor_row.py +177 -0
  694. moolabs/models/explorer_cost_event_status.py +39 -0
  695. moolabs/models/explorer_dimension.py +40 -0
  696. moolabs/models/explorer_effective_sort.py +107 -0
  697. moolabs/models/explorer_effective_sort_field.py +41 -0
  698. moolabs/models/explorer_evidence_kind.py +41 -0
  699. moolabs/models/explorer_evidence_role.py +37 -0
  700. moolabs/models/explorer_excluded_event_count.py +104 -0
  701. moolabs/models/explorer_excluded_event_reason.py +38 -0
  702. moolabs/models/explorer_exposure_summary.py +124 -0
  703. moolabs/models/explorer_measure_source.py +40 -0
  704. moolabs/models/explorer_meta.py +196 -0
  705. moolabs/models/explorer_quality_axis.py +117 -0
  706. moolabs/models/explorer_quality_caveat_code.py +45 -0
  707. moolabs/models/explorer_quality_summary.py +151 -0
  708. moolabs/models/explorer_query_request.py +184 -0
  709. moolabs/models/explorer_request_detail_event.py +134 -0
  710. moolabs/models/explorer_request_detail_line.py +133 -0
  711. moolabs/models/explorer_request_detail_query_request.py +201 -0
  712. moolabs/models/explorer_request_detail_response.py +205 -0
  713. moolabs/models/explorer_request_detail_result_cap.py +125 -0
  714. moolabs/models/explorer_request_distribution.py +109 -0
  715. moolabs/models/explorer_request_query_request.py +190 -0
  716. moolabs/models/explorer_search.py +111 -0
  717. moolabs/models/explorer_selection_result.py +107 -0
  718. moolabs/models/explorer_selection_row.py +185 -0
  719. moolabs/models/explorer_selection_status.py +39 -0
  720. moolabs/models/explorer_sort.py +104 -0
  721. moolabs/models/explorer_sort1.py +116 -0
  722. moolabs/models/explorer_sort_fallback_reason.py +39 -0
  723. moolabs/models/explorer_sort_field.py +40 -0
  724. moolabs/models/explorer_source_scope.py +38 -0
  725. moolabs/models/explorer_summary.py +134 -0
  726. moolabs/models/explorer_trend_point.py +124 -0
  727. moolabs/models/explorer_usage_history_evidence.py +110 -0
  728. moolabs/models/explorer_usage_history_source.py +38 -0
  729. moolabs/models/feature.py +156 -0
  730. moolabs/models/feature_contributor_customer.py +91 -0
  731. moolabs/models/feature_contributor_model.py +93 -0
  732. moolabs/models/feature_contributor_request.py +91 -0
  733. moolabs/models/feature_contributors_response.py +121 -0
  734. moolabs/models/feature_cost_item.py +97 -0
  735. moolabs/models/feature_create_inputs.py +128 -0
  736. moolabs/models/feature_flag_item.py +97 -0
  737. moolabs/models/feature_flag_update.py +87 -0
  738. moolabs/models/feature_margin_item.py +101 -0
  739. moolabs/models/feature_margin_response.py +101 -0
  740. moolabs/models/feature_meta.py +97 -0
  741. moolabs/models/feature_order_by.py +40 -0
  742. moolabs/models/feature_override_request.py +93 -0
  743. moolabs/models/feature_paginated_response.py +101 -0
  744. moolabs/models/feature_pool.py +99 -0
  745. moolabs/models/feature_pool_payload.py +107 -0
  746. moolabs/models/feature_price_request.py +93 -0
  747. moolabs/models/feature_pricing_input.py +120 -0
  748. moolabs/models/filter_id_exact.py +88 -0
  749. moolabs/models/filter_string.py +129 -0
  750. moolabs/models/filter_time.py +114 -0
  751. moolabs/models/finance_summary.py +143 -0
  752. moolabs/models/first_pass_redline_request.py +88 -0
  753. moolabs/models/first_pass_redline_response.py +89 -0
  754. moolabs/models/flag_disputed_request.py +92 -0
  755. moolabs/models/flag_disputed_response.py +97 -0
  756. moolabs/models/flat_price.py +104 -0
  757. moolabs/models/flat_price_with_payment_term.py +107 -0
  758. moolabs/models/flatamount.py +152 -0
  759. moolabs/models/freshness_axis.py +121 -0
  760. moolabs/models/freshness_source.py +40 -0
  761. moolabs/models/fx_rate_to_reporting.py +153 -0
  762. moolabs/models/fx_rates_list_response.py +97 -0
  763. moolabs/models/gate_status_response.py +105 -0
  764. moolabs/models/get_fx_rate_request.py +92 -0
  765. moolabs/models/get_matrix_price_rows_response.py +107 -0
  766. moolabs/models/google_chat_quote_response.py +89 -0
  767. moolabs/models/grant_activation_request.py +122 -0
  768. moolabs/models/grant_burn_down_history_segment.py +125 -0
  769. moolabs/models/grant_order_by.py +38 -0
  770. moolabs/models/grant_paginated_response.py +101 -0
  771. moolabs/models/grant_plan_change_request.py +126 -0
  772. moolabs/models/grant_renewal_request.py +122 -0
  773. moolabs/models/grant_response.py +128 -0
  774. moolabs/models/grant_source_type.py +40 -0
  775. moolabs/models/grant_usage_record.py +97 -0
  776. moolabs/models/grant_v2_paginated_response.py +101 -0
  777. moolabs/models/grants_list_response.py +99 -0
  778. moolabs/models/handoff_create_request.py +92 -0
  779. moolabs/models/helicone_config_request.py +92 -0
  780. moolabs/models/homepage_response.py +107 -0
  781. moolabs/models/hosted_checkout_settlement_ptp_response.py +100 -0
  782. moolabs/models/hosted_checkout_settlement_request.py +109 -0
  783. moolabs/models/hosted_checkout_settlement_response.py +97 -0
  784. moolabs/models/http_validation_error.py +95 -0
  785. moolabs/models/hub_spot_connect_request.py +91 -0
  786. moolabs/models/id_resource.py +97 -0
  787. moolabs/models/identity_scope.py +39 -0
  788. moolabs/models/identity_scope_coverage_response.py +96 -0
  789. moolabs/models/import_batch_detail_response.py +105 -0
  790. moolabs/models/import_batch_detail_row.py +111 -0
  791. moolabs/models/import_batch_request.py +112 -0
  792. moolabs/models/import_batch_response.py +101 -0
  793. moolabs/models/import_batch_summary.py +111 -0
  794. moolabs/models/import_dispute_item.py +122 -0
  795. moolabs/models/import_disputes_request.py +96 -0
  796. moolabs/models/import_invoice_item.py +133 -0
  797. moolabs/models/import_invoices_request.py +96 -0
  798. moolabs/models/import_promise_item.py +155 -0
  799. moolabs/models/import_promises_request.py +96 -0
  800. moolabs/models/inbound_email_attachment.py +91 -0
  801. moolabs/models/inbound_email_payload.py +103 -0
  802. moolabs/models/inbound_email_process_response.py +97 -0
  803. moolabs/models/ingest_events_body.py +150 -0
  804. moolabs/models/ingest_health.py +97 -0
  805. moolabs/models/ingested_event.py +111 -0
  806. moolabs/models/ingested_event_cursor_paginated_response.py +98 -0
  807. moolabs/models/initialamount.py +152 -0
  808. moolabs/models/insight_card.py +111 -0
  809. moolabs/models/install_method.py +38 -0
  810. moolabs/models/integration_update.py +89 -0
  811. moolabs/models/invalidate_portal_token_request.py +89 -0
  812. moolabs/models/invalidate_portal_tokens_request.py +89 -0
  813. moolabs/models/invoice.py +249 -0
  814. moolabs/models/invoice_allocation_out.py +103 -0
  815. moolabs/models/invoice_app_external_ids.py +97 -0
  816. moolabs/models/invoice_available_action_details.py +89 -0
  817. moolabs/models/invoice_available_actions.py +132 -0
  818. moolabs/models/invoice_detailed_line.py +244 -0
  819. moolabs/models/invoice_detailed_line_cost_category.py +37 -0
  820. moolabs/models/invoice_detailed_line_rate_card.py +116 -0
  821. moolabs/models/invoice_document_ref_type.py +36 -0
  822. moolabs/models/invoice_expand.py +38 -0
  823. moolabs/models/invoice_generic_document_ref.py +98 -0
  824. moolabs/models/invoice_item.py +112 -0
  825. moolabs/models/invoice_line.py +296 -0
  826. moolabs/models/invoice_line_amount_discount.py +141 -0
  827. moolabs/models/invoice_line_app_external_ids.py +93 -0
  828. moolabs/models/invoice_line_discounts.py +105 -0
  829. moolabs/models/invoice_line_managed_by.py +38 -0
  830. moolabs/models/invoice_line_out.py +99 -0
  831. moolabs/models/invoice_line_replace_update.py +143 -0
  832. moolabs/models/invoice_line_status.py +38 -0
  833. moolabs/models/invoice_line_subscription_reference.py +115 -0
  834. moolabs/models/invoice_line_tax_behavior.py +37 -0
  835. moolabs/models/invoice_line_tax_item.py +117 -0
  836. moolabs/models/invoice_line_usage_discount.py +155 -0
  837. moolabs/models/invoice_order_by.py +41 -0
  838. moolabs/models/invoice_paginated_response.py +101 -0
  839. moolabs/models/invoice_payment_terms.py +91 -0
  840. moolabs/models/invoice_pending_line_create.py +131 -0
  841. moolabs/models/invoice_pending_line_create_input.py +105 -0
  842. moolabs/models/invoice_pending_line_create_response.py +107 -0
  843. moolabs/models/invoice_pending_lines_action_filters_input.py +88 -0
  844. moolabs/models/invoice_pending_lines_action_input.py +106 -0
  845. moolabs/models/invoice_reference.py +101 -0
  846. moolabs/models/invoice_replace_update.py +117 -0
  847. moolabs/models/invoice_simulation_input.py +107 -0
  848. moolabs/models/invoice_simulation_line.py +164 -0
  849. moolabs/models/invoice_status.py +44 -0
  850. moolabs/models/invoice_status_details.py +103 -0
  851. moolabs/models/invoice_totals.py +163 -0
  852. moolabs/models/invoice_type.py +37 -0
  853. moolabs/models/invoice_upsert_request.py +112 -0
  854. moolabs/models/invoice_usage_based_rate_card.py +116 -0
  855. moolabs/models/invoice_workflow_invoicing_settings_replace_update.py +97 -0
  856. moolabs/models/invoice_workflow_replace_update.py +91 -0
  857. moolabs/models/invoice_workflow_settings.py +111 -0
  858. moolabs/models/invoice_workflow_settings_replace_update.py +97 -0
  859. moolabs/models/issue_after_reset.py +90 -0
  860. moolabs/models/jurisdiction_profile_response.py +102 -0
  861. moolabs/models/jurisdiction_resolution_request.py +92 -0
  862. moolabs/models/kill_switch_request.py +87 -0
  863. moolabs/models/langfuse_config_request.py +92 -0
  864. moolabs/models/lesson_action_request.py +89 -0
  865. moolabs/models/level_in.py +91 -0
  866. moolabs/models/lifecycle_event_request.py +97 -0
  867. moolabs/models/line_item_create.py +118 -0
  868. moolabs/models/line_total.py +153 -0
  869. moolabs/models/link_net_suite_account_request.py +89 -0
  870. moolabs/models/list_auto_topup_rules_response.py +97 -0
  871. moolabs/models/list_connectors200_response_inner.py +148 -0
  872. moolabs/models/list_entitlements_result.py +151 -0
  873. moolabs/models/list_events_v2_filter_param.py +123 -0
  874. moolabs/models/list_features_result.py +151 -0
  875. moolabs/models/list_grants_get200_response.py +151 -0
  876. moolabs/models/mapping_response.py +97 -0
  877. moolabs/models/mapping_rule_create.py +105 -0
  878. moolabs/models/mapping_rule_response.py +118 -0
  879. moolabs/models/mapping_rule_update.py +103 -0
  880. moolabs/models/margin_snapshot_response.py +131 -0
  881. moolabs/models/marketplace_app_api_key_install_request.py +91 -0
  882. moolabs/models/marketplace_install_request_payload.py +89 -0
  883. moolabs/models/marketplace_install_response.py +94 -0
  884. moolabs/models/marketplace_listing.py +105 -0
  885. moolabs/models/marketplace_listing_paginated_response.py +101 -0
  886. moolabs/models/matrix_price_row.py +91 -0
  887. moolabs/models/measure.py +146 -0
  888. moolabs/models/measure_kind.py +41 -0
  889. moolabs/models/measure_usage_from.py +151 -0
  890. moolabs/models/measure_usage_from_preset.py +37 -0
  891. moolabs/models/merge_remittances_request.py +89 -0
  892. moolabs/models/meter.py +176 -0
  893. moolabs/models/meter_aggregation.py +42 -0
  894. moolabs/models/meter_create.py +113 -0
  895. moolabs/models/meter_mapping_item.py +95 -0
  896. moolabs/models/meter_order_by.py +40 -0
  897. moolabs/models/meter_query_request.py +121 -0
  898. moolabs/models/meter_query_result.py +103 -0
  899. moolabs/models/meter_query_row.py +98 -0
  900. moolabs/models/meter_test_event_request.py +87 -0
  901. moolabs/models/meter_test_event_response.py +93 -0
  902. moolabs/models/meter_update.py +94 -0
  903. moolabs/models/meter_usage_summary_item.py +103 -0
  904. moolabs/models/meter_usage_summary_response.py +95 -0
  905. moolabs/models/meter_validation_error.py +101 -0
  906. moolabs/models/migrate_subscription_request.py +105 -0
  907. moolabs/models/model_cost_item.py +95 -0
  908. moolabs/models/net_suite_connect_request.py +103 -0
  909. moolabs/models/net_suite_cutover_guard_request.py +87 -0
  910. moolabs/models/net_suite_m2_m_finalize_request.py +87 -0
  911. moolabs/models/net_suite_m2_m_setup_request.py +101 -0
  912. moolabs/models/net_suite_managed_portal_backfill_cancel_request.py +87 -0
  913. moolabs/models/net_suite_managed_portal_backfill_request.py +89 -0
  914. moolabs/models/net_suite_managed_portal_backfill_run_request.py +90 -0
  915. moolabs/models/net_suite_managed_portal_mapping_delete_request.py +91 -0
  916. moolabs/models/net_suite_managed_portal_mapping_request.py +97 -0
  917. moolabs/models/net_suite_managed_portal_protection_ack_request.py +89 -0
  918. moolabs/models/next_action_type.py +41 -0
  919. moolabs/models/note_create.py +94 -0
  920. moolabs/models/note_list_response.py +101 -0
  921. moolabs/models/note_response.py +104 -0
  922. moolabs/models/notification_channel_meta.py +100 -0
  923. moolabs/models/notification_channel_order_by.py +39 -0
  924. moolabs/models/notification_channel_paginated_response.py +101 -0
  925. moolabs/models/notification_channel_type.py +36 -0
  926. moolabs/models/notification_channel_webhook.py +145 -0
  927. moolabs/models/notification_channel_webhook_create_request.py +117 -0
  928. moolabs/models/notification_event.py +137 -0
  929. moolabs/models/notification_event_balance_threshold_payload.py +121 -0
  930. moolabs/models/notification_event_balance_threshold_payload_data.py +133 -0
  931. moolabs/models/notification_event_delivery_attempt.py +103 -0
  932. moolabs/models/notification_event_delivery_status.py +125 -0
  933. moolabs/models/notification_event_delivery_status_state.py +40 -0
  934. moolabs/models/notification_event_entitlement_value_payload_base.py +125 -0
  935. moolabs/models/notification_event_invoice_created_payload.py +121 -0
  936. moolabs/models/notification_event_invoice_updated_payload.py +121 -0
  937. moolabs/models/notification_event_order_by.py +37 -0
  938. moolabs/models/notification_event_paginated_response.py +101 -0
  939. moolabs/models/notification_event_payload.py +178 -0
  940. moolabs/models/notification_event_resend_request.py +88 -0
  941. moolabs/models/notification_event_reset_payload.py +121 -0
  942. moolabs/models/notification_event_type.py +39 -0
  943. moolabs/models/notification_rule.py +178 -0
  944. moolabs/models/notification_rule_balance_threshold.py +159 -0
  945. moolabs/models/notification_rule_balance_threshold_create_request.py +115 -0
  946. moolabs/models/notification_rule_balance_threshold_value.py +90 -0
  947. moolabs/models/notification_rule_balance_threshold_value_type.py +40 -0
  948. moolabs/models/notification_rule_create_request.py +178 -0
  949. moolabs/models/notification_rule_entitlement_reset.py +149 -0
  950. moolabs/models/notification_rule_entitlement_reset_create_request.py +105 -0
  951. moolabs/models/notification_rule_invoice_created.py +139 -0
  952. moolabs/models/notification_rule_invoice_created_create_request.py +103 -0
  953. moolabs/models/notification_rule_invoice_updated.py +139 -0
  954. moolabs/models/notification_rule_invoice_updated_create_request.py +103 -0
  955. moolabs/models/notification_rule_order_by.py +39 -0
  956. moolabs/models/notification_rule_paginated_response.py +101 -0
  957. moolabs/models/notify_channel.py +89 -0
  958. moolabs/models/o_auth2_authorization_code_grant_error_type.py +42 -0
  959. moolabs/models/observation_out.py +103 -0
  960. moolabs/models/observed_total_cost.py +153 -0
  961. moolabs/models/open_cost_cluster_binding.py +115 -0
  962. moolabs/models/open_cost_dedicated_namespace.py +104 -0
  963. moolabs/models/open_cost_installation_create_request.py +122 -0
  964. moolabs/models/open_cost_installation_create_response.py +116 -0
  965. moolabs/models/open_cost_installation_response.py +114 -0
  966. moolabs/models/open_cost_snapshot_request.py +139 -0
  967. moolabs/models/open_cost_snapshot_response.py +125 -0
  968. moolabs/models/open_cost_trust_policy.py +145 -0
  969. moolabs/models/open_cost_wire_row.py +140 -0
  970. moolabs/models/open_from_scope_request.py +98 -0
  971. moolabs/models/operations_summary.py +120 -0
  972. moolabs/models/opt_out_request.py +90 -0
  973. moolabs/models/opt_out_response.py +93 -0
  974. moolabs/models/org_role.py +152 -0
  975. moolabs/models/original_total.py +152 -0
  976. moolabs/models/otlp_ingest_response.py +91 -0
  977. moolabs/models/overall_freshness.py +116 -0
  978. moolabs/models/overdraft_settings.py +93 -0
  979. moolabs/models/overdraft_settings_payload.py +93 -0
  980. moolabs/models/override_first_ingress_request.py +94 -0
  981. moolabs/models/override_request.py +90 -0
  982. moolabs/models/override_response.py +91 -0
  983. moolabs/models/overview_response.py +109 -0
  984. moolabs/models/pack_provenance.py +101 -0
  985. moolabs/models/package_price_with_commitments.py +137 -0
  986. moolabs/models/paginated_credit_memos.py +97 -0
  987. moolabs/models/paginated_customers.py +99 -0
  988. moolabs/models/paginated_invoices.py +97 -0
  989. moolabs/models/paginated_payments.py +97 -0
  990. moolabs/models/paginated_sync_runs.py +97 -0
  991. moolabs/models/patch_quote_agent_policy_request.py +98 -0
  992. moolabs/models/patch_rows_request.py +95 -0
  993. moolabs/models/patch_session_request.py +107 -0
  994. moolabs/models/payment_allocation_response.py +104 -0
  995. moolabs/models/payment_create.py +109 -0
  996. moolabs/models/payment_due_date.py +124 -0
  997. moolabs/models/payment_failed_request.py +101 -0
  998. moolabs/models/payment_failed_response.py +93 -0
  999. moolabs/models/payment_instructions_response.py +95 -0
  1000. moolabs/models/payment_instructions_update_request.py +90 -0
  1001. moolabs/models/payment_item.py +104 -0
  1002. moolabs/models/payment_link_request.py +105 -0
  1003. moolabs/models/payment_link_response.py +89 -0
  1004. moolabs/models/payment_list_response.py +101 -0
  1005. moolabs/models/payment_match_request.py +90 -0
  1006. moolabs/models/payment_response.py +136 -0
  1007. moolabs/models/payment_reversal_request.py +90 -0
  1008. moolabs/models/payment_succeeded_request.py +103 -0
  1009. moolabs/models/payment_succeeded_response.py +97 -0
  1010. moolabs/models/payment_term_due_date.py +113 -0
  1011. moolabs/models/payment_term_instant.py +102 -0
  1012. moolabs/models/payment_terms.py +148 -0
  1013. moolabs/models/pending_provider_confirmation_reconcile_request.py +88 -0
  1014. moolabs/models/pending_sns_confirmation_out.py +102 -0
  1015. moolabs/models/period.py +90 -0
  1016. moolabs/models/period_settlement_out.py +143 -0
  1017. moolabs/models/period_window.py +103 -0
  1018. moolabs/models/persona.py +39 -0
  1019. moolabs/models/plan.py +191 -0
  1020. moolabs/models/plan_addon.py +126 -0
  1021. moolabs/models/plan_addon_create.py +101 -0
  1022. moolabs/models/plan_addon_order_by.py +40 -0
  1023. moolabs/models/plan_addon_paginated_response.py +101 -0
  1024. moolabs/models/plan_addon_replace_update.py +91 -0
  1025. moolabs/models/plan_amend_request.py +103 -0
  1026. moolabs/models/plan_cost_item.py +97 -0
  1027. moolabs/models/plan_create.py +140 -0
  1028. moolabs/models/plan_create_request.py +103 -0
  1029. moolabs/models/plan_order_by.py +40 -0
  1030. moolabs/models/plan_paginated_response.py +101 -0
  1031. moolabs/models/plan_phase.py +113 -0
  1032. moolabs/models/plan_pricing_input.py +103 -0
  1033. moolabs/models/plan_pricing_sync_request.py +105 -0
  1034. moolabs/models/plan_pricing_view.py +107 -0
  1035. moolabs/models/plan_ref_payload.py +91 -0
  1036. moolabs/models/plan_reference.py +106 -0
  1037. moolabs/models/plan_reference_input.py +97 -0
  1038. moolabs/models/plan_replace_update.py +122 -0
  1039. moolabs/models/plan_status.py +39 -0
  1040. moolabs/models/plan_subscription_change.py +153 -0
  1041. moolabs/models/plan_subscription_create.py +167 -0
  1042. moolabs/models/policy_update_request.py +94 -0
  1043. moolabs/models/pool_notification_config_request.py +87 -0
  1044. moolabs/models/pooloverrides_value.py +152 -0
  1045. moolabs/models/portal_case_response.py +108 -0
  1046. moolabs/models/portal_channel_preference_request.py +100 -0
  1047. moolabs/models/portal_dispute_request.py +94 -0
  1048. moolabs/models/portal_dispute_response.py +102 -0
  1049. moolabs/models/portal_invoice_response.py +124 -0
  1050. moolabs/models/portal_payment_intent_response.py +91 -0
  1051. moolabs/models/portal_payment_request.py +102 -0
  1052. moolabs/models/portal_preferences_request.py +113 -0
  1053. moolabs/models/portal_preferences_response.py +87 -0
  1054. moolabs/models/portal_promise_to_pay_response.py +106 -0
  1055. moolabs/models/portal_ptp_request.py +95 -0
  1056. moolabs/models/portal_token.py +121 -0
  1057. moolabs/models/portal_token_item.py +97 -0
  1058. moolabs/models/preview_resolution_request.py +89 -0
  1059. moolabs/models/preview_resolution_response.py +101 -0
  1060. moolabs/models/preview_template_request.py +102 -0
  1061. moolabs/models/preview_template_response.py +95 -0
  1062. moolabs/models/preview_trace_entry.py +97 -0
  1063. moolabs/models/previous.py +152 -0
  1064. moolabs/models/price_payment_term.py +37 -0
  1065. moolabs/models/price_session_response.py +109 -0
  1066. moolabs/models/price_tier.py +110 -0
  1067. moolabs/models/price_tier_payload.py +103 -0
  1068. moolabs/models/pricing_override_input.py +100 -0
  1069. moolabs/models/pricing_result.py +100 -0
  1070. moolabs/models/pricing_snapshot_response.py +109 -0
  1071. moolabs/models/pricing_tier_input.py +90 -0
  1072. moolabs/models/priority.py +38 -0
  1073. moolabs/models/pro_rating_config.py +90 -0
  1074. moolabs/models/pro_rating_mode.py +36 -0
  1075. moolabs/models/process_value_recognition_request.py +94 -0
  1076. moolabs/models/progress.py +94 -0
  1077. moolabs/models/projection_link_in.py +91 -0
  1078. moolabs/models/projection_links_request.py +98 -0
  1079. moolabs/models/projection_links_response.py +89 -0
  1080. moolabs/models/promise_response.py +112 -0
  1081. moolabs/models/promote_response.py +89 -0
  1082. moolabs/models/provider_billing_reference.py +146 -0
  1083. moolabs/models/provider_billing_reference_kind.py +37 -0
  1084. moolabs/models/provider_blocking_reason.py +115 -0
  1085. moolabs/models/provider_confirmation_repair_request.py +99 -0
  1086. moolabs/models/provider_connection_status.py +42 -0
  1087. moolabs/models/provider_identity_details.py +110 -0
  1088. moolabs/models/provider_identity_purpose.py +38 -0
  1089. moolabs/models/provider_kind.py +37 -0
  1090. moolabs/models/provider_readiness_response.py +97 -0
  1091. moolabs/models/provider_readiness_summary.py +123 -0
  1092. moolabs/models/provider_route_status.py +39 -0
  1093. moolabs/models/provider_safe_test_send_request.py +107 -0
  1094. moolabs/models/provider_safe_test_send_response.py +109 -0
  1095. moolabs/models/provider_summary.py +89 -0
  1096. moolabs/models/provider_warning.py +115 -0
  1097. moolabs/models/ptp_approval_request.py +88 -0
  1098. moolabs/models/ptp_create_request.py +103 -0
  1099. moolabs/models/ptp_fulfill_request.py +90 -0
  1100. moolabs/models/ptp_payment_link_response.py +89 -0
  1101. moolabs/models/ptp_summary_response.py +104 -0
  1102. moolabs/models/publish_plan_request.py +93 -0
  1103. moolabs/models/publish_plan_result.py +93 -0
  1104. moolabs/models/publish_template_request.py +96 -0
  1105. moolabs/models/put_account_segment_request.py +89 -0
  1106. moolabs/models/put_sku_eligibility_request.py +89 -0
  1107. moolabs/models/put_tenant_segments_request.py +89 -0
  1108. moolabs/models/quality_axis.py +116 -0
  1109. moolabs/models/quality_caveat_code.py +40 -0
  1110. moolabs/models/quality_status.py +40 -0
  1111. moolabs/models/quality_summary.py +135 -0
  1112. moolabs/models/quantity.py +153 -0
  1113. moolabs/models/quick_action.py +99 -0
  1114. moolabs/models/quick_books_connect_request.py +93 -0
  1115. moolabs/models/quick_redline_response.py +123 -0
  1116. moolabs/models/quote_agent_evaluation_response.py +106 -0
  1117. moolabs/models/quote_agent_policy_response.py +112 -0
  1118. moolabs/models/quote_agent_provenance_run_response.py +114 -0
  1119. moolabs/models/quote_agent_run_response.py +122 -0
  1120. moolabs/models/quote_approval_decision_request.py +88 -0
  1121. moolabs/models/quote_approval_response.py +107 -0
  1122. moolabs/models/quote_line_item_input.py +144 -0
  1123. moolabs/models/quote_list_response.py +101 -0
  1124. moolabs/models/quote_metrics_response.py +105 -0
  1125. moolabs/models/quote_redline_decision_request.py +88 -0
  1126. moolabs/models/quote_redline_response.py +125 -0
  1127. moolabs/models/quote_response.py +125 -0
  1128. moolabs/models/quote_template_list_response.py +95 -0
  1129. moolabs/models/quote_template_response.py +109 -0
  1130. moolabs/models/quote_version_response.py +129 -0
  1131. moolabs/models/ram_cost_weight.py +152 -0
  1132. moolabs/models/ram_gib_hours.py +152 -0
  1133. moolabs/models/rate_bulk_import_request.py +97 -0
  1134. moolabs/models/rate_bulk_import_response.py +91 -0
  1135. moolabs/models/rate_card.py +150 -0
  1136. moolabs/models/rate_card_boolean_entitlement.py +96 -0
  1137. moolabs/models/rate_card_cost_list_response.py +95 -0
  1138. moolabs/models/rate_card_cost_row.py +103 -0
  1139. moolabs/models/rate_card_discount.py +87 -0
  1140. moolabs/models/rate_card_discount_input.py +103 -0
  1141. moolabs/models/rate_card_discount_payload.py +87 -0
  1142. moolabs/models/rate_card_entitlement.py +164 -0
  1143. moolabs/models/rate_card_flat_fee.py +148 -0
  1144. moolabs/models/rate_card_metered_entitlement.py +107 -0
  1145. moolabs/models/rate_card_payload.py +103 -0
  1146. moolabs/models/rate_card_response.py +106 -0
  1147. moolabs/models/rate_card_static_entitlement.py +98 -0
  1148. moolabs/models/rate_card_usage_based.py +148 -0
  1149. moolabs/models/rate_card_usage_based_price.py +192 -0
  1150. moolabs/models/rate_catalog_create.py +117 -0
  1151. moolabs/models/rate_catalog_response.py +118 -0
  1152. moolabs/models/rate_catalog_update.py +107 -0
  1153. moolabs/models/rate_generation_list_view.py +97 -0
  1154. moolabs/models/rate_generation_view.py +98 -0
  1155. moolabs/models/rate_per_unit.py +153 -0
  1156. moolabs/models/rate_per_unit1.py +153 -0
  1157. moolabs/models/rate_schedule_list_response.py +95 -0
  1158. moolabs/models/rate_schedule_preview_response.py +105 -0
  1159. moolabs/models/rate_schedule_version_out.py +101 -0
  1160. moolabs/models/ratify_family_request.py +91 -0
  1161. moolabs/models/ratify_refinement_request.py +93 -0
  1162. moolabs/models/re_scope_request.py +89 -0
  1163. moolabs/models/readiness_summary.py +89 -0
  1164. moolabs/models/readout_page_response.py +119 -0
  1165. moolabs/models/readout_row_response.py +104 -0
  1166. moolabs/models/readout_snapshot_response.py +116 -0
  1167. moolabs/models/reallocate_request.py +90 -0
  1168. moolabs/models/reallocate_response.py +97 -0
  1169. moolabs/models/reattempt_request.py +88 -0
  1170. moolabs/models/reattempt_response.py +89 -0
  1171. moolabs/models/recall_request.py +87 -0
  1172. moolabs/models/reconcile_request.py +89 -0
  1173. moolabs/models/reconcile_response.py +95 -0
  1174. moolabs/models/reconciliation_basis.py +99 -0
  1175. moolabs/models/reconciliation_basis_out.py +95 -0
  1176. moolabs/models/reconstruction_run_response.py +95 -0
  1177. moolabs/models/record_usage_request.py +115 -0
  1178. moolabs/models/recurring_period.py +96 -0
  1179. moolabs/models/recurring_period_create_input.py +94 -0
  1180. moolabs/models/recurring_period_interval.py +151 -0
  1181. moolabs/models/recurring_period_interval_enum.py +39 -0
  1182. moolabs/models/recurring_period_v2.py +94 -0
  1183. moolabs/models/recurringamount.py +152 -0
  1184. moolabs/models/redline_summary.py +89 -0
  1185. moolabs/models/refund_credit_request.py +90 -0
  1186. moolabs/models/reject_rate_generation_request.py +87 -0
  1187. moolabs/models/remittance_create_request.py +103 -0
  1188. moolabs/models/remittance_list_response.py +101 -0
  1189. moolabs/models/remittance_response.py +120 -0
  1190. moolabs/models/remove_contract_participant_response.py +131 -0
  1191. moolabs/models/remove_phase_shifting.py +37 -0
  1192. moolabs/models/replace_levels_request.py +95 -0
  1193. moolabs/models/replay_dead_letter_request.py +89 -0
  1194. moolabs/models/report_create_request.py +105 -0
  1195. moolabs/models/report_create_response.py +139 -0
  1196. moolabs/models/reporting_line_total.py +153 -0
  1197. moolabs/models/reporting_total_cost.py +153 -0
  1198. moolabs/models/request_cost_distribution.py +127 -0
  1199. moolabs/models/request_evidence_response.py +197 -0
  1200. moolabs/models/request_evidence_row.py +154 -0
  1201. moolabs/models/request_pricing_state.py +40 -0
  1202. moolabs/models/reschedule_request.py +88 -0
  1203. moolabs/models/resend_identity_details.py +104 -0
  1204. moolabs/models/reset_entitlement_usage_input.py +92 -0
  1205. moolabs/models/resolve_unapplied_request.py +87 -0
  1206. moolabs/models/resource_map_create_request.py +103 -0
  1207. moolabs/models/resource_map_response.py +113 -0
  1208. moolabs/models/retry_unpriced_request.py +91 -0
  1209. moolabs/models/retry_unpriced_response.py +91 -0
  1210. moolabs/models/revenue_recognition_request.py +89 -0
  1211. moolabs/models/reversed_settlement_ref.py +93 -0
  1212. moolabs/models/review_quarantined_request.py +95 -0
  1213. moolabs/models/review_quarantined_response.py +95 -0
  1214. moolabs/models/revoke_api_key_request.py +87 -0
  1215. moolabs/models/revoke_portal_token_request.py +87 -0
  1216. moolabs/models/rollover_mode.py +38 -0
  1217. moolabs/models/rollover_request.py +95 -0
  1218. moolabs/models/rollover_response.py +98 -0
  1219. moolabs/models/rollovercapamount.py +152 -0
  1220. moolabs/models/rolloverpercent.py +152 -0
  1221. moolabs/models/rotate_key_request.py +88 -0
  1222. moolabs/models/rotate_key_response.py +92 -0
  1223. moolabs/models/route_update_request.py +110 -0
  1224. moolabs/models/salesforce_connect_request.py +93 -0
  1225. moolabs/models/sample_rate.py +153 -0
  1226. moolabs/models/sandbox_app.py +138 -0
  1227. moolabs/models/sandbox_app_replace_update.py +101 -0
  1228. moolabs/models/sandbox_customer_app_data.py +115 -0
  1229. moolabs/models/save_redline_edit_request.py +95 -0
  1230. moolabs/models/scenario_compare_response.py +97 -0
  1231. moolabs/models/scenario_item.py +117 -0
  1232. moolabs/models/scenario_request.py +96 -0
  1233. moolabs/models/scope_type.py +38 -0
  1234. moolabs/models/sdk_batch_ingest_request.py +96 -0
  1235. moolabs/models/sdk_batch_ingest_response.py +91 -0
  1236. moolabs/models/sdk_event.py +111 -0
  1237. moolabs/models/sdk_span.py +106 -0
  1238. moolabs/models/segment_out.py +95 -0
  1239. moolabs/models/sender_response.py +93 -0
  1240. moolabs/models/sender_update.py +93 -0
  1241. moolabs/models/ses_identity_details.py +127 -0
  1242. moolabs/models/ses_provider_scope_status.py +89 -0
  1243. moolabs/models/set_rate_card_cost_request.py +89 -0
  1244. moolabs/models/severity.py +38 -0
  1245. moolabs/models/shadow_mode_request.py +87 -0
  1246. moolabs/models/shadow_run_list_item.py +101 -0
  1247. moolabs/models/shadow_run_metrics.py +114 -0
  1248. moolabs/models/shadow_run_request.py +92 -0
  1249. moolabs/models/shadow_run_summary.py +95 -0
  1250. moolabs/models/simulate_margin_request.py +100 -0
  1251. moolabs/models/simulate_margin_response.py +115 -0
  1252. moolabs/models/simulate_out.py +103 -0
  1253. moolabs/models/sku_eligibility_list_response.py +95 -0
  1254. moolabs/models/sku_eligibility_row.py +91 -0
  1255. moolabs/models/slack_quote_command_response.py +93 -0
  1256. moolabs/models/snapshot_compute_request.py +104 -0
  1257. moolabs/models/snapshot_compute_response.py +99 -0
  1258. moolabs/models/snapshot_response.py +104 -0
  1259. moolabs/models/sns_confirmation_command_out.py +98 -0
  1260. moolabs/models/sns_confirmation_confirmed_out.py +94 -0
  1261. moolabs/models/sns_confirmation_confirmed_request.py +101 -0
  1262. moolabs/models/sns_confirmation_list_out.py +95 -0
  1263. moolabs/models/sort_direction.py +37 -0
  1264. moolabs/models/sort_order.py +37 -0
  1265. moolabs/models/spend_summary.py +114 -0
  1266. moolabs/models/stage_schema.py +117 -0
  1267. moolabs/models/strategy_create_request.py +130 -0
  1268. moolabs/models/strategy_preview_request.py +87 -0
  1269. moolabs/models/strategy_update_request.py +133 -0
  1270. moolabs/models/stripe_api_key_input.py +87 -0
  1271. moolabs/models/stripe_app.py +150 -0
  1272. moolabs/models/stripe_app_replace_update.py +103 -0
  1273. moolabs/models/stripe_checkout_session_mode.py +36 -0
  1274. moolabs/models/stripe_customer_app_data.py +119 -0
  1275. moolabs/models/stripe_customer_app_data_base.py +89 -0
  1276. moolabs/models/stripe_customer_app_data_create_or_update_item.py +111 -0
  1277. moolabs/models/stripe_customer_portal_session.py +102 -0
  1278. moolabs/models/stripe_tax_config.py +95 -0
  1279. moolabs/models/stripe_webhook_event.py +99 -0
  1280. moolabs/models/stripe_webhook_event_data.py +92 -0
  1281. moolabs/models/stripe_webhook_response.py +118 -0
  1282. moolabs/models/subject.py +122 -0
  1283. moolabs/models/subject_upsert.py +98 -0
  1284. moolabs/models/subscription.py +201 -0
  1285. moolabs/models/subscription_activate_request.py +101 -0
  1286. moolabs/models/subscription_addon.py +167 -0
  1287. moolabs/models/subscription_addon_create.py +106 -0
  1288. moolabs/models/subscription_addon_rate_card.py +94 -0
  1289. moolabs/models/subscription_addon_timeline_segment.py +95 -0
  1290. moolabs/models/subscription_addon_update.py +100 -0
  1291. moolabs/models/subscription_alignment.py +93 -0
  1292. moolabs/models/subscription_bad_request_error_response.py +102 -0
  1293. moolabs/models/subscription_change.py +147 -0
  1294. moolabs/models/subscription_change_response_body.py +97 -0
  1295. moolabs/models/subscription_conflict_error_response.py +102 -0
  1296. moolabs/models/subscription_create.py +147 -0
  1297. moolabs/models/subscription_edit.py +102 -0
  1298. moolabs/models/subscription_edit_operation.py +206 -0
  1299. moolabs/models/subscription_error_extensions.py +95 -0
  1300. moolabs/models/subscription_expanded.py +211 -0
  1301. moolabs/models/subscription_item.py +167 -0
  1302. moolabs/models/subscription_item_included.py +97 -0
  1303. moolabs/models/subscription_item_price_override.py +111 -0
  1304. moolabs/models/subscription_item_price_override_type.py +37 -0
  1305. moolabs/models/subscription_paginated_response.py +101 -0
  1306. moolabs/models/subscription_phase_create.py +109 -0
  1307. moolabs/models/subscription_phase_expanded.py +163 -0
  1308. moolabs/models/subscription_ramp_phase.py +91 -0
  1309. moolabs/models/subscription_status.py +39 -0
  1310. moolabs/models/subscription_timing.py +151 -0
  1311. moolabs/models/subscription_timing_enum.py +37 -0
  1312. moolabs/models/sync_config_request.py +109 -0
  1313. moolabs/models/sync_config_response.py +111 -0
  1314. moolabs/models/sync_invoices_request.py +87 -0
  1315. moolabs/models/sync_run_item.py +102 -0
  1316. moolabs/models/synthetic_request_evidence_row.py +118 -0
  1317. moolabs/models/task_complete_request.py +92 -0
  1318. moolabs/models/task_list_response.py +101 -0
  1319. moolabs/models/task_response.py +130 -0
  1320. moolabs/models/task_update.py +93 -0
  1321. moolabs/models/tax_behavior.py +37 -0
  1322. moolabs/models/tax_config.py +100 -0
  1323. moolabs/models/template_archive_request.py +88 -0
  1324. moolabs/models/template_card_action_request.py +99 -0
  1325. moolabs/models/template_item.py +97 -0
  1326. moolabs/models/template_key_create_request.py +92 -0
  1327. moolabs/models/template_key_list_response.py +116 -0
  1328. moolabs/models/template_key_response.py +126 -0
  1329. moolabs/models/template_meta_response.py +93 -0
  1330. moolabs/models/template_preview_request.py +87 -0
  1331. moolabs/models/template_preview_response.py +101 -0
  1332. moolabs/models/template_test_send_request.py +87 -0
  1333. moolabs/models/template_test_send_response.py +93 -0
  1334. moolabs/models/template_update.py +91 -0
  1335. moolabs/models/template_version_list_response.py +95 -0
  1336. moolabs/models/template_version_response.py +143 -0
  1337. moolabs/models/tenant_config_response.py +95 -0
  1338. moolabs/models/tenant_escalation_config_out.py +97 -0
  1339. moolabs/models/tenant_escalation_config_patch.py +92 -0
  1340. moolabs/models/tenant_provision_request.py +89 -0
  1341. moolabs/models/tenant_segment_entry.py +89 -0
  1342. moolabs/models/tenant_segments_response.py +97 -0
  1343. moolabs/models/tenant_unit_economics.py +97 -0
  1344. moolabs/models/territory_in.py +89 -0
  1345. moolabs/models/test_send_request.py +104 -0
  1346. moolabs/models/test_send_response.py +93 -0
  1347. moolabs/models/tiered_price_mode.py +37 -0
  1348. moolabs/models/tiered_price_with_commitments.py +132 -0
  1349. moolabs/models/tiered_pricing_payload.py +97 -0
  1350. moolabs/models/timestamp_window.py +103 -0
  1351. moolabs/models/top_consumer.py +93 -0
  1352. moolabs/models/topup_defaults_request.py +93 -0
  1353. moolabs/models/total_cost.py +153 -0
  1354. moolabs/models/traces_response.py +95 -0
  1355. moolabs/models/trend_data_point.py +91 -0
  1356. moolabs/models/trend_point.py +116 -0
  1357. moolabs/models/trigger_request.py +87 -0
  1358. moolabs/models/ulidor_external_key.py +153 -0
  1359. moolabs/models/unapplied_cash_response.py +106 -0
  1360. moolabs/models/unavailable_reason.py +66 -0
  1361. moolabs/models/unexpected_problem_response.py +111 -0
  1362. moolabs/models/unified_price_row_input.py +99 -0
  1363. moolabs/models/unified_price_row_out.py +109 -0
  1364. moolabs/models/unit_cost.py +153 -0
  1365. moolabs/models/unit_economics.py +97 -0
  1366. moolabs/models/unit_price.py +104 -0
  1367. moolabs/models/unit_price_with_commitments.py +128 -0
  1368. moolabs/models/unitamount.py +152 -0
  1369. moolabs/models/update_approval_policy_request.py +87 -0
  1370. moolabs/models/update_auto_topup_rule_request.py +102 -0
  1371. moolabs/models/update_credit_pool_request.py +98 -0
  1372. moolabs/models/update_quote_template_request.py +102 -0
  1373. moolabs/models/update_threshold_request.py +97 -0
  1374. moolabs/models/update_wallet_settings_request.py +95 -0
  1375. moolabs/models/update_wallet_thresholds_request.py +92 -0
  1376. moolabs/models/upsert_fx_rate_request.py +92 -0
  1377. moolabs/models/upsert_provider_identity_request.py +115 -0
  1378. moolabs/models/upto.py +152 -0
  1379. moolabs/models/usage_summary_window_size.py +37 -0
  1380. moolabs/models/validate_template_request.py +116 -0
  1381. moolabs/models/validate_template_response.py +89 -0
  1382. moolabs/models/validation_error.py +99 -0
  1383. moolabs/models/validation_error_loc_inner.py +152 -0
  1384. moolabs/models/validation_issue.py +135 -0
  1385. moolabs/models/validation_issue_severity.py +37 -0
  1386. moolabs/models/validation_response.py +105 -0
  1387. moolabs/models/value_recognition_response.py +93 -0
  1388. moolabs/models/variance_decomposition_out.py +117 -0
  1389. moolabs/models/variance_summary_response.py +101 -0
  1390. moolabs/models/verification_status.py +39 -0
  1391. moolabs/models/void_grant_request.py +88 -0
  1392. moolabs/models/void_invoice_action_create.py +93 -0
  1393. moolabs/models/void_invoice_action_create_item.py +93 -0
  1394. moolabs/models/void_invoice_action_input.py +103 -0
  1395. moolabs/models/void_invoice_action_line_override.py +101 -0
  1396. moolabs/models/void_invoice_line_action_create.py +150 -0
  1397. moolabs/models/void_invoice_line_action_create_item.py +150 -0
  1398. moolabs/models/void_invoice_line_discard_action.py +94 -0
  1399. moolabs/models/void_invoice_line_pending_action_create.py +97 -0
  1400. moolabs/models/void_invoice_line_pending_action_create_item.py +97 -0
  1401. moolabs/models/volume_summary.py +114 -0
  1402. moolabs/models/wallet_owner_type.py +43 -0
  1403. moolabs/models/wallet_policy.py +38 -0
  1404. moolabs/models/wallet_response.py +112 -0
  1405. moolabs/models/wallet_state_response.py +105 -0
  1406. moolabs/models/warning_item.py +93 -0
  1407. moolabs/models/webhook_response.py +95 -0
  1408. moolabs/models/webhook_update.py +95 -0
  1409. moolabs/models/window_size.py +39 -0
  1410. moolabs/models/windowed_balance_history.py +105 -0
  1411. moolabs/models/xero_connect_request.py +91 -0
  1412. moolabs/py.typed +0 -0
  1413. moolabs/rest.py +257 -0
  1414. moolabs-0.3.0.dist-info/METADATA +31 -0
  1415. moolabs-0.3.0.dist-info/RECORD +1417 -0
  1416. moolabs-0.3.0.dist-info/WHEEL +5 -0
  1417. moolabs-0.3.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,2301 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Moolabs API
5
+
6
+ Unified Moolabs SDK. Capability-based public surface stitched from internal service specs: bff, meter, arc, acute. Customers see capability namespaces (usage, billing, collections, etc.); the SDK routes per-operation internally.
7
+
8
+ The version of the OpenAPI document: 0.3.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+ import warnings
15
+ from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
16
+ from typing import Any, Dict, List, Optional, Tuple, Union
17
+ from typing_extensions import Annotated
18
+
19
+ from datetime import datetime
20
+ from pydantic import Field, StrictBool, StrictStr
21
+ from typing import Optional
22
+ from typing_extensions import Annotated
23
+ from moolabs.models.completeness_response import CompletenessResponse
24
+ from moolabs.models.credit_cost_ratio_response import CreditCostRatioResponse
25
+ from moolabs.models.customer_margin_response import CustomerMarginResponse
26
+ from moolabs.models.feature_margin_response import FeatureMarginResponse
27
+ from moolabs.models.margin_snapshot_response import MarginSnapshotResponse
28
+ from moolabs.models.reconcile_request import ReconcileRequest
29
+ from moolabs.models.reconcile_response import ReconcileResponse
30
+ from moolabs.models.snapshot_compute_request import SnapshotComputeRequest
31
+ from moolabs.models.snapshot_compute_response import SnapshotComputeResponse
32
+
33
+ from moolabs.api_client import ApiClient, RequestSerialized
34
+ from moolabs.api_response import ApiResponse
35
+ from moolabs.rest import RESTResponseType
36
+
37
+
38
+ class MarginsApi:
39
+ """NOTE: This class is auto generated by OpenAPI Generator
40
+ Ref: https://openapi-generator.tech
41
+
42
+ Do not edit the class manually.
43
+ """
44
+
45
+ def __init__(self, api_client=None) -> None:
46
+ if api_client is None:
47
+ api_client = ApiClient.get_default()
48
+ self.api_client = api_client
49
+
50
+
51
+ @validate_call
52
+ def get_completeness(
53
+ self,
54
+ match_grade: Annotated[Optional[StrictStr], Field(description="'financial_only' or 'include_operational'")] = None,
55
+ include_partial: Annotated[Optional[StrictBool], Field(description="Include partially_reconciled billing events")] = None,
56
+ period_start: Annotated[Optional[datetime], Field(description="ISO datetime start (inclusive)")] = None,
57
+ period_end: Annotated[Optional[datetime], Field(description="ISO datetime end (exclusive)")] = None,
58
+ _request_timeout: Union[
59
+ None,
60
+ Annotated[StrictFloat, Field(gt=0)],
61
+ Tuple[
62
+ Annotated[StrictFloat, Field(gt=0)],
63
+ Annotated[StrictFloat, Field(gt=0)]
64
+ ]
65
+ ] = None,
66
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
67
+ _content_type: Optional[StrictStr] = None,
68
+ _headers: Optional[Dict[StrictStr, Any]] = None,
69
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
70
+ ) -> CompletenessResponse:
71
+ """Financial completeness metric
72
+
73
+ Financial completeness = count(usage_events with status=fully_reconciled) / count(all AI usage_events in usage_event_log)
74
+
75
+ :param match_grade: 'financial_only' or 'include_operational'
76
+ :type match_grade: str
77
+ :param include_partial: Include partially_reconciled billing events
78
+ :type include_partial: bool
79
+ :param period_start: ISO datetime start (inclusive)
80
+ :type period_start: datetime
81
+ :param period_end: ISO datetime end (exclusive)
82
+ :type period_end: datetime
83
+ :param _request_timeout: timeout setting for this request. If one
84
+ number provided, it will be total request
85
+ timeout. It can also be a pair (tuple) of
86
+ (connection, read) timeouts.
87
+ :type _request_timeout: int, tuple(int, int), optional
88
+ :param _request_auth: set to override the auth_settings for an a single
89
+ request; this effectively ignores the
90
+ authentication in the spec for a single request.
91
+ :type _request_auth: dict, optional
92
+ :param _content_type: force content-type for the request.
93
+ :type _content_type: str, Optional
94
+ :param _headers: set to override the headers for a single
95
+ request; this effectively ignores the headers
96
+ in the spec for a single request.
97
+ :type _headers: dict, optional
98
+ :param _host_index: set to override the host_index for a single
99
+ request; this effectively ignores the host_index
100
+ in the spec for a single request.
101
+ :type _host_index: int, optional
102
+ :return: Returns the result object.
103
+ """ # noqa: E501
104
+
105
+ _param = self._get_completeness_serialize(
106
+ match_grade=match_grade,
107
+ include_partial=include_partial,
108
+ period_start=period_start,
109
+ period_end=period_end,
110
+ _request_auth=_request_auth,
111
+ _content_type=_content_type,
112
+ _headers=_headers,
113
+ _host_index=_host_index
114
+ )
115
+
116
+ _response_types_map: Dict[str, Optional[str]] = {
117
+ '200': "CompletenessResponse",
118
+ '422': "AcuteHTTPValidationError",
119
+ }
120
+ response_data = self.api_client.call_api(
121
+ *_param,
122
+ _request_timeout=_request_timeout
123
+ )
124
+ response_data.read()
125
+ return self.api_client.response_deserialize(
126
+ response_data=response_data,
127
+ response_types_map=_response_types_map,
128
+ ).data
129
+
130
+
131
+ @validate_call
132
+ def get_completeness_with_http_info(
133
+ self,
134
+ match_grade: Annotated[Optional[StrictStr], Field(description="'financial_only' or 'include_operational'")] = None,
135
+ include_partial: Annotated[Optional[StrictBool], Field(description="Include partially_reconciled billing events")] = None,
136
+ period_start: Annotated[Optional[datetime], Field(description="ISO datetime start (inclusive)")] = None,
137
+ period_end: Annotated[Optional[datetime], Field(description="ISO datetime end (exclusive)")] = None,
138
+ _request_timeout: Union[
139
+ None,
140
+ Annotated[StrictFloat, Field(gt=0)],
141
+ Tuple[
142
+ Annotated[StrictFloat, Field(gt=0)],
143
+ Annotated[StrictFloat, Field(gt=0)]
144
+ ]
145
+ ] = None,
146
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
147
+ _content_type: Optional[StrictStr] = None,
148
+ _headers: Optional[Dict[StrictStr, Any]] = None,
149
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
150
+ ) -> ApiResponse[CompletenessResponse]:
151
+ """Financial completeness metric
152
+
153
+ Financial completeness = count(usage_events with status=fully_reconciled) / count(all AI usage_events in usage_event_log)
154
+
155
+ :param match_grade: 'financial_only' or 'include_operational'
156
+ :type match_grade: str
157
+ :param include_partial: Include partially_reconciled billing events
158
+ :type include_partial: bool
159
+ :param period_start: ISO datetime start (inclusive)
160
+ :type period_start: datetime
161
+ :param period_end: ISO datetime end (exclusive)
162
+ :type period_end: datetime
163
+ :param _request_timeout: timeout setting for this request. If one
164
+ number provided, it will be total request
165
+ timeout. It can also be a pair (tuple) of
166
+ (connection, read) timeouts.
167
+ :type _request_timeout: int, tuple(int, int), optional
168
+ :param _request_auth: set to override the auth_settings for an a single
169
+ request; this effectively ignores the
170
+ authentication in the spec for a single request.
171
+ :type _request_auth: dict, optional
172
+ :param _content_type: force content-type for the request.
173
+ :type _content_type: str, Optional
174
+ :param _headers: set to override the headers for a single
175
+ request; this effectively ignores the headers
176
+ in the spec for a single request.
177
+ :type _headers: dict, optional
178
+ :param _host_index: set to override the host_index for a single
179
+ request; this effectively ignores the host_index
180
+ in the spec for a single request.
181
+ :type _host_index: int, optional
182
+ :return: Returns the result object.
183
+ """ # noqa: E501
184
+
185
+ _param = self._get_completeness_serialize(
186
+ match_grade=match_grade,
187
+ include_partial=include_partial,
188
+ period_start=period_start,
189
+ period_end=period_end,
190
+ _request_auth=_request_auth,
191
+ _content_type=_content_type,
192
+ _headers=_headers,
193
+ _host_index=_host_index
194
+ )
195
+
196
+ _response_types_map: Dict[str, Optional[str]] = {
197
+ '200': "CompletenessResponse",
198
+ '422': "AcuteHTTPValidationError",
199
+ }
200
+ response_data = self.api_client.call_api(
201
+ *_param,
202
+ _request_timeout=_request_timeout
203
+ )
204
+ response_data.read()
205
+ return self.api_client.response_deserialize(
206
+ response_data=response_data,
207
+ response_types_map=_response_types_map,
208
+ )
209
+
210
+
211
+ @validate_call
212
+ def get_completeness_without_preload_content(
213
+ self,
214
+ match_grade: Annotated[Optional[StrictStr], Field(description="'financial_only' or 'include_operational'")] = None,
215
+ include_partial: Annotated[Optional[StrictBool], Field(description="Include partially_reconciled billing events")] = None,
216
+ period_start: Annotated[Optional[datetime], Field(description="ISO datetime start (inclusive)")] = None,
217
+ period_end: Annotated[Optional[datetime], Field(description="ISO datetime end (exclusive)")] = None,
218
+ _request_timeout: Union[
219
+ None,
220
+ Annotated[StrictFloat, Field(gt=0)],
221
+ Tuple[
222
+ Annotated[StrictFloat, Field(gt=0)],
223
+ Annotated[StrictFloat, Field(gt=0)]
224
+ ]
225
+ ] = None,
226
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
227
+ _content_type: Optional[StrictStr] = None,
228
+ _headers: Optional[Dict[StrictStr, Any]] = None,
229
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
230
+ ) -> RESTResponseType:
231
+ """Financial completeness metric
232
+
233
+ Financial completeness = count(usage_events with status=fully_reconciled) / count(all AI usage_events in usage_event_log)
234
+
235
+ :param match_grade: 'financial_only' or 'include_operational'
236
+ :type match_grade: str
237
+ :param include_partial: Include partially_reconciled billing events
238
+ :type include_partial: bool
239
+ :param period_start: ISO datetime start (inclusive)
240
+ :type period_start: datetime
241
+ :param period_end: ISO datetime end (exclusive)
242
+ :type period_end: datetime
243
+ :param _request_timeout: timeout setting for this request. If one
244
+ number provided, it will be total request
245
+ timeout. It can also be a pair (tuple) of
246
+ (connection, read) timeouts.
247
+ :type _request_timeout: int, tuple(int, int), optional
248
+ :param _request_auth: set to override the auth_settings for an a single
249
+ request; this effectively ignores the
250
+ authentication in the spec for a single request.
251
+ :type _request_auth: dict, optional
252
+ :param _content_type: force content-type for the request.
253
+ :type _content_type: str, Optional
254
+ :param _headers: set to override the headers for a single
255
+ request; this effectively ignores the headers
256
+ in the spec for a single request.
257
+ :type _headers: dict, optional
258
+ :param _host_index: set to override the host_index for a single
259
+ request; this effectively ignores the host_index
260
+ in the spec for a single request.
261
+ :type _host_index: int, optional
262
+ :return: Returns the result object.
263
+ """ # noqa: E501
264
+
265
+ _param = self._get_completeness_serialize(
266
+ match_grade=match_grade,
267
+ include_partial=include_partial,
268
+ period_start=period_start,
269
+ period_end=period_end,
270
+ _request_auth=_request_auth,
271
+ _content_type=_content_type,
272
+ _headers=_headers,
273
+ _host_index=_host_index
274
+ )
275
+
276
+ _response_types_map: Dict[str, Optional[str]] = {
277
+ '200': "CompletenessResponse",
278
+ '422': "AcuteHTTPValidationError",
279
+ }
280
+ response_data = self.api_client.call_api(
281
+ *_param,
282
+ _request_timeout=_request_timeout
283
+ )
284
+ return response_data.response
285
+
286
+
287
+ def _get_completeness_serialize(
288
+ self,
289
+ match_grade,
290
+ include_partial,
291
+ period_start,
292
+ period_end,
293
+ _request_auth,
294
+ _content_type,
295
+ _headers,
296
+ _host_index,
297
+ ) -> RequestSerialized:
298
+
299
+ _host = None
300
+
301
+ _collection_formats: Dict[str, str] = {
302
+ }
303
+
304
+ _path_params: Dict[str, str] = {}
305
+ _query_params: List[Tuple[str, str]] = []
306
+ _header_params: Dict[str, Optional[str]] = _headers or {}
307
+ _form_params: List[Tuple[str, str]] = []
308
+ _files: Dict[
309
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
310
+ ] = {}
311
+ _body_params: Optional[bytes] = None
312
+
313
+ # process the path parameters
314
+ # process the query parameters
315
+ if match_grade is not None:
316
+
317
+ _query_params.append(('match_grade', match_grade))
318
+
319
+ if include_partial is not None:
320
+
321
+ _query_params.append(('include_partial', include_partial))
322
+
323
+ if period_start is not None:
324
+ if isinstance(period_start, datetime):
325
+ _query_params.append(
326
+ (
327
+ 'period_start',
328
+ period_start.strftime(
329
+ self.api_client.configuration.datetime_format
330
+ )
331
+ )
332
+ )
333
+ else:
334
+ _query_params.append(('period_start', period_start))
335
+
336
+ if period_end is not None:
337
+ if isinstance(period_end, datetime):
338
+ _query_params.append(
339
+ (
340
+ 'period_end',
341
+ period_end.strftime(
342
+ self.api_client.configuration.datetime_format
343
+ )
344
+ )
345
+ )
346
+ else:
347
+ _query_params.append(('period_end', period_end))
348
+
349
+ # process the header parameters
350
+ # process the form parameters
351
+ # process the body parameter
352
+
353
+
354
+ # set the HTTP header `Accept`
355
+ if 'Accept' not in _header_params:
356
+ _header_params['Accept'] = self.api_client.select_header_accept(
357
+ [
358
+ 'application/json'
359
+ ]
360
+ )
361
+
362
+
363
+ # authentication setting
364
+ _auth_settings: List[str] = [
365
+ 'APIKeyHeader',
366
+ 'HTTPBearer'
367
+ ]
368
+
369
+ return self.api_client.param_serialize(
370
+ method='GET',
371
+ resource_path='/api/v1/cost/margins/completeness',
372
+ path_params=_path_params,
373
+ query_params=_query_params,
374
+ header_params=_header_params,
375
+ body=_body_params,
376
+ post_params=_form_params,
377
+ files=_files,
378
+ auth_settings=_auth_settings,
379
+ collection_formats=_collection_formats,
380
+ _host=_host,
381
+ _request_auth=_request_auth
382
+ )
383
+
384
+
385
+
386
+
387
+ @validate_call
388
+ def get_credit_cost_ratio_api_v1(
389
+ self,
390
+ match_grade: Annotated[Optional[StrictStr], Field(description="'financial_only' or 'include_operational'")] = None,
391
+ include_partial: Annotated[Optional[StrictBool], Field(description="Include partially_reconciled billing events")] = None,
392
+ period_start: Annotated[Optional[datetime], Field(description="ISO datetime start (inclusive)")] = None,
393
+ period_end: Annotated[Optional[datetime], Field(description="ISO datetime end (exclusive)")] = None,
394
+ _request_timeout: Union[
395
+ None,
396
+ Annotated[StrictFloat, Field(gt=0)],
397
+ Tuple[
398
+ Annotated[StrictFloat, Field(gt=0)],
399
+ Annotated[StrictFloat, Field(gt=0)]
400
+ ]
401
+ ] = None,
402
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
403
+ _content_type: Optional[StrictStr] = None,
404
+ _headers: Optional[Dict[StrictStr, Any]] = None,
405
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
406
+ ) -> CreditCostRatioResponse:
407
+ """Daily valued_burn / total_cost ratio time series
408
+
409
+ Daily time series of valued_burn / total_cost ratio. Uses fully_reconciled events only.
410
+
411
+ :param match_grade: 'financial_only' or 'include_operational'
412
+ :type match_grade: str
413
+ :param include_partial: Include partially_reconciled billing events
414
+ :type include_partial: bool
415
+ :param period_start: ISO datetime start (inclusive)
416
+ :type period_start: datetime
417
+ :param period_end: ISO datetime end (exclusive)
418
+ :type period_end: datetime
419
+ :param _request_timeout: timeout setting for this request. If one
420
+ number provided, it will be total request
421
+ timeout. It can also be a pair (tuple) of
422
+ (connection, read) timeouts.
423
+ :type _request_timeout: int, tuple(int, int), optional
424
+ :param _request_auth: set to override the auth_settings for an a single
425
+ request; this effectively ignores the
426
+ authentication in the spec for a single request.
427
+ :type _request_auth: dict, optional
428
+ :param _content_type: force content-type for the request.
429
+ :type _content_type: str, Optional
430
+ :param _headers: set to override the headers for a single
431
+ request; this effectively ignores the headers
432
+ in the spec for a single request.
433
+ :type _headers: dict, optional
434
+ :param _host_index: set to override the host_index for a single
435
+ request; this effectively ignores the host_index
436
+ in the spec for a single request.
437
+ :type _host_index: int, optional
438
+ :return: Returns the result object.
439
+ """ # noqa: E501
440
+
441
+ _param = self._get_credit_cost_ratio_api_v1_serialize(
442
+ match_grade=match_grade,
443
+ include_partial=include_partial,
444
+ period_start=period_start,
445
+ period_end=period_end,
446
+ _request_auth=_request_auth,
447
+ _content_type=_content_type,
448
+ _headers=_headers,
449
+ _host_index=_host_index
450
+ )
451
+
452
+ _response_types_map: Dict[str, Optional[str]] = {
453
+ '200': "CreditCostRatioResponse",
454
+ '422': "AcuteHTTPValidationError",
455
+ }
456
+ response_data = self.api_client.call_api(
457
+ *_param,
458
+ _request_timeout=_request_timeout
459
+ )
460
+ response_data.read()
461
+ return self.api_client.response_deserialize(
462
+ response_data=response_data,
463
+ response_types_map=_response_types_map,
464
+ ).data
465
+
466
+
467
+ @validate_call
468
+ def get_credit_cost_ratio_api_v1_with_http_info(
469
+ self,
470
+ match_grade: Annotated[Optional[StrictStr], Field(description="'financial_only' or 'include_operational'")] = None,
471
+ include_partial: Annotated[Optional[StrictBool], Field(description="Include partially_reconciled billing events")] = None,
472
+ period_start: Annotated[Optional[datetime], Field(description="ISO datetime start (inclusive)")] = None,
473
+ period_end: Annotated[Optional[datetime], Field(description="ISO datetime end (exclusive)")] = None,
474
+ _request_timeout: Union[
475
+ None,
476
+ Annotated[StrictFloat, Field(gt=0)],
477
+ Tuple[
478
+ Annotated[StrictFloat, Field(gt=0)],
479
+ Annotated[StrictFloat, Field(gt=0)]
480
+ ]
481
+ ] = None,
482
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
483
+ _content_type: Optional[StrictStr] = None,
484
+ _headers: Optional[Dict[StrictStr, Any]] = None,
485
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
486
+ ) -> ApiResponse[CreditCostRatioResponse]:
487
+ """Daily valued_burn / total_cost ratio time series
488
+
489
+ Daily time series of valued_burn / total_cost ratio. Uses fully_reconciled events only.
490
+
491
+ :param match_grade: 'financial_only' or 'include_operational'
492
+ :type match_grade: str
493
+ :param include_partial: Include partially_reconciled billing events
494
+ :type include_partial: bool
495
+ :param period_start: ISO datetime start (inclusive)
496
+ :type period_start: datetime
497
+ :param period_end: ISO datetime end (exclusive)
498
+ :type period_end: datetime
499
+ :param _request_timeout: timeout setting for this request. If one
500
+ number provided, it will be total request
501
+ timeout. It can also be a pair (tuple) of
502
+ (connection, read) timeouts.
503
+ :type _request_timeout: int, tuple(int, int), optional
504
+ :param _request_auth: set to override the auth_settings for an a single
505
+ request; this effectively ignores the
506
+ authentication in the spec for a single request.
507
+ :type _request_auth: dict, optional
508
+ :param _content_type: force content-type for the request.
509
+ :type _content_type: str, Optional
510
+ :param _headers: set to override the headers for a single
511
+ request; this effectively ignores the headers
512
+ in the spec for a single request.
513
+ :type _headers: dict, optional
514
+ :param _host_index: set to override the host_index for a single
515
+ request; this effectively ignores the host_index
516
+ in the spec for a single request.
517
+ :type _host_index: int, optional
518
+ :return: Returns the result object.
519
+ """ # noqa: E501
520
+
521
+ _param = self._get_credit_cost_ratio_api_v1_serialize(
522
+ match_grade=match_grade,
523
+ include_partial=include_partial,
524
+ period_start=period_start,
525
+ period_end=period_end,
526
+ _request_auth=_request_auth,
527
+ _content_type=_content_type,
528
+ _headers=_headers,
529
+ _host_index=_host_index
530
+ )
531
+
532
+ _response_types_map: Dict[str, Optional[str]] = {
533
+ '200': "CreditCostRatioResponse",
534
+ '422': "AcuteHTTPValidationError",
535
+ }
536
+ response_data = self.api_client.call_api(
537
+ *_param,
538
+ _request_timeout=_request_timeout
539
+ )
540
+ response_data.read()
541
+ return self.api_client.response_deserialize(
542
+ response_data=response_data,
543
+ response_types_map=_response_types_map,
544
+ )
545
+
546
+
547
+ @validate_call
548
+ def get_credit_cost_ratio_api_v1_without_preload_content(
549
+ self,
550
+ match_grade: Annotated[Optional[StrictStr], Field(description="'financial_only' or 'include_operational'")] = None,
551
+ include_partial: Annotated[Optional[StrictBool], Field(description="Include partially_reconciled billing events")] = None,
552
+ period_start: Annotated[Optional[datetime], Field(description="ISO datetime start (inclusive)")] = None,
553
+ period_end: Annotated[Optional[datetime], Field(description="ISO datetime end (exclusive)")] = None,
554
+ _request_timeout: Union[
555
+ None,
556
+ Annotated[StrictFloat, Field(gt=0)],
557
+ Tuple[
558
+ Annotated[StrictFloat, Field(gt=0)],
559
+ Annotated[StrictFloat, Field(gt=0)]
560
+ ]
561
+ ] = None,
562
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
563
+ _content_type: Optional[StrictStr] = None,
564
+ _headers: Optional[Dict[StrictStr, Any]] = None,
565
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
566
+ ) -> RESTResponseType:
567
+ """Daily valued_burn / total_cost ratio time series
568
+
569
+ Daily time series of valued_burn / total_cost ratio. Uses fully_reconciled events only.
570
+
571
+ :param match_grade: 'financial_only' or 'include_operational'
572
+ :type match_grade: str
573
+ :param include_partial: Include partially_reconciled billing events
574
+ :type include_partial: bool
575
+ :param period_start: ISO datetime start (inclusive)
576
+ :type period_start: datetime
577
+ :param period_end: ISO datetime end (exclusive)
578
+ :type period_end: datetime
579
+ :param _request_timeout: timeout setting for this request. If one
580
+ number provided, it will be total request
581
+ timeout. It can also be a pair (tuple) of
582
+ (connection, read) timeouts.
583
+ :type _request_timeout: int, tuple(int, int), optional
584
+ :param _request_auth: set to override the auth_settings for an a single
585
+ request; this effectively ignores the
586
+ authentication in the spec for a single request.
587
+ :type _request_auth: dict, optional
588
+ :param _content_type: force content-type for the request.
589
+ :type _content_type: str, Optional
590
+ :param _headers: set to override the headers for a single
591
+ request; this effectively ignores the headers
592
+ in the spec for a single request.
593
+ :type _headers: dict, optional
594
+ :param _host_index: set to override the host_index for a single
595
+ request; this effectively ignores the host_index
596
+ in the spec for a single request.
597
+ :type _host_index: int, optional
598
+ :return: Returns the result object.
599
+ """ # noqa: E501
600
+
601
+ _param = self._get_credit_cost_ratio_api_v1_serialize(
602
+ match_grade=match_grade,
603
+ include_partial=include_partial,
604
+ period_start=period_start,
605
+ period_end=period_end,
606
+ _request_auth=_request_auth,
607
+ _content_type=_content_type,
608
+ _headers=_headers,
609
+ _host_index=_host_index
610
+ )
611
+
612
+ _response_types_map: Dict[str, Optional[str]] = {
613
+ '200': "CreditCostRatioResponse",
614
+ '422': "AcuteHTTPValidationError",
615
+ }
616
+ response_data = self.api_client.call_api(
617
+ *_param,
618
+ _request_timeout=_request_timeout
619
+ )
620
+ return response_data.response
621
+
622
+
623
+ def _get_credit_cost_ratio_api_v1_serialize(
624
+ self,
625
+ match_grade,
626
+ include_partial,
627
+ period_start,
628
+ period_end,
629
+ _request_auth,
630
+ _content_type,
631
+ _headers,
632
+ _host_index,
633
+ ) -> RequestSerialized:
634
+
635
+ _host = None
636
+
637
+ _collection_formats: Dict[str, str] = {
638
+ }
639
+
640
+ _path_params: Dict[str, str] = {}
641
+ _query_params: List[Tuple[str, str]] = []
642
+ _header_params: Dict[str, Optional[str]] = _headers or {}
643
+ _form_params: List[Tuple[str, str]] = []
644
+ _files: Dict[
645
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
646
+ ] = {}
647
+ _body_params: Optional[bytes] = None
648
+
649
+ # process the path parameters
650
+ # process the query parameters
651
+ if match_grade is not None:
652
+
653
+ _query_params.append(('match_grade', match_grade))
654
+
655
+ if include_partial is not None:
656
+
657
+ _query_params.append(('include_partial', include_partial))
658
+
659
+ if period_start is not None:
660
+ if isinstance(period_start, datetime):
661
+ _query_params.append(
662
+ (
663
+ 'period_start',
664
+ period_start.strftime(
665
+ self.api_client.configuration.datetime_format
666
+ )
667
+ )
668
+ )
669
+ else:
670
+ _query_params.append(('period_start', period_start))
671
+
672
+ if period_end is not None:
673
+ if isinstance(period_end, datetime):
674
+ _query_params.append(
675
+ (
676
+ 'period_end',
677
+ period_end.strftime(
678
+ self.api_client.configuration.datetime_format
679
+ )
680
+ )
681
+ )
682
+ else:
683
+ _query_params.append(('period_end', period_end))
684
+
685
+ # process the header parameters
686
+ # process the form parameters
687
+ # process the body parameter
688
+
689
+
690
+ # set the HTTP header `Accept`
691
+ if 'Accept' not in _header_params:
692
+ _header_params['Accept'] = self.api_client.select_header_accept(
693
+ [
694
+ 'application/json'
695
+ ]
696
+ )
697
+
698
+
699
+ # authentication setting
700
+ _auth_settings: List[str] = [
701
+ 'APIKeyHeader',
702
+ 'HTTPBearer'
703
+ ]
704
+
705
+ return self.api_client.param_serialize(
706
+ method='GET',
707
+ resource_path='/api/v1/cost/margins/credit-cost-ratio',
708
+ path_params=_path_params,
709
+ query_params=_query_params,
710
+ header_params=_header_params,
711
+ body=_body_params,
712
+ post_params=_form_params,
713
+ files=_files,
714
+ auth_settings=_auth_settings,
715
+ collection_formats=_collection_formats,
716
+ _host=_host,
717
+ _request_auth=_request_auth
718
+ )
719
+
720
+
721
+
722
+
723
+ @validate_call
724
+ def get_margin_by_customer_api(
725
+ self,
726
+ match_grade: Annotated[Optional[StrictStr], Field(description="'financial_only' or 'include_operational'")] = None,
727
+ include_partial: Annotated[Optional[StrictBool], Field(description="Include partially_reconciled billing events")] = None,
728
+ period_start: Annotated[Optional[datetime], Field(description="ISO datetime start (inclusive)")] = None,
729
+ period_end: Annotated[Optional[datetime], Field(description="ISO datetime end (exclusive)")] = None,
730
+ _request_timeout: Union[
731
+ None,
732
+ Annotated[StrictFloat, Field(gt=0)],
733
+ Tuple[
734
+ Annotated[StrictFloat, Field(gt=0)],
735
+ Annotated[StrictFloat, Field(gt=0)]
736
+ ]
737
+ ] = None,
738
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
739
+ _content_type: Optional[StrictStr] = None,
740
+ _headers: Optional[Dict[StrictStr, Any]] = None,
741
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
742
+ ) -> CustomerMarginResponse:
743
+ """Margin per customer
744
+
745
+ Returns margin aggregated per customer_id. Only includes fully_reconciled billing events by default (include_partial=false). Zero-valued-burn: margin_pct=null, margin_reason='zero_valued_burn'.
746
+
747
+ :param match_grade: 'financial_only' or 'include_operational'
748
+ :type match_grade: str
749
+ :param include_partial: Include partially_reconciled billing events
750
+ :type include_partial: bool
751
+ :param period_start: ISO datetime start (inclusive)
752
+ :type period_start: datetime
753
+ :param period_end: ISO datetime end (exclusive)
754
+ :type period_end: datetime
755
+ :param _request_timeout: timeout setting for this request. If one
756
+ number provided, it will be total request
757
+ timeout. It can also be a pair (tuple) of
758
+ (connection, read) timeouts.
759
+ :type _request_timeout: int, tuple(int, int), optional
760
+ :param _request_auth: set to override the auth_settings for an a single
761
+ request; this effectively ignores the
762
+ authentication in the spec for a single request.
763
+ :type _request_auth: dict, optional
764
+ :param _content_type: force content-type for the request.
765
+ :type _content_type: str, Optional
766
+ :param _headers: set to override the headers for a single
767
+ request; this effectively ignores the headers
768
+ in the spec for a single request.
769
+ :type _headers: dict, optional
770
+ :param _host_index: set to override the host_index for a single
771
+ request; this effectively ignores the host_index
772
+ in the spec for a single request.
773
+ :type _host_index: int, optional
774
+ :return: Returns the result object.
775
+ """ # noqa: E501
776
+
777
+ _param = self._get_margin_by_customer_api_serialize(
778
+ match_grade=match_grade,
779
+ include_partial=include_partial,
780
+ period_start=period_start,
781
+ period_end=period_end,
782
+ _request_auth=_request_auth,
783
+ _content_type=_content_type,
784
+ _headers=_headers,
785
+ _host_index=_host_index
786
+ )
787
+
788
+ _response_types_map: Dict[str, Optional[str]] = {
789
+ '200': "CustomerMarginResponse",
790
+ '422': "AcuteHTTPValidationError",
791
+ }
792
+ response_data = self.api_client.call_api(
793
+ *_param,
794
+ _request_timeout=_request_timeout
795
+ )
796
+ response_data.read()
797
+ return self.api_client.response_deserialize(
798
+ response_data=response_data,
799
+ response_types_map=_response_types_map,
800
+ ).data
801
+
802
+
803
+ @validate_call
804
+ def get_margin_by_customer_api_with_http_info(
805
+ self,
806
+ match_grade: Annotated[Optional[StrictStr], Field(description="'financial_only' or 'include_operational'")] = None,
807
+ include_partial: Annotated[Optional[StrictBool], Field(description="Include partially_reconciled billing events")] = None,
808
+ period_start: Annotated[Optional[datetime], Field(description="ISO datetime start (inclusive)")] = None,
809
+ period_end: Annotated[Optional[datetime], Field(description="ISO datetime end (exclusive)")] = None,
810
+ _request_timeout: Union[
811
+ None,
812
+ Annotated[StrictFloat, Field(gt=0)],
813
+ Tuple[
814
+ Annotated[StrictFloat, Field(gt=0)],
815
+ Annotated[StrictFloat, Field(gt=0)]
816
+ ]
817
+ ] = None,
818
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
819
+ _content_type: Optional[StrictStr] = None,
820
+ _headers: Optional[Dict[StrictStr, Any]] = None,
821
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
822
+ ) -> ApiResponse[CustomerMarginResponse]:
823
+ """Margin per customer
824
+
825
+ Returns margin aggregated per customer_id. Only includes fully_reconciled billing events by default (include_partial=false). Zero-valued-burn: margin_pct=null, margin_reason='zero_valued_burn'.
826
+
827
+ :param match_grade: 'financial_only' or 'include_operational'
828
+ :type match_grade: str
829
+ :param include_partial: Include partially_reconciled billing events
830
+ :type include_partial: bool
831
+ :param period_start: ISO datetime start (inclusive)
832
+ :type period_start: datetime
833
+ :param period_end: ISO datetime end (exclusive)
834
+ :type period_end: datetime
835
+ :param _request_timeout: timeout setting for this request. If one
836
+ number provided, it will be total request
837
+ timeout. It can also be a pair (tuple) of
838
+ (connection, read) timeouts.
839
+ :type _request_timeout: int, tuple(int, int), optional
840
+ :param _request_auth: set to override the auth_settings for an a single
841
+ request; this effectively ignores the
842
+ authentication in the spec for a single request.
843
+ :type _request_auth: dict, optional
844
+ :param _content_type: force content-type for the request.
845
+ :type _content_type: str, Optional
846
+ :param _headers: set to override the headers for a single
847
+ request; this effectively ignores the headers
848
+ in the spec for a single request.
849
+ :type _headers: dict, optional
850
+ :param _host_index: set to override the host_index for a single
851
+ request; this effectively ignores the host_index
852
+ in the spec for a single request.
853
+ :type _host_index: int, optional
854
+ :return: Returns the result object.
855
+ """ # noqa: E501
856
+
857
+ _param = self._get_margin_by_customer_api_serialize(
858
+ match_grade=match_grade,
859
+ include_partial=include_partial,
860
+ period_start=period_start,
861
+ period_end=period_end,
862
+ _request_auth=_request_auth,
863
+ _content_type=_content_type,
864
+ _headers=_headers,
865
+ _host_index=_host_index
866
+ )
867
+
868
+ _response_types_map: Dict[str, Optional[str]] = {
869
+ '200': "CustomerMarginResponse",
870
+ '422': "AcuteHTTPValidationError",
871
+ }
872
+ response_data = self.api_client.call_api(
873
+ *_param,
874
+ _request_timeout=_request_timeout
875
+ )
876
+ response_data.read()
877
+ return self.api_client.response_deserialize(
878
+ response_data=response_data,
879
+ response_types_map=_response_types_map,
880
+ )
881
+
882
+
883
+ @validate_call
884
+ def get_margin_by_customer_api_without_preload_content(
885
+ self,
886
+ match_grade: Annotated[Optional[StrictStr], Field(description="'financial_only' or 'include_operational'")] = None,
887
+ include_partial: Annotated[Optional[StrictBool], Field(description="Include partially_reconciled billing events")] = None,
888
+ period_start: Annotated[Optional[datetime], Field(description="ISO datetime start (inclusive)")] = None,
889
+ period_end: Annotated[Optional[datetime], Field(description="ISO datetime end (exclusive)")] = None,
890
+ _request_timeout: Union[
891
+ None,
892
+ Annotated[StrictFloat, Field(gt=0)],
893
+ Tuple[
894
+ Annotated[StrictFloat, Field(gt=0)],
895
+ Annotated[StrictFloat, Field(gt=0)]
896
+ ]
897
+ ] = None,
898
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
899
+ _content_type: Optional[StrictStr] = None,
900
+ _headers: Optional[Dict[StrictStr, Any]] = None,
901
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
902
+ ) -> RESTResponseType:
903
+ """Margin per customer
904
+
905
+ Returns margin aggregated per customer_id. Only includes fully_reconciled billing events by default (include_partial=false). Zero-valued-burn: margin_pct=null, margin_reason='zero_valued_burn'.
906
+
907
+ :param match_grade: 'financial_only' or 'include_operational'
908
+ :type match_grade: str
909
+ :param include_partial: Include partially_reconciled billing events
910
+ :type include_partial: bool
911
+ :param period_start: ISO datetime start (inclusive)
912
+ :type period_start: datetime
913
+ :param period_end: ISO datetime end (exclusive)
914
+ :type period_end: datetime
915
+ :param _request_timeout: timeout setting for this request. If one
916
+ number provided, it will be total request
917
+ timeout. It can also be a pair (tuple) of
918
+ (connection, read) timeouts.
919
+ :type _request_timeout: int, tuple(int, int), optional
920
+ :param _request_auth: set to override the auth_settings for an a single
921
+ request; this effectively ignores the
922
+ authentication in the spec for a single request.
923
+ :type _request_auth: dict, optional
924
+ :param _content_type: force content-type for the request.
925
+ :type _content_type: str, Optional
926
+ :param _headers: set to override the headers for a single
927
+ request; this effectively ignores the headers
928
+ in the spec for a single request.
929
+ :type _headers: dict, optional
930
+ :param _host_index: set to override the host_index for a single
931
+ request; this effectively ignores the host_index
932
+ in the spec for a single request.
933
+ :type _host_index: int, optional
934
+ :return: Returns the result object.
935
+ """ # noqa: E501
936
+
937
+ _param = self._get_margin_by_customer_api_serialize(
938
+ match_grade=match_grade,
939
+ include_partial=include_partial,
940
+ period_start=period_start,
941
+ period_end=period_end,
942
+ _request_auth=_request_auth,
943
+ _content_type=_content_type,
944
+ _headers=_headers,
945
+ _host_index=_host_index
946
+ )
947
+
948
+ _response_types_map: Dict[str, Optional[str]] = {
949
+ '200': "CustomerMarginResponse",
950
+ '422': "AcuteHTTPValidationError",
951
+ }
952
+ response_data = self.api_client.call_api(
953
+ *_param,
954
+ _request_timeout=_request_timeout
955
+ )
956
+ return response_data.response
957
+
958
+
959
+ def _get_margin_by_customer_api_serialize(
960
+ self,
961
+ match_grade,
962
+ include_partial,
963
+ period_start,
964
+ period_end,
965
+ _request_auth,
966
+ _content_type,
967
+ _headers,
968
+ _host_index,
969
+ ) -> RequestSerialized:
970
+
971
+ _host = None
972
+
973
+ _collection_formats: Dict[str, str] = {
974
+ }
975
+
976
+ _path_params: Dict[str, str] = {}
977
+ _query_params: List[Tuple[str, str]] = []
978
+ _header_params: Dict[str, Optional[str]] = _headers or {}
979
+ _form_params: List[Tuple[str, str]] = []
980
+ _files: Dict[
981
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
982
+ ] = {}
983
+ _body_params: Optional[bytes] = None
984
+
985
+ # process the path parameters
986
+ # process the query parameters
987
+ if match_grade is not None:
988
+
989
+ _query_params.append(('match_grade', match_grade))
990
+
991
+ if include_partial is not None:
992
+
993
+ _query_params.append(('include_partial', include_partial))
994
+
995
+ if period_start is not None:
996
+ if isinstance(period_start, datetime):
997
+ _query_params.append(
998
+ (
999
+ 'period_start',
1000
+ period_start.strftime(
1001
+ self.api_client.configuration.datetime_format
1002
+ )
1003
+ )
1004
+ )
1005
+ else:
1006
+ _query_params.append(('period_start', period_start))
1007
+
1008
+ if period_end is not None:
1009
+ if isinstance(period_end, datetime):
1010
+ _query_params.append(
1011
+ (
1012
+ 'period_end',
1013
+ period_end.strftime(
1014
+ self.api_client.configuration.datetime_format
1015
+ )
1016
+ )
1017
+ )
1018
+ else:
1019
+ _query_params.append(('period_end', period_end))
1020
+
1021
+ # process the header parameters
1022
+ # process the form parameters
1023
+ # process the body parameter
1024
+
1025
+
1026
+ # set the HTTP header `Accept`
1027
+ if 'Accept' not in _header_params:
1028
+ _header_params['Accept'] = self.api_client.select_header_accept(
1029
+ [
1030
+ 'application/json'
1031
+ ]
1032
+ )
1033
+
1034
+
1035
+ # authentication setting
1036
+ _auth_settings: List[str] = [
1037
+ 'APIKeyHeader',
1038
+ 'HTTPBearer'
1039
+ ]
1040
+
1041
+ return self.api_client.param_serialize(
1042
+ method='GET',
1043
+ resource_path='/api/v1/cost/margins/by-customer',
1044
+ path_params=_path_params,
1045
+ query_params=_query_params,
1046
+ header_params=_header_params,
1047
+ body=_body_params,
1048
+ post_params=_form_params,
1049
+ files=_files,
1050
+ auth_settings=_auth_settings,
1051
+ collection_formats=_collection_formats,
1052
+ _host=_host,
1053
+ _request_auth=_request_auth
1054
+ )
1055
+
1056
+
1057
+
1058
+
1059
+ @validate_call
1060
+ def get_margin_by_feature_api(
1061
+ self,
1062
+ match_grade: Annotated[Optional[StrictStr], Field(description="'financial_only' or 'include_operational'")] = None,
1063
+ include_partial: Annotated[Optional[StrictBool], Field(description="Include partially_reconciled billing events")] = None,
1064
+ period_start: Annotated[Optional[datetime], Field(description="ISO datetime start (inclusive)")] = None,
1065
+ period_end: Annotated[Optional[datetime], Field(description="ISO datetime end (exclusive)")] = None,
1066
+ _request_timeout: Union[
1067
+ None,
1068
+ Annotated[StrictFloat, Field(gt=0)],
1069
+ Tuple[
1070
+ Annotated[StrictFloat, Field(gt=0)],
1071
+ Annotated[StrictFloat, Field(gt=0)]
1072
+ ]
1073
+ ] = None,
1074
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1075
+ _content_type: Optional[StrictStr] = None,
1076
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1077
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1078
+ ) -> FeatureMarginResponse:
1079
+ """Margin per feature
1080
+
1081
+ Returns margin aggregated per feature_id.
1082
+
1083
+ :param match_grade: 'financial_only' or 'include_operational'
1084
+ :type match_grade: str
1085
+ :param include_partial: Include partially_reconciled billing events
1086
+ :type include_partial: bool
1087
+ :param period_start: ISO datetime start (inclusive)
1088
+ :type period_start: datetime
1089
+ :param period_end: ISO datetime end (exclusive)
1090
+ :type period_end: datetime
1091
+ :param _request_timeout: timeout setting for this request. If one
1092
+ number provided, it will be total request
1093
+ timeout. It can also be a pair (tuple) of
1094
+ (connection, read) timeouts.
1095
+ :type _request_timeout: int, tuple(int, int), optional
1096
+ :param _request_auth: set to override the auth_settings for an a single
1097
+ request; this effectively ignores the
1098
+ authentication in the spec for a single request.
1099
+ :type _request_auth: dict, optional
1100
+ :param _content_type: force content-type for the request.
1101
+ :type _content_type: str, Optional
1102
+ :param _headers: set to override the headers for a single
1103
+ request; this effectively ignores the headers
1104
+ in the spec for a single request.
1105
+ :type _headers: dict, optional
1106
+ :param _host_index: set to override the host_index for a single
1107
+ request; this effectively ignores the host_index
1108
+ in the spec for a single request.
1109
+ :type _host_index: int, optional
1110
+ :return: Returns the result object.
1111
+ """ # noqa: E501
1112
+
1113
+ _param = self._get_margin_by_feature_api_serialize(
1114
+ match_grade=match_grade,
1115
+ include_partial=include_partial,
1116
+ period_start=period_start,
1117
+ period_end=period_end,
1118
+ _request_auth=_request_auth,
1119
+ _content_type=_content_type,
1120
+ _headers=_headers,
1121
+ _host_index=_host_index
1122
+ )
1123
+
1124
+ _response_types_map: Dict[str, Optional[str]] = {
1125
+ '200': "FeatureMarginResponse",
1126
+ '422': "AcuteHTTPValidationError",
1127
+ }
1128
+ response_data = self.api_client.call_api(
1129
+ *_param,
1130
+ _request_timeout=_request_timeout
1131
+ )
1132
+ response_data.read()
1133
+ return self.api_client.response_deserialize(
1134
+ response_data=response_data,
1135
+ response_types_map=_response_types_map,
1136
+ ).data
1137
+
1138
+
1139
+ @validate_call
1140
+ def get_margin_by_feature_api_with_http_info(
1141
+ self,
1142
+ match_grade: Annotated[Optional[StrictStr], Field(description="'financial_only' or 'include_operational'")] = None,
1143
+ include_partial: Annotated[Optional[StrictBool], Field(description="Include partially_reconciled billing events")] = None,
1144
+ period_start: Annotated[Optional[datetime], Field(description="ISO datetime start (inclusive)")] = None,
1145
+ period_end: Annotated[Optional[datetime], Field(description="ISO datetime end (exclusive)")] = None,
1146
+ _request_timeout: Union[
1147
+ None,
1148
+ Annotated[StrictFloat, Field(gt=0)],
1149
+ Tuple[
1150
+ Annotated[StrictFloat, Field(gt=0)],
1151
+ Annotated[StrictFloat, Field(gt=0)]
1152
+ ]
1153
+ ] = None,
1154
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1155
+ _content_type: Optional[StrictStr] = None,
1156
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1157
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1158
+ ) -> ApiResponse[FeatureMarginResponse]:
1159
+ """Margin per feature
1160
+
1161
+ Returns margin aggregated per feature_id.
1162
+
1163
+ :param match_grade: 'financial_only' or 'include_operational'
1164
+ :type match_grade: str
1165
+ :param include_partial: Include partially_reconciled billing events
1166
+ :type include_partial: bool
1167
+ :param period_start: ISO datetime start (inclusive)
1168
+ :type period_start: datetime
1169
+ :param period_end: ISO datetime end (exclusive)
1170
+ :type period_end: datetime
1171
+ :param _request_timeout: timeout setting for this request. If one
1172
+ number provided, it will be total request
1173
+ timeout. It can also be a pair (tuple) of
1174
+ (connection, read) timeouts.
1175
+ :type _request_timeout: int, tuple(int, int), optional
1176
+ :param _request_auth: set to override the auth_settings for an a single
1177
+ request; this effectively ignores the
1178
+ authentication in the spec for a single request.
1179
+ :type _request_auth: dict, optional
1180
+ :param _content_type: force content-type for the request.
1181
+ :type _content_type: str, Optional
1182
+ :param _headers: set to override the headers for a single
1183
+ request; this effectively ignores the headers
1184
+ in the spec for a single request.
1185
+ :type _headers: dict, optional
1186
+ :param _host_index: set to override the host_index for a single
1187
+ request; this effectively ignores the host_index
1188
+ in the spec for a single request.
1189
+ :type _host_index: int, optional
1190
+ :return: Returns the result object.
1191
+ """ # noqa: E501
1192
+
1193
+ _param = self._get_margin_by_feature_api_serialize(
1194
+ match_grade=match_grade,
1195
+ include_partial=include_partial,
1196
+ period_start=period_start,
1197
+ period_end=period_end,
1198
+ _request_auth=_request_auth,
1199
+ _content_type=_content_type,
1200
+ _headers=_headers,
1201
+ _host_index=_host_index
1202
+ )
1203
+
1204
+ _response_types_map: Dict[str, Optional[str]] = {
1205
+ '200': "FeatureMarginResponse",
1206
+ '422': "AcuteHTTPValidationError",
1207
+ }
1208
+ response_data = self.api_client.call_api(
1209
+ *_param,
1210
+ _request_timeout=_request_timeout
1211
+ )
1212
+ response_data.read()
1213
+ return self.api_client.response_deserialize(
1214
+ response_data=response_data,
1215
+ response_types_map=_response_types_map,
1216
+ )
1217
+
1218
+
1219
+ @validate_call
1220
+ def get_margin_by_feature_api_without_preload_content(
1221
+ self,
1222
+ match_grade: Annotated[Optional[StrictStr], Field(description="'financial_only' or 'include_operational'")] = None,
1223
+ include_partial: Annotated[Optional[StrictBool], Field(description="Include partially_reconciled billing events")] = None,
1224
+ period_start: Annotated[Optional[datetime], Field(description="ISO datetime start (inclusive)")] = None,
1225
+ period_end: Annotated[Optional[datetime], Field(description="ISO datetime end (exclusive)")] = None,
1226
+ _request_timeout: Union[
1227
+ None,
1228
+ Annotated[StrictFloat, Field(gt=0)],
1229
+ Tuple[
1230
+ Annotated[StrictFloat, Field(gt=0)],
1231
+ Annotated[StrictFloat, Field(gt=0)]
1232
+ ]
1233
+ ] = None,
1234
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1235
+ _content_type: Optional[StrictStr] = None,
1236
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1237
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1238
+ ) -> RESTResponseType:
1239
+ """Margin per feature
1240
+
1241
+ Returns margin aggregated per feature_id.
1242
+
1243
+ :param match_grade: 'financial_only' or 'include_operational'
1244
+ :type match_grade: str
1245
+ :param include_partial: Include partially_reconciled billing events
1246
+ :type include_partial: bool
1247
+ :param period_start: ISO datetime start (inclusive)
1248
+ :type period_start: datetime
1249
+ :param period_end: ISO datetime end (exclusive)
1250
+ :type period_end: datetime
1251
+ :param _request_timeout: timeout setting for this request. If one
1252
+ number provided, it will be total request
1253
+ timeout. It can also be a pair (tuple) of
1254
+ (connection, read) timeouts.
1255
+ :type _request_timeout: int, tuple(int, int), optional
1256
+ :param _request_auth: set to override the auth_settings for an a single
1257
+ request; this effectively ignores the
1258
+ authentication in the spec for a single request.
1259
+ :type _request_auth: dict, optional
1260
+ :param _content_type: force content-type for the request.
1261
+ :type _content_type: str, Optional
1262
+ :param _headers: set to override the headers for a single
1263
+ request; this effectively ignores the headers
1264
+ in the spec for a single request.
1265
+ :type _headers: dict, optional
1266
+ :param _host_index: set to override the host_index for a single
1267
+ request; this effectively ignores the host_index
1268
+ in the spec for a single request.
1269
+ :type _host_index: int, optional
1270
+ :return: Returns the result object.
1271
+ """ # noqa: E501
1272
+
1273
+ _param = self._get_margin_by_feature_api_serialize(
1274
+ match_grade=match_grade,
1275
+ include_partial=include_partial,
1276
+ period_start=period_start,
1277
+ period_end=period_end,
1278
+ _request_auth=_request_auth,
1279
+ _content_type=_content_type,
1280
+ _headers=_headers,
1281
+ _host_index=_host_index
1282
+ )
1283
+
1284
+ _response_types_map: Dict[str, Optional[str]] = {
1285
+ '200': "FeatureMarginResponse",
1286
+ '422': "AcuteHTTPValidationError",
1287
+ }
1288
+ response_data = self.api_client.call_api(
1289
+ *_param,
1290
+ _request_timeout=_request_timeout
1291
+ )
1292
+ return response_data.response
1293
+
1294
+
1295
+ def _get_margin_by_feature_api_serialize(
1296
+ self,
1297
+ match_grade,
1298
+ include_partial,
1299
+ period_start,
1300
+ period_end,
1301
+ _request_auth,
1302
+ _content_type,
1303
+ _headers,
1304
+ _host_index,
1305
+ ) -> RequestSerialized:
1306
+
1307
+ _host = None
1308
+
1309
+ _collection_formats: Dict[str, str] = {
1310
+ }
1311
+
1312
+ _path_params: Dict[str, str] = {}
1313
+ _query_params: List[Tuple[str, str]] = []
1314
+ _header_params: Dict[str, Optional[str]] = _headers or {}
1315
+ _form_params: List[Tuple[str, str]] = []
1316
+ _files: Dict[
1317
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
1318
+ ] = {}
1319
+ _body_params: Optional[bytes] = None
1320
+
1321
+ # process the path parameters
1322
+ # process the query parameters
1323
+ if match_grade is not None:
1324
+
1325
+ _query_params.append(('match_grade', match_grade))
1326
+
1327
+ if include_partial is not None:
1328
+
1329
+ _query_params.append(('include_partial', include_partial))
1330
+
1331
+ if period_start is not None:
1332
+ if isinstance(period_start, datetime):
1333
+ _query_params.append(
1334
+ (
1335
+ 'period_start',
1336
+ period_start.strftime(
1337
+ self.api_client.configuration.datetime_format
1338
+ )
1339
+ )
1340
+ )
1341
+ else:
1342
+ _query_params.append(('period_start', period_start))
1343
+
1344
+ if period_end is not None:
1345
+ if isinstance(period_end, datetime):
1346
+ _query_params.append(
1347
+ (
1348
+ 'period_end',
1349
+ period_end.strftime(
1350
+ self.api_client.configuration.datetime_format
1351
+ )
1352
+ )
1353
+ )
1354
+ else:
1355
+ _query_params.append(('period_end', period_end))
1356
+
1357
+ # process the header parameters
1358
+ # process the form parameters
1359
+ # process the body parameter
1360
+
1361
+
1362
+ # set the HTTP header `Accept`
1363
+ if 'Accept' not in _header_params:
1364
+ _header_params['Accept'] = self.api_client.select_header_accept(
1365
+ [
1366
+ 'application/json'
1367
+ ]
1368
+ )
1369
+
1370
+
1371
+ # authentication setting
1372
+ _auth_settings: List[str] = [
1373
+ 'APIKeyHeader',
1374
+ 'HTTPBearer'
1375
+ ]
1376
+
1377
+ return self.api_client.param_serialize(
1378
+ method='GET',
1379
+ resource_path='/api/v1/cost/margins/by-feature',
1380
+ path_params=_path_params,
1381
+ query_params=_query_params,
1382
+ header_params=_header_params,
1383
+ body=_body_params,
1384
+ post_params=_form_params,
1385
+ files=_files,
1386
+ auth_settings=_auth_settings,
1387
+ collection_formats=_collection_formats,
1388
+ _host=_host,
1389
+ _request_auth=_request_auth
1390
+ )
1391
+
1392
+
1393
+
1394
+
1395
+ @validate_call
1396
+ def get_margin_snapshot(
1397
+ self,
1398
+ period_type: Annotated[Optional[StrictStr], Field(description="'daily', 'weekly', or 'monthly'")] = None,
1399
+ match_grade: Annotated[Optional[StrictStr], Field(description="'financial_only' or 'include_operational'")] = None,
1400
+ include_partial: Annotated[Optional[StrictBool], Field(description="Include partially_reconciled billing events")] = None,
1401
+ period_start: Annotated[Optional[datetime], Field(description="ISO datetime start (inclusive)")] = None,
1402
+ period_end: Annotated[Optional[datetime], Field(description="ISO datetime end (exclusive)")] = None,
1403
+ _request_timeout: Union[
1404
+ None,
1405
+ Annotated[StrictFloat, Field(gt=0)],
1406
+ Tuple[
1407
+ Annotated[StrictFloat, Field(gt=0)],
1408
+ Annotated[StrictFloat, Field(gt=0)]
1409
+ ]
1410
+ ] = None,
1411
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1412
+ _content_type: Optional[StrictStr] = None,
1413
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1414
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1415
+ ) -> MarginSnapshotResponse:
1416
+ """Period margin snapshot with reconciliation breakdown
1417
+
1418
+ Returns margin snapshot for the given period. Includes per-billing-event reconciliation status breakdown. Zero-valued-burn events excluded from margin_pct but included in cost totals.
1419
+
1420
+ :param period_type: 'daily', 'weekly', or 'monthly'
1421
+ :type period_type: str
1422
+ :param match_grade: 'financial_only' or 'include_operational'
1423
+ :type match_grade: str
1424
+ :param include_partial: Include partially_reconciled billing events
1425
+ :type include_partial: bool
1426
+ :param period_start: ISO datetime start (inclusive)
1427
+ :type period_start: datetime
1428
+ :param period_end: ISO datetime end (exclusive)
1429
+ :type period_end: datetime
1430
+ :param _request_timeout: timeout setting for this request. If one
1431
+ number provided, it will be total request
1432
+ timeout. It can also be a pair (tuple) of
1433
+ (connection, read) timeouts.
1434
+ :type _request_timeout: int, tuple(int, int), optional
1435
+ :param _request_auth: set to override the auth_settings for an a single
1436
+ request; this effectively ignores the
1437
+ authentication in the spec for a single request.
1438
+ :type _request_auth: dict, optional
1439
+ :param _content_type: force content-type for the request.
1440
+ :type _content_type: str, Optional
1441
+ :param _headers: set to override the headers for a single
1442
+ request; this effectively ignores the headers
1443
+ in the spec for a single request.
1444
+ :type _headers: dict, optional
1445
+ :param _host_index: set to override the host_index for a single
1446
+ request; this effectively ignores the host_index
1447
+ in the spec for a single request.
1448
+ :type _host_index: int, optional
1449
+ :return: Returns the result object.
1450
+ """ # noqa: E501
1451
+
1452
+ _param = self._get_margin_snapshot_serialize(
1453
+ period_type=period_type,
1454
+ match_grade=match_grade,
1455
+ include_partial=include_partial,
1456
+ period_start=period_start,
1457
+ period_end=period_end,
1458
+ _request_auth=_request_auth,
1459
+ _content_type=_content_type,
1460
+ _headers=_headers,
1461
+ _host_index=_host_index
1462
+ )
1463
+
1464
+ _response_types_map: Dict[str, Optional[str]] = {
1465
+ '200': "MarginSnapshotResponse",
1466
+ '422': "AcuteHTTPValidationError",
1467
+ }
1468
+ response_data = self.api_client.call_api(
1469
+ *_param,
1470
+ _request_timeout=_request_timeout
1471
+ )
1472
+ response_data.read()
1473
+ return self.api_client.response_deserialize(
1474
+ response_data=response_data,
1475
+ response_types_map=_response_types_map,
1476
+ ).data
1477
+
1478
+
1479
+ @validate_call
1480
+ def get_margin_snapshot_with_http_info(
1481
+ self,
1482
+ period_type: Annotated[Optional[StrictStr], Field(description="'daily', 'weekly', or 'monthly'")] = None,
1483
+ match_grade: Annotated[Optional[StrictStr], Field(description="'financial_only' or 'include_operational'")] = None,
1484
+ include_partial: Annotated[Optional[StrictBool], Field(description="Include partially_reconciled billing events")] = None,
1485
+ period_start: Annotated[Optional[datetime], Field(description="ISO datetime start (inclusive)")] = None,
1486
+ period_end: Annotated[Optional[datetime], Field(description="ISO datetime end (exclusive)")] = None,
1487
+ _request_timeout: Union[
1488
+ None,
1489
+ Annotated[StrictFloat, Field(gt=0)],
1490
+ Tuple[
1491
+ Annotated[StrictFloat, Field(gt=0)],
1492
+ Annotated[StrictFloat, Field(gt=0)]
1493
+ ]
1494
+ ] = None,
1495
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1496
+ _content_type: Optional[StrictStr] = None,
1497
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1498
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1499
+ ) -> ApiResponse[MarginSnapshotResponse]:
1500
+ """Period margin snapshot with reconciliation breakdown
1501
+
1502
+ Returns margin snapshot for the given period. Includes per-billing-event reconciliation status breakdown. Zero-valued-burn events excluded from margin_pct but included in cost totals.
1503
+
1504
+ :param period_type: 'daily', 'weekly', or 'monthly'
1505
+ :type period_type: str
1506
+ :param match_grade: 'financial_only' or 'include_operational'
1507
+ :type match_grade: str
1508
+ :param include_partial: Include partially_reconciled billing events
1509
+ :type include_partial: bool
1510
+ :param period_start: ISO datetime start (inclusive)
1511
+ :type period_start: datetime
1512
+ :param period_end: ISO datetime end (exclusive)
1513
+ :type period_end: datetime
1514
+ :param _request_timeout: timeout setting for this request. If one
1515
+ number provided, it will be total request
1516
+ timeout. It can also be a pair (tuple) of
1517
+ (connection, read) timeouts.
1518
+ :type _request_timeout: int, tuple(int, int), optional
1519
+ :param _request_auth: set to override the auth_settings for an a single
1520
+ request; this effectively ignores the
1521
+ authentication in the spec for a single request.
1522
+ :type _request_auth: dict, optional
1523
+ :param _content_type: force content-type for the request.
1524
+ :type _content_type: str, Optional
1525
+ :param _headers: set to override the headers for a single
1526
+ request; this effectively ignores the headers
1527
+ in the spec for a single request.
1528
+ :type _headers: dict, optional
1529
+ :param _host_index: set to override the host_index for a single
1530
+ request; this effectively ignores the host_index
1531
+ in the spec for a single request.
1532
+ :type _host_index: int, optional
1533
+ :return: Returns the result object.
1534
+ """ # noqa: E501
1535
+
1536
+ _param = self._get_margin_snapshot_serialize(
1537
+ period_type=period_type,
1538
+ match_grade=match_grade,
1539
+ include_partial=include_partial,
1540
+ period_start=period_start,
1541
+ period_end=period_end,
1542
+ _request_auth=_request_auth,
1543
+ _content_type=_content_type,
1544
+ _headers=_headers,
1545
+ _host_index=_host_index
1546
+ )
1547
+
1548
+ _response_types_map: Dict[str, Optional[str]] = {
1549
+ '200': "MarginSnapshotResponse",
1550
+ '422': "AcuteHTTPValidationError",
1551
+ }
1552
+ response_data = self.api_client.call_api(
1553
+ *_param,
1554
+ _request_timeout=_request_timeout
1555
+ )
1556
+ response_data.read()
1557
+ return self.api_client.response_deserialize(
1558
+ response_data=response_data,
1559
+ response_types_map=_response_types_map,
1560
+ )
1561
+
1562
+
1563
+ @validate_call
1564
+ def get_margin_snapshot_without_preload_content(
1565
+ self,
1566
+ period_type: Annotated[Optional[StrictStr], Field(description="'daily', 'weekly', or 'monthly'")] = None,
1567
+ match_grade: Annotated[Optional[StrictStr], Field(description="'financial_only' or 'include_operational'")] = None,
1568
+ include_partial: Annotated[Optional[StrictBool], Field(description="Include partially_reconciled billing events")] = None,
1569
+ period_start: Annotated[Optional[datetime], Field(description="ISO datetime start (inclusive)")] = None,
1570
+ period_end: Annotated[Optional[datetime], Field(description="ISO datetime end (exclusive)")] = None,
1571
+ _request_timeout: Union[
1572
+ None,
1573
+ Annotated[StrictFloat, Field(gt=0)],
1574
+ Tuple[
1575
+ Annotated[StrictFloat, Field(gt=0)],
1576
+ Annotated[StrictFloat, Field(gt=0)]
1577
+ ]
1578
+ ] = None,
1579
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1580
+ _content_type: Optional[StrictStr] = None,
1581
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1582
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1583
+ ) -> RESTResponseType:
1584
+ """Period margin snapshot with reconciliation breakdown
1585
+
1586
+ Returns margin snapshot for the given period. Includes per-billing-event reconciliation status breakdown. Zero-valued-burn events excluded from margin_pct but included in cost totals.
1587
+
1588
+ :param period_type: 'daily', 'weekly', or 'monthly'
1589
+ :type period_type: str
1590
+ :param match_grade: 'financial_only' or 'include_operational'
1591
+ :type match_grade: str
1592
+ :param include_partial: Include partially_reconciled billing events
1593
+ :type include_partial: bool
1594
+ :param period_start: ISO datetime start (inclusive)
1595
+ :type period_start: datetime
1596
+ :param period_end: ISO datetime end (exclusive)
1597
+ :type period_end: datetime
1598
+ :param _request_timeout: timeout setting for this request. If one
1599
+ number provided, it will be total request
1600
+ timeout. It can also be a pair (tuple) of
1601
+ (connection, read) timeouts.
1602
+ :type _request_timeout: int, tuple(int, int), optional
1603
+ :param _request_auth: set to override the auth_settings for an a single
1604
+ request; this effectively ignores the
1605
+ authentication in the spec for a single request.
1606
+ :type _request_auth: dict, optional
1607
+ :param _content_type: force content-type for the request.
1608
+ :type _content_type: str, Optional
1609
+ :param _headers: set to override the headers for a single
1610
+ request; this effectively ignores the headers
1611
+ in the spec for a single request.
1612
+ :type _headers: dict, optional
1613
+ :param _host_index: set to override the host_index for a single
1614
+ request; this effectively ignores the host_index
1615
+ in the spec for a single request.
1616
+ :type _host_index: int, optional
1617
+ :return: Returns the result object.
1618
+ """ # noqa: E501
1619
+
1620
+ _param = self._get_margin_snapshot_serialize(
1621
+ period_type=period_type,
1622
+ match_grade=match_grade,
1623
+ include_partial=include_partial,
1624
+ period_start=period_start,
1625
+ period_end=period_end,
1626
+ _request_auth=_request_auth,
1627
+ _content_type=_content_type,
1628
+ _headers=_headers,
1629
+ _host_index=_host_index
1630
+ )
1631
+
1632
+ _response_types_map: Dict[str, Optional[str]] = {
1633
+ '200': "MarginSnapshotResponse",
1634
+ '422': "AcuteHTTPValidationError",
1635
+ }
1636
+ response_data = self.api_client.call_api(
1637
+ *_param,
1638
+ _request_timeout=_request_timeout
1639
+ )
1640
+ return response_data.response
1641
+
1642
+
1643
+ def _get_margin_snapshot_serialize(
1644
+ self,
1645
+ period_type,
1646
+ match_grade,
1647
+ include_partial,
1648
+ period_start,
1649
+ period_end,
1650
+ _request_auth,
1651
+ _content_type,
1652
+ _headers,
1653
+ _host_index,
1654
+ ) -> RequestSerialized:
1655
+
1656
+ _host = None
1657
+
1658
+ _collection_formats: Dict[str, str] = {
1659
+ }
1660
+
1661
+ _path_params: Dict[str, str] = {}
1662
+ _query_params: List[Tuple[str, str]] = []
1663
+ _header_params: Dict[str, Optional[str]] = _headers or {}
1664
+ _form_params: List[Tuple[str, str]] = []
1665
+ _files: Dict[
1666
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
1667
+ ] = {}
1668
+ _body_params: Optional[bytes] = None
1669
+
1670
+ # process the path parameters
1671
+ # process the query parameters
1672
+ if period_type is not None:
1673
+
1674
+ _query_params.append(('period_type', period_type))
1675
+
1676
+ if match_grade is not None:
1677
+
1678
+ _query_params.append(('match_grade', match_grade))
1679
+
1680
+ if include_partial is not None:
1681
+
1682
+ _query_params.append(('include_partial', include_partial))
1683
+
1684
+ if period_start is not None:
1685
+ if isinstance(period_start, datetime):
1686
+ _query_params.append(
1687
+ (
1688
+ 'period_start',
1689
+ period_start.strftime(
1690
+ self.api_client.configuration.datetime_format
1691
+ )
1692
+ )
1693
+ )
1694
+ else:
1695
+ _query_params.append(('period_start', period_start))
1696
+
1697
+ if period_end is not None:
1698
+ if isinstance(period_end, datetime):
1699
+ _query_params.append(
1700
+ (
1701
+ 'period_end',
1702
+ period_end.strftime(
1703
+ self.api_client.configuration.datetime_format
1704
+ )
1705
+ )
1706
+ )
1707
+ else:
1708
+ _query_params.append(('period_end', period_end))
1709
+
1710
+ # process the header parameters
1711
+ # process the form parameters
1712
+ # process the body parameter
1713
+
1714
+
1715
+ # set the HTTP header `Accept`
1716
+ if 'Accept' not in _header_params:
1717
+ _header_params['Accept'] = self.api_client.select_header_accept(
1718
+ [
1719
+ 'application/json'
1720
+ ]
1721
+ )
1722
+
1723
+
1724
+ # authentication setting
1725
+ _auth_settings: List[str] = [
1726
+ 'APIKeyHeader',
1727
+ 'HTTPBearer'
1728
+ ]
1729
+
1730
+ return self.api_client.param_serialize(
1731
+ method='GET',
1732
+ resource_path='/api/v1/cost/margins/snapshot',
1733
+ path_params=_path_params,
1734
+ query_params=_query_params,
1735
+ header_params=_header_params,
1736
+ body=_body_params,
1737
+ post_params=_form_params,
1738
+ files=_files,
1739
+ auth_settings=_auth_settings,
1740
+ collection_formats=_collection_formats,
1741
+ _host=_host,
1742
+ _request_auth=_request_auth
1743
+ )
1744
+
1745
+
1746
+
1747
+
1748
+ @validate_call
1749
+ def trigger_reconciliation(
1750
+ self,
1751
+ reconcile_request: ReconcileRequest,
1752
+ _request_timeout: Union[
1753
+ None,
1754
+ Annotated[StrictFloat, Field(gt=0)],
1755
+ Tuple[
1756
+ Annotated[StrictFloat, Field(gt=0)],
1757
+ Annotated[StrictFloat, Field(gt=0)]
1758
+ ]
1759
+ ] = None,
1760
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1761
+ _content_type: Optional[StrictStr] = None,
1762
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1763
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1764
+ ) -> ReconcileResponse:
1765
+ """Trigger manual reconciliation (operator)
1766
+
1767
+ Operator endpoint: trigger reconciliation for specific cost_event_ids or all pending. Returns a job_id for tracking (synchronous in this implementation; async in production). body.tenant_id must match the API-key-derived tenant for security.
1768
+
1769
+ :param reconcile_request: (required)
1770
+ :type reconcile_request: ReconcileRequest
1771
+ :param _request_timeout: timeout setting for this request. If one
1772
+ number provided, it will be total request
1773
+ timeout. It can also be a pair (tuple) of
1774
+ (connection, read) timeouts.
1775
+ :type _request_timeout: int, tuple(int, int), optional
1776
+ :param _request_auth: set to override the auth_settings for an a single
1777
+ request; this effectively ignores the
1778
+ authentication in the spec for a single request.
1779
+ :type _request_auth: dict, optional
1780
+ :param _content_type: force content-type for the request.
1781
+ :type _content_type: str, Optional
1782
+ :param _headers: set to override the headers for a single
1783
+ request; this effectively ignores the headers
1784
+ in the spec for a single request.
1785
+ :type _headers: dict, optional
1786
+ :param _host_index: set to override the host_index for a single
1787
+ request; this effectively ignores the host_index
1788
+ in the spec for a single request.
1789
+ :type _host_index: int, optional
1790
+ :return: Returns the result object.
1791
+ """ # noqa: E501
1792
+
1793
+ _param = self._trigger_reconciliation_serialize(
1794
+ reconcile_request=reconcile_request,
1795
+ _request_auth=_request_auth,
1796
+ _content_type=_content_type,
1797
+ _headers=_headers,
1798
+ _host_index=_host_index
1799
+ )
1800
+
1801
+ _response_types_map: Dict[str, Optional[str]] = {
1802
+ '202': "ReconcileResponse",
1803
+ '422': "AcuteHTTPValidationError",
1804
+ }
1805
+ response_data = self.api_client.call_api(
1806
+ *_param,
1807
+ _request_timeout=_request_timeout
1808
+ )
1809
+ response_data.read()
1810
+ return self.api_client.response_deserialize(
1811
+ response_data=response_data,
1812
+ response_types_map=_response_types_map,
1813
+ ).data
1814
+
1815
+
1816
+ @validate_call
1817
+ def trigger_reconciliation_with_http_info(
1818
+ self,
1819
+ reconcile_request: ReconcileRequest,
1820
+ _request_timeout: Union[
1821
+ None,
1822
+ Annotated[StrictFloat, Field(gt=0)],
1823
+ Tuple[
1824
+ Annotated[StrictFloat, Field(gt=0)],
1825
+ Annotated[StrictFloat, Field(gt=0)]
1826
+ ]
1827
+ ] = None,
1828
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1829
+ _content_type: Optional[StrictStr] = None,
1830
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1831
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1832
+ ) -> ApiResponse[ReconcileResponse]:
1833
+ """Trigger manual reconciliation (operator)
1834
+
1835
+ Operator endpoint: trigger reconciliation for specific cost_event_ids or all pending. Returns a job_id for tracking (synchronous in this implementation; async in production). body.tenant_id must match the API-key-derived tenant for security.
1836
+
1837
+ :param reconcile_request: (required)
1838
+ :type reconcile_request: ReconcileRequest
1839
+ :param _request_timeout: timeout setting for this request. If one
1840
+ number provided, it will be total request
1841
+ timeout. It can also be a pair (tuple) of
1842
+ (connection, read) timeouts.
1843
+ :type _request_timeout: int, tuple(int, int), optional
1844
+ :param _request_auth: set to override the auth_settings for an a single
1845
+ request; this effectively ignores the
1846
+ authentication in the spec for a single request.
1847
+ :type _request_auth: dict, optional
1848
+ :param _content_type: force content-type for the request.
1849
+ :type _content_type: str, Optional
1850
+ :param _headers: set to override the headers for a single
1851
+ request; this effectively ignores the headers
1852
+ in the spec for a single request.
1853
+ :type _headers: dict, optional
1854
+ :param _host_index: set to override the host_index for a single
1855
+ request; this effectively ignores the host_index
1856
+ in the spec for a single request.
1857
+ :type _host_index: int, optional
1858
+ :return: Returns the result object.
1859
+ """ # noqa: E501
1860
+
1861
+ _param = self._trigger_reconciliation_serialize(
1862
+ reconcile_request=reconcile_request,
1863
+ _request_auth=_request_auth,
1864
+ _content_type=_content_type,
1865
+ _headers=_headers,
1866
+ _host_index=_host_index
1867
+ )
1868
+
1869
+ _response_types_map: Dict[str, Optional[str]] = {
1870
+ '202': "ReconcileResponse",
1871
+ '422': "AcuteHTTPValidationError",
1872
+ }
1873
+ response_data = self.api_client.call_api(
1874
+ *_param,
1875
+ _request_timeout=_request_timeout
1876
+ )
1877
+ response_data.read()
1878
+ return self.api_client.response_deserialize(
1879
+ response_data=response_data,
1880
+ response_types_map=_response_types_map,
1881
+ )
1882
+
1883
+
1884
+ @validate_call
1885
+ def trigger_reconciliation_without_preload_content(
1886
+ self,
1887
+ reconcile_request: ReconcileRequest,
1888
+ _request_timeout: Union[
1889
+ None,
1890
+ Annotated[StrictFloat, Field(gt=0)],
1891
+ Tuple[
1892
+ Annotated[StrictFloat, Field(gt=0)],
1893
+ Annotated[StrictFloat, Field(gt=0)]
1894
+ ]
1895
+ ] = None,
1896
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1897
+ _content_type: Optional[StrictStr] = None,
1898
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1899
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1900
+ ) -> RESTResponseType:
1901
+ """Trigger manual reconciliation (operator)
1902
+
1903
+ Operator endpoint: trigger reconciliation for specific cost_event_ids or all pending. Returns a job_id for tracking (synchronous in this implementation; async in production). body.tenant_id must match the API-key-derived tenant for security.
1904
+
1905
+ :param reconcile_request: (required)
1906
+ :type reconcile_request: ReconcileRequest
1907
+ :param _request_timeout: timeout setting for this request. If one
1908
+ number provided, it will be total request
1909
+ timeout. It can also be a pair (tuple) of
1910
+ (connection, read) timeouts.
1911
+ :type _request_timeout: int, tuple(int, int), optional
1912
+ :param _request_auth: set to override the auth_settings for an a single
1913
+ request; this effectively ignores the
1914
+ authentication in the spec for a single request.
1915
+ :type _request_auth: dict, optional
1916
+ :param _content_type: force content-type for the request.
1917
+ :type _content_type: str, Optional
1918
+ :param _headers: set to override the headers for a single
1919
+ request; this effectively ignores the headers
1920
+ in the spec for a single request.
1921
+ :type _headers: dict, optional
1922
+ :param _host_index: set to override the host_index for a single
1923
+ request; this effectively ignores the host_index
1924
+ in the spec for a single request.
1925
+ :type _host_index: int, optional
1926
+ :return: Returns the result object.
1927
+ """ # noqa: E501
1928
+
1929
+ _param = self._trigger_reconciliation_serialize(
1930
+ reconcile_request=reconcile_request,
1931
+ _request_auth=_request_auth,
1932
+ _content_type=_content_type,
1933
+ _headers=_headers,
1934
+ _host_index=_host_index
1935
+ )
1936
+
1937
+ _response_types_map: Dict[str, Optional[str]] = {
1938
+ '202': "ReconcileResponse",
1939
+ '422': "AcuteHTTPValidationError",
1940
+ }
1941
+ response_data = self.api_client.call_api(
1942
+ *_param,
1943
+ _request_timeout=_request_timeout
1944
+ )
1945
+ return response_data.response
1946
+
1947
+
1948
+ def _trigger_reconciliation_serialize(
1949
+ self,
1950
+ reconcile_request,
1951
+ _request_auth,
1952
+ _content_type,
1953
+ _headers,
1954
+ _host_index,
1955
+ ) -> RequestSerialized:
1956
+
1957
+ _host = None
1958
+
1959
+ _collection_formats: Dict[str, str] = {
1960
+ }
1961
+
1962
+ _path_params: Dict[str, str] = {}
1963
+ _query_params: List[Tuple[str, str]] = []
1964
+ _header_params: Dict[str, Optional[str]] = _headers or {}
1965
+ _form_params: List[Tuple[str, str]] = []
1966
+ _files: Dict[
1967
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
1968
+ ] = {}
1969
+ _body_params: Optional[bytes] = None
1970
+
1971
+ # process the path parameters
1972
+ # process the query parameters
1973
+ # process the header parameters
1974
+ # process the form parameters
1975
+ # process the body parameter
1976
+ if reconcile_request is not None:
1977
+ _body_params = reconcile_request
1978
+
1979
+
1980
+ # set the HTTP header `Accept`
1981
+ if 'Accept' not in _header_params:
1982
+ _header_params['Accept'] = self.api_client.select_header_accept(
1983
+ [
1984
+ 'application/json'
1985
+ ]
1986
+ )
1987
+
1988
+ # set the HTTP header `Content-Type`
1989
+ if _content_type:
1990
+ _header_params['Content-Type'] = _content_type
1991
+ else:
1992
+ _default_content_type = (
1993
+ self.api_client.select_header_content_type(
1994
+ [
1995
+ 'application/json'
1996
+ ]
1997
+ )
1998
+ )
1999
+ if _default_content_type is not None:
2000
+ _header_params['Content-Type'] = _default_content_type
2001
+
2002
+ # authentication setting
2003
+ _auth_settings: List[str] = [
2004
+ 'APIKeyHeader',
2005
+ 'HTTPBearer'
2006
+ ]
2007
+
2008
+ return self.api_client.param_serialize(
2009
+ method='POST',
2010
+ resource_path='/api/v1/cost/margins/reconcile',
2011
+ path_params=_path_params,
2012
+ query_params=_query_params,
2013
+ header_params=_header_params,
2014
+ body=_body_params,
2015
+ post_params=_form_params,
2016
+ files=_files,
2017
+ auth_settings=_auth_settings,
2018
+ collection_formats=_collection_formats,
2019
+ _host=_host,
2020
+ _request_auth=_request_auth
2021
+ )
2022
+
2023
+
2024
+
2025
+
2026
+ @validate_call
2027
+ def trigger_snapshot_compute(
2028
+ self,
2029
+ snapshot_compute_request: SnapshotComputeRequest,
2030
+ _request_timeout: Union[
2031
+ None,
2032
+ Annotated[StrictFloat, Field(gt=0)],
2033
+ Tuple[
2034
+ Annotated[StrictFloat, Field(gt=0)],
2035
+ Annotated[StrictFloat, Field(gt=0)]
2036
+ ]
2037
+ ] = None,
2038
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
2039
+ _content_type: Optional[StrictStr] = None,
2040
+ _headers: Optional[Dict[StrictStr, Any]] = None,
2041
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2042
+ ) -> SnapshotComputeResponse:
2043
+ """Trigger snapshot computation (operator)
2044
+
2045
+ Operator endpoint: compute and upsert a margin_snapshot for the given period. body.tenant_id must match the API-key-derived tenant for security.
2046
+
2047
+ :param snapshot_compute_request: (required)
2048
+ :type snapshot_compute_request: SnapshotComputeRequest
2049
+ :param _request_timeout: timeout setting for this request. If one
2050
+ number provided, it will be total request
2051
+ timeout. It can also be a pair (tuple) of
2052
+ (connection, read) timeouts.
2053
+ :type _request_timeout: int, tuple(int, int), optional
2054
+ :param _request_auth: set to override the auth_settings for an a single
2055
+ request; this effectively ignores the
2056
+ authentication in the spec for a single request.
2057
+ :type _request_auth: dict, optional
2058
+ :param _content_type: force content-type for the request.
2059
+ :type _content_type: str, Optional
2060
+ :param _headers: set to override the headers for a single
2061
+ request; this effectively ignores the headers
2062
+ in the spec for a single request.
2063
+ :type _headers: dict, optional
2064
+ :param _host_index: set to override the host_index for a single
2065
+ request; this effectively ignores the host_index
2066
+ in the spec for a single request.
2067
+ :type _host_index: int, optional
2068
+ :return: Returns the result object.
2069
+ """ # noqa: E501
2070
+
2071
+ _param = self._trigger_snapshot_compute_serialize(
2072
+ snapshot_compute_request=snapshot_compute_request,
2073
+ _request_auth=_request_auth,
2074
+ _content_type=_content_type,
2075
+ _headers=_headers,
2076
+ _host_index=_host_index
2077
+ )
2078
+
2079
+ _response_types_map: Dict[str, Optional[str]] = {
2080
+ '202': "SnapshotComputeResponse",
2081
+ '422': "AcuteHTTPValidationError",
2082
+ }
2083
+ response_data = self.api_client.call_api(
2084
+ *_param,
2085
+ _request_timeout=_request_timeout
2086
+ )
2087
+ response_data.read()
2088
+ return self.api_client.response_deserialize(
2089
+ response_data=response_data,
2090
+ response_types_map=_response_types_map,
2091
+ ).data
2092
+
2093
+
2094
+ @validate_call
2095
+ def trigger_snapshot_compute_with_http_info(
2096
+ self,
2097
+ snapshot_compute_request: SnapshotComputeRequest,
2098
+ _request_timeout: Union[
2099
+ None,
2100
+ Annotated[StrictFloat, Field(gt=0)],
2101
+ Tuple[
2102
+ Annotated[StrictFloat, Field(gt=0)],
2103
+ Annotated[StrictFloat, Field(gt=0)]
2104
+ ]
2105
+ ] = None,
2106
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
2107
+ _content_type: Optional[StrictStr] = None,
2108
+ _headers: Optional[Dict[StrictStr, Any]] = None,
2109
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2110
+ ) -> ApiResponse[SnapshotComputeResponse]:
2111
+ """Trigger snapshot computation (operator)
2112
+
2113
+ Operator endpoint: compute and upsert a margin_snapshot for the given period. body.tenant_id must match the API-key-derived tenant for security.
2114
+
2115
+ :param snapshot_compute_request: (required)
2116
+ :type snapshot_compute_request: SnapshotComputeRequest
2117
+ :param _request_timeout: timeout setting for this request. If one
2118
+ number provided, it will be total request
2119
+ timeout. It can also be a pair (tuple) of
2120
+ (connection, read) timeouts.
2121
+ :type _request_timeout: int, tuple(int, int), optional
2122
+ :param _request_auth: set to override the auth_settings for an a single
2123
+ request; this effectively ignores the
2124
+ authentication in the spec for a single request.
2125
+ :type _request_auth: dict, optional
2126
+ :param _content_type: force content-type for the request.
2127
+ :type _content_type: str, Optional
2128
+ :param _headers: set to override the headers for a single
2129
+ request; this effectively ignores the headers
2130
+ in the spec for a single request.
2131
+ :type _headers: dict, optional
2132
+ :param _host_index: set to override the host_index for a single
2133
+ request; this effectively ignores the host_index
2134
+ in the spec for a single request.
2135
+ :type _host_index: int, optional
2136
+ :return: Returns the result object.
2137
+ """ # noqa: E501
2138
+
2139
+ _param = self._trigger_snapshot_compute_serialize(
2140
+ snapshot_compute_request=snapshot_compute_request,
2141
+ _request_auth=_request_auth,
2142
+ _content_type=_content_type,
2143
+ _headers=_headers,
2144
+ _host_index=_host_index
2145
+ )
2146
+
2147
+ _response_types_map: Dict[str, Optional[str]] = {
2148
+ '202': "SnapshotComputeResponse",
2149
+ '422': "AcuteHTTPValidationError",
2150
+ }
2151
+ response_data = self.api_client.call_api(
2152
+ *_param,
2153
+ _request_timeout=_request_timeout
2154
+ )
2155
+ response_data.read()
2156
+ return self.api_client.response_deserialize(
2157
+ response_data=response_data,
2158
+ response_types_map=_response_types_map,
2159
+ )
2160
+
2161
+
2162
+ @validate_call
2163
+ def trigger_snapshot_compute_without_preload_content(
2164
+ self,
2165
+ snapshot_compute_request: SnapshotComputeRequest,
2166
+ _request_timeout: Union[
2167
+ None,
2168
+ Annotated[StrictFloat, Field(gt=0)],
2169
+ Tuple[
2170
+ Annotated[StrictFloat, Field(gt=0)],
2171
+ Annotated[StrictFloat, Field(gt=0)]
2172
+ ]
2173
+ ] = None,
2174
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
2175
+ _content_type: Optional[StrictStr] = None,
2176
+ _headers: Optional[Dict[StrictStr, Any]] = None,
2177
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2178
+ ) -> RESTResponseType:
2179
+ """Trigger snapshot computation (operator)
2180
+
2181
+ Operator endpoint: compute and upsert a margin_snapshot for the given period. body.tenant_id must match the API-key-derived tenant for security.
2182
+
2183
+ :param snapshot_compute_request: (required)
2184
+ :type snapshot_compute_request: SnapshotComputeRequest
2185
+ :param _request_timeout: timeout setting for this request. If one
2186
+ number provided, it will be total request
2187
+ timeout. It can also be a pair (tuple) of
2188
+ (connection, read) timeouts.
2189
+ :type _request_timeout: int, tuple(int, int), optional
2190
+ :param _request_auth: set to override the auth_settings for an a single
2191
+ request; this effectively ignores the
2192
+ authentication in the spec for a single request.
2193
+ :type _request_auth: dict, optional
2194
+ :param _content_type: force content-type for the request.
2195
+ :type _content_type: str, Optional
2196
+ :param _headers: set to override the headers for a single
2197
+ request; this effectively ignores the headers
2198
+ in the spec for a single request.
2199
+ :type _headers: dict, optional
2200
+ :param _host_index: set to override the host_index for a single
2201
+ request; this effectively ignores the host_index
2202
+ in the spec for a single request.
2203
+ :type _host_index: int, optional
2204
+ :return: Returns the result object.
2205
+ """ # noqa: E501
2206
+
2207
+ _param = self._trigger_snapshot_compute_serialize(
2208
+ snapshot_compute_request=snapshot_compute_request,
2209
+ _request_auth=_request_auth,
2210
+ _content_type=_content_type,
2211
+ _headers=_headers,
2212
+ _host_index=_host_index
2213
+ )
2214
+
2215
+ _response_types_map: Dict[str, Optional[str]] = {
2216
+ '202': "SnapshotComputeResponse",
2217
+ '422': "AcuteHTTPValidationError",
2218
+ }
2219
+ response_data = self.api_client.call_api(
2220
+ *_param,
2221
+ _request_timeout=_request_timeout
2222
+ )
2223
+ return response_data.response
2224
+
2225
+
2226
+ def _trigger_snapshot_compute_serialize(
2227
+ self,
2228
+ snapshot_compute_request,
2229
+ _request_auth,
2230
+ _content_type,
2231
+ _headers,
2232
+ _host_index,
2233
+ ) -> RequestSerialized:
2234
+
2235
+ _host = None
2236
+
2237
+ _collection_formats: Dict[str, str] = {
2238
+ }
2239
+
2240
+ _path_params: Dict[str, str] = {}
2241
+ _query_params: List[Tuple[str, str]] = []
2242
+ _header_params: Dict[str, Optional[str]] = _headers or {}
2243
+ _form_params: List[Tuple[str, str]] = []
2244
+ _files: Dict[
2245
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
2246
+ ] = {}
2247
+ _body_params: Optional[bytes] = None
2248
+
2249
+ # process the path parameters
2250
+ # process the query parameters
2251
+ # process the header parameters
2252
+ # process the form parameters
2253
+ # process the body parameter
2254
+ if snapshot_compute_request is not None:
2255
+ _body_params = snapshot_compute_request
2256
+
2257
+
2258
+ # set the HTTP header `Accept`
2259
+ if 'Accept' not in _header_params:
2260
+ _header_params['Accept'] = self.api_client.select_header_accept(
2261
+ [
2262
+ 'application/json'
2263
+ ]
2264
+ )
2265
+
2266
+ # set the HTTP header `Content-Type`
2267
+ if _content_type:
2268
+ _header_params['Content-Type'] = _content_type
2269
+ else:
2270
+ _default_content_type = (
2271
+ self.api_client.select_header_content_type(
2272
+ [
2273
+ 'application/json'
2274
+ ]
2275
+ )
2276
+ )
2277
+ if _default_content_type is not None:
2278
+ _header_params['Content-Type'] = _default_content_type
2279
+
2280
+ # authentication setting
2281
+ _auth_settings: List[str] = [
2282
+ 'APIKeyHeader',
2283
+ 'HTTPBearer'
2284
+ ]
2285
+
2286
+ return self.api_client.param_serialize(
2287
+ method='POST',
2288
+ resource_path='/api/v1/cost/margins/snapshot/compute',
2289
+ path_params=_path_params,
2290
+ query_params=_query_params,
2291
+ header_params=_header_params,
2292
+ body=_body_params,
2293
+ post_params=_form_params,
2294
+ files=_files,
2295
+ auth_settings=_auth_settings,
2296
+ collection_formats=_collection_formats,
2297
+ _host=_host,
2298
+ _request_auth=_request_auth
2299
+ )
2300
+
2301
+