Skip to content

Create Custom Domain

POST/custom-domains

DNS Protection API · Custom Domains List

Creates a new Custom Domain and returns the newly created Custom Domain. There is a limit of 50 Custom Domains per account.

Required permissionswgaas.config:write

Parameters

Name In Type Required Description
X-Tenant-ID header string (uuid) Yes Tenant ID.

Request body

Content type: application/json

Request body fields

namestringrequired
The name of this Custom Domains List.
Must match the pattern ^[a-zA-Z0-9\-_ ]+$. Must be 1–100 characters long.
idstring (uuid)
The unique ID of this Custom Domains List.
descriptionstring
The description of this Custom Domains List.
Must be at most 250 characters long.
domainsarray of string
The Domains (or Websites) associated with this List.
Must contain at most 1000 items. Items must be unique. Each item must be 1–255 characters long.
createdAtstring (date-time)
The date/time when this custom domains list was created.
updatedAtstring (date-time)
The date/time when this custom domains list was updated.

Request samples

curl -X POST "https://api-<data-region>.central.sophos.com/dns-protection/v2/custom-domains" -H "Authorization: Bearer <access-token>" -H "X-Tenant-ID: <tenant-id>" -H "Content-Type: application/json" -d "{
  \"name\": \"My websites\",
  \"id\": \"d4e1aee7-6c4e-4c9e-a8e2-1b1f4f7c4e3e\",
  \"description\": \"Example Custom Domain List for a series of owned FQDN\",
  \"domains\": [
    \"example.com\",
    \"example.org\",
    \"example.net\"
  ],
  \"createdAt\": \"2025-01-01T12:00:00.686+00:00\",
  \"updatedAt\": \"2025-08-01T08:30:00.200+00:00\"
}"

import requests

response = requests.post(
    "https://api-<data-region>.central.sophos.com/dns-protection/v2/custom-domains",
    headers={
        "Authorization": "Bearer <access-token>",
        "X-Tenant-ID": "<tenant-id>",
        "Content-Type": "application/json",
    },
    json={   'name': 'My websites',
    'id': 'd4e1aee7-6c4e-4c9e-a8e2-1b1f4f7c4e3e',
    'description': 'Example Custom Domain List for a series of owned FQDN',
    'domains': ['example.com', 'example.org', 'example.net'],
    'createdAt': '2025-01-01T12:00:00.686+00:00',
    'updatedAt': '2025-08-01T08:30:00.200+00:00'},
)
print(response.json())

$headers = @{
    "Authorization" = "Bearer <access-token>"
    "X-Tenant-ID" = "<tenant-id>"
    "Content-Type" = "application/json"
}
$body = '{
  "name": "My websites",
  "id": "d4e1aee7-6c4e-4c9e-a8e2-1b1f4f7c4e3e",
  "description": "Example Custom Domain List for a series of owned FQDN",
  "domains": [
    "example.com",
    "example.org",
    "example.net"
  ],
  "createdAt": "2025-01-01T12:00:00.686+00:00",
  "updatedAt": "2025-08-01T08:30:00.200+00:00"
}'
Invoke-RestMethod -Method POST -Uri "https://api-<data-region>.central.sophos.com/dns-protection/v2/custom-domains" -Headers $headers -Body $body -ContentType "application/json"

package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    req, err := http.NewRequest("POST", "https://api-<data-region>.central.sophos.com/dns-protection/v2/custom-domains", strings.NewReader(`{
  "name": "My websites",
  "id": "d4e1aee7-6c4e-4c9e-a8e2-1b1f4f7c4e3e",
  "description": "Example Custom Domain List for a series of owned FQDN",
  "domains": [
    "example.com",
    "example.org",
    "example.net"
  ],
  "createdAt": "2025-01-01T12:00:00.686+00:00",
  "updatedAt": "2025-08-01T08:30:00.200+00:00"
}`))
    if err != nil {
        panic(err)
    }
    req.Header.Set("Authorization", "Bearer <access-token>")
    req.Header.Set("X-Tenant-ID", "<tenant-id>")
    req.Header.Set("Content-Type", "application/json")

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}

const response = await fetch("https://api-<data-region>.central.sophos.com/dns-protection/v2/custom-domains", {
  method: "POST",
  headers: {
    "Authorization": "Bearer <access-token>",
    "X-Tenant-ID": "<tenant-id>",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "name": "My websites",
  "id": "d4e1aee7-6c4e-4c9e-a8e2-1b1f4f7c4e3e",
  "description": "Example Custom Domain List for a series of owned FQDN",
  "domains": [
    "example.com",
    "example.org",
    "example.net"
  ],
  "createdAt": "2025-01-01T12:00:00.686+00:00",
  "updatedAt": "2025-08-01T08:30:00.200+00:00"
}),
});
const data = await response.json();
console.log(data);

Responses

201 — Created.

Response fields

namestringrequired
The name of this Custom Domains List.
Must match the pattern ^[a-zA-Z0-9\-_ ]+$. Must be 1–100 characters long.
idstring (uuid)
The unique ID of this Custom Domains List.
descriptionstring
The description of this Custom Domains List.
Must be at most 250 characters long.
domainsarray of string
The Domains (or Websites) associated with this List.
Must contain at most 1000 items. Items must be unique. Each item must be 1–255 characters long.
createdAtstring (date-time)
The date/time when this custom domains list was created.
updatedAtstring (date-time)
The date/time when this custom domains list was updated.

Errors

Status Meaning
400 Bad request.
401 Unauthorized.
403 Forbidden.
409 Conflict.
500 Unexpected error.

All error responses share the same shape — see the error response object.

Response examples

201

{
  "name": "My websites",
  "id": "d4e1aee7-6c4e-4c9e-a8e2-1b1f4f7c4e3e",
  "description": "Example Custom Domain List for a series of owned FQDN",
  "domains": [
    "example.com",
    "example.org",
    "example.net"
  ],
  "createdAt": "2025-01-01T12:00:00.686+00:00",
  "updatedAt": "2025-08-01T08:30:00.200+00:00"
}

See the guide for a narrative walkthrough of this API.