API reference
Machines
The Machines API lets you update machines.
The Machines API lets you update machines.
Auto-generated from the public OpenAPI spec — this page never drifts from the running API. Base URL
https://api.arcnm.io. Authenticate with theX-API-Keyheader (see Authentication).
Update Machine
PATCH /api/v1/machines/{machine_id}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
machine_id |
path | string | yes | Identifier of the machine. |
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
capability_overrides |
object | no | Capability fields to change. For a library-derived machine these merge over the library default (sparse override); for a bespoke machine they merge into its own capability matrix. |
hourly_rate_eur |
number | no | New flat machine-hour rate in EUR/h; omit to leave. |
klass |
milling.3axis_vmc | milling.5axis_full | milling.indexable_3plus2 | turning.2axis_cnc | turning.live_tool | turning.swiss_type | turning.mill_integrex | press_brake | laser_cutter | plasma_cutter | guillotine_shear | tube_bender | turret_punch | waterjet | wire_edm | sinter.dmls | fdm_industrial | injection_molding_press | grinder.surface | grinder.cylindrical | saw.band | saw.circular |
no | Correct the machine's process class (e.g. a lathe entered from a milling template). The machine is re-based on the new class's standard capability matrix and detached from its catalogue entry, because that entry describes a different kind of machine; name, rates and fleet memberships are kept. Omit to leave. |
name |
string | no | New machine name; omit to leave. |
rate_operator_eur_per_h |
number | no | Operator wage already contained in hourly_rate_eur, in EUR/h; omit to leave. 0 means the rate covers the machine only and operator labour is billed separately — the default. Set it when the rate is all-in, so the operator is not charged twice. |
rate_operator_share |
number | no | Share of an operator this machine consumes while it runs (0-1); omit to leave. Setup is always fully attended. Unset falls back to the machine class default. |
Request
curl -X PATCH https://api.arcnm.io/api/v1/machines/{machine_id} \
-H "X-API-Key: $ARCNM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"capability_overrides": {},
"hourly_rate_eur": 0,
"klass": "milling.3axis_vmc",
"name": "string",
"rate_operator_eur_per_h": 0,
"rate_operator_share": 0
}'
import requests
resp = requests.patch(
"https://api.arcnm.io/api/v1/machines/{machine_id}",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"capability_overrides": {},
"hourly_rate_eur": 0,
"klass": "milling.3axis_vmc",
"name": "string",
"rate_operator_eur_per_h": 0,
"rate_operator_share": 0
},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.arcnm.io/api/v1/machines/{machine_id}", {
method: "PATCH",
headers: {
"X-API-Key": process.env.ARCNM_API_KEY!,
"Content-Type": "application/json",
},
body: JSON.stringify({
"capability_overrides": {},
"hourly_rate_eur": 0,
"klass": "milling.3axis_vmc",
"name": "string",
"rate_operator_eur_per_h": 0,
"rate_operator_share": 0
}),
})
const data = await resp.json()
Responses
| Status | Description |
|---|---|
200 |
Successful Response |
422 |
Validation Error |
Errors
Standard error responses — see the Errors catalog for the full envelope, request_id, and retry-safety table.
| Status | Code | When |
|---|---|---|
401 |
invalid_api_key |
Missing, malformed, or revoked API key. |
403 |
insufficient_scope |
The key is valid but lacks a scope this endpoint requires. |
404 |
not_found |
A referenced resource doesn't exist or isn't visible to your organisation. |
409 |
conflict |
A conflicting change, or an Idempotency-Key reused with a different body. |
429 |
rate_limited |
Per-key or per-org rate limit exceeded — back off with jitter and retry. |
Response body 200
| Field | Type | Description |
|---|---|---|
burden_rate_eur |
number | Overhead burden added on top of the machine-hour rate, in EUR per hour. |
capabilities |
object | Raw stored capability matrix; empty for library-derived instances (see effective_capabilities). |
hourly_rate_eur |
number | Machine-hour rate in EUR per hour. |
id |
string | Unique identifier of the machine definition. |
klass |
string | Machine class (e.g. milling, turning, laser_cutter). |
model_no |
string | Vendor model number of the machine. |
name |
string | Human-readable name of the machine. |
rate_operator_eur_per_h |
number | Operator wage already contained in hourly_rate_eur, in EUR per hour. 0 means the rate covers the machine only and operator labour is billed separately. |
rate_operator_share |
number | Share of an operator this machine consumes while it runs (0-1); setup is always fully attended. Null falls back to the machine class default. |
source |
string | 'library' if instantiated from a catalog entry, else 'custom'. |
subclass |
string | Machine subclass refining the class (e.g. small, medium, large). |
valid_from |
string | ISO date (YYYY-MM-DD) from which this machine definition is effective. |
valid_to |
string | ISO date (YYYY-MM-DD) the machine stops being effective; null = open-ended. |
vendor |
string | Manufacturer or vendor of the machine. |
Example response
{
"burden_rate_eur": 0,
"capabilities": {},
"hourly_rate_eur": 0,
"id": "string",
"klass": "string",
"model_no": "string",
"name": "string",
"rate_operator_eur_per_h": 0,
"rate_operator_share": 0,
"source": "custom",
"subclass": "string",
"valid_from": "string",
"valid_to": "string",
"vendor": "string"
}