@simmit/sdk 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -46,615 +46,818 @@ interface paths {
46
46
  * List your recent SimC jobs
47
47
  * @description Returns your recent SimC jobs, newest first. Older jobs fall outside the retention window and are not returned.
48
48
  */
49
- get: {
50
- parameters: {
51
- query?: {
52
- /** @description Maximum number of jobs to return. Defaults to 25, max 100. */
53
- limit?: number;
54
- /** @description Opaque pagination cursor from a previous list response (`page.nextCursor`). */
55
- cursor?: string;
56
- };
57
- header?: never;
58
- path?: never;
59
- cookie?: never;
49
+ get: operations["listJobs"];
50
+ put?: never;
51
+ /**
52
+ * Submit a new SimC sim
53
+ * @description Submits a new SimC sim to the queue. Returns immediately with a job ID; the sim runs asynchronously. Use the ID to poll status, fetch the final result, and download any artifacts.
54
+ *
55
+ * Credits are reserved against your balance at submission based on the job's maximum possible cost (`maxRuntimeSeconds` × vCPU) and reconciled against actual usage on completion. See "Credits → Reservation" in the documentation for details.
56
+ */
57
+ post: operations["createJob"];
58
+ delete?: never;
59
+ options?: never;
60
+ head?: never;
61
+ patch?: never;
62
+ trace?: never;
63
+ };
64
+ "/v1/simc/builds": {
65
+ parameters: {
66
+ query?: never;
67
+ header?: never;
68
+ path?: never;
69
+ cookie?: never;
70
+ };
71
+ /** List available SimC builds */
72
+ get: operations["listBuilds"];
73
+ put?: never;
74
+ post?: never;
75
+ delete?: never;
76
+ options?: never;
77
+ head?: never;
78
+ patch?: never;
79
+ trace?: never;
80
+ };
81
+ "/v1/simc/builds/{id}": {
82
+ parameters: {
83
+ query?: never;
84
+ header?: never;
85
+ path?: never;
86
+ cookie?: never;
87
+ };
88
+ /**
89
+ * Get a SimC build
90
+ * @description Returns a SimC build by ID, including older builds no longer current on any channel. `GET /v1/simc/builds` lists only the current build per channel. Returns `404` once the build has been removed from retention.
91
+ */
92
+ get: operations["getBuild"];
93
+ put?: never;
94
+ post?: never;
95
+ delete?: never;
96
+ options?: never;
97
+ head?: never;
98
+ patch?: never;
99
+ trace?: never;
100
+ };
101
+ "/v1/simc/jobs/{id}": {
102
+ parameters: {
103
+ query?: never;
104
+ header?: never;
105
+ path?: never;
106
+ cookie?: never;
107
+ };
108
+ /**
109
+ * Get a SimC job record
110
+ * @description Returns the full record for a SimC job, including timestamps, runtime details, metadata, and build info. For lightweight polling while a sim runs, use `GET /v1/simc/jobs/{id}/status` instead.
111
+ */
112
+ get: operations["getJob"];
113
+ put?: never;
114
+ post?: never;
115
+ delete?: never;
116
+ options?: never;
117
+ head?: never;
118
+ patch?: never;
119
+ trace?: never;
120
+ };
121
+ "/v1/simc/jobs/{id}/result": {
122
+ parameters: {
123
+ query?: never;
124
+ header?: never;
125
+ path?: never;
126
+ cookie?: never;
127
+ };
128
+ /**
129
+ * Get a SimC job result
130
+ * @description Returns the full result payload for a finished SimC job — summary metrics, runtime info, and artifact references. Available once the job reaches a terminal status (`completed`, `failed`, `cancelled`, or `timed_out`).
131
+ */
132
+ get: operations["getJobResult"];
133
+ put?: never;
134
+ post?: never;
135
+ delete?: never;
136
+ options?: never;
137
+ head?: never;
138
+ patch?: never;
139
+ trace?: never;
140
+ };
141
+ "/v1/simc/jobs/{id}/status": {
142
+ parameters: {
143
+ query?: never;
144
+ header?: never;
145
+ path?: never;
146
+ cookie?: never;
147
+ };
148
+ /**
149
+ * Poll a SimC job status
150
+ * @description Returns the current status, queue position, and progress for a SimC job. Designed for polling while a sim runs. Use `include` to add optional fields like `logEntries`.
151
+ */
152
+ get: operations["getJobStatus"];
153
+ put?: never;
154
+ post?: never;
155
+ delete?: never;
156
+ options?: never;
157
+ head?: never;
158
+ patch?: never;
159
+ trace?: never;
160
+ };
161
+ "/v1/simc/artifacts/{id}/url": {
162
+ parameters: {
163
+ query?: never;
164
+ header?: never;
165
+ path?: never;
166
+ cookie?: never;
167
+ };
168
+ /**
169
+ * Get a SimC artifact URL
170
+ * @description Returns a stable public URL for a SimC job artifact (HTML report, JSON report, raw log, etc.), valid for the artifact's full retention window. Use this when you need to control the final fetch URL yourself — for example, browser flows that need explicit cross-origin handling.
171
+ */
172
+ get: operations["getArtifactUrl"];
173
+ put?: never;
174
+ post?: never;
175
+ delete?: never;
176
+ options?: never;
177
+ head?: never;
178
+ patch?: never;
179
+ trace?: never;
180
+ };
181
+ "/v1/simc/jobs/{id}/cancel": {
182
+ parameters: {
183
+ query?: never;
184
+ header?: never;
185
+ path?: never;
186
+ cookie?: never;
187
+ };
188
+ get?: never;
189
+ put?: never;
190
+ /**
191
+ * Cancel a SimC job
192
+ * @description Cancels one of your SimC jobs. Jobs that have not started running end immediately. Jobs already in flight are signaled to stop; poll `GET /v1/simc/jobs/{id}/status` to observe the transition to `cancelled`. Repeat calls return the same response.
193
+ */
194
+ post: operations["cancelJob"];
195
+ delete?: never;
196
+ options?: never;
197
+ head?: never;
198
+ patch?: never;
199
+ trace?: never;
200
+ };
201
+ "/v1/simc/usage": {
202
+ parameters: {
203
+ query?: never;
204
+ header?: never;
205
+ path?: never;
206
+ cookie?: never;
207
+ };
208
+ /**
209
+ * Get your usage summary
210
+ * @description Returns your usage for the current period along with a live snapshot of queued and in-flight jobs. For your credit balance, see `GET /v1/simc/credits`.
211
+ */
212
+ get: operations["getUsage"];
213
+ put?: never;
214
+ post?: never;
215
+ delete?: never;
216
+ options?: never;
217
+ head?: never;
218
+ patch?: never;
219
+ trace?: never;
220
+ };
221
+ "/v1/simc/credits": {
222
+ parameters: {
223
+ query?: never;
224
+ header?: never;
225
+ path?: never;
226
+ cookie?: never;
227
+ };
228
+ /**
229
+ * Get your credit balance and active grants
230
+ * @description Returns your credit balance, split between purchased credits and any active grants. Total available credits equal `purchased + sum(grants[].remaining)`. `reserved` reports credits currently held against in-flight jobs and is already excluded from both `purchased` and `grants[].remaining`.
231
+ *
232
+ * Consumption order: grants are spent before purchased credits, with the earliest-expiring grant spent first. Grants without an expiry are spent last.
233
+ *
234
+ * For transaction history and lifetime totals, see the dashboard.
235
+ */
236
+ get: operations["getCredits"];
237
+ put?: never;
238
+ post?: never;
239
+ delete?: never;
240
+ options?: never;
241
+ head?: never;
242
+ patch?: never;
243
+ trace?: never;
244
+ };
245
+ }
246
+ interface components {
247
+ schemas: {
248
+ WebhookEvent: {
249
+ /**
250
+ * @description Event type.
251
+ * @enum {string}
252
+ */
253
+ kind: "job.terminal";
254
+ /**
255
+ * @description Payload schema version.
256
+ * @enum {string}
257
+ */
258
+ version: "v1";
259
+ /**
260
+ * Format: date-time
261
+ * @description ISO 8601 timestamp of when the event was created.
262
+ * @example 2026-03-25T12:00:00.000Z
263
+ */
264
+ timestamp: string;
265
+ payload: {
266
+ /**
267
+ * @description The job ID.
268
+ * @example 519253542012420096
269
+ */
270
+ id: string;
271
+ /**
272
+ * @description Terminal job status.
273
+ * @enum {string}
274
+ */
275
+ status: "completed" | "failed" | "cancelled" | "timed_out";
276
+ /** @description Human-readable reason string, or null. */
277
+ statusReason: string | null;
60
278
  };
61
- requestBody?: never;
62
- responses: {
63
- /** @description Your recent SimC jobs, newest first. */
64
- 200: {
65
- headers: {
66
- /** @description Your in-flight job count at the time of this response. */
67
- "X-Active-Jobs": string;
68
- /** @description Your account ceiling for in-flight jobs. */
69
- "X-Max-Active-Jobs": string;
70
- [name: string]: unknown;
71
- };
72
- content: {
73
- "application/json": {
74
- jobs: {
75
- id: string;
76
- /** @enum {string} */
77
- status: "pending" | "queued" | "starting" | "running" | "completed" | "failed" | "cancelled" | "timed_out";
78
- /** Format: date-time */
79
- createdAt: string | null;
80
- /** Format: date-time */
81
- completedAt: string | null;
82
- /** @enum {string|null} */
83
- errorCode: "execution_interrupted" | "execution_timeout" | "execution_failed" | "build_unavailable" | "simulation_error" | "queue_timeout" | "input_invalid" | "insufficient_credits" | "user_cancelled" | "internal" | null;
84
- /** @description Opaque metadata echoed back exactly as submitted. Not used for scheduling or sim execution. */
85
- metadata: {
86
- [key: string]: unknown;
87
- } | null;
88
- /** @description Build identifier. Use `GET /v1/simc/builds/{id}` for the full build record. */
89
- buildId: string | null;
90
- links: components["schemas"]["JobLinks"];
91
- }[];
92
- page: {
93
- limit: number;
94
- hasMore: boolean;
95
- nextCursor: string | null;
96
- /**
97
- * Format: date-time
98
- * @description Earliest timestamp included in this response. Jobs before this time are not returned.
99
- */
100
- since: string;
101
- };
102
- };
103
- };
279
+ };
280
+ JobLinks: {
281
+ /**
282
+ * Format: uri
283
+ * @description URL to a hosted page for this job. Shows a state-aware page (queued, running, failed) while the job is pre-terminal and the full HTML summary once it completes. The page does not auto-refresh today; reload to see the latest state. Returns `404` after retention expires.
284
+ */
285
+ share: string;
286
+ /**
287
+ * Format: uri
288
+ * @description URL to the manifest JSON for the latest attempt. Only present once the job reaches a terminal status. Returns `404` after retention expires. May change between responses if the job is retried.
289
+ */
290
+ manifest?: string;
291
+ };
292
+ };
293
+ responses: never;
294
+ parameters: never;
295
+ requestBodies: never;
296
+ headers: never;
297
+ pathItems: never;
298
+ }
299
+ interface operations {
300
+ listJobs: {
301
+ parameters: {
302
+ query?: {
303
+ /** @description Maximum number of jobs to return. Defaults to 25, max 100. */
304
+ limit?: number;
305
+ /** @description Opaque pagination cursor from a previous list response (`page.nextCursor`). */
306
+ cursor?: string;
307
+ };
308
+ header?: never;
309
+ path?: never;
310
+ cookie?: never;
311
+ };
312
+ requestBody?: never;
313
+ responses: {
314
+ /** @description Your recent SimC jobs, newest first. */
315
+ 200: {
316
+ headers: {
317
+ /** @description Your in-flight job count at the time of this response. */
318
+ "X-Active-Jobs": string;
319
+ /** @description Your account ceiling for in-flight jobs. */
320
+ "X-Max-Active-Jobs": string;
321
+ /** @description Correlation id for this request, present on every response. The same value is echoed in the `requestId` field of error bodies. */
322
+ "X-Request-Id": string;
323
+ [name: string]: unknown;
104
324
  };
105
- /** @description Invalid cursor or query parameter. */
106
- 400: {
107
- headers: {
108
- [name: string]: unknown;
109
- };
110
- content: {
111
- "application/json": {
112
- error: string;
113
- code: string;
114
- meta: {
115
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
116
- [key: string]: string | number | boolean | null;
117
- }[] | null;
325
+ content: {
326
+ "application/json": {
327
+ jobs: {
328
+ id: string;
329
+ /** @enum {string} */
330
+ status: "pending" | "queued" | "starting" | "running" | "completed" | "failed" | "cancelled" | "timed_out";
331
+ /** Format: date-time */
332
+ createdAt: string | null;
333
+ /** Format: date-time */
334
+ completedAt: string | null;
335
+ /** @enum {string|null} */
336
+ errorCode: "execution_interrupted" | "execution_timeout" | "execution_failed" | "build_unavailable" | "simulation_error" | "queue_timeout" | "input_invalid" | "insufficient_credits" | "user_cancelled" | "internal" | null;
337
+ /** @description Opaque metadata echoed back exactly as submitted. Not used for scheduling or sim execution. */
338
+ metadata: {
339
+ [key: string]: unknown;
118
340
  } | null;
341
+ /** @description Build identifier. Use `GET /v1/simc/builds/{id}` for the full build record. */
342
+ buildId: string | null;
343
+ links: components["schemas"]["JobLinks"];
344
+ }[];
345
+ page: {
346
+ limit: number;
347
+ hasMore: boolean;
348
+ nextCursor: string | null;
349
+ /**
350
+ * Format: date-time
351
+ * @description Earliest timestamp included in this response. Jobs before this time are not returned.
352
+ */
353
+ since: string;
119
354
  };
120
355
  };
121
356
  };
122
- /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
123
- 401: {
124
- headers: {
125
- [name: string]: unknown;
357
+ };
358
+ /** @description Invalid cursor or query parameter. */
359
+ 400: {
360
+ headers: {
361
+ [name: string]: unknown;
362
+ };
363
+ content: {
364
+ "application/json": {
365
+ error: string;
366
+ code: string;
367
+ meta: {
368
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
369
+ [key: string]: string | number | boolean | null;
370
+ }[] | null;
371
+ } | null;
372
+ /**
373
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
374
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
375
+ */
376
+ requestId?: string;
126
377
  };
127
- content: {
128
- "application/json": {
129
- error: string;
130
- /** @enum {string} */
131
- code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
132
- meta: {
133
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
134
- [key: string]: string | number | boolean | null;
135
- }[] | null;
136
- } | null;
137
- };
378
+ };
379
+ };
380
+ /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
381
+ 401: {
382
+ headers: {
383
+ [name: string]: unknown;
384
+ };
385
+ content: {
386
+ "application/json": {
387
+ error: string;
388
+ /** @enum {string} */
389
+ code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
390
+ meta: {
391
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
392
+ [key: string]: string | number | boolean | null;
393
+ }[] | null;
394
+ } | null;
395
+ /**
396
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
397
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
398
+ */
399
+ requestId?: string;
138
400
  };
139
401
  };
140
402
  };
141
403
  };
142
- put?: never;
143
- /**
144
- * Submit a new SimC sim
145
- * @description Submits a new SimC sim to the queue. Returns immediately with a job ID; the sim runs asynchronously. Use the ID to poll status, fetch the final result, and download any artifacts.
146
- *
147
- * Credits are reserved against your balance at submission based on the job's maximum possible cost (`maxRuntimeSeconds` × vCPU) and reconciled against actual usage on completion. See "Credits Reservation" in the documentation for details.
148
- */
149
- post: {
150
- parameters: {
151
- query?: never;
152
- header?: {
153
- /** @description Optional client-supplied key (≤255 printable-ASCII chars) for safe retries. Reusing the same key with the same payload returns the original job; reusing with a different payload returns 409. */
154
- "idempotency-key"?: string;
155
- };
156
- path?: never;
157
- cookie?: never;
404
+ };
405
+ createJob: {
406
+ parameters: {
407
+ query?: never;
408
+ header?: {
409
+ /** @description Optional client-supplied key (≤255 printable-ASCII chars) for safe retries. Reusing the same key with the same payload returns the original job; reusing it with a different payload returns 409. `metadata` is excluded from the payload comparison, so you can change it across retries. Keys are scoped to your API key and this endpoint, and do not expire. */
410
+ "idempotency-key"?: string;
158
411
  };
159
- requestBody?: {
160
- content: {
161
- "application/json": {
162
- build: {
412
+ path?: never;
413
+ cookie?: never;
414
+ };
415
+ requestBody?: {
416
+ content: {
417
+ "application/json": {
418
+ build: {
419
+ /**
420
+ * @description SimC build channel to run.
421
+ * @enum {string}
422
+ */
423
+ channel: "nightly" | "weekly" | "latest";
424
+ /**
425
+ * @description Optional SimC git branch to override the channel's default.
426
+ * @enum {string}
427
+ */
428
+ gitBranch?: "midnight";
429
+ };
430
+ profile: {
431
+ /** @description SimC profile text to execute (the content you would normally paste into a local simc run). Maximum 2 MB (UTF-8 encoded). */
432
+ text: string;
433
+ };
434
+ /**
435
+ * @description Execution options for this job. Multistage execution is skipped if your input contains unsupported patterns or directives.
436
+ * @example {
437
+ * "multiStage": true,
438
+ * "maxRuntimeSeconds": 5400
439
+ * }
440
+ */
441
+ runtime?: {
442
+ /** @description Opt-in to multistage execution with automatic culling between stages. When false or omitted, the sim runs in a single pass. */
443
+ multiStage?: boolean;
444
+ /** @description Maximum runtime for this job in seconds. Defaults to 300 seconds when omitted. Jobs that exceed this runtime time out mid-run and are billed for what ran. Determines credit reservation. The ceiling applied is returned in the response as `runtime.ceiling.runtimeSeconds`. View the maximum at `GET /v1/simc/usage` under `limits.maxRuntimeSeconds`. */
445
+ maxRuntimeSeconds?: number;
446
+ /** @description Maximum time this job may wait in the queue before being auto-cancelled, in seconds. Defaults to 1800 seconds when omitted. The ceiling applied is returned in the response as `runtime.ceiling.queueSeconds`. */
447
+ maxQueueSeconds?: number;
448
+ };
449
+ /**
450
+ * @description Queue priority for this job. Allowed values: `standard`, `high`. Higher priority runs first; same-priority jobs run in submission order.
451
+ * @default standard
452
+ * @enum {string}
453
+ */
454
+ priority?: "background" | "standard" | "high";
455
+ /**
456
+ * @description Opaque metadata echoed back unchanged for your own correlation or labels (for example `profileSource`, `characterRef`). Not used for scheduling or sim execution.
457
+ * @example {
458
+ * "requestId": "req_12345",
459
+ * "profileSource": "addon-export",
460
+ * "characterRef": "us-illidan-niike"
461
+ * }
462
+ */
463
+ metadata?: {
464
+ [key: string]: string;
465
+ };
466
+ /** @description Optional per-job credentials. These values are used only for this job and are never persisted. */
467
+ credentials?: {
468
+ /** @description Battle.net API client ID. Must be provided together with `bnetClientSecret`. Used only for this job to allow SimC armory/guild imports; never persisted with your job data. */
469
+ bnetClientId?: string;
470
+ /** @description Battle.net API client secret. Must be provided together with `bnetClientId`. Used only for this job to allow SimC armory/guild imports; never persisted with your job data. */
471
+ bnetClientSecret?: string;
472
+ };
473
+ /** @description Optional webhook subscription settings for this job. Delivery URL and signing secret come from your webhook configuration. */
474
+ webhook?: {
475
+ /**
476
+ * @description Webhook event types to subscribe to for this job.
477
+ * @example [
478
+ * "job.terminal"
479
+ * ]
480
+ */
481
+ events: "job.terminal"[];
482
+ };
483
+ /**
484
+ * @description Controls which output formats are produced. Omit for the default (JSON v2 only, no HTML). Logs and input artifacts are always produced regardless. For multistage runs, HTML is generated only for the final stage.
485
+ * @example {
486
+ * "html": true,
487
+ * "json": {
488
+ * "version": "2"
489
+ * }
490
+ * }
491
+ */
492
+ artifacts?: {
493
+ /** @description Whether to generate an HTML report. Defaults to `false`. */
494
+ html?: boolean;
495
+ /** @description JSON report options. A JSON report is always generated; use this to select the schema version. */
496
+ json?: {
163
497
  /**
164
- * @description SimC build channel to run.
498
+ * @description JSON report schema version. `2` = stable v2.0.0, `3` = v3.0.0-alpha1 (experimental). Defaults to `2`.
165
499
  * @enum {string}
166
500
  */
167
- channel: "nightly" | "weekly" | "latest";
501
+ version?: "2" | "3";
502
+ };
503
+ };
504
+ };
505
+ };
506
+ };
507
+ responses: {
508
+ /** @description Sim accepted and queued. The returned job ID is your handle for polling, fetching the result, and downloading artifacts. */
509
+ 200: {
510
+ headers: {
511
+ /** @description Your in-flight job count at the time of this response. */
512
+ "X-Active-Jobs": string;
513
+ /** @description Your account ceiling for in-flight jobs. */
514
+ "X-Max-Active-Jobs": string;
515
+ /** @description Your account ceiling for job submissions per minute. */
516
+ "X-RateLimit-Limit": string;
517
+ /** @description Submissions you can still make in the current minute. */
518
+ "X-RateLimit-Remaining": string;
519
+ /** @description Unix epoch seconds when your remaining submissions refill. */
520
+ "X-RateLimit-Reset": string;
521
+ /** @description Correlation id for this request, present on every response. The same value is echoed in the `requestId` field of error bodies. */
522
+ "X-Request-Id": string;
523
+ /** @description Present and equal to `true` only when the response is a replay of an earlier submission with the same `idempotency-key`. Absent on fresh submissions, including the first request that consumed the key. */
524
+ "X-Idempotent-Replay"?: "true";
525
+ [name: string]: unknown;
526
+ };
527
+ content: {
528
+ "application/json": {
529
+ success: boolean;
530
+ id: string;
531
+ runtime: {
532
+ ceiling: {
533
+ /** @description The runtime ceiling that applied to this run, in seconds. View the maximum at `GET /v1/simc/usage` under `limits.maxRuntimeSeconds`. */
534
+ runtimeSeconds: number | null;
535
+ /** @description The queue timeout ceiling that applied to this run, in seconds. Jobs that wait in the queue longer than this are auto-cancelled with `errorCode` `queue_timeout`. View the maximum at `GET /v1/simc/usage` under `limits.maxQueueSeconds`. */
536
+ queueSeconds: number | null;
537
+ };
538
+ };
539
+ links: components["schemas"]["JobLinks"];
540
+ /** @description Warnings about your input. Omitted when there are none. Covers `iterations=` values above the platform safety cap and `target_error=` values below the platform safety floor. The job still runs at the clamped or floored value. */
541
+ warnings?: {
168
542
  /**
169
- * @description Optional SimC git branch to override the channel's default.
543
+ * @description Machine-readable warning category. `iterations_clamped` for `iterations=` values above the platform safety cap; `target_error_floored` for `target_error=` values below the platform safety floor.
170
544
  * @enum {string}
171
545
  */
172
- gitBranch?: "midnight";
173
- };
174
- profile: {
175
- /** @description SimC profile text to execute (the content you would normally paste into a local simc run). Maximum 2 MB (UTF-8 encoded). */
176
- text: string;
177
- };
178
- /**
179
- * @description Execution options for this job. Multistage execution is skipped if your input contains unsupported patterns or directives.
180
- * @example {
181
- * "multiStage": true,
182
- * "maxRuntimeSeconds": 5400
183
- * }
184
- */
185
- runtime?: {
186
- /** @description Opt-in to multistage execution with automatic culling between stages. When false or omitted, the sim runs in a single pass. */
187
- multiStage?: boolean;
188
- /** @description Maximum runtime for this job in seconds. Defaults to 300 seconds when omitted. Jobs that exceed this runtime time out mid-run and are billed for what ran. Determines credit reservation. The ceiling applied is returned in the response as `runtime.ceiling.runtimeSeconds`. View the maximum at `GET /v1/simc/usage` under `limits.maxRuntimeSeconds`. */
189
- maxRuntimeSeconds?: number;
190
- /** @description Maximum time this job may wait in the queue before being auto-cancelled, in seconds. Defaults to 1800 seconds when omitted. The ceiling applied is returned in the response as `runtime.ceiling.queueSeconds`. */
191
- maxQueueSeconds?: number;
192
- };
546
+ kind: "iterations_clamped" | "target_error_floored";
547
+ /** @description 1-indexed line number in your input. */
548
+ line: number;
549
+ /** @description The value as written in your input. */
550
+ requested: number;
551
+ /** @description The clamped or floored value the sim runs with. */
552
+ applied: number;
553
+ /** @description Human-readable explanation paired with `kind`. */
554
+ message: string;
555
+ }[];
556
+ };
557
+ };
558
+ };
559
+ /** @description Your request was missing required input or failed validation. See `error` for the specific issue. */
560
+ 400: {
561
+ headers: {
562
+ [name: string]: unknown;
563
+ };
564
+ content: {
565
+ "application/json": {
566
+ error: string;
567
+ code: string;
568
+ meta: {
569
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
570
+ [key: string]: string | number | boolean | null;
571
+ }[] | null;
572
+ } | null;
193
573
  /**
194
- * @description Queue priority for this job. Allowed values: `standard`, `high`. Higher priority runs first; same-priority jobs run in submission order.
195
- * @default standard
196
- * @enum {string}
574
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
575
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
197
576
  */
198
- priority?: "background" | "standard" | "high";
577
+ requestId?: string;
578
+ };
579
+ };
580
+ };
581
+ /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
582
+ 401: {
583
+ headers: {
584
+ [name: string]: unknown;
585
+ };
586
+ content: {
587
+ "application/json": {
588
+ error: string;
589
+ /** @enum {string} */
590
+ code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
591
+ meta: {
592
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
593
+ [key: string]: string | number | boolean | null;
594
+ }[] | null;
595
+ } | null;
199
596
  /**
200
- * @description Opaque metadata echoed back unchanged for your own correlation or labels (for example `profileSource`, `characterRef`). Not used for scheduling or sim execution.
201
- * @example {
202
- * "requestId": "req_12345",
203
- * "profileSource": "addon-export",
204
- * "characterRef": "us-illidan-niike"
205
- * }
597
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
598
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
206
599
  */
207
- metadata?: {
208
- [key: string]: string;
209
- };
210
- /** @description Optional per-job credentials. These values are used only for this job and are never persisted. */
211
- credentials?: {
212
- /** @description Battle.net API client ID. Must be provided together with `bnetClientSecret`. Used only for this job to allow SimC armory/guild imports; never persisted with your job data. */
213
- bnetClientId?: string;
214
- /** @description Battle.net API client secret. Must be provided together with `bnetClientId`. Used only for this job to allow SimC armory/guild imports; never persisted with your job data. */
215
- bnetClientSecret?: string;
216
- };
217
- /** @description Optional webhook subscription settings for this job. Delivery URL and signing secret come from your webhook configuration. */
218
- webhook?: {
600
+ requestId?: string;
601
+ };
602
+ };
603
+ };
604
+ /** @description The request was rejected because your account has insufficient credits or is inactive. See `code` and `meta` for details. For credit shortfalls, `meta.maxAffordableRuntimeSeconds` indicates the largest job your current balance can cover. */
605
+ 402: {
606
+ headers: {
607
+ [name: string]: unknown;
608
+ };
609
+ content: {
610
+ "application/json": {
611
+ error: string;
612
+ code: string;
613
+ meta: {
614
+ reason: string;
615
+ ceilingRuntimeSeconds?: number;
616
+ maxAffordableRuntimeSeconds?: number;
219
617
  /**
220
- * @description Webhook event types to subscribe to for this job.
221
- * @example [
222
- * "job.terminal"
223
- * ]
618
+ * Format: uri
619
+ * @description Link to the relevant credits/billing docs for this rejection.
224
620
  */
225
- events: "job.terminal"[];
226
- };
621
+ docsUrl?: string;
622
+ } | null;
227
623
  /**
228
- * @description Controls which output formats are produced. Omit for the default (JSON v2 only, no HTML). Logs and input artifacts are always produced regardless. For multistage runs, HTML is generated only for the final stage.
229
- * @example {
230
- * "html": true,
231
- * "json": {
232
- * "version": "2"
233
- * }
234
- * }
624
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
625
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
235
626
  */
236
- artifacts?: {
237
- /** @description Whether to generate an HTML report. Defaults to `false`. */
238
- html?: boolean;
239
- /** @description JSON report options. A JSON report is always generated; use this to select the schema version. */
240
- json?: {
241
- /**
242
- * @description JSON report schema version. `2` = stable v2.0.0, `3` = v3.0.0-alpha1 (experimental). Defaults to `2`.
243
- * @enum {string}
244
- */
245
- version?: "2" | "3";
246
- };
247
- };
627
+ requestId?: string;
248
628
  };
249
629
  };
250
630
  };
251
- responses: {
252
- /** @description Sim accepted and queued. The returned job ID is your handle for polling, fetching the result, and downloading artifacts. */
253
- 200: {
254
- headers: {
255
- /** @description Your in-flight job count at the time of this response. */
256
- "X-Active-Jobs": string;
257
- /** @description Your account ceiling for in-flight jobs. */
258
- "X-Max-Active-Jobs": string;
259
- /** @description Your account ceiling for job submissions per minute. */
260
- "X-RateLimit-Limit": string;
261
- /** @description Submissions you can still make in the current minute. */
262
- "X-RateLimit-Remaining": string;
263
- /** @description Unix epoch seconds when your remaining submissions refill. */
264
- "X-RateLimit-Reset": string;
265
- /** @description Present and equal to `true` only when the response is a replay of an earlier submission with the same `idempotency-key`. Absent on fresh submissions, including the first request that consumed the key. */
266
- "X-Idempotent-Replay"?: "true";
267
- [name: string]: unknown;
268
- };
269
- content: {
270
- "application/json": {
271
- success: boolean;
272
- id: string;
273
- runtime: {
274
- ceiling: {
275
- /** @description The runtime ceiling that applied to this run, in seconds. View the maximum at `GET /v1/simc/usage` under `limits.maxRuntimeSeconds`. */
276
- runtimeSeconds: number | null;
277
- /** @description The queue timeout ceiling that applied to this run, in seconds. Jobs that wait in the queue longer than this are auto-cancelled with `errorCode` `queue_timeout`. View the maximum at `GET /v1/simc/usage` under `limits.maxQueueSeconds`. */
278
- queueSeconds: number | null;
279
- };
280
- };
281
- links: components["schemas"]["JobLinks"];
282
- /** @description Warnings about your input. Omitted when there are none. Covers `iterations=` values above the platform safety cap and `target_error=` values below the platform safety floor. The job still runs at the clamped or floored value. */
283
- warnings?: {
284
- /**
285
- * @description Machine-readable warning category. `iterations_clamped` for `iterations=` values above the platform safety cap; `target_error_floored` for `target_error=` values below the platform safety floor.
286
- * @enum {string}
287
- */
288
- kind: "iterations_clamped" | "target_error_floored";
289
- /** @description 1-indexed line number in your input. */
290
- line: number;
291
- /** @description The value as written in your input. */
292
- requested: number;
293
- /** @description The clamped or floored value the sim runs with. */
294
- applied: number;
295
- /** @description Human-readable explanation paired with `kind`. */
296
- message: string;
297
- }[];
298
- };
299
- };
300
- };
301
- /** @description Your request was missing required input or failed validation. See `message` for the specific issue. */
302
- 400: {
303
- headers: {
304
- [name: string]: unknown;
305
- };
306
- content: {
307
- "application/json": {
308
- error: string;
309
- code: string;
310
- meta: {
311
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
312
- [key: string]: string | number | boolean | null;
313
- }[] | null;
314
- } | null;
315
- };
316
- };
631
+ /** @description The supplied `idempotency-key` was previously used with a different request payload. `meta.originalJobId` is the id of the job that originally consumed the key. */
632
+ 409: {
633
+ headers: {
634
+ [name: string]: unknown;
317
635
  };
318
- /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
319
- 401: {
320
- headers: {
321
- [name: string]: unknown;
322
- };
323
- content: {
324
- "application/json": {
325
- error: string;
636
+ content: {
637
+ "application/json": {
638
+ error: string;
639
+ /** @enum {string} */
640
+ code: "idempotency_key_reuse";
641
+ meta: {
326
642
  /** @enum {string} */
327
- code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
328
- meta: {
329
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
330
- [key: string]: string | number | boolean | null;
331
- }[] | null;
332
- } | null;
643
+ reason: "idempotency_key_reuse";
644
+ /** @description ID of the job that originally consumed this idempotency key. */
645
+ originalJobId: string;
646
+ /** Format: uri */
647
+ docsUrl?: string;
333
648
  };
649
+ /**
650
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
651
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
652
+ */
653
+ requestId?: string;
334
654
  };
335
655
  };
336
- /** @description The request was rejected because your account has insufficient credits or is inactive. See `code` and `meta` for details. For credit shortfalls, `meta.maxAffordableRuntimeSeconds` indicates the largest job your current balance can cover. */
337
- 402: {
338
- headers: {
339
- [name: string]: unknown;
340
- };
341
- content: {
342
- "application/json": {
343
- error: string;
344
- code: string;
345
- meta: {
346
- reason: string;
347
- ceilingRuntimeSeconds?: number;
348
- maxAffordableRuntimeSeconds?: number;
349
- /**
350
- * Format: uri
351
- * @description Link to the relevant credits/billing docs for this rejection.
352
- */
353
- docsUrl?: string;
354
- } | null;
355
- };
356
- };
656
+ };
657
+ /** @description Your request body exceeds the 3 MB maximum. A profile over 2 MB returns code `profile_too_large` instead. */
658
+ 413: {
659
+ headers: {
660
+ [name: string]: unknown;
357
661
  };
358
- /** @description The supplied `idempotency-key` was previously used with a different request payload. `meta.originalJobId` is the id of the job that originally consumed the key. */
359
- 409: {
360
- headers: {
361
- [name: string]: unknown;
362
- };
363
- content: {
364
- "application/json": {
365
- error: string;
366
- /** @enum {string} */
367
- code: "idempotency_key_reuse";
368
- meta: {
369
- /** @enum {string} */
370
- reason: "idempotency_key_reuse";
371
- /** @description ID of the job that originally consumed this idempotency key. */
372
- originalJobId: string;
373
- /** Format: uri */
374
- docsUrl?: string;
375
- };
376
- };
662
+ content: {
663
+ "application/json": {
664
+ error: string;
665
+ code: string;
666
+ meta: {
667
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
668
+ [key: string]: string | number | boolean | null;
669
+ }[] | null;
670
+ } | null;
671
+ /**
672
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
673
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
674
+ */
675
+ requestId?: string;
377
676
  };
378
677
  };
379
- /** @description Your request body exceeds the 3 MB maximum. A profile over 2 MB returns code `profile_too_large` instead. */
380
- 413: {
381
- headers: {
382
- [name: string]: unknown;
383
- };
384
- content: {
385
- "application/json": {
386
- error: string;
387
- code: string;
388
- meta: {
389
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
390
- [key: string]: string | number | boolean | null;
391
- }[] | null;
392
- } | null;
393
- };
394
- };
678
+ };
679
+ /** @description Your SimC profile contains directives Simmit does not allow. `meta.message` explains the rejection and `meta.docsUrl` links to the SimC directives reference. */
680
+ 422: {
681
+ headers: {
682
+ [name: string]: unknown;
395
683
  };
396
- /** @description Your SimC profile contains directives Simmit does not allow. `meta.message` explains the rejection and `meta.docsUrl` links to the SimC directives reference. */
397
- 422: {
398
- headers: {
399
- [name: string]: unknown;
400
- };
401
- content: {
402
- "application/json": {
403
- error: string;
684
+ content: {
685
+ "application/json": {
686
+ error: string;
687
+ /** @enum {string} */
688
+ code: "input_sanitized_rejected";
689
+ meta: {
404
690
  /** @enum {string} */
405
- code: "input_sanitized_rejected";
406
- meta: {
407
- /** @enum {string} */
408
- reason: "input_sanitized_rejected";
409
- /** @description Human-readable explanation of why the input was rejected. */
410
- message: string;
411
- /**
412
- * Format: uri
413
- * @description Link to the SimC directives reference.
414
- */
415
- docsUrl: string;
416
- /** @description A sample of rejected lines. The full count may exceed the sample — see `blockedCount` and `blockedTruncated`. */
417
- blocked: {
418
- line: number;
419
- text: string;
420
- }[];
421
- /** @description Total number of rejected lines. */
422
- blockedCount: number;
423
- /** @description `true` when more lines were rejected than included in `blocked`. */
424
- blockedTruncated: boolean;
425
- };
691
+ reason: "input_sanitized_rejected";
692
+ /** @description Human-readable explanation of why the input was rejected. */
693
+ message: string;
694
+ /**
695
+ * Format: uri
696
+ * @description Link to the SimC directives reference.
697
+ */
698
+ docsUrl: string;
699
+ /** @description A sample of rejected lines. The full count may exceed the sample see `blockedCount` and `blockedTruncated`. */
700
+ blocked: {
701
+ line: number;
702
+ text: string;
703
+ }[];
704
+ /** @description Total number of rejected lines. */
705
+ blockedCount: number;
706
+ /** @description `true` when more lines were rejected than included in `blocked`. */
707
+ blockedTruncated: boolean;
426
708
  };
709
+ /**
710
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
711
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
712
+ */
713
+ requestId?: string;
427
714
  };
428
715
  };
429
- /** @description Your account has exceeded its request rate or in-flight job limit. See `code` and `meta` for the specific cause. `Retry-After` carries the next-attempt time. */
430
- 429: {
431
- headers: {
432
- /** @description Seconds to wait before retrying. */
433
- "Retry-After": string;
434
- /** @description Your in-flight job count at the time of this response. */
435
- "X-Active-Jobs"?: string;
436
- /** @description Your account ceiling for in-flight jobs. */
437
- "X-Max-Active-Jobs"?: string;
438
- /** @description Your account ceiling for job submissions per minute. */
439
- "X-RateLimit-Limit"?: string;
440
- /** @description Submissions you can still make in the current minute. */
441
- "X-RateLimit-Remaining"?: string;
442
- /** @description Unix epoch seconds when your remaining submissions refill. */
443
- "X-RateLimit-Reset"?: string;
444
- [name: string]: unknown;
445
- };
446
- content: {
447
- "application/json": {
448
- error: string;
716
+ };
717
+ /** @description Your account has exceeded its request rate or in-flight job limit. See `code` and `meta` for the specific cause. `Retry-After` carries the next-attempt time. */
718
+ 429: {
719
+ headers: {
720
+ /** @description Seconds to wait before retrying. */
721
+ "Retry-After": string;
722
+ /** @description Your in-flight job count at the time of this response. */
723
+ "X-Active-Jobs"?: string;
724
+ /** @description Your account ceiling for in-flight jobs. */
725
+ "X-Max-Active-Jobs"?: string;
726
+ /** @description Your account ceiling for job submissions per minute. */
727
+ "X-RateLimit-Limit"?: string;
728
+ /** @description Submissions you can still make in the current minute. */
729
+ "X-RateLimit-Remaining"?: string;
730
+ /** @description Unix epoch seconds when your remaining submissions refill. */
731
+ "X-RateLimit-Reset"?: string;
732
+ /** @description Correlation id for this request, present on every response. The same value is echoed in the `requestId` field of error bodies. */
733
+ "X-Request-Id": string;
734
+ [name: string]: unknown;
735
+ };
736
+ content: {
737
+ "application/json": {
738
+ error: string;
739
+ /** @enum {string} */
740
+ code: "rate_limit_exceeded";
741
+ meta: {
449
742
  /** @enum {string} */
450
- code: "rate_limit_exceeded";
451
- meta: {
452
- /** @enum {string} */
453
- scope: "developer";
454
- };
455
- } | {
456
- error: string;
743
+ scope: "developer";
744
+ };
745
+ /**
746
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
747
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
748
+ */
749
+ requestId?: string;
750
+ } | {
751
+ error: string;
752
+ /** @enum {string} */
753
+ code: "max_active_jobs_exceeded";
754
+ meta: {
457
755
  /** @enum {string} */
458
- code: "max_active_jobs_exceeded";
459
- meta: {
460
- /** @enum {string} */
461
- reason: "max_active_jobs_exceeded";
462
- /** @description Maximum number of jobs your account can have in flight. */
463
- maxActiveJobs: number;
464
- /** @description Jobs your account had in flight when this request was rejected. */
465
- activeJobs: number;
466
- };
756
+ reason: "max_active_jobs_exceeded";
757
+ /** @description Maximum number of jobs your account can have in flight. */
758
+ maxActiveJobs: number;
759
+ /** @description Jobs your account had in flight when this request was rejected. */
760
+ activeJobs: number;
467
761
  };
762
+ /**
763
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
764
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
765
+ */
766
+ requestId?: string;
468
767
  };
469
768
  };
470
- /** @description Your sim was not accepted right now. `code` indicates the cause: `queue_unavailable` when the queue is full or paused, `queue_health_unknown` when queue health cannot be confirmed, `secret_store_unavailable` when per-job credentials supplied with the request could not be stored, or `api_maintenance` during planned maintenance. `Retry-After` carries the next-attempt time. */
471
- 503: {
472
- headers: {
473
- /** @description Seconds to wait before retrying. */
474
- "Retry-After": string;
475
- [name: string]: unknown;
476
- };
477
- content: {
478
- "application/json": {
479
- error: string;
480
- /** @enum {string} */
481
- code: "queue_unavailable";
482
- meta: {
483
- /** @enum {string} */
484
- reason: "queue_unavailable";
485
- /** @description Reason the queue is currently rejecting submissions. */
486
- queueHealth: string;
487
- };
488
- } | {
489
- error: string;
769
+ };
770
+ /** @description Your sim was not accepted right now. `code` indicates the cause: `queue_unavailable` when the queue is full or paused, `queue_health_unknown` when queue health cannot be confirmed, `secret_store_unavailable` when per-job credentials supplied with the request could not be stored, or `api_maintenance` during planned maintenance. `Retry-After` carries the next-attempt time. */
771
+ 503: {
772
+ headers: {
773
+ /** @description Seconds to wait before retrying. */
774
+ "Retry-After": string;
775
+ /** @description Correlation id for this request, present on every response. The same value is echoed in the `requestId` field of error bodies. */
776
+ "X-Request-Id": string;
777
+ [name: string]: unknown;
778
+ };
779
+ content: {
780
+ "application/json": {
781
+ error: string;
782
+ /** @enum {string} */
783
+ code: "queue_unavailable";
784
+ meta: {
490
785
  /** @enum {string} */
491
- code: "queue_health_unknown";
492
- meta: {
493
- /** @enum {string} */
494
- reason: "queue_health_unknown";
495
- laneId: string;
496
- };
497
- } | {
498
- error: string;
786
+ reason: "queue_unavailable";
787
+ /** @description Reason the queue is currently rejecting submissions. */
788
+ queueHealth: string;
789
+ };
790
+ /**
791
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
792
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
793
+ */
794
+ requestId?: string;
795
+ } | {
796
+ error: string;
797
+ /** @enum {string} */
798
+ code: "queue_health_unknown";
799
+ meta: {
499
800
  /** @enum {string} */
500
- code: "secret_store_unavailable";
501
- meta: {
502
- /** @enum {string} */
503
- reason: "secret_store_unavailable";
504
- };
505
- } | {
506
- error: string;
801
+ reason: "queue_health_unknown";
802
+ laneId: string;
803
+ };
804
+ /**
805
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
806
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
807
+ */
808
+ requestId?: string;
809
+ } | {
810
+ error: string;
811
+ /** @enum {string} */
812
+ code: "secret_store_unavailable";
813
+ meta: {
507
814
  /** @enum {string} */
508
- code: "api_maintenance";
509
- meta: {
510
- /** @description Seconds to wait before retrying. */
511
- retryAfterSeconds: number;
512
- };
815
+ reason: "secret_store_unavailable";
816
+ };
817
+ /**
818
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
819
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
820
+ */
821
+ requestId?: string;
822
+ } | {
823
+ error: string;
824
+ /** @enum {string} */
825
+ code: "api_maintenance";
826
+ meta: {
827
+ /** @description Seconds to wait before retrying. */
828
+ retryAfterSeconds: number;
513
829
  };
830
+ /**
831
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
832
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
833
+ */
834
+ requestId?: string;
514
835
  };
515
836
  };
516
837
  };
517
838
  };
518
- delete?: never;
519
- options?: never;
520
- head?: never;
521
- patch?: never;
522
- trace?: never;
523
839
  };
524
- "/v1/simc/builds": {
840
+ listBuilds: {
525
841
  parameters: {
526
842
  query?: never;
527
843
  header?: never;
528
844
  path?: never;
529
845
  cookie?: never;
530
846
  };
531
- /** List available SimC builds */
532
- get: {
533
- parameters: {
534
- query?: never;
535
- header?: never;
536
- path?: never;
537
- cookie?: never;
538
- };
539
- requestBody?: never;
540
- responses: {
541
- /** @description Available SimC builds, grouped by channel. */
542
- 200: {
543
- headers: {
544
- [name: string]: unknown;
545
- };
546
- content: {
547
- "application/json": {
548
- /** Format: date-time */
549
- generatedAt: string;
550
- builds: {
551
- /** @enum {string} */
552
- channel: "nightly" | "weekly" | "latest";
553
- /** @description Git branch this build was produced from. */
554
- gitBranch: string;
555
- /** @description Source repository for this SimC build. */
556
- repo: string;
557
- /** @description Git commit hash of the SimC source used for this build. */
558
- commit: string;
559
- /**
560
- * Format: uuid
561
- * @description Unique identifier for this build.
562
- */
563
- id: string;
564
- /**
565
- * Format: date-time
566
- * @description When this build was created.
567
- */
568
- createdAt: string;
569
- /** @description Upstream CI status for this commit, with per-check details. Null when CI data is unavailable. */
570
- ci: {
571
- /**
572
- * @description Computed from gate checks: pass = all gated checks green, partial = gate checks green but other failures exist, fail = gate checks failed (fallback build), unknown = CI data unavailable.
573
- * @enum {string}
574
- */
575
- status: "pass" | "partial" | "fail" | "unknown";
576
- checks: {
577
- total: number;
578
- passed: number;
579
- failed: number;
580
- };
581
- /** @description Names of check runs with non-success conclusions (failure, cancelled, timed_out, action_required). Full GitHub job names as-is. */
582
- failures: string[];
583
- /** @description Glob patterns describing which checks were used as the build gate. */
584
- gatedOn: string[];
585
- /**
586
- * Format: date-time
587
- * @description When CI state was fetched from GitHub.
588
- */
589
- retrievedAt: string;
590
- } | null;
591
- /** @description Bundled profiles available for this build. See https://dashboard.simmit.com/docs/api/bundled-profiles for more. */
592
- profiles: {
593
- /** @description Profile filenames this build accepts in submitted profile text (e.g. `MID1_Mage_Arcane.simc`). Each file is verified at build time to parse and sim cleanly for one iteration. Reference one in your profile text on its own line or as `input=<filename>`. Sorted lexicographically. */
594
- manifest: string[];
595
- } | null;
596
- }[];
597
- };
598
- };
847
+ requestBody?: never;
848
+ responses: {
849
+ /** @description Available SimC builds, grouped by channel. */
850
+ 200: {
851
+ headers: {
852
+ [name: string]: unknown;
599
853
  };
600
- /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
601
- 401: {
602
- headers: {
603
- [name: string]: unknown;
604
- };
605
- content: {
606
- "application/json": {
607
- error: string;
854
+ content: {
855
+ "application/json": {
856
+ /** Format: date-time */
857
+ generatedAt: string;
858
+ builds: {
608
859
  /** @enum {string} */
609
- code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
610
- meta: {
611
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
612
- [key: string]: string | number | boolean | null;
613
- }[] | null;
614
- } | null;
615
- };
616
- };
617
- };
618
- };
619
- };
620
- put?: never;
621
- post?: never;
622
- delete?: never;
623
- options?: never;
624
- head?: never;
625
- patch?: never;
626
- trace?: never;
627
- };
628
- "/v1/simc/builds/{id}": {
629
- parameters: {
630
- query?: never;
631
- header?: never;
632
- path?: never;
633
- cookie?: never;
634
- };
635
- /**
636
- * Get a SimC build
637
- * @description Returns a SimC build by ID, including older builds no longer current on any channel. `GET /v1/simc/builds` lists only the current build per channel. Returns `404` once the build has been removed from retention.
638
- */
639
- get: {
640
- parameters: {
641
- query?: never;
642
- header?: never;
643
- path: {
644
- /** @description Build ID, as returned in `build.id` on any job response. */
645
- id: string;
646
- };
647
- cookie?: never;
648
- };
649
- requestBody?: never;
650
- responses: {
651
- /** @description Full SimC build details. */
652
- 200: {
653
- headers: {
654
- [name: string]: unknown;
655
- };
656
- content: {
657
- "application/json": {
860
+ channel: "nightly" | "weekly" | "latest";
658
861
  /** @description Git branch this build was produced from. */
659
862
  gitBranch: string;
660
863
  /** @description Source repository for this SimC build. */
@@ -698,1064 +901,1093 @@ interface paths {
698
901
  /** @description Profile filenames this build accepts in submitted profile text (e.g. `MID1_Mage_Arcane.simc`). Each file is verified at build time to parse and sim cleanly for one iteration. Reference one in your profile text on its own line or as `input=<filename>`. Sorted lexicographically. */
699
902
  manifest: string[];
700
903
  } | null;
701
- };
702
- };
703
- };
704
- /** @description Invalid build ID format (must be a UUID). */
705
- 400: {
706
- headers: {
707
- [name: string]: unknown;
708
- };
709
- content: {
710
- "application/json": {
711
- error: string;
712
- code: string;
713
- meta: {
714
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
715
- [key: string]: string | number | boolean | null;
716
- }[] | null;
717
- } | null;
718
- };
904
+ }[];
719
905
  };
720
906
  };
721
- /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
722
- 401: {
723
- headers: {
724
- [name: string]: unknown;
725
- };
726
- content: {
727
- "application/json": {
728
- error: string;
729
- /** @enum {string} */
730
- code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
731
- meta: {
732
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
733
- [key: string]: string | number | boolean | null;
734
- }[] | null;
735
- } | null;
736
- };
737
- };
907
+ };
908
+ /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
909
+ 401: {
910
+ headers: {
911
+ [name: string]: unknown;
738
912
  };
739
- /** @description Build not found */
740
- 404: {
741
- headers: {
742
- [name: string]: unknown;
743
- };
744
- content: {
745
- "application/json": {
746
- error: string;
747
- code: string;
748
- meta: {
749
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
750
- [key: string]: string | number | boolean | null;
751
- }[] | null;
752
- } | null;
753
- };
913
+ content: {
914
+ "application/json": {
915
+ error: string;
916
+ /** @enum {string} */
917
+ code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
918
+ meta: {
919
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
920
+ [key: string]: string | number | boolean | null;
921
+ }[] | null;
922
+ } | null;
923
+ /**
924
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
925
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
926
+ */
927
+ requestId?: string;
754
928
  };
755
929
  };
756
930
  };
757
931
  };
758
- put?: never;
759
- post?: never;
760
- delete?: never;
761
- options?: never;
762
- head?: never;
763
- patch?: never;
764
- trace?: never;
765
932
  };
766
- "/v1/simc/jobs/{id}": {
933
+ getBuild: {
767
934
  parameters: {
768
935
  query?: never;
769
936
  header?: never;
770
- path?: never;
937
+ path: {
938
+ /** @description Build ID, as returned in `build.id` on any job response. */
939
+ id: string;
940
+ };
771
941
  cookie?: never;
772
942
  };
773
- /**
774
- * Get a SimC job record
775
- * @description Returns the full record for a SimC job, including timestamps, runtime details, metadata, and build info. For lightweight polling while a sim runs, use `GET /v1/simc/jobs/{id}/status` instead.
776
- */
777
- get: {
778
- parameters: {
779
- query?: never;
780
- header?: never;
781
- path: {
782
- id: string;
783
- };
784
- cookie?: never;
785
- };
786
- requestBody?: never;
787
- responses: {
788
- /** @description Full SimC job record. */
789
- 200: {
790
- headers: {
791
- /** @description Your in-flight job count at the time of this response. */
792
- "X-Active-Jobs": string;
793
- /** @description Your account ceiling for in-flight jobs. */
794
- "X-Max-Active-Jobs": string;
795
- [name: string]: unknown;
796
- };
797
- content: {
798
- "application/json": {
799
- id: string;
800
- /** @enum {string} */
801
- status: "pending" | "queued" | "starting" | "running" | "completed" | "failed" | "cancelled" | "timed_out";
943
+ requestBody?: never;
944
+ responses: {
945
+ /** @description Full SimC build details. */
946
+ 200: {
947
+ headers: {
948
+ [name: string]: unknown;
949
+ };
950
+ content: {
951
+ "application/json": {
952
+ /** @description Git branch this build was produced from. */
953
+ gitBranch: string;
954
+ /** @description Source repository for this SimC build. */
955
+ repo: string;
956
+ /** @description Git commit hash of the SimC source used for this build. */
957
+ commit: string;
958
+ /**
959
+ * Format: uuid
960
+ * @description Unique identifier for this build.
961
+ */
962
+ id: string;
963
+ /**
964
+ * Format: date-time
965
+ * @description When this build was created.
966
+ */
967
+ createdAt: string;
968
+ /** @description Upstream CI status for this commit, with per-check details. Null when CI data is unavailable. */
969
+ ci: {
802
970
  /**
803
- * @description Effective priority the job is running at.
971
+ * @description Computed from gate checks: pass = all gated checks green, partial = gate checks green but other failures exist, fail = gate checks failed (fallback build), unknown = CI data unavailable.
804
972
  * @enum {string}
805
973
  */
806
- priority: "background" | "standard" | "high";
807
- /** Format: date-time */
808
- createdAt: string | null;
974
+ status: "pass" | "partial" | "fail" | "unknown";
975
+ checks: {
976
+ total: number;
977
+ passed: number;
978
+ failed: number;
979
+ };
980
+ /** @description Names of check runs with non-success conclusions (failure, cancelled, timed_out, action_required). Full GitHub job names as-is. */
981
+ failures: string[];
982
+ /** @description Glob patterns describing which checks were used as the build gate. */
983
+ gatedOn: string[];
809
984
  /**
810
985
  * Format: date-time
811
- * @description When this job began executing. Null when the job has not yet started.
986
+ * @description When CI state was fetched from GitHub.
812
987
  */
813
- startedAt: string | null;
814
- /** Format: date-time */
815
- completedAt: string | null;
988
+ retrievedAt: string;
989
+ } | null;
990
+ /** @description Bundled profiles available for this build. See https://dashboard.simmit.com/docs/api/bundled-profiles for more. */
991
+ profiles: {
992
+ /** @description Profile filenames this build accepts in submitted profile text (e.g. `MID1_Mage_Arcane.simc`). Each file is verified at build time to parse and sim cleanly for one iteration. Reference one in your profile text on its own line or as `input=<filename>`. Sorted lexicographically. */
993
+ manifest: string[];
994
+ } | null;
995
+ };
996
+ };
997
+ };
998
+ /** @description Invalid build ID format (must be a UUID). */
999
+ 400: {
1000
+ headers: {
1001
+ [name: string]: unknown;
1002
+ };
1003
+ content: {
1004
+ "application/json": {
1005
+ error: string;
1006
+ code: string;
1007
+ meta: {
1008
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1009
+ [key: string]: string | number | boolean | null;
1010
+ }[] | null;
1011
+ } | null;
1012
+ /**
1013
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1014
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1015
+ */
1016
+ requestId?: string;
1017
+ };
1018
+ };
1019
+ };
1020
+ /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
1021
+ 401: {
1022
+ headers: {
1023
+ [name: string]: unknown;
1024
+ };
1025
+ content: {
1026
+ "application/json": {
1027
+ error: string;
1028
+ /** @enum {string} */
1029
+ code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
1030
+ meta: {
1031
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1032
+ [key: string]: string | number | boolean | null;
1033
+ }[] | null;
1034
+ } | null;
1035
+ /**
1036
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1037
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1038
+ */
1039
+ requestId?: string;
1040
+ };
1041
+ };
1042
+ };
1043
+ /** @description Build not found */
1044
+ 404: {
1045
+ headers: {
1046
+ [name: string]: unknown;
1047
+ };
1048
+ content: {
1049
+ "application/json": {
1050
+ error: string;
1051
+ code: string;
1052
+ meta: {
1053
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1054
+ [key: string]: string | number | boolean | null;
1055
+ }[] | null;
1056
+ } | null;
1057
+ /**
1058
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1059
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1060
+ */
1061
+ requestId?: string;
1062
+ };
1063
+ };
1064
+ };
1065
+ };
1066
+ };
1067
+ getJob: {
1068
+ parameters: {
1069
+ query?: never;
1070
+ header?: never;
1071
+ path: {
1072
+ id: string;
1073
+ };
1074
+ cookie?: never;
1075
+ };
1076
+ requestBody?: never;
1077
+ responses: {
1078
+ /** @description Full SimC job record. */
1079
+ 200: {
1080
+ headers: {
1081
+ /** @description Your in-flight job count at the time of this response. */
1082
+ "X-Active-Jobs": string;
1083
+ /** @description Your account ceiling for in-flight jobs. */
1084
+ "X-Max-Active-Jobs": string;
1085
+ /** @description Correlation id for this request, present on every response. The same value is echoed in the `requestId` field of error bodies. */
1086
+ "X-Request-Id": string;
1087
+ [name: string]: unknown;
1088
+ };
1089
+ content: {
1090
+ "application/json": {
1091
+ id: string;
1092
+ /** @enum {string} */
1093
+ status: "pending" | "queued" | "starting" | "running" | "completed" | "failed" | "cancelled" | "timed_out";
1094
+ /**
1095
+ * @description Effective priority the job is running at.
1096
+ * @enum {string}
1097
+ */
1098
+ priority: "background" | "standard" | "high";
1099
+ /** Format: date-time */
1100
+ createdAt: string | null;
1101
+ /**
1102
+ * Format: date-time
1103
+ * @description When this job began executing. Null when the job has not yet started.
1104
+ */
1105
+ startedAt: string | null;
1106
+ /** Format: date-time */
1107
+ completedAt: string | null;
1108
+ /**
1109
+ * Format: date-time
1110
+ * @description When a cancel was requested. Null when no cancel has been requested.
1111
+ */
1112
+ cancelRequestedAt: string | null;
1113
+ /** @enum {string|null} */
1114
+ errorCode: "execution_interrupted" | "execution_timeout" | "execution_failed" | "build_unavailable" | "simulation_error" | "queue_timeout" | "input_invalid" | "insufficient_credits" | "user_cancelled" | "internal" | null;
1115
+ /** @description Human-readable explanation for the terminal status, paired with `errorCode`. */
1116
+ statusReason: string | null;
1117
+ /** @description SimC process exit code. */
1118
+ simcExitCode: string | null;
1119
+ /** @description Number of days artifacts are retained after `completedAt`. After this window, artifact endpoints return `410`. */
1120
+ retentionDays: number | null;
1121
+ /** @description Opaque metadata echoed back exactly as submitted (for example `profileSource`, `characterRef`). Not used for scheduling or sim execution. */
1122
+ metadata: {
1123
+ [key: string]: unknown;
1124
+ } | null;
1125
+ runtime: {
1126
+ /** @description SimC process wall-clock time in milliseconds. Excludes setup and teardown time. Null if the job has not completed or the sim did not start. */
1127
+ simDurationMs: number | null;
1128
+ /** @description Total wall-clock time from job start to completion (milliseconds). Includes sim execution, artifact generation, and post-processing. Null when the job has not yet run. */
1129
+ totalDurationMs: number | null;
1130
+ /** @description Credits charged for this job, including any priority fee. `0` for terminal jobs with no billable work. Null until the job reaches a terminal state. */
1131
+ creditsConsumed: number | null;
1132
+ /** @description Priority surcharge included in `creditsConsumed`. `0` for jobs submitted at `standard` or `background`; otherwise the `high`-priority fee in effect at submission time. View the current fee from `GET /v1/simc/usage` under `limits.priorityFeeCredits.high`. */
1133
+ priorityFeeCredits: number;
1134
+ /** @description vCPUs used for this job. Null before execution. */
1135
+ vcpus: number | null;
1136
+ ceiling: {
1137
+ /** @description The runtime ceiling that applied to this run, in seconds. View the maximum at `GET /v1/simc/usage` under `limits.maxRuntimeSeconds`. */
1138
+ runtimeSeconds: number | null;
1139
+ /** @description The queue timeout ceiling that applied to this run, in seconds. Jobs that wait in the queue longer than this are auto-cancelled with `errorCode` `queue_timeout`. View the maximum at `GET /v1/simc/usage` under `limits.maxQueueSeconds`. */
1140
+ queueSeconds: number | null;
1141
+ };
1142
+ };
1143
+ /** @description True if this job was retried automatically because of a platform error. The response reflects the latest retry attempt. */
1144
+ retried: boolean;
1145
+ build: {
816
1146
  /**
817
- * Format: date-time
818
- * @description When a cancel was requested. Null when no cancel has been requested.
1147
+ * Format: uuid
1148
+ * @description Build ID. `GET /v1/simc/builds/{id}` returns the full build record.
819
1149
  */
820
- cancelRequestedAt: string | null;
821
- /** @enum {string|null} */
822
- errorCode: "execution_interrupted" | "execution_timeout" | "execution_failed" | "build_unavailable" | "simulation_error" | "queue_timeout" | "input_invalid" | "insufficient_credits" | "user_cancelled" | "internal" | null;
823
- /** @description Human-readable explanation for the terminal status, paired with `errorCode`. */
824
- statusReason: string | null;
825
- /** @description SimC process exit code. */
826
- simcExitCode: string | null;
827
- /** @description Number of days artifacts are retained after `completedAt`. After this window, artifact endpoints return `410`. */
828
- retentionDays: number | null;
829
- /** @description Opaque metadata echoed back exactly as submitted (for example `profileSource`, `characterRef`). Not used for scheduling or sim execution. */
830
- metadata: {
831
- [key: string]: unknown;
832
- } | null;
833
- runtime: {
834
- /** @description SimC process wall-clock time in milliseconds. Excludes setup and teardown time. Null if the job has not completed or the sim did not start. */
835
- simDurationMs: number | null;
836
- /** @description Total wall-clock time from job start to completion (milliseconds). Includes sim execution, artifact generation, and post-processing. Null when the job has not yet run. */
837
- totalDurationMs: number | null;
838
- /** @description Credits charged for this job, including any priority fee. `0` for terminal jobs with no billable work. Null until the job reaches a terminal state. */
839
- creditsConsumed: number | null;
840
- /** @description Priority surcharge included in `creditsConsumed`. `0` for jobs submitted at `standard` or `background`; otherwise the `high`-priority fee in effect at submission time. View the current fee from `GET /v1/simc/usage` under `limits.priorityFeeCredits.high`. */
841
- priorityFeeCredits: number;
842
- /** @description vCPUs used for this job. Null before execution. */
843
- vcpus: number | null;
844
- ceiling: {
845
- /** @description The runtime ceiling that applied to this run, in seconds. View the maximum at `GET /v1/simc/usage` under `limits.maxRuntimeSeconds`. */
846
- runtimeSeconds: number | null;
847
- /** @description The queue timeout ceiling that applied to this run, in seconds. Jobs that wait in the queue longer than this are auto-cancelled with `errorCode` `queue_timeout`. View the maximum at `GET /v1/simc/usage` under `limits.maxQueueSeconds`. */
848
- queueSeconds: number | null;
849
- };
850
- };
851
- /** @description True if this job was retried automatically because of a platform error. The response reflects the latest retry attempt. */
852
- retried: boolean;
853
- build: {
1150
+ id: string;
1151
+ /** @enum {string} */
1152
+ channel: "nightly" | "weekly" | "latest";
1153
+ /** @description Git commit hash of the SimC source used for this build. */
1154
+ commit: string;
1155
+ /** @description Compact upstream CI summary (status and failure count) for this commit. The full per-check breakdown is on `GET /v1/simc/builds/{id}`. Null when CI data is unavailable. */
1156
+ ci: {
854
1157
  /**
855
- * Format: uuid
856
- * @description Build ID. `GET /v1/simc/builds/{id}` returns the full build record.
1158
+ * @description Computed CI status for the build commit. See GET /v1/simc/builds for full check details.
1159
+ * @enum {string}
857
1160
  */
858
- id: string;
859
- /** @enum {string} */
860
- channel: "nightly" | "weekly" | "latest";
861
- /** @description Git commit hash of the SimC source used for this build. */
862
- commit: string;
863
- /** @description Compact upstream CI summary (status and failure count) for this commit. The full per-check breakdown is on `GET /v1/simc/builds/{id}`. Null when CI data is unavailable. */
864
- ci: {
865
- /**
866
- * @description Computed CI status for the build commit. See GET /v1/simc/builds for full check details.
867
- * @enum {string}
868
- */
869
- status: "pass" | "partial" | "fail" | "unknown";
870
- /** @description Number of CI checks with non-success conclusions (failure, cancelled, timed_out, action_required). See GET /v1/simc/builds for check names. */
871
- failed: number;
872
- } | null;
1161
+ status: "pass" | "partial" | "fail" | "unknown";
1162
+ /** @description Number of CI checks with non-success conclusions (failure, cancelled, timed_out, action_required). See GET /v1/simc/builds for check names. */
1163
+ failed: number;
873
1164
  } | null;
874
- links: components["schemas"]["JobLinks"];
875
- };
1165
+ } | null;
1166
+ links: components["schemas"]["JobLinks"];
876
1167
  };
877
1168
  };
878
- /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
879
- 401: {
880
- headers: {
881
- [name: string]: unknown;
882
- };
883
- content: {
884
- "application/json": {
885
- error: string;
886
- /** @enum {string} */
887
- code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
888
- meta: {
889
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
890
- [key: string]: string | number | boolean | null;
891
- }[] | null;
892
- } | null;
893
- };
894
- };
1169
+ };
1170
+ /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
1171
+ 401: {
1172
+ headers: {
1173
+ [name: string]: unknown;
895
1174
  };
896
- /** @description Job not found */
897
- 404: {
898
- headers: {
899
- [name: string]: unknown;
1175
+ content: {
1176
+ "application/json": {
1177
+ error: string;
1178
+ /** @enum {string} */
1179
+ code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
1180
+ meta: {
1181
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1182
+ [key: string]: string | number | boolean | null;
1183
+ }[] | null;
1184
+ } | null;
1185
+ /**
1186
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1187
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1188
+ */
1189
+ requestId?: string;
900
1190
  };
901
- content: {
902
- "application/json": {
903
- error: string;
904
- code: string;
905
- meta: {
906
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
907
- [key: string]: string | number | boolean | null;
908
- }[] | null;
909
- } | null;
910
- };
1191
+ };
1192
+ };
1193
+ /** @description Job not found */
1194
+ 404: {
1195
+ headers: {
1196
+ [name: string]: unknown;
1197
+ };
1198
+ content: {
1199
+ "application/json": {
1200
+ error: string;
1201
+ code: string;
1202
+ meta: {
1203
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1204
+ [key: string]: string | number | boolean | null;
1205
+ }[] | null;
1206
+ } | null;
1207
+ /**
1208
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1209
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1210
+ */
1211
+ requestId?: string;
911
1212
  };
912
1213
  };
913
1214
  };
914
1215
  };
915
- put?: never;
916
- post?: never;
917
- delete?: never;
918
- options?: never;
919
- head?: never;
920
- patch?: never;
921
- trace?: never;
922
1216
  };
923
- "/v1/simc/jobs/{id}/result": {
1217
+ getJobResult: {
924
1218
  parameters: {
925
1219
  query?: never;
926
1220
  header?: never;
927
- path?: never;
1221
+ path: {
1222
+ id: string;
1223
+ };
928
1224
  cookie?: never;
929
1225
  };
930
- /**
931
- * Get a SimC job result
932
- * @description Returns the full result payload for a finished SimC job — summary metrics, runtime info, and artifact references. Available once the job reaches a terminal status (`completed`, `failed`, `cancelled`, or `timed_out`).
933
- */
934
- get: {
935
- parameters: {
936
- query?: never;
937
- header?: never;
938
- path: {
939
- id: string;
940
- };
941
- cookie?: never;
942
- };
943
- requestBody?: never;
944
- responses: {
945
- /** @description Full result payload for a finished job — summary metrics, runtime info, and artifact references. */
946
- 200: {
947
- headers: {
948
- [name: string]: unknown;
949
- };
950
- content: {
951
- "application/json": {
952
- id: string;
953
- /** @enum {string} */
954
- status: "completed" | "failed" | "cancelled" | "timed_out";
955
- /**
956
- * @description Effective priority the job is running at.
957
- * @enum {string}
958
- */
959
- priority: "background" | "standard" | "high";
960
- /** Format: date-time */
961
- createdAt: string | null;
962
- /**
963
- * Format: date-time
964
- * @description When this job began executing. Null when the job has not yet started.
965
- */
966
- startedAt: string | null;
967
- /** Format: date-time */
968
- completedAt: string | null;
1226
+ requestBody?: never;
1227
+ responses: {
1228
+ /** @description Full result payload for a finished job — summary metrics, runtime info, and artifact references. */
1229
+ 200: {
1230
+ headers: {
1231
+ [name: string]: unknown;
1232
+ };
1233
+ content: {
1234
+ "application/json": {
1235
+ id: string;
1236
+ /** @enum {string} */
1237
+ status: "completed" | "failed" | "cancelled" | "timed_out";
1238
+ /**
1239
+ * @description Effective priority the job is running at.
1240
+ * @enum {string}
1241
+ */
1242
+ priority: "background" | "standard" | "high";
1243
+ /** Format: date-time */
1244
+ createdAt: string | null;
1245
+ /**
1246
+ * Format: date-time
1247
+ * @description When this job began executing. Null when the job has not yet started.
1248
+ */
1249
+ startedAt: string | null;
1250
+ /** Format: date-time */
1251
+ completedAt: string | null;
1252
+ /**
1253
+ * Format: date-time
1254
+ * @description When a cancel was requested. Null when no cancel has been requested.
1255
+ */
1256
+ cancelRequestedAt: string | null;
1257
+ /** @enum {string|null} */
1258
+ errorCode: "execution_interrupted" | "execution_timeout" | "execution_failed" | "build_unavailable" | "simulation_error" | "queue_timeout" | "input_invalid" | "insufficient_credits" | "user_cancelled" | "internal" | null;
1259
+ /** @description Human-readable explanation for the terminal status, paired with `errorCode`. */
1260
+ statusReason: string | null;
1261
+ /** @description SimC process exit code. */
1262
+ simcExitCode: string | null;
1263
+ /** @description Number of days artifacts are retained after `completedAt`. After this window, artifact endpoints return `410`. */
1264
+ retentionDays: number | null;
1265
+ /** @description Opaque metadata echoed back exactly as submitted (for example `profileSource`, `characterRef`). Not used for scheduling or sim execution. */
1266
+ metadata: {
1267
+ [key: string]: unknown;
1268
+ } | null;
1269
+ runtime: {
1270
+ /** @description SimC process wall-clock time in milliseconds. Excludes setup and teardown time. Null if the job has not completed or the sim did not start. */
1271
+ simDurationMs: number | null;
1272
+ /** @description Total wall-clock time from job start to completion (milliseconds). Includes sim execution, artifact generation, and post-processing. Null when the job has not yet run. */
1273
+ totalDurationMs: number | null;
1274
+ /** @description Credits charged for this job, including any priority fee. `0` for terminal jobs with no billable work. Null until the job reaches a terminal state. */
1275
+ creditsConsumed: number | null;
1276
+ /** @description Priority surcharge included in `creditsConsumed`. `0` for jobs submitted at `standard` or `background`; otherwise the `high`-priority fee in effect at submission time. View the current fee from `GET /v1/simc/usage` under `limits.priorityFeeCredits.high`. */
1277
+ priorityFeeCredits: number;
1278
+ /** @description vCPUs used for this job. Null before execution. */
1279
+ vcpus: number | null;
1280
+ ceiling: {
1281
+ /** @description The runtime ceiling that applied to this run, in seconds. View the maximum at `GET /v1/simc/usage` under `limits.maxRuntimeSeconds`. */
1282
+ runtimeSeconds: number | null;
1283
+ /** @description The queue timeout ceiling that applied to this run, in seconds. Jobs that wait in the queue longer than this are auto-cancelled with `errorCode` `queue_timeout`. View the maximum at `GET /v1/simc/usage` under `limits.maxQueueSeconds`. */
1284
+ queueSeconds: number | null;
1285
+ };
1286
+ };
1287
+ /** @description True if this job was retried automatically because of a platform error. The response reflects the latest retry attempt. */
1288
+ retried: boolean;
1289
+ build: {
969
1290
  /**
970
- * Format: date-time
971
- * @description When a cancel was requested. Null when no cancel has been requested.
1291
+ * Format: uuid
1292
+ * @description Build ID. `GET /v1/simc/builds/{id}` returns the full build record.
972
1293
  */
973
- cancelRequestedAt: string | null;
974
- /** @enum {string|null} */
975
- errorCode: "execution_interrupted" | "execution_timeout" | "execution_failed" | "build_unavailable" | "simulation_error" | "queue_timeout" | "input_invalid" | "insufficient_credits" | "user_cancelled" | "internal" | null;
976
- /** @description Human-readable explanation for the terminal status, paired with `errorCode`. */
977
- statusReason: string | null;
978
- /** @description SimC process exit code. */
979
- simcExitCode: string | null;
980
- /** @description Number of days artifacts are retained after `completedAt`. After this window, artifact endpoints return `410`. */
981
- retentionDays: number | null;
982
- /** @description Opaque metadata echoed back exactly as submitted (for example `profileSource`, `characterRef`). Not used for scheduling or sim execution. */
983
- metadata: {
984
- [key: string]: unknown;
985
- } | null;
986
- runtime: {
987
- /** @description SimC process wall-clock time in milliseconds. Excludes setup and teardown time. Null if the job has not completed or the sim did not start. */
988
- simDurationMs: number | null;
989
- /** @description Total wall-clock time from job start to completion (milliseconds). Includes sim execution, artifact generation, and post-processing. Null when the job has not yet run. */
990
- totalDurationMs: number | null;
991
- /** @description Credits charged for this job, including any priority fee. `0` for terminal jobs with no billable work. Null until the job reaches a terminal state. */
992
- creditsConsumed: number | null;
993
- /** @description Priority surcharge included in `creditsConsumed`. `0` for jobs submitted at `standard` or `background`; otherwise the `high`-priority fee in effect at submission time. View the current fee from `GET /v1/simc/usage` under `limits.priorityFeeCredits.high`. */
994
- priorityFeeCredits: number;
995
- /** @description vCPUs used for this job. Null before execution. */
996
- vcpus: number | null;
997
- ceiling: {
998
- /** @description The runtime ceiling that applied to this run, in seconds. View the maximum at `GET /v1/simc/usage` under `limits.maxRuntimeSeconds`. */
999
- runtimeSeconds: number | null;
1000
- /** @description The queue timeout ceiling that applied to this run, in seconds. Jobs that wait in the queue longer than this are auto-cancelled with `errorCode` `queue_timeout`. View the maximum at `GET /v1/simc/usage` under `limits.maxQueueSeconds`. */
1001
- queueSeconds: number | null;
1002
- };
1003
- };
1004
- /** @description True if this job was retried automatically because of a platform error. The response reflects the latest retry attempt. */
1005
- retried: boolean;
1006
- build: {
1294
+ id: string;
1295
+ /** @enum {string} */
1296
+ channel: "nightly" | "weekly" | "latest";
1297
+ /** @description Git commit hash of the SimC source used for this build. */
1298
+ commit: string;
1299
+ /** @description Compact upstream CI summary (status and failure count) for this commit. The full per-check breakdown is on `GET /v1/simc/builds/{id}`. Null when CI data is unavailable. */
1300
+ ci: {
1007
1301
  /**
1008
- * Format: uuid
1009
- * @description Build ID. `GET /v1/simc/builds/{id}` returns the full build record.
1302
+ * @description Computed CI status for the build commit. See GET /v1/simc/builds for full check details.
1303
+ * @enum {string}
1010
1304
  */
1011
- id: string;
1012
- /** @enum {string} */
1013
- channel: "nightly" | "weekly" | "latest";
1014
- /** @description Git commit hash of the SimC source used for this build. */
1015
- commit: string;
1016
- /** @description Compact upstream CI summary (status and failure count) for this commit. The full per-check breakdown is on `GET /v1/simc/builds/{id}`. Null when CI data is unavailable. */
1017
- ci: {
1018
- /**
1019
- * @description Computed CI status for the build commit. See GET /v1/simc/builds for full check details.
1020
- * @enum {string}
1021
- */
1022
- status: "pass" | "partial" | "fail" | "unknown";
1023
- /** @description Number of CI checks with non-success conclusions (failure, cancelled, timed_out, action_required). See GET /v1/simc/builds for check names. */
1024
- failed: number;
1025
- } | null;
1305
+ status: "pass" | "partial" | "fail" | "unknown";
1306
+ /** @description Number of CI checks with non-success conclusions (failure, cancelled, timed_out, action_required). See GET /v1/simc/builds for check names. */
1307
+ failed: number;
1026
1308
  } | null;
1027
- links: components["schemas"]["JobLinks"];
1028
- result: {
1029
- summary: {
1030
- /**
1031
- * @description Primary metric used for ranking.
1032
- * @enum {string}
1033
- */
1034
- metric: "dps";
1035
- /** @description Result for the headline actor (selected by SimC's `profileset_main_actor_index` directive, default `0`). When profileset results are available, this object also carries a `profilesets` block (`{ count, results }`) for the sweep over this actor; the block is omitted when no results are available (the input declared no profilesets, or none were produced). For multi-player sims using `copy=` or `set=`, per-player results for the remaining actors are in the JSON artifact — that multi-player case is separate from the profileset sweep. */
1036
- mainActor: {
1037
- /** @description Actor name as defined in your profile. */
1038
- name: string;
1039
- /** @description Mean DPS across all iterations. */
1040
- mean: number;
1041
- /** @description The ± DPS error on `mean` — the half-width of its 95% confidence interval, equal to `mean_stddev` × 1.96. This is the same error SimC reports. */
1042
- mean_error: number;
1043
- /** @description Standard error of the mean DPS (the standard deviation of the mean estimate). */
1044
- mean_stddev: number;
1045
- /** @description Profileset sweep results scoped to this actor (mirrors SimC's `sim.profilesets` block shape). Omitted when no profileset results are available — either the input declared no profilesets, or none were produced. */
1046
- profilesets?: {
1047
- /** @description Total number of profilesets in the sim result. When this exceeds the length of `results`, the array was truncated to the top 200 entries by DPS. The full set is available in the JSON artifact. */
1048
- count: number;
1049
- /** @description Profileset sweep entries, ranked by DPS (highest first). Truncated to the top 200 entries — see `count` and the JSON artifact for the full set. */
1050
- results: {
1051
- /** @description Profileset name as defined in your input. */
1052
- name: string;
1053
- /** @description Mean DPS across all iterations. */
1054
- mean: number;
1055
- /** @description The ± DPS error on `mean` — the half-width of its 95% confidence interval, equal to `mean_stddev` × 1.96. This is the same error SimC reports. */
1056
- mean_error: number;
1057
- /** @description Standard error of the mean DPS (the standard deviation of the mean estimate). */
1058
- mean_stddev: number;
1059
- /** @description For multistage runs, the highest stage this profileset reached — it was culled after this stage, or it survived to the final stage. Earlier stages run at a coarser `target_error`, so a result from an earlier stage carries a larger `mean_error` than a final-stage result. `1` for single-pass runs. */
1060
- stage: number;
1061
- }[];
1062
- };
1063
- } | null;
1064
- /** @description Multistage execution metadata. */
1065
- multiStage: {
1066
- /** @description Whether multistage execution ran. */
1067
- enabled: boolean;
1068
- /**
1069
- * @description Why multistage execution did or did not run.
1070
- * @enum {string}
1071
- */
1072
- reason: "disabled_by_option" | "unsupported_stage_sensitive_directive" | "unsupported_copy_set_only" | "unsupported_mixed_profileset_copy_set" | "no_variants_in_input" | "unsupported_multi_actor" | "no_profileset_candidates" | "below_min_candidates" | "eligible_profileset_only";
1073
- /** @description Per-stage funnel for multistage execution, in execution order. Empty for single-pass runs. */
1074
- stages: {
1075
- /** @description Stage number (1-indexed). */
1309
+ } | null;
1310
+ links: components["schemas"]["JobLinks"];
1311
+ result: {
1312
+ summary: {
1313
+ /**
1314
+ * @description Primary metric used for ranking.
1315
+ * @enum {string}
1316
+ */
1317
+ metric: "dps";
1318
+ /** @description Result for the headline actor (selected by SimC's `profileset_main_actor_index` directive, default `0`). When profileset results are available, this object also carries a `profilesets` block (`{ count, results }`) for the sweep over this actor; the block is omitted when no results are available (the input declared no profilesets, or none were produced). For multi-player sims using `copy=` or `set=`, per-player results for the remaining actors are in the JSON artifact — that multi-player case is separate from the profileset sweep. */
1319
+ mainActor: {
1320
+ /** @description Actor name as defined in your profile. */
1321
+ name: string;
1322
+ /** @description Mean DPS across all iterations. */
1323
+ mean: number;
1324
+ /** @description The ± DPS error on `mean` — the half-width of its 95% confidence interval, equal to `mean_stddev` × 1.96. This is the same error SimC reports. */
1325
+ mean_error: number;
1326
+ /** @description Standard error of the mean DPS (the standard deviation of the mean estimate). */
1327
+ mean_stddev: number;
1328
+ /** @description Profileset sweep results scoped to this actor (mirrors SimC's `sim.profilesets` block shape). Omitted when no profileset results are available — either the input declared no profilesets, or none were produced. */
1329
+ profilesets?: {
1330
+ /** @description Total number of profilesets in the sim result. When this exceeds the length of `results`, the array was truncated to the top 200 entries by DPS. The full set is available in the JSON artifact. */
1331
+ count: number;
1332
+ /** @description Profileset sweep entries, ranked by DPS (highest first). Truncated to the top 200 entries — see `count` and the JSON artifact for the full set. */
1333
+ results: {
1334
+ /** @description Profileset name as defined in your input. */
1335
+ name: string;
1336
+ /** @description Mean DPS across all iterations. */
1337
+ mean: number;
1338
+ /** @description The ± DPS error on `mean` — the half-width of its 95% confidence interval, equal to `mean_stddev` × 1.96. This is the same error SimC reports. */
1339
+ mean_error: number;
1340
+ /** @description Standard error of the mean DPS (the standard deviation of the mean estimate). */
1341
+ mean_stddev: number;
1342
+ /** @description For multistage runs, the highest stage this profileset reached — it was culled after this stage, or it survived to the final stage. Earlier stages run at a coarser `target_error`, so a result from an earlier stage carries a larger `mean_error` than a final-stage result. `1` for single-pass runs. */
1076
1343
  stage: number;
1077
- /** @description Human-readable stage name (`initial`, `intermediate`, `final`). */
1078
- label: string;
1079
- /** @description Number of profilesets executed in this stage. */
1080
- profilesets: number;
1081
- /** @description Number of profilesets eliminated at the end of this stage based on ranking. These do not advance to the next stage. The last executed stage always reports `0` (no culling occurs after the last stage). */
1082
- culled: number;
1083
1344
  }[];
1084
1345
  };
1085
1346
  } | null;
1086
- artifacts: {
1087
- id: string;
1347
+ /** @description Multistage execution metadata. */
1348
+ multiStage: {
1349
+ /** @description Whether multistage execution ran. */
1350
+ enabled: boolean;
1088
1351
  /**
1089
- * Format: uri
1090
- * @description Stable public URL for downloading this artifact. Valid for the full retention window of the job.
1352
+ * @description Why multistage execution did or did not run.
1353
+ * @enum {string}
1091
1354
  */
1092
- url: string;
1093
- /** @description Type of artifact (for example `html_report`, `json_report`, `stdout_log`). */
1094
- kind: string;
1095
- /** @description MIME type of the artifact content. */
1096
- mimeType: string;
1097
- /** @description Stage number for multistage execution artifacts (1-indexed). Null for single-run jobs or artifacts not associated with a specific multistage stage. */
1098
- stage: number | null;
1099
- }[];
1100
- };
1101
- };
1102
- };
1103
- };
1104
- /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
1105
- 401: {
1106
- headers: {
1107
- [name: string]: unknown;
1108
- };
1109
- content: {
1110
- "application/json": {
1111
- error: string;
1112
- /** @enum {string} */
1113
- code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
1114
- meta: {
1115
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1116
- [key: string]: string | number | boolean | null;
1117
- }[] | null;
1355
+ reason: "disabled_by_option" | "unsupported_stage_sensitive_directive" | "unsupported_copy_set_only" | "unsupported_mixed_profileset_copy_set" | "no_variants_in_input" | "unsupported_multi_actor" | "no_profileset_candidates" | "below_min_candidates" | "eligible_profileset_only";
1356
+ /** @description Per-stage funnel for multistage execution, in execution order. Empty for single-pass runs. */
1357
+ stages: {
1358
+ /** @description Stage number (1-indexed). */
1359
+ stage: number;
1360
+ /** @description Human-readable stage name (`initial`, `intermediate`, `final`). */
1361
+ label: string;
1362
+ /** @description Number of profilesets executed in this stage. */
1363
+ profilesets: number;
1364
+ /** @description Number of profilesets eliminated at the end of this stage based on ranking. These do not advance to the next stage. The last executed stage always reports `0` (no culling occurs after the last stage). */
1365
+ culled: number;
1366
+ }[];
1367
+ };
1118
1368
  } | null;
1369
+ artifacts: {
1370
+ id: string;
1371
+ /**
1372
+ * Format: uri
1373
+ * @description Stable public URL for downloading this artifact. Valid for the full retention window of the job.
1374
+ */
1375
+ url: string;
1376
+ /**
1377
+ * @description Machine-readable artifact category. `html_report`: human-readable HTML report. `json_report`: machine-readable JSON results. `input`: the exact SimC input your job ran. `stdout_log` / `stderr_log`: raw SimC logs. Under multistage execution an artifact is identified by `kind` together with `stage` (the same `kind` appears once per stage); `stage` is null for single-run jobs.
1378
+ * @enum {string}
1379
+ */
1380
+ kind: "html_report" | "json_report" | "input" | "stdout_log" | "stderr_log";
1381
+ /**
1382
+ * @description MIME type of the artifact content, drawn from a fixed set: `application/json`, `text/html`, or `text/plain`.
1383
+ * @enum {string}
1384
+ */
1385
+ mimeType: "application/json" | "text/html" | "text/plain";
1386
+ /** @description Stage number for multistage execution artifacts (1-indexed). Null for single-run jobs or artifacts not associated with a specific multistage stage. */
1387
+ stage: number | null;
1388
+ }[];
1119
1389
  };
1120
1390
  };
1121
1391
  };
1122
- /** @description Job not found */
1123
- 404: {
1124
- headers: {
1125
- [name: string]: unknown;
1126
- };
1127
- content: {
1128
- "application/json": {
1129
- error: string;
1130
- code: string;
1131
- meta: {
1132
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1133
- [key: string]: string | number | boolean | null;
1134
- }[] | null;
1135
- } | null;
1136
- };
1392
+ };
1393
+ /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
1394
+ 401: {
1395
+ headers: {
1396
+ [name: string]: unknown;
1397
+ };
1398
+ content: {
1399
+ "application/json": {
1400
+ error: string;
1401
+ /** @enum {string} */
1402
+ code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
1403
+ meta: {
1404
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1405
+ [key: string]: string | number | boolean | null;
1406
+ }[] | null;
1407
+ } | null;
1408
+ /**
1409
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1410
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1411
+ */
1412
+ requestId?: string;
1137
1413
  };
1138
1414
  };
1139
- /** @description Result not ready. The job has not reached a terminal status yet. */
1140
- 409: {
1141
- headers: {
1142
- [name: string]: unknown;
1415
+ };
1416
+ /** @description Job not found */
1417
+ 404: {
1418
+ headers: {
1419
+ [name: string]: unknown;
1420
+ };
1421
+ content: {
1422
+ "application/json": {
1423
+ error: string;
1424
+ code: string;
1425
+ meta: {
1426
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1427
+ [key: string]: string | number | boolean | null;
1428
+ }[] | null;
1429
+ } | null;
1430
+ /**
1431
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1432
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1433
+ */
1434
+ requestId?: string;
1143
1435
  };
1144
- content: {
1145
- "application/json": {
1146
- error: string;
1436
+ };
1437
+ };
1438
+ /** @description Result not ready. The job has not reached a terminal status yet. */
1439
+ 409: {
1440
+ headers: {
1441
+ [name: string]: unknown;
1442
+ };
1443
+ content: {
1444
+ "application/json": {
1445
+ error: string;
1446
+ /** @enum {string} */
1447
+ code: "result_not_ready";
1448
+ meta: {
1147
1449
  /** @enum {string} */
1148
- code: "result_not_ready";
1149
- meta: {
1150
- /** @enum {string} */
1151
- status: "pending" | "queued" | "starting" | "running";
1152
- };
1450
+ status: "pending" | "queued" | "starting" | "running";
1153
1451
  };
1452
+ /**
1453
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1454
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1455
+ */
1456
+ requestId?: string;
1154
1457
  };
1155
1458
  };
1156
- /** @description Result unavailable. The job is terminal but no result payload was produced. */
1157
- 422: {
1158
- headers: {
1159
- [name: string]: unknown;
1160
- };
1161
- content: {
1162
- "application/json": {
1163
- error: string;
1459
+ };
1460
+ /** @description Result unavailable. The job is terminal but no result payload was produced. */
1461
+ 422: {
1462
+ headers: {
1463
+ [name: string]: unknown;
1464
+ };
1465
+ content: {
1466
+ "application/json": {
1467
+ error: string;
1468
+ /** @enum {string} */
1469
+ code: "result_unavailable";
1470
+ meta: {
1164
1471
  /** @enum {string} */
1165
- code: "result_unavailable";
1166
- meta: {
1167
- /** @enum {string} */
1168
- status: "completed" | "failed" | "cancelled" | "timed_out";
1169
- };
1472
+ status: "completed" | "failed" | "cancelled" | "timed_out";
1170
1473
  };
1474
+ /**
1475
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1476
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1477
+ */
1478
+ requestId?: string;
1171
1479
  };
1172
1480
  };
1173
1481
  };
1174
1482
  };
1175
- put?: never;
1176
- post?: never;
1177
- delete?: never;
1178
- options?: never;
1179
- head?: never;
1180
- patch?: never;
1181
- trace?: never;
1182
1483
  };
1183
- "/v1/simc/jobs/{id}/status": {
1484
+ getJobStatus: {
1184
1485
  parameters: {
1185
- query?: never;
1486
+ query?: {
1487
+ /** @description Comma-separated list of optional fields to include. Supported: `logEntries` (structured log entries from stdout and stderr for running jobs). */
1488
+ include?: string;
1489
+ };
1186
1490
  header?: never;
1187
- path?: never;
1491
+ path: {
1492
+ id: string;
1493
+ };
1188
1494
  cookie?: never;
1189
1495
  };
1190
- /**
1191
- * Poll a SimC job status
1192
- * @description Returns the current status, queue position, and progress for a SimC job. Designed for polling while a sim runs. Use `include` to add optional fields like `logEntries`.
1193
- */
1194
- get: {
1195
- parameters: {
1196
- query?: {
1197
- /** @description Comma-separated list of optional fields to include. Supported: `logEntries` (structured log entries from stdout and stderr for running jobs). */
1198
- include?: string;
1199
- };
1200
- header?: never;
1201
- path: {
1202
- id: string;
1496
+ requestBody?: never;
1497
+ responses: {
1498
+ /** @description Current status, queue position, and progress for the job. */
1499
+ 200: {
1500
+ headers: {
1501
+ /** @description Your in-flight job count at the time of this response. */
1502
+ "X-Active-Jobs": string;
1503
+ /** @description Your account ceiling for in-flight jobs. */
1504
+ "X-Max-Active-Jobs": string;
1505
+ /** @description Correlation id for this request, present on every response. The same value is echoed in the `requestId` field of error bodies. */
1506
+ "X-Request-Id": string;
1507
+ [name: string]: unknown;
1203
1508
  };
1204
- cookie?: never;
1205
- };
1206
- requestBody?: never;
1207
- responses: {
1208
- /** @description Current status, queue position, and progress for the job. */
1209
- 200: {
1210
- headers: {
1211
- /** @description Your in-flight job count at the time of this response. */
1212
- "X-Active-Jobs": string;
1213
- /** @description Your account ceiling for in-flight jobs. */
1214
- "X-Max-Active-Jobs": string;
1215
- [name: string]: unknown;
1216
- };
1217
- content: {
1218
- "application/json": {
1219
- /**
1220
- * @description Current job status. Terminal values: completed, failed, cancelled, timed_out.
1221
- * @enum {string}
1222
- */
1223
- status: "pending" | "queued" | "starting" | "running" | "completed" | "failed" | "cancelled" | "timed_out";
1509
+ content: {
1510
+ "application/json": {
1511
+ /**
1512
+ * @description Current job status. Terminal values: completed, failed, cancelled, timed_out.
1513
+ * @enum {string}
1514
+ */
1515
+ status: "pending" | "queued" | "starting" | "running" | "completed" | "failed" | "cancelled" | "timed_out";
1516
+ /**
1517
+ * @description Machine-readable error code for the terminal state. Null when the job is not terminal or completed successfully.
1518
+ * @enum {string|null}
1519
+ */
1520
+ errorCode: "execution_interrupted" | "execution_timeout" | "execution_failed" | "build_unavailable" | "simulation_error" | "queue_timeout" | "input_invalid" | "insufficient_credits" | "user_cancelled" | "internal" | null;
1521
+ /** @description Human-readable explanation paired with `errorCode`. Null when the job is not terminal or no additional detail is available. */
1522
+ statusReason: string | null;
1523
+ /** @description SimC process exit code. Null when the job is not terminal. */
1524
+ simcExitCode: string | null;
1525
+ queue: {
1526
+ /** @description Estimated seconds until this job begins running. Updated on each poll; not a guarantee. Null when no estimate is available. */
1527
+ estimatedStartSeconds: number | null;
1224
1528
  /**
1225
- * @description Machine-readable error code for the terminal state. Null when the job is not terminal or completed successfully.
1226
- * @enum {string|null}
1529
+ * Format: date-time
1530
+ * @description When this estimate was last computed.
1227
1531
  */
1228
- errorCode: "execution_interrupted" | "execution_timeout" | "execution_failed" | "build_unavailable" | "simulation_error" | "queue_timeout" | "input_invalid" | "insufficient_credits" | "user_cancelled" | "internal" | null;
1229
- /** @description Human-readable explanation paired with `errorCode`. Null when the job is not terminal or no additional detail is available. */
1230
- statusReason: string | null;
1231
- /** @description SimC process exit code. Null when the job is not terminal. */
1232
- simcExitCode: string | null;
1233
- queue: {
1234
- /** @description Estimated seconds until this job begins running. Updated on each poll; not a guarantee. Null when no estimate is available. */
1235
- estimatedStartSeconds: number | null;
1236
- /**
1237
- * Format: date-time
1238
- * @description When this estimate was last computed.
1239
- */
1240
- estimatedStartUpdatedAt: string | null;
1532
+ estimatedStartUpdatedAt: string | null;
1533
+ } | null;
1534
+ progress: {
1535
+ /** @description Estimated completion percentage (0–100). Null when not yet running. */
1536
+ percent: number | null;
1537
+ /** @description Stage progress detail while the job is running. Null before the job starts running and once it reaches a terminal state. Single-pass jobs report `{ current: 1, total: 1, label: "initial" }` with `percent` populated while running. */
1538
+ stage: {
1539
+ /** @description Current stage (1-indexed). */
1540
+ current: number;
1541
+ /** @description Total number of stages in this run. */
1542
+ total: number;
1543
+ /** @description Human-readable name of the current stage (for example "initial", "intermediate", "final"). */
1544
+ label: string;
1545
+ /** @description Estimated completion percentage (0–100) within the current stage. */
1546
+ percent: number;
1241
1547
  } | null;
1242
- progress: {
1243
- /** @description Estimated completion percentage (0–100). Null when not yet running. */
1244
- percent: number | null;
1245
- /** @description Stage progress detail while the job is running. Null before the job starts running and once it reaches a terminal state. Single-pass jobs report `{ current: 1, total: 1, label: "initial" }` with `percent` populated while running. */
1246
- stage: {
1247
- /** @description Current stage (1-indexed). */
1248
- current: number;
1249
- /** @description Total number of stages in this run. */
1250
- total: number;
1251
- /** @description Human-readable name of the current stage (for example "initial", "intermediate", "final"). */
1252
- label: string;
1253
- /** @description Estimated completion percentage (0–100) within the current stage. */
1254
- percent: number;
1255
- } | null;
1256
- };
1257
- /** @description Recent log lines from SimC stdout and stderr while the job is running. Each entry is tagged with its stream (`source`) and capture time (`ts`). Full logs are available as downloadable artifacts once the job completes. Null when not running or not requested via `include=logEntries`. */
1258
- logEntries: {
1259
- /**
1260
- * @description Which stream the line came from. `stderr` lines are diagnostic output — SimC warnings, errors, and notes. `stdout` lines are sim output, progress markers, and results.
1261
- * @enum {string}
1262
- */
1263
- source: "stdout" | "stderr";
1264
- /** @description The log line text. */
1265
- message: string;
1266
- /** @description Epoch milliseconds (UTC) when this line was captured. */
1267
- ts: number;
1268
- }[] | null;
1548
+ };
1549
+ /** @description Recent log lines from SimC stdout and stderr while the job is running. Each entry is tagged with its stream (`source`) and capture time (`ts`). Full logs are available as downloadable artifacts once the job completes. Null when not running or not requested via `include=logEntries`. */
1550
+ logEntries: {
1269
1551
  /**
1270
- * Format: date-time
1271
- * @description When this job began executing. Null when the job has not yet started.
1552
+ * @description Which stream the line came from. `stderr` lines are diagnostic output — SimC warnings, errors, and notes. `stdout` lines are sim output, progress markers, and results.
1553
+ * @enum {string}
1272
1554
  */
1273
- startedAt: string | null;
1274
- /** Format: date-time */
1275
- updatedAt: string | null;
1276
- /** @description True if this job was retried automatically because of a platform error. The response reflects the latest retry attempt. */
1277
- retried: boolean;
1278
- };
1555
+ source: "stdout" | "stderr";
1556
+ /** @description The log line text. */
1557
+ message: string;
1558
+ /** @description Epoch milliseconds (UTC) when this line was captured. */
1559
+ ts: number;
1560
+ }[] | null;
1561
+ /**
1562
+ * Format: date-time
1563
+ * @description When this job began executing. Null when the job has not yet started.
1564
+ */
1565
+ startedAt: string | null;
1566
+ /** Format: date-time */
1567
+ updatedAt: string | null;
1568
+ /** @description True if this job was retried automatically because of a platform error. The response reflects the latest retry attempt. */
1569
+ retried: boolean;
1279
1570
  };
1280
1571
  };
1281
- /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
1282
- 401: {
1283
- headers: {
1284
- [name: string]: unknown;
1285
- };
1286
- content: {
1287
- "application/json": {
1288
- error: string;
1289
- /** @enum {string} */
1290
- code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
1291
- meta: {
1292
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1293
- [key: string]: string | number | boolean | null;
1294
- }[] | null;
1295
- } | null;
1296
- };
1297
- };
1572
+ };
1573
+ /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
1574
+ 401: {
1575
+ headers: {
1576
+ [name: string]: unknown;
1298
1577
  };
1299
- /** @description Job not found */
1300
- 404: {
1301
- headers: {
1302
- [name: string]: unknown;
1578
+ content: {
1579
+ "application/json": {
1580
+ error: string;
1581
+ /** @enum {string} */
1582
+ code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
1583
+ meta: {
1584
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1585
+ [key: string]: string | number | boolean | null;
1586
+ }[] | null;
1587
+ } | null;
1588
+ /**
1589
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1590
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1591
+ */
1592
+ requestId?: string;
1303
1593
  };
1304
- content: {
1305
- "application/json": {
1306
- error: string;
1307
- code: string;
1308
- meta: {
1309
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1310
- [key: string]: string | number | boolean | null;
1311
- }[] | null;
1312
- } | null;
1313
- };
1594
+ };
1595
+ };
1596
+ /** @description Job not found */
1597
+ 404: {
1598
+ headers: {
1599
+ [name: string]: unknown;
1600
+ };
1601
+ content: {
1602
+ "application/json": {
1603
+ error: string;
1604
+ code: string;
1605
+ meta: {
1606
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1607
+ [key: string]: string | number | boolean | null;
1608
+ }[] | null;
1609
+ } | null;
1610
+ /**
1611
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1612
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1613
+ */
1614
+ requestId?: string;
1314
1615
  };
1315
1616
  };
1316
1617
  };
1317
1618
  };
1318
- put?: never;
1319
- post?: never;
1320
- delete?: never;
1321
- options?: never;
1322
- head?: never;
1323
- patch?: never;
1324
- trace?: never;
1325
1619
  };
1326
- "/v1/simc/artifacts/{id}/url": {
1620
+ getArtifactUrl: {
1327
1621
  parameters: {
1328
1622
  query?: never;
1329
1623
  header?: never;
1330
- path?: never;
1624
+ path: {
1625
+ id: string;
1626
+ };
1331
1627
  cookie?: never;
1332
1628
  };
1333
- /**
1334
- * Get a SimC artifact URL
1335
- * @description Returns a stable public URL for a SimC job artifact (HTML report, JSON report, raw log, etc.), valid for the artifact's full retention window. Use this when you need to control the final fetch URL yourself — for example, browser flows that need explicit cross-origin handling.
1336
- */
1337
- get: {
1338
- parameters: {
1339
- query?: never;
1340
- header?: never;
1341
- path: {
1342
- id: string;
1343
- };
1344
- cookie?: never;
1345
- };
1346
- requestBody?: never;
1347
- responses: {
1348
- /** @description A stable public URL for downloading the artifact. Valid for the artifact's full retention window. */
1349
- 200: {
1350
- headers: {
1351
- [name: string]: unknown;
1352
- };
1353
- content: {
1354
- "application/json": {
1355
- /** Format: uri */
1356
- url: string;
1357
- };
1358
- };
1629
+ requestBody?: never;
1630
+ responses: {
1631
+ /** @description A stable public URL for downloading the artifact. Valid for the artifact's full retention window. */
1632
+ 200: {
1633
+ headers: {
1634
+ [name: string]: unknown;
1359
1635
  };
1360
- /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
1361
- 401: {
1362
- headers: {
1363
- [name: string]: unknown;
1364
- };
1365
- content: {
1366
- "application/json": {
1367
- error: string;
1368
- /** @enum {string} */
1369
- code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
1370
- meta: {
1371
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1372
- [key: string]: string | number | boolean | null;
1373
- }[] | null;
1374
- } | null;
1375
- };
1636
+ content: {
1637
+ "application/json": {
1638
+ /** Format: uri */
1639
+ url: string;
1376
1640
  };
1377
1641
  };
1378
- /** @description Artifact not found */
1379
- 404: {
1380
- headers: {
1381
- [name: string]: unknown;
1382
- };
1383
- content: {
1384
- "application/json": {
1385
- error: string;
1386
- code: string;
1387
- meta: {
1388
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1389
- [key: string]: string | number | boolean | null;
1390
- }[] | null;
1391
- } | null;
1392
- };
1642
+ };
1643
+ /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
1644
+ 401: {
1645
+ headers: {
1646
+ [name: string]: unknown;
1647
+ };
1648
+ content: {
1649
+ "application/json": {
1650
+ error: string;
1651
+ /** @enum {string} */
1652
+ code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
1653
+ meta: {
1654
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1655
+ [key: string]: string | number | boolean | null;
1656
+ }[] | null;
1657
+ } | null;
1658
+ /**
1659
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1660
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1661
+ */
1662
+ requestId?: string;
1393
1663
  };
1394
1664
  };
1395
- /** @description The artifact has expired and is no longer available. */
1396
- 410: {
1397
- headers: {
1398
- [name: string]: unknown;
1665
+ };
1666
+ /** @description Artifact not found */
1667
+ 404: {
1668
+ headers: {
1669
+ [name: string]: unknown;
1670
+ };
1671
+ content: {
1672
+ "application/json": {
1673
+ error: string;
1674
+ code: string;
1675
+ meta: {
1676
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1677
+ [key: string]: string | number | boolean | null;
1678
+ }[] | null;
1679
+ } | null;
1680
+ /**
1681
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1682
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1683
+ */
1684
+ requestId?: string;
1399
1685
  };
1400
- content: {
1401
- "application/json": {
1402
- error: string;
1403
- code: string;
1404
- meta: {
1405
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1406
- [key: string]: string | number | boolean | null;
1407
- }[] | null;
1408
- } | null;
1409
- };
1686
+ };
1687
+ };
1688
+ /** @description The artifact has expired and is no longer available. */
1689
+ 410: {
1690
+ headers: {
1691
+ [name: string]: unknown;
1692
+ };
1693
+ content: {
1694
+ "application/json": {
1695
+ error: string;
1696
+ code: string;
1697
+ meta: {
1698
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1699
+ [key: string]: string | number | boolean | null;
1700
+ }[] | null;
1701
+ } | null;
1702
+ /**
1703
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1704
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1705
+ */
1706
+ requestId?: string;
1410
1707
  };
1411
1708
  };
1412
1709
  };
1413
1710
  };
1414
- put?: never;
1415
- post?: never;
1416
- delete?: never;
1417
- options?: never;
1418
- head?: never;
1419
- patch?: never;
1420
- trace?: never;
1421
1711
  };
1422
- "/v1/simc/jobs/{id}/cancel": {
1712
+ cancelJob: {
1423
1713
  parameters: {
1424
1714
  query?: never;
1425
1715
  header?: never;
1426
- path?: never;
1716
+ path: {
1717
+ id: string;
1718
+ };
1427
1719
  cookie?: never;
1428
1720
  };
1429
- get?: never;
1430
- put?: never;
1431
- /**
1432
- * Cancel a SimC job
1433
- * @description Cancels one of your SimC jobs. Jobs that have not started running end immediately. Jobs already in flight are signaled to stop; poll `GET /v1/simc/jobs/{id}/status` to observe the transition to `cancelled`. Repeat calls return the same response.
1434
- */
1435
- post: {
1436
- parameters: {
1437
- query?: never;
1438
- header?: never;
1439
- path: {
1440
- id: string;
1441
- };
1442
- cookie?: never;
1443
- };
1444
- requestBody?: never;
1445
- responses: {
1446
- /** @description Cancel accepted. `status` is `cancelled` when the job ended before running, or `cancel_requested` when the job was already running and has been signaled to stop. */
1447
- 200: {
1448
- headers: {
1449
- [name: string]: unknown;
1450
- };
1451
- content: {
1452
- "application/json": {
1453
- /** @enum {boolean} */
1454
- success: true;
1455
- id: string;
1456
- /**
1457
- * @description The job ended before it started running and is fully cancelled.
1458
- * @enum {string}
1459
- */
1460
- status: "cancelled";
1461
- } | {
1462
- /** @enum {boolean} */
1463
- success: true;
1464
- id: string;
1465
- /**
1466
- * @description The job was already running and has been signaled to stop. Poll `GET /v1/simc/jobs/{id}` to observe the transition to `cancelled`.
1467
- * @enum {string}
1468
- */
1469
- status: "cancel_requested";
1470
- /**
1471
- * Format: date-time
1472
- * @description When the cancel was requested.
1473
- */
1474
- cancelRequestedAt: string;
1475
- };
1476
- };
1721
+ requestBody?: never;
1722
+ responses: {
1723
+ /** @description Cancel accepted. `status` is `cancelled` when the job ended before running, or `cancel_requested` when the job was already running and has been signaled to stop. */
1724
+ 200: {
1725
+ headers: {
1726
+ [name: string]: unknown;
1477
1727
  };
1478
- /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
1479
- 401: {
1480
- headers: {
1481
- [name: string]: unknown;
1482
- };
1483
- content: {
1484
- "application/json": {
1485
- error: string;
1486
- /** @enum {string} */
1487
- code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
1488
- meta: {
1489
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1490
- [key: string]: string | number | boolean | null;
1491
- }[] | null;
1492
- } | null;
1493
- };
1728
+ content: {
1729
+ "application/json": {
1730
+ /** @enum {boolean} */
1731
+ success: true;
1732
+ id: string;
1733
+ /**
1734
+ * @description The job ended before it started running and is fully cancelled.
1735
+ * @enum {string}
1736
+ */
1737
+ status: "cancelled";
1738
+ } | {
1739
+ /** @enum {boolean} */
1740
+ success: true;
1741
+ id: string;
1742
+ /**
1743
+ * @description The job was already running and has been signaled to stop. Poll `GET /v1/simc/jobs/{id}` to observe the transition to `cancelled`.
1744
+ * @enum {string}
1745
+ */
1746
+ status: "cancel_requested";
1747
+ /**
1748
+ * Format: date-time
1749
+ * @description When the cancel was requested.
1750
+ */
1751
+ cancelRequestedAt: string;
1494
1752
  };
1495
1753
  };
1496
- /** @description Job not found */
1497
- 404: {
1498
- headers: {
1499
- [name: string]: unknown;
1500
- };
1501
- content: {
1502
- "application/json": {
1503
- error: string;
1504
- code: string;
1505
- meta: {
1506
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1507
- [key: string]: string | number | boolean | null;
1508
- }[] | null;
1509
- } | null;
1510
- };
1754
+ };
1755
+ /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
1756
+ 401: {
1757
+ headers: {
1758
+ [name: string]: unknown;
1759
+ };
1760
+ content: {
1761
+ "application/json": {
1762
+ error: string;
1763
+ /** @enum {string} */
1764
+ code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
1765
+ meta: {
1766
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1767
+ [key: string]: string | number | boolean | null;
1768
+ }[] | null;
1769
+ } | null;
1770
+ /**
1771
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1772
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1773
+ */
1774
+ requestId?: string;
1511
1775
  };
1512
1776
  };
1513
- /** @description Job has already reached a terminal status. */
1514
- 409: {
1515
- headers: {
1516
- [name: string]: unknown;
1777
+ };
1778
+ /** @description Job not found */
1779
+ 404: {
1780
+ headers: {
1781
+ [name: string]: unknown;
1782
+ };
1783
+ content: {
1784
+ "application/json": {
1785
+ error: string;
1786
+ code: string;
1787
+ meta: {
1788
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1789
+ [key: string]: string | number | boolean | null;
1790
+ }[] | null;
1791
+ } | null;
1792
+ /**
1793
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1794
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1795
+ */
1796
+ requestId?: string;
1517
1797
  };
1518
- content: {
1519
- "application/json": {
1520
- error: string;
1798
+ };
1799
+ };
1800
+ /** @description Job has already reached a terminal status. */
1801
+ 409: {
1802
+ headers: {
1803
+ [name: string]: unknown;
1804
+ };
1805
+ content: {
1806
+ "application/json": {
1807
+ error: string;
1808
+ /** @enum {string} */
1809
+ code: "job_not_cancellable";
1810
+ meta: {
1811
+ id: string;
1521
1812
  /** @enum {string} */
1522
- code: "job_not_cancellable";
1523
- meta: {
1524
- id: string;
1525
- /** @enum {string} */
1526
- status: "pending" | "queued" | "starting" | "running" | "completed" | "failed" | "cancelled" | "timed_out";
1527
- };
1813
+ status: "pending" | "queued" | "starting" | "running" | "completed" | "failed" | "cancelled" | "timed_out";
1528
1814
  };
1529
1815
  };
1530
1816
  };
1531
1817
  };
1532
1818
  };
1533
- delete?: never;
1534
- options?: never;
1535
- head?: never;
1536
- patch?: never;
1537
- trace?: never;
1538
1819
  };
1539
- "/v1/simc/usage": {
1820
+ getUsage: {
1540
1821
  parameters: {
1541
1822
  query?: never;
1542
1823
  header?: never;
1543
1824
  path?: never;
1544
1825
  cookie?: never;
1545
1826
  };
1546
- /**
1547
- * Get your usage summary
1548
- * @description Returns your usage for the current period along with a live snapshot of queued and in-flight jobs. For your credit balance, see `GET /v1/simc/credits`.
1549
- */
1550
- get: {
1551
- parameters: {
1552
- query?: never;
1553
- header?: never;
1554
- path?: never;
1555
- cookie?: never;
1556
- };
1557
- requestBody?: never;
1558
- responses: {
1559
- /** @description Your usage summary, including both period-based metrics and live snapshot counters. */
1560
- 200: {
1561
- headers: {
1562
- /** @description Your in-flight job count at the time of this response. */
1563
- "X-Active-Jobs": string;
1564
- /** @description Your account ceiling for in-flight jobs. */
1565
- "X-Max-Active-Jobs": string;
1566
- [name: string]: unknown;
1567
- };
1568
- content: {
1569
- "application/json": {
1570
- period: {
1571
- /**
1572
- * Format: date-time
1573
- * @description UTC start of the usage period.
1574
- */
1575
- start: string | null;
1576
- /**
1577
- * Format: date-time
1578
- * @description UTC end of the usage period.
1579
- */
1580
- end: string | null;
1581
- /** @description Completed sims in the current period. */
1582
- simsRun: number;
1583
- /** @description Average runtime in seconds for completed sims in the current period. */
1584
- avgRuntimeSeconds: number | null;
1585
- /** @description API read requests consumed in the current period. */
1586
- readsUsed: number | null;
1587
- /** @description Maximum read requests allowed in the current period. Null means no cap. */
1588
- readsLimit: number | null;
1589
- /**
1590
- * Format: date-time
1591
- * @description When the current reads cap resets.
1592
- */
1593
- readsCapResetAt: string | null;
1594
- };
1595
- snapshot: {
1596
- /** @description Number of jobs currently in flight. The ceiling is `limits.maxActiveJobs`. */
1597
- activeJobs: number | null;
1598
- /** @description Number of jobs currently queued. */
1599
- queuedJobs: number | null;
1600
- /** @description Number of jobs currently running or starting. */
1601
- runningJobs: number | null;
1602
- };
1603
- limits: {
1604
- /** @description Maximum jobs your account can have in flight. */
1605
- maxActiveJobs: number | null;
1606
- /** @description Maximum wall-clock runtime per job in seconds. */
1607
- maxRuntimeSeconds: number | null;
1608
- /** @description Default runtime per job in seconds. */
1609
- defaultRuntimeSeconds: number | null;
1610
- /** @description Maximum time in seconds a job may wait in the queue before being cancelled. */
1611
- maxQueueSeconds: number | null;
1612
- /** @description Default queue wait per job in seconds. */
1613
- defaultQueueSeconds: number | null;
1614
- /** @description Number of vCPUs allocated to each job. */
1615
- vcpuPerJob: number;
1616
- /** @description Maximum simc variants (profilesets, copies, sets) allowed per job. Null means no cap. */
1617
- maxSimcVariants: number | null;
1618
- /** @description Per-job priority surcharge in credits, by priority. Added to the base compute cost for jobs submitted at `high`. */
1619
- priorityFeeCredits: {
1620
- high?: number;
1621
- };
1827
+ requestBody?: never;
1828
+ responses: {
1829
+ /** @description Your usage summary, including both period-based metrics and live snapshot counters. */
1830
+ 200: {
1831
+ headers: {
1832
+ /** @description Your in-flight job count at the time of this response. */
1833
+ "X-Active-Jobs": string;
1834
+ /** @description Your account ceiling for in-flight jobs. */
1835
+ "X-Max-Active-Jobs": string;
1836
+ /** @description Correlation id for this request, present on every response. The same value is echoed in the `requestId` field of error bodies. */
1837
+ "X-Request-Id": string;
1838
+ [name: string]: unknown;
1839
+ };
1840
+ content: {
1841
+ "application/json": {
1842
+ period: {
1843
+ /**
1844
+ * Format: date-time
1845
+ * @description UTC start of the usage period.
1846
+ */
1847
+ start: string | null;
1848
+ /**
1849
+ * Format: date-time
1850
+ * @description UTC end of the usage period.
1851
+ */
1852
+ end: string | null;
1853
+ /** @description Completed sims in the current period. */
1854
+ simsRun: number;
1855
+ /** @description Average runtime in seconds for completed sims in the current period. */
1856
+ avgRuntimeSeconds: number | null;
1857
+ /** @description API read requests consumed in the current period. */
1858
+ readsUsed: number | null;
1859
+ /** @description Maximum read requests allowed in the current period. Null means no cap. */
1860
+ readsLimit: number | null;
1861
+ /**
1862
+ * Format: date-time
1863
+ * @description When the current reads cap resets.
1864
+ */
1865
+ readsCapResetAt: string | null;
1866
+ };
1867
+ snapshot: {
1868
+ /** @description Number of jobs currently in flight. The ceiling is `limits.maxActiveJobs`. */
1869
+ activeJobs: number | null;
1870
+ /** @description Number of jobs currently queued. */
1871
+ queuedJobs: number | null;
1872
+ /** @description Number of jobs currently running or starting. */
1873
+ runningJobs: number | null;
1874
+ };
1875
+ limits: {
1876
+ /** @description Maximum jobs your account can have in flight. */
1877
+ maxActiveJobs: number | null;
1878
+ /** @description Maximum wall-clock runtime per job in seconds. */
1879
+ maxRuntimeSeconds: number | null;
1880
+ /** @description Default runtime per job in seconds. */
1881
+ defaultRuntimeSeconds: number | null;
1882
+ /** @description Maximum time in seconds a job may wait in the queue before being cancelled. */
1883
+ maxQueueSeconds: number | null;
1884
+ /** @description Default queue wait per job in seconds. */
1885
+ defaultQueueSeconds: number | null;
1886
+ /** @description Number of vCPUs allocated to each job. */
1887
+ vcpuPerJob: number;
1888
+ /** @description Maximum simc variants (profilesets, copies, sets) allowed per job. Null means no cap. */
1889
+ maxSimcVariants: number | null;
1890
+ /** @description Per-job priority surcharge in credits, by priority. Added to the base compute cost for jobs submitted at `high`. */
1891
+ priorityFeeCredits: {
1892
+ high?: number;
1622
1893
  };
1623
1894
  };
1624
1895
  };
1625
1896
  };
1626
- /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
1627
- 401: {
1628
- headers: {
1629
- [name: string]: unknown;
1630
- };
1631
- content: {
1632
- "application/json": {
1633
- error: string;
1634
- /** @enum {string} */
1635
- code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
1636
- meta: {
1637
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1638
- [key: string]: string | number | boolean | null;
1639
- }[] | null;
1640
- } | null;
1641
- };
1897
+ };
1898
+ /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
1899
+ 401: {
1900
+ headers: {
1901
+ [name: string]: unknown;
1902
+ };
1903
+ content: {
1904
+ "application/json": {
1905
+ error: string;
1906
+ /** @enum {string} */
1907
+ code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
1908
+ meta: {
1909
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1910
+ [key: string]: string | number | boolean | null;
1911
+ }[] | null;
1912
+ } | null;
1913
+ /**
1914
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1915
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1916
+ */
1917
+ requestId?: string;
1642
1918
  };
1643
1919
  };
1644
1920
  };
1645
1921
  };
1646
- put?: never;
1647
- post?: never;
1648
- delete?: never;
1649
- options?: never;
1650
- head?: never;
1651
- patch?: never;
1652
- trace?: never;
1653
1922
  };
1654
- "/v1/simc/credits": {
1923
+ getCredits: {
1655
1924
  parameters: {
1656
1925
  query?: never;
1657
1926
  header?: never;
1658
1927
  path?: never;
1659
1928
  cookie?: never;
1660
1929
  };
1661
- /**
1662
- * Get your credit balance and active grants
1663
- * @description Returns your credit balance, split between purchased credits and any active grants. Total available credits equal `purchased + sum(grants[].remaining)`. `reserved` reports credits currently held against in-flight jobs and is already excluded from both `purchased` and `grants[].remaining`.
1664
- *
1665
- * Consumption order: grants are spent before purchased credits, with the earliest-expiring grant spent first. Grants without an expiry are spent last.
1666
- *
1667
- * For transaction history and lifetime totals, see the dashboard.
1668
- */
1669
- get: {
1670
- parameters: {
1671
- query?: never;
1672
- header?: never;
1673
- path?: never;
1674
- cookie?: never;
1675
- };
1676
- requestBody?: never;
1677
- responses: {
1678
- /** @description Your credit balance and active grants. */
1679
- 200: {
1680
- headers: {
1681
- [name: string]: unknown;
1682
- };
1683
- content: {
1684
- "application/json": {
1685
- /** @description Total purchased credit balance. Purchased credits do not expire. */
1686
- purchased: number;
1687
- /** @description Credits currently held against your in-flight jobs. Refunded on settlement (any unused amount returns to `purchased` and `grants[].remaining`). Excluded from `purchased` and `grants[].remaining`. */
1688
- reserved: number;
1689
- /** @description Your active grants, ordered by expiry (soonest first; grants without expiry last). Empty when no grants are active. */
1690
- grants: {
1691
- id: string;
1692
- /**
1693
- * @description The reason this grant was issued.
1694
- * @enum {string}
1695
- */
1696
- reason: "grant_sandbox_allowance" | "grant_developer_allowance" | "grant_beta" | "grant_promo" | "grant_onboarding" | "grant_sandbox_restricted_onboarding" | "grant_personal_allowance";
1697
- /** @description Credits currently available in this grant. Excludes any credits already committed to in-flight jobs. */
1698
- remaining: number;
1699
- /** @description Credits originally issued in this grant. */
1700
- original: number;
1701
- /**
1702
- * Format: date-time
1703
- * @description When this grant expires. `null` means the grant has no expiry. After expiry, any remaining credits in the grant are forfeited and the grant no longer appears in this response.
1704
- */
1705
- expiresAt: string | null;
1706
- }[];
1707
- };
1708
- };
1930
+ requestBody?: never;
1931
+ responses: {
1932
+ /** @description Your credit balance and active grants. */
1933
+ 200: {
1934
+ headers: {
1935
+ /** @description Correlation id for this request, present on every response. The same value is echoed in the `requestId` field of error bodies. */
1936
+ "X-Request-Id": string;
1937
+ [name: string]: unknown;
1709
1938
  };
1710
- /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
1711
- 401: {
1712
- headers: {
1713
- [name: string]: unknown;
1939
+ content: {
1940
+ "application/json": {
1941
+ /** @description Total purchased credit balance. Purchased credits do not expire. */
1942
+ purchased: number;
1943
+ /** @description Credits currently held against your in-flight jobs. Refunded on settlement (any unused amount returns to `purchased` and `grants[].remaining`). Excluded from `purchased` and `grants[].remaining`. */
1944
+ reserved: number;
1945
+ /** @description Your active grants, ordered by expiry (soonest first; grants without expiry last). Empty when no grants are active. */
1946
+ grants: {
1947
+ id: string;
1948
+ /**
1949
+ * @description The reason this grant was issued.
1950
+ * @enum {string}
1951
+ */
1952
+ reason: "grant_sandbox_allowance" | "grant_developer_allowance" | "grant_beta" | "grant_promo" | "grant_onboarding" | "grant_sandbox_restricted_onboarding" | "grant_personal_allowance";
1953
+ /** @description Credits currently available in this grant. Excludes any credits already committed to in-flight jobs. */
1954
+ remaining: number;
1955
+ /** @description Credits originally issued in this grant. */
1956
+ original: number;
1957
+ /**
1958
+ * Format: date-time
1959
+ * @description When this grant expires. `null` means the grant has no expiry. After expiry, any remaining credits in the grant are forfeited and the grant no longer appears in this response.
1960
+ */
1961
+ expiresAt: string | null;
1962
+ }[];
1714
1963
  };
1715
- content: {
1716
- "application/json": {
1717
- error: string;
1718
- /** @enum {string} */
1719
- code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
1720
- meta: {
1721
- [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1722
- [key: string]: string | number | boolean | null;
1723
- }[] | null;
1724
- } | null;
1725
- };
1964
+ };
1965
+ };
1966
+ /** @description Your API token is missing, invalid, or not authorized for this request. See `code` for the specific reason. */
1967
+ 401: {
1968
+ headers: {
1969
+ [name: string]: unknown;
1970
+ };
1971
+ content: {
1972
+ "application/json": {
1973
+ error: string;
1974
+ /** @enum {string} */
1975
+ code: "missing_token" | "invalid_token" | "revoked_token" | "expired_token";
1976
+ meta: {
1977
+ [key: string]: (string | number | boolean) | (string | number | boolean)[] | {
1978
+ [key: string]: string | number | boolean | null;
1979
+ }[] | null;
1980
+ } | null;
1981
+ /**
1982
+ * @description Correlation id for this request, also returned in the `X-Request-Id` response header.
1983
+ * @example req_4f9a2c1e8b7d4f0a9c3e5d6b7a8f1e2d
1984
+ */
1985
+ requestId?: string;
1726
1986
  };
1727
1987
  };
1728
1988
  };
1729
1989
  };
1730
- put?: never;
1731
- post?: never;
1732
- delete?: never;
1733
- options?: never;
1734
- head?: never;
1735
- patch?: never;
1736
- trace?: never;
1737
- };
1738
- }
1739
- interface components {
1740
- schemas: {
1741
- JobLinks: {
1742
- /**
1743
- * Format: uri
1744
- * @description URL to a hosted page for this job. Shows a state-aware page (queued, running, failed) while the job is pre-terminal and the full HTML summary once it completes. The page does not auto-refresh today; reload to see the latest state. Returns `404` after retention expires.
1745
- */
1746
- share: string;
1747
- /**
1748
- * Format: uri
1749
- * @description URL to the manifest JSON for the latest attempt. Only present once the job reaches a terminal status. Returns `404` after retention expires. May change between responses if the job is retried.
1750
- */
1751
- manifest?: string;
1752
- };
1753
1990
  };
1754
- responses: never;
1755
- parameters: never;
1756
- requestBodies: never;
1757
- headers: never;
1758
- pathItems: never;
1759
1991
  }
1760
1992
 
1761
1993
  /** 200-response JSON body of an operation. */
@@ -1782,6 +2014,12 @@ type JobStatusResponse = Ok<paths['/v1/simc/jobs/{id}/status']['get']>;
1782
2014
  type JobCancelResponse = Ok<paths['/v1/simc/jobs/{id}/cancel']['post']>;
1783
2015
  type CreditBalance = Ok<paths['/v1/simc/credits']['get']>;
1784
2016
  type CreditGrant = CreditBalance['grants'][number];
2017
+ /** A single artifact on a job result (`result.result.artifacts[]`). */
2018
+ type Artifact = NonNullable<JobResult['result']>['artifacts'][number];
2019
+ type ArtifactKind = Artifact['kind'];
2020
+ type ArtifactMimeType = Artifact['mimeType'];
2021
+ /** The `job.terminal` webhook payload, derived from the spec's schema. */
2022
+ type WebhookEvent = components['schemas']['WebhookEvent'];
1785
2023
 
1786
2024
  /** The `artifacts` resource. */
1787
2025
  declare class Artifacts {
@@ -1925,6 +2163,12 @@ declare class APIError<TStatus extends number | undefined = number | undefined,
1925
2163
  /** Raw parsed JSON error body: escape hatch for unmapped fields. */
1926
2164
  readonly error: object | undefined;
1927
2165
  constructor(status: TStatus, body: object | undefined, message: string | undefined, headers: Headers | undefined);
2166
+ /**
2167
+ * Correlation id for the failed request (`req_...`), for support tickets.
2168
+ * Read from the `X-Request-Id` response header, falling back to the body's
2169
+ * `requestId` field.
2170
+ */
2171
+ get requestId(): string | undefined;
1928
2172
  private static makeMessage;
1929
2173
  /**
1930
2174
  * Maps a response to the most specific error class: status selects the base
@@ -2115,17 +2359,6 @@ declare class JobWaitTimeoutError extends SimmitError {
2115
2359
  declare class WebhookVerificationError extends SimmitError {
2116
2360
  }
2117
2361
 
2118
- /** The one hand-written wire type: the webhook payload has no OpenAPI schema. */
2119
- interface WebhookEvent {
2120
- kind: 'job.terminal';
2121
- version: 'v1';
2122
- timestamp: string;
2123
- payload: {
2124
- id: string;
2125
- statusReason: string | null;
2126
- status: Extract<JobStatus, 'completed' | 'failed' | 'cancelled' | 'timed_out'>;
2127
- };
2128
- }
2129
2362
  /**
2130
2363
  * Verifies an `X-Simmit-Signature` header (`t=<unix>,v1=<hex>`, an HMAC-SHA256
2131
2364
  * (timing-safe) over `${t}.${rawBody}` within a 300s default tolerance) and
@@ -2151,4 +2384,4 @@ type TerminalJobStatus = (typeof TERMINAL_JOB_STATUSES)[number];
2151
2384
  /** True when `status` is terminal, i.e. the job has reached an end state. */
2152
2385
  declare function isTerminal(status: JobStatus): status is TerminalJobStatus;
2153
2386
 
2154
- export { APIConnectionError, APIConnectionTimeoutError, APIError, APIPromise, APIUserAbortError, type ArtifactUrl, Artifacts, AuthenticationError, type AuthenticationErrorCode, BadRequestError, BillingError, type ClientOptions, type CompletedJob, ConflictError, type CreditBalance, type CreditGrant, Credits, type GenericMeta, IdempotencyKeyReuseError, InsufficientCreditsError, InsufficientCreditsLiabilityError, type InsufficientCreditsLiabilityMeta, type InsufficientCreditsMeta, InternalServerError, InvalidProfileError, type Job, type JobCancelResponse, JobCancelledError, type JobCreateParams, type JobCreateResponse, type JobErrorCode, JobFailedError, JobNotCancellableError, type JobResult, type JobStatus, type JobStatusResponse, JobTimedOutError, JobUnsuccessfulError, type JobWaitOptions, JobWaitTimeoutError, Jobs, MaxActiveJobsError, type MetaValue, NotFoundError, RateLimitError, type RateLimitErrorCode, type RequestOptions, RequestTooLargeError, ResultNotReadyError, ResultUnavailableError, type ServiceUnavailableBody, ServiceUnavailableError, Simmit, SimmitError, TERMINAL_JOB_STATUSES, type TerminalJobStatus, UnprocessableEntityError, type WebhookEvent, WebhookVerificationError, Simmit as default, isTerminal, unwrapWebhook };
2387
+ export { APIConnectionError, APIConnectionTimeoutError, APIError, APIPromise, APIUserAbortError, type Artifact, type ArtifactKind, type ArtifactMimeType, type ArtifactUrl, Artifacts, AuthenticationError, type AuthenticationErrorCode, BadRequestError, BillingError, type ClientOptions, type CompletedJob, ConflictError, type CreditBalance, type CreditGrant, Credits, type GenericMeta, IdempotencyKeyReuseError, InsufficientCreditsError, InsufficientCreditsLiabilityError, type InsufficientCreditsLiabilityMeta, type InsufficientCreditsMeta, InternalServerError, InvalidProfileError, type Job, type JobCancelResponse, JobCancelledError, type JobCreateParams, type JobCreateResponse, type JobErrorCode, JobFailedError, JobNotCancellableError, type JobResult, type JobStatus, type JobStatusResponse, JobTimedOutError, JobUnsuccessfulError, type JobWaitOptions, JobWaitTimeoutError, Jobs, MaxActiveJobsError, type MetaValue, NotFoundError, RateLimitError, type RateLimitErrorCode, type RequestOptions, RequestTooLargeError, ResultNotReadyError, ResultUnavailableError, type ServiceUnavailableBody, ServiceUnavailableError, Simmit, SimmitError, TERMINAL_JOB_STATUSES, type TerminalJobStatus, UnprocessableEntityError, type WebhookEvent, WebhookVerificationError, Simmit as default, isTerminal, unwrapWebhook };