infrawrench-sdk 1.70.0 → 1.73.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 25274888c2afd271d21ac34a80c020079cd99ed264ce715da1bcb6b311573ddc
4
- data.tar.gz: 041d1961dd6889020b688e6501107a813309ab7745e3c454742c130d235e50f3
3
+ metadata.gz: 98a0bde901a3f9488c2d7d38643e5f95308572dd31261a6d5f303b59449d653a
4
+ data.tar.gz: '09a1c701d340165b89237510be54497211757222bd2e56025b7af4f313aeebbf'
5
5
  SHA512:
6
- metadata.gz: a0e88496bc0e3e0ad7565f8b008092fafaa47af64c7051bfbabc47ec7aace870ded89b85254adbef3d700bef696c57279f26dd33f307bf08806974ec7602f2e5
7
- data.tar.gz: a8c608690950d6183a5cd10ebdee7d5ba3edc229bed66e72738ea2b869fbc37a29e76ab0646e761d4a161eaa7daaa0a7fcece77806ed797160a943607246884b
6
+ metadata.gz: f6f203c2359a9ab2287324b9e31b60e2073cf65f8359fb49cf7b1359e49267830cad0549e9ef72b330c424a2ba940106062e8bbac37ad33dfcaba35ee8ea94a4
7
+ data.tar.gz: b1adbd0af9886346eb5519923187520d43b775688ac6811a615e9b9dd504863705fca4f2eb5606e83999a6bfee8f7aca487a74ad9342c55c71f83aa62278f2ac
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # infrawrench-sdk
2
2
 
3
- Generated Ruby client for the Infrawrench API (API version `1.70.0`).
3
+ Generated Ruby client for the Infrawrench API (API version `1.73.0`).
4
4
 
5
5
  **Do not edit this gem by hand** — it is regenerated from `openapi.json` and is
6
6
  not checked into the repository. Run
@@ -41,7 +41,7 @@ Every method takes an optional trailing `request_options:` hash (`:headers`,
41
41
  Responses are the plain `Hash`/`Array` that `JSON.parse` returns, with String
42
42
  keys spelled exactly as the wire spells them. There are no model classes — see
43
43
  [`sig/infrawrench/sdk.rbs`](./sig/infrawrench/sdk.rbs) for the shape of every one of the
44
- 903 schemas, as RBS type aliases that steep and TypeProf can read.
44
+ 928 schemas, as RBS type aliases that steep and TypeProf can read.
45
45
 
46
46
  Non-2xx responses raise `Infrawrench::ApiError`, which carries `#status`,
47
47
  the parsed `#body`, and the machine-readable `#code` when the API sends one —
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.70.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.73.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.70.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.73.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -17,8 +17,8 @@ require_relative "lib/infrawrench/version"
17
17
  Gem::Specification.new do |spec|
18
18
  spec.name = "infrawrench-sdk"
19
19
  spec.version = Infrawrench::VERSION
20
- spec.summary = "Generated Ruby client for the Infrawrench API (v1.70.0)."
21
- spec.description = "Generated Ruby client for the Infrawrench API (v1.70.0). Covers the published API surface only — operations marked x-internal in the spec are not generated. No runtime dependencies."
20
+ spec.summary = "Generated Ruby client for the Infrawrench API (v1.73.0)."
21
+ spec.description = "Generated Ruby client for the Infrawrench API (v1.73.0). Covers the published API surface only — operations marked x-internal in the spec are not generated. No runtime dependencies."
22
22
  spec.authors = ["Infrawrench LLC", "Astrid Gealer"]
23
23
  spec.email = ["astrid@infrawrench.com"]
24
24
  spec.homepage = "https://infrawrench.com/docs/team-and-billing/client-sdks"
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.70.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.73.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.70.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.73.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1758,6 +1758,131 @@ module Infrawrench
1758
1758
  end
1759
1759
  end
1760
1760
 
1761
+ # `client.alert_email.settings`
1762
+ class AlertEmailSettingsNamespace
1763
+ # @api private
1764
+ # @param transport [Transport]
1765
+ def initialize(transport)
1766
+ @transport = transport
1767
+ end
1768
+
1769
+ # Get the alert email policy and suppression list
1770
+ #
1771
+ # GET /api/org/{orgId}/alert-email/settings
1772
+ #
1773
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
1774
+ # constructed with.
1775
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
1776
+ # @return [Hash] Parsed JSON, shaped as `AlertEmailSettingsView` — see
1777
+ # `sig/infrawrench/sdk.rbs`.
1778
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
1779
+ def get(org_id: nil, request_options: nil)
1780
+ @transport.request(
1781
+ http_method: "GET",
1782
+ path: "/api/org/{orgId}/alert-email/settings",
1783
+ path_params: { "orgId" => org_id },
1784
+ request_options: request_options
1785
+ )
1786
+ end
1787
+
1788
+ # Set the alert email external-address policy
1789
+ #
1790
+ # Whole object. Tightening the policy does not edit any stored recipient
1791
+ # list: an address that no longer passes is skipped at send time, and
1792
+ # loosening the policy again brings it back.
1793
+ #
1794
+ # PUT /api/org/{orgId}/alert-email/settings
1795
+ #
1796
+ # Raises on 400: Bad request
1797
+ #
1798
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
1799
+ # constructed with.
1800
+ # @param body [Hash, nil] Request body, shaped as `AlertEmailSettings`.
1801
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
1802
+ # @return [Hash] Parsed JSON, shaped as `AlertEmailSettingsView` — see
1803
+ # `sig/infrawrench/sdk.rbs`.
1804
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
1805
+ def update(org_id: nil, body: nil, request_options: nil)
1806
+ @transport.request(
1807
+ http_method: "PUT",
1808
+ path: "/api/org/{orgId}/alert-email/settings",
1809
+ path_params: { "orgId" => org_id },
1810
+ body: body,
1811
+ request_options: request_options
1812
+ )
1813
+ end
1814
+ end
1815
+
1816
+ # `client.alert_email.suppressions`
1817
+ class AlertEmailSuppressionsNamespace
1818
+ # @api private
1819
+ # @param transport [Transport]
1820
+ def initialize(transport)
1821
+ @transport = transport
1822
+ end
1823
+
1824
+ # Resume alert email to an unsubscribed address
1825
+ #
1826
+ # DELETE /api/org/{orgId}/alert-email/suppressions/{id}
1827
+ #
1828
+ # Raises on 404: Not found
1829
+ #
1830
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
1831
+ # constructed with.
1832
+ # @param id [String]
1833
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
1834
+ # @return [Hash] Parsed JSON, shaped as `Hash` — see `sig/infrawrench/sdk.rbs`.
1835
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
1836
+ def delete(id:, org_id: nil, request_options: nil)
1837
+ @transport.request(
1838
+ http_method: "DELETE",
1839
+ path: "/api/org/{orgId}/alert-email/suppressions/{id}",
1840
+ path_params: { "orgId" => org_id, "id" => id },
1841
+ request_options: request_options
1842
+ )
1843
+ end
1844
+ end
1845
+
1846
+ # `client.alert_email`
1847
+ class AlertEmailNamespace
1848
+ # @return [AlertEmailSettingsNamespace] `client.alert_email.settings`
1849
+ attr_reader :settings
1850
+ # @return [AlertEmailSuppressionsNamespace] `client.alert_email.suppressions`
1851
+ attr_reader :suppressions
1852
+
1853
+ # @api private
1854
+ # @param transport [Transport]
1855
+ def initialize(transport)
1856
+ @transport = transport
1857
+ @settings = AlertEmailSettingsNamespace.new(@transport)
1858
+ @suppressions = AlertEmailSuppressionsNamespace.new(@transport)
1859
+ end
1860
+
1861
+ # Recipient picker options for alert email
1862
+ #
1863
+ # Current members (with their login address), the external-address policy
1864
+ # and whether email is available on this deployment: everything a client
1865
+ # needs to edit the `emailRecipients` on a budget, cost change alert,
1866
+ # anomaly settings or efficiency alert settings, or an email destination on
1867
+ # an alert routing rule. Requires `costs:read`.
1868
+ #
1869
+ # GET /api/org/{orgId}/alert-email
1870
+ #
1871
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
1872
+ # constructed with.
1873
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
1874
+ # @return [Hash] Parsed JSON, shaped as `AlertEmailOptions` — see `sig/infrawrench/sdk.rbs`.
1875
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
1876
+ def get(org_id: nil, request_options: nil)
1877
+ @transport.request(
1878
+ http_method: "GET",
1879
+ path: "/api/org/{orgId}/alert-email",
1880
+ path_params: { "orgId" => org_id },
1881
+ request_options: request_options
1882
+ )
1883
+ end
1884
+ end
1885
+
1761
1886
  # `client.alert_rules.deliveries`
1762
1887
  class AlertRulesDeliveriesNamespace
1763
1888
  # @api private
@@ -10718,6 +10843,111 @@ module Infrawrench
10718
10843
  end
10719
10844
  end
10720
10845
 
10846
+ # `client.extended_support.settings`
10847
+ class ExtendedSupportSettingsNamespace
10848
+ # @api private
10849
+ # @param transport [Transport]
10850
+ def initialize(transport)
10851
+ @transport = transport
10852
+ end
10853
+
10854
+ # Get the organization's extended-support settings
10855
+ #
10856
+ # An organization that never saved reads the shipped defaults (enabled, 90
10857
+ # days).
10858
+ #
10859
+ # _Requires permission: `org:settings:write`._
10860
+ #
10861
+ # GET /api/org/{orgId}/extended-support/settings
10862
+ #
10863
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
10864
+ # constructed with.
10865
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
10866
+ # @return [Hash] Parsed JSON, shaped as `ExtendedSupportSettings` — see
10867
+ # `sig/infrawrench/sdk.rbs`.
10868
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
10869
+ def get(org_id: nil, request_options: nil)
10870
+ @transport.request(
10871
+ http_method: "GET",
10872
+ path: "/api/org/{orgId}/extended-support/settings",
10873
+ path_params: { "orgId" => org_id },
10874
+ request_options: request_options
10875
+ )
10876
+ end
10877
+
10878
+ # Update the extended-support settings
10879
+ #
10880
+ # Every field is optional. `leadDays` must be a whole number from 1 to 365.
10881
+ # Saving never resets the alert cooldown.
10882
+ #
10883
+ # _Requires permission: `org:settings:write`._
10884
+ #
10885
+ # PUT /api/org/{orgId}/extended-support/settings
10886
+ #
10887
+ # Raises on 400: Bad request
10888
+ #
10889
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
10890
+ # constructed with.
10891
+ # @param body [Hash, nil] Request body, shaped as `ExtendedSupportSettingsUpdate`.
10892
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
10893
+ # @return [Hash] Parsed JSON, shaped as `ExtendedSupportSettings` — see
10894
+ # `sig/infrawrench/sdk.rbs`.
10895
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
10896
+ def update(org_id: nil, body: nil, request_options: nil)
10897
+ @transport.request(
10898
+ http_method: "PUT",
10899
+ path: "/api/org/{orgId}/extended-support/settings",
10900
+ path_params: { "orgId" => org_id },
10901
+ body: body,
10902
+ request_options: request_options
10903
+ )
10904
+ end
10905
+ end
10906
+
10907
+ # `client.extended_support`
10908
+ class ExtendedSupportNamespace
10909
+ # @return [ExtendedSupportSettingsNamespace] `client.extended_support.settings`
10910
+ attr_reader :settings
10911
+
10912
+ # @api private
10913
+ # @param transport [Transport]
10914
+ def initialize(transport)
10915
+ @transport = transport
10916
+ @settings = ExtendedSupportSettingsNamespace.new(@transport)
10917
+ end
10918
+
10919
+ # List resources billed at extended-support or end-of-life rates
10920
+ #
10921
+ # Matches every synced resource's version against its provider's support
10922
+ # calendar (declared by the plugin): resources paying an extended-support
10923
+ # surcharge, past the end of support, or whose standard support ends within
10924
+ # the lead time. Each finding carries the monthly surcharge an upgrade
10925
+ # removes: the provider's billed amount where it can be attributed (AWS Cost
10926
+ # Explorer extended-support usage types), otherwise list price. Results are
10927
+ # cached for a few minutes; pass `refresh=true` to recompute.
10928
+ #
10929
+ # _Requires permission: `resources:read`._
10930
+ #
10931
+ # GET /api/org/{orgId}/extended-support
10932
+ #
10933
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
10934
+ # constructed with.
10935
+ # @param refresh [String, nil] Bypass the short server-side cache and recompute now.
10936
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
10937
+ # @return [Hash] Parsed JSON, shaped as `ExtendedSupportListResponse` — see
10938
+ # `sig/infrawrench/sdk.rbs`.
10939
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
10940
+ def get(org_id: nil, refresh: nil, request_options: nil)
10941
+ @transport.request(
10942
+ http_method: "GET",
10943
+ path: "/api/org/{orgId}/extended-support",
10944
+ path_params: { "orgId" => org_id },
10945
+ query: { "refresh" => refresh },
10946
+ request_options: request_options
10947
+ )
10948
+ end
10949
+ end
10950
+
10721
10951
  # `client.github_issues.pull_requests`
10722
10952
  class GithubIssuesPullRequestsNamespace
10723
10953
  # @api private
@@ -16903,6 +17133,236 @@ module Infrawrench
16903
17133
  end
16904
17134
  end
16905
17135
 
17136
+ # `client.savings.events.update`
17137
+ class SavingsEventsUpdateNamespace
17138
+ # @api private
17139
+ # @param transport [Transport]
17140
+ def initialize(transport)
17141
+ @transport = transport
17142
+ end
17143
+
17144
+ # Annotate a saving
17145
+ #
17146
+ # Add context to any event: a note, an explicit cost centre, a horizon
17147
+ # override, or an end date. The facts of an automatic event (what was done,
17148
+ # when, the projection) stay as observed.
17149
+ #
17150
+ # PATCH /api/org/{orgId}/savings/events/{id}
17151
+ #
17152
+ # Raises on 400: Bad request
17153
+ #
17154
+ # Raises on 404: Not found
17155
+ #
17156
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
17157
+ # constructed with.
17158
+ # @param id [String]
17159
+ # @param body [Hash] Request body, shaped as `SavingsEventAnnotation`.
17160
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
17161
+ # @return [Hash] Parsed JSON, shaped as `SavingsEvent` — see `sig/infrawrench/sdk.rbs`.
17162
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
17163
+ def patch_org_org_id_savings_events_id(id:, body:, org_id: nil, request_options: nil)
17164
+ @transport.request(
17165
+ http_method: "PATCH",
17166
+ path: "/api/org/{orgId}/savings/events/{id}",
17167
+ path_params: { "orgId" => org_id, "id" => id },
17168
+ body: body,
17169
+ request_options: request_options
17170
+ )
17171
+ end
17172
+
17173
+ # Rewrite a manual saving
17174
+ #
17175
+ # Full replace of a manual entry. Automatic events are a 400; use PATCH.
17176
+ #
17177
+ # PUT /api/org/{orgId}/savings/events/{id}
17178
+ #
17179
+ # Raises on 400: Bad request
17180
+ #
17181
+ # Raises on 404: Not found
17182
+ #
17183
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
17184
+ # constructed with.
17185
+ # @param id [String]
17186
+ # @param body [Hash] Request body, shaped as `SavingsEventInput`.
17187
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
17188
+ # @return [Hash] Parsed JSON, shaped as `SavingsEvent` — see `sig/infrawrench/sdk.rbs`.
17189
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
17190
+ def update(id:, body:, org_id: nil, request_options: nil)
17191
+ @transport.request(
17192
+ http_method: "PUT",
17193
+ path: "/api/org/{orgId}/savings/events/{id}",
17194
+ path_params: { "orgId" => org_id, "id" => id },
17195
+ body: body,
17196
+ request_options: request_options
17197
+ )
17198
+ end
17199
+ end
17200
+
17201
+ # `client.savings.events`
17202
+ class SavingsEventsNamespace
17203
+ # @return [SavingsEventsUpdateNamespace] `client.savings.events.update`
17204
+ attr_reader :update
17205
+
17206
+ # @api private
17207
+ # @param transport [Transport]
17208
+ def initialize(transport)
17209
+ @transport = transport
17210
+ @update = SavingsEventsUpdateNamespace.new(@transport)
17211
+ end
17212
+
17213
+ # Log a saving
17214
+ #
17215
+ # Record a saving by hand, with the monthly amount and the day it began.
17216
+ # Leaves an org-wide cost annotation on that day. Requires `costs:write`.
17217
+ #
17218
+ # POST /api/org/{orgId}/savings/events
17219
+ #
17220
+ # Raises on 400: Bad request
17221
+ #
17222
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
17223
+ # constructed with.
17224
+ # @param body [Hash] Request body, shaped as `SavingsEventInput`.
17225
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
17226
+ # @return [Hash] Parsed JSON, shaped as `SavingsEvent` — see `sig/infrawrench/sdk.rbs`.
17227
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
17228
+ def create(body:, org_id: nil, request_options: nil)
17229
+ @transport.request(
17230
+ http_method: "POST",
17231
+ path: "/api/org/{orgId}/savings/events",
17232
+ path_params: { "orgId" => org_id },
17233
+ body: body,
17234
+ request_options: request_options
17235
+ )
17236
+ end
17237
+
17238
+ # Remove a saving
17239
+ #
17240
+ # Hard delete, together with the cost annotation the event left on the
17241
+ # charts.
17242
+ #
17243
+ # DELETE /api/org/{orgId}/savings/events/{id}
17244
+ #
17245
+ # Raises on 404: Not found
17246
+ #
17247
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
17248
+ # constructed with.
17249
+ # @param id [String]
17250
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
17251
+ # @return [Hash] Parsed JSON, shaped as `Ok` — see `sig/infrawrench/sdk.rbs`.
17252
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
17253
+ def delete(id:, org_id: nil, request_options: nil)
17254
+ @transport.request(
17255
+ http_method: "DELETE",
17256
+ path: "/api/org/{orgId}/savings/events/{id}",
17257
+ path_params: { "orgId" => org_id, "id" => id },
17258
+ request_options: request_options
17259
+ )
17260
+ end
17261
+ end
17262
+
17263
+ # `client.savings.settings`
17264
+ class SavingsSettingsNamespace
17265
+ # @api private
17266
+ # @param transport [Transport]
17267
+ def initialize(transport)
17268
+ @transport = transport
17269
+ end
17270
+
17271
+ # Get realized savings settings
17272
+ #
17273
+ # The org's horizon, shortfall threshold and baseline window; defaults when
17274
+ # never saved.
17275
+ #
17276
+ # GET /api/org/{orgId}/savings/settings
17277
+ #
17278
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
17279
+ # constructed with.
17280
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
17281
+ # @return [Hash] Parsed JSON, shaped as `RealizedSavingsSettings` — see
17282
+ # `sig/infrawrench/sdk.rbs`.
17283
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
17284
+ def get(org_id: nil, request_options: nil)
17285
+ @transport.request(
17286
+ http_method: "GET",
17287
+ path: "/api/org/{orgId}/savings/settings",
17288
+ path_params: { "orgId" => org_id },
17289
+ request_options: request_options
17290
+ )
17291
+ end
17292
+
17293
+ # Update realized savings settings
17294
+ #
17295
+ # Requires `costs:write`. Changes every figure in the report, retroactively.
17296
+ #
17297
+ # PUT /api/org/{orgId}/savings/settings
17298
+ #
17299
+ # Raises on 400: Bad request
17300
+ #
17301
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
17302
+ # constructed with.
17303
+ # @param body [Hash] Request body, shaped as `RealizedSavingsSettings`.
17304
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
17305
+ # @return [Hash] Parsed JSON, shaped as `RealizedSavingsSettings` — see
17306
+ # `sig/infrawrench/sdk.rbs`.
17307
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
17308
+ def update(body:, org_id: nil, request_options: nil)
17309
+ @transport.request(
17310
+ http_method: "PUT",
17311
+ path: "/api/org/{orgId}/savings/settings",
17312
+ path_params: { "orgId" => org_id },
17313
+ body: body,
17314
+ request_options: request_options
17315
+ )
17316
+ end
17317
+ end
17318
+
17319
+ # `client.savings`
17320
+ class SavingsNamespace
17321
+ # @return [SavingsEventsNamespace] `client.savings.events`
17322
+ attr_reader :events
17323
+ # @return [SavingsSettingsNamespace] `client.savings.settings`
17324
+ attr_reader :settings
17325
+
17326
+ # @api private
17327
+ # @param transport [Transport]
17328
+ def initialize(transport)
17329
+ @transport = transport
17330
+ @events = SavingsEventsNamespace.new(@transport)
17331
+ @settings = SavingsSettingsNamespace.new(@transport)
17332
+ end
17333
+
17334
+ # Realized savings report
17335
+ #
17336
+ # What the actions taken actually saved, against each resource's own
17337
+ # trailing daily spend before the action, accrued day by day (one-off
17338
+ # actions up to the horizon). Recomputed on every read, so figures improve
17339
+ # as restated billing lands. Days collection has not covered are not
17340
+ # accrued. Per-currency throughout; never converted or merged.
17341
+ #
17342
+ # GET /api/org/{orgId}/savings/realized
17343
+ #
17344
+ # Raises on 400: Bad request
17345
+ #
17346
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
17347
+ # constructed with.
17348
+ # @param from [String, nil] Inclusive first day. Defaults to the first of the month 11
17349
+ # months back.
17350
+ # @param to [String, nil] Inclusive last day. Defaults to yesterday.
17351
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
17352
+ # @return [Hash] Parsed JSON, shaped as `RealizedSavingsReport` — see
17353
+ # `sig/infrawrench/sdk.rbs`.
17354
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
17355
+ def realized(org_id: nil, from: nil, to: nil, request_options: nil)
17356
+ @transport.request(
17357
+ http_method: "GET",
17358
+ path: "/api/org/{orgId}/savings/realized",
17359
+ path_params: { "orgId" => org_id },
17360
+ query: { "from" => from, "to" => to },
17361
+ request_options: request_options
17362
+ )
17363
+ end
17364
+ end
17365
+
16906
17366
  # `client.schedules`
16907
17367
  class SchedulesNamespace
16908
17368
  # @api private
@@ -20355,6 +20815,8 @@ module Infrawrench
20355
20815
  attr_reader :agents
20356
20816
  # @return [AiAttributionNamespace] `client.ai_attribution`
20357
20817
  attr_reader :ai_attribution
20818
+ # @return [AlertEmailNamespace] `client.alert_email`
20819
+ attr_reader :alert_email
20358
20820
  # @return [AlertRulesNamespace] `client.alert_rules`
20359
20821
  attr_reader :alert_rules
20360
20822
  # @return [ApiKeysNamespace] `client.api_keys`
@@ -20451,6 +20913,8 @@ module Infrawrench
20451
20913
  attr_reader :environments
20452
20914
  # @return [ExpiringNamespace] `client.expiring`
20453
20915
  attr_reader :expiring
20916
+ # @return [ExtendedSupportNamespace] `client.extended_support`
20917
+ attr_reader :extended_support
20454
20918
  # @return [GithubIssuesNamespace] `client.github_issues`
20455
20919
  attr_reader :github_issues
20456
20920
  # @return [IacNamespace] `client.iac`
@@ -20511,6 +20975,8 @@ module Infrawrench
20511
20975
  attr_reader :runbooks
20512
20976
  # @return [SavedCostFiltersNamespace] `client.saved_cost_filters`
20513
20977
  attr_reader :saved_cost_filters
20978
+ # @return [SavingsNamespace] `client.savings`
20979
+ attr_reader :savings
20514
20980
  # @return [SchedulesNamespace] `client.schedules`
20515
20981
  attr_reader :schedules
20516
20982
  # @return [SearchNamespace] `client.search`
@@ -20570,6 +21036,7 @@ module Infrawrench
20570
21036
  @agent_registrations = AgentRegistrationsNamespace.new(@transport)
20571
21037
  @agents = AgentsNamespace.new(@transport)
20572
21038
  @ai_attribution = AiAttributionNamespace.new(@transport)
21039
+ @alert_email = AlertEmailNamespace.new(@transport)
20573
21040
  @alert_rules = AlertRulesNamespace.new(@transport)
20574
21041
  @api_keys = ApiKeysNamespace.new(@transport)
20575
21042
  @apps = AppsNamespace.new(@transport)
@@ -20618,6 +21085,7 @@ module Infrawrench
20618
21085
  @environment_diff = EnvironmentDiffNamespace.new(@transport)
20619
21086
  @environments = EnvironmentsNamespace.new(@transport)
20620
21087
  @expiring = ExpiringNamespace.new(@transport)
21088
+ @extended_support = ExtendedSupportNamespace.new(@transport)
20621
21089
  @github_issues = GithubIssuesNamespace.new(@transport)
20622
21090
  @iac = IacNamespace.new(@transport)
20623
21091
  @incidents = IncidentsNamespace.new(@transport)
@@ -20648,6 +21116,7 @@ module Infrawrench
20648
21116
  @rightsizing = RightsizingNamespace.new(@transport)
20649
21117
  @runbooks = RunbooksNamespace.new(@transport)
20650
21118
  @saved_cost_filters = SavedCostFiltersNamespace.new(@transport)
21119
+ @savings = SavingsNamespace.new(@transport)
20651
21120
  @schedules = SchedulesNamespace.new(@transport)
20652
21121
  @search = SearchNamespace.new(@transport)
20653
21122
  @session_recordings = SessionRecordingsNamespace.new(@transport)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.70.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.73.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.70.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.73.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.70.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.73.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.70.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.73.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.70.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.73.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.70.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.73.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -15,5 +15,5 @@
15
15
  # Kept in its own file so the gemspec can read the version without loading the
16
16
  # client — a gemspec that pulls in net/http is a gemspec that can fail to parse.
17
17
  module Infrawrench
18
- VERSION = "1.70.0"
18
+ VERSION = "1.73.0"
19
19
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.70.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.73.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.70.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.73.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1,7 +1,7 @@
1
- # infrawrench-sdk v1.70.0 | MIT | Copyright (c) 2026 Infrawrench LLC
1
+ # infrawrench-sdk v1.73.0 | MIT | Copyright (c) 2026 Infrawrench LLC
2
2
  # https://github.com/Infrawrench/Infrawrench
3
3
  #
4
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.70.0).
4
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.73.0).
5
5
  #
6
6
  # DO NOT EDIT. Regenerate with:
7
7
  # pnpm --filter @infrawrench/web generate:sdk
@@ -584,12 +584,52 @@ module Infrawrench
584
584
  # cost anomalies, idle commitments) can be filed; for other triggers this
585
585
  # destination is skipped.
586
586
  #
587
+ # `email-member` and `email-address` send an HTML and plain-text email with a
588
+ # link back into the app and a one-click unsubscribe link. Email carries no
589
+ # acknowledge button, so a rule routed only to email always escalates.
590
+ #
587
591
  # Spec schema: `AlertDestination`.
588
592
  type alert_destination = { "kind" => "push" }
589
593
  | { "kind" => "slack", "channelId" => String }
590
594
  | { "kind" => "msteams", "webhookId" => String }
591
595
  | { "kind" => "on-call", "scheduleId" => String }
592
596
  | { "kind" => "github-issues" }
597
+ | { "kind" => "email-member", "userId" => String }
598
+ | { "kind" => "email-address", "address" => String }
599
+
600
+ # Spec schema: `AlertEmailMember`.
601
+ type alert_email_member = { "userId" => String, "name" => String | nil, "email" => String }
602
+
603
+ # Spec schema: `AlertEmailOptions`.
604
+ type alert_email_options = {
605
+ "emailAvailable" => bool,
606
+ "members" => Array[alert_email_member],
607
+ "settings" => alert_email_settings,
608
+ "memberDomains" => Array[String]
609
+ }
610
+
611
+ # Who is emailed when this object fires, **in addition to** whatever the
612
+ # organization's alert routing rules decide. Delivered whether or not a rule
613
+ # matched and not held by quiet hours. On a write, omitting the field leaves
614
+ # the stored list unchanged; send empty arrays to clear it.
615
+ #
616
+ # Spec schema: `AlertEmailRecipients`.
617
+ type alert_email_recipients = { "userIds" => Array[String], "addresses" => Array[String] }
618
+
619
+ # Spec schema: `AlertEmailSettings`.
620
+ type alert_email_settings = { "externalPolicy" => "member-domains" | "any", "allowedDomains" => Array[String] }
621
+
622
+ # Spec schema: `AlertEmailSettingsView`.
623
+ type alert_email_settings_view = {
624
+ "externalPolicy" => "member-domains" | "any",
625
+ "allowedDomains" => Array[String],
626
+ "emailAvailable" => bool,
627
+ "memberDomains" => Array[String],
628
+ "suppressions" => Array[alert_email_suppression]
629
+ }
630
+
631
+ # Spec schema: `AlertEmailSuppression`.
632
+ type alert_email_suppression = { "id" => String, "email" => String, "createdAt" => String }
593
633
 
594
634
  # Spec schema: `AlertRule`.
595
635
  type alert_rule = {
@@ -623,7 +663,11 @@ module Infrawrench
623
663
  "slackChannels" => Array[{ "id" => String, "name" => String, "isPrivate" => bool }],
624
664
  "msTeamsWebhooks" => Array[{ "id" => String, "label" => String }],
625
665
  "accounts" => Array[{ "id" => String, "displayName" => String, "pluginId" => String }],
626
- "onCallSchedules" => Array[{ "id" => String, "name" => String }]
666
+ "onCallSchedules" => Array[{ "id" => String, "name" => String }],
667
+ "members" => Array[{ "userId" => String, "name" => String | nil, "email" => String }],
668
+ "emailAvailable" => bool,
669
+ "emailSettings" => { "externalPolicy" => "member-domains" | "any", "allowedDomains" => Array[String] },
670
+ "memberDomains" => Array[String]
627
671
  }
628
672
 
629
673
  # Alert severity, ordered info < warning < critical.
@@ -651,6 +695,7 @@ module Infrawrench
651
695
  | "postureAlerts"
652
696
  | "probeAlerts"
653
697
  | "quotaAlerts"
698
+ | "extendedSupportAlerts"
654
699
  | "incidentAlerts"
655
700
  | "weeklyDigest"
656
701
 
@@ -1142,6 +1187,7 @@ module Infrawrench
1142
1187
  "thresholds" => Array[budget_threshold],
1143
1188
  "costBasis" => budget_cost_basis & untyped,
1144
1189
  "useAdjustedSpend" => bool,
1190
+ "emailRecipients" => alert_email_recipients,
1145
1191
  "createdByUserId" => String | nil,
1146
1192
  "deletedAt" => String | nil,
1147
1193
  "createdAt" => String,
@@ -1175,7 +1221,8 @@ module Infrawrench
1175
1221
  ?"usageUnit" => String,
1176
1222
  ?"usageAmount" => Numeric,
1177
1223
  ?"period" => budget_period & (budget_recurring_period | budget_explicit_periods),
1178
- ?"parentBudgetId" => String
1224
+ ?"parentBudgetId" => String,
1225
+ ?"emailRecipients" => alert_email_recipients
1179
1226
  }
1180
1227
 
1181
1228
  # What the budget counts. `cost` (the default) is money in `currency`, against
@@ -1222,6 +1269,7 @@ module Infrawrench
1222
1269
  "scenarioModelId" => String | nil,
1223
1270
  "scenarioModelName" => String | nil,
1224
1271
  "useAdjustedSpend" => bool,
1272
+ "emailRecipients" => alert_email_recipients,
1225
1273
  "rawActualCents" => Integer | nil,
1226
1274
  "month" => String,
1227
1275
  "actualCents" => Integer,
@@ -2102,6 +2150,7 @@ module Infrawrench
2102
2150
  "enabled" => bool,
2103
2151
  "lastEvaluatedAt" => String | nil,
2104
2152
  "lastFiredAt" => String | nil,
2153
+ "emailRecipients" => alert_email_recipients,
2105
2154
  "createdAt" => String,
2106
2155
  "updatedAt" => String
2107
2156
  }
@@ -2161,7 +2210,8 @@ module Infrawrench
2161
2210
  ?"thresholdPercent" => Integer | nil,
2162
2211
  ?"thresholdAmountCents" => Integer | nil,
2163
2212
  "direction" => cost_change_direction,
2164
- ?"enabled" => bool
2213
+ ?"enabled" => bool,
2214
+ ?"emailRecipients" => alert_email_recipients
2165
2215
  }
2166
2216
 
2167
2217
  # Spec schema: `CostAnnotation`.
@@ -2301,7 +2351,8 @@ module Infrawrench
2301
2351
  "minDeltaCents" => Integer,
2302
2352
  "newSourceMinCents" => Integer,
2303
2353
  "smsAlerts" => "off" | "new_source" | "all",
2304
- ?"feedbackTuning" => bool
2354
+ ?"feedbackTuning" => bool,
2355
+ ?"emailRecipients" => alert_email_recipients
2305
2356
  }
2306
2357
 
2307
2358
  # Spec schema: `CostAnomalySettingsView`.
@@ -2584,7 +2635,8 @@ module Infrawrench
2584
2635
  "unitCostThresholdPercent" => Integer,
2585
2636
  "unitCostWindowDays" => Integer,
2586
2637
  "unitCostMinReportedDays" => Integer,
2587
- "unitCostMinSpendCents" => Integer
2638
+ "unitCostMinSpendCents" => Integer,
2639
+ ?"emailRecipients" => alert_email_recipients
2588
2640
  }
2589
2641
 
2590
2642
  # Spec schema: `CostEstimate`.
@@ -3600,10 +3652,17 @@ module Infrawrench
3600
3652
  # `cost_graph` stores its whole config inline — a one-off card. `cost_report`
3601
3653
  # points at a saved cost report by id, so editing the report updates every
3602
3654
  # dashboard showing it. `cost_canvas` points at a cost canvas by id
3603
- # (`{version: 1, canvasId}`) the same way.
3655
+ # (`{version: 1, canvasId}`) the same way. `realized_savings` shows the org's
3656
+ # realized savings report; its config is only a view choice (`grouping`: month
3657
+ # | kind | costCentre | account, and `months` back, 1–36).
3604
3658
  #
3605
3659
  # Spec schema: `DashboardWidgetKind`.
3606
- type dashboard_widget_kind = "cost_graph" | "cost_report" | "budget" | "custom_graph" | "cost_canvas"
3660
+ type dashboard_widget_kind = "cost_graph"
3661
+ | "cost_report"
3662
+ | "budget"
3663
+ | "custom_graph"
3664
+ | "cost_canvas"
3665
+ | "realized_savings"
3607
3666
 
3608
3667
  # Spec schema: `DashboardWithPins`.
3609
3668
  type dashboard_with_pins = {
@@ -4399,6 +4458,8 @@ module Infrawrench
4399
4458
  | "k8s-cert"
4400
4459
  | "ssh-key"
4401
4460
  | "secret-version"
4461
+ | "lease"
4462
+ | "extended-support"
4402
4463
  | "other",
4403
4464
  "label" => String,
4404
4465
  "basis" => "expiry" | "age",
@@ -4438,6 +4499,81 @@ module Infrawrench
4438
4499
  # Spec schema: `ExportTerraformRequest`.
4439
4500
  type export_terraform_request = { "resourceId" => resource_id, "accountId" => String }
4440
4501
 
4502
+ # Spec schema: `ExtendedSupportFinding`.
4503
+ type extended_support_finding = {
4504
+ "resourceId" => String,
4505
+ "pluginId" => plugin_id,
4506
+ "pluginName" => String,
4507
+ "resourceTypeId" => String,
4508
+ "resourceTypeName" => String,
4509
+ "accountId" => String,
4510
+ "accountName" => String,
4511
+ "displayName" => String,
4512
+ "externalId" => String | nil,
4513
+ "region" => String | nil,
4514
+ "releaseId" => String,
4515
+ "product" => String,
4516
+ "engine" => String | nil,
4517
+ "currentVersion" => String,
4518
+ "targetVersion" => String,
4519
+ "status" => "end-of-life" | "surcharged" | "unsupported" | "upcoming",
4520
+ "standardSupportEnds" => String,
4521
+ "surchargeStartsOn" => String,
4522
+ "daysUntilSurcharge" => Integer,
4523
+ "extendedSupportEnds" => String | nil,
4524
+ "daysUntilForcedUpgrade" => Integer | nil,
4525
+ "charged" => bool,
4526
+ "quantity" => Numeric | nil,
4527
+ "unit" => "cluster-hour" | "vcpu-hour" | "vcore-hour" | "node-hour" | "instance-hour" | "acu-hour"
4528
+ | nil,
4529
+ "currency" => String | nil,
4530
+ "tierLabel" => String | nil,
4531
+ "monthlySurcharge" => Numeric | nil,
4532
+ "listMonthlySurcharge" => Numeric | nil,
4533
+ "costBasis" => "billed" | "billed-share" | "list-price" | "unpriced",
4534
+ "billedLineItems" => Array[String],
4535
+ "nextTier" => { "from" => String, "label" => String, "monthlySurcharge" => Numeric | nil } | nil,
4536
+ "priceNote" => String | nil,
4537
+ "pricingUrl" => String | nil,
4538
+ "upgradeUrl" => String,
4539
+ "note" => String | nil
4540
+ }
4541
+
4542
+ # Spec schema: `ExtendedSupportListResponse`.
4543
+ type extended_support_list_response = {
4544
+ "findings" => Array[extended_support_finding],
4545
+ "totalCount" => Integer,
4546
+ "counts" => {
4547
+ "end-of-life" => Integer,
4548
+ "surcharged" => Integer,
4549
+ "unsupported" => Integer,
4550
+ "upcoming" => Integer
4551
+ },
4552
+ "currentMonthly" => Array[extended_support_total],
4553
+ "upcomingMonthly" => Array[extended_support_total],
4554
+ "leadDays" => Integer,
4555
+ ?"billing" => {
4556
+ "windowDays" => Integer,
4557
+ "accounts" => Array[{
4558
+ "accountId" => String,
4559
+ "accountName" => String,
4560
+ "status" => "read" | "failed",
4561
+ ?"error" => String
4562
+ }],
4563
+ "unattributed" => Array[unattributed_extended_support_charge]
4564
+ },
4565
+ "generatedAt" => String
4566
+ }
4567
+
4568
+ # Spec schema: `ExtendedSupportSettings`.
4569
+ type extended_support_settings = { "enabled" => bool, "leadDays" => Integer, "lastNotifiedAt" => String | nil }
4570
+
4571
+ # Spec schema: `ExtendedSupportSettingsUpdate`.
4572
+ type extended_support_settings_update = { ?"enabled" => bool, ?"leadDays" => Integer }
4573
+
4574
+ # Spec schema: `ExtendedSupportTotal`.
4575
+ type extended_support_total = { "currency" => String, "monthly" => Numeric }
4576
+
4441
4577
  # Spec schema: `FieldActionRequest`.
4442
4578
  type field_action_request = {
4443
4579
  "accountId" => String,
@@ -4646,6 +4782,7 @@ module Infrawrench
4646
4782
  | "posture_finding"
4647
4783
  | "expiring"
4648
4784
  | "probe"
4785
+ | "extended_support"
4649
4786
  | "commitment_idle"
4650
4787
 
4651
4788
  # Spec schema: `GithubIssuesStatus`.
@@ -5239,7 +5376,13 @@ module Infrawrench
5239
5376
  # Which detector produced the finding the issue was filed from.
5240
5377
  #
5241
5378
  # Spec schema: `JiraSourceKind`.
5242
- type jira_source_kind = "cost_anomaly" | "orphan" | "oversized" | "posture_finding" | "expiring" | "probe"
5379
+ type jira_source_kind = "cost_anomaly"
5380
+ | "orphan"
5381
+ | "oversized"
5382
+ | "posture_finding"
5383
+ | "expiring"
5384
+ | "probe"
5385
+ | "extended_support"
5243
5386
 
5244
5387
  # Supply all three to test credentials that have not been saved yet; send an
5245
5388
  # empty object to re-test the stored ones.
@@ -5356,7 +5499,13 @@ module Infrawrench
5356
5499
  # Which detector produced the finding the issue was filed from.
5357
5500
  #
5358
5501
  # Spec schema: `LinearSourceKind`.
5359
- type linear_source_kind = "cost_anomaly" | "orphan" | "oversized" | "posture_finding" | "expiring" | "probe"
5502
+ type linear_source_kind = "cost_anomaly"
5503
+ | "orphan"
5504
+ | "oversized"
5505
+ | "posture_finding"
5506
+ | "expiring"
5507
+ | "probe"
5508
+ | "extended_support"
5360
5509
 
5361
5510
  # Spec schema: `LinearTeam`.
5362
5511
  type linear_team = { "id" => String, "key" => String, "name" => String }
@@ -6150,7 +6299,12 @@ module Infrawrench
6150
6299
  # Spec schema: `OrgConfigDashboardCard`.
6151
6300
  type org_config_dashboard_card = {
6152
6301
  "kind" => "widget",
6153
- "widgetKind" => "cost_graph" | "cost_report" | "budget" | "custom_graph" | "cost_canvas",
6302
+ "widgetKind" => "cost_graph"
6303
+ | "cost_report"
6304
+ | "budget"
6305
+ | "custom_graph"
6306
+ | "cost_canvas"
6307
+ | "realized_savings",
6154
6308
  ?"title" => String,
6155
6309
  ?"config" => json_object,
6156
6310
  ?"budgetKey" => String,
@@ -7265,6 +7419,52 @@ module Infrawrench
7265
7419
  # Spec schema: `QuotaTrend`.
7266
7420
  type quota_trend = { "perDay" => Numeric | nil, "daysToExhaustion" => Numeric | nil, "points" => Integer }
7267
7421
 
7422
+ # `billing` — baseline and post-action spend both read from this resource's
7423
+ # cost rows; `estimate` — no per-resource billing, so the list-price estimate
7424
+ # is accrued over elapsed days; `manual` — the logged amount accrued;
7425
+ # `unmeasured` — nothing to measure against (never summed as zero).
7426
+ #
7427
+ # Spec schema: `RealizedSavingsBasis`.
7428
+ type realized_savings_basis = "billing" | "estimate" | "manual" | "unmeasured"
7429
+
7430
+ # Spec schema: `RealizedSavingsBucket`.
7431
+ type realized_savings_bucket = {
7432
+ "key" => String,
7433
+ "label" => String,
7434
+ "currency" => String,
7435
+ "realized" => Numeric,
7436
+ "projected" => Numeric,
7437
+ "events" => Integer
7438
+ }
7439
+
7440
+ # Spec schema: `RealizedSavingsMonth`.
7441
+ type realized_savings_month = { "month" => String, "currency" => String, "realized" => Numeric, "projected" => Numeric }
7442
+
7443
+ # Spec schema: `RealizedSavingsReport`.
7444
+ type realized_savings_report = {
7445
+ "from" => String,
7446
+ "to" => String,
7447
+ "settings" => realized_savings_settings,
7448
+ "totals" => Array[realized_savings_total],
7449
+ "byMonth" => Array[realized_savings_month],
7450
+ "byKind" => Array[realized_savings_bucket],
7451
+ "byCostCentre" => Array[realized_savings_bucket],
7452
+ "byAccount" => Array[realized_savings_bucket],
7453
+ "events" => Array[savings_event_result],
7454
+ "shortfallCount" => Integer,
7455
+ "unmeasuredCount" => Integer
7456
+ }
7457
+
7458
+ # Spec schema: `RealizedSavingsSettings`.
7459
+ type realized_savings_settings = {
7460
+ "horizonMonths" => Integer,
7461
+ "shortfallThresholdPercent" => Integer,
7462
+ "baselineWindowDays" => Integer
7463
+ }
7464
+
7465
+ # Spec schema: `RealizedSavingsTotal`.
7466
+ type realized_savings_total = { "currency" => String, "realized" => Numeric, "projected" => Numeric }
7467
+
7268
7468
  # Spec schema: `ReauthenticationRequired`.
7269
7469
  type reauthentication_required = { "error" => String, "code" => "reauthentication_required" }
7270
7470
 
@@ -8496,6 +8696,116 @@ module Infrawrench
8496
8696
  ?"tagKey" => String
8497
8697
  }
8498
8698
 
8699
+ # Spec schema: `SavingsEvent`.
8700
+ type savings_event = {
8701
+ "id" => String,
8702
+ "kind" => savings_event_kind,
8703
+ "source" => savings_event_source,
8704
+ "title" => String,
8705
+ "note" => String | nil,
8706
+ "occurredOn" => String,
8707
+ "endedOn" => String | nil,
8708
+ "accountId" => String | nil,
8709
+ "accountName" => String | nil,
8710
+ "pluginId" => String | nil,
8711
+ "resourceTypeId" => String | nil,
8712
+ "resourceId" => String | nil,
8713
+ "resourceName" => String | nil,
8714
+ "costCentreId" => String | nil,
8715
+ "projectedMonthlyAmount" => Numeric | nil,
8716
+ "currency" => String | nil,
8717
+ "horizonMonths" => Integer | nil,
8718
+ "costAnnotationId" => String | nil,
8719
+ "createdByUserId" => String | nil,
8720
+ "createdAt" => String,
8721
+ "updatedAt" => String
8722
+ }
8723
+
8724
+ # Spec schema: `SavingsEventAnnotation`.
8725
+ type savings_event_annotation = {
8726
+ ?"note" => String | nil,
8727
+ ?"costCentreId" => String | nil,
8728
+ ?"horizonMonths" => Integer | nil,
8729
+ ?"endedOn" => String | nil
8730
+ }
8731
+
8732
+ # Spec schema: `SavingsEventInput`.
8733
+ type savings_event_input = {
8734
+ "title" => String,
8735
+ ?"note" => String | nil,
8736
+ "occurredOn" => String,
8737
+ ?"endedOn" => String | nil,
8738
+ "projectedMonthlyAmount" => Numeric,
8739
+ "currency" => String,
8740
+ ?"resourceId" => String | nil,
8741
+ ?"accountId" => String | nil,
8742
+ ?"costCentreId" => String | nil,
8743
+ ?"horizonMonths" => Integer | nil
8744
+ }
8745
+
8746
+ # `rightsizing` — a resize to a smaller size; `orphan_deletion` — a resource
8747
+ # the orphan finder flags was deleted; `sleep_schedule` — a stretch of a
8748
+ # sleep/wake schedule in force; `commitment` — reservation and savings-plan
8749
+ # discounts, derived from billing; `manual` — logged by a person.
8750
+ #
8751
+ # Spec schema: `SavingsEventKind`.
8752
+ type savings_event_kind = "rightsizing" | "orphan_deletion" | "sleep_schedule" | "commitment" | "manual"
8753
+
8754
+ # Spec schema: `SavingsEventResult`.
8755
+ type savings_event_result = {
8756
+ "id" => String,
8757
+ "kind" => savings_event_kind,
8758
+ "source" => savings_event_source,
8759
+ "title" => String,
8760
+ "note" => String | nil,
8761
+ "occurredOn" => String,
8762
+ "endedOn" => String | nil,
8763
+ "accountId" => String | nil,
8764
+ "accountName" => String | nil,
8765
+ "pluginId" => String | nil,
8766
+ "resourceTypeId" => String | nil,
8767
+ "resourceId" => String | nil,
8768
+ "resourceName" => String | nil,
8769
+ "costCentreId" => String | nil,
8770
+ "projectedMonthlyAmount" => Numeric | nil,
8771
+ "currency" => String | nil,
8772
+ "horizonMonths" => Integer | nil,
8773
+ "costAnnotationId" => String | nil,
8774
+ "createdByUserId" => String | nil,
8775
+ "createdAt" => String,
8776
+ "updatedAt" => String,
8777
+ "basis" => realized_savings_basis,
8778
+ "status" => "pending" | "accruing" | "complete" | "ended",
8779
+ "realizedCurrency" => String | nil,
8780
+ "baselinePerDay" => Numeric | nil,
8781
+ "currentPerDay" => Numeric | nil,
8782
+ "realizedToDate" => Numeric | nil,
8783
+ "realizedInRange" => Numeric | nil,
8784
+ "projectedInRange" => Numeric | nil,
8785
+ "accruedDays" => Integer,
8786
+ "horizonEndsOn" => String | nil,
8787
+ "attributedCostCentreId" => String | nil,
8788
+ "attributedCostCentreName" => String | nil,
8789
+ "shortfall" => savings_shortfall,
8790
+ "editable" => "full" | "annotate" | "none"
8791
+ }
8792
+
8793
+ # `in_app` — recorded when Infrawrench performed the action; `detected` —
8794
+ # inferred from an inventory diff on sync (the action was taken in the
8795
+ # provider's console); `manual`; `derived` — computed from billing with no
8796
+ # stored event (commitments).
8797
+ #
8798
+ # Spec schema: `SavingsEventSource`.
8799
+ type savings_event_source = "in_app" | "detected" | "manual" | "derived"
8800
+
8801
+ # Spec schema: `SavingsShortfall`.
8802
+ type savings_shortfall = {
8803
+ "kind" => "below_projection" | "grew_back",
8804
+ "realizedPerDay" => Numeric,
8805
+ "projectedPerDay" => Numeric | nil
8806
+ }
8807
+ | nil
8808
+
8499
8809
  # Spec schema: `ScheduleConflict`.
8500
8810
  type schedule_conflict = { "error" => String }
8501
8811
 
@@ -9316,6 +9626,20 @@ module Infrawrench
9316
9626
  "uri" => String | nil
9317
9627
  }
9318
9628
 
9629
+ # Spec schema: `UnattributedExtendedSupportCharge`.
9630
+ type unattributed_extended_support_charge = {
9631
+ ?"resourceTypeId" => String,
9632
+ ?"releaseId" => String,
9633
+ ?"region" => String,
9634
+ ?"engine" => String,
9635
+ "lineItem" => String,
9636
+ "amount" => Numeric,
9637
+ "currency" => String,
9638
+ "accountId" => String,
9639
+ "accountName" => String,
9640
+ "monthlyAmount" => Numeric
9641
+ }
9642
+
9319
9643
  # Spec schema: `UnitCostLabelFilter`.
9320
9644
  type unit_cost_label_filter = { "key" => String, "op" => "in" | "not_in", "values" => Array[String] }
9321
9645
 
@@ -9791,6 +10115,24 @@ module Infrawrench
9791
10115
  def stats: (?org_id: String?, ?from: String?, ?to: String?, ?request_options: Hash[Symbol, untyped]?) -> ai_attribution_stats
9792
10116
  end
9793
10117
 
10118
+ class AlertEmailSettingsNamespace
10119
+ def initialize: (Transport) -> void
10120
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> alert_email_settings_view
10121
+ def update: (?org_id: String?, ?body: alert_email_settings?, ?request_options: Hash[Symbol, untyped]?) -> alert_email_settings_view
10122
+ end
10123
+
10124
+ class AlertEmailSuppressionsNamespace
10125
+ def initialize: (Transport) -> void
10126
+ def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "ok" => bool }
10127
+ end
10128
+
10129
+ class AlertEmailNamespace
10130
+ attr_reader settings: AlertEmailSettingsNamespace
10131
+ attr_reader suppressions: AlertEmailSuppressionsNamespace
10132
+ def initialize: (Transport) -> void
10133
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> alert_email_options
10134
+ end
10135
+
9794
10136
  class AlertRulesDeliveriesNamespace
9795
10137
  def initialize: (Transport) -> void
9796
10138
  def ack: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "acknowledged" => bool, ?"alreadyAcknowledgedBy" => String | nil, ?"reason" => "not_pending" | "already_escalated" | "already_acknowledged", ?"title" => String }
@@ -10450,6 +10792,18 @@ module Infrawrench
10450
10792
  def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> expiry_list_response
10451
10793
  end
10452
10794
 
10795
+ class ExtendedSupportSettingsNamespace
10796
+ def initialize: (Transport) -> void
10797
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> extended_support_settings
10798
+ def update: (?org_id: String?, ?body: extended_support_settings_update?, ?request_options: Hash[Symbol, untyped]?) -> extended_support_settings
10799
+ end
10800
+
10801
+ class ExtendedSupportNamespace
10802
+ attr_reader settings: ExtendedSupportSettingsNamespace
10803
+ def initialize: (Transport) -> void
10804
+ def get: (?org_id: String?, ?refresh: "true" | "false"?, ?request_options: Hash[Symbol, untyped]?) -> extended_support_list_response
10805
+ end
10806
+
10453
10807
  class GithubIssuesPullRequestsNamespace
10454
10808
  def initialize: (Transport) -> void
10455
10809
  def create: (body: github_pull_request_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> github_pull_request_result
@@ -10887,6 +11241,32 @@ module Infrawrench
10887
11241
  def update: (id: String, body: saved_cost_filter_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> saved_cost_filter
10888
11242
  end
10889
11243
 
11244
+ class SavingsEventsUpdateNamespace
11245
+ def initialize: (Transport) -> void
11246
+ def patch_org_org_id_savings_events_id: (id: String, body: savings_event_annotation, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> savings_event
11247
+ def update: (id: String, body: savings_event_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> savings_event
11248
+ end
11249
+
11250
+ class SavingsEventsNamespace
11251
+ attr_reader update: SavingsEventsUpdateNamespace
11252
+ def initialize: (Transport) -> void
11253
+ def create: (body: savings_event_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> savings_event
11254
+ def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
11255
+ end
11256
+
11257
+ class SavingsSettingsNamespace
11258
+ def initialize: (Transport) -> void
11259
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> realized_savings_settings
11260
+ def update: (body: realized_savings_settings, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> realized_savings_settings
11261
+ end
11262
+
11263
+ class SavingsNamespace
11264
+ attr_reader events: SavingsEventsNamespace
11265
+ attr_reader settings: SavingsSettingsNamespace
11266
+ def initialize: (Transport) -> void
11267
+ def realized: (?org_id: String?, ?from: String?, ?to: String?, ?request_options: Hash[Symbol, untyped]?) -> realized_savings_report
11268
+ end
11269
+
10890
11270
  class SchedulesNamespace
10891
11271
  def initialize: (Transport) -> void
10892
11272
  def create: (?org_id: String?, ?body: sleep_schedule_create?, ?request_options: Hash[Symbol, untyped]?) -> sleep_schedule
@@ -11159,6 +11539,7 @@ module Infrawrench
11159
11539
  attr_reader agent_registrations: AgentRegistrationsNamespace
11160
11540
  attr_reader agents: AgentsNamespace
11161
11541
  attr_reader ai_attribution: AiAttributionNamespace
11542
+ attr_reader alert_email: AlertEmailNamespace
11162
11543
  attr_reader alert_rules: AlertRulesNamespace
11163
11544
  attr_reader api_keys: ApiKeysNamespace
11164
11545
  attr_reader apps: AppsNamespace
@@ -11207,6 +11588,7 @@ module Infrawrench
11207
11588
  attr_reader environment_diff: EnvironmentDiffNamespace
11208
11589
  attr_reader environments: EnvironmentsNamespace
11209
11590
  attr_reader expiring: ExpiringNamespace
11591
+ attr_reader extended_support: ExtendedSupportNamespace
11210
11592
  attr_reader github_issues: GithubIssuesNamespace
11211
11593
  attr_reader iac: IacNamespace
11212
11594
  attr_reader incidents: IncidentsNamespace
@@ -11237,6 +11619,7 @@ module Infrawrench
11237
11619
  attr_reader rightsizing: RightsizingNamespace
11238
11620
  attr_reader runbooks: RunbooksNamespace
11239
11621
  attr_reader saved_cost_filters: SavedCostFiltersNamespace
11622
+ attr_reader savings: SavingsNamespace
11240
11623
  attr_reader schedules: SchedulesNamespace
11241
11624
  attr_reader search: SearchNamespace
11242
11625
  attr_reader session_recordings: SessionRecordingsNamespace
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: infrawrench-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.70.0
4
+ version: 1.73.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Infrawrench LLC
@@ -11,7 +11,7 @@ bindir: bin
11
11
  cert_chain: []
12
12
  date: 2026-10-05 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: Generated Ruby client for the Infrawrench API (v1.70.0). Covers the published
14
+ description: Generated Ruby client for the Infrawrench API (v1.73.0). Covers the published
15
15
  API surface only — operations marked x-internal in the spec are not generated. No
16
16
  runtime dependencies.
17
17
  email:
@@ -58,5 +58,5 @@ requirements: []
58
58
  rubygems_version: 3.5.22
59
59
  signing_key:
60
60
  specification_version: 4
61
- summary: Generated Ruby client for the Infrawrench API (v1.70.0).
61
+ summary: Generated Ruby client for the Infrawrench API (v1.73.0).
62
62
  test_files: []