Sherweb Subscription Management
Overview
Subscriptions in Sherweb represent active cloud product licenses assigned to a customer through the distributor platform. When the MSP provisions a product for a customer via Sherweb, a subscription is created that tracks the product, quantity (seats/licenses), billing cycle, and status. Subscriptions are the core ongoing entity that MSPs manage -- adjusting seat counts as clients grow or contract, monitoring provisioning status, and ensuring license compliance.
Anti-triggers
- Licences bought through Pax8 — the other CSP marketplace in this
marketplace. Same concepts, different account, no shared IDs; use
pax8-subscriptions. Establish which distributor holds the product
before touching a seat count, because only this skill's tool can change
one and it changes it for real.
- A licence assigned to a named user — Sherweb tracks what the MSP
purchased; who it is assigned to lives in the tenant. Use
m365-licensing or cipp-licenses. Purchased and assigned seat counts
legitimately differ.
- What the change will cost — the charge for a mid-period quantity
change is prorated and net of deductions, so it is not the list price
times the delta. Use
sherweb-billing.
- Removing a user's access rather than a seat — dropping a Sherweb
quantity deprovisions licences bluntly. Offboarding a person is a tenant
operation; use
cipp-users or m365-users.
MCP Tools
Available Tools
| Tool |
Description |
Key Parameters |
sherweb_subscriptions_list |
List subscriptions, optionally filtered by customer |
customerId, page, pageSize, status |
sherweb_subscriptions_get |
Get detailed information about a specific subscription |
subscriptionId (required) |
sherweb_subscriptions_change_quantity |
Change the seat/license quantity on a subscription |
subscriptionId (required), quantity (required) |
List Subscriptions
Call sherweb_subscriptions_list with optional parameters:
- Filter by customer: Set
customerId to a customer ID
- Filter by status: Set
status to one of the allowed values (see below)
- Paginate: Set
page (1-based) and pageSize (default 25)
Example: List all active subscriptions for a customer:
sherweb_subscriptions_list with customerId=cust-abc-123, status=Active, pageSize=100
Example: List all subscriptions across all customers:
sherweb_subscriptions_list with pageSize=100
Get Subscription Details
Call sherweb_subscriptions_get with the subscriptionId parameter.
Example:
sherweb_subscriptions_get with subscriptionId=sub-def-456
Change Subscription Quantity
Call sherweb_subscriptions_change_quantity with:
- Required:
subscriptionId - the subscription to modify
- Required:
quantity - the new desired quantity (absolute number, not a delta)
Example: Increase seats from 25 to 30:
sherweb_subscriptions_change_quantity with subscriptionId=sub-def-456, quantity=30
Key Concepts
Subscription Lifecycle
Provisioning --> Active --> [Modify Quantity / Cancel] --> Cancelled
| |
Suspended PendingChange
|
Reactivated --> Active
Subscription States
| State |
Description |
Active |
Subscription is live, provisioned, and billing |
Suspended |
Subscription temporarily paused (payment or compliance issue) |
Cancelled |
Subscription has been terminated |
Provisioning |
Initial setup in progress |
PendingChange |
A quantity or configuration change is being processed |
PendingCancellation |
Cancellation request submitted, not yet complete |
Failed |
Provisioning or modification failed |
Quantity Management
The quantity field represents the number of licenses (seats, devices, or units depending on the product). Key rules:
- Increasing quantity - Generally immediate or near-immediate provisioning
- Decreasing quantity - May be restricted by vendor commitment terms or minimum quantities
- Quantity is absolute - When changing, specify the new total quantity, not the delta
- Proration - Mid-cycle changes are prorated in the next billing period
- Minimum quantity - Some products have minimum seat requirements
- Maximum quantity - Some products have maximum seat limits
Quantity Change Workflow
- Verify current state - Ensure subscription is
Active (not Suspended, PendingChange, etc.)
- Check current quantity - Call
sherweb_subscriptions_get to see the current seat count
- Validate new quantity - Ensure the new quantity meets product minimum/maximum requirements
- Submit change - Call
sherweb_subscriptions_change_quantity with the new quantity
- Verify change - Call
sherweb_subscriptions_get again to confirm the change was applied
- Monitor billing - Check the next billing period for prorated charges reflecting the change
Field Reference
Subscription Fields
| Field |
Type |
Description |
id |
string |
Subscription unique identifier |
customerId |
string |
Customer this subscription belongs to |
customerName |
string |
Customer display name |
productName |
string |
Product or SKU name |
productId |
string |
Product identifier |
quantity |
integer |
Current number of licenses/seats |
status |
string |
Current subscription state |
billingCycle |
string |
Billing frequency (Monthly, Yearly) |
startDate |
date |
Subscription start date |
endDate |
date |
Subscription end date (for term commitments) |
renewalDate |
date |
Next renewal date |
createdDate |
datetime |
When the subscription was created |
modifiedDate |
datetime |
Last modification timestamp |
autoRenew |
boolean |
Whether the subscription auto-renews |
Quantity Change Response Fields
| Field |
Type |
Description |
subscriptionId |
string |
Subscription that was modified |
previousQuantity |
integer |
Quantity before the change |
newQuantity |
integer |
Quantity after the change |
status |
string |
Change status (Completed, Pending, Failed) |
effectiveDate |
date |
When the change takes effect |
Common Workflows
Check Subscriptions for a Customer
- Find the customer ID using
sherweb_customers_list with search
- Call
sherweb_subscriptions_list with customerId and status=Active
- Review subscription list with product names, quantities, and billing cycles
License Count Audit
- Call
sherweb_customers_list to get all customers (paginate through all pages)
- For each customer, call
sherweb_subscriptions_list with customerId and status=Active
- Build a report: customer name, product, quantity, billing cycle
- Cross-reference with actual usage data from the vendor (e.g., Microsoft 365 admin center)
- Flag over-provisioned subscriptions for quantity reduction
Increase Seats for a Customer
- Find the subscription with
sherweb_subscriptions_list filtered by customerId
- Verify the subscription is
Active and note the current quantity
- Call
sherweb_subscriptions_change_quantity with the new (higher) quantity
- Verify the change with
sherweb_subscriptions_get
- Confirm billing impact in the next period's payable charges
Decrease Seats for a Customer
- Find the subscription and verify current quantity
- Check if the product has minimum quantity requirements
- Verify commitment terms allow decreases (annual commitments may restrict decreases)
- Call
sherweb_subscriptions_change_quantity with the new (lower) quantity
- If the change is rejected, note the error and inform the customer of restrictions
- Verify the change and monitor billing for prorated credits
Subscription Renewal Review
- Call
sherweb_subscriptions_list with status=Active
- Filter for subscriptions with
renewalDate within the next 30 days
- For each upcoming renewal, prepare a review list: customer, product, quantity, cost
- Discuss with customers whether to renew, modify, or cancel
Subscription Status Report
- Call
sherweb_subscriptions_list with pageSize=100 (no status filter to get all)
- Group results by status and calculate totals
- Present: Active count, Suspended count, Pending changes, recent cancellations
Response Examples
Subscription:
{
"id": "sub-def-456",
"customerId": "cust-abc-123",
"customerName": "Acme Corporation",
"productName": "Microsoft 365 Business Premium",
"productId": "prod-m365-bp",
"quantity": 25,
"status": "Active",
"billingCycle": "Monthly",
"startDate": "2025-06-01",
"endDate": null,
"renewalDate": "2026-04-01",
"createdDate": "2025-05-28T14:30:00.000Z",
"modifiedDate": "2026-02-15T09:00:00.000Z",
"autoRenew": true
}
Quantity Change Response:
{
"subscriptionId": "sub-def-456",
"previousQuantity": 25,
"newQuantity": 30,
"status": "Completed",
"effectiveDate": "2026-03-10"
}
Error Handling
Common Errors
| Error |
Cause |
Resolution |
| Subscription not found |
Invalid subscriptionId |
Verify the ID with sherweb_subscriptions_list |
| Invalid quantity |
Below minimum or above maximum |
Check product requirements for quantity limits |
| Cannot modify |
Subscription not in Active state |
Verify subscription status before attempting changes |
| Quantity decrease restricted |
Annual commitment prevents decrease |
Wait for renewal period or contact Sherweb support |
| Change already pending |
A previous change is still processing |
Wait for the pending change to complete before submitting another |
| Authentication error |
Expired or invalid token |
Re-authenticate using OAuth 2.0 client credentials flow |
State Transition Errors
| Current State |
Attempted Action |
Notes |
| Cancelled |
Change quantity |
Cannot modify cancelled subscriptions |
| Suspended |
Change quantity |
Resolve suspension before modifying |
| Provisioning |
Change quantity |
Wait for provisioning to complete |
| PendingChange |
Change quantity |
Wait for current change to finish |
| PendingCancellation |
Change quantity |
Cannot modify during cancellation |
Best Practices
- Understand commitment terms - Annual or multi-year commitments restrict quantity decreases
- Monitor pending states - Subscriptions in pending states need follow-up attention
- Track quantity history - Document quantity changes for audit purposes
- Optimize regularly - Monthly review of seat counts vs actual usage prevents waste
Related Skills
1---2name: sherweb-subscriptions3description: Sherweb subscription management: the subscription lifecycle and its states, seat/license quantity rules (absolute values, minimums, proration, commitment restrictions), the quantity-change workflow, subscription and change-response fields, and state-transition errors.4---56# Sherweb Subscription Management78## Overview910Subscriptions in Sherweb represent active cloud product licenses assigned to a customer through the distributor platform. When the MSP provisions a product for a customer via Sherweb, a subscription is created that tracks the product, quantity (seats/licenses), billing cycle, and status. Subscriptions are the core ongoing entity that MSPs manage -- adjusting seat counts as clients grow or contract, monitoring provisioning status, and ensuring license compliance.1112## Anti-triggers1314- **Licences bought through Pax8** — the other CSP marketplace in this15 marketplace. Same concepts, different account, no shared IDs; use16 `pax8-subscriptions`. Establish which distributor holds the product17 before touching a seat count, because only this skill's tool can change18 one and it changes it for real.19- **A licence assigned to a named user** — Sherweb tracks what the MSP20 *purchased*; who it is *assigned to* lives in the tenant. Use21 `m365-licensing` or `cipp-licenses`. Purchased and assigned seat counts22 legitimately differ.23- **What the change will cost** — the charge for a mid-period quantity24 change is prorated and net of deductions, so it is not the list price25 times the delta. Use `sherweb-billing`.26- **Removing a user's access rather than a seat** — dropping a Sherweb27 quantity deprovisions licences bluntly. Offboarding a person is a tenant28 operation; use `cipp-users` or `m365-users`.2930## MCP Tools3132### Available Tools3334| Tool | Description | Key Parameters |35|------|-------------|----------------|36| `sherweb_subscriptions_list` | List subscriptions, optionally filtered by customer | `customerId`, `page`, `pageSize`, `status` |37| `sherweb_subscriptions_get` | Get detailed information about a specific subscription | `subscriptionId` (required) |38| `sherweb_subscriptions_change_quantity` | Change the seat/license quantity on a subscription | `subscriptionId` (required), `quantity` (required) |3940### List Subscriptions4142Call `sherweb_subscriptions_list` with optional parameters:4344- **Filter by customer:** Set `customerId` to a customer ID45- **Filter by status:** Set `status` to one of the allowed values (see below)46- **Paginate:** Set `page` (1-based) and `pageSize` (default 25)4748**Example: List all active subscriptions for a customer:**49- `sherweb_subscriptions_list` with `customerId=cust-abc-123`, `status=Active`, `pageSize=100`5051**Example: List all subscriptions across all customers:**52- `sherweb_subscriptions_list` with `pageSize=100`5354### Get Subscription Details5556Call `sherweb_subscriptions_get` with the `subscriptionId` parameter.5758**Example:**59- `sherweb_subscriptions_get` with `subscriptionId=sub-def-456`6061### Change Subscription Quantity6263Call `sherweb_subscriptions_change_quantity` with:6465- **Required:** `subscriptionId` - the subscription to modify66- **Required:** `quantity` - the new desired quantity (absolute number, not a delta)6768**Example: Increase seats from 25 to 30:**69- `sherweb_subscriptions_change_quantity` with `subscriptionId=sub-def-456`, `quantity=30`7071## Key Concepts7273### Subscription Lifecycle7475```76Provisioning --> Active --> [Modify Quantity / Cancel] --> Cancelled77 | |78 Suspended PendingChange79 |80 Reactivated --> Active81```8283### Subscription States8485| State | Description |86|-------|-------------|87| `Active` | Subscription is live, provisioned, and billing |88| `Suspended` | Subscription temporarily paused (payment or compliance issue) |89| `Cancelled` | Subscription has been terminated |90| `Provisioning` | Initial setup in progress |91| `PendingChange` | A quantity or configuration change is being processed |92| `PendingCancellation` | Cancellation request submitted, not yet complete |93| `Failed` | Provisioning or modification failed |9495### Quantity Management9697The `quantity` field represents the number of licenses (seats, devices, or units depending on the product). Key rules:9899- **Increasing quantity** - Generally immediate or near-immediate provisioning100- **Decreasing quantity** - May be restricted by vendor commitment terms or minimum quantities101- **Quantity is absolute** - When changing, specify the new total quantity, not the delta102- **Proration** - Mid-cycle changes are prorated in the next billing period103- **Minimum quantity** - Some products have minimum seat requirements104- **Maximum quantity** - Some products have maximum seat limits105106### Quantity Change Workflow1071081. **Verify current state** - Ensure subscription is `Active` (not Suspended, PendingChange, etc.)1092. **Check current quantity** - Call `sherweb_subscriptions_get` to see the current seat count1103. **Validate new quantity** - Ensure the new quantity meets product minimum/maximum requirements1114. **Submit change** - Call `sherweb_subscriptions_change_quantity` with the new quantity1125. **Verify change** - Call `sherweb_subscriptions_get` again to confirm the change was applied1136. **Monitor billing** - Check the next billing period for prorated charges reflecting the change114115## Field Reference116117### Subscription Fields118119| Field | Type | Description |120|-------|------|-------------|121| `id` | string | Subscription unique identifier |122| `customerId` | string | Customer this subscription belongs to |123| `customerName` | string | Customer display name |124| `productName` | string | Product or SKU name |125| `productId` | string | Product identifier |126| `quantity` | integer | Current number of licenses/seats |127| `status` | string | Current subscription state |128| `billingCycle` | string | Billing frequency (Monthly, Yearly) |129| `startDate` | date | Subscription start date |130| `endDate` | date | Subscription end date (for term commitments) |131| `renewalDate` | date | Next renewal date |132| `createdDate` | datetime | When the subscription was created |133| `modifiedDate` | datetime | Last modification timestamp |134| `autoRenew` | boolean | Whether the subscription auto-renews |135136### Quantity Change Response Fields137138| Field | Type | Description |139|-------|------|-------------|140| `subscriptionId` | string | Subscription that was modified |141| `previousQuantity` | integer | Quantity before the change |142| `newQuantity` | integer | Quantity after the change |143| `status` | string | Change status (Completed, Pending, Failed) |144| `effectiveDate` | date | When the change takes effect |145146## Common Workflows147148### Check Subscriptions for a Customer1491501. Find the customer ID using `sherweb_customers_list` with `search`1512. Call `sherweb_subscriptions_list` with `customerId` and `status=Active`1523. Review subscription list with product names, quantities, and billing cycles153154### License Count Audit1551561. Call `sherweb_customers_list` to get all customers (paginate through all pages)1572. For each customer, call `sherweb_subscriptions_list` with `customerId` and `status=Active`1583. Build a report: customer name, product, quantity, billing cycle1594. Cross-reference with actual usage data from the vendor (e.g., Microsoft 365 admin center)1605. Flag over-provisioned subscriptions for quantity reduction161162### Increase Seats for a Customer1631641. Find the subscription with `sherweb_subscriptions_list` filtered by `customerId`1652. Verify the subscription is `Active` and note the current `quantity`1663. Call `sherweb_subscriptions_change_quantity` with the new (higher) quantity1674. Verify the change with `sherweb_subscriptions_get`1685. Confirm billing impact in the next period's payable charges169170### Decrease Seats for a Customer1711721. Find the subscription and verify current quantity1732. Check if the product has minimum quantity requirements1743. Verify commitment terms allow decreases (annual commitments may restrict decreases)1754. Call `sherweb_subscriptions_change_quantity` with the new (lower) quantity1765. If the change is rejected, note the error and inform the customer of restrictions1776. Verify the change and monitor billing for prorated credits178179### Subscription Renewal Review1801811. Call `sherweb_subscriptions_list` with `status=Active`1822. Filter for subscriptions with `renewalDate` within the next 30 days1833. For each upcoming renewal, prepare a review list: customer, product, quantity, cost1844. Discuss with customers whether to renew, modify, or cancel185186### Subscription Status Report1871881. Call `sherweb_subscriptions_list` with `pageSize=100` (no status filter to get all)1892. Group results by status and calculate totals1903. Present: Active count, Suspended count, Pending changes, recent cancellations191192## Response Examples193194**Subscription:**195196```json197{198 "id": "sub-def-456",199 "customerId": "cust-abc-123",200 "customerName": "Acme Corporation",201 "productName": "Microsoft 365 Business Premium",202 "productId": "prod-m365-bp",203 "quantity": 25,204 "status": "Active",205 "billingCycle": "Monthly",206 "startDate": "2025-06-01",207 "endDate": null,208 "renewalDate": "2026-04-01",209 "createdDate": "2025-05-28T14:30:00.000Z",210 "modifiedDate": "2026-02-15T09:00:00.000Z",211 "autoRenew": true212}213```214215**Quantity Change Response:**216217```json218{219 "subscriptionId": "sub-def-456",220 "previousQuantity": 25,221 "newQuantity": 30,222 "status": "Completed",223 "effectiveDate": "2026-03-10"224}225```226227## Error Handling228229### Common Errors230231| Error | Cause | Resolution |232|-------|-------|------------|233| Subscription not found | Invalid `subscriptionId` | Verify the ID with `sherweb_subscriptions_list` |234| Invalid quantity | Below minimum or above maximum | Check product requirements for quantity limits |235| Cannot modify | Subscription not in Active state | Verify subscription status before attempting changes |236| Quantity decrease restricted | Annual commitment prevents decrease | Wait for renewal period or contact Sherweb support |237| Change already pending | A previous change is still processing | Wait for the pending change to complete before submitting another |238| Authentication error | Expired or invalid token | Re-authenticate using OAuth 2.0 client credentials flow |239240### State Transition Errors241242| Current State | Attempted Action | Notes |243|---------------|-----------------|-------|244| Cancelled | Change quantity | Cannot modify cancelled subscriptions |245| Suspended | Change quantity | Resolve suspension before modifying |246| Provisioning | Change quantity | Wait for provisioning to complete |247| PendingChange | Change quantity | Wait for current change to finish |248| PendingCancellation | Change quantity | Cannot modify during cancellation |249250## Best Practices2512521. **Understand commitment terms** - Annual or multi-year commitments restrict quantity decreases2532. **Monitor pending states** - Subscriptions in pending states need follow-up attention2543. **Track quantity history** - Document quantity changes for audit purposes2554. **Optimize regularly** - Monthly review of seat counts vs actual usage prevents waste256257## Related Skills258259- [Sherweb API Patterns](../api-patterns/SKILL.md) - Authentication, endpoints, and rate limits260- [Sherweb Customers](../customers/SKILL.md) - Customer management and hierarchy261- [Sherweb Billing](../billing/SKILL.md) - Billing impact of subscription changes