Current plan and the ordered change, if any
const url = 'https://api.flotera.com/api/v1/subscription';const options = { method: 'GET', headers: {cookie: '__Host-erm_session=<__Host-erm_session>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.flotera.com/api/v1/subscription \ --cookie __Host-erm_session=<__Host-erm_session>Authorizations
Section titled “Authorizations”Responses
Section titled “Responses”Subscription view.
object
unassigned is not a plan: it means no assignment row exists yet, so nothing can be priced. Being on the free plan is active — free is a plan, not a subscription state (D-14).
object
Internal catalog code. Not the public label — labels are not unique.
null — contract-priced; such a plan is never published here.
object
Entitlement key from 13 §3.3, e.g. fleet.servers.max.
True when an integer limit is explicitly unbounded.
Frozen assignment price, which may differ from the catalog row.
Decimal string or null when unknown.
object
UUID (v7 for new entities; v4 accepted during migration).
Direction at order time. It explains why the change is called a downgrade; it does not decide anything when the change fires — the rule is re-read then.
Internal catalog code. Not the public label — labels are not unique.
RFC 3339 UTC with microsecond precision.
First UTC day the new price applies to.
One day of the target plan at the current fleet size, when gated.
reserve_not_covered — the balance no longer covered the reserve when the change fired; direction_changed — the catalog price moved and an ordered downgrade would now be an upgrade, so it was refused instead of silently costing more.
RFC 3339 UTC with microsecond precision.
RFC 3339 UTC with microsecond precision, or null.
Send it back as If-Match to replace a pending change.
RFC 3339 UTC with microsecond precision.
Example
{ "status": "active", "plan": { "currency": "USD" }, "pending_change": { "status": "scheduled", "direction": "upgrade", "effective_at": "2026-07-25T10:15:30.123456Z", "requested_at": "2026-07-25T10:15:30.123456Z" }, "generated_at": "2026-07-25T10:15:30.123456Z"}Headers
Section titled “Headers”Entity tag of the returned snapshot/resource version.
Missing/invalid credentials (code=unauthorized).
RFC 9457 problem document with a stable machine code.
object
Stable machine-readable error code (03 §2.4).
UUID (v7 for new entities; v4 accepted during migration).
object
JSON Pointer to the offending field.
Example
{ "type": "https://ermeon.com/problems/validation", "code": "unauthorized"}Authenticated but not permitted. code=forbidden — role/scope mismatch; code=feature_not_entitled — the plan does not include the capability; code=account_frozen — the account is frozen and this operation is declared x-ermeon-frozen: deny. The three are deliberately distinct: only the last one is fixed by a top-up (13 §5.6).
RFC 9457 problem document with a stable machine code.
object
Stable machine-readable error code (03 §2.4).
UUID (v7 for new entities; v4 accepted during migration).
object
JSON Pointer to the offending field.
Example
{ "type": "https://ermeon.com/problems/validation", "code": "unauthorized"}A dependency the endpoint needs is not configured or is temporarily unavailable (code=unavailable). The rest of the API keeps working — an absent external integration must not take the service down.
RFC 9457 problem document with a stable machine code.
object
Stable machine-readable error code (03 §2.4).
UUID (v7 for new entities; v4 accepted during migration).
object
JSON Pointer to the offending field.
Example
{ "type": "https://ermeon.com/problems/validation", "code": "unauthorized"}