Get license status
const url = 'https://shoehorn.example.com/api/v1/license';const options = {method: 'GET'};
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://shoehorn.example.com/api/v1/licenseReturns the active license for the calling tenant. Beta tenants also
get beta_ends_at, beta_grace_ends_at, and is_read_only populated
when applicable.
Responses
Section titled “ Responses ”Current license info
object
Per-license cluster-limit override (0 = use tier default)
object
0 = unlimited
0 = unlimited
object
0 = unlimited
object
For Beta licenses: when the 6-month free period ends. Floored at 2026-11-10 for legacy Beta licenses so existing customers don’t flip read-only the day per-cluster pricing took over.
For Beta licenses: when the 30-day post-end grace expires. Set only after the first license-status read past beta_ends_at has marked the grace start. After this timestamp the auto-disconnect job runs.
True while a Beta tenant is inside the 30-day grace window. UI mutations return 423 BETA_ENDED_READ_ONLY. Catalog reads and agent traffic stay live; license activation also keeps working so the tenant can switch to Standard without restoring writes first.
Example
{ "edition": "free", "type": "selfhosted", "resource_usage": [ { "resource": "clusters" } ], "warnings": [ { "type": "expired", "level": "warning" } ]}