Subscription Not Found
subscription_not_found404
No active subscription exists for this account. The account is on the Sandbox tier.
What this means
A request tried to look up, modify, or cancel a subscription, and we couldn't find an active subscription record for the account. This usually means the account is on the free Sandbox tier (which has no formal subscription object) — but it also fires when a previously-active subscription was cancelled and the cycle has ended.
When you'll see this
- A dashboard tried to load subscription details for a Sandbox-tier account.
- A cancel/upgrade flow ran against an account whose subscription was already cancelled and expired.
- A reactivation flow was attempted but no cancelled subscription exists to reactivate.
- A reconciliation script is checking subscription state for an account that never paid for one.
Learn more about how this works
Asterwise represents free-tier (Sandbox) accounts without an explicit subscription row — they're "no subscription" rather than "Sandbox subscription." This keeps the billing layer cleanly separated: the absence of a subscription is itself a meaningful state, not a special-case row. Paid subscriptions create explicit records; cancelling them transitions to "cancelled" (still queryable for grace period and reactivation), and after expiry they become unfindable.
The most common gotcha: this error is often correct behavior. If your code is asking "what's this account's subscription" and the account is on Sandbox, this is the right answer — not an error to fix.
Example response
{
"success": false,
"error": "subscription_not_found",
"message": "No active plan found.",
"details": [],
"retry_after": null,
"doc_url": "https://docs.asterwise.com/reference/errors/subscription_not_found",
"request_id": "req_01HXYZABCDEFGH",
"timestamp": "2026-05-25T12:34:56Z"
}
- If you expected the account to have an active subscription, sign in at asterwise.com/dashboard and check the billing section.
- If the account is on Sandbox and you wanted a paid plan, subscribe through the dashboard.
- If you cancelled and want to reactivate, you'll need to subscribe fresh — accounts past the cancellation grace period can't be reactivated.
Treat this as a meaningful "no subscription" state, not always an error.
Python:
Production handler
- Python
- TypeScript
import httpx
def get_subscription_state(base_url, headers):
response = httpx.get(
f"{base_url}/v1/account/subscription",
headers=headers,
timeout=10,
)
if response.status_code == 404:
body = response.json()
if body.get("error") == "subscription_not_found":
return {"plan": "sandbox", "active": False}
response.raise_for_status()
return response.json()
async function getSubscriptionState(baseUrl: string, headers: HeadersInit) {
const response = await fetch(`${baseUrl}/v1/account/subscription`, { headers });
if (response.status === 404) {
const body = await response.json();
if (body.error === "subscription_not_found") {
return { plan: "sandbox", active: false };
}
}
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return response.json();
}
Avoid this error by
- Always check current subscription state before showing "Cancel" or "Upgrade" buttons. The right CTA for a Sandbox account is "Subscribe," not "Cancel."
- In multi-account tooling, store each account's plan locally so you don't hit this error every time you render a dashboard.
- Treat
subscription_not_foundand "Sandbox tier" as the same state in your UI. They mean the same thing functionally. - After cancellation, allow grace-period reactivation but don't promise it past the cycle end. Past that, the user must subscribe again.