create or update draft product
POST https://api.suger.cloud/org/{orgId}/draftProduct
Create a new draft product or update the existing draft product. When updating draft product, the product.ID is required.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orgId | path | string | yes | Organization ID |
Request Body
Required. Content-Type: application/json · Schema: WorkloadProduct
WorkloadProduct fields:
| Field | Type | Required | Description |
|---|---|---|---|
createdBy | string | no | |
creationTime | string | no | |
externalID | string | no | |
fulfillmentUrl | string | no | |
id | string | no | |
info | ProductInfo | no | |
lastUpdateTime | string | no | |
lastUpdatedBy | string | no | |
metaInfo | WorkloadMetaInfo | no | |
name | string | no | |
organizationID | string | no | |
partner | Partner | no | |
partnerID | string | no | |
productType | string | no | |
sellerID | string | no | |
service | PartnerService | no | |
status | string | no |
ProductInfo fields:
| Field | Type | Required | Description |
|---|---|---|---|
alibabaProduct | AlibabaMarketplaceProduct | no | |
attributes | object | no | |
awsAmiProduct | AwsProduct | no | |
awsContainerProduct | AwsProduct | no | |
awsMachineLearningProduct | AwsProduct | no | |
awsProfessionalServicesProduct | AwsProduct | no | |
awsPurchaseConstraints | AwsMarketplacePurchaseConstraints | no | |
awsSaasProduct | AwsProduct | no | |
awsSnsSubscriptions | array<AwsSnsSubscription> | no | |
azureProduct | AzureProduct | no | |
azureProductResource | AzureMarketplaceProductResource | no | |
commits | array<CommitDimension> | no | |
companyID | string | no | |
currency | string | no | |
dimensions | array<MeteringDimension> | no | |
eulaType | EulaType | no | |
eulaUrl | string | no | The public offer's EULA URL. |
gcpProduct | GcpMarketplaceProduct | no | |
oracleProduct | OracleMarketplaceProduct | no | |
pendingSubmission | PendingSubmission | no | |
refundCancellationPolicy | string | no | |
sellerNotes | string | no | |
snowflakeProduct | SnowflakeMarketplaceProduct | no | |
stripeProduct | StripeProduct | no |
WorkloadMetaInfo fields:
| Field | Type | Required | Description |
|---|---|---|---|
aceApnCrmUniqueIdentifier | string | no | The linked ACE ApnCrmUniqueIdentifier of the private offer if available. |
approvalInfo | ApprovalInfo | no | |
awsSaasProductDimensions | array<AwsProductDimension> | no | The AWS SaaS product dimensions. Applicable for AWS SaaS products only. This is used to save price info when creating AWS SaaS product. |
azureBillingAccountID | string | no | The Azure billing account ID of the buyer for this entitlement. It is populated when syncing Azure private offers or subscriptions. |
azureOriginalOfferIDForUpgrade | string | no | Original offer ID for Azure Upgrade |
baseAgreementId | string | no | Applicable for AWS Marketplace only, when the IsAgreementBasedOffer is true. |
buyerCommitQuantities | object | no | Buyer-supplied per-commit quantities used when accepting a ConfigurableUpfront AWS offer. Keyed by commit dimension key. Only set on offers where at least one commit allows buyer quantity configuration. Consumed by the chromedp accept flow to fill AWS's Unit configuration inputs before clicking Accept. Offer-scoped: it stays on the offer as the accept-time record and is stripped from entitlement transfer by CleanForTransfer. |
buyerIds | array<string> | no | The Suger buyer IDs of the private offer if available. |
chargebeeSubscriptionID | string | no | The Chargebee subscription ID of the private offer if available. |
contacts | array<Contact> | no | The contacts of the offer to notify if any updates. |
cppoInOfferId | string | no | The Suger CPPO_IN offer ID. |
cppoOfferId | string | no | The Suger CPPO offer ID. Reseller to end buyer |
cppoOutOfferId | string | no | The Suger CPPO_OUT offer ID. ISV to reseller |
createRetryAttempts | integer | no | CreateRetryAttempts counts the out-of-process create retries scheduled for this offer after the partner worker's own in-process retries were exhausted with a retryable failure. Server-owned and bounded; see partner/gcp/marketplace_offer_retry_temporal.go for the delay ladder and PE-11626 for the background. Currently written only by the GCP create path. |
createdByEmail | string | no | The email address of the user who created the offer. This field is immutable after creation. Especially useful for offers created from Salesforce/HubSpot integrations where the creator may not have a Suger account yet. |
createdBySource | CreatedBySource | no | |
customMetaInfo | object | no | The custom meta info of the offer can be updated by seller via API or console. |
discount | number | no | Discount is the private offer's uniform discount percentage relative to the product's public/list price, in 0-100 (e.g. 20 means the negotiated per-dimension rate is 20% off list), matching the Azure / GCP / DiscountGroup convention. AWS-only: unlike Azure percentage / GCP offers, AWS stores only absolute rates, so Suger persists this percentage so a later product list-price change can be re-applied to the private offer as listRate*(1-Discount/100). Set by the caller in the create-offer or updateMetaInfo request (or a backfill script); nil when unset (offer is skipped by discount propagation). A future per-dimension discount map can be added alongside this field, falling back to it. |
dynamics365OpportunityId | string | no | Microsoft Dynamics 365 opportunity GUID (lowercased, no braces) linked to this offer. Persisted into workload_offer.meta_info JSONB; filtered by the dynamics365OpportunityId query parameter on the offer/entitlement list endpoints. Additive to SalesforceOpportunityId / HubspotDealId — an offer may carry any combination of the three. |
enableTestUsageMetering | boolean | no | If enabled, Suger will test metering the usage for this entitlement hourly. |
entitlementCancellationSchedule | CancellationSchedule | no | |
errorMessages | array<string> | no | The error messages when the offer is invalid or offer related tasks failed. This is the raw error messages from the offer related tasks. |
gcpBillingAccountID | string | no | The GCP billing account ID of the buyer for this entitlement. It is populated when syncing GCP Marketplace entitlements. |
hubspotDealId | string | no | Hubsport deal ID of the private offer if available. |
internalNote | string | no | The Internal note of the private offer. It is only visible to the seller/ISV, not visible to the buyer. Up to MaxInternalNoteLength characters. |
isAgreementBasedOffer | boolean | no | Applicable for AWS Marketplace only, If this offer is agreement based offer. |
isAzureUpgradeOffer | boolean | no | If this offer is an Azure upgrade offer. |
isGrossRevenueFullSync | boolean | no | Whether the gross revenue is fully synced for the entitlement. |
isRenewalOffer | boolean | no | Applicable for AWS Marketplace only. If this offer is renewal offer of existing agreement. The existing agreement can be within or outside AWS Marketplace. AWS may audit and verify your offer is a renewal. If AWS is unable to verify your offer, then AWS may revoke the offer and entitlements from your customer. |
isReplacementOffer | boolean | no | If this offer is a GCP replacement offer. Applicable for GCP Marketplace replacement offer only. |
lastModifiedBy | LastModifiedBy | no | |
nextCreateRetryAt | string | no | NextCreateRetryAt is when the requeue Temporal workflow will resubmit the SQS create message. It is set only while the offer is PENDING_CREATE with a retry in flight, and is what distinguishes "still retrying" from a fresh submit; it is cleared once the offer is created, gives up, or the retry is abandoned. Best-effort: a terminated or timed-out requeue workflow can leave it stale, so treat Temporal as the source of truth. |
notifications | array<NotificationEvent> | no | The notifications of the offer if any updates. In most cases, it is to notify contacts/buyers when the offer is pending acceptance. |
offerAcceptDate | string | no | The date when the offer is accepted by the buyer. Only available when the private offer has been accepted. |
offerCreationSuccessDate | string | no | The datetime when the offer was successfully created on the partner's marketplace (AWS, Azure, GCP, etc). |
orbAppliedCreditLedgerEntries | object | no | Map of Orb credit ledger entry ID -> applied dollar amount, used to dedup usage-driven credit decrements already mirrored into the entitlement term credit (Orb credit netting). Written via targeted jsonb_set on the orbAppliedCreditLedgerEntries.{entryId} sub-key only — never full meta_info replace (cross-service JSONB rule). UpdateEntitlementMetaInfo retains it from the current row for the same reason: losing a key re-applies that decrement and double-credits the buyer, silently under-reporting usage to the cloud marketplace. |
originalEulaInfo | OriginalEulaInfo | no | |
prettifiedErrorMessages | array<string> | no | The prettified ErrorMessages. Using AI to make it more readable and understandable. The prettified error messages will be used for the offer related UI display. |
privatePlans | object | no | PrivatePlans is Suger-owned CRM metadata for the product's private plans, keyed by the plan externalId. Plans themselves live in Info.AzureProductResource.Plans (partner-synced); CRM metadata must live here so a partner sync cannot clobber it. Only used on products. Written via targeted jsonb_set on the privatePlans.{planExternalId} sub-key only — never full meta_info replace (cross-service JSONB rule). |
renewalOfferType | AwsRenewalOfferType | no | |
replacedOfferEndTime | string | no | The end time of the replaced offer. Applicable for GCP Marketplace replacement offer only. |
replacedOfferPaymentRecurrence | string | no | The payment recurrence of the replaced (base) offer, captured when the replacement draft is saved. The draft edit page rebuilds the allowed payment-recurrence options from it, since that page navigates without an entitlement and cannot re-derive the base cadence. Applicable for GCP Marketplace replacement offer only. |
replacedOfferResourceName | string | no | The resource name of the GCP Marketplace offer that this offer is replacing. In format of "projects/{gcpProjectNumber}/services/{productServiceName}/privateOffers/{privateOfferId}" Applicable for GCP Marketplace replacement offer only. |
replacedResellerPrivateOfferPlan | string | no | The resource name of the GCP marketplace reseller private offer plan that this offer is replacing. In format of "resellerPrivateOfferPlans/{resellerOfferPrivatePlanId}" |
resellerIds | array<string> | no | The reseller IDs (in the identity.buyer table) associated with this offer. Only applicable for CPPO_OUT & CPPO offers. |
salesforceAccountId | string | no | The Salesforce account ID directly linked to the private offer if available. Lets a user associate an offer with a Salesforce Account without going through an opportunity. Surfaced alongside opportunity-linked offers in the Salesforce app's account insights panel (AccountController.getActiveAndAcceptedOffersForAccount). |
salesforceEntitlementURL | string | no | The Salesforce entitlement URL |
salesforceOpportunityId | string | no | The Salesforce opportunity ID of the private offer if available. |
salesforceQuoteId | string | no | The Salesforce Quote ID of the private offer if available. |
sourceOfferCancelAfterPublishAt | string | no | SourceOfferCancelAfterPublishAt is the time the source-offer cancellation was last attempted. |
sourceOfferCancelAfterPublishError | string | no | SourceOfferCancelAfterPublishError is the error/skip reason recorded when the source-offer cancellation did not succeed. Internal audit field. |
sourceOfferCancelAfterPublishStatus | string | no | SourceOfferCancelAfterPublishStatus tracks the outcome of the source-offer cancellation triggered after this offer reached PENDING_ACCEPTANCE: "" (not attempted), "PENDING", "SENT", "SKIPPED" or "FAILED". Internal audit field; not shown to buyers. |
sourceOfferIdToCancelAfterPublish | string | no | SourceOfferIdToCancelAfterPublish is the Suger offer ID of the source GCP private offer that should be cancelled once this (cloned) offer reaches PENDING_ACCEPTANCE. Set by the console clone flow; consumed by the GCP create-response sync. Applicable for GCP Marketplace clone-and-cancel offers only. |
testUsageMeteringEndTime | string | no | The test usage metering end time. It is used for test usage metering only. Required if EnableTestUsageMetering is true. |
updateMessage | string | no | The message to notify when the offer is updated. |
warningMessages | array<string> | no | Warning messages for non-blocking issues that were auto-fixed. For example, deal type auto-fix when Native Renewal eligibility criteria are not met. |
AlibabaMarketplaceProduct fields:
| Field | Type | Required | Description |
|---|---|---|---|
AuditFailMsg | string | no | |
AuditStatus | string | no | |
AuditTime | integer | no | |
Code | string | no | |
Description | string | no | |
FrontCategoryId | integer | no | |
GmtCreated | integer | no | |
GmtModified | integer | no | |
Name | string | no | |
PicUrl | string | no | |
ProductExtras | AlibabaMarketplaceProductExtras | no | |
ProductSkus | AlibabaMarketplaceProductSkus | no | |
RequestId | string | no | |
Score | number | no | |
ShopInfo | AlibabaMarketplaceProductShopInfo | no | |
ShortDescription | string | no | |
Status | string | no | |
SupplierPk | integer | no | |
Type | string | no | |
UseCount | integer | no |
AwsProduct fields:
| Field | Type | Required | Description |
|---|---|---|---|
Description | AwsProductDescription | no | |
Dimensions | array<AwsProductDimension> | no | |
PromotionalResources | AwsProductPromotionalResources | no | |
Repositories | array<AwsProductRepository> | no | |
SignatureVerificationKeys | array<AwsProductSignatureVerificationKey> | no | |
SupportInformation | AwsProductSupportInformation | no | |
Versions | array<AwsProductVersion> | no | |
dataFeedProductId | string | no | The product Id in AWS Marketplace Data Feed Service. |
listingId | string | no | The listing ID in AWS Marketplace. |
productId | string | no | AWS Product ID |
AwsMarketplacePurchaseConstraints fields:
| Field | Type | Required | Description |
|---|---|---|---|
MultipleDimensionSelection | AwsMarketplaceCatalogConstraintsEnum | no | |
QuantityConfiguration | AwsMarketplaceCatalogConstraintsEnum | no |
AwsSnsSubscription fields:
| Field | Type | Required | Description |
|---|---|---|---|
Endpoint | string | no | |
Protocol | string | no | |
Status | AwsSnsSubscriptionStatus | no | |
SubscriptionArn | string | no | |
TopicArn | string | no |
AzureProduct fields:
| Field | Type | Required | Description |
|---|---|---|---|
availabilities | array<AzureProductAvailability> | no | |
branches | array<AzureProductBranch> | no | |
externalIDs | array<AzureTypeValue> | no | |
id | string | no | |
isModularPublishing | boolean | no | |
listings | array<AzureProductListing> | no | |
name | string | no | |
packageConfigurations | array<AzureProductPackageConfiguration> | no | |
plans | array<AzureMarketplacePriceAndAvailabilityPrivateOfferPlan> | no | All plans under this product |
properties | array<AzureProductProperty> | no | |
resourceType | string | no | |
setup | AzureProductSetup | no | |
submissions | array<AzureProductSubmission> | no | |
variants | array<AzureProductVariant> | no |
AzureMarketplaceProductResource fields:
| Field | Type | Required | Description |
|---|---|---|---|
customerLeads | AzureMarketplaceCustomerLeads | no | |
listing | AzureMarketplaceListing | no | |
listingAssets | array<AzureMarketplaceListingAsset> | no | |
plans | array<AzureMarketplacePlanResource> | no | |
priceAndAvailabilityCustomMeter | AzureMarketplacePriceAndAvailabilityCustomMeter | no | |
priceAndAvailabilityOffer | AzureMarketplacePriceAndAvailabilityOffer | no | |
product | AzureMarketplaceProduct | no | |
property | AzureMarketplaceProperty | no | |
reseller | AzureMarketplaceReseller | no | |
setup | AzureCommercialMarketplaceSetup | no | |
submission | AzureMarketplaceSubmission | no | |
technicalConfiguration | AzureMarketplaceSaasTechnicalConfiguration | no |
CommitDimension fields:
| Field | Type | Required | Description |
|---|---|---|---|
buyerQuantityConfigurable | boolean | no | Whether the buyer must choose the quantity when accepting the offer. |
category | string | no | |
description | string | no | |
isUserCreated | boolean | no | Whether this commit dimension is newly created by user, when creating AWS Marketplace Contract private offer. |
key | string | no | API name of the dimension |
length | integer | no | The term length for the commit amount, such as 6 months, or 1 year. The length is used together with timeUnit. If the length is zero, use the TermEndTime. |
maximumUsers | integer | no | The maximum number of users for PER_USER commit |
minimumUsers | integer | no | The minimum number of users for PER_USER commit |
name | string | no | Display name of the dimension |
quantity | integer | no | The quantity of this commit. |
rate | number | no | The commit amount. For GCP, it is monthly commitment. |
term | string | no | The term of the commit amount. It is used for front-end display only. |
termEndTime | string | no | The end time of the commit term. |
timeUnit | TimeUnit | no | |
type | CommitDimensionType | no | |
types | array<string> | no | These indicate whether the dimension covers metering, entitlement, or support for external metering |
MeteringDimension fields:
| Field | Type | Required | Description |
|---|---|---|---|
category | string | no | |
description | string | no | |
includedBaseQuantities | array<AzureIncludedBaseQuantity> | no | how many quantities of this dimension are included in the commit. |
key | string | no | |
name | string | no | Display name of the dimension. For GCP Marketplace, it is the metering metric ID without plan prefix. |
planId | string | no | The plan ID of the metering dimension. Applicable to GCP Marketplace only. No ISO duration suffix. |
planName | string | no | The name of the plan for the metering dimension. Applicable to GCP Marketplace only. It may contains the ISO duration suffix, such as P1Y. |
priceTiers | array<GcpPriceTier> | no | The price tiers of the metering dimension. Applicable to GCP Marketplace only. |
rate | number | no | The unit price of this usage metering dimension. |
skuId | string | no | The SKU ID of the metering dimension. Applicable to GCP Marketplace only. |
types | array<string> | no | |
usageCount | UsageCount | no | |
valueType | ValueType | no |
GcpMarketplaceProduct fields:
| Field | Type | Required | Description |
|---|---|---|---|
createTime | string | no | |
derivedDiscoveryState | GcpMarketplaceProductDerivedDiscoveryState | no | |
id | string | no | Nullable, GCP Marketplace Product UUID |
lastPublishTime | string | no | |
listingSpec | GcpMarketplaceProductListingSpec | no | |
marketplace | string | no | |
name | string | no | In format of "projects/{project-number}/listings/{product-name}.endpoints.{provider-id}.cloud.goog" |
revisionCreateTime | string | no | |
revisionId | string | no | |
service | string | no | In format of "services/{product-name}.endpoints.{provider-id}.cloud.goog" |
serviceConfig | GcpMarketplaceProductServiceConfig | no | |
standardOffers | array<GcpMarketplaceStandardOffer> | no | StandardOffers holds the currently-effective standard offers for this service, refreshed by SyncServicesViaAPI. They are the base offer used when creating a private offer via the Commerce Producer SDK, so create can resolve the base offer without a live lookup. |
validationSummary | object | no | TODO: add type |
Responses
200 — OK
Content-Type: application/json · Schema: WorkloadProduct
WorkloadProduct fields:
| Field | Type | Required | Description |
|---|---|---|---|
createdBy | string | no | |
creationTime | string | no | |
externalID | string | no | |
fulfillmentUrl | string | no | |
id | string | no | |
info | ProductInfo | no | |
lastUpdateTime | string | no | |
lastUpdatedBy | string | no | |
metaInfo | WorkloadMetaInfo | no | |
name | string | no | |
organizationID | string | no | |
partner | Partner | no | |
partnerID | string | no | |
productType | string | no | |
sellerID | string | no | |
service | PartnerService | no | |
status | string | no |
ProductInfo fields:
| Field | Type | Required | Description |
|---|---|---|---|
alibabaProduct | AlibabaMarketplaceProduct | no | |
attributes | object | no | |
awsAmiProduct | AwsProduct | no | |
awsContainerProduct | AwsProduct | no | |
awsMachineLearningProduct | AwsProduct | no | |
awsProfessionalServicesProduct | AwsProduct | no | |
awsPurchaseConstraints | AwsMarketplacePurchaseConstraints | no | |
awsSaasProduct | AwsProduct | no | |
awsSnsSubscriptions | array<AwsSnsSubscription> | no | |
azureProduct | AzureProduct | no | |
azureProductResource | AzureMarketplaceProductResource | no | |
commits | array<CommitDimension> | no | |
companyID | string | no | |
currency | string | no | |
dimensions | array<MeteringDimension> | no | |
eulaType | EulaType | no | |
eulaUrl | string | no | The public offer's EULA URL. |
gcpProduct | GcpMarketplaceProduct | no | |
oracleProduct | OracleMarketplaceProduct | no | |
pendingSubmission | PendingSubmission | no | |
refundCancellationPolicy | string | no | |
sellerNotes | string | no | |
snowflakeProduct | SnowflakeMarketplaceProduct | no | |
stripeProduct | StripeProduct | no |
WorkloadMetaInfo fields:
| Field | Type | Required | Description |
|---|---|---|---|
aceApnCrmUniqueIdentifier | string | no | The linked ACE ApnCrmUniqueIdentifier of the private offer if available. |
approvalInfo | ApprovalInfo | no | |
awsSaasProductDimensions | array<AwsProductDimension> | no | The AWS SaaS product dimensions. Applicable for AWS SaaS products only. This is used to save price info when creating AWS SaaS product. |
azureBillingAccountID | string | no | The Azure billing account ID of the buyer for this entitlement. It is populated when syncing Azure private offers or subscriptions. |
azureOriginalOfferIDForUpgrade | string | no | Original offer ID for Azure Upgrade |
baseAgreementId | string | no | Applicable for AWS Marketplace only, when the IsAgreementBasedOffer is true. |
buyerCommitQuantities | object | no | Buyer-supplied per-commit quantities used when accepting a ConfigurableUpfront AWS offer. Keyed by commit dimension key. Only set on offers where at least one commit allows buyer quantity configuration. Consumed by the chromedp accept flow to fill AWS's Unit configuration inputs before clicking Accept. Offer-scoped: it stays on the offer as the accept-time record and is stripped from entitlement transfer by CleanForTransfer. |
buyerIds | array<string> | no | The Suger buyer IDs of the private offer if available. |
chargebeeSubscriptionID | string | no | The Chargebee subscription ID of the private offer if available. |
contacts | array<Contact> | no | The contacts of the offer to notify if any updates. |
cppoInOfferId | string | no | The Suger CPPO_IN offer ID. |
cppoOfferId | string | no | The Suger CPPO offer ID. Reseller to end buyer |
cppoOutOfferId | string | no | The Suger CPPO_OUT offer ID. ISV to reseller |
createRetryAttempts | integer | no | CreateRetryAttempts counts the out-of-process create retries scheduled for this offer after the partner worker's own in-process retries were exhausted with a retryable failure. Server-owned and bounded; see partner/gcp/marketplace_offer_retry_temporal.go for the delay ladder and PE-11626 for the background. Currently written only by the GCP create path. |
createdByEmail | string | no | The email address of the user who created the offer. This field is immutable after creation. Especially useful for offers created from Salesforce/HubSpot integrations where the creator may not have a Suger account yet. |
createdBySource | CreatedBySource | no | |
customMetaInfo | object | no | The custom meta info of the offer can be updated by seller via API or console. |
discount | number | no | Discount is the private offer's uniform discount percentage relative to the product's public/list price, in 0-100 (e.g. 20 means the negotiated per-dimension rate is 20% off list), matching the Azure / GCP / DiscountGroup convention. AWS-only: unlike Azure percentage / GCP offers, AWS stores only absolute rates, so Suger persists this percentage so a later product list-price change can be re-applied to the private offer as listRate*(1-Discount/100). Set by the caller in the create-offer or updateMetaInfo request (or a backfill script); nil when unset (offer is skipped by discount propagation). A future per-dimension discount map can be added alongside this field, falling back to it. |
dynamics365OpportunityId | string | no | Microsoft Dynamics 365 opportunity GUID (lowercased, no braces) linked to this offer. Persisted into workload_offer.meta_info JSONB; filtered by the dynamics365OpportunityId query parameter on the offer/entitlement list endpoints. Additive to SalesforceOpportunityId / HubspotDealId — an offer may carry any combination of the three. |
enableTestUsageMetering | boolean | no | If enabled, Suger will test metering the usage for this entitlement hourly. |
entitlementCancellationSchedule | CancellationSchedule | no | |
errorMessages | array<string> | no | The error messages when the offer is invalid or offer related tasks failed. This is the raw error messages from the offer related tasks. |
gcpBillingAccountID | string | no | The GCP billing account ID of the buyer for this entitlement. It is populated when syncing GCP Marketplace entitlements. |
hubspotDealId | string | no | Hubsport deal ID of the private offer if available. |
internalNote | string | no | The Internal note of the private offer. It is only visible to the seller/ISV, not visible to the buyer. Up to MaxInternalNoteLength characters. |
isAgreementBasedOffer | boolean | no | Applicable for AWS Marketplace only, If this offer is agreement based offer. |
isAzureUpgradeOffer | boolean | no | If this offer is an Azure upgrade offer. |
isGrossRevenueFullSync | boolean | no | Whether the gross revenue is fully synced for the entitlement. |
isRenewalOffer | boolean | no | Applicable for AWS Marketplace only. If this offer is renewal offer of existing agreement. The existing agreement can be within or outside AWS Marketplace. AWS may audit and verify your offer is a renewal. If AWS is unable to verify your offer, then AWS may revoke the offer and entitlements from your customer. |
isReplacementOffer | boolean | no | If this offer is a GCP replacement offer. Applicable for GCP Marketplace replacement offer only. |
lastModifiedBy | LastModifiedBy | no | |
nextCreateRetryAt | string | no | NextCreateRetryAt is when the requeue Temporal workflow will resubmit the SQS create message. It is set only while the offer is PENDING_CREATE with a retry in flight, and is what distinguishes "still retrying" from a fresh submit; it is cleared once the offer is created, gives up, or the retry is abandoned. Best-effort: a terminated or timed-out requeue workflow can leave it stale, so treat Temporal as the source of truth. |
notifications | array<NotificationEvent> | no | The notifications of the offer if any updates. In most cases, it is to notify contacts/buyers when the offer is pending acceptance. |
offerAcceptDate | string | no | The date when the offer is accepted by the buyer. Only available when the private offer has been accepted. |
offerCreationSuccessDate | string | no | The datetime when the offer was successfully created on the partner's marketplace (AWS, Azure, GCP, etc). |
orbAppliedCreditLedgerEntries | object | no | Map of Orb credit ledger entry ID -> applied dollar amount, used to dedup usage-driven credit decrements already mirrored into the entitlement term credit (Orb credit netting). Written via targeted jsonb_set on the orbAppliedCreditLedgerEntries.{entryId} sub-key only — never full meta_info replace (cross-service JSONB rule). UpdateEntitlementMetaInfo retains it from the current row for the same reason: losing a key re-applies that decrement and double-credits the buyer, silently under-reporting usage to the cloud marketplace. |
originalEulaInfo | OriginalEulaInfo | no | |
prettifiedErrorMessages | array<string> | no | The prettified ErrorMessages. Using AI to make it more readable and understandable. The prettified error messages will be used for the offer related UI display. |
privatePlans | object | no | PrivatePlans is Suger-owned CRM metadata for the product's private plans, keyed by the plan externalId. Plans themselves live in Info.AzureProductResource.Plans (partner-synced); CRM metadata must live here so a partner sync cannot clobber it. Only used on products. Written via targeted jsonb_set on the privatePlans.{planExternalId} sub-key only — never full meta_info replace (cross-service JSONB rule). |
renewalOfferType | AwsRenewalOfferType | no | |
replacedOfferEndTime | string | no | The end time of the replaced offer. Applicable for GCP Marketplace replacement offer only. |
replacedOfferPaymentRecurrence | string | no | The payment recurrence of the replaced (base) offer, captured when the replacement draft is saved. The draft edit page rebuilds the allowed payment-recurrence options from it, since that page navigates without an entitlement and cannot re-derive the base cadence. Applicable for GCP Marketplace replacement offer only. |
replacedOfferResourceName | string | no | The resource name of the GCP Marketplace offer that this offer is replacing. In format of "projects/{gcpProjectNumber}/services/{productServiceName}/privateOffers/{privateOfferId}" Applicable for GCP Marketplace replacement offer only. |
replacedResellerPrivateOfferPlan | string | no | The resource name of the GCP marketplace reseller private offer plan that this offer is replacing. In format of "resellerPrivateOfferPlans/{resellerOfferPrivatePlanId}" |
resellerIds | array<string> | no | The reseller IDs (in the identity.buyer table) associated with this offer. Only applicable for CPPO_OUT & CPPO offers. |
salesforceAccountId | string | no | The Salesforce account ID directly linked to the private offer if available. Lets a user associate an offer with a Salesforce Account without going through an opportunity. Surfaced alongside opportunity-linked offers in the Salesforce app's account insights panel (AccountController.getActiveAndAcceptedOffersForAccount). |
salesforceEntitlementURL | string | no | The Salesforce entitlement URL |
salesforceOpportunityId | string | no | The Salesforce opportunity ID of the private offer if available. |
salesforceQuoteId | string | no | The Salesforce Quote ID of the private offer if available. |
sourceOfferCancelAfterPublishAt | string | no | SourceOfferCancelAfterPublishAt is the time the source-offer cancellation was last attempted. |
sourceOfferCancelAfterPublishError | string | no | SourceOfferCancelAfterPublishError is the error/skip reason recorded when the source-offer cancellation did not succeed. Internal audit field. |
sourceOfferCancelAfterPublishStatus | string | no | SourceOfferCancelAfterPublishStatus tracks the outcome of the source-offer cancellation triggered after this offer reached PENDING_ACCEPTANCE: "" (not attempted), "PENDING", "SENT", "SKIPPED" or "FAILED". Internal audit field; not shown to buyers. |
sourceOfferIdToCancelAfterPublish | string | no | SourceOfferIdToCancelAfterPublish is the Suger offer ID of the source GCP private offer that should be cancelled once this (cloned) offer reaches PENDING_ACCEPTANCE. Set by the console clone flow; consumed by the GCP create-response sync. Applicable for GCP Marketplace clone-and-cancel offers only. |
testUsageMeteringEndTime | string | no | The test usage metering end time. It is used for test usage metering only. Required if EnableTestUsageMetering is true. |
updateMessage | string | no | The message to notify when the offer is updated. |
warningMessages | array<string> | no | Warning messages for non-blocking issues that were auto-fixed. For example, deal type auto-fix when Native Renewal eligibility criteria are not met. |
AlibabaMarketplaceProduct fields:
| Field | Type | Required | Description |
|---|---|---|---|
AuditFailMsg | string | no | |
AuditStatus | string | no | |
AuditTime | integer | no | |
Code | string | no | |
Description | string | no | |
FrontCategoryId | integer | no | |
GmtCreated | integer | no | |
GmtModified | integer | no | |
Name | string | no | |
PicUrl | string | no | |
ProductExtras | AlibabaMarketplaceProductExtras | no | |
ProductSkus | AlibabaMarketplaceProductSkus | no | |
RequestId | string | no | |
Score | number | no | |
ShopInfo | AlibabaMarketplaceProductShopInfo | no | |
ShortDescription | string | no | |
Status | string | no | |
SupplierPk | integer | no | |
Type | string | no | |
UseCount | integer | no |
AwsProduct fields:
| Field | Type | Required | Description |
|---|---|---|---|
Description | AwsProductDescription | no | |
Dimensions | array<AwsProductDimension> | no | |
PromotionalResources | AwsProductPromotionalResources | no | |
Repositories | array<AwsProductRepository> | no | |
SignatureVerificationKeys | array<AwsProductSignatureVerificationKey> | no | |
SupportInformation | AwsProductSupportInformation | no | |
Versions | array<AwsProductVersion> | no | |
dataFeedProductId | string | no | The product Id in AWS Marketplace Data Feed Service. |
listingId | string | no | The listing ID in AWS Marketplace. |
productId | string | no | AWS Product ID |
AwsMarketplacePurchaseConstraints fields:
| Field | Type | Required | Description |
|---|---|---|---|
MultipleDimensionSelection | AwsMarketplaceCatalogConstraintsEnum | no | |
QuantityConfiguration | AwsMarketplaceCatalogConstraintsEnum | no |
AwsSnsSubscription fields:
| Field | Type | Required | Description |
|---|---|---|---|
Endpoint | string | no | |
Protocol | string | no | |
Status | AwsSnsSubscriptionStatus | no | |
SubscriptionArn | string | no | |
TopicArn | string | no |
AzureProduct fields:
| Field | Type | Required | Description |
|---|---|---|---|
availabilities | array<AzureProductAvailability> | no | |
branches | array<AzureProductBranch> | no | |
externalIDs | array<AzureTypeValue> | no | |
id | string | no | |
isModularPublishing | boolean | no | |
listings | array<AzureProductListing> | no | |
name | string | no | |
packageConfigurations | array<AzureProductPackageConfiguration> | no | |
plans | array<AzureMarketplacePriceAndAvailabilityPrivateOfferPlan> | no | All plans under this product |
properties | array<AzureProductProperty> | no | |
resourceType | string | no | |
setup | AzureProductSetup | no | |
submissions | array<AzureProductSubmission> | no | |
variants | array<AzureProductVariant> | no |
AzureMarketplaceProductResource fields:
| Field | Type | Required | Description |
|---|---|---|---|
customerLeads | AzureMarketplaceCustomerLeads | no | |
listing | AzureMarketplaceListing | no | |
listingAssets | array<AzureMarketplaceListingAsset> | no | |
plans | array<AzureMarketplacePlanResource> | no | |
priceAndAvailabilityCustomMeter | AzureMarketplacePriceAndAvailabilityCustomMeter | no | |
priceAndAvailabilityOffer | AzureMarketplacePriceAndAvailabilityOffer | no | |
product | AzureMarketplaceProduct | no | |
property | AzureMarketplaceProperty | no | |
reseller | AzureMarketplaceReseller | no | |
setup | AzureCommercialMarketplaceSetup | no | |
submission | AzureMarketplaceSubmission | no | |
technicalConfiguration | AzureMarketplaceSaasTechnicalConfiguration | no |
CommitDimension fields:
| Field | Type | Required | Description |
|---|---|---|---|
buyerQuantityConfigurable | boolean | no | Whether the buyer must choose the quantity when accepting the offer. |
category | string | no | |
description | string | no | |
isUserCreated | boolean | no | Whether this commit dimension is newly created by user, when creating AWS Marketplace Contract private offer. |
key | string | no | API name of the dimension |
length | integer | no | The term length for the commit amount, such as 6 months, or 1 year. The length is used together with timeUnit. If the length is zero, use the TermEndTime. |
maximumUsers | integer | no | The maximum number of users for PER_USER commit |
minimumUsers | integer | no | The minimum number of users for PER_USER commit |
name | string | no | Display name of the dimension |
quantity | integer | no | The quantity of this commit. |
rate | number | no | The commit amount. For GCP, it is monthly commitment. |
term | string | no | The term of the commit amount. It is used for front-end display only. |
termEndTime | string | no | The end time of the commit term. |
timeUnit | TimeUnit | no | |
type | CommitDimensionType | no | |
types | array<string> | no | These indicate whether the dimension covers metering, entitlement, or support for external metering |
MeteringDimension fields:
| Field | Type | Required | Description |
|---|---|---|---|
category | string | no | |
description | string | no | |
includedBaseQuantities | array<AzureIncludedBaseQuantity> | no | how many quantities of this dimension are included in the commit. |
key | string | no | |
name | string | no | Display name of the dimension. For GCP Marketplace, it is the metering metric ID without plan prefix. |
planId | string | no | The plan ID of the metering dimension. Applicable to GCP Marketplace only. No ISO duration suffix. |
planName | string | no | The name of the plan for the metering dimension. Applicable to GCP Marketplace only. It may contains the ISO duration suffix, such as P1Y. |
priceTiers | array<GcpPriceTier> | no | The price tiers of the metering dimension. Applicable to GCP Marketplace only. |
rate | number | no | The unit price of this usage metering dimension. |
skuId | string | no | The SKU ID of the metering dimension. Applicable to GCP Marketplace only. |
types | array<string> | no | |
usageCount | UsageCount | no | |
valueType | ValueType | no |
GcpMarketplaceProduct fields:
| Field | Type | Required | Description |
|---|---|---|---|
createTime | string | no | |
derivedDiscoveryState | GcpMarketplaceProductDerivedDiscoveryState | no | |
id | string | no | Nullable, GCP Marketplace Product UUID |
lastPublishTime | string | no | |
listingSpec | GcpMarketplaceProductListingSpec | no | |
marketplace | string | no | |
name | string | no | In format of "projects/{project-number}/listings/{product-name}.endpoints.{provider-id}.cloud.goog" |
revisionCreateTime | string | no | |
revisionId | string | no | |
service | string | no | In format of "services/{product-name}.endpoints.{provider-id}.cloud.goog" |
serviceConfig | GcpMarketplaceProductServiceConfig | no | |
standardOffers | array<GcpMarketplaceStandardOffer> | no | StandardOffers holds the currently-effective standard offers for this service, refreshed by SyncServicesViaAPI. They are the base offer used when creating a private offer via the Commerce Producer SDK, so create can resolve the base offer without a live lookup. |
validationSummary | object | no | TODO: add type |
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.