Hostingsurge Operator API

The Operator API from Hostingsurge — 137 operation(s) for operator.

GitHub OpenAPI

Operations 155

GET /operator/move-requests Move requests of the brand, newest first (operators) #
GET /operator/session Whether the caller may perform an operator action right now (used by the… #
GET /operator/overview Counts and recent failures for the platform operator dashboard #
GET /operator/organizations Every organization of this brand, paginated; filters: plan, the Free period… #
GET /operator/users Every user of this brand, paginated #
GET /operator/projects Every project across organizations, paginated #
GET /operator/deployments/failures Failed deployments in the last N hours (default 24) #
GET /operator/migrations Running or stuck imports (Connect & migrate) #
GET /operator/email/requests Sending-access requests and per-organization sending status #
GET /operator/builder/usage AI builder token usage per organization over the last N days (default 7) #
GET /operator/builder/sandboxes Currently starting/running/idle AI-builder preview sandboxes #
GET /operator/audit Operator action history for this brand; filters: organization, action (or… #
GET /operator/organizations/{organizationId}/suspension The suspension ledger of one organization: the active episode's engine… #
GET /operator/organizations/{organizationId} Customer overview: org info, billing/dunning state, limit override, members… #
GET /operator/organizations/{organizationId}/limits Current limit override (all-null fields when none is recorded) #
PUT /operator/organizations/{organizationId}/limits Set (fully replace) the organization's limit override; a null field means "use… #
DELETE /operator/organizations/{organizationId}/limits Clear the limit override entirely (every field reverts to the plan's own value) #
POST /operator/organizations/{organizationId}/suspend Suspend an organization: it immediately loses session/API/MCP/OAuth access and… #
POST /operator/organizations/{organizationId}/unsuspend Lift a suspension #
POST /operator/users/{userId}/disable Disable a user: their sessions are revoked and they immediately lose all access #
POST /operator/users/{userId}/enable Re-enable a user #
POST /operator/migrations/{migrationId}/cancel Cancel an unfinished import of any organization: the customer's own cancel path… #
GET /operator/imports Imports of every organization (or one) by where they stand, newest activity… #
GET /operator/imports/{migrationId} One import with its steps and newest log lines (read-only; never a credential) #
POST /operator/builder/sandboxes/{sandboxId}/stop Stop a running AI-builder preview sandbox #
POST /operator/email/sending Approve or deny transactional sending for an organization (exactly POST… #
GET /operator/server The platform host (CPU, load, memory, disk, uptime) next to the CPU/memory… #
GET /operator/organizations/{organizationId}/resize-plan Every project and database of the organization above its current per-resource… #
POST /operator/organizations/{organizationId}/resize Bring exactly the confirmed projects/databases down to the organization's… #
POST /operator/databases/{databaseId}/resources Change a database's CPU/memory within its organization's ceilings (a running… #
GET /operator/plan-limits Every plan's limits: the default, this server's PLATFORM_DEFAULT_LIMITS (Free)… #
PUT /operator/plan-limits/{planId} Set (fully replace) one plan's limits for every organization on it; a null… #
PUT /operator/free-pool Set the platform-wide Free capacity pool (the total vCPU/memory all Free… #
GET /operator/free-resize-plan Dry run of "apply to all Free organizations": Free organizations with a project… #
POST /operator/free-resize Bring exactly the confirmed projects/databases of Free organizations down to… #
GET /operator/static-resize-plan Dry run of "right-size static sites": Free organizations with static sites… #
POST /operator/static-resize Bring exactly the confirmed static sites of Free organizations down to the… #
GET /operator/capacity How many more Free teams, static sites, WordPress sites and SaaS apps fit: the… #
GET /operator/trial-settings The brand's Free-period settings and the dry run (every Free team computed as… #
PUT /operator/trial-settings Change the Free-period settings (partial: fields left out keep their value). #
POST /operator/organizations/{organizationId}/trial Extend, end, reset, exempt or unexempt one team's Free period (two-factor… #
GET /operator/trials The brand's Free teams by the state of their Free period (active, ending… #
POST /operator/projects/{projectId}/stop Stop one project of any team (fresh session + reason; audited with the status… #
POST /operator/projects/{projectId}/start Start one project of any team (fresh session + reason; refused while the team… #
GET /operator/enforcement What decides limits on this server now: entitlement mode, billing configured… #
POST /operator/projects/{projectId}/suspend Suspend one project of any team: stopped, its deployments canceled, every… #
POST /operator/projects/{projectId}/unsuspend Lift a project's suspension: started again only when it was not stopped before… #
GET /operator/project-suspensions The suspended projects of the brand, or one project's suspension history… #
GET /operator/organizations/{organizationId}/credentials One team's API keys, MCP keys and OAuth grants (names, owners, scopes, dates… #
POST /operator/credentials/{credentialId}/revoke Revoke one API key, MCP key or OAuth grant of any team at once (an OAuth grant… #
GET /operator/abuse-reports The abuse-report queue (open, actioned, dismissed), newest first, with the… #
POST /operator/abuse-reports Add a report by hand (mail to abuse@, a phone call); linked to the project… #
PATCH /operator/abuse-reports/{reportId} Change a report's status (open, actioned, dismissed), its project link or its… #
GET /operator/server/live Live server health: CPU per core, load, memory, swap, disk and disk I/O… #
GET /operator/server/history The server's minute samples of the last 1 hour (1-minute points), 6 or 24 hours… #
PUT /operator/server/alerts Set this brand's server alert thresholds (a full replace; null = that alert is… #
DELETE /operator/server/alerts Back to the default server alert thresholds (memory 85 %, disk 80 %, swap 50 %… #
GET /operator/infrastructure What the host reports about itself (disks, RAID, versions, pending updates… #
POST /operator/users/{userId}/view-session Open a customer's dashboard read only for 30 minutes: records the view in the… #
GET /operator/customers Every account of this brand, with or without a team: sites, usage, steps… #
GET /operator/customers/{userId} One account: its numbers, its answers at sign-up and every site of its teams… #
GET /operator/customers/{userId}/activity What one account did, newest first #
GET /operator/signup-funnel The sign-up funnel per UTC day, newest first: puzzles handed out and spent, new… #
GET /operator/activity What customers did, newest first #
POST /operator/customers/delete-unverified Remove one account that never confirmed its address and was never used, or… #
GET /operator/brands Every brand with its hosts and state (operators of the primary brand), or only… #
GET /operator/brands/{brandId} One brand: settings, hosts, the DNS records to create and the newest domain… #
PATCH /operator/brands/{brandId} Change any subset of a brand's settings (domains only while it is disabled). #
POST /operator/brands/{brandId}/clone Clone Brand: a new, disabled brand with this brand's settings (look, products… #
POST /operator/brands/{brandId}/checks Check every host of the brand now: DNS at the platform's ingress, then HTTPS… #
POST /operator/brands/{brandId}/enable Enable a brand whose hosts all passed the domain checks within the last 24… #
POST /operator/brands/{brandId}/disable Disable a brand (never the primary one): its hosts stop resolving to it. #
GET /operator/servers Every workload server with its capacity (limits and measured), where the next… #
POST /operator/servers Add a Coolify server to the list; it starts as preparing (no customers until it… #
GET /operator/servers/inventory The hosting engine's servers (Coolify), marked when already in the list: what… #
PATCH /operator/servers/{serverId} Rename, set the address or size, or change the status (open for customers… #
DELETE /operator/servers/{serverId} Remove a server nothing lives on from the list (never the main one); the… #
GET /operator/servers/{serverId}/checks Read-only checks before a server takes customers (engine, proxy, address… #
POST /operator/servers/{serverId}/agent Install (or reinstall with a new token) the capacity agent; when the engine… #
GET /operator/servers/{serverId}/organizations The organizations on a server, largest first (what a drain has to move) #
GET /operator/alerts/sms Text-message alerts for this brand: provider key present, switched on, daily… #
PUT /operator/alerts/sms Switch text-message alerts on or off for this brand and set the daily cap per… #
GET /operator/waitlist Sign-up waitlist: waiting and invited addresses, newest first, and the current… #
POST /operator/waitlist Put an address on the waitlist by hand, optionally sending its invite right… #
POST /operator/waitlist/{entryId}/invite Approve an entry: e-mail a single-use sign-up link bound to its address (a new… #
DELETE /operator/waitlist/{entryId} Remove an entry: its open invite stops working and nothing about the address is… #
GET /operator/plan-grants Plan grants: active, waiting for a sign-up, ended (ended, unclaimed or… #
POST /operator/plan-grants Give Pro or Business without Stripe to teams, users' own teams or email… #
POST /operator/plan-grants/review Review before giving a plan: what team (or waiting address) each target would… #
GET /operator/plan-grants/{grantId} One plan grant with its history and who a mail about it goes to #
POST /operator/plan-grants/{grantId}/extend Change when a plan grant ends: days more, a new end, or no end (an ended grant… #
POST /operator/plan-grants/{grantId}/revoke Take a plan grant back now: the team is on its own plan again (nothing it made… #
POST /operator/plan-grants/{grantId}/resend Mail a plan grant again: the invitee gets a new sign-up link (the old one stops… #
GET /operator/billing/overview Billing overview for platform operators: accounts by plan, past due… #
GET /operator/billing/revenue Revenue against AI cost for platform operators (read-only): MRR, paid invoices… #
GET /operator/billing/accounts Billing accounts of every organization of this brand #
GET /operator/billing/accounts/{organizationId} One organization's billing: subscription, invoices, Build Credits ledger… #
POST /operator/billing/accounts/{organizationId}/credit Credit the customer balance (applied to the next invoices). #
POST /operator/billing/accounts/{organizationId}/build-credits Grant Build Credits. #
POST /operator/billing/accounts/{organizationId}/refund Refund a paid invoice (all or part) with a credit note. #
POST /operator/billing/accounts/{organizationId}/grace Give a past-due organization a new grace period; lifts a current deploy/build… #
GET /operator/billing/sales-settings The brand's manual sales: seller, where to pay, currencies, invoice numbering… #
PUT /operator/billing/sales-settings Save the sales settings; enabled opens ordering (refused while anything an… #
GET /operator/billing/orders Manual orders of this brand, newest first: open (awaiting payment or expired)… #
GET /operator/billing/orders/summary Open and paid amounts per currency, and EU cross-border consumer sales against… #
POST /operator/billing/orders/{orderId}/mark-paid The payment arrived: give the credits or plan months and issue the invoice… #
POST /operator/billing/orders/{orderId}/cancel Cancel an unpaid order (awaiting payment or expired). Fresh session and a reason #
POST /operator/billing/orders/{orderId}/refund Record a refund paid back by the operator: a credit note, and a credits order's… #
GET /operator/billing/documents/{documentId} An invoice or credit note of any team of this brand, as JSON #
GET /operator/billing/crypto-addresses The brand's own receiving addresses per coin and network, and the coins whose… #
PUT /operator/billing/crypto-addresses Set or remove receiving addresses (each checked with its checksum). #
GET /operator/billing/crypto-deposits Payments to the brand's own addresses, newest first: unmatched (default… #
POST /operator/billing/crypto-deposits/{depositId}/attach Attach an unmatched payment to an order: Mark paid with this payment, valued in… #
POST /operator/billing/crypto-deposits/{depositId}/dismiss Dismiss an unmatched payment (paid back by hand, or not a customer's). #
GET /operator/backups Backups: last local and off-site backup per source, restore tests, repository… #
GET /operator/final-backups Final backups of deleted projects: one per deleted project, kept 30 days for… #
DELETE /operator/final-backups/{id} Remove one final backup by hand (fresh session, a reason, audited). #
POST /operator/final-backups/{id}/retry Try a failed final backup again (fresh session, audited) #
GET /operator/host-cleanup What the host's nightly cleanup removed, kept or failed to remove (leftovers of… #
GET /operator/domain-registrar Platform operators: whether a Dynadot key is stored (never the key), its last… #
PUT /operator/domain-registrar/dynadot-key Platform operators: store (or replace) the Dynadot API key, sealed with the… #
POST /operator/domain-registrar/dynadot-key/test Platform operators: test the stored Dynadot key with a read-only call (the… #
POST /operator/domain-registrar/dynadot-key/remove Platform operators: remove the stored Dynadot key (automatic registrations… #
PUT /operator/domain-registrar/tlds/{tld} Platform operators: the price rule of a TLD (fixed prices or Dynadot + margin… #
POST /operator/domain-registrar/tlds/{tld}/remove Platform operators: remove a TLD's rule (the built-in default applies again) #
GET /operator/domain-registrar/calls Platform operators: every call made to the registrar, newest first (never the… #
GET /operator/domain-orders Platform operators: domain orders ("open": what may need you; "manual": paid… #
POST /operator/domain-orders/{orderId}/action Platform operators: mark paid, mark registered, refund (a Stripe payment is… #
GET /operator/payment-keys Platform operators: whether Stripe keys are stored (never the keys), their mode… #
PUT /operator/payment-keys/stripe Platform operators: store (or replace) the Stripe secret key and/or webhook… #
POST /operator/payment-keys/stripe/test Platform operators: test the stored Stripe secret key with a read-only call… #
POST /operator/payment-keys/stripe/remove Platform operators: remove a stored Stripe key (billing falls back to the… #
GET /operator/status Status checks: what is checked, the latest result per component with its… #
GET /operator/status/history Status history: measured state of every platform component, uptime over 24… #
GET /operator/status/resources Customer sites, projects and databases that are down or unhealthy right now… #
PUT /operator/status/incidents/{incidentId}/note Set (or clear, with an empty text) the note of the operators on a status… #
GET /operator/account-deletions Account deletions in their grace period, being purged or failed, and purges of… #
GET /operator/idle-sleep Idle sleep for the platform: the mode, the hours per plan, what sleeps now… #
PUT /operator/idle-sleep Set idle sleep for the platform (a full replace: mode, hours per plan or null… #
GET /operator/accelerator Hostingsurge Accelerator on this platform: the edge, the CDN key and switch… #
PUT /operator/accelerator Switch the global CDN on or off for customers (it only works while a provider… #
GET /operator/business Business modules: the payments switch and Stripe Connect state #
PUT /operator/business Switch payments for customers' sites on or off (reason required) #
GET /operator/public-status The public status page: switched on or not, and its incidents and maintenance #
PUT /operator/public-status Switch the public status page (/status) on or off (a fresh session and a… #
POST /operator/public-status/notices Post an incident or planned maintenance on the public status page (a fresh… #
POST /operator/public-status/notices/{noticeId} Post an update to a public incident or maintenance (a fresh session) #
DELETE /operator/public-status/notices/{noticeId} Remove a public notice posted by mistake (a fresh session and a reason; audited) #
GET /operator/support/tickets Support inbox: requests waiting for support, answered, closed or all, the most… #
GET /operator/support/tickets/{ticketId} One support request with the team, the project and every message #
POST /operator/support/tickets/{ticketId}/messages Answer a support request (the member who opened it is notified; optionally… #
PUT /operator/support/tickets/{ticketId}/status Close or reopen a support request #
GET /operator/assistant AI assistant usage per team (last N days and this month), the settings per plan… #
PUT /operator/assistant/settings Switch the assistant on or off, and set the monthly credits per plan and the… #
PUT /operator/assistant/organizations/{organizationId} One team's monthly credits (null = its plan's) and whether the assistant is… #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/hostingsurge-com:hostingsurge-com-operator-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

hostingsurge-com-operator-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Hostingsurge Platform Operator API
  version: 1.0.0
  description: 'Deploy and operate projects on Hostingsurge: Git/upload/Docker/WordPress projects, deployments, logs, environment variables, domains and databases. Errors are {"error":{"code","message","details?"}}.'
servers:
- url: /api/v1
  description: Same origin as the dashboard, e.g. https://hostingsurge.com/api/v1
security:
- bearerAuth: []
- sessionCookie: []
tags:


# --- truncated at 32 KB (2258 KB total) ---
# Full source: https://artifacts.apis.io/hostingsurge-com/openapi/hostingsurge-com-operator-api-openapi.yml