# Asignar por hora (https://docs.pulsarml.com/es/v1/api-reference/shifts/post-shifts-operator)

Asigna un operador al turno que la máquina `machineId` estaba corriendo en `start`. Úsalo para registrar quién operó una máquina después de que terminó el turno, por ejemplo un día después desde un sistema de planeación. Para un turno en curso en una terminal de planta, `POST /v1/realtime/{machine_id}/operator` es la llamada más corta.

El operador toma la máquina en `start` y la conserva hasta el final del turno, o hasta una asignación posterior. Si el turno todavía no tiene a nadie asignado, el operador cubre el turno completo. Para registrar varios operadores en un turno, envíalos en orden cronológico: se rechaza un `start` anterior al último cambio de operador del turno. Enviar la misma asignación otra vez no causa problemas.

Las métricas de operador del turno se recalculan en segundo plano.

Errores:

* `400`: ningún turno coincide, o `start` está fuera del turno, en el futuro, o antes del último cambio de operador del turno.
* `403`: el turno tiene producción marcada como revisada, lo que lo bloquea.
* `404`: el operador no existe en tu empresa.

## `POST /v1/shifts/operator`

Base URLs:
- `https://draco.prod.pulsarml.com` — Producción
- `https://draco.dev.pulsarml.com` — Desarrollo (sandbox)

Authentication: send your API key in the `x-api-key` header.

### Request body (`application/json`, required)

Type: object (`AssignOperatorToMachineShiftRequestV1`)

- `machineId` (integer, required, e.g. `12`) — El ID de la máquina, tal como lo devuelve `GET /v1/machines`.
- `operatorId` (integer, required, e.g. `1063`) — El ID del operador, tal como lo devuelve `/v1/operators`.
- `start` (string (date-time), required, e.g. `"2026-10-12T10:00:00Z"`) — Cuándo toma la máquina el operador. Selecciona el turno que la máquina estaba corriendo en ese momento y no puede estar en el futuro. Una hora sin desfase UTC se interpreta como UTC.

### Responses

#### 200 — El turno al que se asignó el operador

Type: object (`ShiftOperatorAssignmentDtoV1`)

- `shiftId` (integer, required, e.g. `48213`) — El turno al que se asignó el operador.
- `machineId` (integer, required, e.g. `12`) — La máquina a la que pertenece el turno.
- `operatorId` (integer, required, e.g. `1063`) — El operador que se asignó.
- `start` (string (date-time), required, e.g. `"2026-10-12T10:00:00Z"`) — Cuándo tomó la máquina el operador. La conserva hasta el final del turno, o hasta una asignación posterior.

#### 422 — Error de validación

Type: object (`HTTPValidationError`)

- `detail` (array of object, optional)
  - `loc` (array of string | integer, required)
  - `msg` (string, required)
  - `type` (string, required)

### Example request

```bash
curl -X POST 'https://draco.prod.pulsarml.com/v1/shifts/operator' \
  -H 'x-api-key: <YOUR_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "machineId": 12,
    "operatorId": 1063,
    "start": "2026-10-12T10:00:00Z"
  }'
```