使用 API 建立及管理私密優惠

合作夥伴和整合者可透過 Commerce Producer API,以程式輔助方式建立及發布私密優惠。這項 API 可取代 Producer Portal 中的手動作業,讓合作夥伴直接透過內部系統或第三方平台建立、管理及發布私密優惠。

主要優點

  • 規模和自動化:從手動點擊入口網站改為程式輔助控制,可讓合作夥伴更有效率地擴大交易量。
  • 作業效率:整合 API 可減少交易台的摩擦,並協助避免在建立方案的過程中發生人為錯誤。
  • 上市速度:合作夥伴在預先發布期間使用 API 建構產品,即可在正式發布後立即上線。

目標對象

這個 API 適用於策略性 ISV 合作夥伴和 Marketplace 整合人員,可自動建立及管理私人方案。API 支援 Google Cloud 控制台支援的所有標準產品類型。

事前準備

使用 Commerce Producer API 前,請先完成下列必要條件:

  1. 啟用 Commerce Producer API:在專案中啟用 commerceproducer.googleapis.com 服務:

    gcloud services enable commerceproducer.googleapis.com
    

    如需啟用服務的操作說明,請參閱「啟用服務」。

  2. 設定用戶端程式庫:下載必要的 SDK 和用戶端程式庫。詳情請參閱「用戶端程式庫」。

  3. API 參考資料:如要存取 API 參考資料,請參閱 Commerce Producer API 參考資料

標準 API 流程

如要以程式輔助方式建立及發布私密優惠,必須依特定順序呼叫 API。標準流程包含下列步驟:

  1. 列出服務:列出專案中的服務,找出要建立私有方案的服務。
  2. 列出標準方案:列出所選服務下的有效標準方案,找出基本標準方案資源名稱。建立私密優惠時,必須提供資源名稱。
    • 請列出尚未過期的標準優惠。
    • 如果同一服務等級有多個標準方案,且方案期限不同,你可以選取任一方案。兩者在功能上完全相同,因為私密優惠的效期會覆寫標準優惠的效期。
    • 你只能使用有效且未過期的標準優惠。
  3. 找出要修改的優惠:撥打電話 resolveAmendmentTarget ,確認新優惠是否應修改現有優惠。
  4. 建立方案 (create PrivateOffer): 呼叫 API,在 DRAFT 狀態中建立新的 PrivateOffer 資源, 定義基本詳細資料、客戶 billing_name 帳戶和自訂定價模式。
  5. 附加文件 (create PrivateOfferDocument):建立 PrivateOfferDocument 資源並附加至草稿方案,指定條款或使用者授權協議。私人方案必須至少包含一份文件:標準使用者授權協議或自訂使用者授權協議。如果服務為專業服務,您也必須附上工作說明 (SOW)。
  6. 發布優惠 (publish): 呼叫 publish 方法來完成優惠,並讓顧客接受。您可以使用 validate_only 標記驗證方案詳細資料,不必發布方案。

重要詞彙與概念

  • PrivateOffer:代表向特定顧客提供的自訂優惠的核心資源。支援 DRAFTPUBLISHEDACCEPTED 等狀態。
  • PrivateOfferDocument:附加至草擬私人方案的非結構化文件,例如標準使用者授權協議、自訂使用者授權協議或工作說明書 (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 用戶端程式庫
  • 對應的 UI 操作:如要瞭解這些作業如何對應至Google Cloud 控制台,請參閱「為客戶建立私密優惠」。

限制

這個 API 有下列限制:

  • 草稿的 UI 可見度:使用 API 建立或更新的方案必須發布,才能在製作人入口網站 UI 中查看或編輯。同樣地,如果您在 Producer Portal 中建立優惠,但使用 API 修改優惠,就無法在 Producer Portal 中查看或修改草稿。

角色和權限

如要使用 Commerce Producer API,您必須在製作人專案中具備下列 Identity and Access Management (IAM) 角色:

  • 讀取和寫入動作:roles/commerceproducer.adminroles/commercepricemanagement.privateOffersAdmin
    • 或者,您也可以使用基本 roles/editor 角色授予存取權。
  • 唯讀動作:roles/commerceproducer.viewerroles/commercepricemanagement.viewer
    • 或者,您也可以使用基本 roles/viewer 角色授予存取權。

設定價格和時間表

使用下列設定,為私人方案設定定價模式和時間表。

設定定價模式

如要設定不同的計價模式,請按照下列範例所述,在 PrivateOffer 資源中設定欄位:

  • 固定費用,每月收費 $100 美元,並享有 20% 的用量折扣
    • standard_interval_price.standard_intervalMONTHLY_NOT_PRORATED
    • standard_interval_price.price_model.flat_fee.flat_fee_override100 (美元)
    • standard_interval_price.price_model.usage.default_discount_percent20
  • 僅限使用,使用折扣 20%
    • standard_interval_price.standard_intervalSTANDARD_INTERVAL_UNSPECIFIED
    • standard_interval_price.price_model.usage.default_discount_percent20
  • 承諾使用折扣 (CUD),預設用量折扣為 30% (每季費用為 $100 美元,每季抵免額為 $100 美元;折扣適用於用量),且 SKU1 的自訂折扣為 40%,每季承諾用量,抵免額可結轉 (上季未使用的抵免額會結轉至下季)
    • standard_interval_price.standard_intervalQUARTERLY_NOT_PRORATED
    • standard_interval_price .price_model.commitment.commitment_amount100 (美元)
    • standard_interval_price .price_model.commitment.discard_previous_credit_balancefalse (請勿捨棄先前的餘額,以免抵免額無法延用)
    • standard_interval_price.price_model.usage.default_discount_percent30
    • standard_interval_price .price_model.usage.sku_discounts[0].skuSKU1 (選取 SKU1 即可套用自訂折扣)
    • standard_interval_price .price_model.usage.sku_discounts[0].discount_percent40 (指定 SKU1 的折扣為 40%,以覆寫預設的 30% 折扣)
  • 承諾使用折扣,每月承諾 $100 美元,訂閱折扣 20% (客戶每月支付 $80 美元,並獲得 $100 美元的每月抵免額),抵免額不會延期 (上個月未使用的抵免額不會延期至下個月)
    • standard_interval_price.standard_intervalMONTHLY_NOT_PRORATED
    • standard_interval_price .price_model.commitment.commitment_amount100 (美元)
    • standard_interval_price.price_model.commitment.discount_percent20
    • standard_interval_price .price_model.commitment.discard_previous_credit_balancetrue (捨棄先前的餘額,避免抵免額延期)
  • 自訂分期付款:使用 custom_interval_price.installments。固定費用和 CUD 模式的規則仍適用。
  • 三期付款 (示例)
    • 第 1 期:承諾金額 $100 美元,折扣 20% (客戶支付 $80 美元),額外抵免額 $25 美元 (總抵免額 $125 美元)。
      • custom_interval_price .installments[0].price_model.commitment.commitment_amount100
      • custom_interval_price .installments[0].price_model.commitment.discount_percent20
      • custom_interval_price .installments[0].price_model.commitment.additional_credit25
      • custom_interval_price .installments[0].price_model.commitment .discard_previous_credit_balancetruefalse (這是第一期付款,因此目前沒有未使用的抵免額)。
    • 第 2 期:承諾金額 $200 美元,折扣 10% (客戶支付 $180 美元),額外抵免額 $25 美元 (總抵免額 $225 美元)。第 1 期未使用的抵免額不會累計至第 2 期。
      • custom_interval_price .installments[1].price_model.commitment.commitment_amount200
      • custom_interval_price .installments[1].price_model.commitment.discount_percent10
      • custom_interval_price .installments[1].price_model.commitment.additional_credit25
      • custom_interval_price .installments[1].price_model.commitment .discard_previous_credit_balancetrue (如要避免餘額轉移,請捨棄先前的餘額)。
    • 第 3 期:承諾金額 $200 美元,折扣 10% (客戶支付 $180 美元),額外抵免額 $0 美元 (總抵免額為 $200 美元)。第 2 期未使用的抵免額會轉移至第 3 期。
      • custom_interval_price .installments[2].price_model.commitment.commitment_amount200
      • custom_interval_price .installments[2].price_model.commitment.discount_percent10
      • custom_interval_price .installments[2].price_model.commitment.additional_credit0
      • custom_interval_price .installments[2].price_model.commitment .discard_previous_credit_balancefalse (請勿捨棄先前的餘額,以允許轉移)。

設定時間表

注意:在使用者介面中,含有「開始時間」的欄位 (例如分期付款開始時間) 代表一天的開始。舉例來說,如果您輸入 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_policyIMMEDIATE
    • term.end_policyAFTER_DURATION
    • term.duration_months12
    • 如果使用自訂分期付款,第一期付款不得設定開始時間。
  • 優惠立即生效,並於特定日期結束
    • term.start_policyIMMEDIATE
    • term.end_policySCHEDULED_END_TIME
    • term.scheduled_end_time2029-01-01
    • 如果使用自訂分期付款,第一期付款不得設定開始時間。
  • 優惠在排定的日期開始,並持續一段時間
    • term.start_policySCHEDULED_START_TIME
    • term.scheduled_start_time2027-01-01
    • term.end_policyAFTER_DURATION
    • term.duration_months12
    • 如果使用自訂期數,第一期付款的開始時間必須與排定的開始時間一致。
  • 優惠在排定日期開始,並在特定日期結束
    • term.start_policySCHEDULED_START_TIME
    • term.scheduled_start_time2027-01-01
    • term.end_policySCHEDULED_END_TIME
    • term.scheduled_end_time2029-01-01
    • 如果使用自訂期數,第一期付款的開始時間必須與排定的開始時間一致。
  • 優惠將在修訂後的優惠結束時終止
    • term.end_policyMATCH_AMENDED_OFFER
    • term.duration_months12 (必須與修訂後的優惠期限一致)。

各步驟的指令

使用下列 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 時,必須提供下列查詢參數:

  • targetBillingAccount:您要在步驟 4 中建立私密優惠的客戶 Cloud Billing 帳戶。
  • baseStandardOffer:您在步驟 2 中選取的基礎標準方案。

下表說明 resolveAmendmentTarget 可能的回應,以及如何在步驟 4 中處理這些回應:

  • 空白回應:在建立的方案中,請勿設定 amendedPrivateOfferamendedStandardOffer
  • requiredPrivateOffer:將新方案的 amendedPrivateOffer 欄位設為這個值。格式: projects/PROJECT/locations/global/privateOffers/PRIVATE_OFFER_ID
  • requiredStandardOffer:將新方案的 amendedStandardOffer 欄位設為這個值。格式: projects/PROJECT/locations/global/services/SERVICE/standardOffers/OFFER_ID
  • optionalOffers:可修改的符合資格方案清單。格式: projects/PROJECT/locations/global/privateOffers/PRIVATE_OFFER_ID

    您可以執行下列任一動作:

    • amendedPrivateOfferamendedStandardOffer 設為空白。 新優惠不會修改其他優惠。
    • 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"