> For the complete documentation index, see [llms.txt](https://docs.vomevolunteer.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.vomevolunteer.com/resources/editor-7/write-operations/create-sites.md).

# Create sites

This endpoint is used to create sites in your organization. It accepts either a single object or a list of objects. Sites will only be created if they do not already exist.

<mark style="color:red;">Please note, you must add a</mark> <mark style="color:red;">**name**</mark> <mark style="color:red;">when creating a site. Names that already exist for your organization are skipped (not created), and matching is case-insensitive.</mark>

**Endpoint Description:**

* **Endpoint**: `POST /api/sites/bulk-create/`
* **Base URL**: `https://api.vomevolunteer.com`

**API specification:**

* **name** (`string`, required): Site name.
* **description** (`string` | `null`): Defaults to empty.
* **address** (`string` | `null`): Defaults to empty.
* **general\_email** (`string` | `null`): Valid email or null.
* **general\_phone** (`string` | `null`): Up to 17 characters, or null.
* **website** (`string` | `null`): Up to 300 characters, or null.

**Authorization:**

Requests to this endpoint must include an `API-KEY` in the header for authentication.

```python
headers = {
    "API-KEY": "your_unique_api_key_here"
}
response = requests.post("https://api.vomevolunteer.com/api/sites/bulk-create/", headers=headers)
```

**Example Request Payload:**

```json
[
    { "name": "Downtown Clinic" },
    {
        "name": "North Branch",
        "address": "12 King St",
        "website": "https://north.example.org"
    }
]
```

**Response Structure:**

```json
{
    "created": [
        {
            "id": "8f2c1e5a-....",
            "name": "Downtown Clinic",
            "description": "",
            "address": "",
            "general_email": null,
            "general_phone": null,
            "website": null
        }
    ],
    "skipped": [
        { "name": "North Branch", "reason": "already exists" }
    ]
}
```

*Note: Names that already exist for your organization are skipped, as are duplicate names within the same payload. This makes imports safe to retry.*
