---
title: "Internal Plan Status"
method: POST
path: "/internal/plan-status"
---

# Internal Plan Status

`POST /internal/plan-status`

## Request

- Base URL: `https://sleipnir.tv` (the document declares no server; this is the origin it was published from)
- URL: `https://sleipnir.tv/internal/plan-status`
- Auth: none declared

Plan + quota diagnostic snapshot for the CALLING token's own user, for
Odin (keyless MCP). Reuses usage.get_quota_status + stripe_helper.PLAN_LIMITS.
Integers and the plan name only -- no secret, no key, no URL. hours_cap is
null on EVERY tier now (all plans are unlimited-hours; fair use is the
egress meter, not an hours cap). near_fairuse / over_fairuse let Odin
nudge an upgrade for a free/standard user who is bumping the fair-use
bandwidth ceiling; both are always False for Pro (never gated).

2026-07-30: user_id resolved server-side from payload.token, same as
/internal/stream-metrics above.

## Headers

- `X-Sleipnir-Hook-Auth` string, nullable

## Request body

- ResolveTokenPayload
  - `token` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/sleipnir/apis/relay-control-plane.md) · [All operations](https://skmtc.dev/sleipnir/apis/relay-control-plane/llms.txt) · [OpenAPI document](https://skmtc.dev/sleipnir/apis/relay-control-plane/revisions/79829f6945a4?raw)
