Skip to content

Ingest

POST
/users/{user_id}/home-assistant
curl --request POST \
--url https://example.com/users/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/home-assistant \
--header 'Content-Type: application/json' \
--data '{ "events": [ { "category": "example", "entity_id": "example", "metadata": {}, "name": "example", "occurred_at": "2026-04-15T12:00:00Z", "state": "example" } ], "readings": [ { "category": "example", "display_name": "example", "entity_id": "example", "recorded_at": "2026-04-15T12:00:00Z", "signal": "example", "unit": "example", "value": 1 } ] }'

Ingest a batch of Home Assistant readings + events.

Idempotent: readings dedup on (user, source="home_assistant", source_id) and events on exact (category, occurred_at), so the plugin can safely re-send on retry.

user_id
required
User Id
string format: uuid
Media typeapplication/json
HAIngest
object
events
Events
Array<object>
HAEvent

One discrete state change (e.g. presence detected, door opened) → a timeline event.

object
category
required
Category
string
entity_id
Any of:
string
metadata
Metadata
object
key
additional properties
any
name
Any of:
string
occurred_at
required
Occurred At
string format: date-time
state
Any of:
string
readings
Readings
Array<object>
HAReading

One numeric sensor reading (e.g. a temperature/humidity/energy sensor state).

object
category
Any of:
string
display_name
Any of:
string
entity_id
Any of:
string
recorded_at
required
Recorded At
string format: date-time
signal
required
Signal
string
unit
Any of:
string
value
required
Value
number
Examplegenerated
{
"events": [
{
"category": "example",
"entity_id": "example",
"metadata": {},
"name": "example",
"occurred_at": "2026-04-15T12:00:00Z",
"state": "example"
}
],
"readings": [
{
"category": "example",
"display_name": "example",
"entity_id": "example",
"recorded_at": "2026-04-15T12:00:00Z",
"signal": "example",
"unit": "example",
"value": 1
}
]
}

Successful Response

Media typeapplication/json
HAIngestResult
object
events_created
required
Events Created
integer
events_skipped
required
Events Skipped
integer
metrics_created
required
Metrics Created
integer
metrics_skipped
required
Metrics Skipped
integer
Examplegenerated
{
"events_created": 1,
"events_skipped": 1,
"metrics_created": 1,
"metrics_skipped": 1
}

Validation Error

Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
Examplegenerated
{
"detail": [
{
"loc": [
"example"
],
"msg": "example",
"type": "example"
}
]
}