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资源并将其附加到草稿优惠中,以指定您的条款或最终用户许可协议 (EULA)。私享优惠必须至少包含一份文档:标准最终用户许可协议或自定义最终用户许可协议。如果服务是专业服务,您还必须提供工作说明书 (SOW)。 - 发布优惠 (
publish):调用publish方法以最终确定优惠,并使其可供客户接受。您可以使用validate_only标志来验证优惠详细信息,而无需发布。
关键术语和概念
PrivateOffer:表示向特定客户提供的自定义优惠的核心资源。它支持DRAFT、PUBLISHED和ACCEPTED等状态。PrivateOfferDocument:附加到草稿私密优惠的非结构化文档,例如标准最终用户许可协议 (EULA)、自定义最终用户许可协议或工作声明 (SOW)。优惠进入DRAFT状态后,这些文档便无法更改。Service:服务的名称,这是一个表示产品的只读资源。设置此值后,有助于您查找相应产品下可用的StandardOffers。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 美元,搭配 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 美元的 CUD,订阅折扣为 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:00,因此界面和 API 中的日期一致。
不过,包含“结束时间”的界面字段(例如优惠接受截止时间)表示一天的结束时间。例如,如果您将截止日期设置为 2026-12-31,则实际截止日期为 2027-01-01 太平洋时间凌晨 12:00。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 设置为 now,以确保过滤掉所有已过期的标准优惠。
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 步:创建非公开优惠文档
您必须附加文档(例如最终用户许可协议 [EULA] 或工作声明 [SOW])才能发布非公开优惠。以下命令会创建并附加标准 EULA:
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"