{"openapi":"3.2.0","info":{"title":"Pulsar Public API","description":"\nThe authenticated public gateway for Pulsar.\n\nEvery endpoint accepts **either** an `x-api-key` header or an\n`Authorization: Bearer <cognito access token>` header. The company a request acts on is\nresolved from that credential — there is no company parameter, and one credential cannot\nread another company's data.\n\nEach endpoint requires a single `section.action` scope. A request that authenticates but\nlacks the scope is rejected with `403` and a body naming the scope it needed, for example\n`{\"detail\": \"Not enough permissions. Missing scope: signals.read\"}`.\n\nConventions worth knowing before you start:\n\n* Path and query parameters are `snake_case`; JSON bodies are `camelCase`. The signals\n  endpoints are the exception — their responses are `snake_case` too.\n* Searching is a `POST` to a `/filters` sub-path because the filter bodies nest. Those\n  endpoints, and both reports, still only need the section's `read` action.\n* `page` starts at 1 and `limit` defaults to 10. Responses wrap rows in a\n  `totalCount` / `totalPages` / `currentPage` envelope.\n* Create endpoints accept a JSON **array**, even for a single record.\n* Machine and operator ids are integers; signal, SKU, production log and nominal speed ids\n  are UUID strings. The signals endpoints take the machine's `uuid`, not its integer id.\n* Rate limits are configured per API key. A `429` carries a `Retry-After` header.\n","version":"0.1.0"},"paths":{"/v1/machines":{"get":{"tags":["Machines"],"summary":"List machines","description":"Return every machine the caller's company can see.\n\nMachines are the entry point to the rest of the API. Signals take the `uuid` returned\nhere; production logs, nominal speeds, realtime and reports still take the integer `id`.\n`uuid` is the machine's stable public identifier; it is null for machines that do not\nhave one yet, and those cannot be queried for signals.\nThe list is not paginated and takes no filters — it is scoped to the company\nresolved from the credential, so there is no company parameter to pass.","operationId":"get_machines_v1_v1_machines_get","responses":{"200":{"description":"Every machine visible to the authenticated company","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/src__machines__schemas__MachineDtoV1"},"type":"array","title":"Response Get Machines V1 V1 Machines Get"}}}}}}},"/v1/machines/{machine_uuid}/signals":{"get":{"tags":["Signals"],"summary":"List a machine's signals","description":"Return the raw sensor signals a machine exposes, with the `public_id` needed to read samples.\n\nA signal is one sensor channel read by the machine, named after the physical quantity it\ncarries (`current`, `count`, `product_count`, `cycle`, `energy`, `temperature`,\n`pressure`, ...). A machine can expose several signals with the same `name`; their\n`display_name` tells them apart. Soft-deleted signals and signals without a kind are not listed.\n\n`description` is in English by default; pass `language=es` for Spanish. A description with no\ntranslation in the requested language is returned in English.","operationId":"get_machine_signals_v1","parameters":[{"name":"machine_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The machine's `uuid`, as returned by `GET /v1/machines`.","title":"Machine Uuid"},"description":"The machine's `uuid`, as returned by `GET /v1/machines`."},{"name":"language","in":"query","required":false,"schema":{"$ref":"#/components/schemas/Language","description":"Language of each signal's `description`. Falls back to English.","default":"en"},"description":"Language of each signal's `description`. Falls back to English."}],"responses":{"200":{"description":"The raw sensor signals exposed for this machine","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMachineSignalsResponseV1"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/machines/{machine_uuid}/signals/{public_id}":{"get":{"tags":["Signals"],"summary":"Read signal data","description":"Return aggregated raw sensor points for one signal.\n\nSamples are bucketed before they are returned. The bucket width is\n`agg_period` x `agg_unit` (`agg_period=15`, `agg_unit=m` is a 15-minute bucket) and\n`agg_function` is how samples inside a bucket are reduced.\n\nBy default points are returned as a `data` list of `{timestamp, value}` objects. Pass\n`transpose=true` to get two arrays of equal length instead, `timestamps` and `values`,\nwhere `values[i]` belongs to `timestamps[i]`. It carries the same points in a smaller body.\n\nTwo limits are enforced and both reject the request rather than truncating the\nresponse: the window between `start_time` and `end_time` may not exceed **14 days**,\nand a query may not produce more than **10,000 points**. The defaults\n(`agg_unit=s`, `agg_period=1`) reach the point ceiling after under three hours, so\nmost callers set them explicitly.","operationId":"get_machine_signal_data_v1","parameters":[{"name":"machine_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The machine's `uuid`, as returned by `GET /v1/machines`.","title":"Machine Uuid"},"description":"The machine's `uuid`, as returned by `GET /v1/machines`."},{"name":"public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Public Id"},"description":"The public ID."},{"name":"start_time","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"Start Time"},"description":"Filter by start time."},{"name":"end_time","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"End Time"},"description":"Filter by end time."},{"name":"agg_unit","in":"query","required":false,"schema":{"$ref":"#/components/schemas/AggregationUnit","default":"s"},"description":"Filter by agg unit."},{"name":"agg_period","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Agg Period"},"description":"Filter by agg period."},{"name":"agg_function","in":"query","required":false,"schema":{"$ref":"#/components/schemas/AggregationFunction","default":"avg"},"description":"Filter by agg function."},{"name":"transpose","in":"query","required":false,"schema":{"type":"boolean","description":"Return parallel `timestamps` and `values` arrays instead of a list of `{timestamp, value}` points.","default":false,"title":"Transpose"},"description":"Return parallel `timestamps` and `values` arrays instead of a list of `{timestamp, value}` points."}],"responses":{"200":{"description":"Aggregated points for the requested window: a `data` list of `{timestamp, value}` points, or parallel `timestamps` and `values` arrays when `transpose=true`","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GetSignalDataResponseV1"},{"$ref":"#/components/schemas/GetTransposedSignalDataResponseV1"}],"title":"Response Get Machine Signal Data V1"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/nominal-speeds":{"post":{"tags":["Nominal speeds"],"summary":"Create nominal speeds","description":"Set the expected rate for one or many machine/SKU pairs. The body is a JSON **array**.\n\n`nominalSpeed` must be greater than zero, and `machine` and `sku` each accept an `id` or a\n`name`. `countingFactor` defaults to `1` and converts sensor pulses into the SKU's unit —\nset it to `12` where one pulse means a case of twelve.","operationId":"create_multiple_nominal_speeds_v1_v1_nominal_speeds_post","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CreateNominalSpeedDtoV1"},"type":"array","title":"Body"}}},"required":true},"responses":{"200":{"description":"The nominal speeds that were created","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/NominalSpeedDtoV1"},"type":"array","title":"Response Create Multiple Nominal Speeds V1 V1 Nominal Speeds Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/nominal-speeds/filters":{"post":{"tags":["Nominal speeds"],"summary":"Search nominal speeds","description":"Search the configured speeds for machine and SKU combinations.\n\nUseful for auditing: a machine/SKU pair with no nominal speed, or an obviously wrong one,\nis the most common cause of a performance figure nobody believes.","operationId":"get_nominal_speeds_by_filters_v1_v1_nominal_speeds_filters_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetNominalSpeedsByFiltersRequestV1"}}},"required":true},"responses":{"200":{"description":"A page of nominal speeds, with the total count and page count","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetNominalSpeedsByFiltersResponseV1"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/nominal-speeds/{nominal_speed_id}":{"get":{"tags":["Nominal speeds"],"summary":"Retrieve a nominal speed","description":"Return one nominal-speed record by id.","operationId":"get_nominal_speed_by_id_v1_v1_nominal_speeds__nominal_speed_id__get","parameters":[{"name":"nominal_speed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Nominal Speed Id"},"description":"The nominal speed ID."}],"responses":{"200":{"description":"The nominal speed record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetNominalSpeedByIdResponseV1"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Nominal speeds"],"summary":"Update a nominal speed","description":"Partially update a nominal speed: send only the fields that change.\n\nNominal speed is the denominator of the performance term in OEE, so changing it changes the\nOEE reported for the periods it applies to.","operationId":"update_nominal_speed_by_id_v1_v1_nominal_speeds__nominal_speed_id__patch","parameters":[{"name":"nominal_speed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Nominal Speed Id"},"description":"The nominal speed ID."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNominalSpeedByIdRequestV1"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Nominal speeds"],"summary":"Delete a nominal speed","description":"Delete a machine/SKU speed configuration.\n\nWith no nominal speed for a pair, there is nothing to compare actual output against for\nthat combination.","operationId":"delete_nominal_speed_by_id_v1_v1_nominal_speeds__nominal_speed_id__delete","parameters":[{"name":"nominal_speed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Nominal Speed Id"},"description":"The nominal speed ID."}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/operators":{"post":{"tags":["Operators"],"summary":"Create operators","description":"Create one or many operators. The body is a JSON **array**, even for a single record.\n\nBoth `firstName` and `lastName` are optional, so a partially known operator can be created\nnow and completed later with a `PATCH`.","operationId":"create_multiple_operators_v1_v1_operators_post","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CreateOperatorDtoV1"},"type":"array","title":"Body"}}},"required":true},"responses":{"200":{"description":"The operators that were created","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/src__operators__schemas__OperatorDtoV1"},"type":"array","title":"Response Create Multiple Operators V1 V1 Operators Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/operators/filters":{"post":{"tags":["Operators"],"summary":"Search operators","description":"Search the operator roster, or page through it with `{}`.\n\nThere is no combined name filter: `firstName` and `lastName` are separate fuzzy filters and\ncombine with AND.","operationId":"get_operators_by_filters_v1_v1_operators_filters_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetOperatorsByFiltersRequestV1"}}},"required":true},"responses":{"200":{"description":"A page of operators, with the total count and page count","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetOperatorsByFiltersResponseV1"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/operators/{operator_id}":{"get":{"tags":["Operators"],"summary":"Retrieve an operator","description":"Return one operator by id.","operationId":"get_operator_by_id_v1_v1_operators__operator_id__get","parameters":[{"name":"operator_id","in":"path","required":true,"schema":{"type":"integer","title":"Operator Id"},"description":"The operator ID."}],"responses":{"200":{"description":"The operator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetOperatorByIdResponseV1"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Operators"],"summary":"Update an operator","description":"Partially update an operator: send only the fields that change.","operationId":"update_operator_by_id_v1_v1_operators__operator_id__patch","parameters":[{"name":"operator_id","in":"path","required":true,"schema":{"type":"integer","title":"Operator Id"},"description":"The operator ID."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOperatorByIdRequestV1"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Operators"],"summary":"Delete an operator","description":"Delete an operator from the roster.\n\nProduction logs and shifts that reference the operator are left pointing at a record that\nno longer resolves, so for someone who has simply left, leaving the record in place\npreserves the history their shifts are attached to.","operationId":"delete_operator_by_id_v1_v1_operators__operator_id__delete","parameters":[{"name":"operator_id","in":"path","required":true,"schema":{"type":"integer","title":"Operator Id"},"description":"The operator ID."}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/production-logs":{"post":{"tags":["Production Logs"],"summary":"Create Production Logs","description":"Create one or many Production Logs. The body is a JSON **array**, even for a single record.\n\nThis is the endpoint an MES, ERP or shop-floor terminal uses to push production into\nPulsar. `machine` and `sku` are references that accept either an `id` or a `name`, so a\nsystem that only knows line names and product codes does not have to resolve Pulsar ids\nfirst.\n\nA Production Log describes a closed interval: `start` and `end` are both required. To\nrecord what is happening in the shift a machine is running right now, use the realtime\nendpoints instead.","operationId":"create_multiple_production_logs_v1_v1_production_logs_post","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CreateProductionLogDtoV1"},"type":"array","title":"Body"}}},"required":true},"responses":{"200":{"description":"The Production Logs that were created","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProductionLogDtoV1"},"type":"array","title":"Response Create Multiple Production Logs V1 V1 Production Logs Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/production-logs/filters":{"post":{"tags":["Production Logs"],"summary":"Search Production Logs","description":"Search Production Logs by machine, SKU, date, quantity or review state.\n\nA `POST` because the filter body nests, but it only reads: the `production_logs.read`\nscope is sufficient. Send `{}` to get the first page with the defaults (`page` 1,\n`limit` 10). Filters are optional and combine with AND.","operationId":"get_production_logs_by_filters_v1_v1_production_logs_filters_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetProductionLogsByFiltersRequestV1"}}},"required":true},"responses":{"200":{"description":"A page of Production Logs, with the total count and page count","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetProductionLogsByFiltersResponseV1"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/production-logs/{production_log_id}":{"get":{"tags":["Production Logs"],"summary":"Retrieve a Production Log","description":"Return one Production Log by id, with its related records expanded inline.\n\nAn id belonging to another company is reported as `404`, not `403`.","operationId":"get_production_log_by_id_v1_v1_production_logs__production_log_id__get","parameters":[{"name":"production_log_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Production Log Id"},"description":"The production log ID."}],"responses":{"200":{"description":"The Production Log, with machine, SKU, operator and work order expanded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetProductionLogByIdResponseV1"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Production Logs"],"summary":"Update a Production Log","description":"Partially update a Production Log: send only the fields that change.\n\nThis is the call for correcting a miscount or a wrong time window without restating the\nwhole record. Changing `count`, `nominalSpeed`, `start` or `end` changes the OEE Pulsar\nreports for that period, and the correction is visible in dashboards immediately.","operationId":"update_production_log_by_id_v1_v1_production_logs__production_log_id__patch","parameters":[{"name":"production_log_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Production Log Id"},"description":"The production log ID."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProductionLogByIdRequestV1"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Production Logs"],"summary":"Delete a Production Log","description":"Delete a Production Log, and with it its contribution to every metric derived from it.\n\nPrefer a `PATCH` when the record is wrong rather than absent.","operationId":"delete_production_log_by_id_v1_v1_production_logs__production_log_id__delete","parameters":[{"name":"production_log_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Production Log Id"},"description":"The production log ID."}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/realtime/{machine_id}/sku":{"post":{"tags":["Realtime"],"summary":"Add a SKU to the current shift","description":"Attach a SKU to the shift the machine is running at the moment of the call.\n\nBuilt for shop-floor terminals and scanners: no shift lookup and no production-log\narithmetic. The SKU is given as `skuId` or as `sku` (its name), and the work order as\n`simpleWorkOrderId` or `simpleWorkOrderName`.\n\nThis writes to the live shift and is visible in the Pulsar dashboard immediately.","operationId":"add_sku_to_current_shift_v1_v1_realtime__machine_id__sku_post","parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"integer","title":"Machine Id"},"description":"The machine ID."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddSkuToCurrentShiftRequestV1"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/realtime/{machine_id}/operator":{"post":{"tags":["Realtime"],"summary":"Add an operator to the current shift","description":"Assign an operator to the shift the machine is running at the moment of the call.\n\nBoth fields are required: `operatorId` and `start`, the moment the assignment begins. Use\nit for clock-in at a terminal. This writes to the live shift and takes effect immediately.","operationId":"add_operator_to_current_shift_v1_v1_realtime__machine_id__operator_post","parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"integer","title":"Machine Id"},"description":"The machine ID."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddOperatorToCurrentShiftRequestV1"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/metrics":{"post":{"tags":["Reports"],"summary":"Metrics report","description":"Return OEE, availability, quality and lost minutes per machine and shift.\n\nEach row carries the shift indicators (available time, downtime split by cause) together\nwith the derived production metrics: `availability`, `effectiveness`, `quality`, `oee` and\n`netOee`, plus minutes lost to low speed and to low quality.\n\nA `POST` that only reads — the `reports.read` scope is sufficient. Prefer this over\nderiving OEE from production logs: shift boundaries, downtime classification and counting\nfactors are already applied.","operationId":"get_metrics_report_v1_v1_reports_metrics_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMetricsReportRequestV1"}}},"required":true},"responses":{"200":{"description":"A page of per-machine, per-shift metrics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMetricsReportResponseV1"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/stops":{"post":{"tags":["Reports"],"summary":"Stops report","description":"Return individual machine stops with their duration, cause and classification.\n\nThis is the drill-down behind the downtime totals in the metrics report. `stopId` accepts\nthe full comparison grammar, so a specific stop or a range of them can be pulled directly.","operationId":"get_stops_report_v1_v1_reports_stops_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetStopsReportRequestV1"}}},"required":true},"responses":{"200":{"description":"A page of stops with their cause and classification","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetStopsReportResponseV1"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/skus":{"post":{"tags":["SKUs"],"summary":"Create SKUs","description":"Create one or many SKUs. The body is a JSON **array**, even for a single record.\n\nOnly `sku` (the product code) is required; `unit` defaults to `units` and `archived` to\n`false`.","operationId":"create_multiple_skus_v1_v1_skus_post","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CreateSkuDtoV1"},"type":"array","title":"Body"}}},"required":true},"responses":{"200":{"description":"The SKUs that were created","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SkuDtoV1"},"type":"array","title":"Response Create Multiple Skus V1 V1 Skus Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/skus/filters":{"post":{"tags":["SKUs"],"summary":"Search SKUs","description":"Search the product catalog, or page through it with `{}`.\n\nThe filters are separate rather than one combined search: `skus` matches the SKU code and\nalso accepts `include` / `exclude` by id, while `names`, `description` and `unit` are each\ntheir own fuzzy filter. Archived SKUs are part of the catalog and are not excluded\nautomatically.","operationId":"get_skus_by_filters_v1_v1_skus_filters_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSkusByFiltersRequestV1"}}},"required":true},"responses":{"200":{"description":"A page of SKUs, with the total count and page count","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSkusByFiltersResponseV1"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/skus/{sku_id}":{"get":{"tags":["SKUs"],"summary":"Retrieve a SKU","description":"Return one SKU by its UUID.","operationId":"get_sku_by_id_v1_v1_skus__sku_id__get","parameters":[{"name":"sku_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Sku Id"},"description":"The SKU ID."}],"responses":{"200":{"description":"The SKU","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSkuByIdResponseV1"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["SKUs"],"summary":"Update a SKU","description":"Partially update a SKU: send only the fields that change.\n\nChanging `unit` does not convert historical counts — production logs keep the numbers they\nwere written with. Archiving the SKU and creating a new one keeps its history consistent.","operationId":"update_sku_by_id_v1_v1_skus__sku_id__patch","parameters":[{"name":"sku_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Sku Id"},"description":"The SKU ID."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSkuByIdRequestV1"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["SKUs"],"summary":"Delete a SKU","description":"Delete a SKU from the catalog.\n\nProduction logs and nominal speeds that still reference it are left pointing at a record\nthat no longer resolves. Setting `archived` to `true` hides a product from pickers while\nkeeping its history intact.","operationId":"delete_sku_by_id_v1_v1_skus__sku_id__delete","parameters":[{"name":"sku_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Sku Id"},"description":"The SKU ID."}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AddOperatorToCurrentShiftRequestV1":{"properties":{"operatorId":{"type":"integer","title":"Operatorid","description":"The id of the operator to add to the machine's current shift.","examples":[1]},"start":{"type":"string","format":"date-time","title":"Start","description":"The start time of the operator assignment within the current shift.","examples":["2024-01-01T08:00:00"]}},"type":"object","required":["operatorId","start"],"title":"AddOperatorToCurrentShiftRequestV1"},"AddSkuToCurrentShiftRequestV1":{"properties":{"simpleWorkOrderId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Simpleworkorderid","description":"The id of the simple work order to add the SKU to.","examples":["123"]},"simpleWorkOrderName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Simpleworkordername","description":"The name of the simple work order to add the SKU to.","examples":["WO-001"]},"skuId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Skuid","description":"The id of the SKU to add to the machine's current shift.","examples":["456"]},"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sku","description":"The name of the SKU to add to the machine's current shift.","examples":["sku 1"]},"quantity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Quantity","description":"The quantity produced for the SKU.","examples":[1000]},"start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start","description":"The start time of the SKU production within the current shift.","examples":["2024-01-01T08:00:00"]},"end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End","description":"The end time of the SKU production within the current shift.","examples":["2024-01-01T16:00:00"]},"custom":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom","description":"Custom field values keyed by field id.","examples":[{"fieldId":"value"}]}},"type":"object","title":"AddSkuToCurrentShiftRequestV1"},"AggregationFunction":{"type":"string","enum":["avg","max","min","sum","count"],"title":"AggregationFunction"},"AggregationUnit":{"type":"string","enum":["s","m","h","d"],"title":"AggregationUnit"},"CauseDetailDtoV1":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id","description":"The unique identifier.","examples":["51d34e1b-a294-4246-8c86-4f9acfe94367"]},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"The name of the cause/component.","examples":["a simple cause"]}},"type":"object","title":"CauseDetailDtoV1"},"ClassificationDetailsDtoV1":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id","description":"The unique identifier of the classification.","examples":["9ce2c6b4-a1f4-4bf2-b5c8-10436d1018cc"]},"createdAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdat","description":"Timestamp of classification creation.","examples":["2025-11-01T00:00:00"]},"updatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updatedat","description":"Timestamp of last classification update.","examples":["2025-11-01T00:00:00"]},"component":{"$ref":"#/components/schemas/CauseDetailDtoV1","description":"The component associated with the stop.","examples":[{"id":"22c4b5cb-0b2e-4f35-a293-79a01fd95897","name":"a simple component"}]},"specificCause":{"$ref":"#/components/schemas/CauseDetailDtoV1","description":"The specific cause of the stop.","examples":[{"id":"30f84dc4-1ba7-4fa1-855d-ffbd13ccc544","name":"a specific cause"}]},"generalCause":{"$ref":"#/components/schemas/CauseDetailDtoV1","description":"The general cause of the stop.","examples":[{"id":"5780e4e5-f4f2-467c-aee6-1ce031f10303","name":"a general cause"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"A description of the classification.","examples":["a simple description"]}},"type":"object","required":["id","createdAt","updatedAt","component","specificCause","generalCause"],"title":"ClassificationDetailsDtoV1"},"CompanyDetailsDtoV1":{"properties":{"id":{"type":"integer","title":"Id","description":"The ID of the company"},"name":{"type":"string","title":"Name","description":"The name of the company"},"timezone":{"type":"string","title":"Timezone","description":"The company's timezone string (e.g., \"America/New_York\")"}},"type":"object","required":["id","name","timezone"],"title":"CompanyDetailsDtoV1"},"CompanyDtoV1":{"properties":{"id":{"type":"integer","title":"Id","description":"The unique identifier for the company.","examples":[1]},"name":{"type":"string","title":"Name","description":"The name of the company.","examples":["company 1"]}},"type":"object","required":["id","name"],"title":"CompanyDtoV1"},"ComparisonFiltersV1":{"properties":{"greaterThan":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Greaterthan","description":"Greater than value","examples":[1]},"greaterThanOrEqual":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Greaterthanorequal","description":"Greater than or equal to value","examples":[1]},"lessThan":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lessthan","description":"Less than value","examples":[1]},"lessThanOrEqual":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lessthanorequal","description":"Less than or equal to value","examples":[1]},"equal":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Equal","description":"Equal value","examples":[1]},"notEqual":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Notequal","description":"Not equal value","examples":[1]}},"type":"object","title":"ComparisonFiltersV1"},"ComparisonFiltersWithIncludeAndExcludeV1_int_":{"properties":{"include":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Include","description":"Items to include by id"},"exclude":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Exclude","description":"Items to exclude by id"},"greaterThan":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Greaterthan","description":"Greater than value","examples":[1]},"greaterThanOrEqual":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Greaterthanorequal","description":"Greater than or equal to value","examples":[1]},"lessThan":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lessthan","description":"Less than value","examples":[1]},"lessThanOrEqual":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lessthanorequal","description":"Less than or equal to value","examples":[1]},"equal":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Equal","description":"Equal value","examples":[1]},"notEqual":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Notequal","description":"Not equal value","examples":[1]}},"type":"object","title":"ComparisonFiltersWithIncludeAndExcludeV1[int]"},"CreateNominalSpeedDtoV1":{"properties":{"nominalSpeed":{"type":"number","exclusiveMinimum":0,"title":"Nominalspeed","description":"The nominal speed of the machine","examples":[60]},"countingFactor":{"type":"number","exclusiveMinimum":0,"title":"Countingfactor","description":"The counting factor of the machine","default":1,"examples":[60]},"machine":{"$ref":"#/components/schemas/MachineIdOrNameDtoV1"},"sku":{"$ref":"#/components/schemas/SkuIdOrNameDtoV1"}},"type":"object","required":["nominalSpeed","machine","sku"],"title":"CreateNominalSpeedDtoV1"},"CreateOperatorDtoV1":{"properties":{"firstName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname","description":"The first name of the operator."},"lastName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname","description":"The last name of the operator."}},"type":"object","title":"CreateOperatorDtoV1"},"CreateProductionLogDtoV1":{"properties":{"type":{"$ref":"#/components/schemas/ProductionAdvancementsType","description":"The type of the production log (correct, defects, etc.)","default":"total","examples":["correct"]},"count":{"type":"integer","title":"Count","description":"The total count of items produced during this production log","examples":[1000]},"nominalSpeed":{"type":"number","title":"Nominalspeed","description":"The nominal speed of the machine during this production log (using float for speed)","examples":[60]},"start":{"type":"string","format":"date-time","title":"Start","description":"The start time of the production log","examples":["2024-01-01T08:00:00"]},"end":{"type":"string","format":"date-time","title":"End","description":"The end time of the production log","examples":["2024-01-01T16:00:00"]},"machine":{"$ref":"#/components/schemas/MachineIdOrNameDtoV1","description":"The machine associated with the production log"},"sku":{"$ref":"#/components/schemas/SkuIdOrNameDtoV1","description":"The SKU associated with the production log"},"operator":{"anyOf":[{"$ref":"#/components/schemas/src__production_logs__schemas__OperatorDtoV1"},{"type":"null"}],"description":"The operator involved in this production log"},"workOrder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workorder","description":"The name of the work order associated with this production log","examples":["work order 1"]}},"type":"object","required":["count","nominalSpeed","start","end","machine","sku"],"title":"CreateProductionLogDtoV1"},"CreateSkuDtoV1":{"properties":{"sku":{"type":"string","title":"Sku","description":"The code of the sku."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"The name of the sku."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"The description of the sku."},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit","description":"The unit of the sku.","default":"units"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived","description":"The archived status of the sku.","default":false}},"type":"object","required":["sku"],"title":"CreateSkuDtoV1"},"DateFiltersV1":{"properties":{"after":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"After","description":"Filter by after date"},"before":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Before","description":"Filter by before date"},"between":{"anyOf":[{"$ref":"#/components/schemas/DateRangeV1"},{"type":"null"}],"description":"Filter by date range"},"equal":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Equal","description":"Filter by equal date"}},"type":"object","title":"DateFiltersV1"},"DateRangeV1":{"properties":{"start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start","description":"Start date of the range","examples":["2024-01-01T00:00:00.000Z"]},"end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End","description":"End date of the range","examples":["2024-01-31T23:59:59.000Z"]}},"type":"object","title":"DateRangeV1"},"FuzzySearchFilterV1":{"properties":{"search":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search","description":"Search term"}},"type":"object","title":"FuzzySearchFilterV1"},"GetMachineSignalsResponseV1":{"properties":{"machine_uuid":{"type":"string","format":"uuid","title":"Machine Uuid","description":"The machine's `uuid`, as returned by `GET /v1/machines`.","examples":["01748f7c-9688-7abc-8def-0123456789ab"]},"signals":{"items":{"$ref":"#/components/schemas/MachineSignalDtoV1"},"type":"array","title":"Signals"}},"type":"object","required":["machine_uuid","signals"],"title":"GetMachineSignalsResponseV1"},"GetMetricsReportRequestV1":{"properties":{"page":{"type":"integer","exclusiveMinimum":0,"title":"Page","description":"The page number for pagination","default":1,"examples":[1]},"limit":{"type":"integer","exclusiveMinimum":0,"title":"Limit","description":"The number of items per page for pagination","default":10,"examples":[10]},"machines":{"anyOf":[{"$ref":"#/components/schemas/MachineFiltersV1"},{"type":"null"}],"description":"Filter criteria for machines","examples":[{"exclude":[1],"include":[1],"search":"machine 1"}]},"startDate":{"anyOf":[{"$ref":"#/components/schemas/DateFiltersV1"},{"type":"null"}],"description":"Filter criteria for start date"},"endDate":{"anyOf":[{"$ref":"#/components/schemas/DateFiltersV1"},{"type":"null"}],"description":"Filter criteria for end date"}},"type":"object","title":"GetMetricsReportRequestV1"},"GetMetricsReportResponseV1":{"properties":{"totalCount":{"type":"integer","title":"Totalcount","description":"The total count of items","default":100},"totalPages":{"type":"integer","title":"Totalpages","description":"The total number of pages","default":10},"currentPage":{"type":"integer","title":"Currentpage","description":"The current page","default":1},"metrics":{"items":{"$ref":"#/components/schemas/MetricDtoV1"},"type":"array","title":"Metrics"}},"type":"object","required":["metrics"],"title":"GetMetricsReportResponseV1"},"GetNominalSpeedByIdResponseV1":{"properties":{"id":{"type":"string","title":"Id","description":"The unique identifier for the nominal speed.","examples":["36f7b519-d93e-4ec8-8245-7f4b8c123456"]},"machine":{"$ref":"#/components/schemas/src__shared__schemas__MachineDtoV1","description":"The machine associated with the nominal speed.","examples":[{"id":1,"name":"machine 1"}]},"sku":{"$ref":"#/components/schemas/SkuReferenceDtoV1","description":"The sku associated with the nominal speed.","examples":[{"description":"a simple description","id":"66844a2a-9028-4d0f-ae84-0c431f3e174e","name":"sku 1","unit":"units"}]},"nominalSpeed":{"type":"number","title":"Nominalspeed","description":"The nominal speed of the machine.","examples":[100]},"countingFactor":{"type":"number","title":"Countingfactor","description":"The counting factor of the sensor associated with the machine and sku.","examples":[1]},"createdAt":{"type":"string","format":"date-time","title":"Createdat","description":"The timestamp when the nominal speed was created.","examples":["2024-01-01T00:00:00.000Z"]},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat","description":"The timestamp when the nominal speed was last updated.","examples":["2024-01-01T00:00:00.000Z"]},"deletedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deletedat","description":"The timestamp when the nominal speed was deleted, if applicable.","examples":["2024-01-02T00:00:00.000Z"]}},"type":"object","required":["id","machine","sku","nominalSpeed","countingFactor","createdAt","updatedAt"],"title":"GetNominalSpeedByIdResponseV1"},"GetNominalSpeedsByFiltersRequestV1":{"properties":{"page":{"type":"integer","exclusiveMinimum":0,"title":"Page","description":"The page number for pagination","default":1,"examples":[1]},"limit":{"type":"integer","exclusiveMinimum":0,"title":"Limit","description":"The number of items per page for pagination","default":10,"examples":[10]},"machines":{"anyOf":[{"$ref":"#/components/schemas/MachineFiltersV1"},{"type":"null"}],"description":"Filter criteria for machines","examples":[{"exclude":[1],"include":[1],"search":"machine 1"}]},"skus":{"anyOf":[{"$ref":"#/components/schemas/SkuFiltersV1"},{"type":"null"}],"description":"Filter criteria for skus","examples":[{"exclude":["1145d032-975c-4cdb-a378-910aeb3f5865"],"include":["ffce6941-7dcf-4026-a396-0c4927f5bb49"],"search":"sku 1"}]},"nominalSpeed":{"anyOf":[{"$ref":"#/components/schemas/ComparisonFiltersV1"},{"type":"null"}],"description":"Filter criteria for nominal speeds","examples":[{"equal":1,"greaterThan":1,"greaterThanOrEqual":1,"lessThan":1,"lessThanOrEqual":1,"notEqual":1}]}},"type":"object","title":"GetNominalSpeedsByFiltersRequestV1"},"GetNominalSpeedsByFiltersResponseV1":{"properties":{"totalCount":{"type":"integer","title":"Totalcount","description":"The total count of items","default":100},"totalPages":{"type":"integer","title":"Totalpages","description":"The total number of pages","default":10},"currentPage":{"type":"integer","title":"Currentpage","description":"The current page","default":1},"nominalSpeeds":{"items":{"$ref":"#/components/schemas/NominalSpeedDtoV1"},"type":"array","title":"Nominalspeeds"}},"type":"object","required":["nominalSpeeds"],"title":"GetNominalSpeedsByFiltersResponseV1"},"GetOperatorByIdResponseV1":{"properties":{"id":{"type":"integer","title":"Id","description":"The unique identifier for the operator.","examples":[1]},"company":{"$ref":"#/components/schemas/CompanyDtoV1","description":"The company associated with the operator."},"firstName":{"type":"string","title":"Firstname","description":"The first name of the operator.","examples":["Pérez"]},"lastName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname","description":"The last name of the operator.","examples":["Sánchez"]}},"type":"object","required":["id","company","firstName","lastName"],"title":"GetOperatorByIdResponseV1"},"GetOperatorsByFiltersRequestV1":{"properties":{"page":{"type":"integer","exclusiveMinimum":0,"title":"Page","description":"The page number for pagination","default":1,"examples":[1]},"limit":{"type":"integer","exclusiveMinimum":0,"title":"Limit","description":"The number of items per page for pagination","default":10,"examples":[10]},"firstName":{"anyOf":[{"$ref":"#/components/schemas/FuzzySearchFilterV1"},{"type":"null"}],"description":"Filter criteria for fist name","examples":[{"search":"Pérez"}]},"lastName":{"anyOf":[{"$ref":"#/components/schemas/FuzzySearchFilterV1"},{"type":"null"}],"description":"Filter criteria for last name","examples":[{"search":"Sánchez"}]}},"type":"object","title":"GetOperatorsByFiltersRequestV1"},"GetOperatorsByFiltersResponseV1":{"properties":{"totalCount":{"type":"integer","title":"Totalcount","description":"The total count of items","default":100},"totalPages":{"type":"integer","title":"Totalpages","description":"The total number of pages","default":10},"currentPage":{"type":"integer","title":"Currentpage","description":"The current page","default":1},"operators":{"items":{"$ref":"#/components/schemas/src__operators__schemas__OperatorDtoV1"},"type":"array","title":"Operators"}},"type":"object","required":["operators"],"title":"GetOperatorsByFiltersResponseV1"},"GetProductionLogByIdResponseV1":{"properties":{"id":{"type":"string","title":"Id","description":"The unique identifier for the production log","examples":["36f7b519-d93e-4ec8-8245-7f4b8c123456"]},"type":{"$ref":"#/components/schemas/ProductionAdvancementsType","description":"The type of production log","examples":["correct"]},"sensorCount":{"type":"number","title":"Sensorcount","description":"The sensor count recorded for this log","examples":[500]},"count":{"type":"number","title":"Count","description":"The total count of items produced during this log","examples":[1000]},"nominalSpeed":{"type":"number","title":"Nominalspeed","description":"The nominal speed of the machine during this log","examples":[60]},"countingFactor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Countingfactor","description":"The counting factor of the machine during this log","examples":[1]},"start":{"type":"string","format":"date-time","title":"Start","description":"The start time of the production log","examples":["2024-01-01T00:00:00"]},"end":{"type":"string","format":"date-time","title":"End","description":"The end time of the production log","examples":["2024-01-01T08:00:00"]},"isReviewed":{"type":"boolean","title":"Isreviewed","description":"Indicates if the production log has been reviewed","examples":[true]},"isAutomated":{"type":"boolean","title":"Isautomated","description":"Indicates if the production log was automated","examples":[true]},"machineId":{"type":"integer","title":"Machineid","description":"The ID of the machine involved in the production log","examples":[12]},"createdAt":{"type":"string","format":"date-time","title":"Createdat","description":"The timestamp when the production log was created"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat","description":"The timestamp when the production log was last updated"},"deletedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deletedat","description":"The timestamp when the production log was deleted, if applicable"},"live":{"type":"boolean","title":"Live","description":"Indicates if the production log is live","examples":[true]},"machine":{"$ref":"#/components/schemas/MachineDetailsDtoV1","description":"The machine involved in the production log"},"company":{"$ref":"#/components/schemas/CompanyDetailsDtoV1","description":"The company involved in the production log"},"shift":{"$ref":"#/components/schemas/ShiftDetailsDtoV1","description":"The shift during which the production log was recorded"},"operator":{"$ref":"#/components/schemas/OperatorDetailsDtoV1","description":"The user who reviewed the production log"},"sku":{"$ref":"#/components/schemas/SkuDetailsDtoV1","description":"The SKU produced during the production log"},"workOrder":{"anyOf":[{"$ref":"#/components/schemas/WorkOrderDetailsDtoV1"},{"additionalProperties":true,"type":"object"}],"title":"Workorder","description":"The work order associated with the production log"},"simpleWorkOrder":{"anyOf":[{"$ref":"#/components/schemas/SimpleWorkOrderDetailsDtoV1"},{"additionalProperties":true,"type":"object"}],"title":"Simpleworkorder","description":"The simple work order associated with the production log"}},"type":"object","required":["id","type","sensorCount","count","nominalSpeed","start","end","isReviewed","isAutomated","machineId","createdAt","updatedAt","live","machine","company","shift","sku","workOrder","simpleWorkOrder"],"title":"GetProductionLogByIdResponseV1"},"GetProductionLogsByFiltersRequestV1":{"properties":{"page":{"type":"integer","exclusiveMinimum":0,"title":"Page","description":"The page number for pagination","default":1,"examples":[1]},"limit":{"type":"integer","exclusiveMinimum":0,"title":"Limit","description":"The number of items per page for pagination","default":10,"examples":[10]},"machines":{"anyOf":[{"$ref":"#/components/schemas/MachineFiltersV1"},{"type":"null"}],"description":"Filter criteria for machines","examples":[{"exclude":[1],"include":[1],"search":"machine 1"}]},"skus":{"anyOf":[{"$ref":"#/components/schemas/SkuFiltersV1"},{"type":"null"}],"description":"Filter criteria for SKUs","examples":[{"exclude":["1145d032-975c-4cdb-a378-910aeb3f5865"],"include":["ffce6941-7dcf-4026-a396-0c4927f5bb49"],"search":"sku 1"}]},"nominalSpeed":{"anyOf":[{"$ref":"#/components/schemas/ComparisonFiltersV1"},{"type":"null"}],"description":"Filter criteria for nominal speed"},"quantity":{"anyOf":[{"$ref":"#/components/schemas/ComparisonFiltersV1"},{"type":"null"}],"description":"Filter criteria for quantity"},"type":{"anyOf":[{"$ref":"#/components/schemas/IncludeAndExcludeFiltersV1_ProductionAdvancementsType_"},{"type":"null"}],"description":"Filter criteria for type of production log"},"reviewed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reviewed","description":"Filter criteria for reviewed status"},"startDate":{"anyOf":[{"$ref":"#/components/schemas/DateFiltersV1"},{"type":"null"}],"description":"Filter criteria for start date"},"endDate":{"anyOf":[{"$ref":"#/components/schemas/DateFiltersV1"},{"type":"null"}],"description":"Filter criteria for end date"}},"type":"object","title":"GetProductionLogsByFiltersRequestV1"},"GetProductionLogsByFiltersResponseV1":{"properties":{"totalCount":{"type":"integer","title":"Totalcount","description":"The total count of items","default":100},"totalPages":{"type":"integer","title":"Totalpages","description":"The total number of pages","default":10},"currentPage":{"type":"integer","title":"Currentpage","description":"The current page","default":1},"productionLogs":{"items":{"$ref":"#/components/schemas/ProductionLogDtoV1"},"type":"array","title":"Productionlogs","description":"List of production logs"}},"type":"object","required":["productionLogs"],"title":"GetProductionLogsByFiltersResponseV1"},"GetSignalDataResponseV1":{"properties":{"machine_uuid":{"type":"string","format":"uuid","title":"Machine Uuid","description":"The machine's `uuid`, as returned by `GET /v1/machines`.","examples":["01748f7c-9688-7abc-8def-0123456789ab"]},"public_id":{"type":"string","format":"uuid","title":"Public Id"},"name":{"type":"string","title":"Name"},"agg_unit":{"$ref":"#/components/schemas/AggregationUnit"},"agg_period":{"type":"integer","title":"Agg Period"},"agg_function":{"$ref":"#/components/schemas/AggregationFunction"},"data":{"items":{"$ref":"#/components/schemas/SignalDataPointDtoV1"},"type":"array","title":"Data"}},"type":"object","required":["machine_uuid","public_id","name","agg_unit","agg_period","agg_function","data"],"title":"GetSignalDataResponseV1"},"GetSkuByIdResponseV1":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id","description":"The unique identifier for the sku.","examples":["36f7b519-d93e-4ec8-8245-7f4b8c123456"]},"company":{"$ref":"#/components/schemas/CompanyDtoV1","description":"The company associated with the sku.","examples":[{"id":1,"name":"Company 1"}]},"sku":{"type":"string","title":"Sku","description":"The sku code of the sku.","examples":["sku 1"]},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"The name of the sku.","examples":["sku 1"]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"The description of the sku.","examples":["sku 1"]},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit","description":"The unit of the sku.","examples":["pcs"]},"archived":{"type":"boolean","title":"Archived","description":"The archived status of the sku.","examples":[false]},"createdAt":{"type":"string","format":"date-time","title":"Createdat","description":"The timestamp when the sku was created.","examples":["2024-01-01T00:00:00.000Z"]},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat","description":"The timestamp when the sku was last updated.","examples":["2024-01-01T00:00:00.000Z"]},"deletedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deletedat","description":"The timestamp when the sku was deleted, if applicable.","examples":["2024-01-02T00:00:00.000Z"]}},"type":"object","required":["id","company","sku","name","description","unit","archived","createdAt","updatedAt"],"title":"GetSkuByIdResponseV1"},"GetSkusByFiltersRequestV1":{"properties":{"page":{"type":"integer","exclusiveMinimum":0,"title":"Page","description":"The page number for pagination","default":1,"examples":[1]},"limit":{"type":"integer","exclusiveMinimum":0,"title":"Limit","description":"The number of items per page for pagination","default":10,"examples":[10]},"skus":{"anyOf":[{"$ref":"#/components/schemas/SkuFiltersV1"},{"type":"null"}],"description":"Filter criteria for SKUs","examples":[{"exclude":["9ce2c6b4-a1f4-4bf2-b5c8-10436d1018cc"],"include":["9d02ab43-0100-4af6-a73c-e05abbd72648"],"search":"sku 1"}]},"names":{"anyOf":[{"$ref":"#/components/schemas/FuzzySearchFilterV1"},{"type":"null"}],"description":"Filter criteria for names","examples":[{"search":"sku 1"}]},"description":{"anyOf":[{"$ref":"#/components/schemas/FuzzySearchFilterV1"},{"type":"null"}],"description":"Filter criteria for description","examples":[{"search":"a simple description"}]},"unit":{"anyOf":[{"$ref":"#/components/schemas/FuzzySearchFilterV1"},{"type":"null"}],"description":"Filter criteria for unit","examples":[{"search":"kgs"}]}},"type":"object","title":"GetSkusByFiltersRequestV1"},"GetSkusByFiltersResponseV1":{"properties":{"totalCount":{"type":"integer","title":"Totalcount","description":"The total count of items","default":100},"totalPages":{"type":"integer","title":"Totalpages","description":"The total number of pages","default":10},"currentPage":{"type":"integer","title":"Currentpage","description":"The current page","default":1},"skus":{"items":{"$ref":"#/components/schemas/SkuDtoV1"},"type":"array","title":"Skus"}},"type":"object","required":["skus"],"title":"GetSkusByFiltersResponseV1"},"GetStopsReportRequestV1":{"properties":{"page":{"type":"integer","exclusiveMinimum":0,"title":"Page","description":"The page number for pagination","default":1,"examples":[1]},"limit":{"type":"integer","exclusiveMinimum":0,"title":"Limit","description":"The number of items per page for pagination","default":10,"examples":[10]},"machines":{"anyOf":[{"$ref":"#/components/schemas/MachineFiltersV1"},{"type":"null"}],"description":"Filter criteria for machines","examples":[{"exclude":[1],"include":[1],"search":"machine 1"}]},"stopId":{"anyOf":[{"$ref":"#/components/schemas/ComparisonFiltersWithIncludeAndExcludeV1_int_"},{"type":"null"}],"description":"Filter criteria for machines","examples":[{"equal":1,"exclude":[1],"greaterThan":1,"greaterThanOrEqual":1,"include":[1],"lessThan":1,"lessThanOrEqual":1,"notEqual":1}]},"startDate":{"anyOf":[{"$ref":"#/components/schemas/DateFiltersV1"},{"type":"null"}],"description":"Filter criteria for start date"},"endDate":{"anyOf":[{"$ref":"#/components/schemas/DateFiltersV1"},{"type":"null"}],"description":"Filter criteria for end date"}},"type":"object","title":"GetStopsReportRequestV1"},"GetStopsReportResponseV1":{"properties":{"totalCount":{"type":"integer","title":"Totalcount","description":"The total count of items","default":100},"totalPages":{"type":"integer","title":"Totalpages","description":"The total number of pages","default":10},"currentPage":{"type":"integer","title":"Currentpage","description":"The current page","default":1},"stops":{"items":{"$ref":"#/components/schemas/StopDtoV1"},"type":"array","title":"Stops"}},"type":"object","required":["stops"],"title":"GetStopsReportResponseV1"},"GetTransposedSignalDataResponseV1":{"properties":{"machine_uuid":{"type":"string","format":"uuid","title":"Machine Uuid","description":"The machine's `uuid`, as returned by `GET /v1/machines`.","examples":["01748f7c-9688-7abc-8def-0123456789ab"]},"public_id":{"type":"string","format":"uuid","title":"Public Id"},"name":{"type":"string","title":"Name"},"agg_unit":{"$ref":"#/components/schemas/AggregationUnit"},"agg_period":{"type":"integer","title":"Agg Period"},"agg_function":{"$ref":"#/components/schemas/AggregationFunction"},"timestamps":{"items":{"type":"string","format":"date-time"},"type":"array","title":"Timestamps","description":"Bucket start times, in ascending order."},"values":{"items":{"type":"number"},"type":"array","title":"Values","description":"Aggregated value of each bucket; `values[i]` belongs to `timestamps[i]`."}},"type":"object","required":["machine_uuid","public_id","name","agg_unit","agg_period","agg_function","timestamps","values"],"title":"GetTransposedSignalDataResponseV1"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IncludeAndExcludeFiltersV1_ProductionAdvancementsType_":{"properties":{"include":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProductionAdvancementsType"},"type":"array"},{"type":"null"}],"title":"Include","description":"Items to include by id"},"exclude":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProductionAdvancementsType"},"type":"array"},{"type":"null"}],"title":"Exclude","description":"Items to exclude by id"}},"type":"object","title":"IncludeAndExcludeFiltersV1[ProductionAdvancementsType]"},"Language":{"type":"string","enum":["en","es"],"title":"Language"},"MachineDetailsDtoV1":{"properties":{"id":{"type":"integer","title":"Id","description":"The ID of the machine"},"name":{"type":"string","title":"Name","description":"The name of the machine"},"isCountEnabled":{"type":"boolean","title":"Iscountenabled","description":"Indicates if counting is enabled"},"externalName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalname","description":"The external name of the machine"}},"type":"object","required":["id","name","isCountEnabled"],"title":"MachineDetailsDtoV1"},"MachineFiltersV1":{"properties":{"search":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search","description":"Search term for Machines"},"include":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Include","description":"Items to include by id"},"exclude":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Exclude","description":"Items to exclude by id"}},"type":"object","title":"MachineFiltersV1"},"MachineIdOrNameDtoV1":{"properties":{"id":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}],"title":"Id","description":"The id of the machine","examples":[1]},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"The name of the machine","examples":["Machine 1"]}},"type":"object","title":"MachineIdOrNameDtoV1"},"MachineSignalDtoV1":{"properties":{"public_id":{"type":"string","format":"uuid","title":"Public Id","description":"Identifier accepted by the signal data endpoint."},"name":{"type":"string","title":"Name","description":"Kind of physical quantity, for example `current`, `count` or `temperature`."},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name","description":"Label that tells apart two signals of the same kind on one machine."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"What the signal measures, in the requested `language` (English if unavailable)."}},"type":"object","required":["public_id","name"],"title":"MachineSignalDtoV1"},"MetricDtoV1":{"properties":{"company":{"$ref":"#/components/schemas/CompanyDtoV1","description":"The company associated with the metric report.","examples":[{"id":1,"name":"company 1"}]},"machine":{"$ref":"#/components/schemas/src__shared__schemas__MachineDtoV1","description":"The machine of the metric report.","examples":[{"id":1,"name":"machine 1"}]},"shift":{"$ref":"#/components/schemas/ShiftDtoV1","description":"The shift of the metric report.","examples":[{"endTime":"2025-11-02T00:00:00","id":1,"isActive":true,"name":"morning","startTime":"2025-11-01T00:00:00"}]},"shiftIndicators":{"$ref":"#/components/schemas/ShiftIndicatorsDtoV1","description":"Information about the shift indicator.","examples":[{"annotatedDowntime":0,"availability":100,"availableTime":480,"earlyStopTime":0,"indicatorId":1,"lateStartTime":0,"netAvailability":100,"noDataTime":0,"nonProgrammedDowntime":0,"otherStopsTime":0,"programmedDowntime":0,"unavailableTime":0}]},"productionMetrics":{"$ref":"#/components/schemas/ProductionMetricsDtoV1","description":"Information about the production metrics.","examples":[{"availability":100,"effectiveness":100,"minutesLostByLowQuality":0,"minutesLostByLowSpeed":0,"netAvailability":100,"netOee":100,"oee":100,"quality":100}]}},"type":"object","required":["company","machine","shift","shiftIndicators","productionMetrics"],"title":"MetricDtoV1"},"NominalSpeedDtoV1":{"properties":{"id":{"type":"string","title":"Id","description":"The unique identifier for the nominal speed.","examples":["36f7b519-d93e-4ec8-8245-7f4b8c123456"]},"machine":{"$ref":"#/components/schemas/src__shared__schemas__MachineDtoV1","description":"The machine associated with the nominal speed.","examples":[{"id":1,"name":"machine 1"}]},"sku":{"$ref":"#/components/schemas/SkuReferenceDtoV1","description":"The sku associated with the nominal speed.","examples":[{"description":"a simple description","id":"66844a2a-9028-4d0f-ae84-0c431f3e174e","name":"sku 1","unit":"units"}]},"nominalSpeed":{"type":"number","title":"Nominalspeed","description":"The nominal speed of the machine.","examples":[100]},"countingFactor":{"type":"number","title":"Countingfactor","description":"The counting factor of the sensor associated with the machine and sku.","examples":[1]},"createdAt":{"type":"string","format":"date-time","title":"Createdat","description":"The timestamp when the nominal speed was created.","examples":["2024-01-01T00:00:00.000Z"]},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat","description":"The timestamp when the nominal speed was last updated.","examples":["2024-01-01T00:00:00.000Z"]},"deletedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deletedat","description":"The timestamp when the nominal speed was deleted, if applicable.","examples":["2024-01-02T00:00:00.000Z"]}},"type":"object","required":["id","machine","sku","nominalSpeed","countingFactor","createdAt","updatedAt"],"title":"NominalSpeedDtoV1"},"OperatorDetailsDtoV1":{"properties":{"id":{"type":"integer","title":"Id","description":"The ID of the user/operator"},"firstName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname","description":"The operator's first name"},"lastName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname","description":"The operator's last name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"The operator's email"}},"type":"object","required":["id"],"title":"OperatorDetailsDtoV1"},"ProductionAdvancementsType":{"type":"string","enum":["correct","defects","total"],"title":"ProductionAdvancementsType"},"ProductionLogDtoV1":{"properties":{"id":{"type":"string","title":"Id","description":"The unique identifier for the production log","examples":["36f7b519-d93e-4ec8-8245-7f4b8c123456"]},"type":{"$ref":"#/components/schemas/ProductionAdvancementsType","description":"The type of production log","examples":["correct"]},"sensorCount":{"type":"number","title":"Sensorcount","description":"The sensor count recorded for this log","examples":[500]},"count":{"type":"number","title":"Count","description":"The total count of items produced during this log","examples":[1000]},"nominalSpeed":{"type":"number","title":"Nominalspeed","description":"The nominal speed of the machine during this log","examples":[60]},"countingFactor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Countingfactor","description":"The counting factor of the machine during this log","examples":[1]},"start":{"type":"string","format":"date-time","title":"Start","description":"The start time of the production log","examples":["2024-01-01T00:00:00"]},"end":{"type":"string","format":"date-time","title":"End","description":"The end time of the production log","examples":["2024-01-01T08:00:00"]},"isReviewed":{"type":"boolean","title":"Isreviewed","description":"Indicates if the production log has been reviewed","examples":[true]},"isAutomated":{"type":"boolean","title":"Isautomated","description":"Indicates if the production log was automated","examples":[true]},"machineId":{"type":"integer","title":"Machineid","description":"The ID of the machine involved in the production log","examples":[12]},"createdAt":{"type":"string","format":"date-time","title":"Createdat","description":"The timestamp when the production log was created"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat","description":"The timestamp when the production log was last updated"},"deletedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deletedat","description":"The timestamp when the production log was deleted, if applicable"},"live":{"type":"boolean","title":"Live","description":"Indicates if the production log is live","examples":[true]},"machine":{"$ref":"#/components/schemas/MachineDetailsDtoV1","description":"The machine involved in the production log"},"company":{"$ref":"#/components/schemas/CompanyDetailsDtoV1","description":"The company involved in the production log"},"shift":{"$ref":"#/components/schemas/ShiftDetailsDtoV1","description":"The shift during which the production log was recorded"},"operator":{"$ref":"#/components/schemas/OperatorDetailsDtoV1","description":"The user who reviewed the production log"},"sku":{"$ref":"#/components/schemas/SkuDetailsDtoV1","description":"The SKU produced during the production log"},"workOrder":{"anyOf":[{"$ref":"#/components/schemas/WorkOrderDetailsDtoV1"},{"additionalProperties":true,"type":"object"}],"title":"Workorder","description":"The work order associated with the production log"},"simpleWorkOrder":{"anyOf":[{"$ref":"#/components/schemas/SimpleWorkOrderDetailsDtoV1"},{"additionalProperties":true,"type":"object"}],"title":"Simpleworkorder","description":"The simple work order associated with the production log"}},"type":"object","required":["id","type","sensorCount","count","nominalSpeed","start","end","isReviewed","isAutomated","machineId","createdAt","updatedAt","live","machine","company","shift","sku","workOrder","simpleWorkOrder"],"title":"ProductionLogDtoV1"},"ProductionMetricsDtoV1":{"properties":{"availability":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Availability","description":"Availability percentage.","examples":[100]},"netAvailability":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Netavailability","description":"Net availability percentage.","examples":[100]},"oee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Oee","description":"Overall Equipment Effectiveness (OEE).","examples":[100]},"netOee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Netoee","description":"Net OEE.","examples":[100]},"quality":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Quality","description":"Quality percentage.","examples":[100]},"effectiveness":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Effectiveness","description":"Effectiveness percentage.","examples":[100]},"minutesLostByLowQuality":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Minuteslostbylowquality","description":"Minutes lost due to low quality.","examples":[0]},"minutesLostByLowSpeed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Minuteslostbylowspeed","description":"Minutes lost due to low speed.","examples":[0]}},"type":"object","title":"ProductionMetricsDtoV1"},"ShiftDetailsDtoV1":{"properties":{"id":{"type":"integer","title":"Id","description":"The ID of the shift"},"name":{"type":"string","title":"Name","description":"The name of the shift"},"start":{"type":"string","format":"date-time","title":"Start","description":"The start time of the shift"},"end":{"type":"string","format":"date-time","title":"End","description":"The end time of the shift"},"isConsidered":{"type":"boolean","title":"Isconsidered","description":"Indicates if the shift is considered for metrics"}},"type":"object","required":["id","name","start","end","isConsidered"],"title":"ShiftDetailsDtoV1"},"ShiftDtoV1":{"properties":{"id":{"type":"integer","title":"Id","description":"The unique identifier of the shift.","examples":[1]},"name":{"type":"string","title":"Name","description":"The name of the shift.","examples":["shift 1"]},"startTime":{"type":"string","format":"date-time","title":"Starttime","description":"The start time of the shift.","examples":["2024-01-01T08:00:00.000Z"]},"endTime":{"type":"string","format":"date-time","title":"Endtime","description":"The end time of the shift.","examples":["2024-01-01T16:00:00.000Z"]},"isActive":{"type":"boolean","title":"Isactive","description":"Whether the shift is currently active.","examples":[true]}},"type":"object","required":["id","name","startTime","endTime","isActive"],"title":"ShiftDtoV1"},"ShiftIndicatorsDtoV1":{"properties":{"indicatorId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Indicatorid","description":"The unique identifier for the indicator.","examples":[1]},"annotatedDowntime":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Annotateddowntime","description":"Annotated downtime in minutes.","examples":[0]},"availability":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Availability","description":"Availability percentage.","examples":[100]},"availableTime":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Availabletime","description":"Available time in minutes.","examples":[1]},"earlyStopTime":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Earlystoptime","description":"Early stop time in minutes.","examples":[0]},"lateStartTime":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latestarttime","description":"Late start time in minutes.","examples":[0]},"netAvailability":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Netavailability","description":"Net availability percentage.","examples":[100]},"noDataTime":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Nodatatime","description":"Time with no data in minutes.","examples":[0]},"nonProgrammedDowntime":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Nonprogrammeddowntime","description":"Non-programmed downtime in minutes.","examples":[0]},"programmedDowntime":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Programmeddowntime","description":"Programmed downtime in minutes.","examples":[0]},"otherStopsTime":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Otherstopstime","description":"Other stops time in minutes.","examples":[0]},"unavailableTime":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Unavailabletime","description":"Unavailable time in minutes.","examples":[0]}},"type":"object","title":"ShiftIndicatorsDtoV1"},"SignalDataPointDtoV1":{"properties":{"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"value":{"type":"number","title":"Value"}},"type":"object","required":["timestamp","value"],"title":"SignalDataPointDtoV1"},"SimpleWorkOrderDetailsDtoV1":{"properties":{"id":{"type":"string","title":"Id","description":"The UUID of the simple work order"},"name":{"type":"string","title":"Name","description":"The name of the simple work order"}},"type":"object","required":["id","name"],"title":"SimpleWorkOrderDetailsDtoV1"},"SkuDetailsDtoV1":{"properties":{"id":{"type":"string","title":"Id","description":"The UUID of the SKU"},"name":{"type":"string","title":"Name","description":"The name of the SKU"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"The description of the SKU"},"unit":{"type":"string","title":"Unit","description":"The unit of measure for the SKU"}},"type":"object","required":["id","name","unit"],"title":"SkuDetailsDtoV1"},"SkuDtoV1":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id","description":"The unique identifier for the sku.","examples":["36f7b519-d93e-4ec8-8245-7f4b8c123456"]},"company":{"$ref":"#/components/schemas/CompanyDtoV1","description":"The company associated with the sku.","examples":[{"id":1,"name":"Company 1"}]},"sku":{"type":"string","title":"Sku","description":"The sku code of the sku.","examples":["sku 1"]},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"The name of the sku.","examples":["sku 1"]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"The description of the sku.","examples":["sku 1"]},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit","description":"The unit of the sku.","examples":["pcs"]},"archived":{"type":"boolean","title":"Archived","description":"The archived status of the sku.","examples":[false]},"createdAt":{"type":"string","format":"date-time","title":"Createdat","description":"The timestamp when the sku was created.","examples":["2024-01-01T00:00:00.000Z"]},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat","description":"The timestamp when the sku was last updated.","examples":["2024-01-01T00:00:00.000Z"]},"deletedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deletedat","description":"The timestamp when the sku was deleted, if applicable.","examples":["2024-01-02T00:00:00.000Z"]}},"type":"object","required":["id","company","sku","name","description","unit","archived","createdAt","updatedAt"],"title":"SkuDtoV1"},"SkuFiltersV1":{"properties":{"search":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search","description":"Search term for Skus"},"include":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Include","description":"Items to include by id"},"exclude":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude","description":"Items to exclude by id"}},"type":"object","title":"SkuFiltersV1"},"SkuIdOrNameDtoV1":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"The id of the sku","examples":["9ce2c6b4-a1f4-4bf2-b5c8-10436d1018cc"]},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"The name of the sku","examples":["sku 1"]}},"type":"object","title":"SkuIdOrNameDtoV1"},"SkuReferenceDtoV1":{"properties":{"id":{"type":"string","title":"Id","description":"The unique identifier for the sku.","examples":["f1c3a9e9-1cef-4d1d-a6d7-e18607cbfa55"]},"name":{"type":"string","title":"Name","description":"The name of the sku.","examples":["sku 1"]},"description":{"type":"string","title":"Description","description":"The description of the sku.","examples":["sku 1 description"]},"unit":{"type":"string","title":"Unit","description":"The unit of the sku.","examples":["sku 1 unit"]}},"type":"object","required":["id","name","description","unit"],"title":"SkuReferenceDtoV1"},"StopDetailsDtoV1":{"properties":{"id":{"type":"integer","title":"Id","description":"The unique identifier of the stop event.","examples":[1]},"startTime":{"type":"string","format":"date-time","title":"Starttime","description":"The start time of the stop.","examples":["2025-11-01T00:00:00"]},"endTime":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Endtime","description":"The end time of the stop.","examples":["2025-11-01T00:00:00"]},"isProgrammed":{"type":"boolean","title":"Isprogrammed","description":"Indicates if the stop was programmed.","examples":[true]},"isIncludedInAvailability":{"type":"boolean","title":"Isincludedinavailability","description":"Indicates if the stop affects availability calculation.","examples":[true]},"isIncludedInStops":{"type":"boolean","title":"Isincludedinstops","description":"Indicates if the stop is counted as a production stop.","examples":[true]},"isManual":{"type":"boolean","title":"Ismanual","description":"Indicates if the stop was manually logged.","examples":[true]},"createdAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdat","description":"Timestamp of stop record creation.","examples":["2025-11-01T00:00:00"]},"updatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updatedat","description":"Timestamp of last stop record update.","examples":["2025-11-01T00:00:00"]},"deletedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deletedat","description":"Timestamp of stop record deletion, if applicable.","examples":["2025-11-01T00:00:00"]},"durationInMinutes":{"type":"number","title":"Durationinminutes","description":"The duration of the stop in minutes.","examples":[30]}},"type":"object","required":["id","startTime","endTime","isProgrammed","isIncludedInAvailability","isIncludedInStops","isManual","createdAt","updatedAt","durationInMinutes"],"title":"StopDetailsDtoV1"},"StopDtoV1":{"properties":{"classification":{"$ref":"#/components/schemas/ClassificationDetailsDtoV1","description":"The classification of the stop.","examples":[{"component":{"id":"5e9f21d1-3a93-4a36-8f6e-44b9bd7ed305","name":"a simple component"},"createdAt":"2025-11-01T00:00:00","description":"a simple description","generalCause":{"id":"96066d06-c3de-4bdc-987d-1db1ccf30550","name":"a simple general cause"},"id":1,"specificCause":{"id":"08d9f0e7-3aaf-4afe-a2d0-0bb113b214e0","name":"a simple specific cause"},"updatedAt":"2025-11-01T00:00:00"}]},"company":{"$ref":"#/components/schemas/CompanyDtoV1","description":"The company associated with the stop.","examples":[{"id":1,"name":"a simple company"}]},"machine":{"$ref":"#/components/schemas/src__shared__schemas__MachineDtoV1","description":"The machine of the stop.","examples":[{"id":1,"name":"a simple machine"}]},"shift":{"$ref":"#/components/schemas/ShiftDtoV1","description":"The shift of the stop.","examples":[{"endTime":"2025-11-10T00:00:00","id":1,"isActive":true,"name":"morning","startTime":"2025-11-01T00:00:00"}]},"stop":{"$ref":"#/components/schemas/StopDetailsDtoV1","description":"Information about the stop event.","examples":[{"createdAt":"2025-11-01T00:00:00","deletedAt":"2025-11-10T00:00:00","durationInMinutes":30,"endTime":"2025-11-10T00:00:00","id":1,"isIncludedInAvailability":true,"isIncludedInStops":true,"isManual":true,"isProgrammed":true,"startTime":"2025-11-01T00:00:00","updatedAt":"2025-11-01T00:00:00"}]}},"type":"object","required":["classification","company","machine","shift","stop"],"title":"StopDtoV1"},"UpdateNominalSpeedByIdRequestV1":{"properties":{"nominalSpeed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Nominalspeed","description":"The nominal speed of the machine and sku","examples":[100]},"countingFactor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Countingfactor","description":"The counting factor of the machine and sku","examples":[1]},"machine":{"anyOf":[{"$ref":"#/components/schemas/MachineIdOrNameDtoV1"},{"type":"null"}],"description":"The machine associated with the sku."},"sku":{"anyOf":[{"$ref":"#/components/schemas/SkuIdOrNameDtoV1"},{"type":"null"}],"description":"The sku associated with the machine."}},"type":"object","title":"UpdateNominalSpeedByIdRequestV1"},"UpdateOperatorByIdRequestV1":{"properties":{"firstName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname","description":"The first name of the operator.","examples":["Pérez"]},"lastName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname","description":"The last name of the operator.","examples":["Sánchez"]}},"type":"object","title":"UpdateOperatorByIdRequestV1"},"UpdateProductionLogByIdRequestV1":{"properties":{"type":{"anyOf":[{"$ref":"#/components/schemas/ProductionAdvancementsType"},{"type":"null"}],"description":"The type of the production log (correct, defects, etc.)","examples":["correct"]},"count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Count","description":"The total count of items produced during this production log","examples":[1000]},"nominalSpeed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Nominalspeed","description":"The nominal speed of the machine during this production log (using float for speed)","examples":[60]},"start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start","description":"The start time of the production log","examples":["2024-01-01T08:00:00"]},"end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End","description":"The end time of the production log","examples":["2024-01-01T16:00:00"]},"machine":{"anyOf":[{"$ref":"#/components/schemas/MachineIdOrNameDtoV1"},{"type":"null"}],"description":"The machine associated with the production log"},"sku":{"anyOf":[{"$ref":"#/components/schemas/SkuIdOrNameDtoV1"},{"type":"null"}],"description":"The SKU associated with the production log"},"operator":{"anyOf":[{"$ref":"#/components/schemas/src__production_logs__schemas__OperatorDtoV1"},{"type":"null"}],"description":"The operator involved in this production log"},"workOrder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workorder","description":"The name of the work order associated with this production log","examples":["work order 1"]}},"type":"object","title":"UpdateProductionLogByIdRequestV1"},"UpdateSkuByIdRequestV1":{"properties":{"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sku","description":"The code of the sku."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"The name of the sku."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"The description of the sku."},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit","description":"The unit of the sku."},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived","description":"The archived status of the sku.","default":false}},"type":"object","title":"UpdateSkuByIdRequestV1"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WorkOrderDetailsDtoV1":{"properties":{"id":{"type":"string","title":"Id","description":"The UUID of the work order"},"name":{"type":"string","title":"Name","description":"The name of the work order"},"description":{"type":"string","title":"Description","description":"The description of the work order"},"status":{"$ref":"#/components/schemas/WorkOrdersStatus","description":"The status of the work order"}},"type":"object","required":["id","name","description","status"],"title":"WorkOrderDetailsDtoV1"},"WorkOrdersStatus":{"type":"string","enum":["InProgress","Completed","Canceled"],"title":"WorkOrdersStatus"},"src__machines__schemas__MachineDtoV1":{"properties":{"id":{"type":"integer","title":"Id","description":"The unique identifier for the machine.","examples":[1]},"uuid":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Uuid","description":"The stable public identifier for the machine. Null for machines that do not have one yet.","examples":["01748f7c-9688-7abc-8def-0123456789ab"]},"name":{"type":"string","title":"Name","description":"The name of the machine.","examples":["machine 1"]},"externalName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalname","description":"The external name of the machine, if any.","examples":["EXT-1"]},"isActive":{"type":"boolean","title":"Isactive","description":"Whether the machine is currently active.","examples":[true]},"isCountEnabled":{"type":"boolean","title":"Iscountenabled","description":"Whether counting is enabled for the machine.","examples":[true]}},"type":"object","required":["id","uuid","name","isActive","isCountEnabled"],"title":"MachineDtoV1"},"src__operators__schemas__OperatorDtoV1":{"properties":{"id":{"type":"integer","title":"Id","description":"The unique identifier for the operator.","examples":[1]},"company":{"$ref":"#/components/schemas/CompanyDtoV1","description":"The company associated with the operator."},"firstName":{"type":"string","title":"Firstname","description":"The first name of the operator.","examples":["Pérez"]},"lastName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname","description":"The last name of the operator.","examples":["Sánchez"]}},"type":"object","required":["id","company","firstName","lastName"],"title":"OperatorDtoV1"},"src__production_logs__schemas__OperatorDtoV1":{"properties":{"firstName":{"type":"string","title":"Firstname","description":"The operator's first name","examples":["Pérez"]},"lastName":{"type":"string","title":"Lastname","description":"The operator's last name","examples":["Sánchez"]}},"type":"object","required":["firstName","lastName"],"title":"OperatorDtoV1"},"src__shared__schemas__MachineDtoV1":{"properties":{"id":{"type":"integer","title":"Id","description":"The unique identifier for the machine.","examples":[1]},"name":{"type":"string","title":"Name","description":"The name of the machine.","examples":["machine 1"]}},"type":"object","required":["id","name"],"title":"MachineDtoV1"},"MachineStopClassificationEvent":{"type":"object","title":"MachineStopClassificationEvent","description":"A machine stop and its classification. A stop is identified by its `machine` and its `start`.","required":["machine","machineExternalName","start","end","operator","generalCause","specificCause","component","description","isAutomated"],"properties":{"machine":{"type":"string","description":"The machine's name in Pulsar.","examples":["Injection molder 4"]},"machineExternalName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The machine's external name, for example its ID in your ERP. `null` if it has none.","examples":["INJ-004"]},"start":{"type":"string","format":"date-time","description":"When the stop started, as an ISO 8601 UTC timestamp.","examples":["2026-09-25T13:41:07.000Z"]},"end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"When the stop ended, as an ISO 8601 UTC timestamp. Can be `null`.","examples":["2026-09-25T13:58:30.000Z"]},"operator":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Full name of the operator on the machine when the stop started. `null` if nobody was logged in.","examples":["Ana Torres"]},"generalCause":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the general cause.","examples":["Mechanical failure"]},"specificCause":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the specific cause.","examples":["Mold jam"]},"component":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the component involved.","examples":["Ejector pin"]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text description of the stop.","examples":["Part stuck in cavity 2, cleared manually"]},"isAutomated":{"type":"boolean","description":"`true` if the classification was applied automatically by a rule, `false` if a person entered it.","examples":[false]}}},"PingEvent":{"type":"object","title":"PingEvent","required":["text"],"properties":{"text":{"type":"string","enum":["ping"],"description":"Always `ping`."}}}},"securitySchemes":{"apiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key"}}},"tags":[{"name":"Machines","description":"The machines a company can see, and the ids every other endpoint needs."},{"name":"Signals","description":"Raw sensor samples per machine: current, counts, cycles, energy, temperature, pressure. List the signals a machine exposes, then read a window of one by its `public_id`. A query may span at most 14 days and return at most 10,000 points."},{"name":"Production Logs","description":"Recorded production advancement: what a machine made, when, and how much of it."},{"name":"SKUs","description":"The product catalog: codes, names and units used to label production.","x-displayName":"SKUs"},{"name":"Operators","description":"The people running the machines."},{"name":"Nominal speeds","description":"Expected output per machine and SKU — the denominator of the performance term in OEE."},{"name":"Reports","description":"Pre-aggregated OEE and stop analysis across machines and shifts."},{"name":"Realtime","description":"Write into the shift a machine is running right now, without looking up shift ids."},{"name":"Webhooks","description":"The events Pulsar sends to your endpoint."}],"servers":[{"url":"https://draco.prod.pulsarml.com","description":"Production"},{"url":"https://draco.dev.pulsarml.com","description":"Development (sandbox)"}],"security":[{"apiKeyAuth":[]}],"webhooks":{"MachineStopClassificationCreated":{"post":{"tags":["Webhooks"],"summary":"Classification created","description":"Sent when a machine stop is classified for the first time.","operationId":"webhook_MachineStopClassificationCreated","security":[],"parameters":[{"name":"X-Pulsar-Signature","in":"header","required":true,"description":"HMAC-SHA256 signature of the raw body. Verify it before trusting the request; see Verify signatures.","schema":{"type":"string","examples":["5c0e2f4a1b9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f"]}},{"name":"X-Pulsar-Event-Type","in":"header","required":true,"description":"The event type, same as `eventType` in the body.","schema":{"type":"string","examples":["MachineStopClassificationCreated"]}},{"name":"X-Pulsar-Event-Id","in":"header","required":true,"description":"The event's ID, same as `eventId` in the body.","schema":{"type":"string","examples":["8d2f6c1e-4b7a-4f0e-9a3c-5e1d7b9f2a64"]}},{"name":"X-Pulsar-Timestamp","in":"header","required":true,"description":"Same as `eventTimestamp` in the body.","schema":{"type":"string","examples":["2026-09-25T14:03:12.482Z"]}},{"name":"X-Pulsar-Request-Id","in":"header","required":true,"description":"The ID of this delivery attempt. Include it when you contact Pulsar support about a delivery.","schema":{"type":"string","examples":["3f9b2c7d-1e4a-4c8b-b6d2-9a0e5f7c1b38"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["eventId","eventTimestamp","eventType","event"],"properties":{"eventId":{"type":"string","format":"uuid","description":"Unique ID of the event. It stays the same across retries, so use it to detect duplicates."},"eventTimestamp":{"type":"string","format":"date-time","description":"When Pulsar queued the event, as an ISO 8601 UTC timestamp. This is not the time the change happened in Pulsar."},"eventType":{"type":"string","enum":["MachineStopClassificationCreated"],"description":"The event type."},"event":{"$ref":"#/components/schemas/MachineStopClassificationEvent"}}},"example":{"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}}}}},"responses":{"200":{"description":"Return any `2XX` within 10 seconds to acknowledge the delivery; Pulsar ignores the response body. A timeout, `408`, `429` or `5XX` is retried. Any other `4XX`, or a `3XX` redirect, is not."}}}},"MachineStopClassificationUpdated":{"post":{"tags":["Webhooks"],"summary":"Classification updated","description":"Sent when an existing classification changes, for example when someone corrects the cause. The `event` object carries the classification's current values.","operationId":"webhook_MachineStopClassificationUpdated","security":[],"parameters":[{"name":"X-Pulsar-Signature","in":"header","required":true,"description":"HMAC-SHA256 signature of the raw body. Verify it before trusting the request; see Verify signatures.","schema":{"type":"string","examples":["5c0e2f4a1b9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f"]}},{"name":"X-Pulsar-Event-Type","in":"header","required":true,"description":"The event type, same as `eventType` in the body.","schema":{"type":"string","examples":["MachineStopClassificationUpdated"]}},{"name":"X-Pulsar-Event-Id","in":"header","required":true,"description":"The event's ID, same as `eventId` in the body.","schema":{"type":"string","examples":["8d2f6c1e-4b7a-4f0e-9a3c-5e1d7b9f2a64"]}},{"name":"X-Pulsar-Timestamp","in":"header","required":true,"description":"Same as `eventTimestamp` in the body.","schema":{"type":"string","examples":["2026-09-25T14:03:12.482Z"]}},{"name":"X-Pulsar-Request-Id","in":"header","required":true,"description":"The ID of this delivery attempt. Include it when you contact Pulsar support about a delivery.","schema":{"type":"string","examples":["3f9b2c7d-1e4a-4c8b-b6d2-9a0e5f7c1b38"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["eventId","eventTimestamp","eventType","event"],"properties":{"eventId":{"type":"string","format":"uuid","description":"Unique ID of the event. It stays the same across retries, so use it to detect duplicates."},"eventTimestamp":{"type":"string","format":"date-time","description":"When Pulsar queued the event, as an ISO 8601 UTC timestamp. This is not the time the change happened in Pulsar."},"eventType":{"type":"string","enum":["MachineStopClassificationUpdated"],"description":"The event type."},"event":{"$ref":"#/components/schemas/MachineStopClassificationEvent"}}},"example":{"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}}}}},"responses":{"200":{"description":"Return any `2XX` within 10 seconds to acknowledge the delivery; Pulsar ignores the response body. A timeout, `408`, `429` or `5XX` is retried. Any other `4XX`, or a `3XX` redirect, is not."}}}},"MachineStopClassificationDeleted":{"post":{"tags":["Webhooks"],"summary":"Classification deleted","description":"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.","operationId":"webhook_MachineStopClassificationDeleted","security":[],"parameters":[{"name":"X-Pulsar-Signature","in":"header","required":true,"description":"HMAC-SHA256 signature of the raw body. Verify it before trusting the request; see Verify signatures.","schema":{"type":"string","examples":["5c0e2f4a1b9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f"]}},{"name":"X-Pulsar-Event-Type","in":"header","required":true,"description":"The event type, same as `eventType` in the body.","schema":{"type":"string","examples":["MachineStopClassificationDeleted"]}},{"name":"X-Pulsar-Event-Id","in":"header","required":true,"description":"The event's ID, same as `eventId` in the body.","schema":{"type":"string","examples":["8d2f6c1e-4b7a-4f0e-9a3c-5e1d7b9f2a64"]}},{"name":"X-Pulsar-Timestamp","in":"header","required":true,"description":"Same as `eventTimestamp` in the body.","schema":{"type":"string","examples":["2026-09-25T14:03:12.482Z"]}},{"name":"X-Pulsar-Request-Id","in":"header","required":true,"description":"The ID of this delivery attempt. Include it when you contact Pulsar support about a delivery.","schema":{"type":"string","examples":["3f9b2c7d-1e4a-4c8b-b6d2-9a0e5f7c1b38"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["eventId","eventTimestamp","eventType","event"],"properties":{"eventId":{"type":"string","format":"uuid","description":"Unique ID of the event. It stays the same across retries, so use it to detect duplicates."},"eventTimestamp":{"type":"string","format":"date-time","description":"When Pulsar queued the event, as an ISO 8601 UTC timestamp. This is not the time the change happened in Pulsar."},"eventType":{"type":"string","enum":["MachineStopClassificationDeleted"],"description":"The event type."},"event":{"$ref":"#/components/schemas/MachineStopClassificationEvent"}}},"example":{"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}}}}},"responses":{"200":{"description":"Return any `2XX` within 10 seconds to acknowledge the delivery; Pulsar ignores the response body. A timeout, `408`, `429` or `5XX` is retried. Any other `4XX`, or a `3XX` redirect, is not."}}}},"Ping":{"post":{"tags":["Webhooks"],"summary":"Ping","description":"Sent when Pulsar tests your endpoint. It can reach an endpoint whatever event type it's registered for, so reply `2XX` to it rather than rejecting event types you didn't expect.","operationId":"webhook_Ping","security":[],"parameters":[{"name":"X-Pulsar-Signature","in":"header","required":true,"description":"HMAC-SHA256 signature of the raw body. Verify it before trusting the request; see Verify signatures.","schema":{"type":"string","examples":["5c0e2f4a1b9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f"]}},{"name":"X-Pulsar-Event-Type","in":"header","required":true,"description":"The event type, same as `eventType` in the body.","schema":{"type":"string","examples":["Ping"]}},{"name":"X-Pulsar-Event-Id","in":"header","required":true,"description":"The event's ID, same as `eventId` in the body.","schema":{"type":"string","examples":["8d2f6c1e-4b7a-4f0e-9a3c-5e1d7b9f2a64"]}},{"name":"X-Pulsar-Timestamp","in":"header","required":true,"description":"Same as `eventTimestamp` in the body.","schema":{"type":"string","examples":["2026-09-25T14:03:12.482Z"]}},{"name":"X-Pulsar-Request-Id","in":"header","required":true,"description":"The ID of this delivery attempt. Include it when you contact Pulsar support about a delivery.","schema":{"type":"string","examples":["3f9b2c7d-1e4a-4c8b-b6d2-9a0e5f7c1b38"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["eventId","eventTimestamp","eventType","event"],"properties":{"eventId":{"type":"string","format":"uuid","description":"Unique ID of the event. It stays the same across retries, so use it to detect duplicates."},"eventTimestamp":{"type":"string","format":"date-time","description":"When Pulsar queued the event, as an ISO 8601 UTC timestamp. This is not the time the change happened in Pulsar."},"eventType":{"type":"string","enum":["Ping"],"description":"The event type."},"event":{"$ref":"#/components/schemas/PingEvent"}}},"example":{"eventId":"0b6f3d2a-9c1e-4a7b-8f5d-2e4c6a8b0d1f","eventTimestamp":"2026-09-25T14:00:00.000Z","eventType":"Ping","event":{"text":"ping"}}}}},"responses":{"200":{"description":"Return any `2XX` within 10 seconds to acknowledge the delivery; Pulsar ignores the response body. A timeout, `408`, `429` or `5XX` is retried. Any other `4XX`, or a `3XX` redirect, is not."}}}}}}