HomeGuidesAPI ReferenceGuidesMRT APIConfiguration API
GitHubAirheads Developer Community
Guides

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.

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 id attribute within the serviceManager object. In the above example, this corresponds to 373b39b1-f9fb-xxxxxxxxxx
  • The region attribute at the top level of the provision entry. In the above example, the corresponds to us-west.

These values are required in Steps 4 and 5.

📘

API Reference

HPE GreenLake API - List service manager provisions


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

HPE GreenLake API - Create MSP tenant


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. The filter value 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

HPE GreenLake API - List MSP tenants


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 as 123e4567e89b12d3a456426614174000.

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: the serviceManager.id value
  • region: the top-level region value

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

HPE GreenLake API - Provision service manager in workspace


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

HPE GreenLake API - Get devices managed in a workspace

Assign Devices

In the request body below, you need the following values:

  • device_id: ID attributes for devices that need to be assigned to tenant
  • application.id: use the serviceManager.id value from Prerequisite section:
  • region: use the top-level region value 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 as 123e4567e89b12d3a456426614174000.

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

HPE GreenLake API - Get subscriptions of a workspace

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