Automatiseer de verkoop en het beheer van LJPc-hosting en domeinnamen.
Een REST-API die JSON teruggeeft. Registreer en verhuis domeinen, beheer DNS, bestel en lever hosting uit en beheer klantsites, precies zoals de meegeleverde boilerplate dat doet.
De LJPc reseller-API laat je domeinnamen en hosting volledig geautomatiseerd verkopen en beheren. Het is een REST-API die JSON teruggeeft over HTTPS.
Alle verzoeken gaan naar de basis-URL https://ljpc-hosting.nl met paden onder /api. Hostingpaden staan onder /api/hosting/v1, de order- en productpaden onder /api/v1. Alle bedragen zijn de prijs die jouw account bij ons betaalt, inclusief je valuepack, exclusief btw; als reseller bepaal je daarbovenop je eigen verkoopprijs voor je klant.
Authenticatie
Elk verzoek authenticeert met de header X-API-Key. Er komt geen bearer-token of cookie aan te pas. Een ontbrekende of onbekende sleutel geeft HTTP 401 met een envelope-body.
Toegang tot je sleutel. LJPc stelt je sleutel in met precies de toegang die jouw integratie nodig heeft. Wil je aanpassen wat je sleutel mag doen, neem dan contact met ons op.
Vrijwel elk endpoint verpakt zijn payload in de standaard envelope. Lees .data voor de payload bij succes en .message voor de fouttekst bij een fout. Elk antwoord draagt ook een X-Validation-header (een korte JWT waarvan de jti overeenkomt met de body); die verifiëren is optioneel.
De catalogus- en winkelwagen-endpoints van de order-module zijn openbaar (geen X-API-Key) en geven RAW JSON, niet de envelope. GET /api/v1/products geeft direct {"products": […]} terug, zonder success, jti of data.
Endpoints
Paden hieronder laten de https://ljpc-hosting.nl-prefix weg in de kaarttitels maar tonen die in de voorbeelden. Domein-parameters in het pad accepteren punten.
Domeinen en TLDs
De TLD-catalogus, beschikbaarheids- en prijscontrole en het volledige beheer van domeinnamen: registreren, verhuizen, bijwerken en auth-codes opvragen.
GET/api/hosting/v1/tlds
Haalt de volledige verkoopbare TLD-catalogus op met indicatieve catalogus-lijstprijzen (EUR) per jaar. price is null wanneer de catalogusprijs niet beschikbaar is; transfer_supported geeft aan of de TLD een verhuizing met auth-code ondersteunt. Voor de exacte prijs van een specifiek domein inclusief je valuepack gebruik je /domain-names/price.
Controleert de beschikbaarheid van een domeinnaam. Het antwoord is een string per opgevraagd domein (bijvoorbeeld available). Een TLD die wij niet verkopen geeft unknown.
Vereiste permissie:Check domain availability
Parameter
Type
Verplicht
Omschrijving
domain
query string
Ja
De domeinnaam om te controleren. Een array is ook toegestaan.
Geeft de exacte prijs van een domeinnaam voor jouw account, inclusief je valuepack, als geneste money-object per domein, plus een premium-vlag. Een onbekende TLD geeft null voor die sleutel.
Vereiste permissie:Check domain price
Parameter
Type
Verplicht
Omschrijving
domain
query string
Ja
De domeinnaam om op te vragen. Een array is ook toegestaan.
Detail van een domein. Live informatie uit ons systeem wordt over de opgeslagen gegevens gelegd (met terugval op de opgeslagen rij wanneer ons systeem tijdelijk niet bereikbaar is). status kan een samengevoegde status zijn; behandel die als een ondoorzichtige waarde. Een vreemd domein geeft 404.
Registreert een nieuwe domeinnaam op een eigen WHOIS-contact. De controlevolgorde weigert een niet-ondersteunde TLD, een duplicaat of een onbekende/vreemde handle voordat het domein in ons systeem wordt geregistreerd.
Vereiste permissie:Register domains through the API
201 Created
{ "success": true, "jti": "…", "data": { "handle": "<new-handle>" } }
422 { "success": false, "jti": "…",
"message": "The country field must be 2 characters." }
PATCH/api/hosting/v1/contacts/{handle}
Werkt een WHOIS-contact bij. Eerst eigendom (404), dan validatie, dan de bijwerking in ons systeem. Alle velden zijn optioneel; niet-meegestuurde velden houden hun opgeslagen waarde.
Vereiste permissie:Update WHOIS contacts through the API
Beheer de zone-records van een eigen domein. Het record heeft de vorm {type, name, content, ttl, prio}. Beheerde types zijn A, AAAA, CNAME, MX, TXT, SRV en CAA. NS-records worden niet beheerd: ze staan niet in de GET-output en blijven bij een PUT behouden. name is relatief aan de zone (@ is de apex), ttl 60..86400, prio verplicht bij MX en SRV, anders null.
GET/api/hosting/v1/dns/zones/{domain}/records
Haalt de DNS-records van een eigen domein op. 404 wanneer het domein nog geen zone heeft (behandel dat als een lege set).
Vereiste permissie:Manage DNS through the API
Parameter
Type
Verplicht
Omschrijving
domain
path
Ja
Het eigen domein.
Voorbeeldantwoord
200 OK
{ "success": true, "jti": "…", "data": {
"zone": { "domain": "example.nl", "source": "manual" },
"records": [
{ "type": "A", "name": "@", "content": "192.0.2.10", "ttl": 3600, "prio": null }
] } }
404 { "success": false, "jti": "…", "message": "No DNS zone exists for this domain" }
PUT/api/hosting/v1/dns/zones/{domain}/records
Volledige vervanging van de beheerde recordtypes. Bij de eerste schrijfactie ontstaat een source=manual zone. Een lege array is een geldige leegmaak-actie. Een zone die door ons hostingpaneel wordt beheerd geeft 409. synced meldt of de wijziging onze DNS bereikte; false is normaal totdat het domein naar onze nameservers delegeert.
Vereiste permissie:Manage DNS through the API
Parameter
Type
Verplicht
Omschrijving
domain
path
Ja
Het eigen domein.
records
body array
Ja
De complete gewenste recordset, verpakt in een records-sleutel.
Detail van een site inclusief schijfgebruik. disk_quota_bytes is binaire GiB (disk_space_gb × 1024³), null bij onbeperkt. disk_used_bytes en email_used_bytes zijn null als er nog geen verbruiksrij is. Een vreemde of onbekende id geeft 404 (geen enumeratie).
Geeft een eenmalige SSO-URL naar het controlepaneel van de site. 204 wanneer er geen URL beschikbaar is. Eigenaargebonden: je logt alleen in op eigen of gedeelde sites.
Vereiste permissie:Login to sites
Parameter
Type
Verplicht
Omschrijving
id
path int
Ja
De site-id.
Voorbeeldantwoord
200 OK
{ "success": true, "jti": "…", "data": {
"url": "https://panel.ljpc.systems/sso?token=<single-use-token>" } }
204 No Content
403 { "success": false, "jti": "…",
"message": "You don't have permission to login to this site" }
Bestellingen
De productcatalogus en het plaatsen en volgen van bestellingen. Een bestelling wordt pending aangemaakt en asynchroon uitgeleverd; er zijn geen webhooks, dus poll GET /api/v1/orders/{id}.
GET/api/v1/products
Productcatalogus. RAW JSON, geen envelope. Zonder sleutel krijg je de lijstprijzen; stuur je je X-API-Key mee, dan zijn de prijzen de prijs die jouw account per hostingproduct bij ons betaalt, inclusief je valuepack. Optioneel filter met ?category=. Prijzen zijn decimale strings; monthly_price is null bij yearly-only producten. Uitleverbare hostingpakketten hebben een category_identifier van de vorm hosting_<N>gb, hosting_forward of hosting_dns.
Vereiste permissie:Geen (openbaar, geen sleutel)
Parameter
Type
Verplicht
Omschrijving
category
query string
Nee
Filter op categorie, bijvoorbeeld hosting of domains.
Plaatst een bestelling via het beperkte pad. Dat pad forceert status=pending, source=reseller-api, client_id=owner_id=handler_id=de aanroeper, send_invoice=false, send_quote=false, auto_deliver=true, bewaart alleen meta.external_reference en herbouwt elke cart_item uit een whitelist met server-side prijzen. De order-id staat op data.order.id.
Vereiste permissie:Create orders
Parameter
Type
Verplicht
Omschrijving
summary
body string
Nee
Korte omschrijving van de bestelling.
meta.external_reference
body string
Nee
Je eigen referentie (als enige meta bewaard).
order_lines
body array
Ja
Regels met {description, cart_item}. Zie de vorm van cart_item onder deze tabel.
Statusdetail van een bestelling, inclusief provisioning per regel. simple_status (en provisioning.overall) is pending, processing, completed of failed. De per-regel state is pending, done of failed. Zodra een hostingregel klaar is, wordt site_id ingevuld; voer die door aan GET /api/hosting/v1/sites/{id}. Een vreemde order geeft 403, een onbekende 404.
Vereiste permissie:View own orders
Parameter
Type
Verplicht
Omschrijving
id
path int
Ja
De order-id (data.order.id uit het aanmaakantwoord).
De cart_item van een orderregel heeft per type een eigen vorm: hosting = {"type":"hosting","product_uuid":"…","domain":"…","billing_period":"monthly|yearly"} (billing_period alleen nodig bij client_choice-producten; target_url verplicht bij hosting_forward); domein = {"type":"domain","action":"register|transfer","sld":"…","tld":"…","auth_code":"…"} (auth_code verplicht bij transfer); eigen ruimte = {"type":"hosting_own","space_id":<int>,"domain":"…"} (prijs 0).
Werkstromen
De belangrijkste reseller-werkstromen, stap voor stap.
Een domein registreren
1Maak een WHOIS-contact aan (POST /contacts) of hergebruik een bestaande handle (GET /contacts).
2Controleer beschikbaarheid en prijs (GET /domain-names/check en /price).
3Registreer het domein (POST /domain-names) met domain en contact_handle.
4Beheer daarna nameservers en DNS (PATCH /domain-names/{domain}, PUT /dns/zones/{domain}/records).
Hosting bestellen en uitleveren
1Zoek het product op (GET /api/v1/products) en kies de product_uuid van het pakket.
2Plaats de bestelling (POST /api/v1/orders) met een hosting-cart_item.
3Poll GET /api/v1/orders/{id} tot simple_status completed of failed is (geen webhooks).
4Lees de site_id van de hostingregel uit provisioning.lines.
5Gebruik de site: GET /sites/{id} voor verbruik, GET /sites/{id}/login voor SSO.
DNS beheren (volledige vervanging)
1Lees de huidige set (GET /dns/zones/{domain}/records). 404 betekent nog geen zone; behandel dat als leeg.
2Bouw de complete gewenste recordset op (alleen beheerde types; NS blijft automatisch behouden).
3Vervang alles met PUT /dns/zones/{domain}/records en een {"records":[…]}-body (een lege array maakt leeg).
4Controleer synced in het antwoord (informatief; blijft false tot het domein naar onze nameservers delegeert).
Asynchrone uitlevering
Uitlevering gebeurt asynchroon en er zijn geen webhooks. Poll GET /api/v1/orders/{id} tot simple_status completed of failed is en lees dan de site via de site_id van de regel. In productie draait er een wachtrij-worker die de bestellingen uitlevert.
Uitleveren-eerst facturatie
Het beperkte orderpad zet auto_deliver=true en send_invoice=false: de dienst wordt eerst uitgeleverd en daarna via een abonnement gefactureerd (needs_subscription en needs_payment in het antwoord wijzen op die opvolging). Je betaalt de prijs van je account inclusief je valuepack; je eigen verkoopprijs bepaal je zelf.
Aandachtspunten
Inloggen is eigenaargebonden
SSO logt alleen in op je eigen of gedeelde sites.
Onbekende TLD geeft "unknown"
Voor een TLD die wij niet verkopen geeft /check de waarde unknown en /price null. Behandel dat als niet-verkoopbaar.
Uitleveren-eerst abonnementsfacturatie
Bestellingen worden uitgeleverd zonder dat er een factuur of offerte wordt verstuurd; de facturatie loopt daarna via een abonnement.
Prijzen zijn inclusief je valuepack
Alle prijzen uit de API zijn de prijs die jouw account bij ons betaalt, inclusief je valuepack (excl. btw). Als reseller bepaal je daarbovenop zelf de verkoopprijs voor je klant.
Referentie-implementatie
Hosting-panel boilerplate
Een volledige voorbeeldintegratie tegen deze API: domeinen, DNS, hosting bestellen en uitleveren.
Blijf op de hoogte van recente ontwikkelingen!Schrijf je in en ontvang onze nieuwsbriefBezig met aanmelden...Bedankt voor je inschrijving!Er ging iets mis. Probeer het later opnieuw.