Endpoints
List simulations
GET/api/v1/simulations
Retrieves a paginated list of simulations with optional filtering by workspace, status, name search, and creation date. Results are sorted by creation date (newest first) by default.
Parameters
Responses
200 - List of simulationsStart simulation
POST/api/v1/simulations
Creates and starts a new simulation based on the specified configuration. The simulation begins in validating status, or in provisioning for simulations that skip that status, then progresses to running. Poll the GET endpoint to monitor progress. checkpointing is accepted but not yet supported.
Request Body
Responses
201 - Simulation started successfullyvalidated before starting a simulation. Code LAUNCH_REJECTED when the simulator rejected the configuration: resubmitting it unchanged fails again.
503 - Service Unavailable - the simulation service could not start the simulation. No simulation is created, so the request can be retried.
Compare simulations
POST/api/v1/simulations/compare
Compares two to four simulations and returns aligned summaries, per-metric deltas and a diff context. The result is returned inline as JSON rather than as a presigned download envelope.
Request Body
Responses
200 - Comparison resultGet simulation status
GET/api/v1/simulations/{sim_id}
Retrieves detailed information about a specific simulation, including its current status, timing information, and metrics (if available).
Parameters
Responses
200 - Simulation detailsDelete simulation and free storage
DELETE/api/v1/simulations/{sim_id}
[Feature-gated: enable_simulation_delete] Permanently deletes a simulation and all associated data including results, logs, and checkpoints. This action cannot be undone. Running simulations must be terminated before deletion. This endpoint is only available on deployments where the enable_simulation_delete feature flag is enabled; callers may receive 404 on deployments where the flag is off.
Parameters
Responses
200 - Simulation scheduled for deletionTerminate simulation
POST/api/v1/simulations/{sim_id}/terminate
Initiates termination of a simulation. There is no status pre-check: a simulation that has already finished is accepted and keeps its status; otherwise it transitions to terminated. Results generated up to the termination point will be available.
Parameters
Responses
200 - Simulation termination initiatedGet simulation results
GET/api/v1/simulations/{sim_id}/results
Retrieves results for a completed simulation including the run’s duration and downloadable result files (pcap, traces, etc.).
Parameters
Responses
200 - Simulation resultsGenerate presigned download URL for result file
GET/api/v1/simulations/{sim_id}/results/download-url
Parameters
Responses
200 - File download URL generatedGet computed summary data for simulation results
GET/api/v1/simulations/{sim_id}/results/data
Computes or retrieves cached summary statistics for simulation result CSV files using Polars. Returns a presigned URL to download the zstd-compressed JSON summary. For a run whose status is completed, failed or terminated and whose completedAt is at least 60 minutes old, and that has no rows for the requested metric (no data file for it, or only a header-only one), the response is 200 with a summary whose totalRowsProcessed is 0 and whose projection fields are absent. The one exception is a completed run whose only data for the PFC metric is a header-only shard: its pfc projection is present with five zero totals (totalXoffRx, totalXoffTx, totalXonRx, totalXonTx, totalTimePausedUsec) and byTier omitted. A run that is not yet settled, or whose status is invalid, keeps 404.
Parameters
Responses
200 - Summary data with presigned download URL. For a run whose status iscompleted, failed or terminated and whose completedAt is at least 60 minutes old, and that has no rows for the requested metric (no data file for it, or only a header-only one), this is a summary whose totalRowsProcessed is 0 and whose projection fields are absent. The one exception is a completed run whose only data for the PFC metric is a header-only shard: its pfc projection is present with five zero totals (totalXoffRx, totalXoffTx, totalXonRx, totalXonTx, totalTimePausedUsec) and byTier omitted. A run that is not yet settled, or whose status is invalid, keeps 404.
VALIDATION_ERROR; or, with error code UNSUPPORTED_COMBINATION, a result shape the requested projection does not offer (mode=utilizationBins or mode=uplinkFairness on any metric but nd-stats, or mode=completionTimeBins on any metric but perf and chakra-perf). UNSUPPORTED_COMBINATION is permanent for the request and must not be retried; its message names the result shape and the projection, and only it carries X-Ignored-Params.
404 - Simulation not found or no data files available for the specified metric for a simulation that is not yet settled, or is invalid. For mode=utilizationBins and mode=uplinkFairness, no data files answers 404 whether or not the simulation is settled. For mode=completionTimeBins, also a run with no perf result shards, settled or not, and every metric=chakra-perf request
413 - Payload Too Large - The summarized result set exceeds one of the server’s size limits: its row count is over the ceiling, summarizing it would exceed the memory budget, or, for mode=utilizationBins or mode=uplinkFairness, it spans more distinct sample times or more data files than that mode accepts, or, for mode=uplinkFairness, its switch uplinks hold more samples than the fold accepts, or, for mode=completionTimeBins, it lists more data files than that mode accepts. This condition is permanent for the request and must not be retried.
500 - Internal server error
501 - The requested mode or metric is recognized but its compute path has not shipped yet
503 - Service Unavailable - Several conditions render this status and they differ in whether a retry resolves them; the ones named here are the known ones rather than a closed set. The common one is a transient fault against the results object store on any mode - a network error, throttling, or a 5xx from the dependency - which is retriable: a client that backs off and retries will usually succeed. A second retriable one is a lost cache-write race the server could not recover from: a concurrent request stored the summary object first, and when this request went back to read it the object was no longer there, so a later attempt normally succeeds against the object the next writer stores. The last is a required backend dependency that is not available or not configured, so the simulation’s artifact location could not be resolved. Retrying does not help if the dependency is unconfigured. The response body does not distinguish them, so a client should retry with backoff under a bounded attempt count rather than indefinitely.
504 - Gateway Timeout - Summary computation, or reading the simulation’s state from its backend’s database, exceeded the server’s time budget. The request may be retried.
Get simulation logs
GET/api/v1/simulations/{sim_id}/logs
Retrieves paginated logs from a simulation with optional filtering by log level and component. Logs are returned in chronological order.
Parameters
Responses
200 - Simulation logssince timestamp, invalid level or component, or invalid pagination cursor
404 - Simulation not found
500 - Internal server error
503 - Service Unavailable - The simulation’s state could not be read from its backend: the backend’s database is not configured, or it gave the read no connection within the read’s time budget. The first persists until the backend is configured; the second usually clears on its own. The response body does not distinguish them, so a client should retry with backoff under a bounded attempt count rather than indefinitely.
504 - Gateway Timeout - Reading the simulation’s state from its backend’s database exceeded the read’s time budget. The request may be retried.