Custom domains
Short links are served from the shared zngl.ink host unless you register your
own. Custom hosts need a Starter (or higher) plan.
All paths below are relative to https://api-v1.zingasuite.com/papi/v1.
| Method | Path | Purpose |
|---|---|---|
GET |
/links/domains |
List your hosts |
POST |
/links/domains |
Register a host |
DELETE |
/links/domains/{id} |
Remove a host |
Register a host
curl -X POST https://api-v1.zingasuite.com/papi/v1/links/domains \
-H "Authorization: Bearer zk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"host": "go.yourbrand.com"}'
{
"id": "3ac9…",
"host": "go.yourbrand.com",
"status": "pending",
"isDefault": false,
"verificationJson": {},
"createdAt": "2026-08-17T10:12:00Z"
}
The host is normalised (lower-cased, trailing dot stripped). A malformed host
returns 400 invalid_host; a host already claimed by another workspace returns
409 host_taken.
A new host starts pending. Point its DNS at the edge and complete verification
in the console (Zingalinks → Domains) — DNS verification is a console step,
not an API one. Once it is active you can pass its id as domainId when
creating a link.
Use a dedicated subdomain such as go.yourbrand.com, never your main website
host: a short-link host answers every path at its root.
List hosts
curl https://api-v1.zingasuite.com/papi/v1/links/domains \
-H "Authorization: Bearer zk_live_xxx"
Returns { "data": [ … ], "total": n }, newest first. Check status before
using an id — pending hosts do not resolve yet.
Remove a host
curl -X DELETE https://api-v1.zingasuite.com/papi/v1/links/domains/<id> \
-H "Authorization: Bearer zk_live_xxx"
Links on a removed host stop resolving. Keep the host registered while any
printed material that uses it is still in circulation.
Each host has its own slug namespace, so zngl.ink/sale and
go.yourbrand.com/sale are separate links, and a link cannot be moved between
hosts (that would change its short URL). Create a new link on the new host
instead.