infrawrench-sdk 1.70.0 → 1.71.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: bc94257e74cd0c9ef10d24dce87c39018f4bbe86652683ed2314e430091348b0
4
+ data.tar.gz: 75b878e22ce2e3f54836c9fe7ec31741ebb29540d19c9f412a8f8979c606a221
5
5
  SHA512:
6
- metadata.gz: a0e88496bc0e3e0ad7565f8b008092fafaa47af64c7051bfbabc47ec7aace870ded89b85254adbef3d700bef696c57279f26dd33f307bf08806974ec7602f2e5
7
- data.tar.gz: a8c608690950d6183a5cd10ebdee7d5ba3edc229bed66e72738ea2b869fbc37a29e76ab0646e761d4a161eaa7daaa0a7fcece77806ed797160a943607246884b
6
+ metadata.gz: bcc9f360f638857f2f8e87c4ab2ba826494475c83a7ad62e9b5b776c4493eed7c448eb5d192fd45195838ea627984c13d5359d0d4e8f92b9cd852995c85f96c8
7
+ data.tar.gz: f05fcf6d900349cbbca3799e36e4fabf3376cf2b27fd0e20fb9ce3e79b467003618a507265332ce8ea37aa7382bee00d907730c98b2a0ffb378f6c7650e5c0ce
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.71.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
+ 916 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.71.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.71.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.71.0)."
21
+ spec.description = "Generated Ruby client for the Infrawrench API (v1.71.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.71.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.71.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -16903,6 +16903,236 @@ module Infrawrench
16903
16903
  end
16904
16904
  end
16905
16905
 
16906
+ # `client.savings.events.update`
16907
+ class SavingsEventsUpdateNamespace
16908
+ # @api private
16909
+ # @param transport [Transport]
16910
+ def initialize(transport)
16911
+ @transport = transport
16912
+ end
16913
+
16914
+ # Annotate a saving
16915
+ #
16916
+ # Add context to any event: a note, an explicit cost centre, a horizon
16917
+ # override, or an end date. The facts of an automatic event (what was done,
16918
+ # when, the projection) stay as observed.
16919
+ #
16920
+ # PATCH /api/org/{orgId}/savings/events/{id}
16921
+ #
16922
+ # Raises on 400: Bad request
16923
+ #
16924
+ # Raises on 404: Not found
16925
+ #
16926
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
16927
+ # constructed with.
16928
+ # @param id [String]
16929
+ # @param body [Hash] Request body, shaped as `SavingsEventAnnotation`.
16930
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
16931
+ # @return [Hash] Parsed JSON, shaped as `SavingsEvent` — see `sig/infrawrench/sdk.rbs`.
16932
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
16933
+ def patch_org_org_id_savings_events_id(id:, body:, org_id: nil, request_options: nil)
16934
+ @transport.request(
16935
+ http_method: "PATCH",
16936
+ path: "/api/org/{orgId}/savings/events/{id}",
16937
+ path_params: { "orgId" => org_id, "id" => id },
16938
+ body: body,
16939
+ request_options: request_options
16940
+ )
16941
+ end
16942
+
16943
+ # Rewrite a manual saving
16944
+ #
16945
+ # Full replace of a manual entry. Automatic events are a 400; use PATCH.
16946
+ #
16947
+ # PUT /api/org/{orgId}/savings/events/{id}
16948
+ #
16949
+ # Raises on 400: Bad request
16950
+ #
16951
+ # Raises on 404: Not found
16952
+ #
16953
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
16954
+ # constructed with.
16955
+ # @param id [String]
16956
+ # @param body [Hash] Request body, shaped as `SavingsEventInput`.
16957
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
16958
+ # @return [Hash] Parsed JSON, shaped as `SavingsEvent` — see `sig/infrawrench/sdk.rbs`.
16959
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
16960
+ def update(id:, body:, org_id: nil, request_options: nil)
16961
+ @transport.request(
16962
+ http_method: "PUT",
16963
+ path: "/api/org/{orgId}/savings/events/{id}",
16964
+ path_params: { "orgId" => org_id, "id" => id },
16965
+ body: body,
16966
+ request_options: request_options
16967
+ )
16968
+ end
16969
+ end
16970
+
16971
+ # `client.savings.events`
16972
+ class SavingsEventsNamespace
16973
+ # @return [SavingsEventsUpdateNamespace] `client.savings.events.update`
16974
+ attr_reader :update
16975
+
16976
+ # @api private
16977
+ # @param transport [Transport]
16978
+ def initialize(transport)
16979
+ @transport = transport
16980
+ @update = SavingsEventsUpdateNamespace.new(@transport)
16981
+ end
16982
+
16983
+ # Log a saving
16984
+ #
16985
+ # Record a saving by hand, with the monthly amount and the day it began.
16986
+ # Leaves an org-wide cost annotation on that day. Requires `costs:write`.
16987
+ #
16988
+ # POST /api/org/{orgId}/savings/events
16989
+ #
16990
+ # Raises on 400: Bad request
16991
+ #
16992
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
16993
+ # constructed with.
16994
+ # @param body [Hash] Request body, shaped as `SavingsEventInput`.
16995
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
16996
+ # @return [Hash] Parsed JSON, shaped as `SavingsEvent` — see `sig/infrawrench/sdk.rbs`.
16997
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
16998
+ def create(body:, org_id: nil, request_options: nil)
16999
+ @transport.request(
17000
+ http_method: "POST",
17001
+ path: "/api/org/{orgId}/savings/events",
17002
+ path_params: { "orgId" => org_id },
17003
+ body: body,
17004
+ request_options: request_options
17005
+ )
17006
+ end
17007
+
17008
+ # Remove a saving
17009
+ #
17010
+ # Hard delete, together with the cost annotation the event left on the
17011
+ # charts.
17012
+ #
17013
+ # DELETE /api/org/{orgId}/savings/events/{id}
17014
+ #
17015
+ # Raises on 404: Not found
17016
+ #
17017
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
17018
+ # constructed with.
17019
+ # @param id [String]
17020
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
17021
+ # @return [Hash] Parsed JSON, shaped as `Ok` — see `sig/infrawrench/sdk.rbs`.
17022
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
17023
+ def delete(id:, org_id: nil, request_options: nil)
17024
+ @transport.request(
17025
+ http_method: "DELETE",
17026
+ path: "/api/org/{orgId}/savings/events/{id}",
17027
+ path_params: { "orgId" => org_id, "id" => id },
17028
+ request_options: request_options
17029
+ )
17030
+ end
17031
+ end
17032
+
17033
+ # `client.savings.settings`
17034
+ class SavingsSettingsNamespace
17035
+ # @api private
17036
+ # @param transport [Transport]
17037
+ def initialize(transport)
17038
+ @transport = transport
17039
+ end
17040
+
17041
+ # Get realized savings settings
17042
+ #
17043
+ # The org's horizon, shortfall threshold and baseline window; defaults when
17044
+ # never saved.
17045
+ #
17046
+ # GET /api/org/{orgId}/savings/settings
17047
+ #
17048
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
17049
+ # constructed with.
17050
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
17051
+ # @return [Hash] Parsed JSON, shaped as `RealizedSavingsSettings` — see
17052
+ # `sig/infrawrench/sdk.rbs`.
17053
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
17054
+ def get(org_id: nil, request_options: nil)
17055
+ @transport.request(
17056
+ http_method: "GET",
17057
+ path: "/api/org/{orgId}/savings/settings",
17058
+ path_params: { "orgId" => org_id },
17059
+ request_options: request_options
17060
+ )
17061
+ end
17062
+
17063
+ # Update realized savings settings
17064
+ #
17065
+ # Requires `costs:write`. Changes every figure in the report, retroactively.
17066
+ #
17067
+ # PUT /api/org/{orgId}/savings/settings
17068
+ #
17069
+ # Raises on 400: Bad request
17070
+ #
17071
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
17072
+ # constructed with.
17073
+ # @param body [Hash] Request body, shaped as `RealizedSavingsSettings`.
17074
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
17075
+ # @return [Hash] Parsed JSON, shaped as `RealizedSavingsSettings` — see
17076
+ # `sig/infrawrench/sdk.rbs`.
17077
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
17078
+ def update(body:, org_id: nil, request_options: nil)
17079
+ @transport.request(
17080
+ http_method: "PUT",
17081
+ path: "/api/org/{orgId}/savings/settings",
17082
+ path_params: { "orgId" => org_id },
17083
+ body: body,
17084
+ request_options: request_options
17085
+ )
17086
+ end
17087
+ end
17088
+
17089
+ # `client.savings`
17090
+ class SavingsNamespace
17091
+ # @return [SavingsEventsNamespace] `client.savings.events`
17092
+ attr_reader :events
17093
+ # @return [SavingsSettingsNamespace] `client.savings.settings`
17094
+ attr_reader :settings
17095
+
17096
+ # @api private
17097
+ # @param transport [Transport]
17098
+ def initialize(transport)
17099
+ @transport = transport
17100
+ @events = SavingsEventsNamespace.new(@transport)
17101
+ @settings = SavingsSettingsNamespace.new(@transport)
17102
+ end
17103
+
17104
+ # Realized savings report
17105
+ #
17106
+ # What the actions taken actually saved, against each resource's own
17107
+ # trailing daily spend before the action, accrued day by day (one-off
17108
+ # actions up to the horizon). Recomputed on every read, so figures improve
17109
+ # as restated billing lands. Days collection has not covered are not
17110
+ # accrued. Per-currency throughout; never converted or merged.
17111
+ #
17112
+ # GET /api/org/{orgId}/savings/realized
17113
+ #
17114
+ # Raises on 400: Bad request
17115
+ #
17116
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
17117
+ # constructed with.
17118
+ # @param from [String, nil] Inclusive first day. Defaults to the first of the month 11
17119
+ # months back.
17120
+ # @param to [String, nil] Inclusive last day. Defaults to yesterday.
17121
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
17122
+ # @return [Hash] Parsed JSON, shaped as `RealizedSavingsReport` — see
17123
+ # `sig/infrawrench/sdk.rbs`.
17124
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
17125
+ def realized(org_id: nil, from: nil, to: nil, request_options: nil)
17126
+ @transport.request(
17127
+ http_method: "GET",
17128
+ path: "/api/org/{orgId}/savings/realized",
17129
+ path_params: { "orgId" => org_id },
17130
+ query: { "from" => from, "to" => to },
17131
+ request_options: request_options
17132
+ )
17133
+ end
17134
+ end
17135
+
16906
17136
  # `client.schedules`
16907
17137
  class SchedulesNamespace
16908
17138
  # @api private
@@ -20511,6 +20741,8 @@ module Infrawrench
20511
20741
  attr_reader :runbooks
20512
20742
  # @return [SavedCostFiltersNamespace] `client.saved_cost_filters`
20513
20743
  attr_reader :saved_cost_filters
20744
+ # @return [SavingsNamespace] `client.savings`
20745
+ attr_reader :savings
20514
20746
  # @return [SchedulesNamespace] `client.schedules`
20515
20747
  attr_reader :schedules
20516
20748
  # @return [SearchNamespace] `client.search`
@@ -20648,6 +20880,7 @@ module Infrawrench
20648
20880
  @rightsizing = RightsizingNamespace.new(@transport)
20649
20881
  @runbooks = RunbooksNamespace.new(@transport)
20650
20882
  @saved_cost_filters = SavedCostFiltersNamespace.new(@transport)
20883
+ @savings = SavingsNamespace.new(@transport)
20651
20884
  @schedules = SchedulesNamespace.new(@transport)
20652
20885
  @search = SearchNamespace.new(@transport)
20653
20886
  @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.71.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.71.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.71.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.71.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.71.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.71.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.71.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.71.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.71.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.71.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.71.0).
5
5
  #
6
6
  # DO NOT EDIT. Regenerate with:
7
7
  # pnpm --filter @infrawrench/web generate:sdk
@@ -3600,10 +3600,17 @@ module Infrawrench
3600
3600
  # `cost_graph` stores its whole config inline — a one-off card. `cost_report`
3601
3601
  # points at a saved cost report by id, so editing the report updates every
3602
3602
  # dashboard showing it. `cost_canvas` points at a cost canvas by id
3603
- # (`{version: 1, canvasId}`) the same way.
3603
+ # (`{version: 1, canvasId}`) the same way. `realized_savings` shows the org's
3604
+ # realized savings report; its config is only a view choice (`grouping`: month
3605
+ # | kind | costCentre | account, and `months` back, 1–36).
3604
3606
  #
3605
3607
  # Spec schema: `DashboardWidgetKind`.
3606
- type dashboard_widget_kind = "cost_graph" | "cost_report" | "budget" | "custom_graph" | "cost_canvas"
3608
+ type dashboard_widget_kind = "cost_graph"
3609
+ | "cost_report"
3610
+ | "budget"
3611
+ | "custom_graph"
3612
+ | "cost_canvas"
3613
+ | "realized_savings"
3607
3614
 
3608
3615
  # Spec schema: `DashboardWithPins`.
3609
3616
  type dashboard_with_pins = {
@@ -6150,7 +6157,12 @@ module Infrawrench
6150
6157
  # Spec schema: `OrgConfigDashboardCard`.
6151
6158
  type org_config_dashboard_card = {
6152
6159
  "kind" => "widget",
6153
- "widgetKind" => "cost_graph" | "cost_report" | "budget" | "custom_graph" | "cost_canvas",
6160
+ "widgetKind" => "cost_graph"
6161
+ | "cost_report"
6162
+ | "budget"
6163
+ | "custom_graph"
6164
+ | "cost_canvas"
6165
+ | "realized_savings",
6154
6166
  ?"title" => String,
6155
6167
  ?"config" => json_object,
6156
6168
  ?"budgetKey" => String,
@@ -7265,6 +7277,52 @@ module Infrawrench
7265
7277
  # Spec schema: `QuotaTrend`.
7266
7278
  type quota_trend = { "perDay" => Numeric | nil, "daysToExhaustion" => Numeric | nil, "points" => Integer }
7267
7279
 
7280
+ # `billing` — baseline and post-action spend both read from this resource's
7281
+ # cost rows; `estimate` — no per-resource billing, so the list-price estimate
7282
+ # is accrued over elapsed days; `manual` — the logged amount accrued;
7283
+ # `unmeasured` — nothing to measure against (never summed as zero).
7284
+ #
7285
+ # Spec schema: `RealizedSavingsBasis`.
7286
+ type realized_savings_basis = "billing" | "estimate" | "manual" | "unmeasured"
7287
+
7288
+ # Spec schema: `RealizedSavingsBucket`.
7289
+ type realized_savings_bucket = {
7290
+ "key" => String,
7291
+ "label" => String,
7292
+ "currency" => String,
7293
+ "realized" => Numeric,
7294
+ "projected" => Numeric,
7295
+ "events" => Integer
7296
+ }
7297
+
7298
+ # Spec schema: `RealizedSavingsMonth`.
7299
+ type realized_savings_month = { "month" => String, "currency" => String, "realized" => Numeric, "projected" => Numeric }
7300
+
7301
+ # Spec schema: `RealizedSavingsReport`.
7302
+ type realized_savings_report = {
7303
+ "from" => String,
7304
+ "to" => String,
7305
+ "settings" => realized_savings_settings,
7306
+ "totals" => Array[realized_savings_total],
7307
+ "byMonth" => Array[realized_savings_month],
7308
+ "byKind" => Array[realized_savings_bucket],
7309
+ "byCostCentre" => Array[realized_savings_bucket],
7310
+ "byAccount" => Array[realized_savings_bucket],
7311
+ "events" => Array[savings_event_result],
7312
+ "shortfallCount" => Integer,
7313
+ "unmeasuredCount" => Integer
7314
+ }
7315
+
7316
+ # Spec schema: `RealizedSavingsSettings`.
7317
+ type realized_savings_settings = {
7318
+ "horizonMonths" => Integer,
7319
+ "shortfallThresholdPercent" => Integer,
7320
+ "baselineWindowDays" => Integer
7321
+ }
7322
+
7323
+ # Spec schema: `RealizedSavingsTotal`.
7324
+ type realized_savings_total = { "currency" => String, "realized" => Numeric, "projected" => Numeric }
7325
+
7268
7326
  # Spec schema: `ReauthenticationRequired`.
7269
7327
  type reauthentication_required = { "error" => String, "code" => "reauthentication_required" }
7270
7328
 
@@ -8496,6 +8554,116 @@ module Infrawrench
8496
8554
  ?"tagKey" => String
8497
8555
  }
8498
8556
 
8557
+ # Spec schema: `SavingsEvent`.
8558
+ type savings_event = {
8559
+ "id" => String,
8560
+ "kind" => savings_event_kind,
8561
+ "source" => savings_event_source,
8562
+ "title" => String,
8563
+ "note" => String | nil,
8564
+ "occurredOn" => String,
8565
+ "endedOn" => String | nil,
8566
+ "accountId" => String | nil,
8567
+ "accountName" => String | nil,
8568
+ "pluginId" => String | nil,
8569
+ "resourceTypeId" => String | nil,
8570
+ "resourceId" => String | nil,
8571
+ "resourceName" => String | nil,
8572
+ "costCentreId" => String | nil,
8573
+ "projectedMonthlyAmount" => Numeric | nil,
8574
+ "currency" => String | nil,
8575
+ "horizonMonths" => Integer | nil,
8576
+ "costAnnotationId" => String | nil,
8577
+ "createdByUserId" => String | nil,
8578
+ "createdAt" => String,
8579
+ "updatedAt" => String
8580
+ }
8581
+
8582
+ # Spec schema: `SavingsEventAnnotation`.
8583
+ type savings_event_annotation = {
8584
+ ?"note" => String | nil,
8585
+ ?"costCentreId" => String | nil,
8586
+ ?"horizonMonths" => Integer | nil,
8587
+ ?"endedOn" => String | nil
8588
+ }
8589
+
8590
+ # Spec schema: `SavingsEventInput`.
8591
+ type savings_event_input = {
8592
+ "title" => String,
8593
+ ?"note" => String | nil,
8594
+ "occurredOn" => String,
8595
+ ?"endedOn" => String | nil,
8596
+ "projectedMonthlyAmount" => Numeric,
8597
+ "currency" => String,
8598
+ ?"resourceId" => String | nil,
8599
+ ?"accountId" => String | nil,
8600
+ ?"costCentreId" => String | nil,
8601
+ ?"horizonMonths" => Integer | nil
8602
+ }
8603
+
8604
+ # `rightsizing` — a resize to a smaller size; `orphan_deletion` — a resource
8605
+ # the orphan finder flags was deleted; `sleep_schedule` — a stretch of a
8606
+ # sleep/wake schedule in force; `commitment` — reservation and savings-plan
8607
+ # discounts, derived from billing; `manual` — logged by a person.
8608
+ #
8609
+ # Spec schema: `SavingsEventKind`.
8610
+ type savings_event_kind = "rightsizing" | "orphan_deletion" | "sleep_schedule" | "commitment" | "manual"
8611
+
8612
+ # Spec schema: `SavingsEventResult`.
8613
+ type savings_event_result = {
8614
+ "id" => String,
8615
+ "kind" => savings_event_kind,
8616
+ "source" => savings_event_source,
8617
+ "title" => String,
8618
+ "note" => String | nil,
8619
+ "occurredOn" => String,
8620
+ "endedOn" => String | nil,
8621
+ "accountId" => String | nil,
8622
+ "accountName" => String | nil,
8623
+ "pluginId" => String | nil,
8624
+ "resourceTypeId" => String | nil,
8625
+ "resourceId" => String | nil,
8626
+ "resourceName" => String | nil,
8627
+ "costCentreId" => String | nil,
8628
+ "projectedMonthlyAmount" => Numeric | nil,
8629
+ "currency" => String | nil,
8630
+ "horizonMonths" => Integer | nil,
8631
+ "costAnnotationId" => String | nil,
8632
+ "createdByUserId" => String | nil,
8633
+ "createdAt" => String,
8634
+ "updatedAt" => String,
8635
+ "basis" => realized_savings_basis,
8636
+ "status" => "pending" | "accruing" | "complete" | "ended",
8637
+ "realizedCurrency" => String | nil,
8638
+ "baselinePerDay" => Numeric | nil,
8639
+ "currentPerDay" => Numeric | nil,
8640
+ "realizedToDate" => Numeric | nil,
8641
+ "realizedInRange" => Numeric | nil,
8642
+ "projectedInRange" => Numeric | nil,
8643
+ "accruedDays" => Integer,
8644
+ "horizonEndsOn" => String | nil,
8645
+ "attributedCostCentreId" => String | nil,
8646
+ "attributedCostCentreName" => String | nil,
8647
+ "shortfall" => savings_shortfall,
8648
+ "editable" => "full" | "annotate" | "none"
8649
+ }
8650
+
8651
+ # `in_app` — recorded when Infrawrench performed the action; `detected` —
8652
+ # inferred from an inventory diff on sync (the action was taken in the
8653
+ # provider's console); `manual`; `derived` — computed from billing with no
8654
+ # stored event (commitments).
8655
+ #
8656
+ # Spec schema: `SavingsEventSource`.
8657
+ type savings_event_source = "in_app" | "detected" | "manual" | "derived"
8658
+
8659
+ # Spec schema: `SavingsShortfall`.
8660
+ type savings_shortfall = {
8661
+ "kind" => "below_projection" | "grew_back",
8662
+ "realizedPerDay" => Numeric,
8663
+ "projectedPerDay" => Numeric | nil
8664
+ }
8665
+ | nil
8666
+
8499
8667
  # Spec schema: `ScheduleConflict`.
8500
8668
  type schedule_conflict = { "error" => String }
8501
8669
 
@@ -10887,6 +11055,32 @@ module Infrawrench
10887
11055
  def update: (id: String, body: saved_cost_filter_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> saved_cost_filter
10888
11056
  end
10889
11057
 
11058
+ class SavingsEventsUpdateNamespace
11059
+ def initialize: (Transport) -> void
11060
+ def patch_org_org_id_savings_events_id: (id: String, body: savings_event_annotation, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> savings_event
11061
+ def update: (id: String, body: savings_event_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> savings_event
11062
+ end
11063
+
11064
+ class SavingsEventsNamespace
11065
+ attr_reader update: SavingsEventsUpdateNamespace
11066
+ def initialize: (Transport) -> void
11067
+ def create: (body: savings_event_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> savings_event
11068
+ def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
11069
+ end
11070
+
11071
+ class SavingsSettingsNamespace
11072
+ def initialize: (Transport) -> void
11073
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> realized_savings_settings
11074
+ def update: (body: realized_savings_settings, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> realized_savings_settings
11075
+ end
11076
+
11077
+ class SavingsNamespace
11078
+ attr_reader events: SavingsEventsNamespace
11079
+ attr_reader settings: SavingsSettingsNamespace
11080
+ def initialize: (Transport) -> void
11081
+ def realized: (?org_id: String?, ?from: String?, ?to: String?, ?request_options: Hash[Symbol, untyped]?) -> realized_savings_report
11082
+ end
11083
+
10890
11084
  class SchedulesNamespace
10891
11085
  def initialize: (Transport) -> void
10892
11086
  def create: (?org_id: String?, ?body: sleep_schedule_create?, ?request_options: Hash[Symbol, untyped]?) -> sleep_schedule
@@ -11237,6 +11431,7 @@ module Infrawrench
11237
11431
  attr_reader rightsizing: RightsizingNamespace
11238
11432
  attr_reader runbooks: RunbooksNamespace
11239
11433
  attr_reader saved_cost_filters: SavedCostFiltersNamespace
11434
+ attr_reader savings: SavingsNamespace
11240
11435
  attr_reader schedules: SchedulesNamespace
11241
11436
  attr_reader search: SearchNamespace
11242
11437
  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.71.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.71.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.71.0).
62
62
  test_files: []