DNS
Free DNS hosting, without Cloudflare.
Put any domain's DNS on our three nameservers at no charge, edit it in the portal, and automate it with the tools you already use: our API takes Cloudflare's v4 paths and JSON, so switching is a base URL and a token.
- ns1.dnsoap.com
- ns2.dnsoap.com
- ns3.dnsoap.com
Getting started
Three steps.
- Add the domain in the portal, with
devhost dns zones add, or withPOST /zones. - Prove it is yours: publish the TXT record we show you, or set its nameservers to ours. Domains registered through us are recognised straight away. Until then the zone is stored but not served, so nobody can pre-load records for a domain they don't control.
- Add your records, then switch the nameservers at your registrar. Doing it in that order means no gap.
Supported record types: A, AAAA, CNAME, MX, TXT, NS (subdomain delegation), SRV and CAA.
API
Cloudflare-compatible.
Base URL https://devhost.io/api/dns/client/v4. Authenticate with Authorization: Bearer <token>; create read-only or edit tokens under portal → DNS → API tokens. Responses use Cloudflare's envelope: success, errors, result, result_info.
- GET /user/tokens/verify
- Check a token
- GET /zones · POST /zones
- List (filter by name, status) · add a zone
- GET /zones/:id · DELETE /zones/:id
- One zone · remove it from our nameservers
- PUT /zones/:id/activation_check
- Re-check ownership or nameservers now
- GET /zones/:id/dns_records · POST
- List (filter by type, name, content; paginated) · create
- GET · PATCH · PUT · DELETE /zones/:id/dns_records/:rid
- One record · edit · replace · delete
export DEVHOST_TOKEN=dh_… # portal → DNS → API tokens
# your zones
curl -s https://devhost.io/api/dns/client/v4/zones -H "Authorization: Bearer $DEVHOST_TOKEN"
# add a record
curl -s -X POST https://devhost.io/api/dns/client/v4/zones/<zone_id>/dns_records \
-H "Authorization: Bearer $DEVHOST_TOKEN" -H "Content-Type: application/json" \
-d '{"type":"A","name":"www","content":"203.0.113.10","ttl":1}'Tested with Cloudflare's official Python SDK (v5.9): zones, record create, list, edit and delete work unchanged with base_url set.
from cloudflare import Cloudflare # pip install cloudflare
cf = Cloudflare(api_token=TOKEN, base_url="https://devhost.io/api/dns/client/v4")
zone = next(iter(cf.zones.list(name="example.com")))
cf.dns.records.create(zone_id=zone.id, type="TXT", name="_acme-challenge.example.com",
content="token-from-your-acme-client", ttl=60)Any tool that lets you set the Cloudflare API base URL should work the same way. Tools with Cloudflare's address built in cannot be redirected. Not offered: proxying (records answer directly), and the rest of Cloudflare's products. ttl: 1 means automatic (5 minutes), as on Cloudflare. Pending zones carry a verification field with the TXT record to publish.
From the terminal
The devhost CLI does it too.
devhost dns zones add example.com
devhost dns add example.com A @ 203.0.113.10
devhost dns add example.com MX @ mx.example.net --priority 10
devhost dns records example.com
devhost dns rm example.com <record-id>Install and sign in as described on the CLI page.
Moving a large zone or need something not listed? Contact us.