---
title: "Post Readings"
method: POST
path: "/data/readings"
tags: ["5. Data"]
---

# Post Readings

`POST /data/readings`

Send asset readings data to Axle using the generic readings format.

This endpoint accepts compressed data using gzip encoding. Returns statuses of the processed readings, indicating whether each reading was accepted or rejected.

**Direction convention:** for readings that can be either positive or negative (e.g. `boundary_import_kw`, `battery_inverter_import_kw`), a positive value denotes *import* (power flowing in from the grid, or into the battery) and a negative value denotes *export* (power flowing out to the grid, or out of the battery). All other reading types are unidirectional; the required sign for each `label` is documented in the `ReadingDataPointLabel` schema below.

## Request body

- ReadingsDataPoints — Readings data for multiple assets.
  - `readings` ReadingDataPoint[], required — List of readings to be submitted
    - `asset_id` string, uuid, required — ID of the asset
    - `start_timestamp` string, date-time, required — Start time of the reading
    - `end_timestamp` string, date-time, required — End time of the reading
    - `value` number, required — Value of the reading
    - `label` 'boundary_import_kw' | 'battery_inverter_import_kw' | 'charger_consumption_energy_kwh' | 'charger_lifetime_consumption_energy_kwh' | 'boundary_lifetime_import_energy_kwh' | 'boundary_lifetime_export_energy_kwh' | 'provisional_consumption_kwh' | 'solar_power_kw' | 'battery_state_of_charge_pct' | 'battery_stored_energy_kwh', required — The type of reading being submitted. - boundary_import_kw: Instantaneous power import from the grid in kW. Positive indicates power imported from the grid, negative indicates power exported to the grid. - battery_inverter_import_kw: Instantaneous inverter power into the battery in kW. Positive indicates power into the battery (charging), negative indicates power out of the battery (discharging). - charger_consumption_energy_kwh: Total energy consumed by the charger in kWh in a 30min interval. Must be >= 0. - charger_lifetime_consumption_energy_kwh: Total energy consumed by the charger in kWh in its lifetime. Must be >= 0. - boundary_lifetime_import_energy_kwh: Cumulative lifetime energy imported across the site boundary in kWh. A monotonic non-decreasing register; must be >= 0. - boundary_lifetime_export_energy_kwh: Cumulative lifetime energy exported across the site boundary in kWh. A monotonic non-decreasing register; must be >= 0. - provisional_consumption_kwh: Provisional consumption data in kWh. Must be >= 0. - solar_power_kw: Instantaneous solar generation in kW. Must be >= 0. - battery_state_of_charge_pct: Instantaneous state of charge of the battery in percentage. Must be between 0 and 100 (inclusive). - battery_stored_energy_kwh: Stored energy in the battery in kWh. Must be >= 0.

## Response `200`

Successfully recorded readings with processing summary

- ReadingsResponse — Response model for a batch of readings submissions.
  - `responses` ReadingResponse[], required — List of responses for each reading submission
    - `asset_id` string, uuid, required — ID of the asset
    - `start_timestamp` string, date-time, required — Start time of the reading
    - `end_timestamp` string, date-time, required — End time of the reading
    - `label` 'boundary_import_kw' | 'battery_inverter_import_kw' | 'charger_consumption_energy_kwh' | 'charger_lifetime_consumption_energy_kwh' | 'boundary_lifetime_import_energy_kwh' | 'boundary_lifetime_export_energy_kwh' | 'provisional_consumption_kwh' | 'solar_power_kw' | 'battery_state_of_charge_pct' | 'battery_stored_energy_kwh', required — The type of reading being submitted. - boundary_import_kw: Instantaneous power import from the grid in kW. Positive indicates power imported from the grid, negative indicates power exported to the grid. - battery_inverter_import_kw: Instantaneous inverter power into the battery in kW. Positive indicates power into the battery (charging), negative indicates power out of the battery (discharging). - charger_consumption_energy_kwh: Total energy consumed by the charger in kWh in a 30min interval. Must be >= 0. - charger_lifetime_consumption_energy_kwh: Total energy consumed by the charger in kWh in its lifetime. Must be >= 0. - boundary_lifetime_import_energy_kwh: Cumulative lifetime energy imported across the site boundary in kWh. A monotonic non-decreasing register; must be >= 0. - boundary_lifetime_export_energy_kwh: Cumulative lifetime energy exported across the site boundary in kWh. A monotonic non-decreasing register; must be >= 0. - provisional_consumption_kwh: Provisional consumption data in kWh. Must be >= 0. - solar_power_kw: Instantaneous solar generation in kW. Must be >= 0. - battery_state_of_charge_pct: Instantaneous state of charge of the battery in percentage. Must be between 0 and 100 (inclusive). - battery_stored_energy_kwh: Stored energy in the battery in kWh. Must be >= 0.
    - `accepted` boolean, required — Whether the reading was accepted
    - `error` string — Error message if the reading was rejected

## Other responses

- `400` — Invalid data format or validation error
- `403` — Permission denied
- `422` — Validation Error
- `500` — Server error while recording readings

---

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