{
"id": "space.highport.manage.reserveDomain",
"defs": {
"main": {
"type": "procedure",
"input": {
"schema": {
"type": "object",
"required": [
"hostname",
"subject"
],
"properties": {
"subject": {
"type": "string",
"format": "did",
"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."
},
"hostname": {
"type": "string",
"maxLength": 253,
"description": "A name exactly one label under a delegation-enabled base the caller owns."
},
"genesisOp": {
"type": "unknown",
"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."
}
}
},
"encoding": "application/json"
},
"errors": [
{
"name": "InvalidDomain",
"description": "Not a syntactically valid, non-reserved domain."
},
{
"name": "DomainDenied",
"description": "The hostname or the subject is on the operator denylist."
},
{
"name": "NotBaseOwner",
"description": "The name is not under a delegation-enabled base whose verified or active registration belongs to the caller."
},
{
"name": "DomainTaken",
"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."
},
{
"name": "DelegationNotVerified",
"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": "InvalidSubject",
"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": "DelegatedNameTooDeep",
"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": "DelegationQuotaExceeded",
"description": "The base already holds its maxNames reservations. Never returned for a name the subject already holds."
}
],
"output": {
"schema": {
"type": "object",
"required": [
"hostname",
"status",
"subject"
],
"properties": {
"status": {
"ref": "space.highport.defs#domainStatus",
"type": "ref"
},
"subject": {
"type": "string",
"format": "did"
},
"hostname": {
"type": "string"
}
}
},
"encoding": "application/json"
},
"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."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}