Records intervals during which a Machine was in a particular state, such as setup, waiting, or breakdown.
For example, a Machine can be recorded as broken down because of a tool failure from 10:42 until 10:58. In the Excel template, machine time is registered on the Machine time sheet.
Machine time accounts for how a Machine spends its time. Consecutive intervals form the Machine's operating history.
The Machine time object
{
"machine": "LATHE-04",
"state": "breakdown",
"reason": "R-MECH",
"toldBy": 0,
"from": "2026-09-08T10:42:00+02:00",
"to": "2026-09-08T10:58:00+02:00"
}
Fields
| Field | Type | Description | Example |
|---|---|---|---|
machine |
string | Business code of the Machine the interval belongs to. | "LATHE-04" |
state |
string | Code of the machine state. See Machine states. | "breakdown" |
reason |
string or null | Optional reason for the state, as a reason code or free text. | "R-MECH" |
toldBy |
integer or null | Who supplied reason, as a number. See Reason source. |
0 |
from |
string | Date and time when the interval began, in ISO 8601 format. | "2026-09-08T10:42:00+02:00" |
to |
string or null | Date and time when the interval ended, or null while the Machine remains in this state. |
"2026-09-08T10:58:00+02:00" |
Important
machine, state, and from together identify an interval.
machine must reference an existing Machine, and state must be one of the machine states.
Do not submit the running state. Pulse records running time itself, see Running time.
Machine states
Pulse provides these states:
| State | Loss type |
|---|---|
setup |
Availability. Setup inside an operation. |
tool-change |
Availability |
breakdown |
Availability. An unplanned stop. |
planned-maintenance |
Availability |
waiting-material |
Availability |
waiting-tooling |
Availability |
waiting-program |
Availability |
waiting-inspection |
Availability |
waiting-labour |
Availability |
waiting-crane |
Availability |
blocked-downstream |
Availability |
starved-upstream |
Availability |
reduced-speed |
Performance |
micro-stop |
Performance |
warm-up |
Performance |
rework-running |
Quality |
running |
Productive. Recorded by Pulse, never submitted. |
A code that is not a machine state is refused. Don't submit machine time while the Machine is not scheduled to run.
Running time
When an Operation starts running on a Machine, Pulse opens a running interval for that Machine, and ends it when the Operation ends. You don't submit running time yourself.
When you submit another state while the Machine is running, Pulse interrupts the running interval at from. If your interval has a to, the running interval resumes at to.
State intervals
An interval remains open while to is null:
to = null → interval open
to supplied → interval closed
When a new interval is submitted, Pulse closes the Machine's currently open interval at the new interval's from. If the open interval started at the same time or later, the new interval replaces it.
This allows integrations to send state transitions without first closing the previous interval explicitly.
Overlapping states
A Machine cannot be in two states during the same period. Pulse refuses intervals that overlap another interval of the same Machine.
Out-of-order data is allowed as long as the resulting intervals do not overlap. For example, an interval from 09:00 to 09:30 can still be submitted after an interval from 10:00 to 10:30 has already been recorded.
Reason source
toldBy records who supplied reason, as a number:
| Value | Meaning |
|---|---|
0 |
Operator. A person declared the reason. |
1 |
Equipment. The Machine or monitoring equipment supplied the reason automatically. |
An operator selecting a reason and a controller reporting the same reason are kept as different kinds of evidence.
toldBy is stored only together with a reason. An interval without reason is read back with toldBy set to null.
Machine time and operations
When an interval is recorded, Pulse links it to the Operation running on that Machine at the time, if there is one. This allows setup, waiting, or breakdown time to be analysed in the context of the production work that was active.
An Operation does not have to be running for machine time to be recorded.
Machine time and events
Machine time and Events serve different purposes.
Machine time records how a Machine spent time over an interval. An Event records something that happened and can be counted or classified independently of the Machine's time accounting.
For example, a tool failure may be recorded as an Event, while the resulting stopped time is recorded as machine time.
API resource
| Resource | Base path |
|---|---|
Machine time |
/manufacturing/metal-machining/v1/machine-time |
API methods
Submit machine time
POST /manufacturing/metal-machining/v1/machine-time/insert
Records one interval and returns its Pulse identifier.
Request
POST /manufacturing/metal-machining/v1/machine-time/insert
Content-Type: application/json
{
"machine": "LATHE-04",
"state": "breakdown",
"reason": "R-MECH",
"toldBy": 0,
"from": "2026-09-08T10:42:00+02:00",
"to": null
}
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
machine |
string | yes | Business code of the Machine. |
state |
string | yes | Code of the machine state. running is not submitted. |
reason |
string or null | no | Reason code or free text. |
toldBy |
integer or null | no |
0 operator or 1 equipment. |
from |
string | yes | Date and time when the interval began. |
to |
string or null | no | Date and time when the interval ended. |
Update machine time
PUT /manufacturing/metal-machining/v1/machine-time/update
Updates the interval identified by machine, state, and from. The interval must already exist.
An update replaces reason, toldBy, and to. If you leave out reason, toldBy, or to, it is removed.
Request
PUT /manufacturing/metal-machining/v1/machine-time/update
Content-Type: application/json
{
"machine": "LATHE-04",
"state": "breakdown",
"reason": "R-MECH",
"toldBy": 0,
"from": "2026-09-08T10:42:00+02:00",
"to": "2026-09-08T10:58:00+02:00"
}
Parameters
The parameters are the same as for submitting machine time.
Patch machine time
PATCH /manufacturing/metal-machining/v1/machine-time/patch
Partially updates an existing interval.
The interval is identified by properties.machine, properties.state, and properties.from. All three are required. Fields you leave out keep their current values. reason, toldBy, and to can be cleared by sending them as null.
Request
PATCH /manufacturing/metal-machining/v1/machine-time/patch
Content-Type: application/json
{
"properties": {
"machine": "LATHE-04",
"state": "breakdown",
"from": "2026-09-08T10:42:00+02:00",
"to": "2026-09-08T10:58:00+02:00"
}
}
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
properties |
object | yes | Fields included in the partial update. |
properties.machine |
string | yes | Business code of the Machine. |
properties.state |
string | yes | State code identifying the interval. |
properties.from |
string | yes | Start time identifying the interval. |
properties.reason |
string or null | no | New reason, or null to clear it. |
properties.toldBy |
integer or null | no | New source (0 or 1), or null to clear it. |
properties.to |
string or null | no | New end time, or null to reopen the interval. |
Retrieve machine time
GET /manufacturing/metal-machining/v1/machine-time/select
Returns the interval identified by machine, state, and from. If no interval matches, the response is empty.
Request
GET /manufacturing/metal-machining/v1/machine-time/select?machine=LATHE-04&state=breakdown&from=2026-09-08T10:42:00%2B02:00
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
machine |
string | yes | Business code of the Machine. |
state |
string | yes | State code. |
from |
string | yes | Interval start date and time. |
List machine time
GET /manufacturing/metal-machining/v1/machine-time/query
Returns intervals matching the supplied filters, including the running intervals Pulse records for operations.
Request
GET /manufacturing/metal-machining/v1/machine-time/query?machines=LATHE-04&states=breakdown
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
machines |
string or array of strings | no | Limits results to the specified Machines. |
states |
string or array of strings | no | Limits results to the specified states. |
open |
boolean | no |
true returns open intervals; false returns closed intervals. |
from |
string | no | Beginning of the requested time window. |
to |
string | no | End of the requested time window. |
Multiple values can be supplied by repeating the query parameter:
GET /manufacturing/metal-machining/v1/machine-time/query?states=breakdown&states=setup
Delete machine time
DELETE /manufacturing/metal-machining/v1/machine-time/delete
Deletes the interval identified by machine, state, and from. If no interval matches, nothing happens.
Request
DELETE /manufacturing/metal-machining/v1/machine-time/delete?machine=LATHE-04&state=breakdown&from=2026-09-08T10:42:00%2B02:00
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
machine |
string | yes | Business code of the Machine. |
state |
string | yes | State code. |
from |
string | yes | Interval start date and time. |