Documentation
Add an own domain
POST
/v1/domainsDomainsAdds a domain for the account's links. Then add a CNAME record from the hostname to customers.snip.link at your DNS provider; the domain turns active within minutes of the record resolving, certificate included, and links made with "domain": "go.example.com" on create_link answer at https://go.example.com/<ending>. Endings are per domain, so go.example.com/menu and snip.link/menu are different links. Pro holds 5; other plans answer 403 forbidden with details.upgrade.
Request body
JSON, sent with Content-Type: application/json.
| Field | Type | Required | Description |
|---|---|---|---|
hostname | string | required | A subdomain you control, such as go.yourbrand.com. A bare apex (yourbrand.com) cannot point a CNAME at us on most DNS providers. |
root_url | string | optional | Where the bare domain sends visitors. Screened like a link destination. |
Example request
curl -s -X POST "https://snip.link/v1/domains" \
-H "Authorization: Bearer $SNIP_KEY" \
-H "Content-Type: application/json" \
-d '{}'Example response
{
"domain": {
"id": "dom_3c1f0a9e2b7d4c55",
"hostname": "go.example.com",
"status": "active",
"detail": null,
"cname_target": "customers.snip.link",
"root_url": "https://example.com",
"links": 42,
"created_at": "2026-10-20T12:00:00.000Z"
}
}Response fields
| Field | Type | Description |
|---|---|---|
domain | Domain | |
domain.id | string | Stable id. Every domain route accepts it, or the hostname. |
domain.hostname | string | The domain links live on, without a scheme. |
domain.status | pending | active | failed | pending until the CNAME points at us and the certificate is issued, active once links on it answer, failed when verification gave up. |
domain.detail | string, null | What a pending domain is waiting for, or why it failed. Null once active. |
domain.cname_target | string | The DNS record to add at your DNS provider: a CNAME from the hostname to this target (customers.snip.link). |
domain.root_url | string, null | Where the bare domain (https://go.example.com/) sends visitors. Null answers 404. |
domain.links | integer | Links on this domain. |
domain.created_at | string |
Errors
| Status | Meaning |
|---|---|
| 400 | The body or query is invalid. details names each field. |
| 401 | The API key is missing, malformed or revoked. |
| 403 | The plan does not include this. details.upgrade names the plan that does. |
| 409 | The domain is already in this or another account. |
| 429 | Either the key exceeded its requests-per-second limit (honor Retry-After), or a daily or plan quota is used up (details.reason). |
| 503 | Own domains are switched off for the service right now. |