Developer API
Read your servers, hosting, domains, billing and support tickets programmatically. Every endpoint is protected by a scope-gated API key.
https://api.444host.com/v1Authorization: Bearer h444_…AI connection (MCP)
Connect Claude and other MCP-capable tools straight to your account. Uses your API key as a Bearer token — every tool is limited to the key’s scopes.
https://api.444host.com/mcpclaude mcp add --transport http 444host https://api.444host.com/mcp \ --header "Authorization: Bearer h444_…"
89 tools: ordering (real wallet-debited purchases, double-confirmed), VPS (incl. reverse DNS), capacity pools, hosting, domains, billing, tickets and webhooks. Create an API key →
OAuth-capable clients can connect without pasting a key — you approve in the browser (RFC 8628 device-code flow; AS metadata at api.444host.com/.well-known/oauth-authorization-server). Revoke connected apps from the API Keys page.
Local/stdio: H444_API_KEY=h444_… npx -y @otwa/444host-mcp · GitHub · npm
Quick start
Mint an API key from the dashboard (Account → API Keys), then:
curl -H "Authorization: Bearer h444_…" https://api.444host.com/v1/account
Rate limit: 120 requests/minute per key. Responses carry X-RateLimit-* headers.
Endpoints
Account
/v1/accountaccount:readReturns the authenticated account profile and wallet balance.
{
"id": "9032ffac-…",
"email": "you@example.com",
"first_name": "Jane",
"last_name": "Doe",
"account_type": "individual",
"language": "en",
"email_verified": true,
"balance_usd_cents": 1250,
"created_at": "2026-01-01T00:00:00.000Z"
}Catalogue & ordering
/v1/productsaccount:readOrderable VPS and hosting plans with retail price and YOUR effective price (reseller discount applied when your account has one).
[
{
"slug": "vps-2",
"category": "vps",
"name_en": "VPS 2",
"retail_monthly_usd_cents": 1200,
"your_monthly_usd_cents": 960,
"specs": { "vcpu": 2, "ram_mb": 4096, "disk_gb": 60 }
}
]/v1/os-templatesvps:readInstallable OS templates for VPS orders and reinstalls. ?platform=linux (default) | windows | router — Cloud Router plans deploy MikroTik CHR only.
/v1/vpsorders:writeAtomic: debits your wallet at your effective price, issues a paid receipt, and provisions. Provisioning failure auto-refunds. Send an Idempotency-Key so a retried request can't order twice. Returns the server AND its initial root password (shown once).
{ "plan_slug": "vps-2", "label": "web-1", "hostname": "web-1", "os_family": "ubuntu", "os_template": "ubuntu-22.04" }/v1/hostingorders:writeSame atomic debit/refund contract. Returns the account AND its SFTP/DB passwords (shown once). `php_version` defaults to 8.3.
{ "plan_slug": "hosting-starter", "domain": "example.com", "username": "examplecom" }VPS
/v1/vpsvps:readEvery VPS on the account, with live status and plan specs.
/v1/vps/:idvps:readServer detail (no credentials, no internal provisioning data).
/v1/vps/:id/statsvps:readLive CPU / memory / network / disk usage.
/v1/vps/:id/ipsvps:readEvery IP on the server with its current PTR record. `zoneHosted: false` means the reverse zone is not on our DNS.
[
{
"ip": "46.31.78.56",
"primary": true,
"gateway": "46.31.78.1",
"netmask": "255.255.255.0",
"ptr": "mail.example.com",
"zoneHosted": true
}
]/v1/vps/all-ipsvps:readEvery IP across all your servers, grouped per server, with PTR records — the API form of the dashboard Reverse DNS page.
/v1/vps/:id/plan-optionsvps:readPlans this server can resize to — same family, same disk size (a plan change never alters disk). Returns the current plan and the switchable options, cheapest first.
{
"current": { "id": "...", "name": "Cloud Router S", "vcpu": 1, "ramMb": 1024, "diskGb": 10, "monthlyPrice": 19.90 },
"options": [ { "id": "...", "name": "Cloud Router M", "vcpu": 2, "ramMb": 2048, "diskGb": 10, "monthlyPrice": 29.90 } ]
}/v1/vps/:id/power/:actionvps:writePower the server start, stop, or reboot. `:action` ∈ {start,stop,reboot}.
/v1/vps/:id/ssovps:readIssue a short-lived URL to the browser VM console for this server.
/v1/vps/:id/password-resetvps:writeRotate the server root/admin password; the new password is returned once.
/v1/vps/:id/addonsvps:readAdd-ons available/attached for this server — SEO IP Pack, extra IPs, backups. Prices are in cents: `monthly_usd_cents` is the recurring charge, `prorated_usd_cents` what you pay today if you buy now.
/v1/vps/:id/addonsorders:writeBuy an add-on for the server. Debits your wallet **immediately**, prorated to the end of the server's current cycle; the add-on then renews with the server every month. Reseller tiers pay their discounted price. Auto-refunds if it cannot be attached.
{ "addonId": "seoip7pk" }/v1/vps/:id/addons/:addonIdvps:writeCancel an add-on. **No refund** is issued for the remainder of the current cycle — the recurring price drops from the next renewal. For IP add-ons this is immediate and disruptive: the addresses are released upstream and stop routing to your server, so anything bound to them (sites, SSL, mail) breaks — unconfigure them in the guest OS first. Needed because only one add-on per type may be active, so moving between tiers (8 IPs to 16 IPs) is a remove then a purchase. Uses `vps:write`, not `orders:write` — it cancels a line item and spends nothing.
/v1/vps/:id/change-planvps:writeSwitch to another plan in the same family with the same disk size — an in-place vCPU/RAM resize. The server reboots (~1 min) to apply; disk is never changed. Only the recurring price changes: no proration on an up-switch, no credit on a down-switch — the next renewal bills the new plan. Use GET /vps/:id/plan-options for valid targets.
{ "productId": "..." }/v1/vps/:id/labelvps:writeChange the display label.
{ "label": "web-prod-1" }/v1/vps/:id/ips/:ip/ptrvps:writePoint the IP's PTR record at a hostname (e.g. `mail.example.com`). Idempotent upsert.
{ "hostname": "mail.example.com" }/v1/vps/:id/ips/:ip/ptrvps:writeRemove the PTR record for the IP.
/v1/vps/:id/reinstallvps:destroyDESTRUCTIVE — wipe the disk and rebuild from an OS template. Honours an optional Idempotency-Key header.
{ "os": "ubuntu", "osTemplate": "ubuntu-22.04" }/v1/vps/:idvps:destroyDESTRUCTIVE — permanently terminate the server.
Capacity pools
/v1/pools/cataloguevps:readCapacity-pool products with their per-unit prices (in cents) and the range each unit may move between. A capacity pool is a block of vCPU / RAM / disk / IPv4 bought ONCE — you then build as many servers inside it as the quota allows, and **those servers are free**: no price of their own, no renewal, and they never appear on a bill. ⚑ Units are counts of BLOCKS, not of the underlying resource: `ram2gb` counts 2 GB blocks and `ip16` counts blocks of sixteen addresses, so `ram2gb: 16` is 32 GB. Reseller keys are quoted their discounted rates here.
/v1/pools/quotevps:readMonthly price for a pool shape, with a per-unit breakdown and the resolved figures (vCPU, GB, addresses) so you can show what is actually being bought. Nothing is charged. The purchase re-prices server-side, so a total worked out client-side is displayed but never trusted.
{ "productId": "...", "vcpu": 16, "ram2gb": 16, "disk100": 10, "ip16": 1 }/v1/poolsvps:readEvery capacity pool on the account, with its quotas, status, monthly price and renewal date. `rates_cents` are the per-unit prices that pool was SOLD at — what a resize is charged at, which is not necessarily today's catalogue.
/v1/pools/:idvps:readOne pool plus live `usage` — the vCPU, RAM, disk, IPs and server count currently committed inside it — the `bounds` a resize may move between, and the servers we know are in it. Usage counts PROVISIONED resources, not live consumption: a powered-off server still holds its allocation, because you can switch it back on. ⚑ Read `policy.vcpuOvercommit` rather than assuming a ratio.
/v1/poolsorders:writeBuys a capacity pool and provisions it: the capacity is created with hard CPU and memory ceilings, the IPv4 block is reserved, and the pool gets its own private network segment (free) that its servers talk to each other on. Debits your balance immediately for the first month. Returns 400 if your balance will not cover it or the selection falls outside the product bounds. Honours an Idempotency-Key header. Reseller keys are charged their discounted RATES, which are then snapshotted — so the discount survives every renewal and resize.
{ "productId": "...", "label": "prod-cluster", "vcpu": 16, "ram2gb": 16, "disk100": 10, "ip16": 1 }/v1/pools/:id/resize-quotevps:readPrices a new shape without applying it: the new monthly, the difference, and `charge_now_usd_cents` — the prorated amount taken immediately for the days left in the cycle. Priced at the rates the pool was SOLD at, never at today's catalogue, so the figure matches what PATCH will charge.
{ "vcpu": 32, "ram2gb": 32, "disk100": 20, "ip16": 2 }/v1/pools/:idorders:writeChanges the pool's shape. Takes the WHOLE shape in absolute units, not deltas — to add 8 vCPU to a 16-vCPU pool, send 24. **Growing is a purchase**: charged immediately, prorated, at the rates the pool was sold at. **Shrinking is not refunded** and lowers the price from the next renewal. Refuses to shrink below what the pool's servers already hold — delete servers first.
{ "vcpu": 32, "ram2gb": 32, "disk100": 20, "ip16": 2 }/v1/pools/:id/serversvps:writeCreates a server inside the pool. **It is free** — no charge now, no monthly price, no renewal; the pool carries the bill, and the build is checked against its quota instead of your balance. Which is why this is `vps:write` and not `orders:write`. `productId` is a plan **slug** from GET /v1/products (a UUID is accepted too). ⚑ `ipCount` chooses how many of the pool's own public addresses it takes (default 1), and they cost nothing — they came with the pool. **`ipCount: 0` is private-only: no public interface, no default route, and no internet at all** — reachable from the pool's other servers on its private network and through the web console. Linux only.
{ "productId": "vps-2", "label": "web-1", "os": "ubuntu", "osTemplate": "ubuntu-24.04", "ipCount": 1 }/v1/pools/:id/ipsvps:readEvery IPv4 address the pool owns, with its PTR and which server holds it (`assigned_to: null` means free in the block). These came with the pool, so assigning one costs nothing — to get MORE, resize the pool's `ip16`. Add-ons are refused on a pool server for the same reason.
/v1/pools/:id/ips/applyvps:writeAssign, move or return addresses within the pool's own block, in ONE batch. `serverId` names a server INSIDE this pool; `null` returns the address to the block. Free. Addresses never leave the block. The set is validated whole and refused entire if any entry names a server that is not in this pool. ⚑ The guest OS is not reconfigured for you, and moving an address away stops it routing at once — anything bound to it breaks. Send every change together: each call reprograms the router once regardless of batch size.
{ "changes": [ { "ip": "203.0.113.10", "serverId": "uuid" }, { "ip": "203.0.113.11", "serverId": null } ] }/v1/pools/:idvps:destroyDESTRUCTIVE — every server in the pool is powered off (preserved, not destroyed), the whole IP block is returned and the private network is deleted. **No refund** for the remainder of the cycle.
Hosting
/v1/hostinghosting:readWeb-hosting accounts with status, quota, usage and connection hosts. Passwords are never returned on the API.
/v1/hosting/:idhosting:readHosting account detail.
/v1/hosting/:id/suspendhosting:writeSuspend the account (site + databases stop serving). Reversible with unsuspend.
/v1/hosting/:id/unsuspendhosting:writeLift a suspension and restore service.
/v1/hosting/:idhosting:destroyDESTRUCTIVE — permanently removes the site, databases, and mail; the username becomes reusable.
/v1/hosting/:id/phphosting:writeSwitch the account's PHP-FPM version. `php_version` ∈ {7.4, 8.1, 8.3}.
{ "php_version": "8.3" }/v1/hosting/:id/ssl/retryhosting:writeRetry the Let's Encrypt certificate issue for the account's domain now.
Hosting control panel
/v1/hosting/:id/statshosting:manageDisk/inode/bandwidth/mailbox usage for the account.
/v1/hosting/:id/logshosting:manageTail the access or error log. Query: `kind` ∈ {access,error}, `lines`.
/v1/hosting/:id/cert/retryhosting:manageRetry the Let's Encrypt certificate issue now.
/v1/hosting/:id/php-versionhosting:manageSwitch the account's PHP-FPM version.
{ "php_version": "8.3" }/v1/hosting/:id/cronhosting:manageRead the crontab.
/v1/hosting/:id/cronhosting:manageReplace the crontab.
{ "jobs": [ { "schedule": "0 3 * * *", "command": "php cron.php" } ] }/v1/hosting/:id/protected-dirshosting:managePassword-protected directories (htpasswd).
/v1/hosting/:id/protected-dirshosting:manageAdd or update a password-protected directory.
{ "path": "/admin", "basic_user": "u", "password": "…" }/v1/hosting/:id/protected-dirshosting:manageRemove protection. Query: `path`.
/v1/hosting/:id/wafhosting:manageModSecurity WAF status for the account.
/v1/hosting/:id/waf/accesshosting:manageWhether temporary WAF-log access is active.
/v1/hosting/:id/waf/accesshosting:manageRequest temporary access to WAF logs.
/v1/hosting/:id/ssh-terminal/accesshosting:manageWhether browser-SSH terminal access is enabled.
/v1/hosting/:id/ssh-terminal/accesshosting:manageEnable browser-SSH terminal access.
/v1/hosting/:id/ssh-terminal/launchhosting:manageStart a browser-SSH session; returns a session URL/token.
/v1/hosting/:id/ssh-terminal/stophosting:manageStop the browser-SSH session.
/v1/hosting/:id/githosting:manageGit-deploy status for the account.
/v1/hosting/:id/git/deploy-keyhosting:manageThe SSH deploy key to add to your repo.
/v1/hosting/:id/git/webhookhosting:manageThe push-to-deploy webhook URL/secret.
/v1/hosting/:id/git/webhookhosting:manageEnable push-to-deploy.
/v1/hosting/:id/git/webhookhosting:manageDisable push-to-deploy.
/v1/hosting/:id/git/deployhosting:manageClone/deploy a repo into the site.
{ "repo_url": "git@…", "branch": "main", "subdir": "" }/v1/hosting/:id/git/pullhosting:managePull the latest commit for the deployed repo.
/v1/hosting/:id/githosting:manageDisconnect git deploy from the site.
/v1/hosting/:id/fileshosting:manageList a directory. Query: `path` (default /public_html).
/v1/hosting/:id/files/readhosting:manageRead a text file's contents. Query: `path`.
/v1/hosting/:id/fileshosting:manageCreate or overwrite a text file.
{ "path": "/public_html/x.txt", "content": "…" }/v1/hosting/:id/fileshosting:manageDelete a file or directory. Query: `path`, `recursive`.
/v1/hosting/:id/files/downloadhosting:manageStream a file as an attachment. Query: `path`.
/v1/hosting/:id/files/uploadhosting:manageUpload a file (multipart form field `file`). Query: `path`.
/v1/hosting/:id/files/mkdirhosting:manageCreate a directory.
{ "path": "/public_html/new" }/v1/hosting/:id/files/renamehosting:manageRename or move a file/directory.
{ "from": "/a", "to": "/b" }/v1/hosting/:id/backupshosting:manageSite backups (restore points).
/v1/hosting/:id/backupshosting:manageCreate a new site backup.
/v1/hosting/:id/backups/:bidhosting:manageDelete a backup.
/v1/hosting/:id/backups/:bid/restorehosting:manageRestore the site from a backup.
/v1/hosting/:id/backups/:bid/downloadhosting:manageStream a backup archive (gzip).
/v1/hosting/:id/visitor-statshosting:manageVisitor statistics. Query: `period` ∈ {24h,7d,30d}.
/v1/hosting/:id/databaseshosting:manageExtra MySQL databases on the account.
/v1/hosting/:id/databaseshosting:manageCreate an extra MySQL database.
{ "suffix": "wp2" }/v1/hosting/:id/databases/:namehosting:manageDelete an extra MySQL database.
/v1/mail/domainsmail:readMail domains on the account (they follow your hosting accounts).
/v1/mail/domains/:id/mailboxesmail:readMailboxes under one mail domain.
/v1/mail/domains/:id/aliasesmail:readForwarding aliases under one mail domain.
/v1/mail/mailboxesmail:readEvery mailbox across all your mail domains.
/v1/mail/mailboxesmail:writeCreate a mailbox on a mail domain.
{ "domain_id": 12, "local_part": "info", "password": "…", "quota_mb": 2048 }/v1/mail/mailboxes/:id/passwordmail:writeSet a new password for a mailbox.
{ "password": "…" }/v1/mail/mailboxes/:idmail:writePermanently delete a mailbox and its mail.
/v1/mail/aliasesmail:writeCreate a forwarding alias (source → destination).
{ "domain_id": 12, "source_local": "sales", "destination": "info@example.com" }/v1/mail/aliases/:idmail:writeRemove a forwarding alias.
Domains
/v1/domainsdomains:readRegistered domains with status, nameservers and expiry.
/v1/domains/contactdomains:readThe registrant/WHOIS contact used for new registrations (returns SA defaults if none saved yet).
/v1/domains/contactdomains:writeCreate or update the registrant (WHOIS) contact.
{ "first_name": "Jane", "last_name": "Doe", "email": "…", "phone": "+90…", "address1": "…", "city": "…", "postal_code": "…", "country": "TR" }/v1/domains/:id/auth-codedomains:writeEmail the EPP transfer (auth) code to the registrant. Domain must be active with the transfer lock off.
/v1/domains/:iddomains:readDomain detail.
/v1/domains/:iddomains:writeUpdate auto-renew, transfer lock, WHOIS privacy, or nameservers. Changes are pushed to the registry and rolled back if the push fails.
{ "auto_renew": true, "nameservers": ["ns1.example.com","ns2.example.com"] }Billing
/v1/billing/invoicesbilling:readYour invoices, newest first.
/v1/billing/invoices/:idbilling:readSingle invoice with line items and payment transactions.
/v1/billing/invoices/:id/paybilling:writeSettle an unpaid invoice from your wallet balance. Fails if the balance is insufficient (top up in the dashboard first). Returns the paid invoice.
/v1/billing/walletbilling:readPrepaid wallet balance (USD cents).
/v1/billing/wallet/transactionsbilling:readRecent wallet activity. Query: limit (max 200).
Support tickets
/v1/ticketstickets:readYour support tickets, newest first.
/v1/tickets/:idtickets:readTicket detail with the message thread.
/v1/ticketstickets:writeOpen a support ticket. Honours an optional Idempotency-Key header so a retried request doesn't open a duplicate.
{ "subject": "Mail deliverability", "message": "Our PTR record is set but…", "priority": "medium", "department": "technical" }/v1/tickets/:id/replytickets:writePost a customer reply. Re-opens a resolved/closed ticket.
{ "body": "Thanks — that fixed it." }/v1/tickets/:id/closetickets:writeClose the ticket. Idempotent.
Webhooks
/v1/webhookswebhooks:readYour webhook subscriptions (secrets masked).
/v1/webhookswebhooks:writeSubscribe an HTTPS URL to events. The signing secret is returned ONCE in this response.
{ "url": "https://example.com/hooks/444host", "events": ["vps.power.changed", "ticket.replied"] }/v1/webhooks/:idwebhooks:readSubscription detail (secret masked).
/v1/webhooks/:idwebhooks:writeChange url, events, description, or pause/resume via `is_active`.
{ "is_active": false }/v1/webhooks/:idwebhooks:writeRemove the subscription and stop deliveries.
/v1/webhooks/:id/rotate-secretwebhooks:writeIssue a new signing secret (returned ONCE). The old secret stops signing immediately.
/v1/webhooks/:id/deliverieswebhooks:readRecent delivery attempts with status, duration, and errors. Query: limit (max 200).
/v1/webhooks/:id/deliveries/:deliveryId/redeliverwebhooks:writeClone a past delivery into a fresh attempt.
Webhook events
When an event fires we POST a signed payload to your URL. The signature is HMAC-SHA256: X-444host-Signature: t=<ts>,v1=HMAC(secret, "<ts>." + body). Failed deliveries retry with exponential backoff (1m → 6h).
vps.createdA server finished ordering/provisioning. Payload: vpsId, label, hostname, planSlug, status, ipv4.
hosting.createdA hosting account was provisioned. Payload: hostingId, username, domain, status.
invoice.paidAn invoice transitioned to paid (any gateway, incl. API orders and renewals). Payload: invoiceId, invoiceNumber, totalUsdCents, currency.
vps.power.changedA power action ran. Payload: vpsId, action (start/stop/reboot).
vps.resizedA VPS changed plan (vCPU/RAM resize). Payload: vpsId, productId, vcpu, ramMb.
vps.reinstalledA reinstall ran. Payload: vpsId, os, osTemplate.
vps.ptr.changedA reverse-DNS (PTR) record was set or cleared. Payload: vpsId, ip, ptr (null when cleared).
vps.terminatedA server was terminated. Payload: vpsId.
pool.createdA capacity pool was bought and provisioned. Payload: poolId, label, monthlyUsdCents, quota. ⚑ The servers built inside a pool are free — watch this rather than the vps.* events to track what a pool costs.
pool.resizedA pool changed shape. Payload: poolId, previousMonthlyUsdCents, monthlyUsdCents, chargedUsdCents, quota. Growing charges immediately (prorated); shrinking charges nothing and lowers the price from the next renewal.
pool.suspendedA pool was suspended for non-payment and EVERY server inside it was powered off as one unit. Payload: poolId, label.
pool.restoredA paid-up pool came back. Each machine returns to the state it held, so a server you had stopped stays stopped. Payload: poolId, label.
pool.terminatedA pool was torn down: its servers powered off (preserved, not destroyed), the IP block returned and the private network deleted. Payload: poolId, label.
ticket.createdA support ticket was opened. Payload: ticketId, ticketNumber, subject, status, priority.
ticket.repliedSupport staff replied to your ticket. Payload: ticketId, ticketNumber, subject, status.
Error codes
400401403404429500Changelog
- new
DELETE /v1/vps/:id/addons/:addonId— cancel an add-on. No refund for the remainder of the current cycle; the recurring price drops from the next renewal. IP add-ons release their addresses immediately, so unconfigure them in the guest OS first. Scopevps:write. Also available in the dashboard and as theh444_remove_vps_addonMCP tool. - changedOnly ONE add-on per type (extra-ip, ip-class, diverse-ip, backup) can be active at a time — upstream now enforces what the docs always described. Moving between tiers, e.g. 8 IPs to 16 IPs, is a DELETE followed by a POST, and issues new addresses. Previously both tiers were purchased and billed together every month.
- newNew add-on: **SEO IP Pack** (
seoip7pk) — 7 dedicated IPs, each from a separate /24 subnet, for SEO hosting, multi-site isolation and sender separation. Available on all Linux Cloud plans, at order time and on running servers. - changed
GET /v1/vps/:id/addonsnow returns 444host pricing in cents —monthly_usd_cents(recurring) andprorated_usd_cents(charged today) — replacing the previousprice/retailPricedollar fields. Also returnsowned,available,featuredandip_count. - changed
POST /v1/vps/:id/addonscharges your wallet prorated to the end of the server's current cycle, and the add-on now renews with the server every month (previously it was not billed on renewal). Returns the invoice number and the new recurring total. Auto-refunds if the add-on cannot be attached.
- newNew webhook event
vps.resized— fires when a VPS changes plan (vCPU/RAM resize). Payload: vpsId, productId, vcpu, ramMb.
- newDomains —
GET/PUT /v1/domains/contactmanage the registrant (WHOIS) contact, andPOST /v1/domains/:id/auth-codeemails the EPP transfer code. (Registration/renewal/transfer stay in the dashboard — they are wallet-debiting payment flows.) Also MCP tools.
- newServer extras —
POST /v1/vps/:id/sso(console SSO),POST /v1/vps/:id/password-reset(rotate root password),GET /v1/vps/:id/addons+POST /v1/vps/:id/addons(buy an add-on; debits wallet, scope orders:write). Also MCP tools.
- newPay invoices from the API —
POST /v1/billing/invoices/:id/paysettles an unpaid invoice from your wallet balance. New opt-in scopebilling:write(not in defaults). Top-ups stay in the dashboard (payment flows).
- newFull hosting control panel on the API — file manager (list/read/write/delete/upload/download/mkdir/rename), MySQL databases, backups (create/restore/download), cron, PHP version, SSL re-issue, protected directories, WAF, browser-SSH terminal, and git deploy. All under one new opt-in scope
hosting:manage— powerful (file + shell access), so it is NOT granted by default; add it explicitly when minting a key. Also available as MCP tools.
- newEmail hosting on the API — the mail panel is now scriptable:
GET /v1/mail/domains(+ per-domain mailboxes/aliases),GET/POST/DELETE /v1/mail/mailboxeswithPATCH /v1/mail/mailboxes/:id/password, andGET/POST/DELETE /v1/mail/aliases. New scopes:mail:read(in defaults) andmail:write. Also available as MCP tools.
- newVPS resize —
GET /v1/vps/:id/plan-optionslists the plans a server can switch to (same family, same disk) andPOST /v1/vps/:id/change-planmoves it to one, applying a new vCPU/RAM allocation. The server reboots (~1 min) and disk never changes. Only the recurring price changes — no proration on an up-switch, no credit on a down-switch. Reads carry vps:read, the switch carries vps:write. Powers the new Cloud Router line (move between Router S/M/L). Also in the dashboard and as an MCP tool.
- newModel Context Protocol (MCP) server — connect Claude and other AI tools directly to your account at
https://api.444host.com/mcp(Streamable HTTP) using yourh444_API key as a Bearer token. 42 tools across ordering (real wallet-debited orders with double-confirm), VPS, hosting, domains, billing, tickets and webhooks, scope-gated by the key. - newOAuth 2.0 device-code flow (RFC 8628). Connect AI tools by browser approval instead of pasting a key: the client opens 444host.com/oauth/device, you approve the requested scopes, and it receives a scoped
h444_at_access token (+ single-useh444_rt_refresh, 90-day). Endpoints under/oauth/*with AS metadata at/.well-known/oauth-authorization-server. Revoke connected apps anytime from the API Keys page.
- newHosting lifecycle —
POST /v1/hosting/:id/suspend,POST /v1/hosting/:id/unsuspend(hosting:write) andDELETE /v1/hosting/:id(new opt-inhosting:destroyscope). Together with ordering, the full WHMCS reseller-module verb set: Create / Suspend / Unsuspend / Terminate.
- newAPI ordering —
POST /v1/vpsandPOST /v1/hostingplace real orders: atomic wallet debit, paid receipt, synchronous provisioning, and automatic refund if provisioning fails. Behind the new opt-inorders:writescope (not in default keys — it spends money). Honour Idempotency-Key. - newReseller tier — accounts with a reseller discount see and pay discounted prices on
GET /v1/productsand API orders; renewals inherit the discounted price.GET /v1/accountnow reportsreseller.enabled+discount_pct. Contact support to apply for reseller terms. - newThree more webhook events:
vps.created,hosting.created, andinvoice.paid— everything a billing/provisioning integration needs to sync state. The catalogue is now 9 events.
- newWrite endpoints. vps:write — power start/stop/reboot, rename, set/clear reverse DNS (PTR). vps:destroy (opt-in, not in defaults) — reinstall, terminate. hosting:write — PHP version, SSL re-issue. domains:write — auto-renew / lock / WHOIS / nameservers. tickets:write — open, reply, close.
- newWebhooks — subscribe a URL to account events and receive signed (HMAC-SHA256,
X-444host-Signature) POSTs. Eight endpoints under/v1/webhooksbehind webhooks:read / webhooks:write. Failed deliveries retry with exponential backoff (1m→6h). Events: vps.power.changed, vps.reinstalled, vps.ptr.changed, vps.terminated, ticket.created, ticket.replied. Manage them in the dashboard too (Account → Webhooks). - improvedIdempotency-Key header on reinstall and ticket-create dedups retried requests for 24h.
- newPublic API launch — read-only endpoints for account, VPS (incl. live stats and reverse-DNS/PTR listings), hosting, domains, billing (invoices & wallet) and support tickets. Authenticate with an
h444_…API key minted from the dashboard (Account → API Keys). 120 req/min per key.