at.happyproto.server.checkDomain
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"altRecord": {
"properties": {
"type": {
"description": "A.",
"type": "string"
},
"value": {
"description": "The instance host's public IPv4.",
"type": "string"
}
},
"required": [
"type",
"value"
],
"type": "object"
},
"checks": {
"properties": {
"checkedAt": {
"description": "When the check ran.",
"type": "string"
},
"ownership": {
"description": "Whether the TXT record carries this claim's token.",
"knownValues": [
"ok",
"missing",
"error"
],
"type": "string"
},
"pointing": {
"description": "Whether the hostname resolves to the instance's host. Absent when the check didn't get that far, such as when the TXT record was missing.",
"knownValues": [
"ok",
"elsewhere",
"error"
],
"type": "string"
}
},
"required": [
"ownership",
"checkedAt"
],
"type": "object"
},
"domain": {
"description": "A custom domain on one of the caller's instances.",
"properties": {
"checks": {
"description": "The latest DNS check. Absent until the first check has run.",
"ref": "#checks",
"type": "ref"
},
"createdAt": {
"description": "When the domain was added.",
"type": "string"
},
"expiresAt": {
"description": "When a pending claim expires if it is never verified. Absent once verified.",
"type": "string"
},
"hostname": {
"description": "The hostname, lowercase, internationalized names in punycode.",
"type": "string"
},
"id": {
"description": "The domain's UUID.",
"type": "string"
},
"lapsesAt": {
"description": "When HappyProto stops serving the domain if its TXT record stays missing. Absent while the record is present.",
"type": "string"
},
"primary": {
"description": "Whether this is the instance's primary domain, the one its PUBLIC_URL follows.",
"type": "boolean"
},
"records": {
"description": "The DNS records the customer publishes: the TXT that proves ownership, then the CNAME that points the hostname at the instance.",
"items": {
"ref": "#record",
"type": "ref"
},
"type": "array"
},
"serving": {
"description": "Whether the domain actually works: off until it is verified, issuing while its certificate is ordered, live once it serves over HTTPS.",
"knownValues": [
"routing",
"issuing",
"live",
"failed",
"off"
],
"type": "string"
},
"state": {
"description": "pending: waiting for the DNS records. verified: proven and served. lapsed: the TXT record went missing, and HappyProto stopped serving it; it recovers if the record comes back before expiresAt.",
"knownValues": [
"pending",
"verified",
"lapsed"
],
"type": "string"
},
"verifiedAt": {
"description": "When the domain was first verified.",
"type": "string"
}
},
"required": [
"id",
"hostname",
"state",
"primary",
"records",
"serving",
"createdAt"
],
"type": "object"
},
"main": {
"description": "Check a custom domain's DNS records now, rather than at the next scheduled check. Customers only.",
"errors": [
{
"description": "This endpoint requires an authenticated caller.",
"name": "AuthRequired"
},
{
"description": "The caller is not a HappyProto customer, or the provisioner refused them.",
"name": "Forbidden"
},
{
"description": "instanceId, domainId or idempotencyKey is not a UUID.",
"name": "InvalidRequest"
},
{
"description": "No such instance or domain, or it is not the caller's. The cases are indistinguishable.",
"name": "NotFound"
},
{
"description": "Custom domains are not switched on yet.",
"name": "NotAvailable"
},
{
"description": "Passed through from the provisioner.",
"name": "InvalidSlug"
},
{
"description": "Passed through from the provisioner.",
"name": "SlugTaken"
},
{
"description": "Passed through from the provisioner.",
"name": "NotEntitled"
},
{
"description": "Passed through from the provisioner.",
"name": "InstanceLimit"
},
{
"description": "Passed through from the provisioner.",
"name": "NoCapacity"
},
{
"description": "Passed through from the provisioner: the instance is already changing, or a request with this idempotencyKey is still running.",
"name": "OperationInProgress"
},
{
"description": "Passed through from the provisioner.",
"name": "InvalidHostname"
},
{
"description": "Passed through from the provisioner.",
"name": "PlatformHostname"
},
{
"description": "Passed through from the provisioner.",
"name": "DomainExists"
},
{
"description": "Passed through from the provisioner.",
"name": "DomainLimit"
},
{
"description": "The domain was checked moments ago. Wait a few seconds and try again.",
"name": "TooSoon"
},
{
"description": "Passed through from the provisioner.",
"name": "DomainIsPrimary"
},
{
"description": "The provisioner is unreachable, not configured, or answered with an error it does not explain to callers, or the job could not be started.",
"name": "Upstream"
}
],
"input": {
"encoding": "application/json",
"schema": {
"properties": {
"domainId": {
"description": "The domain's UUID.",
"type": "string"
},
"idempotencyKey": {
"description": "A UUID the client generates once per intended change and resends on every retry of it, so a retry gets the original reply instead of acting twice.",
"type": "string"
},
"instanceId": {
"description": "The instance's UUID.",
"type": "string"
}
},
"required": [
"instanceId",
"domainId",
"idempotencyKey"
],
"type": "object"
}
},
"output": {
"encoding": "application/json",
"schema": {
"properties": {
"domain": {
"ref": "#domain",
"type": "ref"
}
},
"required": [
"domain"
],
"type": "object"
}
},
"type": "procedure"
},
"record": {
"properties": {
"alt": {
"description": "For an apex name, which cannot hold a CNAME: the A record to publish instead. Absent when the instance's host has no public IPv4.",
"ref": "#altRecord",
"type": "ref"
},
"name": {
"description": "The record's name.",
"type": "string"
},
"type": {
"description": "TXT or CNAME.",
"type": "string"
},
"value": {
"description": "The record's value.",
"type": "string"
}
},
"required": [
"type",
"name",
"value"
],
"type": "object"
}
},
"id": "at.happyproto.server.checkDomain",
"lexicon": 1
}
Metadata
- DID
-
did:plc:mo7vq4jbioxwafy5zkcc3eux - CID
-
bafyreicc6egag3fab4p5ekvegst53hn47o2dgdgjdqgnfrel5pokws6lcm - Indexed At
- 2026-10-28 22:19 UTC
- AT-URI
-
at://did:plc:mo7vq4jbioxwafy5zkcc3eux/com.atproto.lexicon.schema/at.happyproto.server.checkDomain
Version History (2 versions)
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
at.happyproto.server.addDomain procedure
Add a custom domain to one of the caller's instances. It starts pending, with the DNS records to publish. Customers only.
-
The domains of one of the caller's instances: its platform subdomain and any custom domain. Customers only.
-
Run DNS verification for a custom domain owned by the authenticated DID and update its verified status.
-
at.happyproto.server.setPrimaryDomain procedure
Make a domain the primary of one of the caller's instances: a verified custom domain that is serving, or the platform subdomain. The instance restarts onto it. Customers only.
-
Everything a client needs to onboard one domain: registration state, DNS records to publish, last verification result, and certificate state. This is the endpoint to poll.