Suger

Create offer set

POST https://api.suger.cloud/org/{orgId}/offerSet

Create a new offer set under the given organization.

Parameters

NameInTypeRequiredDescription
orgId path string yes Organization ID

Request Body

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

CreateOfferSetParams fields:

FieldTypeRequiredDescription
buyerIDs array<string> no
createdBy string no
creationTime string no Optional
expireTime string no Optional
externalID string no Leave it empty when creating offer set.
id string no Leave it empty when creating offer set.
info OfferSetInfo yes
lastUpdatedBy string no
metaInfo WorkloadMetaInfo no
name string yes OfferSet name
offers array<WorkloadOffer> no
organizationID string yes
partner Partner no
partnerID string no
service PartnerService no
status OfferSetStatus no

OfferSetInfo fields:

FieldTypeRequiredDescription
awsSolutionID string no
buyerAwsAccountIds array<string> no
buyerNotes string no

WorkloadMetaInfo fields:

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

WorkloadOffer fields:

FieldTypeRequiredDescription
buyerID string no
channelType ChannelType no
contactIds array<string> no
createdBy string no
creationTime string no
endTime string no nullable
expireTime string no nullable
externalID string no
id string no
info OfferInfo no
lastUpdateTime string no
lastUpdatedBy string no
metaInfo WorkloadMetaInfo no
name string no
offerType OfferType no
organizationID string no
partner Partner no
partnerID string no
pricingType PricingType no
productID string no
productType ProductType no
service PartnerService no
status OfferStatus no
subStatus OfferSubStatus no

ApprovalInfo fields:

FieldTypeRequiredDescription
approvalStatus ApprovalStatus no
decisionDate string no DecisionDate is when the final approval/decline happened (nil when pending) Latest DecisionDate
message string no Message is the reason or explanation provided when the approval status is set to Declined or Action Required. It always stores the latest message for the current status transition. Historical messages are stored in notification events.
requestDate string no Latest RequestDate

AwsProductDimension fields:

FieldTypeRequiredDescription
Description string no
Key string no
Length integer no The term length for the commit amount, such as 6 months, or 1 year. The length is used together with timeUnit. Length and TimeUnit are only used for commit dimension.
Name string no
Rate number no Below three fields are only used for pass data when create or update product's public offer pricing. Rate is only used for update public offer, becasue rate will be set as 0.01 when create new product.
TimeUnit TimeUnit no
Types array<string> no
Unit string no

Contact fields:

FieldTypeRequiredDescription
company string no
email string no
name string no

CancellationSchedule fields:

FieldTypeRequiredDescription
cancelDate string no The cancellation date of the entitlement. It is required when the type is SpecificDate.
creationDate string no When this cancellation schedule is created.
note string no The cancellation note. Max 500 characters.
type CancellationScheduleType no

LastModifiedBy fields:

FieldTypeRequiredDescription
email string no The email of the creator.
entityId string no The ID of the creator.
entityType EntityType no
name string no The name of the creator.

NotificationEvent fields:

FieldTypeRequiredDescription
action NotificationEventAction no
ccContactIds array<string> no Cc contactIds that will receive this notification
channels array<NotificationChannel> no Channels lists where this event is delivered, e.g., ["SLACK", "EMAIL"]. Empty + RequireAudit=true means audit-only: the event reaches the Activity timeline but no outbound channel. Delivery handlers MUST gate their Match on Channels for that contract to hold.
contactEmails array<string> no Contact emails that will receive this notification
contactIds array<string> no ContactIds that will receive this notification
createdBy LastModifiedBy no
customFields object no Custom fields of the notification event.
entityID string no
entityName string no The name of the entity.
entityStatus string no
entityType EntityType no
eventID string no notification event id.
eventStatus NotificationEventStatus no
info object no Additional info of the notification event.
isActionItem boolean no If this notification event is an action item.
lastUpdateTime string no timestamp of the event when it is updated.
message string no The message of the notification event such as email body, action item description.
organizationID string no suger organization id.
partner Partner no
priority AuditingEventPriority no
requireAudit boolean no If this notification event is an auditing event and need to store in DB.
timestamp string no timestamp of the event when it is scheduled or created.
title string no The title of the notification event such as email subject, action item title.
trackEvents array<TrackEvent> no The track events of the notification event.
version integer no Version identifies the schema version of this envelope. Consumers reject unknown versions (leave for redelivery to DLQ) so a future shape change doesn't silently poison old consumers. Missing/0 → v1 (default).

OriginalEulaInfo fields:

FieldTypeRequiredDescription
additionalEulaUrls array<string> no The URL of the additional EULA files. Only applicable when EulaType = CUSTOM. The additional EULA files will be attached to the EULA file in the EulaUrl, and form a single EULA file.
additionalResellerEulaUrls array<string> no The URL of the additional reseller EULA files. Only applicable when ResellerEulaType = CUSTOM.
attachEulaType EulaType no
eulaMergeOrder array<integer> no The merge order of the EULA files. Only applicable when EulaType = CUSTOM. Elements are the original index of the EULA files in the index they should be transferred to, where original indexes are: AttachEulaType is index 0, EulaUrl is index 1, additionalEulaUrls is index 2 onwards.
eulaType EulaType no
eulaUrl string no The URL of the EULA file.
resellerAttachEulaType EulaType no
resellerEulaType EulaType no
resellerEulaUrl string no

OfferInfo fields:

FieldTypeRequiredDescription
additionalEulaUrls array<string> no The URL of the additional EULA files. Only applicable when EulaType = CUSTOM. The additional EULA files will be attached to the EULA file in the EulaUrl, and form a single EULA file.
additionalResellerEulaUrls array<string> no The URL of the additional reseller EULA files. Only applicable when ResellerEulaType = CUSTOM.
attachEulaType EulaType no
autoRenew boolean no Is this offer Auto Renew enabled.
awsAgreementDuration string no Aws private subscription offer Usage duration. ISO8601 format. P300D means the contract Usage start date At acceptance, and with duration 300 days.
awsChannelPartner AwsChannelPartner no
awsCppoEventDetail AwsMarketplaceEventBridgeEventDetail no
awsCppoOpportunity AwsMarketplaceCppoOpportunity no
awsMachineLearningContractDuration integer no For AWS machine learning contract private offer only. The contract duration of the offer in months.
awsMarkupPercentage number no AWS private reseller offer using markup percentage. 10.0 represent 10% partner margin.
awsOfferSetId string no For AWS Offer Set feature. If this offer is linked to an offer set, save the OfferSet ID in this field. An offer set is a collection of offers that can be shared with a customer.
awsResaleAuthorizationId string no AWS ResaleAuthorizationId(CPPO_IN offer id) for CPPO offers of the reseller.
azureOriginalPlan AzureMarketplacePriceAndAvailabilityPrivateOfferPlan no
azurePlanSoftwareReservations array<AzureMarketplacePriceAndAvailabilitySoftwareReservation> no All software reservation billing term options from the Azure plan (e.g., monthly, 1-year, 3-year with different discounts). Only applicable for Azure Marketplace VM offers with software reservations.
azurePrivateOffer AzureMarketplacePrivateOffer no
azureProductVariant AzureProductVariant no
azureVmImageSkuIds array<string> no VM image SKU ids associated with this VM plan (gen1/gen2/arm64 variants). Azure billing reports each customer's deployment as one of these skuId values in the CMA PlanId, so revenue matching uses this list to resolve a suffixed PlanId back to the base plan's offer. Only applicable for Azure Marketplace VM default offers.
billableDimensions array<BillableDimension> no Usage based metering dimensions based on Billable Metrics, managed by Suger only.
billingCycle BillingCycle no
billingIntervalInMonths integer no Billing interval in months for the offer.
buyerAwsAccountIds array<string> no The buyers' AWS Account IDs of this offer.
buyerAzureTenants array<AzureAudience> no The buyers' Azure tenants of this offer.
buyerCountryCodes array<string> no The buyer region availability of this AWS private offer, as ISO 3166-1 alpha-2 country codes. When set, the buyer can only accept the offer from one of these countries. Empty means no region restriction. Not applicable to CPPO_OUT (resale authorization) offers.
commitAmount number no The amount that the buyer has committed to pay, before discount if applicable. It can be monthly commitment or total commitment. For frontend display or analysis purposes, not used for billing.
commitBillingIntervalInMonths integer no Deprecated: Use BillingIntervalInMonths instead.
commits array<CommitDimension> no Recurring flat fee for the offer, managed by cloud marketplaces or Suger.
currency string no The currency code of the offer. ISO 4217 format.
deliveryMethod OfferDeliveryMethod no
dimensions array<MeteringDimension> no Usage based metering dimensions defined on cloud marketplaces, managed by Cloud marketplaces only.
discountGroupApplications array<OfferDiscountGroupApplication> no Discount groups applied to this offer's metering dimensions (Dimension Tagging & Discount Groups). Suger-managed: retained across marketplace sync. The slice order is the precedence (first match wins). This is an audit/re-render/re-resolve record — the submitted prices live in Dimensions[].Rate (AWS/Azure) / GcpSkuDiscounts (GCP).
discountPercentage number no The discount percentage off the original price. For example, 20 means 20% off. 0 means no discount. It can be discount off the commitment amount or discount off the usage price.
docusignEnvelopeIds object no The Docusign envelope IDs generated for the offer. The key is the contact ID, the value is the Docusign envelope ID.
eulaMergeOrder array<integer> no The merge order of the EULA files. Only applicable when EulaType = CUSTOM. Elements are the original index of the EULA files in the index they should be transferred to, where original indexes are: AttachEulaType is index 0, EulaUrl is index 1, additionalEulaUrls is index 2 onwards.
eulaType EulaType no
eulaUrl string no
gcpCotermAlignment structs.GcpMarketplaceCotermAlignment no
gcpCustomerInfo GcpMarketplacePrivateOfferCustomerInfo no
gcpDuration integer no The duration of the offer in months. Only required when creating GCP Marketplace private offer.
gcpFeatures array<GcpMarketplaceProductFeatureValue> no Optional when creating GCP Marketplace private offer. Custom feature values to set for the private offer. Each feature name must exist in the product's feature list. The feature list is available at product.Info.GcpProduct.ListingSpec.PurchaseSpec.Features.
gcpMetrics array<GcpMarketplaceProductMeteringMetric> no Only applicable for GCP Marketplace Offers (the default or private offer)
gcpOfferDataSource structs.GcpOfferDataSource no
gcpOfferDealType GcpMarketplaceOfferDealType no
gcpPaymentRecurrence structs.GcpMarketplacePaymentRecurrence no
gcpPaymentSchedule PaymentScheduleType no
gcpPlans array<GcpMarketplaceProductPurchaseOptionSpec> no Only applicable for GCP Marketplace
gcpPrivateOffer GcpMarketplacePrivateOffer no
gcpProviderInfo GcpMarketplacePrivateOfferProviderInfo no
gcpProviderInternalNote string no Optional when creating GCP Marketplace private offer. The internal note for the seller/ISV. It is only visible to the seller/ISV.
gcpProviderPublicNote string no Optional when creating GCP Marketplace private offer. By default, it is the same as offer name. The public note for the buyer. It is visible to the buyer.
gcpResellerPrivateOfferPlan GcpMarketplaceResellerPrivateOfferPlan no
gcpSkuDiscounts array<GcpOfferSkuDiscount> no GcpSkuDiscounts contains per-metric discount percentages for GCP POSTPAY offers. Each entry specifies a discount for a specific usage metric identified by its metricId (from the plan's priceInfo.usageFees). For PREPAY offers, use PaymentInstallment.SkuDiscounts instead.
gcpSowAgreementDocument GcpAgreementDocument no
gcpUsagePlanPriceModel GcpMarketplaceUsagePlanPriceModel no
gracePeriodInDays integer no The grace period in days for the offer. This is the number of days during which invoices remain in draft status, for reviewing. This filed can be overridden at the entitlement level.
isMeteringOverageCommit boolean no Whether the usage metering will only be charged for the amount that exceeds the committed amount. e.g. the buyer has committed $100, and the usage is $120, - if true, the buyer will be charged for the usage at $20, and the commit at $100. - if false, the buyer will be charged for the usage at $120, and the commit at $100.
netTermsInDays integer no The net terms in days for the offer. This is the number of days the buyer has to pay the invoice. This filed can be overridden at the entitlement level.
oracleOffer OracleMarketplaceOffer no
paymentInstallments array<PaymentInstallment> no For flexible payment schedule, managed by cloud marketplaces or Suger.
paymentSchedule PaymentScheduleType no
pdfURL string no Not needed when creating stripe offer This URL points to the PDF version of the offer.
privateOfferUrl string no The URL of the private offer sent to buyers to accept. Only applicable for private offer.
proratedBilling boolean no Prorated billing for the offer. If true, the billing is prorated based on the start date and end date. If false, the billing is not prorated. This filed can be overridden at the entitlement level.
refundCancellationPolicy string no
resellerAttachEulaType EulaType no
resellerEulaType EulaType no
resellerEulaUrl string no
sellerNotes string no
snowflakeOffer SnowflakeMarketplaceOffer no
startTime string no Optional when creating AWS or GCP Marketplace private offer on the contract product. The future start time of the offer if it is not started on the acceptance.
taxIds array<string> no Tax ids for the offer, used to calculate the tax amount for the offer. This field can be overridden at the entitlement level.
trialConfig TrialConfig no
usageBillingIntervalInMonths integer no Deprecated: Use BillingIntervalInMonths instead.
visibility string no The public/private origin of the offer, derived from OfferType at persistence time (see DeriveOfferVisibility): PUBLIC for the marketplace default/free-trial listing offer, PRIVATE for negotiated private offers.

Responses

200 — OK

Content-Type: application/json · Schema: CreateOfferSetParams

CreateOfferSetParams fields:

FieldTypeRequiredDescription
buyerIDs array<string> no
createdBy string no
creationTime string no Optional
expireTime string no Optional
externalID string no Leave it empty when creating offer set.
id string no Leave it empty when creating offer set.
info OfferSetInfo yes
lastUpdatedBy string no
metaInfo WorkloadMetaInfo no
name string yes OfferSet name
offers array<WorkloadOffer> no
organizationID string yes
partner Partner no
partnerID string no
service PartnerService no
status OfferSetStatus no

OfferSetInfo fields:

FieldTypeRequiredDescription
awsSolutionID string no
buyerAwsAccountIds array<string> no
buyerNotes string no

WorkloadMetaInfo fields:

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

WorkloadOffer fields:

FieldTypeRequiredDescription
buyerID string no
channelType ChannelType no
contactIds array<string> no
createdBy string no
creationTime string no
endTime string no nullable
expireTime string no nullable
externalID string no
id string no
info OfferInfo no
lastUpdateTime string no
lastUpdatedBy string no
metaInfo WorkloadMetaInfo no
name string no
offerType OfferType no
organizationID string no
partner Partner no
partnerID string no
pricingType PricingType no
productID string no
productType ProductType no
service PartnerService no
status OfferStatus no
subStatus OfferSubStatus no

ApprovalInfo fields:

FieldTypeRequiredDescription
approvalStatus ApprovalStatus no
decisionDate string no DecisionDate is when the final approval/decline happened (nil when pending) Latest DecisionDate
message string no Message is the reason or explanation provided when the approval status is set to Declined or Action Required. It always stores the latest message for the current status transition. Historical messages are stored in notification events.
requestDate string no Latest RequestDate

AwsProductDimension fields:

FieldTypeRequiredDescription
Description string no
Key string no
Length integer no The term length for the commit amount, such as 6 months, or 1 year. The length is used together with timeUnit. Length and TimeUnit are only used for commit dimension.
Name string no
Rate number no Below three fields are only used for pass data when create or update product's public offer pricing. Rate is only used for update public offer, becasue rate will be set as 0.01 when create new product.
TimeUnit TimeUnit no
Types array<string> no
Unit string no

Contact fields:

FieldTypeRequiredDescription
company string no
email string no
name string no

CancellationSchedule fields:

FieldTypeRequiredDescription
cancelDate string no The cancellation date of the entitlement. It is required when the type is SpecificDate.
creationDate string no When this cancellation schedule is created.
note string no The cancellation note. Max 500 characters.
type CancellationScheduleType no

LastModifiedBy fields:

FieldTypeRequiredDescription
email string no The email of the creator.
entityId string no The ID of the creator.
entityType EntityType no
name string no The name of the creator.

NotificationEvent fields:

FieldTypeRequiredDescription
action NotificationEventAction no
ccContactIds array<string> no Cc contactIds that will receive this notification
channels array<NotificationChannel> no Channels lists where this event is delivered, e.g., ["SLACK", "EMAIL"]. Empty + RequireAudit=true means audit-only: the event reaches the Activity timeline but no outbound channel. Delivery handlers MUST gate their Match on Channels for that contract to hold.
contactEmails array<string> no Contact emails that will receive this notification
contactIds array<string> no ContactIds that will receive this notification
createdBy LastModifiedBy no
customFields object no Custom fields of the notification event.
entityID string no
entityName string no The name of the entity.
entityStatus string no
entityType EntityType no
eventID string no notification event id.
eventStatus NotificationEventStatus no
info object no Additional info of the notification event.
isActionItem boolean no If this notification event is an action item.
lastUpdateTime string no timestamp of the event when it is updated.
message string no The message of the notification event such as email body, action item description.
organizationID string no suger organization id.
partner Partner no
priority AuditingEventPriority no
requireAudit boolean no If this notification event is an auditing event and need to store in DB.
timestamp string no timestamp of the event when it is scheduled or created.
title string no The title of the notification event such as email subject, action item title.
trackEvents array<TrackEvent> no The track events of the notification event.
version integer no Version identifies the schema version of this envelope. Consumers reject unknown versions (leave for redelivery to DLQ) so a future shape change doesn't silently poison old consumers. Missing/0 → v1 (default).

OriginalEulaInfo fields:

FieldTypeRequiredDescription
additionalEulaUrls array<string> no The URL of the additional EULA files. Only applicable when EulaType = CUSTOM. The additional EULA files will be attached to the EULA file in the EulaUrl, and form a single EULA file.
additionalResellerEulaUrls array<string> no The URL of the additional reseller EULA files. Only applicable when ResellerEulaType = CUSTOM.
attachEulaType EulaType no
eulaMergeOrder array<integer> no The merge order of the EULA files. Only applicable when EulaType = CUSTOM. Elements are the original index of the EULA files in the index they should be transferred to, where original indexes are: AttachEulaType is index 0, EulaUrl is index 1, additionalEulaUrls is index 2 onwards.
eulaType EulaType no
eulaUrl string no The URL of the EULA file.
resellerAttachEulaType EulaType no
resellerEulaType EulaType no
resellerEulaUrl string no

OfferInfo fields:

FieldTypeRequiredDescription
additionalEulaUrls array<string> no The URL of the additional EULA files. Only applicable when EulaType = CUSTOM. The additional EULA files will be attached to the EULA file in the EulaUrl, and form a single EULA file.
additionalResellerEulaUrls array<string> no The URL of the additional reseller EULA files. Only applicable when ResellerEulaType = CUSTOM.
attachEulaType EulaType no
autoRenew boolean no Is this offer Auto Renew enabled.
awsAgreementDuration string no Aws private subscription offer Usage duration. ISO8601 format. P300D means the contract Usage start date At acceptance, and with duration 300 days.
awsChannelPartner AwsChannelPartner no
awsCppoEventDetail AwsMarketplaceEventBridgeEventDetail no
awsCppoOpportunity AwsMarketplaceCppoOpportunity no
awsMachineLearningContractDuration integer no For AWS machine learning contract private offer only. The contract duration of the offer in months.
awsMarkupPercentage number no AWS private reseller offer using markup percentage. 10.0 represent 10% partner margin.
awsOfferSetId string no For AWS Offer Set feature. If this offer is linked to an offer set, save the OfferSet ID in this field. An offer set is a collection of offers that can be shared with a customer.
awsResaleAuthorizationId string no AWS ResaleAuthorizationId(CPPO_IN offer id) for CPPO offers of the reseller.
azureOriginalPlan AzureMarketplacePriceAndAvailabilityPrivateOfferPlan no
azurePlanSoftwareReservations array<AzureMarketplacePriceAndAvailabilitySoftwareReservation> no All software reservation billing term options from the Azure plan (e.g., monthly, 1-year, 3-year with different discounts). Only applicable for Azure Marketplace VM offers with software reservations.
azurePrivateOffer AzureMarketplacePrivateOffer no
azureProductVariant AzureProductVariant no
azureVmImageSkuIds array<string> no VM image SKU ids associated with this VM plan (gen1/gen2/arm64 variants). Azure billing reports each customer's deployment as one of these skuId values in the CMA PlanId, so revenue matching uses this list to resolve a suffixed PlanId back to the base plan's offer. Only applicable for Azure Marketplace VM default offers.
billableDimensions array<BillableDimension> no Usage based metering dimensions based on Billable Metrics, managed by Suger only.
billingCycle BillingCycle no
billingIntervalInMonths integer no Billing interval in months for the offer.
buyerAwsAccountIds array<string> no The buyers' AWS Account IDs of this offer.
buyerAzureTenants array<AzureAudience> no The buyers' Azure tenants of this offer.
buyerCountryCodes array<string> no The buyer region availability of this AWS private offer, as ISO 3166-1 alpha-2 country codes. When set, the buyer can only accept the offer from one of these countries. Empty means no region restriction. Not applicable to CPPO_OUT (resale authorization) offers.
commitAmount number no The amount that the buyer has committed to pay, before discount if applicable. It can be monthly commitment or total commitment. For frontend display or analysis purposes, not used for billing.
commitBillingIntervalInMonths integer no Deprecated: Use BillingIntervalInMonths instead.
commits array<CommitDimension> no Recurring flat fee for the offer, managed by cloud marketplaces or Suger.
currency string no The currency code of the offer. ISO 4217 format.
deliveryMethod OfferDeliveryMethod no
dimensions array<MeteringDimension> no Usage based metering dimensions defined on cloud marketplaces, managed by Cloud marketplaces only.
discountGroupApplications array<OfferDiscountGroupApplication> no Discount groups applied to this offer's metering dimensions (Dimension Tagging & Discount Groups). Suger-managed: retained across marketplace sync. The slice order is the precedence (first match wins). This is an audit/re-render/re-resolve record — the submitted prices live in Dimensions[].Rate (AWS/Azure) / GcpSkuDiscounts (GCP).
discountPercentage number no The discount percentage off the original price. For example, 20 means 20% off. 0 means no discount. It can be discount off the commitment amount or discount off the usage price.
docusignEnvelopeIds object no The Docusign envelope IDs generated for the offer. The key is the contact ID, the value is the Docusign envelope ID.
eulaMergeOrder array<integer> no The merge order of the EULA files. Only applicable when EulaType = CUSTOM. Elements are the original index of the EULA files in the index they should be transferred to, where original indexes are: AttachEulaType is index 0, EulaUrl is index 1, additionalEulaUrls is index 2 onwards.
eulaType EulaType no
eulaUrl string no
gcpCotermAlignment structs.GcpMarketplaceCotermAlignment no
gcpCustomerInfo GcpMarketplacePrivateOfferCustomerInfo no
gcpDuration integer no The duration of the offer in months. Only required when creating GCP Marketplace private offer.
gcpFeatures array<GcpMarketplaceProductFeatureValue> no Optional when creating GCP Marketplace private offer. Custom feature values to set for the private offer. Each feature name must exist in the product's feature list. The feature list is available at product.Info.GcpProduct.ListingSpec.PurchaseSpec.Features.
gcpMetrics array<GcpMarketplaceProductMeteringMetric> no Only applicable for GCP Marketplace Offers (the default or private offer)
gcpOfferDataSource structs.GcpOfferDataSource no
gcpOfferDealType GcpMarketplaceOfferDealType no
gcpPaymentRecurrence structs.GcpMarketplacePaymentRecurrence no
gcpPaymentSchedule PaymentScheduleType no
gcpPlans array<GcpMarketplaceProductPurchaseOptionSpec> no Only applicable for GCP Marketplace
gcpPrivateOffer GcpMarketplacePrivateOffer no
gcpProviderInfo GcpMarketplacePrivateOfferProviderInfo no
gcpProviderInternalNote string no Optional when creating GCP Marketplace private offer. The internal note for the seller/ISV. It is only visible to the seller/ISV.
gcpProviderPublicNote string no Optional when creating GCP Marketplace private offer. By default, it is the same as offer name. The public note for the buyer. It is visible to the buyer.
gcpResellerPrivateOfferPlan GcpMarketplaceResellerPrivateOfferPlan no
gcpSkuDiscounts array<GcpOfferSkuDiscount> no GcpSkuDiscounts contains per-metric discount percentages for GCP POSTPAY offers. Each entry specifies a discount for a specific usage metric identified by its metricId (from the plan's priceInfo.usageFees). For PREPAY offers, use PaymentInstallment.SkuDiscounts instead.
gcpSowAgreementDocument GcpAgreementDocument no
gcpUsagePlanPriceModel GcpMarketplaceUsagePlanPriceModel no
gracePeriodInDays integer no The grace period in days for the offer. This is the number of days during which invoices remain in draft status, for reviewing. This filed can be overridden at the entitlement level.
isMeteringOverageCommit boolean no Whether the usage metering will only be charged for the amount that exceeds the committed amount. e.g. the buyer has committed $100, and the usage is $120, - if true, the buyer will be charged for the usage at $20, and the commit at $100. - if false, the buyer will be charged for the usage at $120, and the commit at $100.
netTermsInDays integer no The net terms in days for the offer. This is the number of days the buyer has to pay the invoice. This filed can be overridden at the entitlement level.
oracleOffer OracleMarketplaceOffer no
paymentInstallments array<PaymentInstallment> no For flexible payment schedule, managed by cloud marketplaces or Suger.
paymentSchedule PaymentScheduleType no
pdfURL string no Not needed when creating stripe offer This URL points to the PDF version of the offer.
privateOfferUrl string no The URL of the private offer sent to buyers to accept. Only applicable for private offer.
proratedBilling boolean no Prorated billing for the offer. If true, the billing is prorated based on the start date and end date. If false, the billing is not prorated. This filed can be overridden at the entitlement level.
refundCancellationPolicy string no
resellerAttachEulaType EulaType no
resellerEulaType EulaType no
resellerEulaUrl string no
sellerNotes string no
snowflakeOffer SnowflakeMarketplaceOffer no
startTime string no Optional when creating AWS or GCP Marketplace private offer on the contract product. The future start time of the offer if it is not started on the acceptance.
taxIds array<string> no Tax ids for the offer, used to calculate the tax amount for the offer. This field can be overridden at the entitlement level.
trialConfig TrialConfig no
usageBillingIntervalInMonths integer no Deprecated: Use BillingIntervalInMonths instead.
visibility string no The public/private origin of the offer, derived from OfferType at persistence time (see DeriveOfferVisibility): PUBLIC for the marketplace default/free-trial listing offer, PRIVATE for negotiated private offers.

400 — Bad request error

Content-Type: application/json

405 — Method not allowed

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.