- Add bible.git as submodule at bible/ - Move docs/bible/ → bible-local/ (project-specific architecture) - Update CLAUDE.md to reference both bible/ and bible-local/ - Add AGENTS.md for Codex with same structure Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.7 KiB
03 — API Reference
Conventions
- All endpoints under
/api/. - Request bodies:
application/jsonormultipart/form-datawhere noted. - Responses:
application/jsonunless file download. - Export filenames follow pattern:
YYYY-MM-DD (SERVER MODEL) - SERVER SN.<ext>
Upload & Data Input
POST /api/upload
Upload a vendor diagnostic archive or a JSON snapshot.
Request: multipart/form-data, field name archive.
Server-side multipart limit: 100 MiB.
Accepted inputs:
.tar,.tar.gz,.tgz— vendor diagnostic archives.txt— plain text files- JSON file containing a serialized
AnalysisResult— re-loaded as-is
Response: 200 OK with parsed result summary, or 4xx/5xx on error.
Live Collection
POST /api/collect
Start a live collection job (redfish or ipmi).
Request body:
{
"host": "bmc01.example.local",
"protocol": "redfish",
"port": 443,
"username": "admin",
"auth_type": "password",
"password": "secret",
"tls_mode": "insecure"
}
Supported values:
protocol:redfish|ipmiauth_type:password|tokentls_mode:strict|insecure
Response: 202 Accepted
{
"job_id": "job_a1b2c3d4e5f6",
"status": "queued",
"message": "Collection job accepted",
"created_at": "2026-02-23T12:00:00Z"
}
Validation behavior:
400 Bad Requestfor invalid JSON422 Unprocessable Entityfor semantic validation errors (missing/invalid fields)
GET /api/collect/{id}
Poll job status and progress log.
Response:
{
"job_id": "job_a1b2c3d4e5f6",
"status": "running",
"progress": 55,
"logs": ["..."],
"created_at": "2026-02-23T12:00:00Z",
"updated_at": "2026-02-23T12:00:10Z"
}
Status values: queued | running | success | failed | canceled
POST /api/collect/{id}/cancel
Cancel a running job.
Data Queries
GET /api/status
Returns source metadata for the current dataset.
{
"loaded": true,
"filename": "redfish://bmc01.example.local",
"vendor": "redfish",
"source_type": "api",
"protocol": "redfish",
"target_host": "bmc01.example.local",
"collected_at": "2026-02-10T15:30:00Z",
"stats": { "events": 0, "sensors": 0, "fru": 0 }
}
source_type: archive | api
When no dataset is loaded, response is { "loaded": false }.
GET /api/config
Returns source metadata plus:
hardware.boardhardware.firmware- canonical
hardware.devices - computed
specificationsummary lines
GET /api/events
Returns parsed diagnostic events.
GET /api/sensors
Returns sensor readings (temperatures, voltages, fan speeds).
GET /api/serials
Returns serial numbers built from canonical hardware.devices.
GET /api/firmware
Returns firmware versions built from canonical hardware.devices.
GET /api/parsers
Returns list of registered vendor parsers with their identifiers.
Export
GET /api/export/csv
Download serial numbers as CSV.
GET /api/export/json
Download full AnalysisResult as JSON (includes raw_payloads).
GET /api/export/reanimator
Download hardware data in Reanimator format for asset tracking integration.
See 07-exporters.md for full format spec.
Management
DELETE /api/clear
Clear current in-memory dataset.
POST /api/shutdown
Gracefully shut down the server process. This endpoint terminates the current process after responding.
Source metadata fields
Fields present in /api/status and /api/config:
| Field | Values |
|---|---|
source_type |
archive | api |
protocol |
redfish | ipmi (may be empty for archive uploads) |
target_host |
IP or hostname |
collected_at |
RFC3339 timestamp |