---
title: "getEntitySyncStatus"
method: GET
path: "/v1/entities/{entityId}/sync-status"
tags: ["integrations"]
---

# getEntitySyncStatus

`GET /v1/entities/{entityId}/sync-status`

Get the inbound ERP sync status of an entity: when each integration last
synchronized (checked) the entity against the ERP, and when it last
actually changed it. `last_synced_at` also advances on no-op checks —
events that were received and evaluated but changed nothing — which by
design leave no trace on the entity itself (no activity feed entry, no
`_updated_at` bump). Use it to tell whether an entity is up to date with
the ERP. Returns an empty list for entities no inbound use case has
processed. Org-scoped via the caller's token.

## Path parameters

- `entityId` string, uuid, required

## Query parameters

- `integration_id` string, uuid

## Response `200`

Successfully retrieved entity sync status

- EntitySyncStatusResponse
  - `entity_id` string, uuid, required — The entity the sync states belong to
  - `sync_states` EntitySyncState[], required — One entry per integration that has processed an inbound event for the entity
    - `entity_id` string, uuid, required — The entity ID
    - `integration_id` string, uuid, required — The integration that synchronized the entity
    - `entity_slug` string, required — The entity schema slug
    - `use_case_id` string — The inbound use case that last processed the entity
    - `last_synced_at` string, date-time — Last time an inbound ERP event for this entity was processed — including no-op checks that changed nothing on the entity.
    - `last_changed_at` string, date-time — Last time an inbound ERP event actually changed the entity (create/patch/delete)
    - `last_operation` 'create' | 'patch' | 'delete' | 'no-op' — Outcome of the most recent inbound sync check
    - `last_event_id` string — The event ID of the most recent inbound sync check
    - `readings_last_synced_at` string, date-time — Last time meter readings for this meter/meter_counter entity were received and processed from the ERP. Only present on meter and meter_counter entities. The metering path cannot detect no-ops, so there is no separate readings changed-at.
    - `readings_last_operation` 'upsert' | 'delete' — Outcome of the most recent inbound readings sync
    - `readings_last_event_id` string — The event ID of the most recent inbound readings sync

## Other responses

- `400` — Bad request
- `401` — Unauthorized request
- `500` — Internal Server Error

---

[API](https://skmtc.dev/epilot/apis/integration-toolkit-api.md) · [All operations](https://skmtc.dev/epilot/apis/integration-toolkit-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/epilot/integration-toolkit-api/revisions/a765dc127359/schema)
