Domains API
Everything you can do on the dashboard, you can do over the API. Base
URL:https://dominder.co/api/v1
| Method | Path | |
|---|---|---|
| GET | /me | Return the account profile this key belongs to. |
| GET | /domains | List every domain on your account. |
| POST | /domains | Start monitoring a new domain. |
| GET | /domains/:id | Fetch one domain and its latest status. |
| PATCH | /domains/:id | Update a domain's settings or records. |
| DELETE | /domains/:id | Stop monitoring and delete the domain. |
The domain object
{
"id": "66a1c0ffeec0ffee12345678", // 24-char MongoDB ObjectId
"hostname": "example.com",
"monitor": {
"status": true, // HTTP(S) reachability
"ssl": true, // TLS certificate health
"records": true // DNS record verification (requires `records`)
},
"records": [
{
"id": "66a1...",
"type": "A", // A | AAAA | CNAME | MX | TXT | NS
"host": "", // "" means apex, otherwise the subdomain
"expected": "93.184.216.34"
}
],
"intervalMinutes": null, // null = server default (usually 5)
"paused": false, // when true, scheduler skips this domain
"lastStatus": "ok", // unknown | ok | warning | failing
"lastCheckedAt": "2026-04-22T12:34:56.000Z",
"lastFailureAt": null,
"consecutiveFailures": 0,
"createdAt": "2026-04-20T09:00:00.000Z",
"updatedAt": "2026-04-22T12:34:56.000Z"
}Field meanings:
hostname - just the bare hostname, nohttps://, no path, no port.
monitor - which checks to run. Toggles are independent; set only the ones you care about.
records - only used whenmonitor.recordsis true. SeeMonitoring checksfor the matching rules.
intervalMinutes - 1 to 1440 (24 h). Leave null to inherit the server default.
lastStatus - aggregate result of the most recent check run.
GET /me
Return the account this API key belongs to.
curl https://dominder.co/api/v1/me \
-H "Authorization: Bearer $DOMINDER_API_KEY"{
"email": "you@example.com",
"name": "Your Name",
"tenantId": "66a1c0ffeec0ffee12345678",
"webhookUrl": "https://your-app.example.com/dominder-webhook",
"subscriptionStatus": "active"
}
GET /domains
Return every domain on your account, sorted by hostname.
curl https://dominder.co/api/v1/domains \
-H "Authorization: Bearer $DOMINDER_API_KEY"{
"domains": [
{ "id": "66a1...", "hostname": "example.com", "lastStatus": "ok", ... },
{ "id": "66a2...", "hostname": "other.example.com", "lastStatus": "failing", ... }
]
}
POST /domains
Start monitoring a new domain. Request body:
| Field | Type | |
|---|---|---|
hostname | string, required | Bare hostname. Must be syntactically valid; we normalize to lowercase. |
monitor | object | Any combination ofstatus,ssl,records(booleans). Defaults to{ status: true, ssl: true, records: false }. |
records | array | Zero or morerecord definitions. If you pass any, we flipmonitor.recordson automatically. |
intervalMinutes | integer | Override how often this domain is checked. 1 to 1440. Null/absent uses the server default. |
curl -X POST https://dominder.co/api/v1/domains \
-H "Authorization: Bearer $DOMINDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"hostname": "example.com",
"monitor": { "status": true, "ssl": true, "records": true },
"intervalMinutes": 5,
"records": [
{ "type": "A", "host": "", "expected": "93.184.216.34" },
{ "type": "CNAME", "host": "www", "expected": "example.com" }
]
}'Successful response (HTTP 201):
{ "domain": { "id": "66a1...", ... } }Common errors:
400- invalid hostname or record definition (seeerrors)409- that hostname is already on your account402- subscription inactive
GET /domains/:id
Fetch a single domain.
curl https://dominder.co/api/v1/domains/66a1c0ffeec0ffee12345678 \
-H "Authorization: Bearer $DOMINDER_API_KEY"Response is a single{ "domain": {...} }object. Returns404if the id doesn't exist on your account.
PATCH /domains/:id
Partially update a domain. Only the fields you include are changed. All top-level fields fromPOST /domainsare accepted, plus:
paused- whentrue, the scheduler skips this domain until you flip it back tofalse. Records and settings are kept intact.
curl -X PATCH https://dominder.co/api/v1/domains/66a1c0ffeec0ffee12345678 \
-H "Authorization: Bearer $DOMINDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "paused": true, "intervalMinutes": 15 }'Sendingrecordsreplaces the whole array - to append, fetch, append, then PATCH back.
DELETE /domains/:id
Stop monitoring and delete the domain. Historical check results are also removed.
curl -X DELETE https://dominder.co/api/v1/domains/66a1c0ffeec0ffee12345678 \
-H "Authorization: Bearer $DOMINDER_API_KEY"{ "ok": true }Pagination, filtering, and search
Not yet supported. All domains are returned in one call, sorted by hostname. If you're managing tens of thousands of domains and need pagination, contact support.