{
"id": "space.highport.manage.setDomainBilling",
"defs": {
"main": {
"type": "procedure",
"input": {
"schema": {
"type": "object",
"required": [
"domain",
"payerPolicy"
],
"properties": {
"domain": {
"type": "string",
"maxLength": 253,
"description": "The registered hostname. Must be registered to the calling identity."
},
"payerPolicy": {
"type": "string",
"description": "owner: every byte draws on the domain owner's allowance. visitor: authenticated visitors spend their own, and the owner pays for anonymous traffic and for visitors with nothing left.",
"knownValues": [
"owner",
"visitor"
]
},
"fallbackToOwner": {
"type": "boolean",
"default": true,
"description": "Under the visitor policy, whether a visitor with nothing left falls back to the owner rather than being refused. True is what stops a site going dark because one visitor overspent."
},
"visitorCapBytes": {
"type": "integer",
"minimum": 0,
"description": "A ceiling on what any single visitor may spend here per period. Absent means no ceiling beyond the one the visitor themselves set."
},
"ownerBudgetBytes": {
"type": "integer",
"minimum": 0,
"description": "Bytes of the owner's own allowance this site may spend on readers who have not signed in, per period. 0 requires a sign-in before anything is served; omitted leaves payerPolicy and fallbackToOwner in charge. When present it derives both."
}
}
},
"encoding": "application/json"
},
"errors": [
{
"name": "InvalidDomain",
"description": "Not a syntactically valid, non-reserved, public-suffix-safe domain. Distinct from DomainNotFound: the string is not a hostname at all."
},
{
"name": "DomainNotFound",
"description": "No such domain, or it is not registered to the calling identity."
},
{
"name": "InvalidRequest",
"description": "payerPolicy is not one of owner or visitor."
}
],
"output": {
"schema": {
"type": "object",
"required": [
"billing"
],
"properties": {
"billing": {
"type": "object",
"required": [
"domain",
"payerPolicy",
"fallbackToOwner"
],
"properties": {
"domain": {
"type": "string",
"description": "The domain."
},
"updatedAt": {
"type": "string",
"format": "datetime",
"description": "When it last changed. Absent when the domain has no arrangement recorded and is reporting the default."
},
"payerPolicy": {
"type": "string",
"description": "owner or visitor.",
"knownValues": [
"owner",
"visitor"
]
},
"fallbackToOwner": {
"type": "boolean",
"description": "Under the visitor policy, whether a visitor with nothing left falls back to the owner rather than being refused."
},
"visitorCapBytes": {
"type": "integer",
"description": "A ceiling on what any single visitor may spend here per period."
},
"ownerBudgetBytes": {
"type": "integer",
"minimum": 0,
"description": "Bytes of the owner's own allowance this site may spend on readers who have not signed in, per period. 0 requires a sign-in before anything is served; omitted leaves payerPolicy and fallbackToOwner in charge. When present it derives both."
}
},
"description": "Whose allowance a domain's traffic draws on."
},
"approvalsRevoked": {
"type": "integer",
"description": "How many visitor approvals the policy change invalidated."
}
}
},
"encoding": "application/json"
},
"description": "Set whose allowance a domain's traffic draws on. Changing payerPolicy revokes every visitor approval the domain holds: consent was given to a different arrangement. The owner always remains the residual payer."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}