合作夥伴和整合者可透過 Commerce Producer API,以程式輔助方式建立及發布私密優惠。這個 API 可取代 Producer Portal 中的手動作業,讓合作夥伴直接透過內部系統或第三方平台建立、管理及發布私密優惠。
主要優點
- 擴大規模和自動化:從手動點擊入口網站改為程式輔助控制,合作夥伴就能更有效率地擴大交易量。
- 提升作業效率:整合 API 可減少交易台摩擦,並協助避免在建立方案的過程中發生人為錯誤。
- 加快上市速度:合作夥伴在預先發布期間使用 API 建構應用程式,即可在正式發布後立即上線。
目標對象
這項 API 適用於策略性 ISV 合作夥伴和 Marketplace 整合人員,可自動建立及管理私密優惠。列出或擷取服務時,API 會傳回所有服務。Service 資源的 productType 欄位會識別下列產品類型:
- 軟體即服務 (SaaS)
(
SOFTWARE_AS_A_SERVICE) - 專業服務
(
PROFESSIONAL_SERVICES) - BigQuery sharing (原為 Analytics Hub) 上的資料產品 (
ANALYTICS_HUB_LISTING)
其他產品類型的服務會回報 productType。PRODUCT_TYPE_UNSPECIFIED系統可能會在一段時間後新增其他 productType 值,因此整合項目必須處理無法辨識的值,以及現有服務的 productType 變更。
事前準備
使用 Commerce Producer API 前,請先完成下列必要條件:
啟用 Commerce Producer API:在專案中啟用
commerceproducer.googleapis.com服務:gcloud services enable commerceproducer.googleapis.com如需啟用服務的操作說明,請參閱「啟用服務」。
設定用戶端程式庫:下載必要的 SDK 和用戶端程式庫。詳情請參閱「用戶端程式庫」。
API 參考資料:如要存取 API 參考資料,請參閱 Commerce Producer API 參考資料。
標準 API 流程
如要以程式輔助方式建立及發布私密優惠,必須依特定順序呼叫 API。標準流程包含下列步驟:
- 列出服務:列出專案中的服務,找出要建立私密優惠的服務。
- 列出標準方案:列出所選服務下方的有效標準方案,找出基本標準方案資源名稱。建立私密優惠時,必須提供資源名稱。
- 請列出尚未過期的標準優惠。
- 如果同一服務等級有多個標準方案,且方案期限不同,您可以選取任一方案。兩者在功能上完全相同,因為私密優惠的效期會覆寫標準優惠的效期。
- 你只能使用有效且未過期的標準方案。
- 找出要修改的優惠:撥打
resolveAmendmentTarget電話,確認新優惠是否應修改現有優惠。 - 建立方案 (
create PrivateOffer): 呼叫 API,在DRAFT狀態中建立新的PrivateOffer資源,定義基本詳細資料、客戶billing_name帳戶和自訂定價模式。 - 附加文件 (
create PrivateOfferDocument):建立PrivateOfferDocument資源並附加至草擬的方案,指定條款或使用者授權合約。每個私人方案都必須至少包含一份文件,才能發布。私人方案最多只能包含各類型文件一份,且不得同時包含標準和自訂 EULA。如要檢查服務的每種文件類型規則,請檢查資源的ServicedocumentRequirement欄位:- 對於 SaaS 和資料產品等大多數服務,
documentRequirement會同時列出STANDARD_END_USER_LICENSE_AGREEMENT_V2(標準 EULA) 和CUSTOM_END_USER_LICENSE_AGREEMENT(自訂 EULA),因為documentRequirement只會表示每種規則。OPTIONAL你仍須附上STANDARD_END_USER_LICENSE_AGREEMENT_V2或CUSTOM_END_USER_LICENSE_AGREEMENT。 - 專業服務的
STATEMENT_OF_WORK(SOW) 為REQUIRED,CUSTOM_END_USER_LICENSE_AGREEMENT為OPTIONAL,標準使用者授權協議為NOT_ALLOWED。 STANDARD_END_USER_LICENSE_AGREEMENT_V1會由STANDARD_END_USER_LICENSE_AGREEMENT_V2取代,且一律為新優惠的NOT_ALLOWED。
- 對於 SaaS 和資料產品等大多數服務,
- 發布優惠 (
publish): 呼叫publish方法來完成優惠,並讓顧客接受。您可以使用validate_only旗標驗證方案詳細資料,不必發布方案。
重要詞彙與概念
PrivateOffer:代表向特定顧客提供的自訂優惠的核心資源。支援的狀態包括DRAFT、PUBLISHED和ACCEPTED。PrivateOfferDocument:附加至私人提案草稿的非結構化文件,例如標準使用者授權協議 (STANDARD_END_USER_LICENSE_AGREEMENT_V2)、自訂使用者授權協議 (CUSTOM_END_USER_LICENSE_AGREEMENT) 或工作說明 (STATEMENT_OF_WORK)。每個私人提案都必須包含至少一份文件,才能發布。私下優惠最多只能包含各類型文件各一份,且不得同時包含標準和自訂的 EULA。視Service資源的documentRequirement欄位而定,文件類型可能為必填、選填或不允許。請注意,STANDARD_END_USER_LICENSE_AGREEMENT_V1已遭取代,新方案不得使用。一旦方案離開DRAFT狀態,這些文件就無法變更。Service:服務名稱,這是代表產品的唯讀資源。設定這個值後,有助於找出這個產品提供的StandardOffers。列出或擷取服務會傳回所有服務,並包含下列欄位:productType:服務商業化的產品類型 (SOFTWARE_AS_A_SERVICE、PROFESSIONAL_SERVICES或ANALYTICS_HUB_LISTING),或任何其他產品類型的PRODUCT_TYPE_UNSPECIFIED。documentRequirement:服務上附加至私人方案的文件類型要求層級 (REQUIRED、OPTIONAL或NOT_ALLOWED)。如果文件類型未列於清單中,則不符合規定。 由於documentRequirement只會表示各類型規則,因此對於必須附加這兩種 EULA 類型之一的服務,STANDARD_END_USER_LICENSE_AGREEMENT_V2和CUSTOM_END_USER_LICENSE_AGREEMENT都會列為OPTIONAL。
Sku:存貨單位 (SKU),代表定價和帳單的最小單位。每筆客戶費用都與一個 SKU 相關聯,且源自於該 SKU。SkuGroup:代表一組 SKU 的資源。StandardOffer:選取Service後,即可決定要根據哪個服務層級建立私密優惠。標準優惠必須有效且未過期,才能做為基本標準優惠。
用戶端程式庫
使用 Google Cloud 用戶端程式庫與 API 互動。
- 可用 SDK:Google 提供 Ruby、Java、Python、Go、C#、PHP 和 Node.js 的自動產生程式庫。
- 下載 SDK:GitHub 上提供用戶端程式庫套件。
- 一般指南:如要進一步瞭解如何使用 Google Cloud 用戶端程式庫,請參閱各語言的 Cloud 用戶端程式庫。
- 使用者介面等效項目:如要瞭解這些作業如何對應至Google Cloud 控制台,請參閱「為客戶建立私密優惠」。
限制
這個 API 有下列限制:
- 草稿的使用者介面顯示設定:使用 API 建立或更新的方案,必須發布後才會顯示在製作人入口網站的使用者介面中,並開放編輯。同樣地,如果您在 Producer Portal 中建立方案,但使用 API 修改方案,就無法在 Producer Portal 中查看或修改草稿。
角色和權限
如要使用 Commerce Producer API,您必須在製作人專案中具備下列 Identity and Access Management (IAM) 角色:
- 讀取和寫入動作:
roles/commerceproducer.admin或roles/commercepricemanagement.privateOffersAdmin- 或者,您也可以使用基本
roles/editor角色授予存取權。
- 或者,您也可以使用基本
- 唯讀動作:
roles/commerceproducer.viewer或roles/commercepricemanagement.viewer- 或者,您也可以使用基本
roles/viewer角色授予存取權。
- 或者,您也可以使用基本
設定價格和時間表
使用下列設定,為私人方案設定定價模式和時間表。
設定定價模式
如要設定不同的定價模式,請按照下列範例所述,在 PrivateOffer 資源中設定欄位:
- 固定費用,每月收費 $100 美元,享有 8 折用量折扣:
standard_interval_price.standard_interval:MONTHLY_NOT_PRORATEDstandard_interval_price.price_model.flat_fee.flat_fee_override:100(美元)standard_interval_price.price_model.usage.default_discount_percent:20
- 僅限使用,使用折扣 20%:
standard_interval_price.standard_interval:STANDARD_INTERVAL_UNSPECIFIEDstandard_interval_price.price_model.usage.default_discount_percent:20
- 承諾使用折扣 (CUD),預設使用折扣為 30% (每季費用為 $100 美元,每季抵免額為 $100 美元;折扣適用於使用量),且 SKU1 的自訂折扣為 40%,每季承諾使用,抵免額可結轉 (上季未使用的抵免額會結轉至下季):
standard_interval_price.standard_interval:QUARTERLY_NOT_PRORATEDstandard_interval_price.price_model.commitment.commitment_amount:100(美元)standard_interval_price.price_model.commitment.discard_previous_credit_balance:false(請勿捨棄先前的餘額,以免抵免額無法延期)standard_interval_price.price_model.usage.default_discount_percent:30standard_interval_price.price_model.usage.sku_discounts[0].sku:SKU1(選取SKU1即可套用自訂折扣)standard_interval_price.price_model.usage.sku_discounts[0].discount_percent:40(指定SKU1的折扣為 40%,覆寫預設的 30% 折扣)
- 承諾使用折扣,每月承諾 $100 美元,訂閱折扣 20% (客戶每月支付 $80 美元,並獲得 $100 美元抵免額),抵免額不會延期 (上個月未使用的抵免額不會延期至下個月):
standard_interval_price.standard_interval:MONTHLY_NOT_PRORATEDstandard_interval_price.price_model.commitment.commitment_amount:100(美元)standard_interval_price.price_model.commitment.discount_percent:20standard_interval_price.price_model.commitment.discard_previous_credit_balance:true(捨棄先前的餘額,避免抵免額延期)
- 自訂分期付款:使用
custom_interval_price.installments。固定費用和 CUD 模式的規則仍適用。 - 三期付款 (示例):
- 第 1 期:承諾金額 $100 美元,折扣 20% (客戶支付 $80 美元),額外抵免額 $25 美元 (抵免額總計 $125 美元)。
custom_interval_price.installments[0].price_model.commitment.commitment_amount:100custom_interval_price.installments[0].price_model.commitment.discount_percent:20custom_interval_price.installments[0].price_model.commitment.additional_credit:25custom_interval_price.installments[0].price_model.commitment.discard_previous_credit_balance:true或false(這是第一期付款,因此目前沒有未使用的抵免額)。
- 第 2 期:承諾金額 $200 美元,折扣 10% (客戶支付 $180 美元),額外抵免額 $25 美元 (抵免額總計 $225 美元)。第一期未使用的抵免額不會轉移至第二期。
custom_interval_price.installments[1].price_model.commitment.commitment_amount:200custom_interval_price.installments[1].price_model.commitment.discount_percent:10custom_interval_price.installments[1].price_model.commitment.additional_credit:25custom_interval_price.installments[1].price_model.commitment.discard_previous_credit_balance:true(為避免餘額延期,請捨棄先前的餘額)。
- 第 3 期:承諾金額 $200 美元,10% 折扣 (客戶支付 $180 美元),額外抵免額 $0 美元 (總抵免額為 $200 美元)。第 2 期未使用的抵免額會轉移至第 3 期。
custom_interval_price.installments[2].price_model.commitment.commitment_amount:200custom_interval_price.installments[2].price_model.commitment.discount_percent:10custom_interval_price.installments[2].price_model.commitment.additional_credit:0custom_interval_price.installments[2].price_model.commitment.discard_previous_credit_balance:false(請勿捨棄先前的餘額,以允許延期)。
- 第 1 期:承諾金額 $100 美元,折扣 20% (客戶支付 $80 美元),額外抵免額 $25 美元 (抵免額總計 $125 美元)。
設定時間表
注意:在使用者介面中,含有「開始時間」的欄位 (例如分期付款開始時間) 代表一天的開始。舉例來說,如果輸入 2026-12-31,開始時間就是 2026-12-31太平洋時間凌晨 12:00。您在 API 中指定 2026-12-31 凌晨 12 點,因此 UI 和 API 中的日期會相符。
不過,含有「結束時間」的 UI 欄位 (例如優惠接受期限) 代表當天結束。舉例來說,如果將截止日期設為 2026-12-31,實際截止時間為太平洋時間 2027-01-01的凌晨 12 點。API 會將日期顯示為 2027-01-01,表示使用者介面和 API 的日期不一致。
如要設定不同的時間表,請按照下列範例所述,在 PrivateOffer 資源中設定欄位:
- 立即開始的優惠,並設定時長:
term.start_policy:IMMEDIATEterm.end_policy:AFTER_DURATIONterm.duration_months:12- 如果使用自訂分期付款,第一期付款不得設定開始時間。
- 優惠立即開始,並在特定日期結束:
term.start_policy:IMMEDIATEterm.end_policy:SCHEDULED_END_TIMEterm.scheduled_end_time:2029-01-01- 如果使用自訂分期付款,第一期付款不得設定開始時間。
- 在排定日期開始的優惠,並設定時間長度:
term.start_policy:SCHEDULED_START_TIMEterm.scheduled_start_time:2027-01-01term.end_policy:AFTER_DURATIONterm.duration_months:12- 如果使用自訂期數,第一期付款的開始時間必須與排定的開始時間一致。
- 優惠在排定日期開始,並在特定日期結束:
term.start_policy:SCHEDULED_START_TIMEterm.scheduled_start_time:2027-01-01term.end_policy:SCHEDULED_END_TIMEterm.scheduled_end_time:2029-01-01- 如果使用自訂期數,第一期付款的開始時間必須與排定的開始時間一致。
- 優惠將在修訂後的優惠結束時終止:
term.end_policy:MATCH_AMENDED_OFFERterm.duration_months:12(必須與修訂後的優惠期限相符)。
各步驟的指令
使用下列 curl 指令執行工作流程中的每個步驟。
步驟 1:列出服務
列出專案中的所有服務。使用這項指令找出列出標準方案時所需的服務名稱。
curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
"https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/services"
如要擷取單一服務的完整檢視畫面,請執行下列指令:
curl -G -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
"https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/services/SERVICE_NAME" \
--data-urlencode 'view=SERVICE_VIEW_FULL'
步驟 2:列出標準方案
建立私密優惠前,請先設定 baseStandardOffer 欄位,將私密優惠與標準優惠建立關聯。如要找出有效的標準優惠,請列出標準優惠並依 expire_time 篩選。請將 expire_time 設為「現在」,確保系統會篩除所有過期的標準優惠。
curl -G -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
"https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/services/SERVICE_NAME/standardOffers" \
--data-urlencode 'filter=expire_time > "2026-05-27T11:30:00-04:00"'
如要擷取標準方案的完整檢視畫面,請執行下列指令:
curl -G -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
"https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/services/SERVICE_NAME/standardOffers/OFFER_ID" \
--data-urlencode 'view=STANDARD_OFFER_VIEW_FULL'
步驟 3:決定要修改哪項方案
如要判斷要修訂哪個提案,請呼叫 resolveAmendmentTarget 方法。
視回覆而定,您可以在新優惠中設定「amendedPrivateOffer」或「amendedStandardOffer」欄位。
curl -G \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
"https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/privateOffers:resolveAmendmentTarget" \
--data-urlencode "targetBillingAccount=billingAccounts/CUSTOMER_BILLING_ACCOUNT" \
--data-urlencode "baseStandardOffer=projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/services/SERVICE_NAME/standardOffers/OFFER_ID"
呼叫 resolveAmendmentTarget 時,必須提供下列查詢參數:
下表說明 resolveAmendmentTarget 可能的回應,以及如何在步驟 4 中處理這些回應:
- 空白回應:請勿在建立的方案中設定
amendedPrivateOffer或amendedStandardOffer。 requiredPrivateOffer:將新方案的amendedPrivateOffer欄位設為這個值。格式:projects/PROJECT/locations/global/privateOffers/PRIVATE_OFFER_IDrequiredStandardOffer:將新方案的amendedStandardOffer欄位設為這個值。格式:projects/PROJECT/locations/global/services/SERVICE/standardOffers/OFFER_IDoptionalOffers:可修改的符合資格方案清單。格式:projects/PROJECT/locations/global/privateOffers/PRIVATE_OFFER_ID您可以執行下列任一動作:
- 將
amendedPrivateOffer和amendedStandardOffer設為空白。新優惠不會修改其他優惠。 - 將
amendedPrivateOffer設為optionalOffers清單中的其中一個資源。
- 將
4XX錯誤:您無法繼續進行步驟 4。錯誤訊息會指出原因。舉例來說,如果多個訂閱方案遭到停用,且有待處理的交易,就可能發生這種情況。你必須等待待處理的購買交易啟用或遭拒,才能繼續操作。
步驟 4:建立私密優惠
建立私密優惠草稿。下列指令會建立私密方案草稿,包含兩期付款和立即開始。將預留位置替換為你的優惠詳細資料,例如日期、折扣和標準優惠 ID。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"title": "Your title",
"acceptDeadlineTime": {
"year": 2026,
"month": 4,
"day": 24,
"timeZone": {
"id": "America/Los_Angeles"
}
},
"singleProductOffer": {
"baseStandardOffer": "projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/services/YOUR_SERVICE_NAME/standardOffers/STANDARD_OFFER_ID_FROM_EARLIER",
"customIntervalPrice": {
"installments": [
{
"priceModel": {
"commitment": {
"commitmentAmount": {
"currencyCode": "USD",
"units": 500
},
"discountPercent": {
"value": "30"
}
}
}
},
{
"startTime": {
"year": 2026,
"month": 5,
"day": 17,
"timeZone": {
"id": "America/Los_Angeles"
}
},
"priceModel": {
"commitment": {
"commitmentAmount": {
"currencyCode": "USD",
"units": 800
},
"discountPercent": {
"value": "20"
}
}
}
}
]
}
},
"customer": {
"entityTitle": "customer title",
"contact": "customer contact",
"targetBillingAccount": "billingAccounts/CUSTOMER_BILLING_ACCOUNT"
},
"partnerContact": {
"contact": "partner contact",
"email": "partner@email.com"
},
"term": {
"startPolicy": "IMMEDIATE",
"endPolicy": "AFTER_DURATION",
"durationMonths": 2,
"maxRenewalCount": 0
},
"offerDealType": "NEW"
}' \
"https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/privateOffers"
如要驗證建立作業,請列出專案中的私密優惠:
curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" "https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/privateOffers"
如要列出私人方案並依更新時間篩選,請執行下列指令。
curl -G -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
"https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/privateOffers" \
--data-urlencode 'filter=update_time > "2026-06-25T11:30:00-04:00"' \
--data-urlencode 'orderBy=update_time desc'
如要擷取特定私密優惠,請按照下列步驟操作:
curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" "https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/privateOffers/PRIVATE_OFFER_ID"
如要擷取私密優惠的完整檢視畫面 (包括額外欄位),請執行下列指令:
curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" "https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/privateOffers/PRIVATE_OFFER_ID?view=PRIVATE_OFFER_VIEW_FULL"
步驟 5:建立私密優惠文件
如要發布私密優惠,必須附加文件,例如使用者授權協議或工作說明 (SOW)。下列指令會建立並附加標準《使用者授權協議》:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"documentType": "STANDARD_END_USER_LICENSE_AGREEMENT_V2"
}' \
"https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/privateOffers/PRIVATE_OFFER_ID/documents"
步驟 6:發布私密優惠
發布私密優惠,供顧客接受。
將 PRIVATE_OFFER_ID 替換為草稿方案的 ID。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{}' \
"https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/privateOffers/PRIVATE_OFFER_ID:publish"
私密優惠設定範例
以下範例說明如何設定不同類型的私密優惠。
立即啟用、分期付款、承諾使用折扣
curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"singleProductOffer": {
"baseStandardOffer": "projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/services/YOUR_SERVICE_NAME/standardOffers/STANDARD_OFFER_ID",
"customIntervalPrice": {
"installments": [
{
# This installment is set to start immediately since it does not have a startTime
"priceModel": {
"commitment": {
"commitmentAmount": {
"currencyCode": "USD",
"units": 100
},
"discountPercent": {
# The discount % set here will apply to the subscription cost. In this case, customer will
# pay $90 and get $100 in credit for this installment.
"value": "10"
}
}
}
},
{
"startTime": {
"year": 2026,
"month": 5,
"day": 17,
"timeZone": {
"id": "America/Los_Angeles"
}
},
"priceModel": {
"commitment": {
"commitmentAmount": {
"currencyCode": "USD",
"units": 800
},
"discountPercent": {
"value": "20"
}
}
}
}
]
}
},
"term": {
"startPolicy": "IMMEDIATE",
"endPolicy": "AFTER_DURATION",
"durationMonths": 2,
"maxRenewalCount": 0
}
}' \
"https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/privateOffers"
立即開始、分期付款、用量折扣 (含指標覆寫)
curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"singleProductOffer": {
"baseStandardOffer": "projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/services/YOUR_SERVICE_NAME/standardOffers/STANDARD_OFFER_ID",
"customIntervalPrice": {
"installments": [
{
# This installment starts immediately (no startTime is set).
"priceModel": {
"usage": {
"defaultDiscountPercent": {
# This is the default discount percentage on the usage skus.
"value": "20"
},
"skuDiscounts": [
{
# Sku IDs are retrieved from the standard offer.
"sku": "projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/services/YOUR_SERVICE_NAME/skus/SKU1_ID",
"discountPercent": {
"value": "50"
}
},
{
"sku": "projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/services/YOUR_SERVICE_NAME/skus/SKU2_ID",
"discountPercent": {
"value": "30"
}
}
]
},
"commitment": {
# The customer receives usage discounts: they pay $200 for this
# installment, receive $200 in credit, and get 20% discount on
# usage skus except SKU1 and SKU2.
"commitmentAmount": {
"currencyCode": "USD",
"units": "200"
}
}
}
},
{
"startTime": {
"year": 2026,
"month": 5,
"day": 14,
"timeZone": {
"id": "America/Los_Angeles"
}
},
"priceModel": {
"usage": {
"defaultDiscountPercent": {
"value": "20"
}
},
"commitment": {
"commitmentAmount": {
"currencyCode": "USD",
"units": "10000"
}
}
}
}
]
}
},
"term": {
"startPolicy": "IMMEDIATE",
"endPolicy": "AFTER_DURATION",
"durationMonths": 2,
"maxRenewalCount": 0
}
}' \
"https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/privateOffers"
立即開始,僅限即付即用 (PAYG)
curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"singleProductOffer": {
"baseStandardOffer": "projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/services/YOUR_SERVICE_NAME/standardOffers/STANDARD_OFFER_ID",
"standardIntervalPrice": {
"priceModel": {
"usage": {
"defaultDiscountPercent": {
# This is the default discount percentage on the usage skus.
"value": "34"
}
}
}
}
},
"term": {
"startPolicy": "IMMEDIATE",
"endPolicy": "AFTER_DURATION",
"durationMonths": 3,
"maxRenewalCount": 0
}
}' \
"https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/privateOffers"
排定開始時間、每月間隔、固定費用和用量
curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"singleProductOffer": {
"baseStandardOffer": "projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/services/YOUR_SERVICE_NAME/standardOffers/STANDARD_OFFER_ID",
"standardIntervalPrice": {
"standardInterval": "MONTHLY_NOT_PRORATED",
"priceModel": {
"usage": {
"defaultDiscountPercent": {
# This is the default discount percentage on the usage skus.
"value": "20"
}
},
"flatFee": {
"flatFeeOverride": {
"currencyCode": "USD",
"units": "400"
}
}
}
},
"features": [
{
"displayName": "Feature display name",
"value": "Feature value"
}
]
},
"term": {
"startPolicy": "SCHEDULED_START_TIME",
"scheduledStartTime": {
"year": 2026,
"month": 5,
"day": 6,
"timeZone": {
"id": "America/Los_Angeles"
}
},
"endPolicy": "AFTER_DURATION",
"durationMonths": 12,
"maxRenewalCount": 1
}
}' \
"https://commerceproducer.googleapis.com/v1beta/projects/YOUR_PROJECT_ID_OR_NUMBER/locations/global/privateOffers"