# 07 — Exporters ## Export surfaces | Endpoint | Output | Purpose | |----------|--------|---------| | `GET /api/export/csv` | CSV | Serial-number export | | `GET /api/export/json` | raw-export ZIP bundle | Reopen and re-analyze later | | `GET /api/export/reanimator` | JSON | Reanimator hardware payload | | `POST /api/convert` | async ZIP artifact | Batch archive-to-Reanimator conversion | ## Raw export Raw export is not a final report dump. It is a replayable artifact that preserves enough source data for future parser improvements. Current bundle contents: - `raw_export.json` - `collect.log` - `parser_fields.json` Design rules: - raw source is authoritative - uploads of raw export must replay from raw source - parsed snapshots inside the bundle are diagnostic only ## Reanimator export Implementation files: - `internal/exporter/reanimator_models.go` - `internal/exporter/reanimator_converter.go` - `internal/server/handlers.go` Conversion rules: - canonical source is `hardware.devices` - timestamps are RFC3339 - status is normalized to Reanimator-friendly values - missing PCIe serials may be generated from board serial + slot - `NULL`-style board manufacturer/product values are treated as absent ## Inclusion rules Included: - empty memory slots (`present=false`) for topology visibility - PCIe-class devices even when serial must be synthesized Excluded: - storage without `serial_number` - power supplies without `serial_number` - non-present network adapters - device-bound firmware duplicated at top-level firmware list ## Batch convert `POST /api/convert` accepts multiple supported files and produces a ZIP with: - one `*.reanimator.json` file per successful input - `convert-summary.txt` Behavior: - unsupported filenames are skipped - each file is parsed independently - one bad file must not fail the whole batch if at least one conversion succeeds - result artifact is temporary and deleted after download