Mapping Pax8 Identifiers to Microsoft Graph API
This guide explains how to map Pax8 company, product, and subscription identifiers to their Microsoft Tenant and Graph API counterparts. With the vendorSkuId field in the Pax8 API, there are two main methods depending on your goal.
Method 1: Seat Reconciliation with vendorSkuId (Recommended)
Use this method to see used vs. unused seats for a Microsoft product you've purchased through Pax8 — for example, to check whether unassigned licenses remain before ordering more.
Steps:
- Fetch the Pax8 subscription using
GET /v1/subscriptions/{subscriptionId}. Note thevendorSkuIdin the response. This GUID is Microsoft's SKU-level identifier (Partner CenterprovisioningId), and it matches theskuIdin Microsoft Graph. Note:vendorSkuIdis returned only on this subscription detail endpoint, not on List Subscriptions. - In Microsoft Graph, call
GET https://graph.microsoft.com/v1.0/subscribedSkuson the customer tenant. Find the entry whereskuIdmatches the Pax8vendorSkuId. - Read
prepaidUnits.enabled(total purchased seats) andconsumedUnits(seats assigned to users). Available seats =prepaidUnits.enabled−consumedUnits.
Important: Graph aggregates seats per SKU, not per commerce subscription. If a customer has multiple Pax8 subscriptions for the same product (e.g., different terms), they share one vendorSkuId and Graph pools their seats under a single subscribedSkus entry.
Method 2: Mapping Products for Catalog Integration (Advanced)
Use this method when you need to map Pax8 products to Microsoft skuId values before a subscription is purchased (for catalog integrations or quoting).
Steps:
- Get the Pax8 product name from
GET /v1/products/{productId}. - Download Microsoft’s Product names and service plan identifiers CSV. Find the product name in the
ProductDisplayNamecolumn and note theGUID(skuId). See list of references below. - In Graph, use
GET /subscribedSkusto see which SKUs are active for a tenant. Match theskuIdto confirm presence and review license counts.
Key Points:
- The
vendorSkuIdfrom Pax8 matches theskuIdin Microsoft Graph's/subscribedSkusendpoint and Partner Center'sprovisioningId. Use it for SKU-level seat reconciliation. - The
/subscriptionsendpoint in Graph is for webhooks, not licensing — use/subscribedSkusfor license data. - For product mapping, use Microsoft's official CSV to match product names to
skuId. - Always use a Graph access token scoped to the customer tenant (Pax8's
externalIdon the company endpoint can be used to store this value). - For multiple subscriptions of the same SKU, use the
subscriptionIdsarray in/subscribedSkusto cross-referencecompanySubscription.idvalues.
Troubleshooting:
- If you cannot find a matching
skuIdin Graph, verify you are using the correct tenant and permissions. - For product mapping, confirm product names match exactly or use fuzzy matching if needed.
References:
- Pax8 API OpenAPI specs to get help from AI: https://devx.pax8.com/openapi/
- Pax8 changelog for
vendorSkuIdaddition: https://devx.pax8.com/changelog/partner-new-vendorskuid-field-on-get-subscription-by-id - Microsoft Partner Center Get a SKU by ID (
provisioningId): https://learn.microsoft.com/en-us/partner-center/developer/get-a-sku-by-id - Microsoft Graph subscribedSkus: https://learn.microsoft.com/en-us/graph/api/subscribedsku-list?view=graph-rest-1.0
- Microsoft Product names and service plan identifiers (CSV): https://learn.microsoft.com/en-us/entra/identity/users/licensing-service-plan-reference
Summary Table:
| Pax8 Field | Microsoft Graph Field | Endpoint | Notes |
|---|---|---|---|
vendorSkuId | skuId | /subscribedSkus | Use for seat reconciliation (used vs. unused); SKU-level, pooled across subscriptions |
productId (Pax8) | skuId (Graph) | /subscribedSkus | Use for mapping products/SKUs |
externalId (Pax8) | Tenant ID | /organization/{tenantId} etc. | Use for tenant-level queries |
