DomainOpsDomainOps

Domains API

Manage domains — list, create, update, delete, retrieve health and security security status.

GET/api/v1/domainsAuth required

List all domains in your account. Supports filtering by domain name and portfolio.

Query Parameters

ParameterTypeRequiredDescription
domainstringNoFilter by domain name (partial match)
portfolio_idstringNoFilter by portfolio UUID
limitnumberNoMax results per page, default 50
offsetnumberNoPagination offset, default 0

Response

json
{
  "domains": [
    {
      "id": "uuid",
      "domain": "example.com",
      "portfolio_id": "uuid",
      "is_verified": true,
      "health_score": 85,
      "health_grade": "B",
      "expiry_date": "2025-12-01",
      "created_at": "2026-01-01T00:00:00Z"
    }
  ],
  "total": 1,
  "limit": 50,
  "offset": 0
}
GET/api/v1/domains/:idAuth required

Get a single domain by its UUID, including full WHOIS data.

Query Parameters

ParameterTypeRequiredDescription
include_endpointsbooleanNoInclude associated endpoints in the response

Response

json
{
  "id": "uuid",
  "domain": "example.com",
  "portfolio_id": "uuid",
  "is_verified": true,
  "health_score": 85,
  "health_grade": "B",
  "whois": {
    "registrar": "Namecheap",
    "expiry_date": "2025-12-01",
    "nameservers": ["ns1.example.com"]
  },
  "created_at": "2026-01-01T00:00:00Z"
}
POST/api/v1/domainsAuth required

Add a new domain to your account. Returns a verification token for DNS ownership verification.

Request Body

ParameterTypeRequiredDescription
domainstringYesDomain name, e.g. example.com
portfolio_idstringNoPortfolio UUID to assign this domain to
notesstringNoOptional free-text notes

Response

json
{
  "id": "uuid",
  "domain": "example.com",
  "portfolio_id": "uuid",
  "verification_token": "domainops-verify-xxxx",
  "is_verified": false,
  "created_at": "2026-01-01T00:00:00Z"
}

Error Codes

StatusDescription
409Domain already exists in your account
402Domain limit reached for your plan
POST/api/v1/domains/bulkAuth required

Create multiple domains in a single request.

Request Body

ParameterTypeRequiredDescription
operationstringYesMust be 'create'
domainsarrayYesArray of domain objects with the same fields as POST /domains

Response

json
{
  "message": "2 domains created",
  "domains": [
    { "id": "uuid", "domain": "example.com" },
    { "id": "uuid", "domain": "example.org" }
  ]
}
PUT/api/v1/domains/:idAuth required

Update a domain's name, portfolio assignment, or notes.

Request Body

ParameterTypeRequiredDescription
domainstringNoNew domain name
portfolio_idstringNoReassign to a different portfolio
notesstringNoUpdate notes

Response

json
{
  "id": "uuid",
  "domain": "example.com",
  "portfolio_id": "uuid",
  "notes": "Updated notes",
  "updated_at": "2026-03-28T09:00:00Z"
}
DELETE/api/v1/domains/:idAuth required

Delete a domain and all associated data including endpoints, liveness configs, and exposure results.

Response

json
{
  "message": "Domain deleted",
  "deleted_domain": {
    "id": "uuid",
    "domain": "example.com"
  }
}
GET/api/v1/domains/:id/verifyAuth required

Retrieve the DNS verification token for a domain. Add the token as a TXT record at _domainops-verify.<domain>; our worker picks up the change on its next cycle and flips is_verified to true automatically. Poll GET /api/v1/domains/:id to watch for the transition.

Response

json
{
  "id": "uuid",
  "domain": "example.com",
  "verification_token": "domainops-verify-xxxx",
  "is_verified": false
}
PATCH/api/v1/domains/:id/exposureAuth required

Enable or disable exposure scanning for a domain. The exposure-worker only scans domains with this flag set; scans run on the worker's own cadence. Domain must be verified before enabling.

Example request

json
{
  "enabled": true
}

Response

json
{
  "id": "uuid",
  "domain": "example.com",
  "is_verified": true,
  "exposure_monitoring_enabled": true
}

Error Codes

StatusDescription
403Domain must be verified before exposure scanning can be enabled.
GET/api/v1/domains/:id/statusAuth required

Get the current health status of a domain including WHOIS expiry and SSL summary.

Response

json
{
  "domain": "example.com",
  "is_verified": true,
  "health_score": 85,
  "health_grade": "B",
  "overall_status": "healthy",
  "whois": {
    "expiry_date": "2025-12-01",
    "days_until_expiry": 245
  },
  "ssl": {
    "status": "valid",
    "expiry_date": "2025-06-01"
  }
}
GET/api/v1/domains/:id/securityAuth required

Get security check results for a domain including SPF, DMARC, DKIM, CAA, DNSSEC, and transfer lock status.

Response

json
{
  "domain": "example.com",
  "transfer_lock": true,
  "dnssec_enabled": false,
  "security_score": 72,
  "checks": {
    "spf": "pass",
    "dmarc": "pass",
    "dkim": "fail",
    "caa": "pass"
  },
  "recommendations": [
    "Enable DNSSEC",
    "Add DKIM record"
  ]
}