Commerce Producer API menyediakan akses terprogram ke pembuatan dan publikasi penawaran pribadi untuk partner dan integrator. API ini menggantikan operasi manual di Producer Portal, sehingga partner dapat membuat, mengelola, dan memublikasikan penawaran pribadi langsung dari sistem internal atau platform pihak ketiga.
Manfaat utama
- Skala dan otomatisasi: Peralihan dari klik portal manual ke kontrol terprogram memungkinkan partner menskalakan volume transaksi mereka secara lebih efisien.
- Efisiensi operasional: Mengintegrasikan API mengurangi hambatan meja penawaran dan membantu mencegah kesalahan manual dalam proses pembuatan penawaran.
- Kecepatan peluncuran: Dengan membangun berdasarkan API selama pratinjau, partner siap untuk ditayangkan segera setelah ketersediaan umum.
Audiens target
API ini ditujukan bagi partner ISV strategis dan integrator marketplace yang ingin mengotomatiskan pembuatan dan pengelolaan penawaran khusus.
Saat Anda mencantumkan atau mengambil layanan, API akan menampilkan semua layanan Anda. Kolom
productType resource Service mengidentifikasi jenis
produk berikut:
- Software as a service (SaaS)
(
SOFTWARE_AS_A_SERVICE) - Layanan profesional
(
PROFESSIONAL_SERVICES) - Produk data di BigQuery Sharing (sebelumnya Analytics Hub) (
ANALYTICS_HUB_LISTING)
Layanan jenis produk lainnya melaporkan productType sebesar
PRODUCT_TYPE_UNSPECIFIED. Nilai productType tambahan dapat ditambahkan seiring waktu, sehingga integrasi Anda harus menangani nilai yang tidak dikenali dan perubahan pada productType layanan yang ada.
Sebelum memulai
Sebelum menggunakan Commerce Producer API, selesaikan prasyarat berikut:
Aktifkan Commerce Producer API: Aktifkan layanan
commerceproducer.googleapis.comdi project Anda:gcloud services enable commerceproducer.googleapis.comUntuk mengetahui petunjuk tentang cara mengaktifkan layanan, lihat Mengaktifkan layanan.
Siapkan library klien: Download SDK dan library klien yang diperlukan. Untuk mengetahui detailnya, lihat Library klien.
Referensi API: Untuk mengakses referensi API, lihat referensi Commerce Producer API.
Alur API standar
Pembuatan dan publikasi penawaran khusus secara terprogram memerlukan urutan panggilan API tertentu. Alur standar terdiri dari langkah-langkah berikut:
- Mencantumkan layanan: Mencantumkan layanan dalam project Anda untuk menemukan layanan yang akan digunakan untuk membuat penawaran pribadi.
- Mencantumkan penawaran standar: Mencantumkan penawaran standar aktif di layanan yang dipilih untuk menemukan nama resource penawaran standar dasar. Nama resource
diperlukan untuk membuat penawaran pribadi.
- Anda harus mencantumkan penawaran standar yang belum berakhir.
- Jika melihat beberapa penawaran standar untuk tingkat layanan yang sama dengan durasi yang berbeda, Anda dapat memilih salah satunya. Secara fungsi, keduanya identik karena durasi penawaran pribadi menggantikan durasi penawaran standar.
- Anda hanya dapat menggunakan penawaran standar yang berlaku dan belum habis masa berlakunya.
- Cari tahu penawaran mana yang akan diubah: Hubungi
resolveAmendmentTargetuntuk mengetahui apakah penawaran baru Anda harus mengubah penawaran yang ada atau tidak. - Buat penawaran
(
create PrivateOffer): Panggil API untuk membuat resourcePrivateOfferbaru dalam statusDRAFT, dengan menentukan detail dasar, akunbilling_namepelanggan, dan model harga kustom. - Lampirkan dokumen
(
create PrivateOfferDocument): Buat resourcePrivateOfferDocumentdan lampirkan ke draf penawaran untuk menentukan persyaratan atau PLPA Anda. Setiap penawaran pribadi harus menyertakan setidaknya satu dokumen sebelum dapat dipublikasikan. Penawaran pribadi dapat memiliki paling banyak satu dokumen dari setiap jenis, dan tidak dapat memiliki EULA Standar dan EULA Kustom sekaligus. Untuk memeriksa aturan dokumen per jenis layanan, periksa kolomdocumentRequirementresourceService:- Untuk sebagian besar layanan, seperti SaaS dan produk data,
documentRequirementmencantumkanSTANDARD_END_USER_LICENSE_AGREEMENT_V2(EULA Standar) danCUSTOM_END_USER_LICENSE_AGREEMENT(EULA Kustom) sebagaiOPTIONALkarenadocumentRequirementhanya menyatakan aturan per jenis. Anda tetap harus melampirkanSTANDARD_END_USER_LICENSE_AGREEMENT_V2atauCUSTOM_END_USER_LICENSE_AGREEMENT. - Untuk layanan profesional,
STATEMENT_OF_WORK(SOW) adalahREQUIRED,CUSTOM_END_USER_LICENSE_AGREEMENTadalahOPTIONAL, dan EULA Standar adalahNOT_ALLOWED. STANDARD_END_USER_LICENSE_AGREEMENT_V1digantikan olehSTANDARD_END_USER_LICENSE_AGREEMENT_V2dan selaluNOT_ALLOWEDuntuk penawaran baru.
- Untuk sebagian besar layanan, seperti SaaS dan produk data,
- Publikasikan penawaran
(
publish): Panggil metodepublishuntuk menyelesaikan penawaran dan menyediakannya agar pelanggan dapat menyetujuinya. Anda dapat menggunakan flagvalidate_onlyuntuk memvalidasi detail penawaran tanpa memublikasikannya.
Istilah dan konsep utama
PrivateOffer: Resource inti yang merepresentasikan penawaran kustom yang diberikan kepada pelanggan tertentu. Fungsi ini mendukung status sepertiDRAFT,PUBLISHED, danACCEPTED.PrivateOfferDocument: Dokumen tidak terstruktur yang dilampirkan ke draf penawaran pribadi, seperti EULA Standar (STANDARD_END_USER_LICENSE_AGREEMENT_V2), EULA Kustom (CUSTOM_END_USER_LICENSE_AGREEMENT), atau pernyataan kerja (STATEMENT_OF_WORK). Setiap penawaran pribadi harus menyertakan setidaknya satu dokumen sebelum dapat dipublikasikan. Penawaran pribadi dapat memiliki paling banyak satu dokumen dari setiap jenis, dan tidak dapat memiliki EULA Standar dan EULA Kustom secara bersamaan. Jenis dokumen yang wajib diisi, opsional, atau tidak diizinkan bergantung pada kolomdocumentRequirementdari resourceService. Perhatikan bahwaSTANDARD_END_USER_LICENSE_AGREEMENT_V1digantikan dan tidak diizinkan untuk penawaran baru. Dokumen ini tidak dapat diubah setelah penawaran keluar dari statusDRAFT.Service: Nama layanan, yang merupakan resource hanya baca yang merepresentasikan produk. Jika nilai ini ditetapkan, Anda dapat menemukanStandardOffersyang tersedia di produk ini. Mencantumkan atau mengambil layanan akan menampilkan semua layanan Anda dan menyertakan kolom berikut:productType: Jenis produk yang dikomersialkan layanan (SOFTWARE_AS_A_SERVICE,PROFESSIONAL_SERVICES, atauANALYTICS_HUB_LISTING), atauPRODUCT_TYPE_UNSPECIFIEDuntuk jenis produk lainnya.documentRequirement: Tingkat persyaratan per jenis (REQUIRED,OPTIONAL, atauNOT_ALLOWED) untuk dokumen yang dilampirkan ke penawaran pribadi di layanan. Jenis dokumen yang tidak tercantum tidak diizinkan. KarenadocumentRequirementhanya menyatakan aturan per jenis, mencantumkanSTANDARD_END_USER_LICENSE_AGREEMENT_V2danCUSTOM_END_USER_LICENSE_AGREEMENTsebagaiOPTIONALuntuk layanan yang mengharuskan Anda melampirkan salah satu dari dua jenis EULA tersebut.
Sku: Unit penyimpanan stok (SKU) yang merepresentasikan unit atomik harga dan penagihan. Setiap tagihan pelanggan dikaitkan dengan dan berasal dari tepat satu SKU.SkuGroup: Resource yang merepresentasikan grup SKU.StandardOffer: JikaServicedipilih, Anda dapat menentukan tingkat layanan yang akan digunakan untuk membuat penawaran pribadi. Penawaran standar harus berlaku dan belum berakhir agar dapat digunakan sebagai penawaran standar dasar.
Library klien
Gunakan Google Cloud Library Klien untuk berinteraksi dengan API.
- SDK yang tersedia: Google menyediakan library yang dibuat secara otomatis untuk Ruby, Java, Python, Go, C#, PHP, dan Node.js.
- Download SDK: Paket library klien tersedia di GitHub.
- Panduan umum: Untuk mengetahui informasi selengkapnya tentang penggunaan Library Klien Google Cloud , lihat Library Klien Cloud menurut bahasa.
- Persamaan UI: Untuk memahami cara pemetaan operasi ini ke konsol Google Cloud , baca Membuat penawaran pribadi untuk pelanggan.
Batasan
API memiliki batasan berikut:
- Visibilitas UI untuk draf: Penawaran yang Anda buat atau perbarui menggunakan API tidak dapat dilihat atau diedit di UI Producer Portal hingga Anda memublikasikannya. Demikian pula, jika Anda membuat penawaran di Producer Portal, tetapi mengubahnya menggunakan API, Anda tidak dapat melihat atau mengubah draf di Producer Portal.
Peran dan izin
Untuk berinteraksi dengan Commerce Producer API, Anda harus memiliki peran Identity and Access Management (IAM) berikut di project produsen:
- Untuk tindakan baca dan tulis:
roles/commerceproducer.adminatauroles/commercepricemanagement.privateOffersAdmin- Atau, peran dasar
roles/editorjuga memberikan akses.
- Atau, peran dasar
- Untuk tindakan hanya baca:
roles/commerceproducer.vieweratauroles/commercepricemanagement.viewer- Atau, peran dasar
roles/viewerjuga memberikan akses.
- Atau, peran dasar
Mengonfigurasi harga dan jadwal
Gunakan konfigurasi berikut untuk menyiapkan model harga dan jadwal waktu untuk penawaran pribadi Anda.
Mengonfigurasi model harga
Untuk mengonfigurasi model harga yang berbeda, tetapkan kolom di resource PrivateOffer
seperti yang dijelaskan dalam contoh berikut:
- Biaya tetap, tagihan bulanan $100, dengan diskon penggunaan 20%:
standard_interval_price.standard_interval:MONTHLY_NOT_PRORATEDstandard_interval_price.price_model.flat_fee.flat_fee_override:100(USD)standard_interval_price.price_model.usage.default_discount_percent:20
- Khusus penggunaan, diskon penggunaan 20%:
standard_interval_price.standard_interval:STANDARD_INTERVAL_UNSPECIFIEDstandard_interval_price.price_model.usage.default_discount_percent:20
- Diskon abonemen (CUD) dengan diskon penggunaan default 30% (biaya per kuartal adalah $100 dan kredit per kuartal adalah $100; diskon berlaku untuk penggunaan) dan
diskon kustom 40% untuk SKU1, komitmen per kuartal, dengan perpanjangan kredit
(kredit yang tidak terpakai dari kuartal sebelumnya akan diperpanjang ke kuartal berikutnya):
standard_interval_price.standard_interval:QUARTERLY_NOT_PRORATEDstandard_interval_price.price_model.commitment.commitment_amount:100(USD)standard_interval_price.price_model.commitment.discard_previous_credit_balance:false(Jangan hapus saldo sebelumnya untuk mengizinkan perpanjangan kredit)standard_interval_price.price_model.usage.default_discount_percent:30standard_interval_price.price_model.usage.sku_discounts[0].sku:SKU1(MemilihSKU1untuk menerapkan diskon kustom)standard_interval_price.price_model.usage.sku_discounts[0].discount_percent:40(Menentukan diskon 40% untukSKU1guna menggantikan diskon 30% default)
- CUD dengan komitmen bulanan $100, diskon langganan 20% (pelanggan
membayar biaya bulanan $80 dan menerima kredit bulanan $100), tanpa perpanjangan
kredit (kredit yang tidak digunakan dari bulan sebelumnya tidak diperpanjang ke
bulan berikutnya):
standard_interval_price.standard_interval:MONTHLY_NOT_PRORATEDstandard_interval_price.price_model.commitment.commitment_amount:100(USD)standard_interval_price.price_model.commitment.discount_percent:20standard_interval_price.price_model.commitment.discard_previous_credit_balance:true(Hapus saldo sebelumnya untuk mencegah saldo kredit terakumulasi)
- Cicilan kustom: Gunakan
custom_interval_price.installments. Aturan untuk model biaya tetap dan CUD tetap berlaku. - Tiga cicilan (Contoh):
- Cicilan 1: Komitmen $100, diskon 20% (pelanggan membayar $80), kredit tambahan $25 (untuk total kredit $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:trueataufalse(Kredit yang tidak digunakan belum ada karena ini adalah cicilan pertama).
- Cicilan 2: Komitmen $200, diskon 10% (pelanggan membayar $180), kredit tambahan $25 (untuk total kredit $225). Kredit yang tidak digunakan dari cicilan 1 tidak akan dialihkan ke cicilan 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(Hapus saldo sebelumnya untuk mencegah perpanjangan).
- Cicilan 3: Komitmen $200, diskon 10% (pelanggan membayar $180), $0
kredit tambahan (untuk total kredit $200). Kredit yang tidak digunakan dari
cicilan 2 akan diakumulasikan ke cicilan 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(Jangan hapus saldo sebelumnya untuk mengizinkan pengalihan).
- Cicilan 1: Komitmen $100, diskon 20% (pelanggan membayar $80), kredit tambahan $25 (untuk total kredit $125).
Mengonfigurasi jadwal waktu
Catatan: Di UI, kolom yang berisi "waktu mulai", seperti waktu mulai cicilan, menunjukkan awal hari. Misalnya, jika
Anda memasukkan 2026-12-31, waktu mulai adalah pukul 00.00 Waktu Pasifik pada
2026-12-31. Di API, Anda menentukan pukul 00.00 pada 2026-12-31, sehingga
tanggal di UI dan API cocok.
Namun, kolom UI yang berisi "waktu berakhir", seperti batas waktu penerimaan penawaran, menunjukkan akhir hari. Misalnya, jika Anda menetapkan batas waktu ke 2026-12-31, batas waktu efektifnya adalah 12.00 AM Waktu Pasifik pada 2027-01-01. API menampilkan tanggal sebagai 2027-01-01, yang berarti tanggal UI dan API tidak cocok.
Untuk mengonfigurasi jadwal waktu yang berbeda, tetapkan kolom di resource PrivateOffer
seperti yang dijelaskan dalam contoh berikut:
- Penawaran dimulai segera, dengan durasi:
term.start_policy:IMMEDIATEterm.end_policy:AFTER_DURATIONterm.duration_months:12- Jika Anda menggunakan cicilan kustom, cicilan pertama tidak boleh menetapkan waktu mulai.
- Penawaran dimulai segera, berakhir pada tanggal tertentu:
term.start_policy:IMMEDIATEterm.end_policy:SCHEDULED_END_TIMEterm.scheduled_end_time:2029-01-01- Jika Anda menggunakan cicilan kustom, cicilan pertama tidak boleh menetapkan waktu mulai.
- Penawaran dimulai pada tanggal yang dijadwalkan, dengan durasi:
term.start_policy:SCHEDULED_START_TIMEterm.scheduled_start_time:2027-01-01term.end_policy:AFTER_DURATIONterm.duration_months:12- Jika Anda menggunakan cicilan kustom, waktu mulai cicilan pertama harus sama dengan waktu mulai yang dijadwalkan ini.
- Penawaran dimulai pada tanggal yang dijadwalkan, berakhir pada tanggal tertentu:
term.start_policy:SCHEDULED_START_TIMEterm.scheduled_start_time:2027-01-01term.end_policy:SCHEDULED_END_TIMEterm.scheduled_end_time:2029-01-01- Jika Anda menggunakan cicilan kustom, waktu mulai cicilan pertama harus sama dengan waktu mulai yang dijadwalkan ini.
- Penawaran berakhir saat penawaran yang diubah berakhir:
term.end_policy:MATCH_AMENDED_OFFERterm.duration_months:12(Harus cocok dengan durasi penawaran yang diubah).
Perintah untuk setiap langkah
Gunakan perintah curl berikut untuk melakukan setiap langkah dalam alur kerja.
Langkah 1: Mencantumkan layanan
Mencantumkan semua layanan di project Anda. Gunakan perintah ini untuk menemukan nama layanan yang diperlukan untuk mencantumkan penawaran standar.
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"
Untuk mengambil tampilan lengkap satu layanan, jalankan perintah berikut:
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'
Langkah 2: Cantumkan penawaran standar
Sebelum membuat penawaran pribadi, Anda harus mengaitkannya dengan penawaran standar
dengan menetapkan kolom baseStandardOffer. Untuk menemukan penawaran standar yang aktif, cantumkan penawaran standar dan filter menurut expire_time. Anda harus menetapkan expire_time ke
now, untuk memastikan semua penawaran standar yang telah berakhir difilter.
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"'
Untuk mengambil tampilan lengkap penawaran standar, jalankan perintah berikut:
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'
Langkah 3: Tentukan penawaran yang akan diubah
Untuk menentukan penawaran mana yang akan diubah, panggil metode resolveAmendmentTarget.
Bergantung pada responsnya, Anda dapat menetapkan kolom amendedPrivateOffer atau
amendedStandardOffer pada penawaran baru.
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"
Saat memanggil resolveAmendmentTarget, Anda harus memberikan parameter kueri berikut:
targetBillingAccount: Akun Penagihan Cloud pelanggan yang ingin Anda buatkan penawaran pribadinya di Langkah 4.baseStandardOffer: Penawaran standar dasar yang Anda pilih di Langkah 2.
Daftar berikut menjelaskan kemungkinan respons dari
resolveAmendmentTarget dan cara menanganinya di
Langkah 4:
- Respons kosong: Jangan tetapkan
amendedPrivateOfferatauamendedStandardOfferdalam penawaran yang Anda buat. requiredPrivateOffer: Tetapkan kolomamendedPrivateOfferpenawaran baru ke nilai ini. Format:projects/PROJECT/locations/global/privateOffers/PRIVATE_OFFER_IDrequiredStandardOffer: Tetapkan kolomamendedStandardOfferpenawaran baru ke nilai ini. Format:projects/PROJECT/locations/global/services/SERVICE/standardOffers/OFFER_IDoptionalOffers: Daftar penawaran yang memenuhi syarat yang dapat Anda ubah. Format:projects/PROJECT/locations/global/privateOffers/PRIVATE_OFFER_IDAnda dapat melakukan salah satu tindakan berikut:
- Tetapkan
amendedPrivateOfferdanamendedStandardOfferke kosong. Penawaran baru tidak mengubah penawaran lain. - Tetapkan
amendedPrivateOfferke salah satu sumber dari daftaroptionalOffers.
- Tetapkan
Error
4XX: Anda tidak dapat melanjutkan ke Langkah 4. Pesan error menunjukkan alasannya. Misalnya, salah satu alasan hal ini dapat terjadi adalah saat beberapa langganan dinonaktifkan dan pembelian tertunda. Anda harus menunggu hingga pembelian tertunda diaktifkan atau ditolak sebelum melanjutkan.
Langkah 4: Buat penawaran pribadi
Buat draf penawaran pribadi. Perintah berikut akan membuat draf penawaran pribadi dengan dua cicilan dan segera dimulai. Ganti placeholder dengan detail penawaran Anda, seperti tanggal, diskon, dan ID penawaran standar.
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"
Untuk memverifikasi pembuatan, cantumkan penawaran pribadi dalam project Anda:
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"
Untuk mencantumkan penawaran pribadi dan memfilter menurut waktu pembaruan, jalankan perintah berikut.
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'
Untuk mengambil penawaran pribadi tertentu:
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"
Untuk mengambil tampilan lengkap penawaran pribadi, yang mencakup kolom tambahan, jalankan perintah berikut:
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"
Langkah 5: Buat dokumen penawaran pribadi
Anda harus melampirkan dokumen, seperti EULA atau pernyataan pekerjaan (SOW), untuk memublikasikan penawaran pribadi. Perintah berikut akan membuat dan melampirkan PLPA Standar:
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"
Langkah 6: Publikasikan penawaran pribadi
Publikasikan penawaran pribadi agar pelanggan dapat menerimanya.
Ganti PRIVATE_OFFER_ID dengan ID penawaran draf Anda.
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"
Contoh konfigurasi penawaran pribadi
Contoh berikut menunjukkan cara mengonfigurasi berbagai jenis penawaran pribadi.
Mulai segera, beberapa cicilan, diskon komitmen
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"
Mulai segera, beberapa cicilan, diskon penggunaan dengan penggantian metrik
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"
Mulai segera, hanya bayar sesuai penggunaan (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"
Mulai terjadwal, interval bulanan, biaya tetap dan penggunaan
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"