Skip to main content
Simulation execution and results

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 simulations
400 - Bad Request - Invalid query parameters (e.g., malformed cursor, invalid workspaceId format, search query too long, a compound sort, or a cursor minted under a different sort)

Start 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 successfully
400 - Bad Request; no simulation is created. Code VALIDATION_ERROR when the simulation parameters are invalid. Code LAUNCH_CONFIG_INVALID when the configuration could not be prepared for the simulator: the message says why, and resubmitting it unchanged fails again. 402 - Payment Required - the platform’s credit balance is exhausted. Add credits before launching simulations. 404 - Configuration or workspace not found 409 - Conflict; no simulation is created. Code CONFLICT when a simulation with this name already exists in the workspace: choose another name. Code MAPPING_FILE_DELETED_REFERENCE when the Chakra mapping file attached to the configuration has been deleted: the message names the file. Detach it, or attach another mapping file, and create the simulation again. 422 - No simulation is created. Code UNPROCESSABLE_ENTITY when the configuration is not validated: it must have status validated 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 result
400 - Invalid request body (simulationIds count outside 2..4, malformed simulation id, or unknown tier) 404 - Simulation not found, or its workspace has been deleted 500 - Internal server error

Get 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 details
404 - Simulation not found

Delete 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 deletion
400 - Invalid simulation ID format 404 - Simulation or workspace not found

Terminate 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 initiated
202 - Termination dispatched for a simulation whose workspace has been deleted. Returned without a body: workspace deletion revokes the simulation’s details, so the acknowledgement carries no SimulationDetails payload. Also returned when the backend refuses the request with a 4xx, whose message would describe the revoked simulation; a backend 5xx is reported as itself. 400 - Bad Request - Invalid simulation ID format, or a scala-go simulation has no platform link and cannot be terminated. An orchestrator-backed simulation carries no link and is terminated through the gateway, so it never reaches this refusal 404 - Simulation not found 500 - Internal Server Error - A fault a retry cannot clear: the gateway or scala-go refused central’s own request or credentials, or answered in a form central could not read 503 - Service Unavailable - The termination transport is unavailable

Get 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 results
400 - Invalid simulation ID format, invalid pagination cursor, limit out of range, or an unrecognized sort or order value 404 - Simulation not found or results not yet available 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.

Generate presigned download URL for result file

GET /api/v1/simulations/{sim_id}/results/download-url

Parameters

Responses

200 - File download URL generated
400 - Invalid simulation ID format or missing fileName 404 - Simulation or file 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.

Get 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 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), 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.
400 - Invalid parameters (bad metric, mode, or tier value), with error code 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 logs
400 - Bad Request - Invalid simulation ID format, invalid since 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.