---
title: "Get Subscription Status"
method: GET
path: "/v1/billing/subscription-status"
tags: ["Billing", "billing"]
---

# Get Subscription Status

`GET /v1/billing/subscription-status`

Fast status check - queries DynamoDB only (no Stripe API calls).
Use this for polling and subscription guards.

HasActiveSubscription includes BypassSubscriptionCheck so the frontend
can rely on this single field for access decisions.

NOTE: This is `def` (not `async def`) because it only does synchronous
PynamoDB I/O. FastAPI automatically runs `def` handlers in a thread pool,
so they don't block the event loop or other concurrent requests.

## Response `200`

Successful Response

- SubscriptionStatusResponse
  - `HasActiveSubscription` boolean, required
  - `Subscription` SubscriptionStatusInfo, required — Lightweight subscription status (no Stripe API calls)
    - `Status` string, required
    - `ProductId` string, required
    - `CurrentPeriodEnd` string, date-time, required
    - `CancelAtPeriodEnd` boolean, required
  - `OrgExists` boolean

---

[API](https://skmtc.net/orsay/apis/fastapi.md) · [All operations](https://skmtc.net/orsay/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/orsay/fastapi/revisions/23d1ff06d0d0/schema)
