Sherweb Subscriptions — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Sherweb Subscriptions (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
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.
purchased; who it is assigned to lives in the tenant. Use m365-licensing or cipp-licenses. Purchased and assigned seat counts legitimately differ.
change is prorated and net of deductions, so it is not the list price times the delta. Use sherweb-billing.
quantity deprovisions licences bluntly. Offboarding a person is a tenant operation; use cipp-users or m365-users.
| 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) |
Call sherweb_subscriptions_list with optional parameters:
customerId to a customer IDstatus to one of the allowed values (see below)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=100Example: List all subscriptions across all customers:
sherweb_subscriptions_list with pageSize=100Call sherweb_subscriptions_get with the subscriptionId parameter.
Example:
sherweb_subscriptions_get with subscriptionId=sub-def-456Call sherweb_subscriptions_change_quantity with:
subscriptionId - the subscription to modifyquantity - 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=30Provisioning --> Active --> [Modify Quantity / Cancel] --> Cancelled
| |
Suspended PendingChange
|
Reactivated --> Active| 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 |
The quantity field represents the number of licenses (seats, devices, or units depending on the product). Key rules:
Active (not Suspended, PendingChange, etc.)sherweb_subscriptions_get to see the current seat countsherweb_subscriptions_change_quantity with the new quantitysherweb_subscriptions_get again to confirm the change was applied| 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 |
| 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 |
sherweb_customers_list with searchsherweb_subscriptions_list with customerId and status=Activesherweb_customers_list to get all customers (paginate through all pages)sherweb_subscriptions_list with customerId and status=Activesherweb_subscriptions_list filtered by customerIdActive and note the current quantitysherweb_subscriptions_change_quantity with the new (higher) quantitysherweb_subscriptions_getsherweb_subscriptions_change_quantity with the new (lower) quantitysherweb_subscriptions_list with status=ActiverenewalDate within the next 30 dayssherweb_subscriptions_list with pageSize=100 (no status filter to get all)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 | 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 |
| 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 |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.