Skip to content

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

PropertyTypeRequiredDescription
typestringrequiredThe record type, written in lowercase.
namestringrequiredThe label under the Domain, such as @, www or _dmarc.
valuestringrequiredThe declared answer.
ownerstringrequiredplatform records serve the Site, authenticate mail and validate certificates, and refuse edits; startup records change freely.
observedstringWhat public DNS answered at the last daily check.
statusstringdangling means the target no longer answers, the opening for a subdomain takeover; removed means it no longer answers at all.

Object

JSON
{
  "$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, inverse records.

Lifecycle

DNS Record lifecycle: missing, ok, drifted, dangling, removed (ends)missing → ok: on DNSRecord.checkedmissing → dangling: on DNSRecord.checkedmissing → removed: DNSRecord.removeok → missing: on DNSRecord.checkedok → drifted: on DNSRecord.checkedok → dangling: on DNSRecord.checkedok → removed: DNSRecord.removedrifted → ok: on DNSRecord.checkeddrifted → missing: DNSRecord.setdrifted → removed: DNSRecord.removedangling → ok: on DNSRecord.checkeddangling → missing: DNSRecord.setdangling → removed: DNSRecord.removemissingokdanglingdriftedremoved
StateMeaningMoves 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
okPublic 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
driftedPublic 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
danglingIt 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
removedIt no longer answers; its history stays, and reverting its Change restores it.None: it ends here.

Verbs

  1. getReturns one DNS Record by id.
    GET /{namespace}/dns-records/{id}readNo Event
  2. listReturns DNS Records, newest first, one page at a time.
    GET /{namespace}/dns-recordsreadNo Event
  3. removeRemove stops a Startup-owned DNS Record from answering; its history stays and a revert restores it.
    POST /{namespace}/dns-records/{record}/removedoDNSRecord.removed
  4. setSet adds or changes a Startup-owned DNS Record through a Change, previewed against what the Domain answers today.
    POST /{namespace}/dns-records/setdoDNSRecord.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.

FieldTypeRequiredDescription
namestringrequiredDNSRecord.checked.
atdatetimerequiredWhen it happened.
seqintegerIts position in the namespace, one more than the Event before; any seq is a cursor into the history.
datajsonrequiredThe Thing as the Action left it.
data.dnsRecordDNS RecordrequiredThe DNS Record as the change left it.
data.dnsRecord.typestringrequiredThe record type, written in lowercase.
data.dnsRecord.namestringrequiredThe label under the Domain, such as @, www or _dmarc.
data.dnsRecord.valuestringrequiredThe declared answer.
data.dnsRecord.ownerstringrequiredplatform records serve the Site, authenticate mail and validate certificates, and refuse edits; startup records change freely.
data.dnsRecord.observedstringWhat public DNS answered at the last daily check.
data.dnsRecord.statusstringdangling means the target no longer answers, the opening for a subdomain takeover; removed means it no longer answers at all.
JSON
{
  "$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.

Operationowneradminmemberviewer
DNSRecord.getYesYesYesYes
DNSRecord.listYesYesYesYes
DNSRecord.removeYesYesYesNo
DNSRecord.setYesYesYesNo

Call it

Text
Set the latest DNS record with a domain.

Example

JSON
{
  "$type": "DNSRecord",
  "type": "cname",
  "name": "www",
  "value": "fieldnotes.helpdesk.example",
  "owner": "startup",
  "observed": "NXDOMAIN",
  "status": "dangling"
}