# place.wisp.v2.privateSite.create

> 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.privateSite.create)
- [Documentation](https://lexicon.garden/lexicon/did:plc:7puq73yz2hkvbcpdhnsze2qw/place.wisp.v2.privateSite.create/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:7puq73yz2hkvbcpdhnsze2qw/place.wisp.v2.privateSite.create/examples)

## Definitions

### `place.wisp.v2.privateSite.create`

**Type**: `procedure`

Create a private site from an uploaded archive. Private sites are stored only by the wisp hosting service and are never written to the owner's PDS, because atproto repo records and blobs are publicly readable and broadcast over the firehose. Access is granted to the owner's authenticated account and to any share links they create.

#### Input

**Encoding**: `multipart/form-data`

#### Output

**Encoding**: `application/json`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `createdAt` | `string` (datetime) | Yes |  |
| `expiresAt` | `string` (datetime) | No | Absent when the site never expires. |
| `fileCount` | `integer` | Yes |  |
| `name` | `string` | Yes | Display name. Not an identifier. |
| `siteId` | `string` (record-key) | Yes | Stable identifier for this private site. Record-key syntax so it can become a permissioned-space key in v2. |
| `totalBytes` | `integer` | Yes |  |
| `url` | `string` | Yes | Owner-facing URL. Requires an authenticated session. |

#### Errors

- **AuthenticationRequired**
- **InvalidRequest**
- **PayloadTooLarge**

## Raw Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "Create a private site from an uploaded archive. Private sites are stored only by the wisp hosting service and are never written to the owner's PDS, because atproto repo records and blobs are publicly readable and broadcast over the firehose. Access is granted to the owner's authenticated account and to any share links they create.",
      "errors": [
        {
          "name": "AuthenticationRequired"
        },
        {
          "name": "InvalidRequest"
        },
        {
          "name": "PayloadTooLarge"
        }
      ],
      "input": {
        "encoding": "multipart/form-data"
      },
      "output": {
        "encoding": "application/json",
        "schema": {
          "properties": {
            "createdAt": {
              "format": "datetime",
              "type": "string"
            },
            "expiresAt": {
              "description": "Absent when the site never expires.",
              "format": "datetime",
              "type": "string"
            },
            "fileCount": {
              "type": "integer"
            },
            "name": {
              "description": "Display name. Not an identifier.",
              "type": "string"
            },
            "siteId": {
              "description": "Stable identifier for this private site. Record-key syntax so it can become a permissioned-space key in v2.",
              "format": "record-key",
              "type": "string"
            },
            "totalBytes": {
              "type": "integer"
            },
            "url": {
              "description": "Owner-facing URL. Requires an authenticated session.",
              "type": "string"
            }
          },
          "required": [
            "siteId",
            "name",
            "fileCount",
            "totalBytes",
            "createdAt",
            "url"
          ],
          "type": "object"
        }
      },
      "type": "procedure"
    }
  },
  "id": "place.wisp.v2.privateSite.create",
  "lexicon": 1
}
```
