10 - Built-in providers¶
The built-in provider packages of v0.1.0. Each section was checked against the vendor documentation (and, for the Teltonika packages, the real platforms) in November 2026; each package README cites the source of every declared limit.
| Package | Kind of API | Testing | What it validates |
|---|---|---|---|
teltonika-rms |
Cloud, central | Real platform (maintainer access) + simulator | The whole pipeline against a real platform |
teltonika-rutos |
Local device API, multi-target, session auth | Real devices + simulator | Validates multi-target accounts and session_login |
meraki-dashboard |
Cloud, per-org rate limits, Link pagination | Simulator only (docs + public OpenAPI spec) | Validates scoped rate limits and discovery chains |
aruba-central-classic |
Cloud, daily quota, rotating refresh tokens | Simulator only (docs) | Validates quota windows, header sync, auth plugin |
teltonika-rms¶
Teltonika Remote Management System, cloud API. Checked in November 2026 against the API documentation, its OpenAPI description (version 3.0.0, "v3-BETA": additive changes that may still break clients) and the real platform.
- Auth: personal access token (created under Account settings > API, requires 2FA, shown once) as
Authorization: Bearer <token>, scopedevices:read(authentication, scopes). OAuth (authorization code with PKCE) exists for multi-user apps; not needed. - Base URL:
https://api.rms.teltonika-networks.com(the OpenAPI servers entryhttps://rms.teltonika-networks.com/apiserves the same API). No version segment. - Rate limits: documented as 100 000 requests per month per application,
429withRetry-After. Measured on the platform (2026-11-03): every response carriesX-RateLimit-Limit(100000),X-RateLimit-RemainingandX-RateLimit-Reset(epoch seconds), and the reset was one month after the first request of the window, not a calendar month. Declared as amonthquota withmax: autosynced from the three headers (the reset header sets the window end), plus a conservativerate: 2/s(assumed, none documented). - Pagination:
offset/limit(default 10, no documented maximum: the templates use 100), total inmeta.total. Lists acceptfields=to select fields and filters such asstatus=online. - Envelope:
{"success": true, "data": [...], "meta": {"total": N}}; errors{"success": false, "errors": [{"code": "UNAUTHORIZED", "message": "..."}]}. Timestamps areYYYY-MM-DD HH:MM:SSstrings in UTC. - Templates (metrics in the package README):
rms-devices(GET /devices, inventory and metrics in one paginated call, the mobile signal of the first modem included, so no per-device call is needed);rms-device-data-usage(GET /devices/{id}/data-usage, one call per device, 6h interval; the README gives the monthly cost per device).- Freshness: RMS data is as fresh as each device reports it (
dynamic_monitoring, often 300 s); polling faster than that only spends quota. - Deliverables: provider package, simulator fixtures built from anonymized recordings (
tapyr record), dashboard, e2e test behind thee2ebuild tag.
teltonika-rutos¶
Local REST API of Teltonika routers running RutOS. Checked in November 2026 against the RutOS API documentation (OpenAPI descriptions per firmware, from 7.6 to 7.26.1).
- Firmware: the REST API exists from RutOS 07.06 (Teltonika community); the package targets 07.06 and later. Base path
/api(the latest API version;/api/v1pins it). The legacy ubus JSON-RPC API is not supported. - Auth:
POST /api/loginwith{"username": ..., "password": ...}answers{"success": true, "data": {"username": ..., "token": ..., "expires": 299}}; the token is a bearer token valid 5 minutes by default (api_session_timeout).POST /api/logoutcloses the session: RutOS keeps expired sessions open and its memory grows when a client logs in repeatedly (Teltonika community), so the package declareslogout. Implemented withsession_login,perTarget: true. A dedicated user in a group with read access only is recommended. - TLS: HTTPS with a self-signed certificate is the default from 07.12 (RUTX) and 07.15 (other models); accounts use
tls.caFileor, explicitly,tls.insecureSkipVerify. - Rate limits: none documented; devices are resource-constrained. Declared:
concurrency: 2andrate: 2/sper target (assumed). - Envelope:
{"success": true, "data": ...}; errors{"success": false, "errors": [{"code": 120, "error": "...", "source": "...", "section": "..."}]}(120 unauthorized, 121 login failed). Payloads may change between firmware versions; templates read current field names with fallbacks to the 7.6 names (signal,oper,state). - Multi-target: one Account lists the routers as targets.
- Templates (metrics in the package README):
rutos-device(GET /api/system/device/status, 30m): model, firmware and names asrutos_device_info;rutos-system(GET /api/system/device/usage/status);rutos-modems(GET /api/modems/status);rutos-interfaces(GET /api/interfaces/status);rutos-failover(GET /api/failover/status).- Deliverables: provider package, fixtures from anonymized recordings, dashboard, e2e test.
meraki-dashboard¶
Cisco Meraki Dashboard API v1. Checked in November 2026 against the developer documentation and the official OpenAPI description (v1.75.1).
- Auth: API key as
Authorization: Bearer <key>(authorization). - Base URL:
https://api.meraki.com/api/v1; regional variantsapi.meraki.ca,api.meraki.cn,api.meraki.in,api.gov-meraki.com(account parambaseURL). - Rate limits (rate limit):
- per organization: 10 requests per second, token bucket, with 10 more allowed in the first second (30 in two seconds), shared by every application of the organization:
rate: 10/s,burst: 20, scoped byvar:organizationIdon the organization endpoints; - per source IP: 100 requests per second, shared by every client on the address:
rate: 100/sper instance; - concurrency: not documented officially (10 per IP is community knowledge):
concurrency: 10per instance, marked assumed; 429withRetry-After, body{"errors": ["API rate limit exceeded for organization"]}; no quota headers.- Pagination:
Linkheader (RFC 8288) withperPage; thestartingAfterandendingBeforetokens are opaque, therel=nextlink is followed (pagination). - Discovery chain: organizations -> organization-wide endpoints (one call for every device of an organization), networks only for
_infolabels. - Templates (metrics in the package README):
meraki-organizations(inventory,GET /organizations);meraki-networks(forEachorganizations,GET /organizations/{organizationId}/networks);meraki-devices(GET /organizations/{organizationId}/devices);meraki-device-availabilities(GET /organizations/{organizationId}/devices/availabilities). It replacesdevices/statuses, deprecated in October 2024 (deprecated operations);meraki-appliance-uplink-statuses(GET /organizations/{organizationId}/appliance/uplink/statuses);meraki-wireless-client-counts(GET /organizations/{organizationId}/wireless/clients/overview/byDevice, an enveloped list underitems).- Deliverables: provider package, synthetic simulator (inventory generator sized by config), fixtures derived from the OpenAPI examples, dashboard, contract tests. No e2e test (no access); the README states clearly that the package is simulator-validated only and invites community validation.
aruba-central-classic¶
HPE Aruba Networking Central (classic platform) REST API. Checked in November 2026 against the Aruba developer hub and the official pycentral SDK.
- Auth: OAuth access tokens valid 2 hours and rotating refresh tokens valid 15 days, implemented by the
aruba_central_classicauth plugin (see05-collection.md). Bootstrap: client ID and secret of an API Gateway application and the token pair downloaded from API Gateway > System Apps & Tokens (or My Apps & Tokens). - Base URL: regional API gateway (account param
baseURL, required), for examplehttps://apigw-eucentral3.central.arubanetworks.com; the README lists the clusters. A token only works on the gateway of its cluster. - Rate limits (usage and rate limits):
- per account, per second: 7 calls (429 when exceeded);
- per account, per day: the maximum of 5000 and the sum of 30 calls per Foundation device and 90 per Advanced device; resets at midnight GMT;
- response headers
X-RateLimit-Limit-day,X-RateLimit-Remaining-day,X-RateLimit-Limit-second,X-RateLimit-Remaining-second; noRetry-Afterdocumented; - token creation is limited to one per client ID every 30 minutes for the login and authorization-code APIs; the refresh API has no documented limit;
- declared as
kind: quota,period: day,resetAt: "00:00",timezone: UTC,max: auto(initialMax: 5000) withsyncheaders, pluskind: rate7/sper account. - Pagination:
offset/limit, maximum 1000 on the monitoring lists,totalonly withcalculate_total=true. - Budget strategy: the daily quota is the binding constraint. List endpoints with 1000 items per page; no per-device endpoint; inventory jobs with long intervals.
tapyr planmakes the cost visible. - Templates (metrics in the package README):
aruba-aps(GET /monitoring/v2/aps?calculate_client_count=true: the client count comes with the list, at no extra cost);aruba-switches(GET /monitoring/v1/switches);aruba-gateways(GET /monitoring/v1/gateways);aruba-sites(inventory,GET /central/v2/sites).- Deliverables: provider package, synthetic simulator enforcing 7/s and the daily quota with headers,
quota-tightscenario, dashboard, contract tests. No e2e test (no access).
Note on Aruba Central "new" (GreenLake-based)¶
The newer HPE Aruba Networking Central platform uses a different API surface and OAuth client credentials through HPE GreenLake. It will be a separate provider package (aruba-central), after v0.1.0. Its client-credentials auth should work with the declarative oauth2_client_credentials type, which is a good sign for the abstraction.
Provider package checklist (definition of done)¶
- [ ]
provider.yamlwith every limit sourced (link in README) or marked as measured/assumed. - [ ] Job templates with
estimate.pagesPerRunhints. - [ ] Simulator: routes, fixtures (synthetic or anonymized recordings),
default,quota-tightandbad-dayscenarios. - [ ] Contract tests passing (
tapyr provider lint). - [ ] Dashboard in
dashboards/. - [ ] Example Account and Job documents in
examples/. - [ ] README: coverage, auth setup steps, limits with sources, validation status (real platform or simulator only), known caveats.
- [ ] Metric naming reviewed:
<provider_prefix>_<object>_<measure>_<unit>, base units,_infofor descriptive attributes, no high-cardinality labels (no client MACs).