# Asignar operador a turno (https://docs.pulsarml.com/es/v1/api-reference/shifts/post-shifts-shift_id-operator)

Asigna un operador a un turno por su ID (el que devuelve `PUT /v1/shifts/targets`), incluso en turnos que ya terminaron. Sin `start`, el operador cubre el turno desde su inicio.

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/{shift_id}/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.

### Path parameters

- `shift_id` (integer, required) — El ID del turno.

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

Type: object (`AssignOperatorToShiftRequestV1`)

- `operatorId` (integer, required, e.g. `1063`) — El ID del operador, tal como lo devuelve `/v1/operators`.
- `start` (string (date-time), optional, nullable, e.g. `"2026-10-12T10:00:00Z"`) — Cuándo toma la máquina el operador, dentro del turno y no en el futuro. Por defecto es el inicio del turno. 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/<shift_id>/operator' \
  -H 'x-api-key: <YOUR_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "operatorId": 1063,
    "start": "2026-10-12T10:00:00Z"
  }'
```