Met de veldhost-API kun je alles scripten wat de knoppen in het portaal doen: deploys, logs, health, staging, cron, back-ups, domeinen en DNS. De API drijft de mpc-CLI aan en werkt vanuit elke HTTP-client, CI-pipeline of AI-agent.
Authenticatie
Maak een token aan onder API tokens en stuur het mee als bearer-token:
curl -H "Authorization: Bearer mpc_..." https://manage.veldhost.eu/api/v1/sites
Bij het aanmaken van een token kies je welke apps het mag aanraken en wat het mag doen: read (altijd aan), deploy, manage (staging, cron, back-ups en herstel) en dns. Rate limit: 120 verzoeken per minuut. Een machineleesbare specificatie staat op /api/v1/openapi.json.
Sites
GET /api/v1/sites your sites: state, url, health, deploy_state
POST /api/v1/sites/{slug}/deploy deploy from git ({"ref": "main"} optional)
GET /api/v1/sites/{slug}/deploys deploy history
GET /api/v1/sites/{slug}/logs?log=app last 200 lines (app, php, nginx-error, access)
GET /api/v1/sites/{slug}/health live health + open incidents
GET /api/v1/sites/{slug}/traffic disk + monthly traffic
Back-ups en staging
GET /api/v1/sites/{slug}/backups list restore points
POST /api/v1/sites/{slug}/backups back up now
POST /api/v1/sites/{slug}/restore {"backup_id": 12} — replaces live content
GET /api/v1/sites/{slug}/staging staging status + url
POST /api/v1/sites/{slug}/staging {"action": "create" | "refresh" | "off"}
Staging is alleen voor eigenaren en wordt in rekening gebracht op abonnementen waar het niet bij inbegrepen is — dezelfde regels als in het portaal.
Geplande taken
GET /api/v1/sites/{slug}/cron list jobs with their index
POST /api/v1/sites/{slug}/cron {"schedule": "*/5 * * * *", "command": "php artisan queue:work"}
DELETE /api/v1/sites/{slug}/cron/{index} remove a job
Domeinen en DNS
GET /api/v1/domains registered domains: expiry, auto-renew, DNSSEC
GET /api/v1/domains/{domain}/registrar registry vs live nameservers, DNSSEC state, lock, privacy
PUT /api/v1/domains/{domain}/nameservers {"mode": "custom", "nameservers": ["ns1.example.com", "ns2.example.com"]}
GET /api/v1/dns your DNS zones
POST /api/v1/dns/zones/probe {"domain": "example.com"} dry run: live zone as an import plan + registrar steps (dns scope)
GET /api/v1/dns/{zone}/records zone records
POST /api/v1/dns/{zone}/records {"name": "www", "type": "CNAME", "ttl": 3600, "content": "example.com."}
PUT /api/v1/dns/{zone}/records/{id} update a record
DELETE /api/v1/dns/{zone}/records/{id} delete a record
DNS-wijzigingen staan binnen een seconde live op onze nameservers.
Nameservers wijzigen vereist de scope dns, en wordt geweigerd met een 409 en een continue_url zolang DNSSEC actief is op het domein: het register staat in voor onze ondertekeningssleutel, dus de delegatie verplaatsen voordat die is ingetrokken (en de cachetijd ervan is verstreken) zou ervoor zorgen dat validerende resolvers het domein volledig weigeren. Het portaal leidt je erdoorheen. Je zone en records blijven hier hoe dan ook bewaard, dus terugschakelen gaat direct.
Wat de API bewust niet doet
Alles wat geld kost of een juridische toestemming vereist, blijft bij jou: POST /api/v1/sites valideert en prijst een nieuwe site en geeft daarna een continue_url terug naar het portaal, waar je de kosten bekijkt en bevestigt — de API rekent nooit iets af, en destructieve accountacties (een site verwijderen, een domein ontkoppelen) zijn helemaal niet beschikbaar.