合作夥伴和整合者可透過 Commerce Producer API,以程式輔助方式建立及發布私密優惠。這項 API 可取代 Producer Portal 中的手動作業,讓合作夥伴直接透過內部系統或第三方平台建立、管理及發布私密優惠。
主要優點
- 規模和自動化:從手動點擊入口網站改為程式輔助控制,可讓合作夥伴更有效率地擴大交易量。
- 作業效率:整合 API 可減少交易台的摩擦,並協助避免在建立方案的過程中發生人為錯誤。
- 上市速度:合作夥伴在預先發布期間使用 API 建構產品,即可在正式發布後立即上線。
目標對象
這個 API 適用於策略性 ISV 合作夥伴和 Marketplace 整合人員,可自動建立及管理私人方案。API 支援 Google Cloud 控制台支援的所有標準產品類型。
事前準備
使用 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資源並附加至草稿方案,指定條款或使用者授權協議。私人方案必須至少包含一份文件:標準使用者授權協議或自訂使用者授權協議。如果服務為專業服務,您也必須附上工作說明 (SOW)。 - 發布優惠 (
publish): 呼叫publish方法來完成優惠,並讓顧客接受。您可以使用validate_only標記驗證方案詳細資料,不必發布方案。
重要詞彙與概念
PrivateOffer:代表向特定顧客提供的自訂優惠的核心資源。支援DRAFT、PUBLISHED和ACCEPTED等狀態。PrivateOfferDocument:附加至草擬私人方案的非結構化文件,例如標準使用者授權協議、自訂使用者授權協議或工作說明書 (SOW)。一旦方案離開DRAFT狀態,這些文件就無法變更。Service:服務名稱,這是代表產品的唯讀資源。設定這個值後,有助於找出這個產品提供的內容。StandardOffersSku:代表定價和帳單原子單位的存貨單位 (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 用戶端程式庫。
- 對應的 UI 操作:如要瞭解這些作業如何對應至Google Cloud 控制台,請參閱「為客戶建立私密優惠」。
限制
這個 API 有下列限制:
- 草稿的 UI 可見度:使用 API 建立或更新的方案必須發布,才能在製作人入口網站 UI 中查看或編輯。同樣地,如果您在 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 美元,並享有 20% 的用量折扣:
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 美元)。第 1 期未使用的抵免額不會累計至第 2 期。
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 點,因此使用者介面和 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"