API Changelog
Changes to the public /v1/ API and the official Python SDK. See the
stability policy for breaking-change rules.
Version 1-beta — 2026-09-09
Added
started_aton simulation, sweep and dynamic-run resources: the instant the solver began, next tocreated_at,dispatched_atandcompleted_at. Queue wait isstarted_at - dispatched_at. See async resources.progresson a dynamic run resource and on everydynamic.updatedstream frame:{fraction, sim_time_s, sim_time_total_s, wall_s, updated_at}. See dynamic outputs.cancel_requested_aton sweep and dynamic-run resources, set while a cancel is accepted but not yet landed.credits_breakdownon a sweep resource:{points, rotors, cu_per_point_per_rotor, total}.concurrency: {limit, active, queued}onGET /v1/users/me, so the account-wide execution queue shared by the dashboard and every API key is readable. See rate limits.- Motor phase resistance
Rin component list rows and onGET /v1/components/{id}, for every tier that sees specs. filterson the component list response, echoing the bounds that were applied.X-Spec-Budget-RemainingandX-Spec-Budget-Resetheaders onGET /v1/components/{id}/specs.- A new guide, Using the API from an AI coding agent, with a paste-able instruction block and a worked component-axis sweep.
https://thrustlab.com/llms-full.txt, every documentation page as one plain-text file, and a rewrittenhttps://thrustlab.com/llms.txtindex.- Python SDK 0.6.0:
client.simulations.run_queued()andclient.simulations.run_selected(simulation_ids)dispatch runs parked withlaunch_intent="queue". - Additive
snake_caseresult keys alongside the human-label spellings they mirror, on both steady-state and dynamic results. See steady-state outputs.
Changed
- Cancelling a RUNNING dynamic run now behaves like cancelling a running sweep: the response keeps
status: "running"and setscancel_requested_at, the run stops at its next integration window, its partial result is kept (run_meta.partial,run_meta.canceled_at_t_s), compute units are refunded, and the execution slot frees.cancel-selectedlists running dynamic runs underrequested. - A sweep's
input_snapshotnow holds the request body as submitted when the caller omits it. It used to benull. sweep_config.component_axes[]now reports{axis, slot, slots, components: [{id, name}]}. Component references are ids and names only.- An unknown bracket filter key on
GET /v1/componentsnow returns400 unknown_filternaming the valid keys for that type, instead of being silently dropped. - Component filter and sort keys accept both spellings:
resistance[lte]isR[lte], andsort_by=resistanceissort_by=R, and likewise for every filterable field. ids_only=truereturns up to 5000 ids, raised from 2000, and setstruncatedwhen the cap bound the result.- Every 429 response carries a
Retry-Afterheader. Three rate-limit codes are newly documented:spec_rate_limited,filter_rate_limitedandcreate_rate_limited. See rate limits. - Per-account submission limits: 30 per minute to
POST /v1/sweeps, 30 per minute toPOST /v1/dynamic-simulations, 120 per minute toPOST /v1/simulations, each returning429 create_rate_limited. - An error's
doc_urlnow links to that code's own row,https://thrustlab.com/docs/guides/errors#<code>. The errors catalog is generated, so every code the API can return is on the page.
Notes
- The human-label result keys are deprecated in favour of the
snake_casespellings. Both are present; nothing has been removed. - The rate-limit change is additive. The flat 1000 requests per minute per credential, with a burst of 50, is unchanged.
- Python SDK 0.6.0 is a minor bump in
0.x, so read the SDK changelog before upgrading.
Version 1-beta — 2026-04-27
Added
- Public
/v1/API covering:users,projects,simulations,sweeps,dynamic-simulations,components,submissions,starred_components,compute-units,webhook_endpoints, andevents. - Official Python SDK
thrustlabv0.1.0 on PyPI. - Webhook deliveries with HMAC SHA256 signing and a 5-minute timestamp tolerance window. See the webhooks guide.
- Stripe-style error envelopes with deterministic machine-readable codes. See the errors guide.
- Cursor-based pagination on every list endpoint. See the pagination guide.
- Async-as-resource pattern for simulations and sweeps — poll the resource or subscribe via webhook events. See the async resources guide.
Notes
- Stripe billing (subscriptions, billing portal) is managed from the
dashboard, not the public
/v1/API. - The Python SDK is in
0.x; minor-version bumps may include small breaking changes until1.0. Patch bumps are always backward-compatible.