This page describes how to manage customer entitlements for Google Workspace and Google Chrome products.
Pre-requisite
Before you continue, determine whether your reseller account has a single Google Workspace billing account or multiple Google Workspace billing accounts. To learn more about this topic, read Multiple Google Workspace Billing Account Starter Guide .
Create entitlement
Before you begin
You need
a Customer
setup before you can proceed.
To create entitlement, follow these steps:
With the Customer name, call
listPurchasableSkus
to retrieve a list ofPurchasableSkus
ListPurchasableSkusRequest { "customer": "accounts/123/customers/abc", "createEntitlementPurchase": { "product": "products/-" } } ListPurchasableSkusResponse { "purchasableSkus": [ { "sku": { "name": "products/product_id/skus/sku_id1", "product": { "name": "products/product_id", } } }, { "sku": { "name": "products/product_id/skus/sku_id2", "product": { "name": "products/product_id", }, } } ] }
With the selected PurchasableSku, use the
queryEligibleBillingAccounts
method to find a set of Google WorkspaceBillingAccount
that can be used to pay for the entitlement.- If you want to pay in a specific currency, select a BillingAccount with that currency.
QueryEligibleBillingAccountsRequest { "customer": "accounts/123/customers/abc", "skus": ["products/product_id/skus/sku_id1"] } QueryEligibleBillingAccountsResponse { "skuPurchaseGroups": [ { "skus": [ "products/product_id/skus/sku_id1" ], "billingAccountPurchaseInfos": [ { "billingAccount": { "name": "accounts/123/billingAccounts/billing_account_id1", "displayName": "Google_Workspace_USD_US_1", "currencyCode": "USD", "regionCode": "US" } }, { "billingAccount": { "name": "accounts/123/billingAccounts/billing_account_id2", "displayName": "Google_Workspace_CAD_CA_1", "currencyCode": "CAD", "regionCode": "CA" } } ] } ] }
With the selected PurchasableSku and BillingAccount, use the
listPurchasableOffers
method to find the availablePurchasableOffer
ListPurchasableOffersRequest { "customer": "accounts/123/customers/abc", "createEntitlementPurchase": { "sku": "products/product_id/skus/sku_id1", "billingAccount": "accounts/123/billingAccounts/billing_account_id2" } } ListPurchasableOffersResponse { "purchasableOffers": [ { "offer": { "name": "accounts/123/offers/offer_id1", }, "sku": { "name": "products/product_id/skus/sku_id1", }, "plan": { "paymentPlan": "FLEXIBLE", "paymentCycle": { "duration": 1, "periodType": "MONTH" } }, } ], }
At this point you should have the BillingAccount that will pay for the
Entitlement
and the PurchasableOffer. Begin to create the entitlement by using thecreate
method.- Create an Entitlement and populate the offer, billingAccount and any other required parameters.
CreateEntitlementRequest { "parent": "accounts/123/customers/abc", "entitlement": { "offer": "accounts/123/offers/offer_id1", "maxUnits": 100, "billingAccount": "accounts/123/billingAccounts/billing_account_id2" } } CreateEntitlementResponse { "name": "operations/operation_id1" }
Change payment plan on Google Workspace entitlements
Before you begin
Google Workspace entitlements with a Free or Trial
payment plan
do not have a
Google Workspace billing account. In order to change the payment plan for an
Entitlement to a paid payment plan, there are a couple of additional steps to
select a Google Workspace billing account.
To change payment plan on Google Workspace entitlements, follow these steps:
The first two steps are only required if the existing Entitlement has a Free or Trial payment plan.
With the Offer, use the
lookupOffer
method to findSku
information on the Offer.LookupOfferRequest { "entitlement": "accounts/123/customers/abc/entitlements/entitlement_id1" } LookupOffer respones { "name": "accounts/123/offers/offer_id1", "sku": { "name": "products/product_id/skus/sku_id1", } }
With the Customer and Sku, use the queryEligibleBillingAccounts method to find a set of BillingAccount that can be used to pay for this Entitlement. If you want to pay in a specific currency, select a BillingAccount with that currency.
QueryEligibleBillingAccountsRequest { "customer": "accounts/123/customers/abc", "skus": ["products/product_id/skus/sku_id1"] } QueryEligibleBillingAccountsResponse { "skuPurchaseGroups": [ { "skus": [ "products/product_id/skus/sku_id1" ], "billingAccountPurchaseInfos": [ { "billingAccount": { "name": "accounts/123/billingAccounts/billing_account_id1", "displayName": "Google_Workspace_USD_US_1", "currencyCode": "USD", "regionCode": "US" } }, { "billingAccount": { "name": "accounts/123/billingAccounts/billing_account_id2", "displayName": "Google_Workspace_CAD_CA_1", "currencyCode": "CAD", "regionCode": "CA" } } ] } ] } ```
With the Entitlement and BillingAccount, use the
listPurchasableOffers
method to find any PurchasableOffer. The BillingAccount is not needed if the existing entitlement already has a paid plan, in this case, the existing BillingAccount will be used. To change the payment plan, the purchase_option field needs to bechangeOfferPurchase
ListPurchasableOffersRequest { "customer": "accounts/123/customers/abc", "changeOfferPurchase": { "entitlement": "accounts/123/customers/abc/entitlements/entitlement_id1", "billingAccount": "accounts/123/billingAccounts/billing_account_id2" } } ListPurchasableOffersResponse { "purchasableOffers": [ { "offer": { "name": "accounts/123/offers/offer_id1", }, "sku": { "name": "products/product_id/skus/sku_id1", }, "plan": { "paymentPlan": "FLEXIBLE", "paymentCycle": { "duration": 1, "periodType": "MONTH" } }, } ], }
At this point you should have the Entitlement, Offer and the BillingAccount. Begin to change the payment plan by using the
changeOffer
method.ChangeOfferRequest { "name": "accounts/abc/customers/123/entitlements/entitlement_id1", "offer": "accounts/abc/offers/offer_id1", "billing_account": "accounts/abc/billingAccounts/billing_account_id2", "parameters": [{ "name": "max_units", "value": { "int64Value": "100" } }] } ChangeOfferResponse { "name": "operations/operation_id1" }
Upgrade or downgrade Google Workspace entitlements
To upgrade or downgrade Google Workspace entitlements, follow these steps:
With the Entitlement, call the
listPurchasableSkus
method to retrieve a list of PurchasableSkus that can be used for upgrade or downgrade.ListPurchasableSkusRequest { "customer": "accounts/123/customers/abc", "changeOfferPurchase": { "entitlement": "accounts/123/customers/abc/entitlements/entitlement_id1", "changeType": "UPGRADE" } } ListPurchasableSkusResponse { "purchasableSkus": [ { "sku": { "name": "products/product_id/skus/sku_id1", "product": { "name": "products/product_id", } } }, { "sku": { "name": "products/product_id/skus/sku_id2", "product": { "name": "products/product_id", }, } } ] }
With the PurchasableSku, use the
queryEligibleBillingAccounts
method to find a set of BillingAccounts that can be used to pay for the Entitlement.- If you want to pay in a specific currency, select a BillingAccount with that currency.
QueryEligibleBillingAccountsRequest { "customer": "accounts/123/customers/abc", "skus": ["products/product_id/skus/sku_id1"] } QueryEligibleBillingAccountsResponse { "skuPurchaseGroups": [ { "skus": [ "products/product_id/skus/sku_id1" ], "billingAccountPurchaseInfos": [ { "billingAccount": { "name": "accounts/123/billingAccounts/billing_account_id1", "displayName": "Google_Workspace_USD_US_1", "currencyCode": "USD", "regionCode": "US" } }, { "billingAccount": { "name": "accounts/123/billingAccounts/billing_account_id2", "displayName": "Google_Workspace_CAD_CA_1", "currencyCode": "CAD", "regionCode": "CA" } } ] } ] } ```
With the Entitlement and BillingAccount, use the
listPurchasableOffers
method to find any PurchasableOffer.ListPurchasableOffersRequest { "customer": "accounts/123/customers/abc", "changeOfferPurchase": { "entitlement": "accounts/123/customers/abc/entitlements/entitlement_id1", "billingAccount": "accounts/123/billingAccounts/billing_account_id2" } } ListPurchasableOffersResponse { "purchasableOffers": [ { "offer": { "name": "accounts/123/offers/offer_id1", }, "sku": { "name": "products/product_id/skus/sku_id1", }, "plan": { "paymentPlan": "FLEXIBLE", "paymentCycle": { "duration": 1, "periodType": "MONTH" } }, } ], } ```
At this point you should have the Entitlement, PurchasableOffer and the BillingAccount. Begin to upgrade or downgrade by using the
changeOffer
method.- Create an Entitlement object and populate the name, offer, billingAccount and any required parameters.
ChangeOfferRequest { "name": "accounts/abc/customers/123/entitlements/entitlement_id1", "offer": "accounts/abc/offers/offer_id1", "billing_account": "accounts/abc/billingAccounts/billing_account_id2", "parameters": [{ "name": "max_units", "value": { "int64Value": "100" } }] } ChangeOfferResponse { "name": "operations/operation_id1" } ```
Transfer entitlements
This section helps you transfer entitlements for existing Google Workspace and Chrome customers from their previous partner.
For help transferring customers in the Partner Sales Console, see our guides on transferring customers to a partner account or a Google account
Google Workspace customers can only purchase entitlements from a single partner or a single partner and Google.
During the transfer, existing entitlements are automatically canceled before they are created again under the new partner. If a customer has commitment plan entitlements, those will start a new commitment term after the transfer.
Before you begin
To manage entitlements for a customer, you need a customer-generated transfer token. Contact the customer and provide your Partner Public Identifier so they can generate a transfer token. After they create a token, the customer needs to send their transfer token back to you to complete the process. These tokens expire 14 days after creation. You also need the customer's domain or Cloud Identity ID.
When the customer creates their transfer token, they select the entitlements they want to transfer to their new reseller. You need to transfer all the selected entitlements during the process.
To transfer entitlements, follow these steps:
If you only have the customer's domain, you can use the Cloud Channel API to
return their Cloud Identity ID. Call
checkCloudIdentityAccountsExist
with the customer's domain and, if the domain exists, the API will return the
customer's Cloud Identity ID.
Begin the transfer by using the
customers.import
method to import the customer's data.ImportCustomerRequest { "parent": "accounts/abc", "domain": "domain" }
With the customer's Cloud Identity ID, call
listTransferableSkus
to retrieve a list of the customer'stransferableSku
Check each object'stransferEligibility
to make sure you can purchase the associated SKU.ListTransferableSkusRequest { "parent": "accounts/abc", "cloudIdentityId": "cloud_identity_id" } ListTransferableSkusResponse { "transferableSku": [ { "sku": { "name": "products/product_id/skus/voice_sku_id1", }, }, { "sku": { "name": "products/product_id/skus/google_workspace_sku_id2", }, }, { "sku": { "name": "products/product_id/skus/google_workspace_chrome_sku_id3", }, } ], }
Now that you have a list of TransferableSkus, you need to determine what BillingAccount to use to pay for the entitlements. Use the
queryEligibleBillingAccounts
method to find a set of BillingAccount that can be used for each TransferableSku.- Note that certain TransferableSkus must share the same Google Workspace
billing account,
which is why
queryEligibleBillingAccounts
returns a sku group that informs you which TransferableSkus need to use the same BillingAccount. If there are multiple Google Workspace billing account for a given SKU group, you can pick one of the Google Workspace billing account and use it for every TransferableSku in the group.
QueryEligibleBillingAccountsRequest { "customer": "accounts/123/customers/abc", "skus": ["products/product_id/skus/voice_sku_id1","products/product_id/skus/google_workspace_sku_id2","google_workspace_chrome_sku_id3"] } QueryEligibleBillingAccountsResponse { "skuPurchaseGroups": [ { "skus": [ "products/product_id/skus/voice_sku_id1" ], "billingAccountPurchaseInfos": [ { "billingAccount": { "name": "accounts/123/billingAccounts/voice_billing_account_id1", "displayName": "Google_Workspace_Voice_USD_US_1", "currencyCode": "USD", "regionCode": "US" } } ] }, { "skus": [ "products/product_id/skus/google_workspace_sku_id2","google_workspace_chrome_sku_id3" ], "billingAccountPurchaseInfos": [ { "billingAccount": { "name": "accounts/123/billingAccounts/gw_billing_account_id1", "displayName": "Google_Workspace_USD_US_1", "currencyCode": "USD", "regionCode": "US" } }, { "billingAccount": { "name": "accounts/123/billingAccounts/gw_billing_account_id2", "displayName": "Google_Workspace_CAD_CA_1", "currencyCode": "CAD", "regionCode": "CA" } } ] } ] } ```
- Note that certain TransferableSkus must share the same Google Workspace
billing account,
which is why
For each TransferableSku and BillingAccount pairs, use the
listTransferableOffers
method to find availableTransferableOffers
. At this point you should have the customer's list of tuples consisting of TransferableSku, BillingAccounts, and TransferableOffer.ListTransferableOffersRequest { "parent": "accounts/abc", "cloudIdentityId": "cloud_identity_id", "sku": "products/product_id/skus/voice_sku_id1", "billingAccount": "ccounts/123/billingAccounts/voice_billing_account_id1" } ListTransferableOffersResponse { "transferableOffers": [ { "offer": { "name": "accounts/123/offers/voice_offer_id1", }, "sku": { "name": "products/product_id/skus/voice_sku_id1", }, "plan": { "paymentPlan": "FLEXIBLE", "paymentCycle": { "duration": 1, "periodType": "MONTH" } }, } ], }
For each tuple create a new corresponding Entitlement object, each Entitlement needs an Offer, BillingAccount and any required parameters. Call the
transferEntitlements
method to perform the transfer.TransferEntitlementsRequest { "parent": "accounts/abc/customers/123", "entitlements": [ { "offer": "accounts/123/offers/voice_offer_id1", "maxUnits": 100, "billingAccount": "accounts/123/billingAccounts/voice_billing_account_id1" }, { "offer": "accounts/123/offers/gw_offer_id2", "maxUnits": 150, "billingAccount": "accounts/123/billingAccounts/gw_billing_account_id1" } { "offer": "accounts/123/offers/gw_chrome_offer_id3", "maxUnits": 200, "billingAccount": "accounts/123/billingAccounts/gw_billing_account_id1" } ] } TransferEntitlementsResponse { "name": "operations/operation_id1" }