n8vDocs

Limits and fallback per model

A Claude subscription limits Fable, Opus, Sonnet and Haiku separately. How n8v keeps the other models running when one is out, and what a chat does next

On a Claude subscription, Fable can be out while Opus still runs. Claude Code then ends the turn with "You're out of usage credits. Switch to another model, ..." and names no reset. n8v used to read that as a limit on the whole subscription and held all of it out for an hour, so chats on Opus stopped too.

With limits per model, n8v holds out only that model, on that subscription.

SubscriptionFableOpusSonnetHaiku
Claude #8activelimit reachedrunsrunsruns
Claude #6auto-switch onrunsrunsrunsruns
Fable is out on Claude #8. Opus, Sonnet and Haiku still run there, and Fable still runs on Claude #6. Before, n8v held out the whole of Claude #8 for an hour.

Being rolled out per account with the modelFamilyLimits flag, off by default. It builds on limit recovery. With the flag off, a model's limit holds out the whole subscription, as before.

What n8v knows, and from where

Anthropic's usage endpoint reports two windows per subscription, the 5-hour and the weekly one. It reports nothing per model. So the only signal that a model is out is the message Claude Code ends the turn with, and n8v treats that message as the truth:

Claude Code saysn8v holds out
"You're out of usage credits. Switch to another model, ..."The model of that turn, on that subscription
"Opus weekly limit reached", "You've hit your Fable limit", "You've reached your Fable limit"The model it names, on that subscription
"You've hit your weekly limit", "5-hour limit reached"The whole subscription, as before

Models are grouped by family: every Fable version and effort level shares the Fable limit, and the same goes for Opus, Sonnet and Haiku.

When the message names a reset, n8v waits for it. When it names none, n8v asks again after an hour. If the model is still out, the next wait is two hours, then four, then eight. Asking costs one refused turn of one chat. Ten chats that run into the same limit count as one limit: the wait does not grow with them.

What a chat does at a model's limit

  1. The same model on another subscription

    The chat's next turn runs on a subscription that has room for that model. The active subscription does not change, so chats on other models stay where they are.

    Needs: Auto-switch on for that subscription

  2. Another Claude model

    The chat continues on the model you chose for its family, at the same effort: Fable 5.2 High continues as Opus 5.5 High. If that model runs out too, the chat follows that model's rule.

    Needs: Continue on another model, in Settings, Agent

  3. Another provider

    The cross-provider fallback takes over with the whole conversation, as it does when every Claude account is at its limit.

    Needs: Continue on another provider, in Settings, Agent

  4. Wait, with a time

    The chat waits for the reset the provider named. If it named none, n8v asks again after an hour, then after two, four and eight.

    Needs: Nothing: this is what is left

n8v takes the first step that is possible and switched on. A chat with a pinned model skips the second and third.

The first step never changes your active subscription. Only the turns of the model that is out run elsewhere; the chat says so:

Fable limit reached on Claude #8. Continuing on Claude #6, which has room for Fable.

n8v only ever uses a subscription you opted in for auto-switch. One that has room but is not opted in is left alone.

Continue on another model

In Settings, Agent, under When a model's limit is reached, switch on Continue on another model. It is off until you choose. There is one rule per family:

Chats onContinue on, by default
FableOpus 5.5
OpusSonnet 5.5
SonnetNo other model
HaikuNo other model

Effort carries over. The chat shows where it moved, and a Fallback badge beside its model says when it goes home:

Fable limit reached on Claude #8. Continuing on Opus 5.5 High, and back on Fable 5.2 High once it has room.

Rules chain. With the defaults, a Fable chat that fell back to Opus and then meets an Opus limit continues on Sonnet. Home stays Fable throughout.

Going home

At the start of every turn n8v checks whether the chat's own model has room again, on the active subscription or on one you opted in. If it has, that turn runs on it:

Fable has room again. Back on Fable 5.2 High.

Three things change that. Pin its model (the chat menu, or modelPinned over the API) and it neither falls back nor returns by itself; it can still run on another subscription, because that does not change its model. Pick a model of another family yourself and the fallback ends there. Switch the setting off and each chat returns to its own model at its next turn, says so, and waits for it there.

A message you queued while the chat stood on the fallback goes home with it: the turn runs on the model the chat's last line names, not on the one the composer showed when you wrote it.

A chat that another provider's limit moved onto Claude keeps that fallback. If its Claude model runs out, n8v only tries another subscription for the same model; after that the chat goes back to its own provider or waits.

Where you see it

  • The chat: the lines quoted above, and the Fallback badge.
  • The Quota page: a chip on the subscription, such as "Fable limit, asks again in 45m" or "Opus limit, resets in 1d 20h". The subscription itself stays available. Open a subscription's details for Windows by scope, described below.
  • Activity: "Claude Fable limit reached on Claude #8" and "Its Fable chats continued on Claude #6" in the subscription events; each fallback and return in the audit log (limit.fallback, limit.fallback_return) and the event feed (chat.fallback.started, chat.fallback.ended).

Which window a number belongs to

A subscription's own "16% left", on the Quota page and as headroomPct, is a shared window: the 5-hour or the weekly one, which every model on that subscription draws on. For the Claude accounts n8v reads today, Claude reports usage for those two windows only, so there is no Fable or Opus percentage to show. What n8v knows per model is whether Claude said that model is out.

Windows by scope, in a subscription's details on the Quota page, lists one row per window:

The details of Claude #8 on the Quota page: two shared windows with what is left, a Fable row that says limit reached and when n8v asks again, and Opus, Sonnet and Haiku rows that say no limit was seen.
RowMeans
Shared, with a percentageA window every model on the subscription draws on, as the provider reports it
A model, "Limit reached"Claude said this model is out here. The reset when Claude named one, else when n8v asks again
A model, "No limit seen"n8v has seen no limit for this model here. Its usage is not reported, so the row shows a dash, not zero, and a limit reached outside n8v is unseen

A provider that does report a window for one model, as OpenAI does for Spark, gets that window as a row of its own with its percentage, and a recommendation for that model counts it.

API and MCP

Both need the chats:message scope to change the rule and chats:read to read it. A key limited to repositories is refused, because the rule covers the whole account.

CallMCP toolBodyDoes
GET /api/v1/subscriptions/model-fallbacksubscriptionsThe rule: on, to per family, and targets with usable
POST /api/v1/subscriptions/model-fallbackset_model_fallback{"on": true, "opus": "none"}Switches it on or off and sets the model per family
GET /api/v1/subscriptionssubscriptionsPer subscription modelLimits and usageWindows, and the rule as modelFallback
GET /api/v1/subscriptions/planquota_planPer subscription usageWindows with burn and projection, and families: the ranking per model

A family takes fable-5.2, opus-5.5, sonnet-5.5, haiku-5.5 or none, never a model of its own family. Each entry of modelLimits has model (the family), resetsAt (only when the provider named a reset) and retryAt (when n8v asks again).

curl -sS -X POST https://n8v.online/api/v1/subscriptions/model-fallback \
  -H "Authorization: Bearer $N8V_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"on": true, "fable": "opus-5.5", "opus": "sonnet-5.5"}'

Usage windows by scope

With limits per model on, every subscription in subscriptions and quota_plan carries usageWindows, one entry per window. The fields that were there, windows and modelLimits, are unchanged.

FieldValue
scopeshared: every model on the subscription draws on it (all in windows). Or one model family: fable, opus, sonnet, haiku, spark. unknown: a scope the provider did not name
appliesToThe same in words: "every model on this subscription", "Fable models only"
sourceprovider: reported usage. limit_message: the provider's message said this model is out. not_reported: no usage for this model, and no limit seen by n8v
stateroom, limited or unknown. A stale reading keeps its numbers and is unknown
window, windowMins"5-hour window", "weekly window"; null for a model the provider reports no window for
usedPct, remainingPctPercentages of a reported window; null when not reported. Null is unknown, never zero
resetsAt, retryAtThe reset the provider named; for a limit_message without one, retryAt is when n8v asks again
burn, projectedPct, ...In quota_plan only: the burn rate, the projection and the expiry of a reported window, as in windows

quota_plan also returns families: per Claude model family, the subscriptions ordered by what is left for that model, most room first and blocked ones last. Each entry has subscription, leftPct, the window and scope that number comes from, and blocked when the model cannot run there, with until or retryAt:

blocked.byMeans
model_limitThe family's own limit is in force
shared_windowA shared window is full; window names it
subscription_limitThe provider's message held out the whole subscription; no window is full
needs_loginThe subscription needs a new sign-in
errorThe subscription could not be read

leftPct is null when it is not known: a stale reading, a window that was not read, or a window whose scope the provider did not name. The ranked picks in recommend leave out a model on a subscription where that model is held out.

{
  "families": [
    {
      "family": "fable",
      "name": "Fable",
      "subscriptions": [
        { "subscription": "Claude #1", "selected": true, "leftPct": 100, "window": "weekly window", "scope": "shared", "blocked": null },
        { "subscription": "Claude #8", "selected": false, "leftPct": 47, "window": "5-hour window", "scope": "shared", "blocked": null },
        {
          "subscription": "Claude #9",
          "selected": false,
          "leftPct": null,
          "window": null,
          "scope": null,
          "blocked": { "by": "model_limit", "scope": "fable", "window": null, "until": null, "retryAt": "2026-11-11T15:10:00.000Z" }
        }
      ]
    }
  ]
}

The tool's text says the same in one line per model, and one line for models that rank alike: "Fable: Claude #1 100% left (weekly window, shared); Claude #8 47% left (5-hour window, shared); Claude #9 held out by its Fable limit, no reset named, n8v asks again 11 Nov 15:10 UTC (in 40m)." and "Opus, Sonnet, Haiku: Claude #1 100% left (weekly window, shared); Claude #9 95% left (weekly window, shared); Claude #8 47% left (5-hour window, shared)."

Refusals: 403 model_limits_off (the flag is off for the account), 403 subscriptions_disabled, 403 repo_not_allowed, and 400 invalid_request with param naming the family whose model cannot be its fallback.

What it does not do yet

  • Only Claude families. OpenAI meters Spark separately from the shared Codex windows; n8v shows that window on the Quota page but does not route around it.
  • An organization's runs and workstation tasks keep their own handling: their organization decides which subscription they use.
  • No percentage, burn rate or projection per Claude model: Claude reports none. The quota plan ranks a model by the shared window that binds it and by the model's own limit when one is in force.
  • A limit reached outside n8v is not seen until a turn in n8v runs into it.

Questions

Why did my Opus chat keep running when Fable stopped? That is the point: only Fable is held out on that subscription.

Why did the chat not take my other subscription? Auto-switch is off for it, or for the account. Turn it on in Quota.

Why does the chip say "asks again" and not "resets"? Claude Code named no reset, so n8v does not know one. It tries again at that time and, if the model is still out, waits twice as long.