---
title: "getErpUpdateEvent"
method: GET
path: "/v3/erp/updates/events/{event_id}"
tags: ["erp"]
---

# getErpUpdateEvent

`GET /v3/erp/updates/events/{event_id}`

## Request

- Base URL: `https://integration-toolkit.sls.epilot.io`
- URL: `https://integration-toolkit.sls.epilot.io/v3/erp/updates/events/{event_id}`
- Auth: HTTP bearer

Returns one interactive event's processing record, without waiting.

Records exist for events processed as interactive (the ingest result said
`interactive: true`) and are kept for 24 hours. Any other event id is a 404.

Requires `integration:view` on the event's integration.

## Path parameters

- `event_id` string, required

## Response `200`

The event's processing record

- ErpUpdateEventStatus: One interactive event's processing record.
  - `event_id` string, required
  - `correlation_id` string
  - `integration_id` string
  - `status` 'accepted' | 'processing' | 'done' | 'partial' | 'error', required: `accepted` until the mapping ran, `processing` while its writes run, then one of the terminal states: `done`, `partial` (something was written but a write or part of the mapping failed) or `error` (nothing was written).
  - `lane` 'interactive' | 'priority' | 'default' | 'deferred', required: Which processing lane carried the event.
  - `use_case_id` string
  - `use_case_slug` string
  - `event_name` string: The partner's own name for the event, as pushed.
  - `ingested_at` string, date-time, required
  - `mapped_at` string, date-time: When the event's mapping finished.
  - `done_at` string, date-time: When the event reached a terminal status.
  - `writes_total` integer, required: The entity writes the event fanned out into so far.
  - `writes_done` integer, required: The entity writes that have finished.
  - `entities` ErpUpdateProcessedEntity[], required: The entities the event wrote. An entity written without one of its relations, because the payload lacked the related entity's unique identifiers, is not listed; the event ends `partial` and `errors` names the relation.
    - `slug` string, required: Entity schema slug, e.g. `contact`.
    - `_id` string, required: The entity id.
    - `operation` 'created' | 'updated' | 'deleted' | 'unchanged', required: What the writes did, merged over every write of the entity — by the event, or on a correlation by all its events: `deleted` wins, then `created`, `updated`, `unchanged`. So an entity the event (or the correlation) created reads `created` however often it was written again, and one it deleted reads `deleted`. `unchanged` means the entity already matched; it still counts as written.
    - `unique_ids` object, required: The unique ids the entity was looked up by — the use case's configured `unique_ids` for that entity and nothing else, as far as they could be recorded. A value longer than 256 UTF-16 code units, not counting surrounding whitespace, is not recorded, and one write records its unique ids, in key order, within 1,024 bytes: an id that would not fit is left out. A selector cannot name an id that is not recorded. These and `_id` are what a caller can tell several entities of one slug apart by, and the only attributes a `wait_for_entities` selector can match. On a correlation they are the union over its events: two use cases that wrote one contact by different unique ids both match. A unique id two events wrote with different values shows one of them here, and a selector matches either.
  - `entities_omitted` integer: Entity writes of the event that are not in `entities`: an event lists at most 200. The entities were written all the same; they are only missing from the list. Present only when there are any.
  - `errors` ErpUpdateProcessingError[], required: The event's first 10 failures. A failure repeated within one item of the partner's data is listed once. `errors_total` counts them all.
    - `code` string, required: The v2 monitoring code of the failure.
    - `message` string, required
    - `event_id` string: Which event of the correlation failed. Present on the correlation's errors only; on an event's own errors it would repeat the event's id.
    - `occurred_at` string, date-time, required
    - `after_completion` boolean: `true` on a correlation's error of an event that arrived after the correlation completed. Listed for the record — while the list has room, and counted in `errors_total` either way; it is not part of the correlation's answer, which was final at `completed_at`. Absent otherwise.
  - `errors_total` integer, required: Every failure the event had, including those not listed in `errors`.

## Other responses

- `401`: Unauthorized: the request carries no bearer token. The API gateway answers `{"message": "Unauthorized"}`. A token that is present but invalid or expired is refused with 403, not 401.
- `403`: Forbidden: the token lacks a permission the operation requires, or it is invalid or expired — the API gateway refuses those with `{"message": "Forbidden"}` before the request reaches the API.
- `404`: Resource not found
- `500`: Internal Server Error

## Changes

- **2026-10-16** `ef6bbb0d5a31`: 1 info
  - added the optional property `entities_omitted` to the response with the `200` status
- **2026-10-15** `53e2cdce2751`: 2 info
  - added the optional property `errors/items/after_completion` to the response with the `200` status
  - added the required property `errors_total` to the response with the `200` status
- **2026-10-14** `7500d8e50bd0`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/epilot/apis/integration-toolkit-api/changes/v3/erp/updates/events/:event_id/get.md)

---

[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.dev/epilot/apis/integration-toolkit-api/revisions/7d07c4eb8d37?raw)
