cPanel accounts
Accountscope vereist; voeg de header X-Auth-Account toe met je
Account-ID. Reads vereisen de OAuth-scope cpanel:read. Elke write op
deze pagina is niet beschikbaar via OAuth: bij bestellen, resizen en
opzeggen is geld gemoeid, en het wachtwoord wijzigen, opruimen, domeinen
beheren en een sessie openen geven elk de controle over de hosting zelf uit
handen. Ze declareren allemaal geen scope en zijn fail-closed op 403
endpoint not available via OAuth voor elk OAuth-token, welke scopes het
ook draagt — dezelfde behandeling die
POST /api/orders en
registrant_change krijgen. Gebruik daarvoor een sessie- of
API-sleutel-credential. Zie
OAuth en
Authenticatie.
Beschikbaarheid wordt per workspace ingeschakeld
cPanel hosting is niet beschikbaar op elke workspace. Het wordt
ingeschakeld voor workspaces die al cPanel-klant zijn — een workspace die dat
niet is, geeft 403 cpanel_not_enabled terug op elk endpoint op deze
pagina, ook op de read-endpoints.
Reads combineren de account-mirror van het hostingplatform met het lokale record
dat CloudPress per account bijhoudt, zodat een waarde een paar minuten kan
achterlopen op WHM (zie local_package hieronder). Writes lopen via dezelfde
cart- en checkoutmachinerie die het dashboard gebruikt, zodat er precies één
pad is voor provisioning, prijsbepaling en facturatie — en net als de andere
betaalde endpoints geven ze 202 Accepted terug met de gedeelde
cart-polling-envelop in plaats van een afgerond resultaat. Zie
Asynchrone bewerkingen.
Aangesproken via de gebruikersnaam, niet via een GUID
Anders dan de rest van deze API wordt een cPanel account geïdentificeerd door
zijn cPanel-gebruikersnaam — GET /api/cpanel_accounts/acmeco01, niet een
GUID. Het padsegment is beperkt tot de WHM-tekenset voor gebruikersnamen
(letters, cijfers en underscores); iets anders bereikt de lookup niet.
Verzoekbewakingen
Worden in deze volgorde toegepast, vóór de actie draait. De eerste die faalt, beantwoordt het verzoek.
| Geldt voor | Voorwaarde | Reactie |
|---|---|---|
| alle | X-Auth-Account ontbreekt of is niet te herleiden |
400 missing_account |
| alle | cPanel hosting is niet geconfigureerd op het platform | 503 cpanel_unavailable |
| alle | workspace is geen cPanel-klant | 403 cpanel_not_enabled |
| create, update, destroy | credential heeft geen gebruiker (een system Account-bearer API key) | 401 user_required |
| create, update | workspace zit in een trial | 403 trial_account |
| show, update, destroy | gebruikersnaam onbekend, of niet van jou | 404 account_not_found |
| show, update, destroy | de account-mirror kon tijdens de lookup niet worden gelezen | 503 cpanel_unavailable |
| create, update | gebruiker mag geen facturatie beheren op de workspace die eigenaar is | 403 not_authorized |
| destroy | gebruiker mag de service-lifecycle niet beheren op de workspace die eigenaar is | 403 not_authorized |
| update | account wordt verwijderd | 403 pending_deletion |
| update | account is geblokkeerd door een medewerker | 403 account_suspended |
| update | account is geblokkeerd vanwege een onbetaalde factuur | 402 service_suspended |
Waarom een ontbrekende header een 400 is en geen 403
De accountscope-controle draait bewust vóór de beschikbaarheidsbewaking,
zodat een verzoek dat simpelweg X-Auth-Account is vergeten de standaard
400 missing_account krijgt in plaats van cpanel_not_enabled — wat zou
lezen als "je workspace kan geen cPanel afnemen", terwijl het echte probleem
de header is.
Rolcontroles gelden op de workspace die eigenaar is
Toegang kan direct aan een gebruiker worden gegeven, dus het account dat je
aanspreekt is niet altijd eigendom van de workspace in X-Auth-Account.
Facturatie- en lifecycle-rollen worden daarom gecontroleerd op de workspace
die eigenaar is van het account, en een resize verrekent het abonnement
van die workspace pro rata. Facturatiebeheerder zijn in de ene workspace
geeft je niet het recht om het account van een andere te resizen.
Een gebruikersnaam waarvoor je geen rechten hebt, geeft 404
account_not_found terug en geen 403 — de API bevestigt niet dat een
gebruikersnaam elders op het platform bestaat. De drie toestandsbewakingen op
update draaien in de hierboven getoonde volgorde, zodat je bij meerdere
tegelijk het meest bruikbare antwoord krijgt: eerst herstellen, dan contact
opnemen met support, dan de factuur betalen. De body van pending_deletion
bevat ook delete_scheduled_at.
show is bewust niet aan een toestand gebonden: een geblokkeerd account of
een account dat wordt verwijderd, kan nog steeds worden opgevraagd.
Endpoints per account
De endpoints voor het wachtwoord, opruimen, domeinen en de sessie hangen onder
één account, dus ze draaien allemaal dezelfde eerste vier bewakingen —
missing_account, cpanel_unavailable, cpanel_not_enabled, en daarna de
lookup en de tenancy-controle die 404 account_not_found beantwoorden.
Daarbovenop:
| Endpoint | Gebruiker nodig | Trial | Rol op de workspace die eigenaar is | Vergrendeld tijdens verwijdering |
|---|---|---|---|---|
GET …/domains |
nee | toegestaan | geen | nee |
POST …/domains |
ja | geweigerd | facturatie beheren | ja |
DELETE …/domains/{domain} |
ja | geweigerd | facturatie beheren | ja |
PATCH …/password |
ja | geweigerd | facturatie beheren | ja |
POST …/purge |
ja | geweigerd | service-lifecycle | n.v.t. — het vereist dat het account wordt verwijderd |
POST …/session |
ja | geweigerd | bewerken | nee |
"Gebruiker nodig" betekent dat een system Account-bearer API key wordt geweigerd
met 401 user_required; een trial-workspace krijgt 403 trial_account; een
mislukte rolcontrole krijgt 403 not_authorized.
Anders dan PATCH /api/cpanel_accounts/{username} dragen deze endpoints geen
blokkeringsbewakingen — er is bij geen van alle een account_suspended- of
service_suspended-antwoord.
Waarom de domeinlijst de ruimste van de zes is
GET …/domains vereist geen gebruiker en geen rol, omdat
Een cPanel account bekijken dat ook niet
doet. De domeinlijst van een account moeilijker leesbaar maken dan het
account waar hij bij hoort, zou een asymmetrie zijn zonder iets erachter.
Een account dat wordt verwijderd, is vergrendeld
Het wachtwoord wijzigen of een domein toevoegen of verwijderen op een account
dat is ingepland voor verwijdering, geeft 403 pending_deletion terug, met
delete_scheduled_at in de body. Herstel het account eerst — en dat is een
dashboardactie (zie
Nog steeds alleen in het dashboard),
dus een onbewaakte job kan hier beter op alarmeren dan het opnieuw te
proberen.
Een opgezegd account is ook op de hostingserver geblokkeerd, dus reken er niet op dat je er nog bij de inhoud kunt — herstel het eerst.
Er is geen step-up-authenticatie in de API
Het dashboard laat je je identiteit opnieuw bevestigen vóór een
wachtwoordwijziging, een opruimactie of het verwijderen van een domein. De
API heeft geen vergelijkbare prompt, dus een first-class credential —
sessie of API-sleutel, nooit OAuth — plus de rolcontrole hierboven komt
daarvoor in de plaats. Dezelfde vervanging maken
DELETE /api/cpanel_accounts/{username},
DELETE /api/sites/{id} en
GET /api/domain_registrations/{id}/epp_code al.
cPanel accounts opvragen
GET /api/cpanel_accounts
Params (optioneel)
- page: Integer | paginanummer (standaard: 1)
- per_page: Integer | records per pagina (standaard: 50, max: 100)
- q: String | case-insensitive zoeken op deelstring in gebruikersnaam, serverhostnaam, primair domein en add-on-/aliasdomeinen
Teruggegeven params
- cpanel_accounts: Array
- username: String
- primary_domain: String |
nullwanneer voor het account nog geen hoofddomein is vastgelegd - package: Object | het live WHM-pakket
- code: String | de live WHM-pakketcode, in hoofdletters. Meestal
S,M,LofXL, maar niet beperkt tot die waarden — wat WHM rapporteert wordt ongefilterd doorgegeven, dus legacy-codes en codes buiten de catalogus verschijnen hier letterlijk.nullwanneer WHM geen pakket rapporteert - key: String |
mini,basic,pro,max;nullvoor een pakket dat niet in de huidige catalogus staat - label: String | bijv.
Pro; valt terug op de ruwe code
- code: String | de live WHM-pakketcode, in hoofdletters. Meestal
- local_package: String | WHM-code. Alleen aanwezig zolang het pakket dat CloudPress het laatst heeft voorzien afwijkt van de live mirror — dus wanneer WHM een create of resize heeft toegepast maar de mirror nog niet is gesynchroniseerd. De rest van de tijd weggelaten
- disk: Object
- used_mb: Integer
- quota_mb: Integer
- server: String | genormaliseerde hostnaam, of
null - mailbox_count: Integer
- addon_domain_count: Integer
- state: String |
active,provisioning,dunning_suspended,admin_suspended,pending_deletion - delete_scheduled_at: DateTime |
nulltenzij het account is ingepland voor verwijdering - subscription: Object |
nullwanneer het account geen lokaal abonnement heeft- id: String | abonnements-GUID
- status: String
- term: String | de huidige termijn van het abonnement
- account: Object | de workspace die eigenaar is. Weggelaten wanneer het account geen lokaal record heeft (een toekenning op klantniveau)
- id: String
- name: String
state en het provisioningvenster
state is afgeleid, en pending_deletion gaat vóór beide
blokkeringsvlaggen — het is de eindtoestand en de enige die verandert welke
bewerkingen mogelijk zijn. Een net besteld account staat op provisioning
totdat WHM het aanmaken heeft afgerond; die rijen worden opgebouwd uit het
lokale record, dus disk.used_mb / disk.quota_mb en server zijn null,
mailbox_count en addon_domain_count zijn 0, local_package is nooit
aanwezig, en package geeft het bestelde pakket weer in plaats van een live
meting.
Plafond van 500 accounts
Er zijn in totaal maximaal 500 accounts bereikbaar, hoe je ook pagineert.
De accountlookup van de workspace is afgetopt op 500 en pagina's worden uit
die afgetopte set genomen, dus een workspace met meer dan 500 cPanel accounts
kan de rest niet bereiken via dit endpoint — verdere pagina's raken
simpelweg op. Beperk het resultaat met q in plaats van dieper te pagineren.
(De lijst in het dashboard valt onder hetzelfde plafond.)
De reactie bevat geen metadata met een totaalaantal; pagineer door totdat
cpanel_accounts leeg terugkomt, met inachtneming van het plafond hierboven.
Wat niet wordt getoond
Alleen cPanel hosting-accounts verschijnen. Alleen-mail-accounts worden
uitgesloten: het zijn geen cPanel hostingaccounts, en show / update /
destroy geven er alle drie 404 voor terug, dus ze tonen zou
gebruikersnamen adverteren die niets anders op deze pagina kan aanspreken.
Accounts waarvan het lokale record al is opgeruimd worden ook uitgesloten,
ook als de mirror ze nog teruggeeft.
Fouten
- 400
missing_account| geen workspace herleid uitX-Auth-Account - 403
cpanel_not_enabled| cPanel hosting is niet ingeschakeld voor deze workspace - 503
cpanel_unavailable| de account-mirror kon niet worden gelezen
Dit endpoint faalt expliciet
Wanneer de mirror onbereikbaar is, valt het dashboard terug op een banner en
rendert het de pagina alsnog. De API doet het tegenovergestelde en meldt de
fout expliciet als 503 cpanel_unavailable, zodat een client een storing
nooit aanziet voor "je hebt geen cPanel accounts". Probeer het opnieuw in
plaats van je gegevens af te stemmen op een lege lijst.
Een cPanel account bekijken
GET /api/cpanel_accounts/:username
Geeft hetzelfde object terug als de lijst, onder een cpanel_account-key.
Teruggegeven params
- cpanel_account: Object | zie cPanel accounts opvragen
Aantallen en het primaire domein worden uit de gecachte mirror gelezen en
degraderen in plaats van te falen: als een waarde niet gelezen kan worden, komt
mailbox_count terug als 0 en valt primary_domain terug op het lokaal
vastgelegde domein.
Fouten
- 400
missing_account| geen workspace herleid uitX-Auth-Account - 403
cpanel_not_enabled| cPanel hosting is niet ingeschakeld voor deze workspace - 404
account_not_found| onbekende gebruikersnaam, of niet toegankelijk voor deze credential - 503
cpanel_unavailable| de account-mirror kon niet worden gelezen
Een cPanel account bestellen
POST /api/cpanel_accounts
Hier wordt direct afgerekend
cPanel hosting werkt op basis van vooruitbetaling. Dit endpoint belast de
standaard opgeslagen betaalmethode van het facturatieaccount off-session en
voorziet asynchroon. Er is geen synchrone succestak en geen
checkout-redirect — het geeft altijd 202 Accepted terug. Het WHM-account
(gebruikersnaam en een gegenereerd wachtwoord) wordt aangemaakt zodra de
betaling is afgewikkeld.
Vereist een user-scoped credential; een system Account-bearer API key
geeft 401 user_required terug. Trial-workspaces geven 403
trial_account terug. Niet beschikbaar via OAuth.
Params
- package: String (required) | pakket-key (
mini,basic,pro,max) of WHM-code (S,M,L,XL) - term: String (optional) |
monthlyofannual; standaard de facturatietermijn van de workspace - domain: String (optional) | een domein dat de workspace al bezit, gebruikt als hoofddomein van het account. Laat je het weg, dan genereert cPanel een placeholder-domein
- callback: Object (optional) | uitgaande melding wanneer het asynchrone werk klaar is — hetzelfde contract als
POST /api/orders, zie Callbacks- authorization: String | volledige waarde van de Authorization-header. Voorbeeld:
Bearer 12345 - url: String | volledig gekwalificeerde URL
- authorization: String | volledige waarde van de Authorization-header. Voorbeeld:
Een nieuw domein registreren is een aparte bestelling
domain moet al een domein in de workspace zijn en daadwerkelijk
geregistreerd — een naam die alleen aan een site is gekoppeld, is niet
genoeg. Een domein registreren in dezelfde cart wordt hier niet ondersteund;
doe eerst POST /api/orders/domain
en bestel daarna het hostingaccount.
curl -X POST https://my.cloudpress.com/api/cpanel_accounts \
-H "Authorization: Bearer $CLOUDPRESS_TOKEN" \
-H "X-Auth-Account: $ACCOUNT_ID" \
-H "Content-Type: application/json" \
-d '{"package": "pro", "term": "monthly", "domain": "acmeco.com"}'
Teruggegeven params (altijd 202 Accepted)
- status: String |
"accepted" - cart: Object
- token: String
- status: String | de status van de winkelwagen zelf. Meestal
active,processingofchecked_out; terwijl je pollt kan die ookawaiting_provisioningworden (betaling geïnd, provisioning geparkeerd) ofexpired(de winkelwagen is mislukt of verlaten), dus behandel de lijst als voorbeelden en niet als een gesloten set - rollup_status: String
- poll_url: String | absolute URL, bijv.
https://your-instance/api/carts/<token>
- payment: Object
- status: String |
processing,succeeded,awaiting_authentication - method_type: String | het opgeloste Stripe-betaalmethodetype. Meestal
cardofsepa_debit, maar elk Stripe-type kan hier terechtkomen —us_bank_account,bacs_debit,acss_debit,au_becs_debit,customer_balance,idealen andere zijn allemaal mogelijk.nullzolang het niet kan worden bepaald - hosted_invoice_url: String |
null
- status: String |
- orders: Array | elk
{ id, status, poll_url }; leeg tijdens het asynchrone venster
Poll cart.poll_url om de bestelling te ontdekken, en daarna elke
orders[].poll_url totdat de status een eindwaarde heeft. orders is in het
begin leeg op Stripe-facturatieplannen — de bestelling wordt aangemaakt nadat de
belasting is afgewikkeld. Betaalscenario's (3DS-parkering, SEPA, creditsaldo,
weigering) gedragen zich exact zoals gedocumenteerd bij
PATCH /api/sites/:id.
Fouten
Autorisatie / gating:
- 400
missing_account| geen workspace herleid uitX-Auth-Account - 401
user_required| system Account-bearer key (geen gebruiker) - 403
cpanel_not_enabled| cPanel hosting is niet ingeschakeld voor deze workspace - 403
trial_account| trial-workspaces kunnen geen cPanel hosting afnemen - 403
not_authorized| gebruiker mag geen facturatie beheren op deze workspace
Validatie (400, geen belasting, geen bestelling aangemaakt):
unknown_package|packageis geen bekende pakket-key of WHM-codeinvalid_term|termis nietmonthlyofannualproduct_unavailable| het gevraagde pakket wordt niet aangeboden op dit facturatieplanno_default_payment_method| het facturatieaccount is niet klaar om te belasten
Verwerking (422):
no_price_for_plan| geen prijs voor het gevraagde pakket en de gevraagde termijndomain_not_owned|domainis geen domein in deze workspacedomain_not_registered|domainis nergens geregistreerddomain_in_use|domainis al in gebruik op een ander hostingaccountcart_add_failed| de cart weigerde het item-
cart_pay_failed| de off-session-belasting kon niet worden gestart -
503
cpanel_unavailable| cPanel is niet geconfigureerd, ofdomainkon niet worden gecontroleerd tegen de hostingservers
Pakket wijzigen (resize)
PATCH /api/cpanel_accounts/:username
Wijzigt het WHM-pakket en verrekent de facturatie opnieuw pro rata. Op een
Stripe-facturatieplan is dit een pro-rata-cart die off-session wordt belast —
dezelfde machinerie als een resize van een WordPress-site; op een niet-Stripe-plan
bouwt het een resize-bestelling die de pakketwijziging zonder betaling toepast.
Geeft 202 Accepted terug met dezelfde cart-envelop als
Een cPanel account bestellen.
De termijn verandert nooit
Een resize wordt altijd geprijsd op de huidige termijn van het actieve
abonnement. Er is hier geen term-, domain- of callback-param, dus dit
endpoint geeft nooit invalid_term, domain_not_owned of domain_in_use
terug.
Params
- package: String (required) | doel-pakket-key (
mini,basic,pro,max) of WHM-code (S,M,L,XL)
Teruggegeven params (altijd 202 Accepted)
Identieke envelop als Een cPanel account bestellen:
- status: String |
"accepted" - cart: Object |
{ token, status, rollup_status, poll_url } - payment: Object |
{ status, method_type, hosted_invoice_url } - orders: Array |
[{ id, status, poll_url }](leeg tijdens het asynchrone venster)
Probeer een resize niet blind opnieuw
Een pakketwijziging wordt geclaimd voordat er geld beweegt, dus een tweede
PATCH die wordt verstuurd terwijl de eerste nog wordt toegepast, wordt
geweigerd met 409 resize_in_flight in plaats van een tweede pro rata te
belasten. "Zit al op dat pakket" wordt gecontroleerd tegen zowel de live
mirror als het laatst voorziene pakket, wat hetzelfde venster van de andere
kant dichtzet. Als een verzoek een time-out geeft, poll dan de cart of vraag
het account opnieuw op in plaats van de PATCH opnieuw te versturen.
Downgrades moeten binnen het huidige gebruik passen
Een kleiner pakket wordt geweigerd met 422 usage_exceeds_package wanneer
het huidige schijf-, mailbox- of add-on-domeingebruik van het account meer is
dan het doelpakket bevat — WHM zou anders de kleinere quota alsnog toepassen
en het account direct boven quota achterlaten. Verlaag eerst het gebruik.
Upgrades worden nooit op gebruik gecontroleerd, dus een account dat op een
ouder pakket boven de huidige limieten zit, kan altijd omhoog.
Fouten
Autorisatie / gating:
- 400
missing_account| geen workspace herleid uitX-Auth-Account - 401
user_required| system Account-bearer key (geen gebruiker) - 403
cpanel_not_enabled| cPanel hosting is niet ingeschakeld voor deze workspace - 403
trial_account| trial-workspaces kunnen niet resizen - 403
not_authorized| gebruiker mag geen facturatie beheren op de workspace die eigenaar is - 404
account_not_found| onbekende gebruikersnaam, of niet toegankelijk voor deze credential
Accounttoestand:
- 403
pending_deletion| het account wordt verwijderd en is vergrendeld — herstel het eerst (de body bevatdelete_scheduled_at) - 403
account_suspended| geblokkeerd door een medewerker; neem contact op met support - 402
service_suspended| geblokkeerd vanwege een onbetaalde factuur
Validatie (400):
unknown_package|packageis geen bekende pakket-key of WHM-codeproduct_unavailable| het doelpakket wordt niet aangeboden op dit facturatieplanno_default_payment_method| er is een opgeslagen standaardbetaalmethode nodig om de proratie off-session te belasten, en die is niet gevonden
Conflict (409):
resize_in_flight| een eerdere pakketwijziging wordt nog toegepast
Verwerking (422):
same_package| zit al op dat pakketusage_exceeds_package| het doelpakket is kleiner dan het huidige schijf-, mailbox- of add-on-domeingebruikno_price_for_plan| geen prijs voor het doelpakket op de termijn van het abonnementno_billing_subscription| Stripe-facturatieplan zonder gekoppeld abonnement om pro rata tegen te verrekenen (een account dat is gemigreerd en hier nooit is gefactureerd)subscription_not_proratable| de cart kon niet als pro-rata-wijziging worden klaargezet; geweigerd in plaats van belast als een volledig nieuwe aankoopcart_add_failed| de cart weigerde het item-
cart_pay_failed| de off-session-belasting kon niet worden gestart -
503
cpanel_unavailable| cPanel is niet geconfigureerd, of de mirror kon niet worden gelezen
Een cPanel account opzeggen
DELETE /api/cpanel_accounts/:username
Dit is een soft delete. Het legt de bewaartermijn vast, zegt de facturatie op —
waarmee verlengingen stoppen en de niet-gebruikte eerste termijn wordt
gecrediteerd — en blokkeert het account op WHM. Het account blijft herstelbaar
vanuit het CloudPress-dashboard tot delete_scheduled_at, waarna het definitief
wordt verwijderd.
Vereist lidmaatschap van de service-lifecycle-rol op de workspace die eigenaar is. Medewerkers die geen lid zijn van de workspace zijn uitgesloten, en er is geen step-up-authenticatie in de API die in de plaats kan komen van de identiteitsbevestiging in het dashboard.
Geeft 202 Accepted terug.
Teruggegeven params
- status: String |
"pending_deletion" - username: String
- delete_scheduled_at: DateTime | de vastgezette verwijderdatum; tot dat moment herstelbaar
Fouten
- 400
missing_account| geen workspace herleid uitX-Auth-Account - 401
user_required| system Account-bearer key (geen gebruiker) - 403
cpanel_not_enabled| cPanel hosting is niet ingeschakeld voor deze workspace - 403
not_authorized| gebruiker mag de service-lifecycle niet beheren op de workspace die eigenaar is - 404
account_not_found| onbekende gebruikersnaam, of niet toegankelijk voor deze credential - 422
account_already_purged| de mirror toont het account nog, maar het is al opgeruimd - 422
account_delete_failed| het account kon niet worden ingepland voor verwijdering - 503
cpanel_unavailable| cPanel is niet geconfigureerd, of de servercredentials van het account konden niet worden bepaald
Een account direct opruimen
POST /api/cpanel_accounts/:username/purge
Permanent en onomkeerbaar. Geeft het account en zijn gegevens nu vrij in
plaats van op delete_scheduled_at. Dit verkort alleen een bewaartermijn die
opzeggen al heeft geopend — het account moet al
op verwijderen wachten, en er is geen gecombineerd pad dat in één keer opzegt
én opruimt, dus één verkeerde aanroep kan nooit een actief account vernietigen.
Geeft 202 Accepted terug. Het verwijderen zelf draait op de achtergrond,
maar het account verdwijnt direct uit GET /api/cpanel_accounts — de afwezigheid
in die lijst is het signaal waarop je moet pollen, en er is geen task om te
volgen.
Vereist lidmaatschap van de service-lifecycle-rol op de workspace die eigenaar is, en is niet beschikbaar via OAuth.
Teruggegeven params
- status: String |
"purging" - username: String
Fouten
- 400
missing_account| geen workspace herleid uitX-Auth-Account - 401
user_required| system Account-bearer key (geen gebruiker) - 403
cpanel_not_enabled| cPanel hosting is niet ingeschakeld voor deze workspace - 403
trial_account| de workspace zit in een trial - 403
not_authorized| gebruiker mag de service-lifecycle niet beheren op de workspace die eigenaar is - 404
account_not_found| onbekende gebruikersnaam, of niet toegankelijk voor deze credential - 422
account_not_pending_deletion| het account is actief; zeg het eerst op - 503
cpanel_unavailable| cPanel is niet geconfigureerd, of de mirror kon niet worden gelezen
Het cPanel-wachtwoord wijzigen
PATCH /api/cpanel_accounts/:username/password
Zet het wachtwoord direct op het hostingaccount — er is geen asynchroon venster, dus het oude wachtwoord werkt meteen niet meer.
Dit is geen noodstop voor sessies
Of cPanel ook sessies afbreekt die al openstonden onder het oude wachtwoord, is gedrag van cPanel zelf en wordt hier niet gegarandeerd. Roteer je omdat een credential is gelekt, beschouw deze aanroep dan niet als bewijs dat de gelekte sessie gesloten is.
De wachtwoordsterkte wordt afgedwongen door de hostingserver, niet door
CloudPress; een waarde die hij weigert komt terug als password_change_failed.
De fouttekst is bewust algemeen — het bericht van de server zelf wordt gelogd in
plaats van doorgegeven.
Params
- password: String (required) | het nieuwe wachtwoord. Er is geen
password_confirmation— dat hoort bij het formulier, niet bij het API-contract
Teruggegeven params
- status: String |
"changed" - username: String
Fouten
- 400
missing_account| geen workspace herleid uitX-Auth-Account - 401
user_required| system Account-bearer key (geen gebruiker) - 403
cpanel_not_enabled| cPanel hosting is niet ingeschakeld voor deze workspace - 403
trial_account| de workspace zit in een trial - 403
not_authorized| gebruiker mag geen facturatie beheren op de workspace die eigenaar is - 403
pending_deletion| het account is ingepland voor verwijdering; herstel het eerst - 404
account_not_found| onbekende gebruikersnaam, of niet toegankelijk voor deze credential - 422
password_blank| geenpasswordmeegestuurd - 422
password_change_failed| de server weigerde de waarde, meestal op sterkte - 503
cpanel_unavailable| cPanel is niet geconfigureerd, of de servercredentials van het account konden niet worden bepaald
Domeinen van een account opvragen
GET /api/cpanel_accounts/:username/domains
De aliassen, subdomeinen en add-on-domeinen die aan één account hangen. Wordt live van de hostingserver gelezen (met de lokale mirror als terugval), zodat een domein dat via deze API is toegevoegd verschijnt zodra de server klaar is met het opbouwen ervan.
Elke rij bevat twee typevelden. type is de ruwe waarde die de server
rapporteert en is schema-afhankelijk — main, addon, sub, parked, alias
en andere schrijfwijzen komen allemaal voor. domain_type is het genormaliseerde
vocabulaire dat deze API spreekt, en dat is wat de rest van deze sectie bedoelt
met de soort van een domein; het is null voor het hoofddomein van het account,
dat niet verwijderd kan worden.
Teruggegeven params
- domains:
Array<Object>- name: String
- type: String | het ruwe type dat de hostingserver rapporteert;
nullwanneer hij er geen rapporteert - domain_type: String |
parked,subdomainofaddon;nullvoor het hoofddomein
- usage: Object | tellers per soort en de limieten van het pakket
- addon: Object
- count: Integer
- limit: Integer | de numerieke limiet;
nullbij onbeperkt of onbekend - unlimited: Boolean |
truealleen wanneer de server daadwerkelijk onbeperkt meldde - at_limit: Boolean |
truealleen tegen een echte numerieke limiet, zodat een onbekende limiet nooit blokkeert
- alias: Object | dezelfde vorm als
addon - subdomain: Object | dezelfde vorm als
addon
- addon: Object
limit: null is bewust dubbelzinnig
Een limit van null betekent óf "onbeperkt", óf "we konden de limiet niet
lezen" — unlimited is het veld dat die twee onderscheidt. Vertak op
at_limit, dat alleen true is tegen een limiet die echt bekend is.
Fouten
- 400
missing_account| geen workspace herleid uitX-Auth-Account - 403
cpanel_not_enabled| cPanel hosting is niet ingeschakeld voor deze workspace - 404
account_not_found| onbekende gebruikersnaam, of niet toegankelijk voor deze credential - 503
cpanel_unavailable| cPanel is niet geconfigureerd, of de domeinlijst kon niet worden gelezen
Een domein toevoegen
POST /api/cpanel_accounts/:username/domains
Welke parameters vereist zijn, hangt af van domain_type:
Geef de volledige hostnaam mee in domain. Die moet al geregistreerd zijn
en eigendom van deze workspace — een naam die dat niet is, krijgt het
bewust algemene domain_not_eligible in plaats van uitleg over welke helft
faalde, zodat je hiermee niet kunt aftasten hoe een domein op het platform
bekend is.
Het doel dat een alias deelt is geen parameter; dat wordt serverzijdig altijd het primaire domein van het account.
Geef label (één enkel DNS-label, zonder punten) en rootdomain mee. Het
bovenliggende domein moet een van de eigen domeinen van dit account zijn
— het hoofddomein, de add-on-domeinen en de parked-/aliasdomeinen komen
allemaal in aanmerking.
Geeft 202 Accepted terug en geen 201, en dat verschil doet ertoe: de
hostingserver meldt succes voordat het opnieuw opbouwen van de vhost en de zone
klaar is, dus het domein kan daarna nog even ontbreken in
Domeinen van een account opvragen. Poll die
lijst op de naam in plaats van de reactie te behandelen als bewijs dat het domein
live is.
Params
- domain_type: String (required) |
parked,subdomainofaddon - domain: String (required voor
parkedenaddon) | de volledige hostnaam - label: String (required voor
subdomain) | één enkel DNS-label, zonder punten - rootdomain: String (required voor
subdomain) | het bovenliggende domein - dir: String (optional,
subdomainenaddon) | documentroot
Teruggegeven params
- status: String |
"accepted" - domain: String
- domain_type: String
Fouten
- 400
missing_account| geen workspace herleid uitX-Auth-Account - 401
user_required| system Account-bearer key (geen gebruiker) - 403
cpanel_not_enabled| cPanel hosting is niet ingeschakeld voor deze workspace - 403
trial_account| de workspace zit in een trial - 403
not_authorized| gebruiker mag geen facturatie beheren op de workspace die eigenaar is - 403
pending_deletion| het account is ingepland voor verwijdering; herstel het eerst - 404
account_not_found| onbekende gebruikersnaam, of niet toegankelijk voor deze credential - 422
invalid_domain_type|domain_typeis niet een van de drie - 422
domain_blank| geendomainmeegestuurd - 422
invalid_hostname|domainis geen geldige hostnaam - 422
label_blank| geenlabelmeegestuurd voor een subdomein - 422
invalid_label|labelis geen geldig DNS-label - 422
rootdomain_blank| geenrootdomainmeegestuurd voor een subdomein - 422
invalid_parent_domain| het bovenliggende domein is niet een van de eigen domeinen van dit account - 422
domain_not_eligible| het domein is niet geregistreerd op deze workspace, of kan hier niet worden toegevoegd - 422
addon_domain_limit_reached| de add-on-limiet van het pakket is bereikt - 422
alias_domain_limit_reached| de aliaslimiet van het pakket is bereikt - 422
domain_create_failed| de hostingserver weigerde de wijziging - 503
cpanel_unavailable| cPanel is niet geconfigureerd, of de server was niet bereikbaar
Een domein verwijderen
DELETE /api/cpanel_accounts/:username/domains/:domain
:domain is de naam van het domein, geen ID. Het moet een van de eigen
domeinen van dit account zijn; al het andere krijgt 404 domain_not_found —
hetzelfde antwoord dat een volstrekt onbekende naam krijgt, zodat je hiermee niet
kunt aftasten wat er elders op het platform staat.
De soort verwijdering wordt serverzijdig afgeleid uit de eigen rij van het domein
in de lijst. Er is geen domain_type-parameter, en meesturen wordt genegeerd.
Het hoofddomein van het account kan niet worden verwijderd
(invalid_domain_type) — zeg in dat geval het account op.
DNS wordt alleen opgeruimd bij subdomeinen
Een subdomein verwijderen haalt ook de records ervan uit de bovenliggende zone. Bij een alias of een add-on-domein blijft de zone bewust staan, zodat het domein opnieuw gebruikt kan worden.
Params (optioneel)
- rootdomain: String | een hint voor het bovenliggende domein van een subdomein. Wordt alleen gehonoreerd wanneer het echt een van de bovenliggende domeinen van dit account is; anders wint de serverzijdige afleiding
Teruggegeven params
- status: String |
"removed" - domain: String
- domain_type: String
Fouten
- 400
missing_account| geen workspace herleid uitX-Auth-Account - 401
user_required| system Account-bearer key (geen gebruiker) - 403
cpanel_not_enabled| cPanel hosting is niet ingeschakeld voor deze workspace - 403
trial_account| de workspace zit in een trial - 403
not_authorized| gebruiker mag geen facturatie beheren op de workspace die eigenaar is - 403
pending_deletion| het account is ingepland voor verwijdering; herstel het eerst - 404
account_not_found| onbekende gebruikersnaam, of niet toegankelijk voor deze credential - 404
domain_not_found| het domein hoort niet bij dit account - 422
invalid_domain_type| het domein is het hoofddomein van het account, of de soort kon niet worden afgeleid - 422
domain_remove_failed| de hostingserver weigerde de wijziging - 503
cpanel_unavailable| cPanel is niet geconfigureerd, of de server was niet bereikbaar
Een cPanel-sessie openen
POST /api/cpanel_accounts/:username/session
Maakt een eenmalige, kortlevende inlog-URL aan voor de cPanel-interface van
het account. Net als POST /api/sites/{id}/sso geeft het de URL
terug en stuurt het nooit door, zodat geen enkele reactie van deze API ooit een
cross-host 302 is en de aanroeper zelf bepaalt wat ermee gebeurt.
Behandel de URL als een credential
Wie hem heeft, is ingelogd als het cPanel-account. Log hem niet, cache hem niet en zet hem niet in een URL die ergens wordt vastgelegd.
De teruggegeven URL wordt gecontroleerd op dezelfde hostingserver waaraan het
verzoek is gericht. Een URL die daar niet op staat, wordt geweigerd met
sso_url_rejected en nooit teruggegeven, zodat een verkeerd geconfigureerde of
gecompromitteerde server hier geen open redirect van kan maken.
Vereist bewerkrechten op de workspace die eigenaar is — leden met alleen leesrechten kunnen geen sessie openen.
Teruggegeven params
- url: String | de eenmalige inlog-URL
Fouten
- 400
missing_account| geen workspace herleid uitX-Auth-Account - 401
user_required| system Account-bearer key (geen gebruiker) - 403
cpanel_not_enabled| cPanel hosting is niet ingeschakeld voor deze workspace - 403
trial_account| de workspace zit in een trial - 403
not_authorized| gebruiker mag de workspace die eigenaar is niet bewerken - 404
account_not_found| onbekende gebruikersnaam, of niet toegankelijk voor deze credential - 422
sso_url_rejected| de hostingserver gaf een inlog-URL terug die niet te vertrouwen was - 503
cpanel_unavailable| de server was niet bereikbaar, of er kon geen sessie worden aangemaakt
Nog steeds alleen in het dashboard
Eén ding op de pagina cPanel accounts heeft geen API-route: een account herstellen dat wordt verwijderd. Opzeggen en opruimen zijn allebei te scripten; een opzegging terugdraaien niet.
Dat is minder een omissie dan het lijkt. Een account opzeggen zegt het abonnement volledig op en crediteert de ongebruikte termijn, dus herstel is een nieuwe aankoop — er wordt een winkelwagen voor het pakket opgebouwd en een betaling afgerond, waarna het bestaande hostingaccount weer wordt geactiveerd in plaats van opnieuw aangemaakt. Het is een checkout-flow, geen enkele aanroep.
Dat laat een echte asymmetrie achter waar je omheen moet plannen. Opzeggen en opruimen zijn allebei te scripten, opruimen is onomkeerbaar, en om een van beide terug te draaien is een mens bij een checkout nodig. Er is geen geautomatiseerde nooduitgang, dus een onbewaakte opruimjob moet elke opzegging die hij uitvoert als definitief behandelen.
Nodig via de API?
Laat het ons weten wat je automatiseert — aan een concrete workflow hebben we meer dan aan een algemeen verzoek om pariteit.