> ## 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.

# Integration

> Integrate Flex Lite scheduling into your EV charging platform

This guide walks you through integrating Flex Lite into your EV charging platform. By the end, you'll be able to send user charging schedules and receive optimized schedules that enable grid flexibility while maintaining user control.

### Before you begin...

Prefer to explore the API hands-on? Grab a focused OpenAPI spec or a ready-to-run Postman collection covering every endpoint in this flow, from eligibility through onboarding to rewards.

<CardGroup cols={2}>
  <Card title="OpenAPI spec" icon="file-code" href="https://docs.axle.energy/workflows/flex-lite/flex-lite-openapi.json">
    OpenAPI 3.1 spec for the Flex Lite endpoints — import into your own tooling or hand to an LLM.
  </Card>

  <Card title="Postman collection" icon="download" href="https://docs.axle.energy/workflows/flex-lite/flex-lite-postman-collection.json">
    Pre-wired collection with auth set up — run **Authenticate** and the token is saved for every other request.
  </Card>
</CardGroup>

<Accordion title="View sequence diagram">
  ```mermaid theme={null}
  %%{init: {'theme': 'neutral'}}%%
  sequenceDiagram
      participant User
      participant Client
      participant Axle API

      rect rgb(235, 235, 235)
          Note over User,Axle API: Eligibility
          User->>Client: Enter postcode
          Client->>Axle API: GET /meter/search?postcode=...
          Axle API-->>Client: List of matching addresses
          Client->>User: Present address list
          User->>Client: Select their address

          Client->>Axle API: GET /meter/by-ref/{meter_ref}
          Axle API-->>Client: MPAN + meter details

          Client->>Axle API: POST /entities/site/check-eligibility<br/>{mpan, asset_model}
          Axle API-->>Client: {eligible, propositions}

          Client->>User: Present offer, request consent
          User->>Client: Accept terms (capture consent timestamp)
          Note over Client: Ready to onboard with<br/>MPAN + consent timestamp
      end

      rect rgb(224, 247, 250)
          Note over User,Axle API: Onboarding
          Note over Client: Eligible site with<br/>MPAN + consent timestamp
          Client->>Axle API: POST /entities/site/onboard<br/>{proposition: "limited_pause"}
          Axle API-->>Client: site_id, asset_ids, enrolment status
          Client-->>User: Enrolled
      end

      rect rgb(255, 248, 225)
          Note over User,Axle API: Charging
          User->>Client: Plugs in EV
          Client->>Axle API: POST /entities/asset/{asset_id}/event/plug-in-schedule
          Axle API-->>Client: Modified charging schedule (with pauses)
          Note over Client: Apply modified schedule to charger
      end

      rect rgb(235, 235, 235)
          Note over User,Axle API: Viewing rewards
          User->>Client: Tap "View rewards"
          Client->>Axle API: GET /rewards/{site_id}/url/balance
          Axle API-->>Client: Temporary URL
          Client-->>User: Open Axle-hosted rewards form
      end

      rect rgb(252, 228, 236)
          Note over User,Axle API: Offboarding
          alt User opts out of Flex Lite (e.g. leaves the flex program in your app)
              User->>Client: Disable Flex Lite
              Client->>Axle API: POST /entities/site/{site_id}/unenrol
              Axle API-->>Client: Site unenrolled
          else User leaves entirely (e.g. moves house, removed by support team)
              User->>Client: Remove account / change address
              Client->>Axle API: POST /entities/site/{site_id}/offboard-site-and-assets
              Axle API-->>Client: Site and assets removed
          end
      end

  ```
</Accordion>

## Prerequisites

* An Axle API token (see [Authentication](./api-reference/auth))
* Basic site information (MPAN, address, postcode)
* Ability to detect plug-in events
* User's desired charging schedule
* Confirmed [eligibility & consent](/workflows/ev-charging/eligibility-and-consent) and user consent

## Step 1: Onboard your site and assets

Register the site and EV charger with Axle and enrol them in the `limited_pause` proposition — the proposition that lets Axle insert pauses into the user's charging schedule.

<Card title="Onboard" icon="rectangle-terminal" href="./api-reference/onboard">
  Create or update a site and its assets, and enrol them in a proposition.
</Card>

If you want to enable [payments](/workflows/payments/overview) for your users, include `site.email` in the onboard payload. A user email is required to process payments through our provider, Stripe. We also send payment-failure notifications and, if enabled, two-factor authentication codes to this address.

### Example

<CodeGroup>
  ```json Request theme={null}
  {
    "site": {
      "mpan": "1234567890123",
      "postcode": "SW1A 1AA",
      "street_address": "10 Downing Street",
      "email": "user@example.com",
      "gave_boundary_meter_consent_at": "2026-04-28T12:00:00Z"
    },
    "assets": [
      {
        "external_id": "charger-001",
        "type": "charger",
        "asset_model": "axle_charger_v1",
        "installation_date": "2026-03-26",
        "properties": {
          "power_kw": 7.4
        }
      }
    ],
    "proposition": "limited_pause"
  }
  ```

  ```json Response theme={null}
  {
    "site": {
      "site_id": "a1b2c3d4-...",
      "site_created": true,
      "fields_updated": [],
      "warnings": []
    },
    "assets": [
      {
        "asset_id": "e5f6g7h8-...",
        "external_id": "charger-001",
        "asset_created": true,
        "fields_updated": [],
        "warnings": []
      }
    ],
    "enrolment": {
      "site_id": "a1b2c3d4-...",
      "status": "enrolled"
    }
  }
  ```
</CodeGroup>

<Tip>
  Save `site.site_id` and each `assets[].asset_id` from the response — you'll need the asset ID for sending schedules and the site ID for rewards and offboarding.

  You can also [look up IDs later](/api-reference/entities/asset/get-by-external-id) using each asset's `external_id`.
</Tip>

## Step 2: Send plug-in event with charging schedule

When a user plugs in their EV, send their desired charging schedule to the plug-in-schedule endpoint. Axle will return a modified schedule optimized for grid flexibility.

<Card title="Send plug-in schedule" icon="rectangle-terminal" href="./api-reference/plug-in-schedule">
  Send a charging schedule and receive an optimised version
</Card>

### Example

<CodeGroup>
  ```json Request theme={null}
  {
    "charging_schedule": [
      {
        "start_timestamp": "2025-06-27T22:00:00+00:00",
        "end_timestamp": "2025-06-28T06:00:00+00:00"
      }
    ]
  }
  ```

  ```json Response theme={null}
  {
    "modified_charging_schedule": [
      {
        "start_timestamp": "2025-06-27T22:00:00+00:00",
        "end_timestamp": "2025-06-28T01:00:00+00:00"
      },
      {
        "start_timestamp": "2025-06-28T02:00:00+00:00",
        "end_timestamp": "2025-06-28T06:00:00+00:00"
      }
    ]
  }
  ```
</CodeGroup>

Notice the response includes a 1-hour pause (01:00–02:00) — this is where the grid flexibility happens. The user earns rewards for this pause while still receiving the charging they need.

## Common questions

<AccordionGroup>
  <Accordion title="What if the user changes their schedule after plug-in?">
    User actions always take precedence. If a user modifies their schedule or boosts charging after receiving the modified schedule from Axle, apply their requested changes and send Axle a new schedule.
  </Accordion>

  <Accordion title="How often will the schedule be modified?">
    Not every plug-in event will result in a modified schedule. Axle only adjusts
    schedules when there's a grid flexibility opportunity that provides value. If
    no modification is beneficial, you'll receive the original schedule back
    unchanged.
  </Accordion>

  <Accordion title="What if the modified schedule doesn't provide enough charge?">
    Axle's optimization ensures the user receives sufficient energy based on their needs. The typical modification is a 30 minute pause, which maintains adequate charging for most use cases. If the original schedule is already tight, we may not modify it.
  </Accordion>
</AccordionGroup>

## Step 3: Stop participation (when needed)

There are two ways to stop a user's participation. Pick based on what's actually happening:

* **Unenrol** when the user is opting out of Flex Lite — for example, they leave the flex proposition in your app. The site and assets stay on the platform, any other propositions they're enrolled in (such as Capacity Market) are unaffected, and they can re-enrol later and still access their payments.
* **Offboard** when the user is leaving entirely — for example, they've moved house, or your support team is removing them. This unenrols from every proposition and deletes the site and its assets per data-retention policies. Payments can no longer be accessed afterwards, so prompt the user to withdraw any outstanding balance first.

If in doubt, use **unenrol**. For the full picture, see the [Site and asset lifecycle](/workflows/asset-lifecycle#opting-out).

<CardGroup cols={2}>
  <Card title="Unenrol site" icon="rectangle-terminal" href="./api-reference/unenrol">
    Stop this proposition without deleting the site
  </Card>

  <Card title="Offboard site and assets" icon="rectangle-terminal" href="./api-reference/offboard">
    Remove the site and its assets
  </Card>
</CardGroup>

## Sending readings (CoP11 assets)

Flex Lite doesn't strictly require asset readings to monetise flexibility. For settlement we use **boundary meter readings** from the site's MPAN as proof of delivery, which Axle can obtain on consenting users' behalf — capture this consent with `site.gave_boundary_meter_consent_at` when you onboard (see [Step 1](#step-1-onboard-your-site-and-assets)).

If your asset is [CoP11-qualified](/assets/chargers#cop11-qualification), you should additionally send asset readings via our API. CoP11 lets Axle use **asset metering** in the wholesale market, which can unlock more value and broaden eligibility.

<Card title="Send asset readings" icon="gauge" href="/api-reference/data/readings">
  Push half-hourly asset readings — see the accepted reading types
</Card>

<Note>
  Not sure whether your asset is CoP11-qualified? Axle has extensive experience qualifying assets for CoP11 — [get in touch](mailto:hello@axle.energy) to discuss. See [Asset and boundary telemetry](/tutorial/telemetry) for the full picture on what data we need and how to send it.
</Note>

## Next Steps

At this point, your users are onboarded and their schedules are being optimised. Now it's time to set up revenue and payments.

<Card title="Earning from EV Charging" icon="coins" href="/workflows/ev-charging/paying-users/earning">
  Learn how to submit readings and manage user payments
</Card>

## Further Reading

<Card title="Advanced Onboarding" icon="sliders" href="/workflows/flex-lite/advanced-integration">
  Need more control? Use initialise and enrol for a step-by-step onboarding flow.
</Card>

<Card title="Migrate to Smart Charging" icon="arrow-up-right" href="/workflows/ev-charging/advanced/migrating-to-smart-charging">
  Ready for more revenue? See what changes when upgrading to Smart Charging.
</Card>
