> ## Documentation Index
> Fetch the complete documentation index at: https://docs.axle.energy/llms.txt
> Use this file to discover all available pages before exploring further.

# Onboard site and asset (legacy)

> **Deprecated** — prefer [`/onboard`](/api-reference/entities/site/onboard) instead.

The new `/onboard` endpoint supports multiple assets per site in a single call and includes improvements in idempotency, resilience and response details.

---

Register a site, asset, and dispatch consent in a single call.

Creates the site and asset, grants consent, and enrols in the relevant flex proposition.

This endpoint will:
1. Create the site
2. Create the asset associated with the site
3. Enrol in the relevant flex proposition

Returns the created site and asset, including their IDs. Fails if the site or asset already exists.

<Note>
  We'd recommend migrating to [`/onboard`](./onboard) — it supports multiple
  assets per site, and a wider variety of common use cases. Existing integrations
  against `/onboard-site-and-asset` will continue to be supported.
</Note>


## OpenAPI

````yaml POST /entities/site/onboard-site-and-asset
openapi: 3.1.0
info:
  title: Axle API Docs
  description: >-
    For full documentation please see our official docs at <a
    href='http://docs.axle.energy'>docs.axle.energy</a>
  version: 1.4.6
servers:
  - url: https://api-sandbox.axle.energy
security: []
tags:
  - name: 1. Authentication
    description: Authenticate yourself with the Axle API
  - name: 2. Meters
    description: Find key info about your sites
  - name: 3. Sites
    description: Register your sites with Axle; configure market participation
  - name: 4. Assets
    description: Register your assets with Axle
  - name: 5. Data
    description: Send asset metrics to Axle, for analysis and optimisation purposes
  - name: 6. Rewards
    description: >-
      Determine how much your users have earned by participating with Axle;
      allow balance withdrawal
  - name: 7. Validation
    description: Validate structured data against Axle's rules
  - name: 8. Examples
    description: Get example data for testing
paths:
  /entities/site/onboard-site-and-asset:
    post:
      tags:
        - 3. Sites
      summary: Onboard Site And Asset
      description: >-
        **Deprecated** — prefer
        [`/onboard`](/api-reference/entities/site/onboard) instead.


        The new `/onboard` endpoint supports multiple assets per site in a
        single call and includes improvements in idempotency, resilience and
        response details.


        ---


        Register a site, asset, and dispatch consent in a single call.


        Creates the site and asset, grants consent, and enrols in the relevant
        flex proposition.


        This endpoint will:

        1. Create the site

        2. Create the asset associated with the site

        3. Enrol in the relevant flex proposition


        Returns the created site and asset, including their IDs. Fails if the
        site or asset already exists.
      operationId: onboard_site_and_asset_entities_site_onboard_site_and_asset_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OnboardingRequest'
        required: true
      responses:
        '200':
          description: Successfully onboarded site and asset
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OnboardingResponse'
        '400':
          description: Invalid request
        '409':
          description: Site or asset already exists
        '422':
          description: Eligibility prerequisites not met for the requested dispatch method
        '500':
          description: Server error during onboarding
      deprecated: true
      security:
        - OAuth2PasswordBearer: []
components:
  schemas:
    OnboardingRequest:
      properties:
        site:
          allOf:
            - $ref: '#/components/schemas/SiteRequest'
          title: Site
          description: Site information
          examples:
            - mpan: '1234567890123'
              postcode: SW1A 1AA
              street_address: 10 Downing Street
              gave_boundary_meter_consent_at: '2025-01-01T12:00:00Z'
              email: test@example.com
        asset:
          allOf:
            - $ref: '#/components/schemas/OnboardingAssetRequest'
          title: Asset
          description: Asset information
          examples:
            - external_id: charger-001
              type: charger
              properties:
                power_kw: 7.4
        dispatch_consent:
          allOf:
            - $ref: '#/components/schemas/SiteDispatchConsentRequest'
          title: Dispatch Consent
          description: Dispatch consent methods
          examples:
            - dispatch_methods:
                - limited_pause
      type: object
      required:
        - site
        - asset
        - dispatch_consent
      title: OnboardingRequest
      description: >-
        Request model for onboarding a site with an asset and dispatch consent
        in a single call.
    OnboardingResponse:
      properties:
        site:
          allOf:
            - $ref: '#/components/schemas/SiteResponse'
          title: Site
          description: Created site details
        asset:
          allOf:
            - $ref: '#/components/schemas/AssetResponse'
          title: Asset
          description: Created asset details
      type: object
      required:
        - site
        - asset
      title: OnboardingResponse
      description: Response model for onboarding operation.
    SiteRequest:
      properties:
        mpan:
          type: string
          title: Mpan
          description: Meter Point Administration Number
        postcode:
          type: string
          title: Postcode
          description: UK postcode for the site
        street_address:
          type: string
          title: Street Address
          description: Street address for the site
        email:
          type: string
          title: Email
          description: >-
            Email address for the site. Include to enable 2FA for payment
            withdrawals.
        gave_boundary_meter_consent_at:
          type: string
          format: date-time
          title: Gave Boundary Meter Consent At
          description: >-
            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.
      type: object
      required:
        - mpan
        - postcode
      title: SiteRequest
      description: Request model for creating a new site.
    OnboardingAssetRequest:
      properties:
        external_id:
          type: string
          title: External Id
          description: Vendor-specific identifier for the asset
          examples:
            - charger-001
        type:
          allOf:
            - $ref: '#/components/schemas/CreatableAssetType'
          description: Type of asset being created
          examples:
            - charger
        properties:
          allOf:
            - $ref: '#/components/schemas/AssetProperties'
          title: Properties
          description: Optional asset properties
          examples:
            - power_kw: 7.4
        asset_model:
          type: string
          title: Asset Model
          description: >-
            Name of the AssetModel to assign (looked up by name). Required for
            CoP11 eligibility.
          examples:
            - axle_charger_v1
        installation_date:
          type: string
          format: date
          title: Installation Date
          description: >-
            Date when the asset was installed. Required alongside asset_model
            for CoP11 eligibility.
          examples:
            - '2025-06-15'
      type: object
      required:
        - external_id
        - type
      title: OnboardingAssetRequest
      description: Request model for creating an asset during onboarding (without site_id).
    SiteDispatchConsentRequest:
      properties:
        dispatch_methods:
          items:
            $ref: '#/components/schemas/DispatchMethodResponse'
          type: array
          uniqueItems: true
          description: >-
            Dispatch methods to consent to or remove consent from. Leave empty
            to not consent to any dispatch methods.
      type: object
      required:
        - dispatch_methods
      title: SiteDispatchConsentRequest
      description: Request model for updating dispatch consent for a site.
    SiteResponse:
      properties:
        id:
          type: string
          format: uuid
          title: Id
          description: Axle's internal UUID for the site
        mpan:
          type: string
          title: Mpan
          description: Meter Point Administration Number for the site
        postcode:
          type: string
          title: Postcode
          description: UK postcode for the site
        address:
          type: string
          title: Address
          description: Full address for the site
        asset_ids:
          items:
            type: string
            format: uuid
          type: array
          title: Asset Ids
          description: List of asset IDs associated with this site
          default: []
        markets:
          items:
            $ref: '#/components/schemas/MarketResponse'
          type: array
          uniqueItems: true
          description: Markets the site is participating in
        dispatch_methods:
          items:
            $ref: '#/components/schemas/DispatchMethodResponse'
          type: array
          uniqueItems: true
          description: Dispatch methods allowed for the site
        tariff:
          allOf:
            - $ref: '#/components/schemas/TariffResponse'
          title: Tariff
          description: Tariff information for the site
        gave_boundary_meter_consent_at:
          type: string
          format: date-time
          title: Gave Boundary Meter Consent At
          description: Timestamp when boundary meter consent was given
      type: object
      required:
        - id
      title: SiteResponse
      description: Response model for site information.
    AssetResponse:
      properties:
        id:
          type: string
          format: uuid
          title: Id
          description: Axle's internal UUID for the asset
        external_id:
          type: string
          title: External Id
          description: Vendor-specific identifier for the asset
        type:
          allOf:
            - $ref: '#/components/schemas/AssetType'
          description: Type of asset
        site_id:
          type: string
          format: uuid
          title: Site Id
          description: ID of the site where the asset is located
        properties:
          allOf:
            - $ref: '#/components/schemas/AssetProperties'
          title: Properties
          description: Optional asset properties
      type: object
      required:
        - id
        - external_id
        - type
        - site_id
      title: AssetResponse
      description: Response model for asset information.
    CreatableAssetType:
      type: string
      enum:
        - charger
        - battery
        - heat pump
        - electric_vehicle
        - hot water tank
      title: CreatableAssetType
      description: Asset types that can be created through the API.
    AssetProperties:
      properties:
        power_kw:
          type: number
          minimum: 0
          title: Power Kw
          description: Power rating in kW
        capacity_kwh:
          type: number
          minimum: 0
          title: Capacity Kwh
          description: Capacity in kWh
      type: object
      title: AssetProperties
      description: Optional properties for an asset.
    DispatchMethodResponse:
      type: string
      enum:
        - cm_infrequent_dispatch
        - full_asset_schedule_control
        - limited_pause
        - vpp_limited_control
      title: DispatchMethodResponse
      description: Axle propositions that a site can enrol into.
    MarketResponse:
      type: string
      enum:
        - cm
        - dfs
        - dno
        - lcm
        - sffr
        - wholesale
      title: MarketResponse
      description: |-
        Market types available for participation.

        - CM: Capacity Market
        - DFS: Dynamic Frequency Service
        - DNO: Distribution Network Operator flexibility services
        - LCM: Local Capacity Market
        - SFFR: Static Firm Frequency Response
        - WHOLESALE: Wholesale energy market
    TariffResponse:
      properties:
        tariff_type:
          allOf:
            - $ref: '#/components/schemas/TariffType'
          description: Type of tariff
        tariff_cheap_start_time:
          type: string
          format: time
          title: Tariff Cheap Start Time
          description: Start time for off-peak/cheap rate period
        tariff_cheap_end_time:
          type: string
          format: time
          title: Tariff Cheap End Time
          description: End time for off-peak/cheap rate period
      type: object
      title: TariffResponse
      description: Response model for tariff information.
    AssetType:
      type: string
      enum:
        - boundary meter
        - charger
        - battery
        - heat pump
        - hot water tank
        - frequency meter
        - electric_vehicle
        - pv inverter
      title: AssetType
      description: An enumeration.
    TariffType:
      type: string
      enum:
        - single_rate
        - dual_rate
        - dynamic
        - smart
        - unknown
      title: TariffType
      description: An enumeration.
  securitySchemes:
    OAuth2PasswordBearer:
      type: oauth2
      flows:
        password:
          scopes: {}
          tokenUrl: auth/token-form

````