Pax8 Subscription Lifecycle Management
Overview
Subscriptions in Pax8 represent active cloud product licenses assigned to a client company. When an order is placed and provisioned, it creates a subscription. Subscriptions are the core ongoing entity that MSPs manage -- adjusting seat counts as clients hire or leave, upgrading plans, or cancelling when a product is no longer needed. Every subscription is tied to a company and a product, with a quantity (seat count), billing term, and status.
Anti-triggers
- Licences bought through Sherweb — the other CSP marketplace in this
marketplace. Same concepts, different account, no shared IDs; use
sherweb-subscriptions. A client's licences may sit in either, or
split across both, so establish which distributor holds the product
before reasoning about seat counts.
- A licence assigned to a named user — Pax8 tracks what the MSP
purchased; who it is assigned to lives in the tenant. Use
m365-licensing or cipp-licenses. Purchased seats and assigned seats
legitimately differ, and reconciling them is a cross-tool comparison.
- Changing a seat count — no tool here does it. This surface is
read-only; quantity changes and cancellations happen in the Pax8 portal.
See
pax8-api-patterns for the full read-only scope.
- The purchase event rather than the resulting licence — use
pax8-orders; an order is the transaction, a subscription is what it
created.
MCP Tools
Available Tools
| Tool |
Description |
Key Parameters |
pax8-list-subscriptions |
List and filter subscriptions |
page, size, sort, status, billingTerm, companyId, productId |
pax8-get-subscription-by-uuid |
Get a single subscription |
uuid (required) |
List Subscriptions
Call pax8-list-subscriptions with optional parameters:
- Filter by company: Set
companyId to a company UUID
- Filter by status: Set
status to one of the allowed values (see below)
- Filter by billing term: Set
billingTerm to monthly, annual, two-year, three-year, one-time, trial, or activation
- Filter by product: Set
productId to a product UUID
- Paginate: Set
page (0-based) and size (up to 200)
Example: List all active subscriptions for a company:
pax8-list-subscriptions with companyId=a1b2c3d4-..., status=Active, size=200
Example: List all trial subscriptions:
pax8-list-subscriptions with status=Trial, size=200
Example: List all annual subscriptions:
pax8-list-subscriptions with billingTerm=annual, status=Active, size=200
Get a Single Subscription
Call pax8-get-subscription-by-uuid with the uuid parameter.
Example:
pax8-get-subscription-by-uuid with uuid=s1u2b3s4-c5r6-7890-abcd-ef1234567890
Key Concepts
Subscription Lifecycle
Order Placed --> Provisioning --> Active --> [Modify/Cancel] --> Cancelled
| |
PendingManual ActivePendingChange
PendingAutomated PendingCancel
WaitingForDetails
Subscription States
| State |
Description |
Active |
Subscription is live and billing |
Cancelled |
Subscription has been terminated |
PendingManual |
Awaiting manual provisioning by vendor |
PendingAutomated |
Automated provisioning in progress |
PendingCancel |
Cancellation request submitted, not yet complete |
WaitingForDetails |
Additional information needed for provisioning |
Trial |
Free trial period active |
Converted |
Trial converted to paid subscription |
PendingActivation |
Activation pending |
Activated |
Recently activated |
Billing Terms
| Term |
Description |
Commitment |
| Monthly |
Month-to-month |
Cancel anytime |
| Annual |
12-month commitment |
Locked for 12 months |
| Two-Year |
24-month commitment |
Locked for 24 months |
| Three-Year |
36-month commitment |
Locked for 36 months |
| One-Time |
Single purchase |
No recurring billing |
| Trial |
Free trial |
No commitment |
Quantity Management
The quantity field represents the number of licenses (seats, devices, or units depending on the product). Changing quantity triggers a billing adjustment:
- Increase: Additional seats are prorated for the current billing period
- Decrease: Seat reduction may be restricted by vendor commitment terms
- Annual plans: Seat decreases may only be allowed at renewal
Field Reference
Subscription Fields
| Field |
Type |
Description |
id |
UUID |
Subscription unique identifier |
companyId |
UUID |
Associated company ID |
productId |
UUID |
Associated product ID |
quantity |
integer |
Number of licenses/seats |
startDate |
date |
Subscription start date |
endDate |
date |
Subscription end date (for commitments) |
createdDate |
datetime |
When the subscription was created |
billingStart |
date |
When billing begins |
status |
string |
Current subscription state |
billingTerm |
string |
Billing term (Monthly, Annual) |
price |
decimal |
Current unit price |
commitmentTermId |
UUID |
Commitment term identifier |
Usage Summary Fields
| Field |
Type |
Description |
subscriptionId |
UUID |
Associated subscription |
resourceGroup |
string |
Usage resource group |
quantity |
decimal |
Usage quantity |
unitOfMeasure |
string |
Usage unit |
currentCharges |
decimal |
Charges for this period |
date |
date |
Usage date |
Common Workflows
Check Subscriptions for a Company
- Find the company UUID using
pax8-list-companies with company_name
- Call
pax8-list-subscriptions with companyId and status=Active
- For each subscription, optionally call
pax8-get-product-by-uuid with the productId to get product names
License Optimization Across All Clients
This is one of the most valuable MSP workflows -- finding unused or underutilized licenses:
- Call
pax8-list-companies with size=200 to get all companies
- For each company, call
pax8-list-subscriptions with companyId and status=Active
- Build a list of all subscriptions with company name, product, quantity, billing term, and monthly cost (
quantity * price)
- Sort by monthly cost descending to surface the biggest savings opportunities
- Flag subscriptions with very low seat counts or monthly billing that could switch to annual
Subscription Status Report by Company
- Find the company with
pax8-list-companies or pax8-get-company-by-uuid
- Call
pax8-list-subscriptions with companyId and size=200 (no status filter to get all)
- Group results by status and calculate total monthly cost for active subscriptions
Renewal Management
- Call
pax8-list-subscriptions with status=Active and billingTerm=annual
- Review each subscription's
endDate to find upcoming renewals
- For renewals within the next 30 days, prepare a review list with company name, product, seat count, and pricing
Get Usage Data for a Subscription
For usage-based products (e.g., Azure):
- Call
pax8-get-usage-summary with subscriptionId (required)
- Optionally filter by
resourceGroup or companyId
- For detailed line-item usage, call
pax8-get-detailed-usage-summary with the usageSummaryId
Response Examples
Subscription:
{
"id": "s1u2b3s4-c5r6-7890-abcd-ef1234567890",
"companyId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"productId": "f9e8d7c6-b5a4-3210-fedc-ba0987654321",
"quantity": 25,
"startDate": "2025-06-01",
"endDate": "2026-05-31",
"createdDate": "2025-05-28T14:30:00.000Z",
"billingStart": "2025-06-01",
"status": "Active",
"billingTerm": "Annual",
"price": 17.10
}
Error Handling
Common Errors
| Error |
Cause |
Resolution |
| Subscription not found |
Invalid UUID |
Verify the UUID with pax8-list-subscriptions |
| Invalid status filter |
Wrong status value |
Use one of: Active, Cancelled, PendingManual, PendingAutomated, PendingCancel, WaitingForDetails, Trial, Converted, PendingActivation, Activated |
| Invalid billingTerm |
Wrong billing term value |
Use one of: monthly, annual, two-year, three-year, one-time, trial, activation |
State Transition Errors
| Current State |
Attempted Action |
Notes |
| Cancelled |
Modify quantity |
Cannot modify cancelled subscription |
| PendingCancel |
Modify quantity |
Cannot modify during cancellation |
| PendingManual |
Cancel |
Cannot cancel during provisioning |
| ActivePendingChange |
Modify quantity |
Wait for current change to complete |
Best Practices
- Check state before modifying - Always verify the subscription is in
Active state before making changes
- Understand commitment terms - Annual subscriptions restrict quantity decreases
- Optimize regularly - Review subscriptions monthly to find unused licenses
- Use company filter - Always filter by
companyId when checking a specific client's subscriptions
- Monitor pending states - Subscriptions in pending states need attention
- Plan renewals - Track end dates and plan renewal conversations with clients
- Batch operations carefully - When checking multiple companies, respect rate limits (1000/min)
- Document changes - Note why quantities were changed in your PSA or documentation
- Use billing term filter - Filter by
billingTerm=monthly to quickly find candidates for annual commitment savings
Related Skills
1---2name: pax8-subscriptions3description: Pax8 subscriptions: license and seat counts, the full subscription lifecycle and its states, change history, filtering by company or product, and quantity management for license optimization.4---56# Pax8 Subscription Lifecycle Management78## Overview910Subscriptions in Pax8 represent active cloud product licenses assigned to a client company. When an order is placed and provisioned, it creates a subscription. Subscriptions are the core ongoing entity that MSPs manage -- adjusting seat counts as clients hire or leave, upgrading plans, or cancelling when a product is no longer needed. Every subscription is tied to a company and a product, with a quantity (seat count), billing term, and status.1112## Anti-triggers1314- **Licences bought through Sherweb** — the other CSP marketplace in this15 marketplace. Same concepts, different account, no shared IDs; use16 `sherweb-subscriptions`. A client's licences may sit in either, or17 split across both, so establish which distributor holds the product18 before reasoning about seat counts.19- **A licence assigned to a named user** — Pax8 tracks what the MSP20 *purchased*; who it is *assigned to* lives in the tenant. Use21 `m365-licensing` or `cipp-licenses`. Purchased seats and assigned seats22 legitimately differ, and reconciling them is a cross-tool comparison.23- **Changing a seat count** — no tool here does it. This surface is24 read-only; quantity changes and cancellations happen in the Pax8 portal.25 See `pax8-api-patterns` for the full read-only scope.26- **The purchase event rather than the resulting licence** — use27 `pax8-orders`; an order is the transaction, a subscription is what it28 created.2930## MCP Tools3132### Available Tools3334| Tool | Description | Key Parameters |35|------|-------------|----------------|36| `pax8-list-subscriptions` | List and filter subscriptions | `page`, `size`, `sort`, `status`, `billingTerm`, `companyId`, `productId` |37| `pax8-get-subscription-by-uuid` | Get a single subscription | `uuid` (required) |3839### List Subscriptions4041Call `pax8-list-subscriptions` with optional parameters:4243- **Filter by company:** Set `companyId` to a company UUID44- **Filter by status:** Set `status` to one of the allowed values (see below)45- **Filter by billing term:** Set `billingTerm` to `monthly`, `annual`, `two-year`, `three-year`, `one-time`, `trial`, or `activation`46- **Filter by product:** Set `productId` to a product UUID47- **Paginate:** Set `page` (0-based) and `size` (up to 200)4849**Example: List all active subscriptions for a company:**50- `pax8-list-subscriptions` with `companyId=a1b2c3d4-...`, `status=Active`, `size=200`5152**Example: List all trial subscriptions:**53- `pax8-list-subscriptions` with `status=Trial`, `size=200`5455**Example: List all annual subscriptions:**56- `pax8-list-subscriptions` with `billingTerm=annual`, `status=Active`, `size=200`5758### Get a Single Subscription5960Call `pax8-get-subscription-by-uuid` with the `uuid` parameter.6162**Example:**63- `pax8-get-subscription-by-uuid` with `uuid=s1u2b3s4-c5r6-7890-abcd-ef1234567890`6465## Key Concepts6667### Subscription Lifecycle6869```70Order Placed --> Provisioning --> Active --> [Modify/Cancel] --> Cancelled71 | |72 PendingManual ActivePendingChange73 PendingAutomated PendingCancel74 WaitingForDetails75```7677### Subscription States7879| State | Description |80|-------|-------------|81| `Active` | Subscription is live and billing |82| `Cancelled` | Subscription has been terminated |83| `PendingManual` | Awaiting manual provisioning by vendor |84| `PendingAutomated` | Automated provisioning in progress |85| `PendingCancel` | Cancellation request submitted, not yet complete |86| `WaitingForDetails` | Additional information needed for provisioning |87| `Trial` | Free trial period active |88| `Converted` | Trial converted to paid subscription |89| `PendingActivation` | Activation pending |90| `Activated` | Recently activated |9192### Billing Terms9394| Term | Description | Commitment |95|------|-------------|------------|96| Monthly | Month-to-month | Cancel anytime |97| Annual | 12-month commitment | Locked for 12 months |98| Two-Year | 24-month commitment | Locked for 24 months |99| Three-Year | 36-month commitment | Locked for 36 months |100| One-Time | Single purchase | No recurring billing |101| Trial | Free trial | No commitment |102103### Quantity Management104105The `quantity` field represents the number of licenses (seats, devices, or units depending on the product). Changing quantity triggers a billing adjustment:106107- **Increase**: Additional seats are prorated for the current billing period108- **Decrease**: Seat reduction may be restricted by vendor commitment terms109- **Annual plans**: Seat decreases may only be allowed at renewal110111## Field Reference112113### Subscription Fields114115| Field | Type | Description |116|-------|------|-------------|117| `id` | UUID | Subscription unique identifier |118| `companyId` | UUID | Associated company ID |119| `productId` | UUID | Associated product ID |120| `quantity` | integer | Number of licenses/seats |121| `startDate` | date | Subscription start date |122| `endDate` | date | Subscription end date (for commitments) |123| `createdDate` | datetime | When the subscription was created |124| `billingStart` | date | When billing begins |125| `status` | string | Current subscription state |126| `billingTerm` | string | Billing term (Monthly, Annual) |127| `price` | decimal | Current unit price |128| `commitmentTermId` | UUID | Commitment term identifier |129130### Usage Summary Fields131132| Field | Type | Description |133|-------|------|-------------|134| `subscriptionId` | UUID | Associated subscription |135| `resourceGroup` | string | Usage resource group |136| `quantity` | decimal | Usage quantity |137| `unitOfMeasure` | string | Usage unit |138| `currentCharges` | decimal | Charges for this period |139| `date` | date | Usage date |140141## Common Workflows142143### Check Subscriptions for a Company1441451. Find the company UUID using `pax8-list-companies` with `company_name`1462. Call `pax8-list-subscriptions` with `companyId` and `status=Active`1473. For each subscription, optionally call `pax8-get-product-by-uuid` with the `productId` to get product names148149### License Optimization Across All Clients150151This is one of the most valuable MSP workflows -- finding unused or underutilized licenses:1521531. Call `pax8-list-companies` with `size=200` to get all companies1542. For each company, call `pax8-list-subscriptions` with `companyId` and `status=Active`1553. Build a list of all subscriptions with company name, product, quantity, billing term, and monthly cost (`quantity * price`)1564. Sort by monthly cost descending to surface the biggest savings opportunities1575. Flag subscriptions with very low seat counts or monthly billing that could switch to annual158159### Subscription Status Report by Company1601611. Find the company with `pax8-list-companies` or `pax8-get-company-by-uuid`1622. Call `pax8-list-subscriptions` with `companyId` and `size=200` (no status filter to get all)1633. Group results by status and calculate total monthly cost for active subscriptions164165### Renewal Management1661671. Call `pax8-list-subscriptions` with `status=Active` and `billingTerm=annual`1682. Review each subscription's `endDate` to find upcoming renewals1693. For renewals within the next 30 days, prepare a review list with company name, product, seat count, and pricing170171### Get Usage Data for a Subscription172173For usage-based products (e.g., Azure):1741751. Call `pax8-get-usage-summary` with `subscriptionId` (required)1762. Optionally filter by `resourceGroup` or `companyId`1773. For detailed line-item usage, call `pax8-get-detailed-usage-summary` with the `usageSummaryId`178179## Response Examples180181**Subscription:**182183```json184{185 "id": "s1u2b3s4-c5r6-7890-abcd-ef1234567890",186 "companyId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",187 "productId": "f9e8d7c6-b5a4-3210-fedc-ba0987654321",188 "quantity": 25,189 "startDate": "2025-06-01",190 "endDate": "2026-05-31",191 "createdDate": "2025-05-28T14:30:00.000Z",192 "billingStart": "2025-06-01",193 "status": "Active",194 "billingTerm": "Annual",195 "price": 17.10196}197```198199## Error Handling200201### Common Errors202203| Error | Cause | Resolution |204|-------|-------|------------|205| Subscription not found | Invalid UUID | Verify the UUID with `pax8-list-subscriptions` |206| Invalid status filter | Wrong status value | Use one of: Active, Cancelled, PendingManual, PendingAutomated, PendingCancel, WaitingForDetails, Trial, Converted, PendingActivation, Activated |207| Invalid billingTerm | Wrong billing term value | Use one of: monthly, annual, two-year, three-year, one-time, trial, activation |208209### State Transition Errors210211| Current State | Attempted Action | Notes |212|---------------|-----------------|-------|213| Cancelled | Modify quantity | Cannot modify cancelled subscription |214| PendingCancel | Modify quantity | Cannot modify during cancellation |215| PendingManual | Cancel | Cannot cancel during provisioning |216| ActivePendingChange | Modify quantity | Wait for current change to complete |217218## Best Practices2192201. **Check state before modifying** - Always verify the subscription is in `Active` state before making changes2212. **Understand commitment terms** - Annual subscriptions restrict quantity decreases2223. **Optimize regularly** - Review subscriptions monthly to find unused licenses2234. **Use company filter** - Always filter by `companyId` when checking a specific client's subscriptions2245. **Monitor pending states** - Subscriptions in pending states need attention2256. **Plan renewals** - Track end dates and plan renewal conversations with clients2267. **Batch operations carefully** - When checking multiple companies, respect rate limits (1000/min)2278. **Document changes** - Note why quantities were changed in your PSA or documentation2289. **Use billing term filter** - Filter by `billingTerm=monthly` to quickly find candidates for annual commitment savings229230## Related Skills231232- [Pax8 API Patterns](../api-patterns/SKILL.md) - MCP tools reference and connection info233- [Pax8 Companies](../companies/SKILL.md) - Company management234- [Pax8 Products](../products/SKILL.md) - Product catalog and pricing235- [Pax8 Orders](../orders/SKILL.md) - Creating new subscriptions via orders236- [Pax8 Invoices](../invoices/SKILL.md) - Billing for subscriptions