---
title: "Create a meter reading"
method: POST
path: "/meters/{meter_id}/readings"
tags: ["Meters"]
---

# Create a meter reading

`POST /meters/{meter_id}/readings`

## Request

- Base URL: `https://api.faireplace.com/api`
- URL: `https://api.faireplace.com/api/meters/{meter_id}/readings`
- Auth: HTTP bearer

Create a new reading. The system automatically populates `previous_value` from the latest reading and calculates `consumption` using the meter's multiplier. Handles meter rollover when `max_value` is configured.

## Path parameters

- `meter_id` string, uuid, required

## Request body

- CreateMeterReading: Create a new meter reading. **Auto-populated fields:** - `previous_value`: automatically set from the latest reading - `consumption`: automatically calculated: `(value - previous_value) * multiplier` **Validation rules:** - `value` must be >= 0 - `reading_date` cannot be in the future
  - `lease_id` string, uuid, nullable
  - `reading_date` string, date-time, required
  - `reading_type` 'MANUAL' | 'AUTOMATIC' | 'PHOTO' | 'ESTIMATED', required: How the reading was captured. - `MANUAL`: Manual entry by a person - `AUTOMATIC`: Automatic reading from connected meter - `PHOTO`: Reading from a photo (OCR) - `ESTIMATED`: Estimated value (not actual reading)
  - `value` number, required
  - `is_estimated` boolean
  - `is_billing_reading` boolean
  - `photo_url` string, nullable
  - `reader_name` string, nullable
  - `notes` string, nullable

## Response `201`

Meter reading created successfully

- MeterReading: A reading captured from a meter at a specific point in time. Consumption is automatically calculated from the difference between current and previous readings, accounting for the meter's multiplier and potential rollover.
  - `id` string, uuid, required
  - `meter_id` string, uuid, required
  - `lease_id` string, uuid, nullable: Optional lease association
  - `reading_date` string, date-time, required: Date and time of the reading
  - `reading_type` 'MANUAL' | 'AUTOMATIC' | 'PHOTO' | 'ESTIMATED', required: How the reading was captured. - `MANUAL`: Manual entry by a person - `AUTOMATIC`: Automatic reading from connected meter - `PHOTO`: Reading from a photo (OCR) - `ESTIMATED`: Estimated value (not actual reading)
  - `value` number, required: The meter reading value
  - `previous_value` number, nullable: Previous reading value (auto-populated)
  - `consumption` number, nullable: Calculated consumption since last reading (auto-populated). Formula: `(value - previous_value) * multiplier` With rollover: `(max_value - previous_value + value) * multiplier`
  - `is_estimated` boolean, required: Whether the reading is an estimate
  - `is_billing_reading` boolean, required: Whether this reading is used for billing
  - `photo_url` string, nullable: URL to photo of the meter reading
  - `reader_name` string, nullable: Name of the person who took the reading
  - `notes` string, nullable
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `500`: Internal Server Error

---

[API](https://skmtc.dev/faireplace/apis/faireplace-property-management-api.md) · [All operations](https://skmtc.dev/faireplace/apis/faireplace-property-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/faireplace/apis/faireplace-property-management-api/revisions/69de39762919?raw)
