space.highport.manage.reserveDomain

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.

Details · procedure
Kindprocedure
Authoritymanage.highport.space
Indexed

Showing version bafyreibzjqnehgxdmtrkmmn3ih2gcj5l3u2wafnzk63rc4acimqek4c3cy. Show the latest

cid bafyreibzjqnehgxdmtrkmmn3ih2gcj5l3u2wafnzk63rc4acimqek4c3cy

Checks

Valid
  • unlimited-string defs.main.output.schema.properties.hostnameNo maxLength, maxGraphemes or format limits this string.
JSONDownload
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "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.",
      "errors": [
        {
          "description": "Not a syntactically valid, non-reserved domain.",
          "name": "InvalidDomain"
        },
        {
          "description": "The hostname or the subject is on the operator denylist.",
          "name": "DomainDenied"
        },
        {
          "description": "The name is not under a delegation-enabled base whose verified or active registration belongs to the caller.",
          "name": "NotBaseOwner"
        },
        {
          "description": "The name is held and cannot be reserved: a proven registration of it exists, including one the base owner made the ordinary way, a live reservation for a different subject, or a suspended one; an unproven claim on it is itself a base carrying a delegation or a certificate grant; or it is released but still carries a delegation or a grant, such as one whose wildcard is still being retired. Release it, or wait for the retirement, first.",
          "name": "DomainTaken"
        },
        {
          "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.",
          "name": "DelegationNotVerified"
        },
        {
          "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.",
          "name": "InvalidSubject"
        },
        {
          "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.",
          "name": "DelegatedNameTooDeep"
        },
        {
          "description": "The base already holds its maxNames reservations. Never returned for a name the subject already holds.",
          "name": "DelegationQuotaExceeded"
        }
      ],
      "input": {
        "encoding": "application/json",
        "schema": {
          "properties": {
            "genesisOp": {
              "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.",
              "type": "unknown"
            },
            "hostname": {
              "description": "A name exactly one label under a delegation-enabled base the caller owns.",
              "maxLength": 253,
              "type": "string"
            },
            "subject": {
              "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.",
              "format": "did",
              "type": "string"
            }
          },
          "required": [
            "hostname",
            "subject"
          ],
          "type": "object"
        }
      },
      "output": {
        "encoding": "application/json",
        "schema": {
          "properties": {
            "hostname": {
              "type": "string"
            },
            "status": {
              "ref": "space.highport.defs#domainStatus",
              "type": "ref"
            },
            "subject": {
              "format": "did",
              "type": "string"
            }
          },
          "required": [
            "hostname",
            "status",
            "subject"
          ],
          "type": "object"
        }
      },
      "type": "procedure"
    }
  },
  "id": "space.highport.manage.reserveDomain",
  "lexicon": 1
}