space.highport.manage.reserveDomain

lexicons.highport.space

Schema Diff

+3 -3

From

CID
bafyreid6coiwyxe...
Indexed At
2026-09-15 17:46 UTC
View this version

To

CID
bafyreiad6x4iikw...
Indexed At
2026-09-17 00:03 UTC
View this version

Compatibility Analysis

Backward Compatible

No changes detected.

1 1
{
2 2
  "id": "space.highport.manage.reserveDomain",
3 3
  "defs": {
4 4
    "main": {
5 5
      "type": "procedure",
6 6
      "input": {
7 7
        "schema": {
8 8
          "type": "object",
9 9
          "required": [
10 10
            "hostname",
11 11
            "subject"
12 12
          ],
13 13
          "properties": {
14 14
            "subject": {
15 15
              "type": "string",
16 16
              "format": "did",
17 17
              "description": "The identity the name is reserved for. Without genesisOp it is checked for syntax only: it need not resolve, and its DID document need not name the hostname yet."
18 18
            },
19 19
            "hostname": {
20 20
              "type": "string",
21 21
              "maxLength": 253,
22 22
              "description": "A name exactly one label under a delegation-enabled base the caller owns."
23 23
            },
24 24
            "genesisOp": {
25 25
              "type": "unknown",
26 26
              "description": "Optional proof for a did:plc subject: its signed genesis operation, as submitted to a PLC directory. Verified offline, without resolving anything. The call is refused with InvalidSubject unless the operation is a genesis operation (prev is null) that hashes to the subject, is signed by one of its own rotation keys, and lists at://<hostname> in alsoKnownAs. A subject that is not a did:plc cannot carry one."
27 27
            }
28 28
          }
29 29
        },
30 30
        "encoding": "application/json"
31 31
      },
32 32
      "errors": [
33 33
        {
34 34
          "name": "InvalidDomain",
35 35
          "description": "Not a syntactically valid, non-reserved domain."
36 36
        },
37 37
        {
38 38
          "name": "DomainDenied",
39 39
          "description": "The hostname or the subject is on the operator denylist."
40 40
        },
41 41
        {
42 42
          "name": "NotBaseOwner",
43 43
          "description": "The name is not under a delegation-enabled base whose verified or active registration belongs to the caller."
44 44
        },
45 45
        {
46 46
          "name": "DomainTaken",
47 -
          "description": "A proven registration of this name exists, including one the base owner made the ordinary way; release it first."
47 +
          "description": "A proven registration of this name exists, including one the base owner made the ordinary way, a live reservation for a different subject, or a suspended one; release it first."
48 48
        },
49 49
        {
50 50
          "name": "DelegationNotVerified",
51 51
          "description": "The base's wildcard has not been shown to route to this service: its delegation probe has not passed yet, or the base's routing has lapsed. The message names the probe hostname and the *.<base> record to publish or restore. The name being reserved is never resolved."
52 52
        },
53 53
        {
54 54
          "name": "InvalidSubject",
55 55
          "description": "The subject is not a well-formed did:plc or did:web, or is a did:web rooted at the hostname being reserved, or a genesisOp was given that does not prove the subject. The message says which rule failed."
56 56
        },
57 57
        {
58 58
          "name": "DelegatedNameTooDeep",
59 59
          "description": "The name is more than one label under the base. A wildcard covers exactly one label, so a deeper name could never complete a handshake."
60 60
        },
61 61
        {
62 62
          "name": "DelegationQuotaExceeded",
63 -
          "description": "The base already holds its maxNames reservations."
63 +
          "description": "The base already holds its maxNames reservations. Never returned for a name the subject already holds."
64 64
        }
65 65
      ],
66 66
      "output": {
67 67
        "schema": {
68 68
          "type": "object",
69 69
          "required": [
70 70
            "hostname",
71 71
            "status",
72 72
            "subject"
73 73
          ],
74 74
          "properties": {
75 75
            "status": {
76 76
              "ref": "space.highport.defs#domainStatus",
77 77
              "type": "ref"
78 78
            },
79 79
            "subject": {
80 80
              "type": "string",
81 81
              "format": "did"
82 82
            },
83 83
            "hostname": {
84 84
              "type": "string"
85 85
            }
86 86
          }
87 87
        },
88 88
        "encoding": "application/json"
89 89
      },
90 -
      "description": "Reserve a name directly under a delegation-enabled base for another identity. The name answers /.well-known/atproto-did with the subject before the subject has published anything, and the subject may then publish a site there. The caller must be the base's registered identity. An unproven claim on the name, held by any identity, is replaced. A reservation has no expiry: it is held for as long as the base is."
90 +
      "description": "Reserve a name directly under a delegation-enabled base for another identity. The name answers /.well-known/atproto-did with the subject before the subject has published anything, and the subject may then publish a site there. The caller must be the base's registered identity. An unproven claim on the name, held by any identity, is replaced. Reserving a name again for the subject that already holds it is answered with the reservation as it stands, writes nothing, and does not count against maxNames, so a retry is safe. A reservation has no expiry: it is held for as long as the base is."
91 91
    }
92 92
  },
93 93
  "$type": "com.atproto.lexicon.schema",
94 94
  "lexicon": 1
95 95
}

Compare Other Versions

Lexicon Garden

@