For the complete documentation index, see llms.txt. This page is also available as Markdown.

Commitment Plans (Beta)

Agent-friendly commitment plan endpoints

List commitment plans

get

Returns commitment plans scoped to one segment for the given provider. segment_id defaults to the provider-resources segment — same fallback as POST/PUT — so the typical caller sees the plans tied to their default segment without cross-segment duplicates. Further filters (template, status, flags) narrow within that scope. Coverage metrics (current_coverage / projected_coverage) are omitted here for speed; fetch the detail endpoint for those.

Path parameters
org_idstring · uuidRequired
Query parameters
providerstring · enumRequired

Cloud provider (aws, azure, gcp)

Example: awsPossible values:
segment_idstring · uuid · nullableOptional

Optional segment ID to scope results. Defaults to the provider resources segment if not specified.

Default: null
template_idstring · uuid · nullableOptional

Filter to plans generated from this template (GET /commitment-plan-templates)

Default: null
statusstring · enum · nullableOptional

Filter by plan status (e.g. 'draft', 'in_progress')

Default: nullPossible values:
is_recommendedboolean · nullableOptional

Filter to the flagged recommended plan

Default: null
is_system_generatedboolean · nullableOptional

Filter to system-generated (default) plans — the three built-ins (Recommended / Balanced / High Savings) vs. user-created plans.

Default: null
is_renewalboolean · nullableOptional

Switch which flavor the list returns. Omitted (default) and false both return segment-scoped non-renewal plans — backward-compatible with the pre-renewal contract. Set to true to fetch renewal plans (which aren't segment-scoped — segment_id is ignored). There's no combined view; renewals and non-renewals are queried separately.

Default: null
Responses
200

OK

application/json
idstring · uuidRequired

Unique plan identifier

providerstring · enumRequired

Cloud provider (aws, azure, gcp)

Possible values:
namestringRequired

Plan name (e.g. 'Recommended', 'Balanced', 'High Savings')

descriptionstring · nullableOptional

Human-readable summary of the plan

is_renewalbooleanRequired

True if this plan was created to renew a set of expiring commitments — configuration.renewal_commitment_ids is populated when true. False otherwise (covers both purchase and infrastructure flavors — the distinction is not user-meaningful, both cover uncovered resources with new commitments).

statusstring · enumRequired

Plan status (e.g. 'draft', 'in_progress', 'completed')

Possible values:
is_calculatingbooleanRequired

True if the plan is still being computed

created_atstring · date-timeRequired

When the plan was generated

usage_start_datestring · date-time · nullableOptional

Start of the usage window the plan was computed from. Null on renewal plans — renewals derive their window from the source commitments' end dates, not from a lookback (see configuration.renewal_commitment_ids).

usage_end_datestring · date-time · nullableOptional

End of the usage window the plan was computed from. Null on renewal plans (see usage_start_date).

max_termstring · nullableRequired

Maximum commitment term (e.g. '30_DAY', '1_YEAR', '3_YEAR')

minimum_commitmentnumberRequired

Minimum total spend being committed to

breakeven_daysanyRead-onlyOptional

Days until the plan pays for itself. If commitments are kept for at least this many days, the plan is a more profitable decision than running on-demand.

commitment_upfront_costnumberOptional

One-time total dollars required at signing if this plan is applied. NOT a rate — do not sum with monthly-rate fields. Typically 0 for the Recommended plan; can be significant for High Savings / All Upfront plans. Always mention explicitly to the user when non-zero.

get/beta/v1/org/{org_id}/commitment-plans

Create a commitment plan

post

Creates a new commitment plan for the given segment. The plan is generated asynchronously; the response echoes the initial plan with is_calculating=true and omits coverage fields (meaningless mid-recalc). Poll GET /commitment-plans/{plan_id} once is_calculating=false to get the full detail including coverage and per-service breakdowns.

Path parameters
org_idstring · uuidRequired
Body
providerstring · enumRequired

Cloud provider (aws, azure, gcp)

Example: awsPossible values:
segment_idstring · uuid · nullableOptional

Optional segment ID to scope results. Defaults to the provider resources segment if not specified.

Default: null
namestringRequired

Human-readable plan name

Responses
200

OK

application/json
idstring · uuidRequired

Unique plan identifier

providerstring · enumRequired

Cloud provider (aws, azure, gcp)

Possible values:
namestringRequired

Plan name (e.g. 'Recommended', 'Balanced', 'High Savings')

descriptionstring · nullableOptional

Human-readable summary of the plan

is_renewalbooleanRequired

True if this plan was created to renew a set of expiring commitments — configuration.renewal_commitment_ids is populated when true. False otherwise (covers both purchase and infrastructure flavors — the distinction is not user-meaningful, both cover uncovered resources with new commitments).

statusstring · enumRequired

Plan status (e.g. 'draft', 'in_progress', 'completed')

Possible values:
is_calculatingbooleanRequired

True if the plan is still being computed

created_atstring · date-timeRequired

When the plan was generated

usage_start_datestring · date-time · nullableOptional

Start of the usage window the plan was computed from. Null on renewal plans — renewals derive their window from the source commitments' end dates, not from a lookback (see configuration.renewal_commitment_ids).

usage_end_datestring · date-time · nullableOptional

End of the usage window the plan was computed from. Null on renewal plans (see usage_start_date).

max_termstring · nullableRequired

Maximum commitment term (e.g. '30_DAY', '1_YEAR', '3_YEAR')

minimum_commitmentnumberRequired

Minimum total spend being committed to

breakeven_daysanyRead-onlyOptional

Days until the plan pays for itself. If commitments are kept for at least this many days, the plan is a more profitable decision than running on-demand.

commitment_upfront_costnumberOptional

One-time total dollars required at signing if this plan is applied. NOT a rate — do not sum with monthly-rate fields. Typically 0 for the Recommended plan; can be significant for High Savings / All Upfront plans. Always mention explicitly to the user when non-zero.

post/beta/v1/org/{org_id}/commitment-plans

Create a renewal commitment plan

post

Creates a new commitment plan that renews a set of expiring commitments. The plan covers the same resources the source commitments were covering, with the contract specs supplied in configuration driving the renewal recommendation. The plan is generated asynchronously — the response echoes the initial plan with is_calculating=true; poll GET /commitment-plans/{plan_id} until that flips to see the generated line items.

Renewal plans always sit on the provider-resources segment; segment_id is not accepted. The usage window the recommender feeds on is derived automatically from the source commitments' end dates, so configuration.lookback_days is omitted (the field is rejected if sent). configuration.resource_ids is also rejected — configuration.renewal_commitment_ids carries the scope for a renewal plan, parallel to how configuration.resource_ids scopes an infrastructure plan on the regular create endpoint.

Each generated line item carries a renewal_commitment_id linking it back to the source commitment it is proposed to replace. Pair with GET /commitment-plans/{plan_id}/renewal-commitments to see the source commitments side-by-side.

Path parameters
org_idstring · uuidRequired
Body
providerstring · enumRequired

Cloud provider (aws, azure, gcp)

Example: awsPossible values:
namestringRequired

Human-readable plan name

Responses
200

OK

application/json
idstring · uuidRequired

Unique plan identifier

providerstring · enumRequired

Cloud provider (aws, azure, gcp)

Possible values:
namestringRequired

Plan name (e.g. 'Recommended', 'Balanced', 'High Savings')

descriptionstring · nullableOptional

Human-readable summary of the plan

is_renewalbooleanRequired

True if this plan was created to renew a set of expiring commitments — configuration.renewal_commitment_ids is populated when true. False otherwise (covers both purchase and infrastructure flavors — the distinction is not user-meaningful, both cover uncovered resources with new commitments).

statusstring · enumRequired

Plan status (e.g. 'draft', 'in_progress', 'completed')

Possible values:
is_calculatingbooleanRequired

True if the plan is still being computed

created_atstring · date-timeRequired

When the plan was generated

usage_start_datestring · date-time · nullableOptional

Start of the usage window the plan was computed from. Null on renewal plans — renewals derive their window from the source commitments' end dates, not from a lookback (see configuration.renewal_commitment_ids).

usage_end_datestring · date-time · nullableOptional

End of the usage window the plan was computed from. Null on renewal plans (see usage_start_date).

max_termstring · nullableRequired

Maximum commitment term (e.g. '30_DAY', '1_YEAR', '3_YEAR')

minimum_commitmentnumberRequired

Minimum total spend being committed to

breakeven_daysanyRead-onlyOptional

Days until the plan pays for itself. If commitments are kept for at least this many days, the plan is a more profitable decision than running on-demand.

commitment_upfront_costnumberOptional

One-time total dollars required at signing if this plan is applied. NOT a rate — do not sum with monthly-rate fields. Typically 0 for the Recommended plan; can be significant for High Savings / All Upfront plans. Always mention explicitly to the user when non-zero.

post/beta/v1/org/{org_id}/commitment-plans/renewals

Get default commitment plans

get

Returns the three default Archera commitment plans: Recommended (30-day), Balanced (1-year), and High Savings (3-year).

Path parameters
org_idstring · uuidRequired
Query parameters
providerstring · enumRequired

Cloud provider (aws, azure, gcp)

Example: awsPossible values:
segment_idstring · uuid · nullableOptional

Optional segment ID to scope results. Defaults to the provider resources segment if not specified.

Default: null
Responses
200

OK

application/json
idstring · uuidRequired

Unique plan identifier

providerstring · enumRequired

Cloud provider (aws, azure, gcp)

Possible values:
namestringRequired

Plan name (e.g. 'Recommended', 'Balanced', 'High Savings')

descriptionstring · nullableOptional

Human-readable summary of the plan

is_renewalbooleanRequired

True if this plan was created to renew a set of expiring commitments — configuration.renewal_commitment_ids is populated when true. False otherwise (covers both purchase and infrastructure flavors — the distinction is not user-meaningful, both cover uncovered resources with new commitments).

statusstring · enumRequired

Plan status (e.g. 'draft', 'in_progress', 'completed')

Possible values:
is_calculatingbooleanRequired

True if the plan is still being computed

created_atstring · date-timeRequired

When the plan was generated

usage_start_datestring · date-time · nullableOptional

Start of the usage window the plan was computed from. Null on renewal plans — renewals derive their window from the source commitments' end dates, not from a lookback (see configuration.renewal_commitment_ids).

usage_end_datestring · date-time · nullableOptional

End of the usage window the plan was computed from. Null on renewal plans (see usage_start_date).

max_termstring · nullableRequired

Maximum commitment term (e.g. '30_DAY', '1_YEAR', '3_YEAR')

minimum_commitmentnumberRequired

Minimum total spend being committed to

breakeven_daysanyRead-onlyOptional

Days until the plan pays for itself. If commitments are kept for at least this many days, the plan is a more profitable decision than running on-demand.

commitment_upfront_costnumberOptional

One-time total dollars required at signing if this plan is applied. NOT a rate — do not sum with monthly-rate fields. Typically 0 for the Recommended plan; can be significant for High Savings / All Upfront plans. Always mention explicitly to the user when non-zero.

current_coveragenumberRequired

Spend-based commitment coverage of reservable spend today, from existing commitments (0-1) — the BEFORE picture, pre-plan.

projected_coveragenumberRequired

Spend-based commitment coverage of reservable spend if this plan is applied (0-1) — the AFTER picture, post-plan.

get/beta/v1/org/{org_id}/commitment-plans/default
get

Returns the single recommended commitment plan for the organization. This is typically the 30-day Recommended plan. Returns 204 if no plan is available.

Path parameters
org_idstring · uuidRequired
Query parameters
providerstring · enumRequired

Cloud provider (aws, azure, gcp)

Example: awsPossible values:
segment_idstring · uuid · nullableOptional

Optional segment ID to scope results. Defaults to the provider resources segment if not specified.

Default: null
Responses
200

OK

application/json
idstring · uuidRequired

Unique plan identifier

providerstring · enumRequired

Cloud provider (aws, azure, gcp)

Possible values:
namestringRequired

Plan name (e.g. 'Recommended', 'Balanced', 'High Savings')

descriptionstring · nullableOptional

Human-readable summary of the plan

is_renewalbooleanRequired

True if this plan was created to renew a set of expiring commitments — configuration.renewal_commitment_ids is populated when true. False otherwise (covers both purchase and infrastructure flavors — the distinction is not user-meaningful, both cover uncovered resources with new commitments).

statusstring · enumRequired

Plan status (e.g. 'draft', 'in_progress', 'completed')

Possible values:
is_calculatingbooleanRequired

True if the plan is still being computed

created_atstring · date-timeRequired

When the plan was generated

usage_start_datestring · date-time · nullableOptional

Start of the usage window the plan was computed from. Null on renewal plans — renewals derive their window from the source commitments' end dates, not from a lookback (see configuration.renewal_commitment_ids).

usage_end_datestring · date-time · nullableOptional

End of the usage window the plan was computed from. Null on renewal plans (see usage_start_date).

max_termstring · nullableRequired

Maximum commitment term (e.g. '30_DAY', '1_YEAR', '3_YEAR')

minimum_commitmentnumberRequired

Minimum total spend being committed to

breakeven_daysanyRead-onlyOptional

Days until the plan pays for itself. If commitments are kept for at least this many days, the plan is a more profitable decision than running on-demand.

commitment_upfront_costnumberOptional

One-time total dollars required at signing if this plan is applied. NOT a rate — do not sum with monthly-rate fields. Typically 0 for the Recommended plan; can be significant for High Savings / All Upfront plans. Always mention explicitly to the user when non-zero.

current_coveragenumberRequired

Spend-based commitment coverage of reservable spend today, from existing commitments (0-1) — the BEFORE picture, pre-plan.

projected_coveragenumberRequired

Spend-based commitment coverage of reservable spend if this plan is applied (0-1) — the AFTER picture, post-plan.

get/beta/v1/org/{org_id}/commitment-plans/recommended

Get commitment plan details

get

Returns details for a specific commitment plan by ID, including per-service breakdowns.

Path parameters
org_idstring · uuidRequired
plan_idstring · uuidRequired
Responses
200

OK

application/json
idstring · uuidRequired

Unique plan identifier

providerstring · enumRequired

Cloud provider (aws, azure, gcp)

Possible values:
namestringRequired

Plan name (e.g. 'Recommended', 'Balanced', 'High Savings')

descriptionstring · nullableOptional

Human-readable summary of the plan

is_renewalbooleanRequired

True if this plan was created to renew a set of expiring commitments — configuration.renewal_commitment_ids is populated when true. False otherwise (covers both purchase and infrastructure flavors — the distinction is not user-meaningful, both cover uncovered resources with new commitments).

statusstring · enumRequired

Plan status (e.g. 'draft', 'in_progress', 'completed')

Possible values:
is_calculatingbooleanRequired

True if the plan is still being computed

created_atstring · date-timeRequired

When the plan was generated

usage_start_datestring · date-time · nullableOptional

Start of the usage window the plan was computed from. Null on renewal plans — renewals derive their window from the source commitments' end dates, not from a lookback (see configuration.renewal_commitment_ids).

usage_end_datestring · date-time · nullableOptional

End of the usage window the plan was computed from. Null on renewal plans (see usage_start_date).

max_termstring · nullableRequired

Maximum commitment term (e.g. '30_DAY', '1_YEAR', '3_YEAR')

minimum_commitmentnumberRequired

Minimum total spend being committed to

breakeven_daysanyRead-onlyOptional

Days until the plan pays for itself. If commitments are kept for at least this many days, the plan is a more profitable decision than running on-demand.

commitment_upfront_costnumberOptional

One-time total dollars required at signing if this plan is applied. NOT a rate — do not sum with monthly-rate fields. Typically 0 for the Recommended plan; can be significant for High Savings / All Upfront plans. Always mention explicitly to the user when non-zero.

current_coveragenumberRequired

Spend-based commitment coverage of reservable spend today, from existing commitments (0-1) — the BEFORE picture, pre-plan.

projected_coveragenumberRequired

Spend-based commitment coverage of reservable spend if this plan is applied (0-1) — the AFTER picture, post-plan.

get/beta/v1/org/{org_id}/commitment-plans/{plan_id}

Update a commitment plan

put

Update the plan's name and/or configuration. Replacing configuration triggers a recalculation — the response will have is_calculating=true and line-item financials are invalid until generation completes. Rejected if the plan is currently calculating, is a system-generated default, or is locked for purchase.

Path parameters
org_idstring · uuidRequired
plan_idstring · uuidRequired
Body
namestringOptional

New plan name

Responses
200

OK

application/json
idstring · uuidRequired

Unique plan identifier

providerstring · enumRequired

Cloud provider (aws, azure, gcp)

Possible values:
namestringRequired

Plan name (e.g. 'Recommended', 'Balanced', 'High Savings')

descriptionstring · nullableOptional

Human-readable summary of the plan

is_renewalbooleanRequired

True if this plan was created to renew a set of expiring commitments — configuration.renewal_commitment_ids is populated when true. False otherwise (covers both purchase and infrastructure flavors — the distinction is not user-meaningful, both cover uncovered resources with new commitments).

statusstring · enumRequired

Plan status (e.g. 'draft', 'in_progress', 'completed')

Possible values:
is_calculatingbooleanRequired

True if the plan is still being computed

created_atstring · date-timeRequired

When the plan was generated

usage_start_datestring · date-time · nullableOptional

Start of the usage window the plan was computed from. Null on renewal plans — renewals derive their window from the source commitments' end dates, not from a lookback (see configuration.renewal_commitment_ids).

usage_end_datestring · date-time · nullableOptional

End of the usage window the plan was computed from. Null on renewal plans (see usage_start_date).

max_termstring · nullableRequired

Maximum commitment term (e.g. '30_DAY', '1_YEAR', '3_YEAR')

minimum_commitmentnumberRequired

Minimum total spend being committed to

breakeven_daysanyRead-onlyOptional

Days until the plan pays for itself. If commitments are kept for at least this many days, the plan is a more profitable decision than running on-demand.

commitment_upfront_costnumberOptional

One-time total dollars required at signing if this plan is applied. NOT a rate — do not sum with monthly-rate fields. Typically 0 for the Recommended plan; can be significant for High Savings / All Upfront plans. Always mention explicitly to the user when non-zero.

put/beta/v1/org/{org_id}/commitment-plans/{plan_id}

Delete a commitment plan

delete

Delete a commitment plan. Rejected if the plan is currently calculating, is a system-generated default, or is locked for purchase. Irreversible.

Path parameters
org_idstring · uuidRequired
plan_idstring · uuidRequired
Responses
204

No Content

No content

delete/beta/v1/org/{org_id}/commitment-plans/{plan_id}

No content

Apply (purchase) a commitment plan

post

Executes the plan's selected line items as actual commitment purchases. Marks the plan as edited and records the initiating user. The plan is then processed by the commitment-purchase workflow — inspect the plan status afterwards for progress. Rejected if the plan is currently calculating or already locked.

Path parameters
org_idstring · uuidRequired
plan_idstring · uuidRequired
Responses
200

OK

application/json
idstring · uuidRequired

Unique plan identifier

providerstring · enumRequired

Cloud provider (aws, azure, gcp)

Possible values:
namestringRequired

Plan name (e.g. 'Recommended', 'Balanced', 'High Savings')

descriptionstring · nullableOptional

Human-readable summary of the plan

is_renewalbooleanRequired

True if this plan was created to renew a set of expiring commitments — configuration.renewal_commitment_ids is populated when true. False otherwise (covers both purchase and infrastructure flavors — the distinction is not user-meaningful, both cover uncovered resources with new commitments).

statusstring · enumRequired

Plan status (e.g. 'draft', 'in_progress', 'completed')

Possible values:
is_calculatingbooleanRequired

True if the plan is still being computed

created_atstring · date-timeRequired

When the plan was generated

usage_start_datestring · date-time · nullableOptional

Start of the usage window the plan was computed from. Null on renewal plans — renewals derive their window from the source commitments' end dates, not from a lookback (see configuration.renewal_commitment_ids).

usage_end_datestring · date-time · nullableOptional

End of the usage window the plan was computed from. Null on renewal plans (see usage_start_date).

max_termstring · nullableRequired

Maximum commitment term (e.g. '30_DAY', '1_YEAR', '3_YEAR')

minimum_commitmentnumberRequired

Minimum total spend being committed to

breakeven_daysanyRead-onlyOptional

Days until the plan pays for itself. If commitments are kept for at least this many days, the plan is a more profitable decision than running on-demand.

commitment_upfront_costnumberOptional

One-time total dollars required at signing if this plan is applied. NOT a rate — do not sum with monthly-rate fields. Typically 0 for the Recommended plan; can be significant for High Savings / All Upfront plans. Always mention explicitly to the user when non-zero.

current_coveragenumberRequired

Spend-based commitment coverage of reservable spend today, from existing commitments (0-1) — the BEFORE picture, pre-plan.

projected_coveragenumberRequired

Spend-based commitment coverage of reservable spend if this plan is applied (0-1) — the AFTER picture, post-plan.

post/beta/v1/org/{org_id}/commitment-plans/{plan_id}/apply

Copy a commitment plan, optionally applying line-item edits

post

Creates a draft copy of an existing commitment plan, including its line items and resource matches. The copy is a regular user-created plan (is_default=false, is_recommended=false) and is editable via PUT /commitment-plans/{plan_id}. Useful for forking a system-generated default plan (Recommended / Balanced / High Savings) so it can be modified — defaults themselves are read-only. The copy's status is always reset to draft, even when the source is scheduled, in progress, or completed, so copying cannot queue or execute a purchase. The copy inherits the source plan's already-computed line items and financials, so it is ready immediately (is_calculating=false).

Optionally apply line-item edits during the copy via two mutually exclusive modes:

  • Explicit: pass line_item_updates referencing the SOURCE plan's line_item_ids; the server translates them to the copy's new IDs internally and applies them atomically.

  • Resolution: pass target_contract_term (+ optional target_payment_option / target_line_item_ids) and the server swaps every selected (or scoped) line item on the copy to the closest candidate at or below the target term. Saves the LLM having to enumerate per-line edits when the user wants a uniform shape change on the new plan.

If any edit fails (unknown source line_item_id, invalid offer, integer-coercion error on a unit-basis offer's selected_amount, duplicate line_item_id within line_item_updates), the entire copy + updates rolls back — no orphan copy persists. This is the canonical 'copy to edit' workflow; saves the round trip and ID-translation logic vs a separate copy + update sequence.

Returns the new plan in CommitmentPlanListSchema shape — id + headline financials + configuration; covered_services and coverage fields are intentionally omitted because computing them eagerly loads per-service summaries (expensive) and the typical caller just needs the post-edit totals to confirm the copy. Follow up with commitment_plan_details on the returned id if you need the full breakdown. In resolution mode the response additionally carries a resolution array with one entry per scoped line item (actual_term / actual_payment_option / actual_term_reason of exact_match, fallback_closest_shorter, or no_alternative). Surface no_alternative outcomes to the user so they understand why coverage may be partial.

Rejected if the source plan is currently being calculated.

Path parameters
org_idstring · uuidRequired
plan_idstring · uuidRequired
Body
target_contract_termstring · enum · nullableOptional

Server-side resolution mode. Set to a target contract term and the server resolves the per-line-item update set using the same fallback rule the comparison endpoint projects: exact match on (term, payment) where available, else closest shorter term with the same payment option (GRI preferred within tier). Mutually exclusive with explicit per-line-item updates — pass one OR the other, not both. Preferred over enumerating updates manually because the server can't silently omit entries from a list it builds itself.

Default: nullPossible values:
target_payment_optionstring · enumOptional

Target payment option for resolution mode. Defaults to no_upfront — most users are uncomfortable with cash at signing, so this matches the default framing for plan comparisons. Ignored when target_contract_term is null.

Default: no_upfrontPossible values:
target_line_item_idsstring · uuid[] · nullableOptional

Optional subset of line items to update under resolution mode. If omitted, applies to all selected line items in the plan. Ignored when target_contract_term is null.

Default: null
namestring · nullableOptional

Name for the copied plan. If omitted, defaults to ' <today's date>'.

Default: null
Responses
200

OK

application/json
idstring · uuidRequired

Unique plan identifier

providerstring · enumRequired

Cloud provider (aws, azure, gcp)

Possible values:
namestringRequired

Plan name (e.g. 'Recommended', 'Balanced', 'High Savings')

descriptionstring · nullableOptional

Human-readable summary of the plan

is_renewalbooleanRequired

True if this plan was created to renew a set of expiring commitments — configuration.renewal_commitment_ids is populated when true. False otherwise (covers both purchase and infrastructure flavors — the distinction is not user-meaningful, both cover uncovered resources with new commitments).

statusstring · enumRequired

Plan status (e.g. 'draft', 'in_progress', 'completed')

Possible values:
is_calculatingbooleanRequired

True if the plan is still being computed

created_atstring · date-timeRequired

When the plan was generated

usage_start_datestring · date-time · nullableOptional

Start of the usage window the plan was computed from. Null on renewal plans — renewals derive their window from the source commitments' end dates, not from a lookback (see configuration.renewal_commitment_ids).

usage_end_datestring · date-time · nullableOptional

End of the usage window the plan was computed from. Null on renewal plans (see usage_start_date).

max_termstring · nullableRequired

Maximum commitment term (e.g. '30_DAY', '1_YEAR', '3_YEAR')

minimum_commitmentnumberRequired

Minimum total spend being committed to

breakeven_daysanyRead-onlyOptional

Days until the plan pays for itself. If commitments are kept for at least this many days, the plan is a more profitable decision than running on-demand.

commitment_upfront_costnumberOptional

One-time total dollars required at signing if this plan is applied. NOT a rate — do not sum with monthly-rate fields. Typically 0 for the Recommended plan; can be significant for High Savings / All Upfront plans. Always mention explicitly to the user when non-zero.

post/beta/v1/org/{org_id}/commitment-plans/{plan_id}/copy

Get commitment plan line items

get

Returns individual commitment recommendations within a plan, including offer details, per-line-item savings, and costs. Each line item has an is_selected field: if false, the line item is excluded from the plan and its costs/savings are NOT included in the plan's top-level metrics. Pass line_item_ids to fetch a specific subset (e.g. a single line item).

Path parameters
org_idstring · uuidRequired
plan_idstring · uuidRequired
Query parameters
line_item_idsstring · uuid[] · nullableOptional

Optional list of line-item ids to scope the response to. When omitted, returns every line item in the plan.

Default: null
renewal_commitment_idsstring · uuid[] · nullableOptional

Renewal plans only: scope to line items proposed as the replacement for these specific expiring commitments. Useful for "show me what's being proposed to replace commitment X." Rejected with 400 on non-renewal plans (their line items have no renewal linkage; this guards against stale/wrong plan ids silently returning unrelated rows).

Default: null
order_bystring · enumOptional

Field to order results by

Default: monthly_net_savingsPossible values:
descbooleanOptional

Sort descending (default true)

Default: true
pageinteger · min: 1OptionalDefault: 1
page_sizeinteger · min: 1 · max: 10000OptionalDefault: 20
Responses
200

OK

application/json
get/beta/v1/org/{org_id}/commitment-plans/{plan_id}/line-items

Update commitment plan line items

post

Atomically apply line-item edits in a single request. Two modes:

  • Explicit: pass updates, a list where each entry carries the same fields the singular line-item update would accept (selection, account, offer-swap triple) plus the line_item_id selector.

  • Resolution: pass target_contract_term (+ optional target_payment_option / target_line_item_ids) and the server swaps every selected (or scoped) line item to the closest candidate at or below the target term. Saves the LLM having to enumerate many edits when the user wants a uniform shape change.

Modes are mutually exclusive. All updates are applied within a single transaction — if any fails (unknown line item, invalid offer, integer-coercion error on a unit-basis offer's selected_amount), the whole call is rejected and no changes persist.

Returns the updated plan in CommitmentPlanListSchema shape — id + headline financials + configuration; covered_services and coverage fields are intentionally omitted because computing them eagerly loads per-service summaries (expensive) and the typical caller just needs the post-edit totals to confirm the change. Follow up with commitment_plan_details on the returned id if you need the full breakdown. In resolution mode the response additionally carries a resolution array with one entry per scoped line item: the actual_term / actual_payment_option applied and an actual_term_reason of exact_match, fallback_closest_shorter, or no_alternative (the latter were left untouched). Surface no_alternative outcomes to the user so they understand why coverage may be partial.

Rejected if the parent plan is currently calculating, is a system-generated default, or is locked for purchase.

Path parameters
org_idstring · uuidRequired
plan_idstring · uuidRequired
Body
target_contract_termstring · enum · nullableOptional

Server-side resolution mode. Set to a target contract term and the server resolves the per-line-item update set using the same fallback rule the comparison endpoint projects: exact match on (term, payment) where available, else closest shorter term with the same payment option (GRI preferred within tier). Mutually exclusive with explicit per-line-item updates — pass one OR the other, not both. Preferred over enumerating updates manually because the server can't silently omit entries from a list it builds itself.

Default: nullPossible values:
target_payment_optionstring · enumOptional

Target payment option for resolution mode. Defaults to no_upfront — most users are uncomfortable with cash at signing, so this matches the default framing for plan comparisons. Ignored when target_contract_term is null.

Default: no_upfrontPossible values:
target_line_item_idsstring · uuid[] · nullableOptional

Optional subset of line items to update under resolution mode. If omitted, applies to all selected line items in the plan. Ignored when target_contract_term is null.

Default: null
Responses
200

OK

application/json
idstring · uuidRequired

Unique plan identifier

providerstring · enumRequired

Cloud provider (aws, azure, gcp)

Possible values:
namestringRequired

Plan name (e.g. 'Recommended', 'Balanced', 'High Savings')

descriptionstring · nullableOptional

Human-readable summary of the plan

is_renewalbooleanRequired

True if this plan was created to renew a set of expiring commitments — configuration.renewal_commitment_ids is populated when true. False otherwise (covers both purchase and infrastructure flavors — the distinction is not user-meaningful, both cover uncovered resources with new commitments).

statusstring · enumRequired

Plan status (e.g. 'draft', 'in_progress', 'completed')

Possible values:
is_calculatingbooleanRequired

True if the plan is still being computed

created_atstring · date-timeRequired

When the plan was generated

usage_start_datestring · date-time · nullableOptional

Start of the usage window the plan was computed from. Null on renewal plans — renewals derive their window from the source commitments' end dates, not from a lookback (see configuration.renewal_commitment_ids).

usage_end_datestring · date-time · nullableOptional

End of the usage window the plan was computed from. Null on renewal plans (see usage_start_date).

max_termstring · nullableRequired

Maximum commitment term (e.g. '30_DAY', '1_YEAR', '3_YEAR')

minimum_commitmentnumberRequired

Minimum total spend being committed to

breakeven_daysanyRead-onlyOptional

Days until the plan pays for itself. If commitments are kept for at least this many days, the plan is a more profitable decision than running on-demand.

commitment_upfront_costnumberOptional

One-time total dollars required at signing if this plan is applied. NOT a rate — do not sum with monthly-rate fields. Typically 0 for the Recommended plan; can be significant for High Savings / All Upfront plans. Always mention explicitly to the user when non-zero.

post/beta/v1/org/{org_id}/commitment-plans/{plan_id}/line-items/update

List the commitments being renewed by a renewal plan

get

Returns the expiring commitments that a renewal plan is proposed to replace — identity, dates, guarantee info, and contract term. Ordered by end_date ascending (earliest-expiring first) so the caller surfaces the most-urgent renewals first.

Rejected with 400 if the plan is not a renewal plan — for non-renewal plans use /line-items or /covered-resources instead.

To filter to the commitments tied to a subset of line items, pass line_item_ids. To go the other direction (line items proposed as replacements for a given source commitment), use the renewal_commitment_ids filter on /line-items.

Path parameters
org_idstring · uuidRequired
plan_idstring · uuidRequired
Query parameters
line_item_idsstring · uuid[] · nullableOptional

Optional list of line-item ids to scope to. When supplied, returns only the source commitments whose renewing line items are in this set.

Default: null
pageinteger · min: 1OptionalDefault: 1
page_sizeinteger · min: 1 · max: 200OptionalDefault: 50
Responses
200

OK

application/json
get/beta/v1/org/{org_id}/commitment-plans/{plan_id}/renewal-commitments

Compare commitment offers across a plan's line items

get

Returns per-line-item offer alternatives plus plan-wide rollups for each (contract_term, payment_option) hypothetical. Designed to answer 'what would the plan look like at 3-year' in a single call: hypothetical_totals carries the rolled-up financials and delta_vs_current, with per-line-item resolution exposed for transparency. Each line item lands at the target term when available, else the longest available term <= target with the same payment option (GRI preferred within tier), else its current term. Defaults: line_item_ids=all selected, contract_terms=all distinct in candidates, payment_options=[no_upfront].

Path parameters
org_idstring · uuidRequired
plan_idstring · uuidRequired
Query parameters
line_item_idsstring · uuid[] · nullableOptional

Optional subset of line items to compare. If omitted, defaults to all selected line items in the plan.

Default: null
Responses
200

OK

application/json
get/beta/v1/org/{org_id}/commitment-plans/{plan_id}/comparison

List filterable covered-resource attributes for a plan

get

Returns the fields that can be used in the filter parameter of /commitment-plans/<plan_id>/covered-resources, scoped to the resources the plan actually covers.

Path parameters
org_idstring · uuidRequired
plan_idstring · uuidRequired
Responses
200

OK

application/json
namestringRequired
fieldstringRequired
typestring · enumRequiredPossible values:
get/beta/v1/org/{org_id}/commitment-plans/{plan_id}/covered-resources/attributes

Get valid values for a filterable covered-resource attribute

get

Returns the distinct values for a given field, restricted to the resources the plan covers (and further narrowed by any search/filter passed). Use to discover valid filter values without paginating through the covered-resources list.

Path parameters
org_idstring · uuidRequired
plan_idstring · uuidRequired
fieldstring · min: 1Required
Query parameters
line_item_idsstring · uuid[] · nullableOptional

Filter to matches from specific line items

Default: null
only_selected_line_itemsbooleanOptional

Only include matches from selected line items (default true)

Default: true
searchstring · nullableOptional

Free-text ILIKE search across the resource SKU's identity and classification fields (resource id, name, account ids, service, region, instance_type, etc.). Mirrors the search lane on /resources/skus.

Default: null
order_bystring · enumOptional

Field to order results by. Defaults to monthly_net_savings. All numeric axes are 730-hour monthly rates on the per-match plan economics, net of the Archera premium where applicable (NOT the resource's warehouse trailing-30-day actuals — those are filterable but not orderable here, on purpose, to keep sort and response framing on the same monthly basis).

Default: monthly_net_savingsPossible values:
descbooleanOptional

Sort descending (default true)

Default: true
Responses
200

OK

application/json
or
or
or
or
or
or
or
or
or
or
or
get/beta/v1/org/{org_id}/commitment-plans/{plan_id}/covered-resources/attributes/{field}

Aggregated covered-resources summary for a commitment plan

get

Returns the resources a commitment plan covers, aggregated by (service, account, region, resource_type). Each row is one group: rolled-up costs, savings, spend-weighted coverage, and resource count. Sorted by net savings descending. For per-resource detail, use the paginated /covered-resources endpoint.

Path parameters
org_idstring · uuidRequired
plan_idstring · uuidRequired
Query parameters
line_item_idsstring · uuid[] · nullableOptional

Filter to matches from specific line items

Default: null
only_selected_line_itemsbooleanOptional

Only include matches from selected line items (default true)

Default: true
Responses
200

OK

application/json
servicestring · nullableOptional

Cloud service name (e.g. 'AmazonEC2', 'AmazonRDS')

account_idstring · nullableOptional

Cloud account ID

regionstring · nullableOptional

Cloud region (e.g. 'us-east-1')

resource_typestring · nullableOptional

Resource type within this group — instance family for compute (e.g. 'm5'), usage type for other services (e.g. 'Fargate-GB-Hours', 'Lambda-GB-Second'), or SKU name as fallback

resource_countintegerOptional

Number of resources in this group

projected_coveragenumberOptional

Spend-based projected coverage across resources in this group (0-1), weighted by each resource's on-demand-equivalent cost. Distinct from resource.coverage (trailing-30-day actual spend-based coverage from existing commitments). For per-resource projected coverage, use the paginated /covered-resources endpoint.

get/beta/v1/org/{org_id}/commitment-plans/{plan_id}/covered-resources/summary

Paginated covered resources for a commitment plan

get

Returns one row per resource the plan covers, with the plan's economics scoped to that resource (coverage, monthly savings, before/after cost) and full ResourceSKU detail. Supports search, structured filter, sort, and cursor pagination — same surface idiom as /resources/skus, but scoped to the plan's matched resources. Use /covered-resources/summary for the aggregated breakdown. X-Pagination is navigation-only: it always includes page and first_page, and adds previous_page and next_page when available.

Path parameters
org_idstring · uuidRequired
plan_idstring · uuidRequired
Query parameters
line_item_idsstring · uuid[] · nullableOptional

Filter to matches from specific line items

Default: null
only_selected_line_itemsbooleanOptional

Only include matches from selected line items (default true)

Default: true
searchstring · nullableOptional

Free-text ILIKE search across the resource SKU's identity and classification fields (resource id, name, account ids, service, region, instance_type, etc.). Mirrors the search lane on /resources/skus.

Default: null
order_bystring · enumOptional

Field to order results by. Defaults to monthly_net_savings. All numeric axes are 730-hour monthly rates on the per-match plan economics, net of the Archera premium where applicable (NOT the resource's warehouse trailing-30-day actuals — those are filterable but not orderable here, on purpose, to keep sort and response framing on the same monthly basis).

Default: monthly_net_savingsPossible values:
descbooleanOptional

Sort descending (default true)

Default: true
pageinteger · min: 1OptionalDefault: 1
page_sizeinteger · min: 1 · max: 100OptionalDefault: 20
Responses
200

OK

application/json
get/beta/v1/org/{org_id}/commitment-plans/{plan_id}/covered-resources

Last updated

Was this helpful?