providers
Recent failover groups — what was requested versus what served — and advisory observations of unmetered provider surfaces
providers has two read-only subcommands. failovers shows where the SDK's router moved traffic and why. untracked shows which provider surfaces your code reached that Solwyn does not meter. Both accept either credential and require a project.
providers failovers
Group the window's failovers by requested identity and served identity.
solwyn --project <project_id> providers failovers [--range 24h|7d|30d]| Option | Type | Default | Purpose |
|---|---|---|---|
--range | 24h | 7d | 30d | 7d | Aggregation window. Note 24h is available here and 90d is not. |
| Contract | |
|---|---|
| Auth | any |
| Exit codes | 0 success · 1 generic/API · 2 usage · 3 auth · 5 not found |
| JSON schema | solwyn.providers.failovers.v1 |
$ solwyn --project proj_0123456789abcdef01234567 providers failovers
Field Value
Project proj_0123456789abcdef01234567
Range 7d
1 route openai/gpt-5 -> anthropic/claude-sonnet-4
1 reason Primary error
1 error class TimeoutError
1 events 4
1 cost $1.234567
1 first/last 2026-09-01T10:00:00Z / 2026-09-05T12:30:00ZEach group is the pair of the provider and model you asked for and the one that actually served the call. Known reasons are relabeled for humans — Circuit open, Primary error, Model fallback, Cost routed — and unknown reasons pass through verbatim. The error class is the exception type name, never its message. An unpriced group shows unpriced ($0.000000 reported) instead of a bare zero. A -/- requested identity means the API could not attribute one.
The table shows the top 50 groups, and stderr says so: Showing top 50 groups of an unknown total. The JSON payload lists requested_provider, requested_model, served_provider, served_model, failover_reason, failover_error_class, event_count, total_cost_usd, first_seen, last_seen, and is_unpriced per group. See Provider failover for how the SDK decides to move.
providers untracked
Advisory observations of provider surfaces Solwyn does not meter.
solwyn --project <project_id> providers untracked [--range 7d|30d|90d]| Option | Type | Default | Purpose |
|---|---|---|---|
--range | 7d | 30d | 90d | 7d | Observation window, before retention clamping. |
| Contract | |
|---|---|
| Auth | any |
| Exit codes | 0 success · 1 generic/API · 2 usage · 3 auth · 5 not found |
| JSON schema | solwyn.providers.untracked.v1 |
"Untracked" does not mean missing dollars. When the SDK recognizes a client call shape it has no metering rule for, it emits a content-free observation — which provider, client shape, mode, surface, and rule kind — and this command lists them. It tells you where your coverage gap is. The occurrence count is an approximate advisory figure with bounded overcount, and the CLI labels every one as such.
$ solwyn --project proj_0123456789abcdef01234567 providers untracked --range 90d
Field Value
Project proj_0123456789abcdef01234567
Requested window 90 days
Effective window 30 days
Data retention 30 days
1 identity openai | chat.completions | sync | responses | direct
1 capability scope responses.write
1 posture unsupported
1 occurrences 17 (advisory; never billing truth)
1 first/last 2026-08-15T10:00:00Z / 2026-09-05T12:30:00ZThe effective window is the requested window clamped to your plan's data retention. The CLI reads the retention from your billing status before the query; if that read fails, both rows show unknown rather than a guess. The table shows the top 25 observations, and stderr says so.
See Surface coverage for how the SDK classifies every provider surface, and for the on_unmetered posture that decides what happens when your code reaches one.
Related
status— per-provider circuit state and failover counts, with--failoversto include the top groupscosts— filter spend by--failover-reasonor--provider-fallback- Provider failover — the SDK's routing and circuit breakers