REST API
July 16, 2026 ยท View on GitHub
DigitalPlat Domain OSS exposes a JSON API under /api/v1. Discover the current surface at /api/v1/openapi.json.
Authentication
Create a key in Account & security and send it as a bearer token:
curl -H "Authorization: Bearer $DOMAIN_OSS_API_KEY" \
https://domains.example.org/api/v1/domains
Keys expire and can be revoked. Available scopes are:
domains:readanddomains:writedns:readanddns:writeacme:writeadmin:metrics, available only to administrators
Domains
curl -X POST -H "Authorization: Bearer $DOMAIN_OSS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"label":"website","zone_id":1}' \
https://domains.example.org/api/v1/domains
List responses use page and per_page parameters and include pagination metadata. Domain creation follows the same zone naming, reservation, registration, and quota policies as the web interface.
DNS records
curl -X POST -H "Authorization: Bearer $DOMAIN_OSS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"@","type":"A","content":"192.0.2.10","ttl":300}' \
https://domains.example.org/api/v1/domains/1/records
DNS writes return synchronization job information. Failed provider requests are retried by domain-oss worker.
ACME DNS-01
Publish a challenge with POST /domains/{domain_id}/acme-challenges and a JSON body containing value and optional name. Save the returned one-time token. Clean it up with DELETE /domains/{domain_id}/acme-challenges/{token}. A successful cleanup returns HTTP 204. Challenges expire after one hour and the worker removes their TXT records automatically.
Errors and limits
Errors use {"error":{"message":"...","status":400}}. API keys are rate limited, request bodies are limited to 1 MiB, record values are bounded, and bulk record imports are limited to 500 records.