wyre-technology/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
- 39
- Declared platforms
- 0
- Static risk flags
- 1
- Last source update
- 2026-08-06
- Source checked
- 2026-08-06
Decision brief
What it does—and 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-technology/msp-claude-plugins --skill "msp-claude-plugins/sherweb/sherweb/skills/api-patterns"Inspect the Agent Skill "Sherweb API Patterns" from https://github.com/wyre-technology/msp-claude-plugins/blob/c1011303bfd2a65abc9b260884d9858d1a482a6f/msp-claude-plugins/sherweb/sherweb/skills/api-patterns/SKILL.md at commit c1011303bfd2a65abc9b260884d9858d1a482a6f. 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 | 39 | 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-technology/msp-claude-plugins
- Skill path
- msp-claude-plugins/sherweb/sherweb/skills/api-patterns/SKILL.md
- Commit
- c1011303bfd2a65abc9b260884d9858d1a482a6f
- License
- Apache-2.0
- Collected
- 2026-08-06
- 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
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", "
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
wshobson/agents
brand-landingpage
Brand-first landing page designer — runs a brand-identity interview (colors, typography, shape language), then generates and iterates on a polished landing page via Stitch with deployment-ready HTML. Use when the user asks to create, design, or build a landing page, homepage, or marketing page and has no established visual direction. Skip when they have a design mockup, need a dashboard or app UI, are working at component level, building a multi-page app, or restyling with known design tokens —
first-fluke/oh-my-agent
oma-docs
Verify documentation references against the current codebase, propose updates for diff-affected docs, detect i18n translation drift, and lint translated docs for CJK style issues. Use to check if docs still match reality (broken file paths, CLI commands, config keys, env vars, scripts), to surface docs that may need updating after code changes, or to find stale or style-broken translations.