Suger

Update product pricing (unified format)

PATCH https://api.suger.cloud/org/{orgId}/product/{productId}/price

Update AWS or Azure product pricing with one partner-agnostic request (plans[] with commits + dimensions). Azure auto-goes-live. Set skipProductUpdate (without plans) to leave the list price unchanged and instead re-apply each AWS private offer's stored discount to the current list price of the product's usage dimensions; offers priced with committed or upfront terms are not re-priced.

Parameters

NameInTypeRequiredDescription
orgId path string yes Organization ID
productId path string yes Product ID

Request Body

Required. Content-Type: application/json · Schema: UpdateProductPriceRequest

UpdateProductPriceRequest fields:

FieldTypeRequiredDescription
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:

FieldTypeRequiredDescription
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:

FieldTypeRequiredDescription
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:

FieldTypeRequiredDescription
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:

FieldTypeRequiredDescription
length integer no
unit string no

Responses

200 — OK

Content-Type: application/json · Schema: UpdateProductPriceResponse

UpdateProductPriceResponse fields:

FieldTypeRequiredDescription
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:

FieldTypeRequiredDescription
change string no
target string no

400 — Bad request error

Content-Type: application/json

409 — Conflict: a change to this product is still being processed by the marketplace

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.