Start a diagnostic
The upload is a raw-bodyPOST — the request body is the file bytes, not multipart form data. Two headers matter:
Content-Type— send the exact Excel MIME typeapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetfor.xlsx; any other value is treated as CSV.Content-Disposition— carries the filename, e.g.attachment; filename="catalog.csv".
?language= query parameter (en or de, default en) sets the report language.
202 Accepted with { "id": "...", "wasFree": true }. The id identifies the report you’ll poll for.
Only one diagnostic runs per tenant at a time — starting a second while one is active returns
409. Starts are also rate-limited to a few per hour.Poll for completion
PollGET /api/v1/diagnostics/{id} until status is completed (or failed):
Python
status (queued / processing / completed / failed), a human-readable phase, progress, and error if it failed.
Read the report
Once completed, fetch the full report:- Profile —
averageCompleteness(overall score) andcolumns, each with afillRate,rowsWithValue,uniqueValueCount, andtopValues. - Understand —
typeGroups(the product types it detected, each with its own completeness and per-attribute fill rates), aqualityNarrative, and structuredissues. - ETIM readiness —
etimReadinessper product type: the matched ETIM class, coverage percentage, andmissingFeaturesthe class expects. - Samples — a few
samplesshowingbeforevalues and AIsuggestions, so you can see the kind of enrichment FacetFlux would produce.
GET /api/v1/diagnostics returns your ten most recent reports (a bare array, newest first).
Turn gaps into values
The diagnostic shows what’s missing. Enrichment fills it — see the Enrichment guide.