Update offer pricing (unified format)
PATCH https://api.suger.cloud/org/{orgId}/offer/{offerId}/price
Add new usage dimensions or update existing dimension rates (at negotiated rates) on a released AWS private offer. AWS validates whether modifying an existing dimension is permitted. A new dimension must already exist on the product's public offer.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orgId | path | string | yes | Organization ID |
offerId | path | string | yes | Offer ID |
Request Body
Required. Content-Type: application/json · Schema: UpdateProductPriceRequest
UpdateProductPriceRequest fields:
| Field | Type | Required | Description |
|---|---|---|---|
plans | array<UnifiedPlan> | no | Plans is the set of plans to update. AWS uses exactly one (planId omitted); Azure/GCP use one or more. |
propagateToPrivateOffers | boolean | no | PropagateToPrivateOffers, when true, opts this AWS product reprice into propagating the new list price to the product's released private offers: after the product change set succeeds, each private offer carrying a stored discount is re-priced as listRate*(1-discount/100) (offers without a stored discount are skipped). AWS-only; default false (behaviour unchanged). Azure percentage / GCP offers track list price natively and need no propagation. |
skipProductUpdate | boolean | no | SkipProductUpdate, when true, leaves the product's list price untouched and only re-prices the USAGE DIMENSIONS of the product's released private offers, from the CURRENT stored list price and each offer's stored discount. Use it to re-apply discounts after they drifted (e.g. an offer was repriced outside Suger, or a discount was backfilled later) without submitting a product change set. Offers priced with committed/upfront terms are not re-priced. AWS-only, must be sent without Plans, and honoured only by the product update-pricing endpoint — the offer update-pricing endpoint shares this request type but ignores this field. |
UnifiedPlan fields:
| Field | Type | Required | Description |
|---|---|---|---|
commits | array<UnifiedCommit> | no | Commits are the non-usage, recurring / committed fees. AWS -> Entitled commit dimensions (ConfigurableUpfrontPricingTerm). Azure -> the plan's recurrentPrice (a flat monthly/annual subscription fee — NOT a contractual commitment; named "commits" only for cross-partner consistency with the AWS model). GCP -> subscription / fixed price. |
dimensions | array<UnifiedDimension> | no | Dimensions are the per-unit metered charges. AWS -> ExternallyMetered dimensions (UsageBasedPricingTerm). Azure -> the plan's customMeters. GCP -> usage fees / metrics. |
planId | string | no | PlanId locates the plan. AWS: omit/"" (single implicit default offer). Azure: plan.identity.externalId. GCP: purchase option / service level name. |
state | string | no | State changes the plan lifecycle. Azure only (AWS/GCP ignore it): active -> generallyAvailable, deprecated -> deprecated, hidden -> plan visibility "hidden". |
UnifiedCommit fields:
| Field | Type | Required | Description |
|---|---|---|---|
billingFrequency | UnifiedTerm | no | |
contractDuration | UnifiedTerm | no | |
key | string | no | Key locates AWS commits. Quantity is ignored by update-pricing; new AWS commits are not supported here. |
paymentOption | UnifiedTerm | no | |
quantity | integer | no | |
rate | number | no | AWS commit rate / Azure recurrentPrice (PricePerPaymentInUsd) |
term | UnifiedTerm | no |
UnifiedDimension fields:
| Field | Type | Required | Description |
|---|---|---|---|
category | string | no | |
description | string | no | |
key | string | no | locator: AWS dimension key / Azure custom-meter key / GCP metric id |
name | string | no | Name, Category, Unit and Description are only used when creating a brand-new AWS dimension. Unit defaults to "Units" and Description defaults to Name when omitted. |
rate | number | no | unit price |
unit | string | no |
UnifiedTerm fields:
| Field | Type | Required | Description |
|---|---|---|---|
length | integer | no | |
unit | string | no |
Responses
200 — OK
Content-Type: application/json · Schema: UpdateProductPriceResponse
UpdateProductPriceResponse fields:
| Field | Type | Required | Description |
|---|---|---|---|
operationId | string | no | OperationId is the workflow id; poll it via GetOperationV2. |
results | array<UnifiedPriceResult> | no | Results lists, per submitted item, whether it was matched (UPDATE) or newly created (CREATE). |
status | string | no | Status of the request at submission time. |
UnifiedPriceResult fields:
| Field | Type | Required | Description |
|---|---|---|---|
change | string | no | |
target | string | no |
400 — Bad request error
Content-Type: application/json
500 — Internal server error
Content-Type: application/json
View as Markdown · Interactive API reference
Spotted something wrong or out of date on this page? Tell us and we'll correct it.