XRPC API
The main app serves AT Protocol XRPC endpoints at /xrpc/{nsid}. All authenticated endpoints require a service JWT in the Authorization: Bearer <token> header, scoped to the called NSID (lxm claim).
Each endpoint also accepts kebab-case and lowercase NSID aliases (e.g. place.wisp.v2.domain.add-site, place.wisp.v2.domain.addsite).
place.wisp.v2.domain.getStatus β query
Section titled βplace.wisp.v2.domain.getStatus β queryβReturns the registration status of any domain. Auth is optional β if authenticated, also returns ownership info for domains you own.
Params:
| Field | Type | Required |
|---|---|---|
domain | string | β |
Response:
| Field | Type |
|---|---|
domain | string |
status | "unclaimed" | "pendingVerification" | "verified" | "alreadyClaimed" |
kind | "wisp" | "custom" |
verified | boolean |
siteRkey | string |
lastCheckedAt | string (datetime) |
lastError | string |
place.wisp.v2.domain.getList β query π
Section titled βplace.wisp.v2.domain.getList β query πβReturns all domains (wisp subdomains and custom domains) owned by the authenticated DID.
Response:
{ "domains": [ { "domain": "alice.wisp.place", "kind": "wisp", "status": "verified", "verified": true, "siteRkey": "my-site" }, { "domain": "example.com", "kind": "custom", "status": "pendingVerification", "verified": false, "lastCheckedAt": "2024-01-15T10:30:00.000Z" } ]}Errors: AuthenticationRequired
place.wisp.v2.domain.claimSubdomain β procedure π
Section titled βplace.wisp.v2.domain.claimSubdomain β procedure πβClaims a *.wisp.place subdomain for the authenticated DID. Max 3 wisp subdomains per DID.
Input:
| Field | Type | Required | Notes |
|---|---|---|---|
handle | string | β | Subdomain label only, e.g. alice (3β63 chars, a-z0-9-) |
siteRkey | string | Map a site immediately after claim |
Response:
| Field | Type |
|---|---|
domain | string |
kind | "wisp" |
status | "verified" | "alreadyClaimed" |
siteRkey | string |
Errors: AuthenticationRequired, InvalidDomain, AlreadyClaimed, DomainLimitReached, RateLimitExceeded
place.wisp.v2.domain.claim β procedure π
Section titled βplace.wisp.v2.domain.claim β procedure πβClaims a custom domain for the authenticated DID. Returns DNS challenge details for ownership verification.
Input:
| Field | Type | Required | Notes |
|---|---|---|---|
domain | string | β | Custom FQDN (3β253 chars) |
siteRkey | string | Map a site immediately after claim |
Response:
| Field | Type | Notes |
|---|---|---|
domain | string | |
kind | "custom" | |
status | "alreadyClaimed" | "pendingVerification" | "verified" | |
challengeId | string | Used to derive DNS targets |
txtName | string | TXT record hostname for ownership proof |
txtValue | string | TXT record value (your DID) |
cnameTarget | string | Advisory CNAME target |
siteRkey | string |
Errors: AuthenticationRequired, InvalidDomain, AlreadyClaimed, DomainLimitReached, RateLimitExceeded
place.wisp.v2.domain.addSite β procedure π
Section titled βplace.wisp.v2.domain.addSite β procedure πβMaps a site to a domain you own.
Input:
| Field | Type | Required |
|---|---|---|
domain | string | β |
siteRkey | string | β |
Response:
| Field | Type |
|---|---|
domain | string |
kind | "wisp" | "custom" |
status | "pendingVerification" | "verified" |
siteRkey | string |
mapped | true |
Errors: AuthenticationRequired, InvalidDomain, InvalidRequest, NotFound
place.wisp.v2.domain.delete β procedure π
Section titled βplace.wisp.v2.domain.delete β procedure πβDeletes a domain (wisp subdomain or custom domain) owned by the authenticated DID.
Params:
| Field | Type | Required |
|---|---|---|
domain | string | β |
Response:
{ "domain": "alice.wisp.place", "deleted": true }Errors: AuthenticationRequired, InvalidDomain, NotFound
place.wisp.v2.site.getList β query π
Section titled βplace.wisp.v2.site.getList β query πβReturns all sites owned by the authenticated DID, with their mapped domains.
Response:
{ "sites": [ { "siteRkey": "my-site", "displayName": "My Site", "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-15T10:30:00.000Z", "domains": [ { "domain": "alice.wisp.place", "kind": "wisp", "status": "verified", "verified": true } ] } ]}Errors: AuthenticationRequired
place.wisp.v2.site.getDomains β query
Section titled βplace.wisp.v2.site.getDomains β queryβReturns all domains mapped to a specific site. Public β no auth required.
Params:
| Field | Type | Required |
|---|---|---|
did | string | β |
rkey | string | β |
Response:
{ "domains": [ { "domain": "alice.wisp.place", "kind": "wisp", "status": "verified", "verified": true } ]}place.wisp.v2.site.delete β procedure π
Section titled βplace.wisp.v2.site.delete β procedure πβDeletes a site and detaches all mapped domains.
Input:
| Field | Type | Required |
|---|---|---|
siteRkey | string | β |
Response:
{ "siteRkey": "my-site", "deleted": true, "unmappedDomains": [ { "domain": "alice.wisp.place", "kind": "wisp", "status": "verified" } ]}Errors: AuthenticationRequired, InvalidRequest, NotFound