Events

Every webhook event type, when it fires, and the fields it carries.

Each notification's eventType says what happened, and its event object carries the data. The envelope around it is the same for every event.

Event typeSent when
MachineStopCreatedA machine stop starts.
MachineStopEndedA machine stop ends.
MachineStopClassificationCreatedA machine stop is classified.
MachineStopClassificationUpdatedA stop's classification changes.
MachineStopClassificationDeletedA stop's classification is removed.
PingPulsar tests your endpoint.

Machine stops

When a machine stops, Pulsar records the stop. The stop events tell you about it as it happens: MachineStopCreated when it starts and MachineStopEnded when it ends, whether or not anyone has classified it yet. To also hear about its cause, subscribe to the classification events below.

Turned on per company

Stop events are enabled company by company. Ask your Pulsar contact to turn them on for yours before you register an endpoint for them.

Both stop events carry the same event object. It has the same fields as the classification events, but the cause fields are null while the stop is unclassified:

FieldTypeDescription
machinestringThe machine's name in Pulsar.
machineExternalNamestring | nullThe machine's external name, for example its ID in your ERP. null if it has none.
startstringWhen the stop started, as an ISO 8601 UTC timestamp.
endstring | nullWhen the stop ended, as an ISO 8601 UTC timestamp. null while the stop is still open.
operatorstring | nullFull name of the operator on the machine when the stop started. null if nobody was logged in.
generalCausestring | nullName of the general cause. null while the stop is unclassified.
specificCausestring | nullName of the specific cause.
componentstring | nullName of the component involved.
descriptionstring | nullFree-text description of the stop.
isAutomatedboolean | nulltrue if the classification was applied automatically by a rule, false if a person entered it. null while the stop is unclassified.

As with classifications, a stop is identified by its machine and its start. Use that pair to match a MachineStopEnded to the MachineStopCreated you already received, and to a later classification event for the same stop.

Stop created

MachineStopCreated is sent when Pulsar records a new stop. The cause fields are null until someone classifies it.

{
  "eventId": "2a7c9e14-6b3d-4f81-a5c2-9d0e7f3b1a68",
  "eventTimestamp": "2026-09-25T13:41:52.306Z",
  "eventType": "MachineStopCreated",
  "event": {
    "machine": "Injection molder 4",
    "machineExternalName": "INJ-004",
    "start": "2026-09-25T13:41:07.000Z",
    "end": null,
    "operator": "Ana Torres",
    "generalCause": null,
    "specificCause": null,
    "component": null,
    "description": null,
    "isAutomated": null
  }
}

Stop ended

MachineStopEnded is sent when a stop gets its end time. A stop that Pulsar records already closed is sent as both MachineStopCreated and MachineStopEnded.

{
  "eventId": "e6b13f80-4c2a-4d97-8e5b-1f9a7c3d0b24",
  "eventTimestamp": "2026-09-25T13:59:04.751Z",
  "eventType": "MachineStopEnded",
  "event": {
    "machine": "Injection molder 4",
    "machineExternalName": "INJ-004",
    "start": "2026-09-25T13:41:07.000Z",
    "end": "2026-09-25T13:58:30.000Z",
    "operator": "Ana Torres",
    "generalCause": null,
    "specificCause": null,
    "component": null,
    "description": null,
    "isAutomated": null
  }
}

If the stop was classified before the event was delivered, the cause fields carry that classification.

What to expect

  • Shift changes split stops. A stop still open when a shift ends is closed at the shift change, and a new stop starts in the next shift. You receive a MachineStopEnded for the first and a MachineStopCreated for the second.
  • A stop's start can move. Pulsar can adjust a stop's start time after recording it. Because a stop is identified by its start, you then receive a MachineStopCreated for the new start and nothing more for the old one.
  • Only detected stops. Stops that someone adds or splits by hand in Pulsar don't send stop events yet.

Machine stop classifications

When a machine stops, Pulsar records the stop. Classifying it means recording why it happened: a general cause, optionally a more specific cause and the component involved, and a free-text description. A classification is entered by a person or applied automatically by a rule.

All three classification events carry the same event object:

FieldTypeDescription
machinestringThe machine's name in Pulsar.
machineExternalNamestring | nullThe machine's external name, for example its ID in your ERP. null if it has none.
startstringWhen the stop started, as an ISO 8601 UTC timestamp.
endstring | nullWhen the stop ended, as an ISO 8601 UTC timestamp. Can be null.
operatorstring | nullFull name of the operator on the machine when the stop started. null if nobody was logged in.
generalCausestring | nullName of the general cause.
specificCausestring | nullName of the specific cause.
componentstring | nullName of the component involved.
descriptionstring | nullFree-text description of the stop.
isAutomatedbooleantrue if the classification was applied automatically by a rule, false if a person entered it.

A stop is identified by its machine and its start. Use that pair to match an update or deletion to a stop you already know about.

Names, not IDs

Machines, causes, components and operators are sent by name. If one is renamed in Pulsar, later events carry the new name.

Created

MachineStopClassificationCreated is sent when a stop is classified for the first time.

{
  "eventId": "8d2f6c1e-4b7a-4f0e-9a3c-5e1d7b9f2a64",
  "eventTimestamp": "2026-09-25T14:03:12.482Z",
  "eventType": "MachineStopClassificationCreated",
  "event": {
    "machine": "Injection molder 4",
    "machineExternalName": "INJ-004",
    "start": "2026-09-25T13:41:07.000Z",
    "end": "2026-09-25T13:58:30.000Z",
    "operator": "Ana Torres",
    "generalCause": "Mechanical failure",
    "specificCause": "Mold jam",
    "component": "Ejector pin",
    "description": "Part stuck in cavity 2, cleared manually",
    "isAutomated": false
  }
}

Updated

MachineStopClassificationUpdated is sent when an existing classification changes, for example when someone corrects the cause. The event object carries the classification's current values.

{
  "eventId": "c41a7e09-2d6b-4f38-9e15-7b0c3a9d4f22",
  "eventTimestamp": "2026-09-25T14:20:45.117Z",
  "eventType": "MachineStopClassificationUpdated",
  "event": {
    "machine": "Injection molder 4",
    "machineExternalName": "INJ-004",
    "start": "2026-09-25T13:41:07.000Z",
    "end": "2026-09-25T13:58:30.000Z",
    "operator": "Ana Torres",
    "generalCause": "Mechanical failure",
    "specificCause": "Ejector failure",
    "component": "Ejector pin",
    "description": "Ejector pin bent, replaced",
    "isAutomated": false
  }
}

Deleted

MachineStopClassificationDeleted is sent when a classification is removed, leaving the stop unclassified. The causes, component, description and isAutomated describe the classification as it was before it was deleted. The machine, stop times and operator come from Pulsar's current records.

{
  "eventId": "5e93b0d7-8a14-4c6f-b2e8-1d7f0a3c9b56",
  "eventTimestamp": "2026-09-25T15:02:09.804Z",
  "eventType": "MachineStopClassificationDeleted",
  "event": {
    "machine": "Injection molder 4",
    "machineExternalName": "INJ-004",
    "start": "2026-09-25T13:41:07.000Z",
    "end": "2026-09-25T13:58:30.000Z",
    "operator": "Ana Torres",
    "generalCause": "Mechanical failure",
    "specificCause": "Ejector failure",
    "component": "Ejector pin",
    "description": "Ejector pin bent, replaced",
    "isAutomated": false
  }
}

Event data is read at delivery time

For stop events and for classification created and updated events, Pulsar reads the stop or the classification when it first prepares the notification, not at the instant of the change. If a classification changes twice in quick succession, both events can carry the newer values, and a MachineStopCreated that's delivered late can already include end. Treat each event as "this stop now looks like this", not as a record of one particular edit.

If a stop no longer exists when Pulsar prepares its stop event, for example because its start moved, the event isn't sent.

A retry or replay resends exactly the same body as the first attempt, so it never picks up later changes.

On this page