WYRE-AI/msp-claude-plugins/msp-claude-plugins/sherweb/sherweb/skills/api-patterns/SKILL.md
Sherweb API Patterns
Sherweb Partner API fundamentals: OAuth 2.0 client-credentials auth, token caching, subscription-key header, scopes and base URLs, endpoint and MCP tool catalog, page-based pagination, Accept-Language localization, rate limits, and error codes.
- Source repository stars
- 42
- Declared platforms
- 0
- Static risk flags
- 1
- Last source update
- 2026-08-28
- Source checked
- 2026-08-28
Decision brief
What it does: where it fits
Sherweb Partner API fundamentals: OAuth 2. 0 client-credentials auth, token caching, subscription-key header, scopes and base URLs, endpoint and MCP tool catalog, page-based pagination, Accept-Language localization, rate limits, and error codes.
Not for
- Tasks that require unconfirmed production actions or broad system permissions.
- Environments where the pinned source and install steps cannot be inspected.
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/sherweb/sherweb/skills/api-patterns"Inspect the Agent Skill "Sherweb API Patterns" from https://github.com/WYRE-AI/msp-claude-plugins/blob/5005f73ba2f52cd299f58aa6bb79f4e70ae87103/msp-claude-plugins/sherweb/sherweb/skills/api-patterns/SKILL.md at commit 5005f73ba2f52cd299f58aa6bb79f4e70ae87103. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
Anti-triggers
Pax8's request model — the other CSP marketplace here authenticates
Pax8's request model — the other CSP marketplace here authenticatesSherweb tools missing from the client entirely, or a 401 before anyA tool that seems not to exist — this server uses progressive - 02
Authentication
Sherweb uses the OAuth 2.0 client credentials grant for machine-to-machine authentication. No user interaction is required.
Tokens expire after 1 hour (3600 seconds)Cache the token and reuse it until near expiryRequest a new token 5 minutes before expiry to avoid gaps - 03
OAuth 2.0 Client Credentials Flow
Sherweb uses the OAuth 2.0 client credentials grant for machine-to-machine authentication. No user interaction is required.
Tokens expire after 1 hour (3600 seconds)Cache the token and reuse it until near expiryRequest a new token 5 minutes before expiry to avoid gaps - 04
Subscription Key
In addition to the Bearer token, every API request must include the API management subscription key:
In addition to the Bearer token, every API request must include the API management subscription key:This key is obtained from the Sherweb Partner Portal (cumulus.sherweb.com) under Security APIs. - 05
Required Headers
Every API request must include:
Every API request must include:
Permission review
Static risk signals and limitations
Network access
The documentation includes network, browsing, or remote request actions.
POST https://api.sherweb.com/auth/oidc/connect/tokenNetwork access
The documentation includes network, browsing, or remote request actions.
In addition to the Bearer token, every API request must include the API management subscription key:Evidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 96/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 42 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- WYRE-AI/msp-claude-plugins
- Skill path
- msp-claude-plugins/sherweb/sherweb/skills/api-patterns/SKILL.md
- Commit
- 5005f73ba2f52cd299f58aa6bb79f4e70ae87103
- License
- Apache-2.0
- Collected
- 2026-08-28
- Default branch
- main
View the original SKILL.md
Sherweb API Patterns & MCP Tools
Overview
The Sherweb Partner API provides programmatic access to distributor-level operations including customer management, subscription lifecycle, and billing data. The API uses OAuth 2.0 client credentials flow for authentication, requires a subscription key header for API management, and exposes two main scopes: distributor and service-provider. This skill covers authentication, endpoints, MCP tool usage, error handling, and best practices.
Anti-triggers
- Pax8's request model — the other CSP marketplace here authenticates
with a single hosted-MCP token, names tools with hyphens, and paginates
from page 0, against Sherweb's OAuth client-credentials plus
subscription-key header, underscored tool names, and 1-based paging.
Use
pax8-api-patterns. Copying a paging pattern between the two silently changes which records you get. - Sherweb tools missing from the client entirely, or a 401 before any
call succeeds — that is a gateway-connection problem; use
shared-skills-wyre-gateway-troubleshooting. - A tool that seems not to exist — this server uses progressive
disclosure, so domain tools are only visible after
sherweb_navigateorsherweb_list_categories. Check discovery before concluding a capability is missing. Two capabilities really are absent, and no amount of discovery will surface them: billing-period enumeration and invoice retrieval. See the billing tool table below.
Authentication
OAuth 2.0 Client Credentials Flow
Sherweb uses the OAuth 2.0 client credentials grant for machine-to-machine authentication. No user interaction is required.
Token Endpoint:
POST https://api.sherweb.com/auth/oidc/connect/token
Request Parameters:
| Parameter | Value |
|---|---|
grant_type | client_credentials |
client_id | Your Sherweb Client ID |
client_secret | Your Sherweb Client Secret |
scope | distributor or service-provider (see Scopes section) |
Token Response:
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6...",
"expires_in": 3600,
"token_type": "Bearer"
}
Key details:
- Tokens expire after 1 hour (3600 seconds)
- Cache the token and reuse it until near expiry
- Request a new token 5 minutes before expiry to avoid gaps
- The token is sent as a Bearer token in the
Authorizationheader
Subscription Key
In addition to the Bearer token, every API request must include the API management subscription key:
| Header | Value | Description |
|---|---|---|
Ocp-Apim-Subscription-Key | Your subscription key | API management gateway key |
This key is obtained from the Sherweb Partner Portal (cumulus.sherweb.com) under Security > APIs.
Required Headers
Every API request must include:
| Header | Value |
|---|---|
Authorization | Bearer <access_token> |
Ocp-Apim-Subscription-Key | <subscription_key> |
Content-Type | application/json |
Accept | application/json |
Environment Variables
export SHERWEB_CLIENT_ID="your-client-id"
export SHERWEB_CLIENT_SECRET="your-client-secret"
export SHERWEB_SUBSCRIPTION_KEY="your-subscription-key"
export SHERWEB_MCP_URL="https://your-sherweb-mcp-url"
Obtaining Credentials
- Log into the Sherweb Partner Portal at cumulus.sherweb.com
- Navigate to Security > APIs
- Create a new API application or manage existing credentials
- Note your Client ID, Client Secret, and Subscription Key
- Store these securely -- the Client Secret is shown only once
Scopes
Sherweb supports two API scopes that control the level of access:
| Scope | Description | Base URL |
|---|---|---|
distributor | Full distributor-level access to all service providers and their customers | https://api.sherweb.com/distributor/v1 |
service-provider | Scoped to a single service provider (MSP) and their customers | https://api.sherweb.com/service-provider/v1 |
Scope Selection
- Most MSPs use
service-providerscope - This gives access to your own customers and subscriptions - Distributor scope is for organizations that manage multiple service providers (e.g., master agents, holding companies)
- The scope is specified when requesting the OAuth token, not per-request
API Endpoints
Base URLs
| Scope | Base URL |
|---|---|
| Distributor | https://api.sherweb.com/distributor/v1 |
| Service Provider | https://api.sherweb.com/service-provider/v1 |
Key Endpoints
| Endpoint | Method | Description |
|---|---|---|
/customers | GET | List customers |
/customers/{customerId} | GET | Get customer details |
/customers/{customerId}/accounts-receivable | GET | Customer AR data |
/customers/{customerId}/subscriptions | GET | List a customer's subscriptions |
/customers/{customerId}/subscriptions/{subscriptionId} | GET | Get subscription details |
/customers/{customerId}/subscriptions/{subscriptionId}/change-quantity | POST | Change subscription quantity |
/catalog/products | GET | List catalog products |
/payable-charges | GET | Get payable charges for a date range (distributor scope) |
/payable-charges/{chargeId} | GET | Get one charge's breakdown (distributor scope) |
There is no billing-period endpoint and no invoice endpoint behind this connector. See the billing tool table below.
MCP Tool Reference
Customer Tools
| Tool | Description | Parameters |
|---|---|---|
sherweb_customers_list | List and search customers | search, page, pageSize |
sherweb_customers_get | Get a single customer | customerId (required) |
sherweb_customers_accounts_receivable | Get customer AR data | customerId (required) |
Subscription Tools
Every subscription tool is scoped by customer — customerId is required on
all three, because the underlying routes are nested under /customers/{id}.
| Tool | Description | Parameters |
|---|---|---|
sherweb_subscriptions_list | List a customer's subscriptions | customerId (required), page, pageSize |
sherweb_subscriptions_get | Get a single subscription | customerId (required), subscriptionId (required) |
sherweb_subscriptions_change_quantity | Set seat count (absolute, not a delta) | customerId (required), subscriptionId (required), quantity (required) |
Catalog Tools
| Tool | Description | Parameters |
|---|---|---|
sherweb_catalog_list_products | Browse the Sherweb product catalog | search, page, pageSize |
Billing Tools
| Tool | Description | Parameters |
|---|---|---|
sherweb_billing_payable_charges | Get charges for an explicit date range | billingCycleType (OneTime|Monthly|Yearly), periodFrom, periodTo, page, pageSize |
sherweb_billing_charge_details | Get charge breakdown | chargeId (required) |
Billing capabilities this connector does not have. There is no tool that
enumerates billing periods, and no tool that lists or fetches invoices.
sherweb_billing_payable_charges takes the window you give it as
periodFrom/periodTo; you cannot ask which periods exist. For invoices, the
closest surfaces are sherweb_billing_charge_details (line items of one
charge) and sherweb_customers_accounts_receivable (a customer's outstanding
balance) — neither is an invoice, and neither should be presented as one. See
sherweb-billing for the full statement.
Discovery and Dispatch Tools
| Tool | Description | Parameters |
|---|---|---|
sherweb_status | Show credentials status and available domains | — |
sherweb_navigate | Discover tools by domain | domain (required) |
sherweb_list_categories | List tool categories with counts | — |
sherweb_list_category_tools | List a category's tools with full schemas | category (required) |
sherweb_router | Suggest tools for a plain-language intent | intent (required) |
sherweb_execute_tool | Dispatch any Sherweb tool by name | toolName (required) |
Pagination
Page-Based Pagination
All list endpoints use 1-based page pagination:
| Parameter | Description | Default | Max |
|---|---|---|---|
page | Page number (1-based) | 1 | - |
pageSize | Results per page | 25 | 100 |
Pagination Response Metadata:
| Field | Description |
|---|---|
page | Current page number |
pageSize | Number of results per page |
totalCount | Total number of records |
totalPages | Total number of pages |
To iterate: call with page=1 and pageSize=100, read totalPages, then
increment page until page >= totalPages, collecting each response.
Accept-Language Support
The Sherweb API supports localized responses via the Accept-Language header:
| Header | Values | Description |
|---|---|---|
Accept-Language | en, fr | Response language (English or French) |
This is particularly useful since Sherweb is a Canadian company with bilingual support. Product names, descriptions, and error messages can be returned in either language.
Token Caching
Caching strategy:
- Request a token on first API call
- Store the token and its expiry time (
current_time + expires_in) - Reuse the cached token for all subsequent requests
- When the token is within 5 minutes of expiry, request a new one
- Never request a new token for every API call -- this wastes quota and adds latency
Rate Limits
Rate Limit Details
| Metric | Limit |
|---|---|
| Requests per second | Varies by endpoint |
| Requests per minute | Varies by subscription tier |
When rate limited, the API returns a 429 Too Many Requests response with:
| Header | Description |
|---|---|
Retry-After | Seconds to wait before retrying |
Rate limit strategy:
- Implement exponential backoff on 429 responses
- Respect the
Retry-Afterheader when present - Batch related operations to reduce total API calls
- Use maximum
pageSize=100to minimize pagination requests
Error Handling
HTTP Status Codes
| Code | Description | Action |
|---|---|---|
| 200 | Success | Process response |
| 400 | Bad Request | Check request parameters |
| 401 | Unauthorized | Token expired or invalid; re-authenticate |
| 403 | Forbidden | Insufficient scope or permissions |
| 404 | Not Found | Resource does not exist |
| 409 | Conflict | Conflicting operation (e.g., pending change) |
| 429 | Too Many Requests | Rate limited; wait and retry |
| 500 | Internal Server Error | Sherweb server issue; retry with backoff |
| 503 | Service Unavailable | Temporary outage; retry later |
Common Error Responses
Authentication Error (401):
{
"error": "invalid_token",
"error_description": "The access token has expired"
}
Validation Error (400):
{
"errors": [
{
"field": "quantity",
"message": "Quantity must be greater than 0"
}
]
}
Rate Limit (429):
{
"statusCode": 429,
"message": "Rate limit exceeded. Retry after 30 seconds."
}
Troubleshooting
- 401 Unauthorized - Token expired. Request a new token from the token endpoint
- 403 Forbidden - Wrong scope. Verify you requested the correct scope (distributor vs service-provider)
- Missing subscription key - Ensure
Ocp-Apim-Subscription-Keyheader is set - Token request fails - Verify Client ID and Client Secret are correct
- 404 Not Found - Verify the resource ID exists and you have access to it
- Test connectivity - Call
GET /customers?pageSize=1to verify authentication works
Best Practices
- Filter server-side - Use query parameters to narrow results rather than fetching everything
- Set Accept-Language - Include
Accept-Language: en(orfr) for consistent response language
Related Skills
- Sherweb Billing - Payable charges and charge details
- Sherweb Customers - Customer management
- Sherweb Subscriptions - Subscription lifecycle
Frequently asked questions
What to verify before installation and use
What does the Sherweb API Patterns source document cover?
Sherweb Partner API fundamentals: OAuth 2. 0 client-credentials auth, token caching, subscription-key header, scopes and base URLs, endpoint and MCP tool catalog, page-based pagination, Accept-Language localization, rate limits, and error codes.
How do I install Sherweb API Patterns?
The source record exposes this install command: npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/sherweb/sherweb/skills/api-patterns". Inspect the command and pinned source before running it.
Which permission-related actions were detected?
Static rules flagged network in the source; the page lists the matching lines and excerpts.
Alternatives
Compare before choosing
narrative-io/narrative-skills-marketplace
design-analysis
Translate a fuzzy analytical question into a rigorous investigation plan. Interrogates the ask, grounds the plan in the available data dictionary, applies analytical best practices, and produces a structured brief of query specifications for a downstream query-writing skill. Plans, does not write SQL. Use when: "why did X drop", "is there a relationship between A and B", "who are our highest-value customers", "what's driving the change in Y", "investigate this trend", "design an analysis for", "
indranilbanerjee/contentforge
cf-translate
Translate publication-ready ContentForge content into any of 15 languages at three localization levels (literal, adapted, transcreated) — preserving brand voice, keeping citation URLs and DOIs untouched, and adapting SEO keyword placements for the target market — delivered as a translated .docx plus a quality report via the brand's tracking backend. Triggers on "/contentforge:cf-translate", "translate this article to Spanish", "localize this for the German market", "make a French version of this
open-edge-platform/edge-ai-libraries
chatqna-helm-deploy
Deploy Chat Question-and-Answer Core to Kubernetes using Helm (OpenVINO CPU, OpenVINO GPU, or Ollama), including values.yaml configuration, helm install/upgrade, deployment verification, uninstall, and translation from Docker Compose setup_env.sh variables into Helm override values. Use this skill when the user says "deploy chatqna core to kubernetes", "helm install chatqna-core", "configure values.yaml", "convert compose config to helm", or "translate setup_env.sh to chart values".
ffroliva/gflow-cli
pr-council-review
Multi-dimensional LLM council review of an open PR (default) or a local feature branch (§ 8 branch mode, invoked via `/gflow:branch-review`). Five baseline dimensions (correctness, quality, security, tests, memory-hygiene) plus adaptive dimensions per surface (transports / data / CLI / docs / auth / BDD / scripts / release-gate). Each agent invokes specialized skills (security-review, code-review, verify) for its dimension. Reads files via `git show <sha>:<path>` to avoid stale-working-tree fals