---
title: "Create charge reading"
method: POST
path: "/leases/{lease_id}/charges/{charge_id}/readings"
tags: ["Charges"]
---

# Create charge reading

`POST /leases/{lease_id}/charges/{charge_id}/readings`

## Request

- Base URL: `https://api.faireplace.com/api`
- URL: `https://api.faireplace.com/api/leases/{lease_id}/charges/{charge_id}/readings`
- Auth: HTTP bearer

Record a new reading for a charge. The system automatically:
- Populates `previous_value` from the latest reading
- Runs anomaly detection (flags >50% increase or >30% decrease)

## Path parameters

- `lease_id` string, uuid, required
- `charge_id` string, uuid, required

## Request body

- CreateChargeReading
  - `lease_charge_id` string, uuid, required
  - `place_id` string, uuid, required
  - `reading_date` string, date-time, required
  - `reading_type` 'METER_READING' | 'CONSUMPTION' | 'OCCUPANT_COUNT' | 'EQUIPMENT_COUNT', required: Type of charge reading
  - `reading_subtype` 'COMMON_AREAS' | 'INDIVIDUAL' | 'MAINTENANCE' | 'LEAK_FIX', required: Subtype of charge reading for more granular categorization
  - `reading_value` number, required: Reading value (must be >= 0)
  - `anomaly_detected` boolean, required
  - `anomaly_details` AnomalyDetails: Details about a detected reading anomaly
    - `is_anomaly` boolean: Whether the reading is flagged as anomalous
    - `deviation_percentage` number, double, nullable: Percentage deviation from average
    - `average_value` number, double, nullable: Historical average value for comparison
    - `threshold_high` number, double, nullable: Upper threshold (150% of average)
    - `threshold_low` number, double, nullable: Lower threshold (50% of average)
  - `notes` string, nullable

## Response `201`

Reading created

- ChargeReading: Charge reading response
  - `id` string, uuid, required
  - `lease_charge_id` string, uuid, required: ID of the lease charge this reading belongs to
  - `place_id` string, uuid, required: ID of the place where the reading was taken
  - `reading_date` string, date-time, required: When the reading was taken
  - `reading_value` number, required: Reading value (BigDecimal)
  - `reading_type` 'METER_READING' | 'CONSUMPTION' | 'OCCUPANT_COUNT' | 'EQUIPMENT_COUNT', required: Type of charge reading
  - `reading_subtype` 'COMMON_AREAS' | 'INDIVIDUAL' | 'MAINTENANCE' | 'LEAK_FIX', required: Subtype of charge reading for more granular categorization
  - `anomaly_detected` boolean, required: Whether an anomaly was detected for this reading
  - `anomaly_details` AnomalyDetails: Details about a detected reading anomaly
    - `is_anomaly` boolean: Whether the reading is flagged as anomalous
    - `deviation_percentage` number, double, nullable: Percentage deviation from average
    - `average_value` number, double, nullable: Historical average value for comparison
    - `threshold_high` number, double, nullable: Upper threshold (150% of average)
    - `threshold_low` number, double, nullable: Lower threshold (50% of average)
  - `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

---

[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)
