---
title: "Create site"
method: POST
path: "/sites"
tags: ["Sites"]
---

# Create site

`POST /sites`

## Headers

- `Idempotency-Key` string, uuid

## Request body

- CreateSiteRequest
  - `externalId` string — Optional customer-facing identifier
  - `name` string, required
  - `siteType` 'distribution_pole' | 'transmission_pole' | 'substation' | 'utility_substation' | 'transmission_line' | 'distribution_line' | 'pipeline' | 'railway' | 'road' | 'other', required — Union of PointSiteType, AreaSiteType, and LineSiteType
  - `description` string
  - `tags` string[]
  - `clusterId` string, uuid
  - `cameraOrientation` CameraOrientation
    - `center` number[], required — [longitude, latitude]
    - `zoom` number, required
    - `bearing` number, required
    - `pitch` number, required
  - `geometry` union, required — GeoJSON geometry for sites (Point, LineString, or Polygon)
    - PointGeometry
      - `type` 'Point', required
      - `coordinates` number[], required — [longitude, latitude] or [longitude, latitude, altitude]
    - LineStringGeometry
      - `type` 'LineString', required
      - `coordinates` array[], required
        - number[]
    - PolygonGeometry
      - `type` 'Polygon', required
      - `coordinates` array[], required
        - array[]
          - number[]
  - `properties` SiteProperties
    - `geometryType` 'line', required
    - `width` number, required

## Response `201`

Created

- object
  - `data` Site, required
    - `type` 'Feature', required — GeoJSON Feature type constant
    - `id` string, uuid, required
    - `organizationId` string, uuid, required
    - `externalId` string — Optional customer-facing identifier
    - `name` string, required
    - `siteType` 'distribution_pole' | 'transmission_pole' | 'substation' | 'utility_substation' | 'transmission_line' | 'distribution_line' | 'pipeline' | 'railway' | 'road' | 'other', required — Union of PointSiteType, AreaSiteType, and LineSiteType
    - `description` string
    - `tags` string[]
    - `clusterId` string, uuid
    - `cameraOrientation` CameraOrientation
      - `center` number[], required — [longitude, latitude]
      - `zoom` number, required
      - `bearing` number, required
      - `pitch` number, required
    - `geometry` union, required — GeoJSON geometry for sites (Point, LineString, or Polygon)
      - PointGeometry
        - `type` 'Point', required
        - `coordinates` number[], required — [longitude, latitude] or [longitude, latitude, altitude]
      - LineStringGeometry
        - `type` 'LineString', required
        - `coordinates` array[], required
          - number[]
      - PolygonGeometry
        - `type` 'Polygon', required
        - `coordinates` array[], required
          - array[]
            - number[]
    - `properties` SiteProperties
      - `geometryType` 'line', required
      - `width` number, required
    - `priority` 'high' | 'medium' | 'low' | 'none'
    - `deletedAt` number, nullable, required
    - `createdAt` number, required
    - `updatedAt` number, required
  - `transactionId` string, uuid, required

## Other responses

- `400` — Bad request or validation error
- `401` — Authentication required
- `403` — Insufficient permissions
- `409` — Conflict (duplicate resource, in-use resource, or undo conflict)
- `429` — Rate limit exceeded
- `500` — Internal server error

---

[API](https://skmtc.net/voltairlabs/apis/voltair-api.md) · [All operations](https://skmtc.net/voltairlabs/apis/voltair-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/voltairlabs/voltair-api/revisions/be08f4f706f5/schema)
