Simulation validation

Your solver won't tell you the run is wrong. SimAPI will.

SimAPI checks simulation output and setup against physical law — catching diverged runs, unit-conversion slips, sensor drift, and impossible values before the data reaches a design review, an autonomy stack, or an ML pipeline.

CFD, FEA, roboticsCLI, SDK, REST APICI fail gates
CLI and SDK

Install once. Validate every run.

Use the hosted API from a terminal, CI job, or Node workflow. The npm package installs as simapi-cli and exposes the simapi command.

$ curl -fsSL https://sim-api.vercel.app/install.sh | sh
Global command
simapi
CI policy
--fail-on warning
Machine output
--json
simapi validate
SimAPI CLI startup banner
$ simapi validate simulations.json

  Validation report  simulations.json
  ──────────────────────────────────────────────
  Status                 PASSED
  Validation score       98
  Execution time         23ms
Benchmark

The honest numbers

n=9,333 training trials, 30.2% corrupted across 6 failure modes. Three-way comparison: no filtering vs naive IQR/z-score vs SimAPI APIE. Mean ± std across 5 seeds.

30%

of trials corrupted

6 categories including the hardest: measurement noise and sensor drift

93.3%

of corruptions caught

precision 99.8% — near-zero false positives

99.8%

exclusion precision

when flagged, it is genuinely corrupted

ModelCorruptedNaive (IQR+Z)SimAPI APIEClean ceiling
Neural net (MLP)
distribution-sensitive
3.94% MAPE1.13% MAPE1.06% MAPE0.68% MAPE
Gradient boosting
robust to outliers
0.42% MAPE0.44% MAPE0.42% MAPE0.39% MAPE
Per-category detection recall
99.8%Solver divergence
99.7%Unit conversion
99.7%Cross-variable
90.2%Copy-paste blocks
99.4%Sensor drift
61.0%Measurement noise

Why MLP improves 73%

APIE removes 100% of sensor drift rows — the velocity creep shifts the entire feature distribution. Neural networks are maximally sensitive to this: an MLP trained on drifted velocity learns the wrong v→Cd relationship for 15% of the dataset. Removing these rows lets the model learn the true distribution. MLP goes 3.94%1.06%, beating naive filtering by 4.0%.

What naive filtering can’t see

A naive IQR filter removes rows that are statistical outliers column-by-column. Cross-variable corruptions (Re inflated 1.7–2.2× while v is unchanged) produce values inside each column’s individual bounds — IQR catches zero of them. APIE catches 100% by checking Re/v as a physical invariant. Similarly, Pa→kPa unit errors produce plausible individual pressure values — only P/(ρT)≈0.287 instead of 287 reveals the error.

Reproduce: python -m benchmark.run_benchmark 5 seeds · n≈9,333 train · 63.7s runtime · numbers vary ±1.8% (GBT) / ±3.8% (MLP) across seeds

Put a quality gate in front of every simulation run.

Generate a key, validate a sample run in the browser, then move the same checks into your CLI, SDK, or CI pipeline.