Import WATS WSJF Reports
Last updated on May 27, 2026
WATS is a structured format: TofuPilot reads a Virinco WATS report directly, so importing one needs no column mapping. The report's step tree becomes a TofuPilot Run with phases and measurements.
Use this to migrate test history off WATS without re-running anything.
| Encoding | JSON |
|---|---|
| Extension | .json |
| Detection | Auto-detected (sn, pn, result, start fields) |
| Origin | Virinco AS, WATS Standard JSON Format |
| Maps to | Run, phases, measurements, limits, unit, part, revision, metadata |
| Runs per file | One |
| API import | POST /v2/import (importer: WATS) |
Supported format
This page covers WSJF (WATS Standard JSON Format). For the XML variant, see WSXF.
History
WSJF and WSXF are interchange formats defined by Virinco AS (Norway) for its WATS manufacturing-data system. WSXF (XML) is the older format; WSJF (JSON) is the newer equivalent introduced to simplify third-party integration. Both are current and actively used: the WATS Client auto-imports files dropped into its standard-format folders, and both can be posted through the WATS REST API.
File structure vs the TofuPilot model
A WSJF report models either a test (UUT) or repair (UUR) record. TofuPilot imports the test report and maps its step tree onto the run model.
| WSJF | TofuPilot |
|---|---|
The report (sn, pn, result, start) | One Run. |
sn | Unit serial number. |
pn / rev | Part and Revision. |
root.steps[] | Phases. |
numericMeas[] (value, lowLimit, highLimit, unit, compOp) | Measurements with limits. |
result (P/F) | Run outcome. |
Prerequisites
- A WATS report exported as WSJF (JSON).
- A Procedure to attach the runs to, created in the dashboard.
Auto-detection
TofuPilot detects WATS by the file content. A JSON file is treated as WATS when it carries the WSJF identity fields sn, pn, result, and start (or a root.steps tree with a processName). On the import page the row shows Auto-detected as WATS; override it from the row's detail sidebar if needed.
Import from the dashboard
- Open the target procedure's import page.
- Drag your WSJF
.jsonfile onto the dropzone. The row shows Auto-detected as WATS and a Ready status. - Click Import. The run appears under the procedure.
Drop multiple reports at once to import a batch; each is parsed independently.
Import through the API
Upload the file, then import it by upload_id with the WATS importer.
# Import a single WATS WSJF report (upload_id comes from the upload finalize step)
curl -X POST https://tofupilot.app/api/v2/import \
-H "Authorization: Bearer $TOFUPILOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "upload_id": "550e8400-e29b-41d4-a716-446655440000", "importer": "WATS" }
]
}'The endpoint returns a { results: [...] } array with one entry per item. Pass several files in the items array (up to 100) to import them in one call; each is parsed independently and reported per-item. See the REST API reference for the upload flow and response schema.
TofuPilot flags duplicate files by content hash, so re-importing the same report links to the existing run instead of creating a copy.
How is this guide?