Skip to main content
Custom Domains attach one user-owned hostname to one Service. Tovuk returns CNAME fields and agent_instruction so agents can update DNS through the user’s DNS provider API without dashboard access.

Custom domain flow

1

Add the hostname

Run:
tovuk domains add --service service_1 api.example.com --json
The response includes status, verified, dns_record_type, dns_record_name, dns_record_value, dns_setup_url, and agent_instruction.
2

Create the DNS-only CNAME

Create the returned DNS record exactly. Current Tovuk responses use a CNAME from api.example.com to cname.tovuk.app. Do not create an A record pointing at Tovuk origin hosts.
3

Verify the hostname

Run:
tovuk domains verify --service service_1 api.example.com --json
If the response is still pending, read agent_instruction before changing anything else.
4

Inspect or remove the hostname

Inspect attached hostnames:
tovuk domains list --service service_1 --json
Delete a hostname when a Service no longer owns it:
tovuk domains delete --service service_1 api.example.com --json

CLI commands

tovuk domains list --service service_1 --json
tovuk domains add --service service_1 api.example.com --json
tovuk domains verify --service service_1 api.example.com --json
tovuk domains delete --service service_1 api.example.com --json

API

  • GET /v1/services/{service_id}/domains
  • POST /v1/services/{service_id}/domains
  • POST /v1/services/{service_id}/domains/{domain}/verify
  • DELETE /v1/services/{service_id}/domains/{domain}
Responses include DNS record fields and agent_instruction so agents can act without dashboard access.

Meters and caps

Custom Domains use the customDomains plan limit. They have no direct usage meter. Traffic served through the domain still counts against Worker, Static Frontend, and transfer meters.

Rules

  • Use the DNS record returned by Tovuk.
  • Never point an A record at Tovuk origin hosts.
  • Verify DNS after creating or changing a domain.
  • Delete stale domains when a Service is retired.
Last modified on June 3, 2026