Home Assistant
The Kept integration for Home Assistant shows what needs you in each location and sends readings back, such as the odometer a car integration already knows. It reads Kept with a personal token.
The integration: keptinventory/kept-homeassistant, installed with HACS as a custom repository.
Optional: only if you already run Home Assistant. Kept works the same without it.
Before you start
Section titled “Before you start”| You need | Why |
|---|---|
| Home Assistant 2026.10 or later | The integration is built and tested against it |
| HACS in Home Assistant | It installs the integration. Download HACS (what it needs) |
| Kept 1.8.0 or later | It adds the summary the sensors read |
Kept over https |
Kept makes personal tokens only over HTTPS (HTTPS) |
| Home Assistant can reach Kept | Same network, a VPN such as Tailscale, or a public address. Test it: open Kept’s address from the machine Home Assistant runs on |
What you get
Section titled “What you get”Each location is a device in Home Assistant:
| Entity | What it shows |
|---|---|
| Overdue, Due, Expiring | The counts on Kept’s Home. The items attribute lists the first 10, most urgent first |
| Lent out, Borrowed in | Open loans. Only where Lending is on |
| Uncertain, Long unseen | Things whose place is in doubt, or not seen for the location’s months |
| Low stock | Things below their minimum. Only where Consumables is on |
| Unplaced, Things | Off at first; turn them on in Home Assistant |
| Due dates (calendar) | Every item with a due day, as an all-day event |
Each vehicle (a thing with a meter, under Vehicles) is a device in its location:
| Entity | What it shows |
|---|---|
| Reading | The latest reading, in km, mi or hours |
| Next service | The day it’s due, or Kept’s estimate from your readings |
| Next service at | The reading it’s due at |
A location or vehicle added in Kept later shows up after you reload the integration.
Set up
Section titled “Set up”- Make a token. In Kept, Settings → Connections → New token. Tick the locations Home
Assistant should see. Read only is enough for the sensors and the calendar; Read and
change also lets the actions below send readings and mark schedules done. Kept makes tokens
only when it is served over
https(HTTPS). - Install. In HACS, ⋮ → Custom repositories (how): add
https://github.com/keptinventory/kept-homeassistant, type Integration. Install Kept, and restart Home Assistant. - Add it. Settings → Devices & services → Add integration → Kept. Enter Kept’s address
(
https://kept.example.org) and the token. Turn off Check the HTTPS certificate only for a self-signed certificate on your own network. - Check. The next step names your Kept’s version and the locations the token reaches. Submit adds them.
What the setup tells you when something is wrong:
| Message | What to do |
|---|---|
| Kept can’t be reached | Check the address and that Home Assistant can reach that host |
| It isn’t Kept | The address answers, but with something else: a proxy’s page, another app |
| That address redirects to HTTPS | Use the https:// address it names |
| The HTTPS certificate isn’t trusted | Use a trusted certificate, or turn off the check for a self-signed one |
| HTTPS failed | Kept is served over plain http on that port: use http:// |
| Kept refused the token | It was revoked, has expired or was mistyped: make a new one |
| This Kept doesn’t offer the summary | Update Kept |
Configure on the integration chooses which of the token’s locations to show and how often to read Kept (every 5 minutes; 1 to 60). When the token is revoked or expires, Home Assistant asks for a new one.
On a dashboard
Section titled “On a dashboard”Entity ids come from the names in Kept. For a location called Home and a car called
Corolla: sensor.home_overdue, sensor.home_due, sensor.home_expiring,
sensor.home_lent_out, sensor.home_low_stock, calendar.home_due_dates,
sensor.corolla_reading, sensor.corolla_next_service. Check yours under Settings → Devices &
services → Kept.
A tile card per count, or one entities card:
type: entitiestitle: Kept · Homeentities: - sensor.home_overdue - sensor.home_due - sensor.home_expiring - sensor.home_lent_out - sensor.home_low_stock - sensor.corolla_next_serviceThe Due dates calendar shows in Home Assistant’s Calendar panel.
Actions
Section titled “Actions”Kept: Log a reading (kept.log_reading) sends a reading for a vehicle (or a meter, by its id:
the Reading sensor’s meter_id). It shows in Kept as a reading from Home Assistant. Kept
refuses a reading lower than the one before it, and the action fails with Kept’s reason; a jump
Kept finds unlikely waits for review in the Inbox.
Kept: Mark a schedule done (kept.complete_schedule) marks a schedule done on a day (today,
in the location’s time zone) and records the service, with the reading for a schedule by meter.
A one-off is then done and leaves the counts; marking it done again fails.
Both need a Read and change token.
The car’s odometer, sent to Kept
Section titled “The car’s odometer, sent to Kept”When the car’s odometer has settled for 10 minutes (the car is parked):
alias: Odometer to Kepttriggers: - trigger: state entity_id: sensor.my_car_odometer for: "00:10:00"conditions: - condition: template value_template: "{{ trigger.to_state.state | is_number }}"actions: - action: kept.log_reading data: device_id: YOUR_KEPT_VEHICLE_DEVICE_ID value: "{{ trigger.to_state.state | float }}"mode: queuedsensor.my_car_odometer is your car integration’s sensor. In the automation editor, pick the
Kept vehicle in the action’s Vehicle field to fill device_id. Send the reading in the unit
of the vehicle’s meter in Kept.
Update or remove
Section titled “Update or remove”- Update: a new release shows under Settings → Updates (HACS adds it there). Install it and restart Home Assistant.
- Remove: Settings → Devices & services → Kept → ⋮ → Delete, then remove Kept in HACS and restart. Revoke the token in Kept: Settings → Connections.
What it reads
Section titled “What it reads”Every few minutes, with the token: GET /api/v1/summary (the counts per location),
GET /api/v1/vehicles and the first page of GET /api/v1/agenda. The calendar reads
GET /api/v1/agenda for the days it shows. The actions use POST /api/v1/meters/{id}/readings
and POST /api/v1/schedules/{id}/complete. A token sees only its own locations, and never more
than you can. The same summary feeds dashboard widgets.