---
title: "Create Site"
method: POST
path: "/entities/site"
tags: ["3. Sites"]
---

# Create Site

`POST /entities/site`

Register a new site.

The site must have a valid address and postcode. If a site with the same address already exists, a 409 error will be returned with the existing site ID.

## Request body

- SiteRequest — Request model for creating a new site.
  - `mpan` string, required — Meter Point Administration Number
  - `postcode` string, required — UK postcode for the site
  - `street_address` string — Street address for the site
  - `email` string — Email address for the site. Include to enable 2FA for payment withdrawals.
  - `gave_boundary_meter_consent_at` string, date-time — Timezone-aware ISO 8601 timestamp (e.g. '2026-01-01T12:34:56Z') indicating when the household gave consent for Axle to access readings from their boundary meter, if consent was given.

## Response `200`

Successful Response

- SiteResponse — Response model for site information.
  - `id` string, uuid, required — Axle's internal UUID for the site
  - `mpan` string — Meter Point Administration Number for the site
  - `postcode` string — UK postcode for the site
  - `address` string — Full address for the site
  - `asset_ids` string[] — List of asset IDs associated with this site
  - `markets` MarketResponse[] — Markets the site is participating in
  - `dispatch_methods` DispatchMethodResponse[] — Dispatch methods allowed for the site
  - `tariff` TariffResponse — Response model for tariff information.
    - `tariff_type` 'single_rate' | 'dual_rate' | 'dynamic' | 'smart' | 'unknown' — An enumeration.
    - `tariff_cheap_start_time` string, time — Start time for off-peak/cheap rate period
    - `tariff_cheap_end_time` string, time — End time for off-peak/cheap rate period
  - `gave_boundary_meter_consent_at` string, date-time — Timestamp when boundary meter consent was given

## Other responses

- `400` — Invalid request or site already exists
- `404` — Referenced entity not found
- `409` — Site with same address already exists
- `422` — Unprocessable Content
- `500` — Internal server error

---

[API](https://skmtc.dev/axle/apis/axle-api-docs.md) · [All operations](https://skmtc.dev/axle/apis/axle-api-docs/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/axle/axle-api-docs/revisions/75be7f9a952f/schema)
