---
title: "Bulk-create / -update / -delete équipements (max 100 per call)."
method: POST
path: "/api/v1/maintenance/equipements/bulk"
tags: ["Maintenance & IoT"]
---

# Bulk-create / -update / -delete équipements (max 100 per call).

`POST /api/v1/maintenance/equipements/bulk`

## Request

- Base URL: `https://erp.eyeot.fr/api/v1`
- URL: `https://erp.eyeot.fr/api/v1/api/v1/maintenance/equipements/bulk`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

Bulk-create / -update / -delete équipements (max 100 per call).

    Pattern : `core/bulk.py`. `?atomic=true` rollback global on first failure.
    Routes per-id existantes inchangées (CRUD à `/maintenance/<id>` historique).

**Permissions requises** : `maintenance:bulk_import`

## Request body

- EquipmentCreate
  - `category` string, required
  - `iot_endpoint` string, nullable
  - `iot_polling_seconds` integer, nullable
  - `iot_protocol` 'MQTT' | 'HTTP' | 'MODBUS' | 'OPCUA' | 'null', nullable
  - `iot_topic` string, nullable
  - `is_iot_connected` boolean
  - `last_maintenance_date` string, date, nullable
  - `location` string, nullable
  - `maintenance_periodicity` 'mensuel' | 'trimestriel' | 'semestriel' | 'annuel' | 'biennal' | 'custom' | 'null', nullable
  - `manufacturer` string, nullable
  - `model` string, nullable
  - `name` string, required
  - `next_maintenance_date` string, date, nullable
  - `notes` string, nullable
  - `purchase_date` string, date, nullable
  - `qr_code` string, nullable
  - `regulatory_compliance` 'DREET' | 'COFRAC' | 'APAVE' | 'interne' | 'autre' | 'null', nullable
  - `serial_number` string, required
  - `site_id` string, uuid, nullable
  - `status` 'ACTIVE' | 'MAINTENANCE' | 'DECOMMISSIONED'
  - `warranty_expiry` string, date, nullable

## Response `200`

Succès — payload `{data, meta}` (cf. API-GUIDE §3.1)

## Other responses

- `201`: Ressource créée. ID dans `data.id`.
- `400`: Validation Marshmallow échouée. `errors` détaille chaque champ invalide.
- `401`: JWT manquant, expiré ou révoqué.
- `402`: L'organisation n'a pas d'abonnement actif (paywall). Rediriger vers /activate.
- `403`: Permissions `module:action` insuffisantes pour cette route.
- `404`: Ressource introuvable (ou cross-tenant — équivalent à hidden).
- `409`: État incohérent (email dupliqué, ressource déjà dans cet état, etc.).
- `422`: Validation Marshmallow échouée. `errors` détaille chaque champ invalide.
- `429`: Trop de requêtes. Honorer le header `Retry-After` (secondes).

---

[API](https://skmtc.dev/eyeot/apis/eyeot-erp-api.md) · [All operations](https://skmtc.dev/eyeot/apis/eyeot-erp-api/llms.txt) · [OpenAPI document](https://skmtc.dev/eyeot/apis/eyeot-erp-api/revisions/42ab95222a89?raw)
