# place.wisp.v2.domains

> Published by [wisp.place](https://lexicon.garden/identity/did:plc:7puq73yz2hkvbcpdhnsze2qw)

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:7puq73yz2hkvbcpdhnsze2qw/place.wisp.v2.domains)
- [Documentation](https://lexicon.garden/lexicon/did:plc:7puq73yz2hkvbcpdhnsze2qw/place.wisp.v2.domains/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:7puq73yz2hkvbcpdhnsze2qw/place.wisp.v2.domains/examples)

## Definitions

### `place.wisp.v2.domains`

**Type**: `record`

Domain registration metadata for wisp.place subdomains and custom domains.

**Key**: `any`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `domain` | `string` | Yes | Lowercase FQDN for this registration (for example, alice.wisp.place or example.com). |
| `siteRkey` | `string` (record-key) | No | Optional place.wisp.fs record key currently mapped to this domain. |
| `createdAt` | `string` (datetime) | Yes |  |
| `updatedAt` | `string` (datetime) | Yes |  |
| `registration` | `union` | Yes |  |

### `place.wisp.v2.domains#verification`

**Type**: `object`

Latest verification state for a custom domain.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `method` | `string` | Yes |  |
| `status` | `string` | Yes |  |
| `lastError` | `string` | No |  |
| `verifiedAt` | `string` (datetime) | No |  |
| `lastCheckedAt` | `string` (datetime) | No |  |

### `place.wisp.v2.domains#wispRegistration`

**Type**: `object`

Registration for a first-party subdomain under the wisp.place base host.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `kind` | `string` | Yes |  |
| `handle` | `string` | Yes | Subdomain label only (for example, alice). |

### `place.wisp.v2.domains#customRegistration`

**Type**: `object`

Registration metadata for a custom domain.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `kind` | `string` | Yes |  |
| `challengeId` | `string` | Yes | Challenge identifier used to derive DNS setup instructions. |
| `verification` | `ref` → `#verification` | Yes |  |

## Raw Schema

```json
{
  "id": "place.wisp.v2.domains",
  "defs": {
    "main": {
      "key": "any",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "domain",
          "registration",
          "createdAt",
          "updatedAt"
        ],
        "properties": {
          "domain": {
            "type": "string",
            "maxLength": 253,
            "minLength": 3,
            "description": "Lowercase FQDN for this registration (for example, alice.wisp.place or example.com)."
          },
          "siteRkey": {
            "type": "string",
            "format": "record-key",
            "description": "Optional place.wisp.fs record key currently mapped to this domain."
          },
          "createdAt": {
            "type": "string",
            "format": "datetime"
          },
          "updatedAt": {
            "type": "string",
            "format": "datetime"
          },
          "registration": {
            "refs": [
              "#wispRegistration",
              "#customRegistration"
            ],
            "type": "union"
          }
        }
      },
      "description": "Domain registration metadata for wisp.place subdomains and custom domains."
    },
    "verification": {
      "type": "object",
      "required": [
        "status",
        "method"
      ],
      "properties": {
        "method": {
          "enum": [
            "txt-did-v1"
          ],
          "type": "string"
        },
        "status": {
          "enum": [
            "pending",
            "verified",
            "failed"
          ],
          "type": "string"
        },
        "lastError": {
          "type": "string",
          "maxLength": 1000
        },
        "verifiedAt": {
          "type": "string",
          "format": "datetime"
        },
        "lastCheckedAt": {
          "type": "string",
          "format": "datetime"
        }
      },
      "description": "Latest verification state for a custom domain."
    },
    "wispRegistration": {
      "type": "object",
      "required": [
        "kind",
        "handle"
      ],
      "properties": {
        "kind": {
          "type": "string",
          "const": "wisp"
        },
        "handle": {
          "type": "string",
          "maxLength": 63,
          "minLength": 3,
          "description": "Subdomain label only (for example, alice)."
        }
      },
      "description": "Registration for a first-party subdomain under the wisp.place base host."
    },
    "customRegistration": {
      "type": "object",
      "required": [
        "kind",
        "challengeId",
        "verification"
      ],
      "properties": {
        "kind": {
          "type": "string",
          "const": "custom"
        },
        "challengeId": {
          "type": "string",
          "maxLength": 64,
          "minLength": 8,
          "description": "Challenge identifier used to derive DNS setup instructions."
        },
        "verification": {
          "ref": "#verification",
          "type": "ref"
        }
      },
      "description": "Registration metadata for a custom domain."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}
```
