---
title: "What decides limits on this server now: entitlement mode, billing configured, the Free period and its pause mode, TRIAL_ENFORCE, the owner's teams, BILLING_SUSPEND_AFTER_DAYS, FREE_ORGANIZATIONS_PER_USER, the engine's build settings, the host enforcer's last list"
method: GET
path: "/operator/enforcement"
tags: ["Operator"]
---

# What decides limits on this server now: entitlement mode, billing configured, the Free period and its pause mode, TRIAL_ENFORCE, the owner's teams, BILLING_SUSPEND_AFTER_DAYS, FREE_ORGANIZATIONS_PER_USER, the engine's build settings, the host enforcer's last list

`GET /operator/enforcement`

## Request

- Base URL: `https://hostingsurge.com/api/v1`
- URL: `https://hostingsurge.com/api/v1/operator/enforcement`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `__Host-hs_session`

## Response `200`

Status

- object
  - `entitlements` object, required
    - `mode` 'enforced' | 'allow_all', required: enforced: paid features are refused to plans without them
    - `setting` string, nullable, required: ENTITLEMENTS_ENFORCE (on, auto, off; null = the default)
  - `billingConfigured` boolean, required: Stripe is configured: plans can be bought (read live)
  - `trial` object, nullable, required: null when the Free-period settings could not be read
    - `mode` 'off' | 'dry_run' | 'on', required
    - `pauseMode` 'never' | 'when_payments' | 'always', required
    - `enforceOff` boolean, required: TRIAL_ENFORCE=off
    - `pausingNow` boolean, required
    - `wouldPauseNow` integer, required
    - `blocked` integer, required
  - `unlimitedTeams` integer, required: PLATFORM_UNLIMITED_ORG_IDS (never limited, never paused)
  - `billingSuspendAfterDays` integer, nullable, required: BILLING_SUSPEND_AFTER_DAYS; null = off
  - `freeOrganizationsPerUser` integer, nullable, required: FREE_ORGANIZATIONS_PER_USER; null = not set
  - `coolify` object, required: the build settings of the engine server; null when not read
    - `concurrentBuilds` integer, nullable, required
    - `queueLimit` integer, nullable, required
  - `hostEnforcer` object, required
    - `tokenConfigured` boolean, required: LIMITS_INTERNAL_TOKEN is set
    - `lastListAt` string, nullable, required: when hs-limits last fetched GET /internal/limits/containers from this API process
    - `lastCount` integer, nullable, required
    - `available` boolean, required: the list can be computed (the SQL it needs exists)

## Other responses

- `400`: Invalid request (code invalid_request)
- `403`: An action on an operator-console session older than 5 minutes (code forbidden, details.reauthenticate: sign in again at /admin/login), or an operator removed since the session was resolved
- `404`: Not found (code not_found); also the answer to any request without a live operator-console session (no admin cookie, a dashboard session, an API/MCP key or OAuth token, or a caller who is not a platform operator)
- `429`: Too many requests (code rate_limited); see Retry-After
- `501`: Not available on this server (code not_configured)

---

[API](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api.md) · [All operations](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api/revisions/4d08337cdff1?raw)
