# Create WordPress Site

**POST /api/v1/sites**

Create a new WordPress site and generate API credentials for the WordPress plugin.

**Authentication**: Required (JWT Bearer token)

**Headers**:
- `Content-Type: application/json`
- `Authorization: JWT {access_token}` (tenant is automatically determined from JWT)

**Request Body**:

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| domain | string | Yes | WordPress site domain (e.g., example.com) |
| site_url | string | Yes | Full WordPress site URL (e.g., https://example.com) |

**Example Request**:

```bash
curl -X POST http://localhost:8000/api/v1/sites \
  -H "Content-Type: application/json" \
  -H "Authorization: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -d '{
    "domain": "example.com",
    "site_url": "https://example.com"
  }'
```

**Example Response** (201 Created):

```json
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "domain": "example.com",
  "site_url": "https://example.com",
  "api_key": "live_sk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0",
  "verification_token": "mvp_xyz789abc123",
  "status": "pending",
  "search_index_name": "site_a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
```

**Important Notes**:
- The `api_key` is shown **only once** - save it immediately!
- The site starts with `status: "pending"` until verified
- The `verification_token` should be used by the WordPress plugin for site verification
- The `search_index_name` is the Meilisearch index for this site

**Error Responses**:

This endpoint returns errors in **RFC 9457 (Problem Details for HTTP APIs)** format.

**Validation Error Response** (400 Bad Request):

```json
{
  "type": "about:blank",
  "title": "Validation Error",
  "status": 400,
  "detail": "One or more validation errors occurred",
  "errors": {
    "domain": ["Invalid domain format", "Domain is required"],
    "site_url": ["Invalid URL format", "Site URL is required"]
  }
}
```

**Content-Type**: `application/problem+json`

**Common Validation Error Messages**:

| Field | Error Messages |
|-------|----------------|
| domain | "Invalid domain format", "Domain is required" |
| site_url | "Invalid URL format", "Site URL is required" |

**Other Error Responses**:

- `401 Unauthorized`: Missing or invalid JWT token
  ```json
  {
    "type": "about:blank",
    "title": "Unauthorized",
    "status": 401,
    "detail": "Authentication required"
  }
  ```

- `409 Conflict`: Domain already registered by another user
  ```json
  {
    "type": "about:blank",
    "title": "Conflict",
    "status": 409,
    "detail": "Domain already exists"
  }
  ```

- `500 Internal Server Error`: Server error
  ```json
  {
    "type": "about:blank",
    "title": "Internal Server Error",
    "status": 500,
    "detail": "Failed to create site"
  }
  ```
