DNS Record
A DNS Record is one DNS answer of a Domain: its type, name and value, who owns it, and what the world last answered.
Properties
| Property | Type | Required | Description |
|---|---|---|---|
type | string | required | The record type, written in lowercase. |
name | string | required | The label under the Domain, such as @, www or _dmarc. |
value | string | required | The declared answer. |
owner | string | required | platform records serve the Site, authenticate mail and validate certificates, and refuse edits; startup records change freely. |
observed | string | What public DNS answered at the last daily check. | |
status | string | dangling means the target no longer answers, the opening for a subdomain takeover; removed means it no longer answers at all. |
Object
{
"$id": "https: //api.sb/ ledgerlark.com/ dns-records/ dns_record_1",
"$type": "DNSRecord",
"type": "a",
"name": "_dmarc",
"value": "192.0.2.10",
"owner": "platform",
"observed": "192.0.2.10",
"status": "missing"
}Relationships
- A DNS Record answers for one Domain: a Domain answers DNS from its records; each record belongs to one Domain.
answersFor, inverserecords.
Lifecycle
| State | Meaning | Moves to |
|---|---|---|
missing (first) | Declared, and public DNS does not answer it yet; a new record waits here while it propagates. | ok on DNSRecord.checked when public DNS answers the declared value; dangling on DNSRecord.checked when the record answers and its target does not; removed by DNSRecord.remove |
ok | Public DNS answers the declared value. | missing on DNSRecord.checked when public DNS gives no answer; drifted on DNSRecord.checked when public DNS answers another value; dangling on DNSRecord.checked when the record answers and its target does not; removed by DNSRecord.remove |
drifted | Public DNS answers a value other than the declared one, changed outside a Change. | ok on DNSRecord.checked when public DNS answers the declared value again; missing by DNSRecord.set; removed by DNSRecord.remove |
dangling | It points at a target that no longer answers, which opens the name to takeover. | ok on DNSRecord.checked when its target answers again; missing by DNSRecord.set; removed by DNSRecord.remove |
removed | It no longer answers; its history stays, and reverting its Change restores it. | None: it ends here. |
Verbs
getReturns one DNS Record by id.GET /{namespace}/dns-records/{id}listReturns DNS Records, newest first, one page at a time.GET /{namespace}/dns-recordsremoveRemove stops a Startup-owned DNS Record from answering; its history stays and a revert restores it.POST /{namespace}/dns-records/{record}/removesetSet adds or changes a Startup-owned DNS Record through a Change, previewed against what the Domain answers today.POST /{namespace}/dns-records/set
A DNS Record is kept forever and never edited: it has no update or delete.
Events
Events no Verb emits. Each Verb’s Event is in the Verbs table above; every Event is delivered in the same shape.
DNSRecord.checked
The daily check read what public DNS answers for a DNS Record and compared it with the declared value. Raised by a clock.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | required | DNSRecord.checked. |
at | datetime | required | When it happened. |
seq | integer | Its position in the namespace, one more than the Event before; any seq is a cursor into the history. | |
data | json | required | The Thing as the Action left it. |
data.dnsRecord | DNS Record | required | The DNS Record as the change left it. |
data.dnsRecord.type | string | required | The record type, written in lowercase. |
data.dnsRecord.name | string | required | The label under the Domain, such as @, www or _dmarc. |
data.dnsRecord.value | string | required | The declared answer. |
data.dnsRecord.owner | string | required | platform records serve the Site, authenticate mail and validate certificates, and refuse edits; startup records change freely. |
data.dnsRecord.observed | string | What public DNS answered at the last daily check. | |
data.dnsRecord.status | string | dangling means the target no longer answers, the opening for a subdomain takeover; removed means it no longer answers at all. |
{
"$id": "https: //api.sb/ ledgerlark.com/ events/ event_1",
"$type": "Event",
"name": "DNSRecord.checked",
"at": "2026-10-22T12: 00: 00Z",
"data": {
"dnsRecord": {
"$id": "https: //api.sb/ ledgerlark.com/ dns-records/ dns_record_1",
"$type": "DNSRecord",
"type": "a",
"name": "_dmarc",
"value": "192.0.2.10",
"owner": "platform",
"observed": "192.0.2.10",
"status": "missing"
}
},
"seq": 1
}Permissions
Which Access level may call each Verb. One-way Verbs wait their delay window.
| Operation | owner | admin | member | viewer |
|---|---|---|---|---|
DNSRecord.get | Yes | Yes | Yes | Yes |
DNSRecord.list | Yes | Yes | Yes | Yes |
DNSRecord.remove | Yes | Yes | Yes | No |
DNSRecord.set | Yes | Yes | Yes | No |
Call it
Set the latest DNS record with a domain.Example
{
"$type": "DNSRecord",
"type": "cname",
"name": "www",
"value": "fieldnotes.helpdesk.example",
"owner": "startup",
"observed": "NXDOMAIN",
"status": "dangling"
}