Customer Onboarding
This guide walks through the end-to-end process required to onboard a customer into HPE GreenLake for Central via APIs. It is designed for MSP operators and administrators who need to provision new tenants and prepare them for management within Central. The workflow covered in this guide focuses on onboarding steps that occur before any configuration or monitoring can take place in Central.

Authentication note: All steps use the MSP GLP token except Provision Central service in tenant, which uses the tenant-scoped token.
Prerequisites
- A valid GLP token for the MSP level see Token Exchange
- Your MSP Workspace ID — covered in the Token Exchange guide
- Devices & Subscriptions added to your MSP inventory (See Adding Devices and Subscription to MSP Inventory )
- Central service provisioned in your MSP workspace. This is required before provisioning the service within a tenant
- Service Manager ID & Region of the Central service. This is required to identify the Central instance which will be provisioned in the tenant; see below
MSP-Level Service Manager ID and Region
Retrieve the service manager ID and region for the Central instance which will be provisioned in the tenant.
You can do this by running the following request using your MSP GLP token:
Request
curl -X GET "https://global.api.greenlake.hpe.com/service-catalog/v1/service-manager-provisions?limit=10" \
-H "Authorization: Bearer <MSP_GLP_TOKEN>"
Response
{
"offset": 0,
"count": 1,
"total": 1,
"items": [
{
"id": "d370b6682xxxxxxxxxx",
"type": "/service-catalog/service-manager-provision",
"generation": 1,
"createdAt": "2025-05-01 15:06:14.760297",
"updatedAt": "2025-05-01 15:06:31.352561",
"resourceUri": "/service-catalog/v1/service-manager-provisions/d370b668269d11f091fxxxxxxxxxx",
"serviceManager": {
"id": "373b39b1-f9fb-xxxxxxxxxx",
"resourceUri": "/service-catalog/v1/service-managers/373b39b1-f9fb-xxxxxxxxxx"
},
"region": "us-west",
"provisionStatus": "PROVISIONED",
"createdBy": "[email protected]",
"reason": null
}
]
}
From the response, note:
- The
idattribute within theserviceManagerobject. In the above example, this corresponds to373b39b1-f9fb-xxxxxxxxxx - The
regionattribute at the top level of the provision entry. In the above example, the corresponds tous-west.
These values are required in Steps 4 and 5.
API Reference
Step 1: Create a Tenant
Create a tenant workspace using your MSP token. Send a POST request to create the tenant workspace. The inventoryOwnership field is set to MSP_OWNED_INVENTORY for this guide.
Important
If you'd like to create a tenant with devices & subscriptions owned by tenant, set the inventoryOwnership to CUSTOMER_OWNED_INVENTORY
Request
curl -i -X POST \
https://global.api.greenlake.hpe.com/workspaces/v1/msp-tenants \
-H 'Authorization: Bearer <MSP_GLP_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"address": {
"streetAddress": "string",
"streetAddressComplement": "string",
"city": "string",
"stateOrRegion": "string",
"zip": "string",
"countryCode": "US"
},
"phoneNumber": "string",
"email": "[email protected]",
"workspaceName": "Tenant-Name",
"description": "test",
"inventoryOwnership": "MSP_OWNED_INVENTORY"
}'
Response
{"message":"Tenant created"}
A successful response confirms the tenant was created.
API Reference
Step 2: Retrieve the Tenant ID
Once the tenant is successfully created, query the List MSP tenants API with a filter expression to retrieve it.
Note
Replace
<TENANT_NAME>with the exact tenant name you created in Step 1. Thefiltervalue must be URL encoded before you send the request.
Request
curl -X GET "https://global.api.greenlake.hpe.com/workspaces/v1/msp-tenants?filter=workspaceName%20eq%20%27<TENANT_NAME>%27" \
-H "Authorization: Bearer <MSP_GLP_TOKEN>"
Response
{
"offset": 0,
"count": 1,
"total": 1,
"items": [
{
"id": "5380e0be-3776-xxxxxxxxxxxx",
"type": "workspace",
"generation": 1,
"createdAt": "2026-04-13T20:21:17.329523",
"updatedAt": "2026-04-13T20:25:06.628935",
"resourceUri": null,
"workspaceName": "Tenant-Name",
"createdBy": "[email protected]",
"workspaceType": null,
"inventoryOwnership": "MSP_OWNED_INVENTORY"
}
]
}
Use the returned id attribute for the tenant in the next step.
API Reference
Step 3: Exchange the MSP Token for a Tenant Workspace Token
To make API calls within a specific tenant workspace, exchange your MSP access token for a tenant workspace token. This exchange is scoped to a single tenant using id from Step 2.
Important
Remove hyphens(-) from the tenant workspace ID(
TENANT_WORKSPACE_ID) before using it in the token exchange URL.For example, if the tenant workspace id is
123e4567-e89b-12d3-a456-426614174000, for the API call, you should pass it as123e4567e89b12d3a456426614174000.
Request
curl -X POST "https://global.api.greenlake.hpe.com/authorization/v2/oauth2/$TENANT_WORKSPACE_ID/token" \
-d "subject_token=$MSP_ACCESS_TOKEN" \
-d 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
-d 'subject_token_type=urn:ietf:params:oauth:token-type:access_token' \
-H "User-Agent: exchange-token-curl-example" \
-H 'Content-Type: application/x-www-form-urlencoded'
Response
{
"access_token":"eyJhbGcjAz.....",
"issued_token_type":"urn:ietf:params:oauth:token-type:access_token",
"token_type":"Bearer",
"expires_in":899
}
Use the returned access_token as <TENANT_TOKEN> in the next step. For more details, see Token Exchange.
Step 4: Provision Central Service in Tenant
Provision the Central service within the tenant workspace before assigning devices. You can only provision services that are already installed at the MSP level.
Use the Service Manager ID and Region (Required for Steps 4 & 5) values retrieved earlier in Prerequisite :
serviceManagerId: theserviceManager.idvalueregion: the top-levelregionvalue
Request
curl -i -X POST \
https://global.api.greenlake.hpe.com/service-catalog/v1/service-manager-provisions \
-H 'Authorization: Bearer <TENANT_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"serviceManagerId": "<MSP_SERVICE_MANAGER_ID>",
"region": "<MSP_REGION>"
}'
Response
{
"id": "379510e0377c11fxxxxxxxxxxxx",
"resourceUri": "/service-catalog/v1/service-manager-provisions/379510e0377c11fxxxxxxxxxxxx",
"serviceManager": {
"id": "373b39b1-f9fb-465f-xxxxxxxxxxxx",
"resourceUri": "/service-catalog/v1/service-managers/373b39b1-f9fb-xxxxxxxxxxxx"
},
"region": "us-west",
"createdBy": "[email protected]",
"generation": 1,
"type": "/service-catalog/service-manager-provision"
}
A successful response confirms the service is provisioned.
API Reference
Step 5: Assign Devices to the Tenant
Assign devices to the tenant using their device IDs. This operations assigns the device to the tenant but the devices will not come online on Central until they are assigned a subscription.
Look up Device IDs
Devices assignment requires GLP device IDs (not serial numbers). Use an OData filter with the serialNumber field to look up the IDs for all devices you plan to assign in a single request. Multipl devices can be queried in a single request using the in (...) filter. The filter value must be URL encoded before you send the request.
Request
curl -X GET "https://global.api.greenlake.hpe.com/devices/v1/devices?select=serialNumber%2Cid&filter=serialNumber%20in%20%28%27<DEVICE_SERIAL_1>%27%29" \
-H "Authorization: Bearer <MSP_GLP_TOKEN>"
Response
{
"items":[
{
"id":"b8652f72-8238-xxxxxxxxxxxx",
"serialNumber":"VNTxxxxxxxxxxxx"
}
],
"count":1,
"offset":0,
"total":1
}
Collect all id values for the devices you would like to assign to the tenant. These are required for the id query parameter in the assignment request below.
API Reference
Assign Devices
In the request body below, you need the following values:
device_id: ID attributes for devices that need to be assigned to tenantapplication.id: use theserviceManager.idvalue from Prerequisite section:region: use the top-levelregionvalue from Prerequisite section:tenantPlatformCustomerId: use the tenant workspace ID from Step 2
Important
Remove hyphens(-) from the tenant workspace ID(
TENANT_WORKSPACE_ID) before using it in the token exchange URL.For example, if the tenant workspace id is
123e4567-e89b-12d3-a456-426614174000, for the API call, you should pass it as123e4567e89b12d3a456426614174000.
Request
curl -X PATCH "https://global.api.greenlake.hpe.com/devices/v1/devices?id=<DEVICE_ID_1>,<DEVICE_ID_2>" \
-H "Authorization: Bearer <MSP_GLP_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"application": {
"id": "<MSP_SERVICE_MANAGER_ID>"
},
"region": "<MSP_REGION>",
"tenantPlatformCustomerId": "<TENANT_WORKSPACE_ID>"
}
curl -X PATCH "https://global.api.greenlake.hpe.com/devices/v1/devices?id=111-222-333-444,111-222-333-446=5" \
-H "Authorization: Bearer eyJhbGciOi..." \
-H "Content-Type: application/json" \
-d '{
"application": {
"id": "373b39b1-f9fb-xxxxxxxxxx"
},
"region": "us-west",
"tenantPlatformCustomerId": "123e4567e89b12d3a456426614174000"
}
Response
{
"code":202,
"status":"ACCEPTED",
"transactionId":"55ed0816-a470xxxxxxxxxxxx"
}
The above request is asynchronous. You must poll the operation status before proceeding. A202 Accepted response is returned immediately with a transaction ID.
API reference
HPE GreenLake API - Update Devices for request details, limits, and rate-limit behavior.
Verify device assignment
Poll the async operation endpoint using the transactionId from above response until status is SUCCEEDED:
Request
curl -X GET "https://global.api.greenlake.hpe.com/devices/v1/async-operations/<transaction-id>" \
-H "Authorization: Bearer <MSP_GLP_TOKEN>"
Response
{
"id": "5fd1b146-327d-xxxxxxxxxxxx",
"type": "/async-resource",
"sourceResourceUri": "AsyncOperationResource",
"status": "SUCCEEDED",
"startedAt": "2026-04-14 14:04:55.829",
"endedAt": "2026-04-14 14:04:55.952",
"generation": 2,
"progressPercent": 100,
"suggestedPollingIntervalSeconds": 2,
"timeoutMinutes": 2,
"result": {
"succeededDevices": [
"6b8c9801-810d-xxxxxxxxxxxx"
]
},
"logMessages": [],
"resultType": "PatchDeviceResponse"
}
API Reference
HPE GreenLake API - Get progress or status of async operations in devices
Step 6: Assign Subscriptions to Devices
Subscriptions must be assigned to devices for them to be managed from Central.
Look up Subscription IDs
Subscriptions are identified by their id, not by subscription key. Use an OData filter with the key field to look up the IDs for all subscriptions you plan to assign. The filter value must be URL encoded before you send the request.
Request
curl -X GET "https://global.api.greenlake.hpe.com/subscriptions/v1/subscriptions?select=id%2ckey&filter=key%20in%20%28%27<SUBSCRIPTION_KEY_1>%27%2C%27<SUBSCRIPTION_KEY_2>%27%29" \
-H "Authorization: Bearer <MSP_GLP_TOKEN>"
Response
{
"items": [
{
"id": "0053df8e-116b-5xxxxxxxxxxxx",
"key": "ED5ABE997DCExxxxxxxxxxxx"
}
],
"count": 1,
"offset": 0,
"total": 1
}
Please note the id attribute for each subscription you would like to assign to devices.
API Reference
Assign Subscriptions
API reference
See Update Devices for request details, limits, and rate-limit behavior.
Request
curl -X PATCH "https://global.api.greenlake.hpe.com/devices/v1/devices?id=<DEVICE_ID_1>,<DEVICE_ID_2>" \
-H "Authorization: Bearer <MSP_GLP_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"subscription": ["<Subscription-ID>"]
}
curl -X PATCH "https://global.api.greenlake.hpe.com/devices/v1/devices?id=111-222-333-444,111-222-333-446=5" \
-H "Authorization: Bearer eyJhbGciOi..." \
-H "Content-Type: application/json" \
-d '{
"subscription": ["aaa-bbb-ccc-ddd"]
}
Response
{
"code":202,
"status":"ACCEPTED",
"transactionId":"55ed0816-a470xxxxxxxxxxxx"
}
The above request is asynchronous. You must poll the operation status before proceeding. A202 Accepted response is returned immediately with a transaction ID.
Verify subscription assignment:
Poll the async operation endpoint using the transactionId from above response until status is SUCCEEDED:
Request
curl -X GET "https://global.api.greenlake.hpe.com/devices/v1/async-operations/<transaction-id>" \
-H "Authorization: Bearer <MSP_GLP_TOKEN>"
Response
{
"id": "5fd1b146-327d-xxxxxxxxxxxx",
"type": "/async-resource",
"sourceResourceUri": "AsyncOperationResource",
"status": "SUCCEEDED",
"startedAt": "2026-04-14 14:04:55.829",
"endedAt": "2026-04-14 14:04:55.952",
"generation": 2,
"progressPercent": 100,
"suggestedPollingIntervalSeconds": 2,
"timeoutMinutes": 2,
"result": {
"succeededDevices": [
"6b8c9801-810d-xxxxxxxxxxxx"
]
},
"logMessages": [],
"resultType": "PatchDeviceResponse"
}
API Reference
HPE GreenLake API - Get progress or status of async operations in devices
Updated about 15 hours ago