Bestellingen
Accountscope vereist; voeg de header X-Auth-Account toe met je Account-ID.
Index/show vereisen de OAuth-scope billing:read;
create / update / destroy zijn niet beschikbaar via OAuth (er is bewust geen
billing:write-scope) — die vereisen een sessie- of API-sleutel-credential.
Bestellen verloopt via het cart-/facturatiesysteem en belast de standaard opgeslagen betaalmethode van het account off-session. Er is geen Stripe checkout-redirect.
Twee soorten bestellingen
POST /api/orders voorziet WordPress-sites.
POST /api/orders/domain registreert of
verhuist een domein via dezelfde cart-/facturatiestroom. Beide geven altijd
een 202 cart-envelop terug en zijn OAuth-geblokkeerd (vereisen een sessie-
of API-sleutel-credential).
Alle bestellingen van een account opvragen
GET /api/orders
Params (optioneel)
- page: Integer | paginanummer (standaard: 1)
- per_page: Integer | records per pagina (standaard: 50, max: 100)
Teruggegeven params
- orders: Array
- id: String | uuid
- status: String
- created_at: DateTime
- updated_at: DateTime
- location: String | location short_name, of
nullvoor bestellingen zonder locatie (bijv. domeinregistratiebestellingen) - account: Object
- id: String
- name: String
Een bestelling bekijken
GET /api/orders/:id
Poll dit endpoint totdat status een eindwaarde bereikt (completed,
failed, cancelled).
Teruggegeven params
- order: Object
- id: String | uuid
- status: String
- created_at: DateTime
- updated_at: DateTime
- location: String | location short_name, of
nullvoor bestellingen zonder locatie (bijv. domeinregistratiebestellingen)
- tasks: Array
- id: Integer
- status: String
- site: Object | aanwezig wanneer de bestelling een site heeft voorzien
- id: String
- name: String
- domain: String
- variant: String
- location: String
- ssh_data: Object
- ipaddr: String
- username: String
- password: String
- port: Integer
- subscription: Object | aanwezig wanneer de bestelling een onderliggend abonnement heeft
- id: String
- status: String
- bucket_type: String
- bucket_year: Integer
- bucket_month: Integer
- stripe_id: String
- payment: Object
- status: String | zie de payment status-enum hieronder
- method_type: String |
card,sepa_debit, of null - hosted_invoice_url: String | null
- amount_charged_cents: Integer
- credit_applied_cents: Integer
- account: Object | Zie accounts#show
- user: Object | Zie users#show
Een nieuwe site bestellen
POST /api/orders
Belast de standaard betaalmethode van het facturatieaccount off-session en voorziet
asynchroon een WordPress-site. Er is geen synchrone succestak — het endpoint geeft
altijd 202 Accepted terug met een polling-envelop.
Locatie- en plannamen vind je door het /api/about-endpoint te bevragen.
Pre-flight-controle
Vereist dat het facturatieaccount klaar is om te belasten — een Stripe-customer-ID,
een opgeslagen standaard betaalmethode, en een volledig facturatiecontact. Als de
controle faalt, wordt 400 met code: "no_default_payment_method" teruggegeven en
wordt er geen bestelling aangemaakt.
Params
- site: Object (required)
- name: String (required)
- variant: String (required) | vanilla, extendify
- location: String (required) | Location short_name (bijv. "pdx")
- plan: String (required) | Product short_name (bijv. "basic")
- term: String (required) | monthly of annual
- callback: Object | optionele uitgaande melding die wordt ge-POST wanneer de asynchrone task van de bestelling klaar is — 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:
Teruggegeven params (altijd 202 Accepted)
- status: String |
"accepted" - cart: Object
- token: String
- status: String |
active,processing,checked_out - rollup_status: String |
pending,processing,completed, ... - poll_url: String |
/api/carts/<token>
- payment: Object
- status: String |
processing,succeeded,awaiting_authentication - method_type: String |
card,sepa_debit, of null - hosted_invoice_url: String | null
- status: String |
- orders: Array
- id: String | uuid
- status: String |
pending - poll_url: String |
/api/orders/<id>
Poll cart.poll_url (of de poll_url van elke bestelling) totdat de bestellingen
materialiseren en een eindtoestand bereiken. orders is leeg tijdens het asynchrone
venster — het bestellings-ID ontdek je door de cart te pollen.
Payment status-enum
payment.status kan processing zijn (PI onderweg / off-session-belasting),
succeeded (afgerond), of awaiting_authentication (3DS/SCA vereist of een
herstelbare weigering — verwijs de gebruiker naar hosted_invoice_url). Bij SEPA
bevestigt de methode als processing en wordt afgewikkeld in 1–5 werkdagen.
Pre-flight-/validatiefouten (400)
no_default_payment_method| facturatieaccount niet klaar om te belasten- onbekende
variant/location/term/plan - variant niet beschikbaar (boven capaciteit)
- ontbrekende prijsinformatie
"Account unable to create orders."
Betaling kon niet worden gestart (422)
Als de cart geldig is maar Cart::PayService de off-session-belasting niet kan
starten, is de reactie 422 met code: "cart_pay_failed". (Een pre-flight-fout is
400; een fout bij het starten van de betaling is 422.)
Een domein registreren of verhuizen
POST /api/orders/domain
Registreert of verhuist een domein via dezelfde cart-/facturatiestroom als
POST /api/orders, belast de standaard opgeslagen betaalmethode van het account
off-session, en registreert (of verhuist) vervolgens asynchroon het domein en maakt
een verlengingsabonnement en DNS-zone aan. Geeft altijd 202 Accepted terug met de
gedeelde cart-envelop; poll /api/orders/:id (dat een domain-blok bevat) totdat
status een eindwaarde heeft.
Niet beschikbaar via OAuth en vereist een user-scoped credential. Een
system Account-bearer API key (geen gebruiker) geeft 401 user_required terug.
Vereist de header X-Auth-Account én de feature flag domain-registration —
wanneer de flag uit staat, wordt 503 feature_disabled teruggegeven.
Trial-accounts geven 403 trial_account terug.
Params
- domain: Object (required)
- name: String (required) | volledig gekwalificeerd, bijv.
example.com - action: String (optional) |
register(standaard) oftransfer - authcode: String | vereist voor verhuizingen wanneer de TLD een authcode vereist
- contact: Object | inline registrant; vereist tenzij
contact_sourceis opgegeven- first_name: String (required)
- last_name: String (required)
- organization: String (optional)
- street_address: String (required)
- post_code: String (required)
- city: String (required)
- state: String (optional/required per TLD)
- country: String (required) | tweeletterige ISO-code
- email: String (required)
- phone: String (required) | E.164, bijv.
+1.5555555555 - extra_properties: Object | TLD-specifieke registryvelden (bijv.
.itentityType)
- contact_source: Object | hergebruik de contacten van een eigen registratie in plaats van
contact- registration_id: Integer (required) | een eigen DomainRegistration met een owner-contact
- role_contacts: Object (optional) |
admin/billing/tech; elk:- source: String |
same_as_owner(standaard),existing, ofnew - source_registration_id: Integer | wanneer
sourceexistingis - first_name, last_name, ... | dezelfde contactvelden als hierboven, wanneer
sourcenewis
- source: String |
- name: String (required) | volledig gekwalificeerd, bijv.
- callback: Object (optional) | hetzelfde callback-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:
Geef een registrant op via óf een inline contact-object óf
contact_source.registration_id (om de contacten van een eigen registratie te
hergebruiken), niet beide.
Teruggegeven params (altijd 202 Accepted)
Identieke envelop als POST /api/orders:
- 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)
Fouten
Autorisatie / gating:
- 401
user_required| system Account-bearer key (geen gebruiker) - 503
feature_disabled| domeinregistratie niet ingeschakeld - 403
trial_account| trial-accounts kunnen geen domeinen bestellen
Validatie (400, geen belasting / geen bestelling aangemaakt):
invalid_action|actionnietregisteroftransferinvalid_domain| naam faalde bij normalisatie/validatieunsupported_tld| geen geconfigureerde TLD voor de naampricing_unavailable| geen bestelbare prijs voor het facturatieplan van het accountauthcode_required| verhuizing van een TLD die een authcode vereist, maar geen opgegevenincomplete_contact| inline contact mist verplichte veldeninvalid_contact| inline contact heeft een onjuiste waarde (bijv.countryniet 2 letters)invalid_contact_source|contact_source.registration_idniet gevonden of zonder owner-contactno_default_payment_method| facturatieaccount niet klaar om te belasten
Verwerking (422):
domain_unavailable| registry zegt dat de naam niet registreerbaar is (alleen register)domain_add_failed| cart weigerde het domein (bijv. al in eigendom)domain_contact_invalid| registrant-contact geweigerd (body bevatviolations)domain_contact_needs_augmentation| TLD heeft extra contactvelden nodig (body bevatneeds_augmentation)cart_pay_failed| betaling kon niet worden gestart (eventuele voor dit verzoek aangemaakte contacten worden afgebroken)
Een bestelling annuleren
Annuleert een lopende bestelling.
DELETE /api/orders/:id
Geeft 202 terug.
PATCH is een no-op
PATCH /api/orders/:id is gereserveerd en geeft 400 terug.
Carts
Poll de cart-status tijdens het asynchrone venster na POST /api/orders of een
planwijziging van een site.
Accountscope vereist (X-Auth-Account). Scope: billing:read. Carts zijn gescoped
naar je eigen account; een onbekend token geeft 404 terug.
GET /api/carts/:token
Het cart-token komt uit de create-response (cart.token / cart.poll_url). De
responsstructuur weerspiegelt POST /api/orders, zodat je dezelfde parser kunt
hergebruiken:
Teruggegeven params
- status: String |
"accepted" - cart: Object
- token: String
- status: String
- rollup_status: String
- poll_url: String
- payment: Object
- status: String
- method_type: String |
card,sepa_debit, of null - hosted_invoice_url: String | null
- orders: Array
- id: String | uuid
- status: String
- poll_url: String