@runpod/typescript-api-sdk 0.1.0 → 0.2.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
@@ -29,6 +29,86 @@ interface paths {
29
29
  patch?: never;
30
30
  trace?: never;
31
31
  };
32
+ "/v2/account/secrets": {
33
+ parameters: {
34
+ query?: never;
35
+ header?: never;
36
+ path?: never;
37
+ cookie?: never;
38
+ };
39
+ /**
40
+ * List secrets
41
+ * @description Returns the account's secrets — encrypted strings referenced from pod, serverless, and template environment variables with the `{{ RUNPOD_SECRET_<name> }}` placeholder syntax, substituted with the secret's value when the pod or worker boots. Secret values are write-only and are never returned.
42
+ */
43
+ get: operations["listSecrets"];
44
+ put?: never;
45
+ /**
46
+ * Create a secret
47
+ * @description Stores a new account-scoped encrypted string. `name` must be unique
48
+ * across the account's secrets and is immutable; `value` is write-only
49
+ * and can never be read back through the API.
50
+ *
51
+ * Use the secret from pods, serverless endpoints, and templates by
52
+ * setting an environment variable's value to
53
+ * `{{ RUNPOD_SECRET_<name> }}` — Runpod substitutes the stored value
54
+ * when the pod or worker boots.
55
+ *
56
+ * Returns `201` with the created secret's metadata, or `409` when the
57
+ * name is already taken.
58
+ */
59
+ post: operations["createSecret"];
60
+ delete?: never;
61
+ options?: never;
62
+ head?: never;
63
+ patch?: never;
64
+ trace?: never;
65
+ };
66
+ "/v2/account/secrets/{id}": {
67
+ parameters: {
68
+ query?: never;
69
+ header?: never;
70
+ path: {
71
+ /**
72
+ * @description Secret identifier
73
+ * @example 2q9m7x4cavgd
74
+ */
75
+ id: string;
76
+ };
77
+ cookie?: never;
78
+ };
79
+ /**
80
+ * Get a secret
81
+ * @description Returns a single secret's metadata by ID. The value is write-only and never returned.
82
+ */
83
+ get: operations["getSecret"];
84
+ put?: never;
85
+ post?: never;
86
+ /**
87
+ * Delete a secret
88
+ * @description Permanently deletes a secret. Environment variables referencing the
89
+ * deleted secret's name will no longer resolve to a value.
90
+ */
91
+ delete: operations["deleteSecret"];
92
+ options?: never;
93
+ head?: never;
94
+ /**
95
+ * Update a secret
96
+ * @description Rotates a secret's value and/or updates its description. Only the
97
+ * provided fields are changed and at least one field is required; the
98
+ * `name` is immutable.
99
+ *
100
+ * Pods and workers receive the new value at their next boot — running
101
+ * instances keep the value they were started with.
102
+ *
103
+ * When both fields are sent, the value is applied first, then the
104
+ * description. The two updates are not atomic: if the description
105
+ * update fails after the value was rotated, the response is an error
106
+ * but the new value has already taken effect. Send the fields in
107
+ * separate requests when that partial outcome matters.
108
+ */
109
+ patch: operations["updateSecret"];
110
+ trace?: never;
111
+ };
32
112
  "/v2/pods": {
33
113
  parameters: {
34
114
  query?: never;
@@ -41,6 +121,12 @@ interface paths {
41
121
  * @description Returns pods owned by the authenticated user. Cluster member
42
122
  * pods are excluded by default; set `includeClusterPods=true` to include
43
123
  * them (each carries a non-null `cluster` membership block).
124
+ *
125
+ * Results are cursor-paginated newest-first; an omitted `limit`
126
+ * defaults to 1000. When cluster member pods are excluded, the
127
+ * exclusion applies to each page after it is cut, so a page may hold
128
+ * fewer than `limit` pods — follow `pagination.nextCursor` until
129
+ * `hasNextPage` is false rather than counting items.
44
130
  */
45
131
  get: operations["listPods"];
46
132
  put?: never;
@@ -102,6 +188,15 @@ interface paths {
102
188
  * | `429` | Rate limited. | Back off using `Retry-After`, then resume. |
103
189
  * | `5xx` | Transient upstream failure. | Retry the same candidate with backoff. |
104
190
  *
191
+ * Requests larger than 102400 bytes receive `413` before authentication
192
+ * or processing. Reduce the serialized JSON request body and retry.
193
+ *
194
+ * This limit also applies to the deployment request built from your input
195
+ * and any referenced template. A small request can therefore receive `413`
196
+ * if inherited template settings make the combined request too large.
197
+ * Reduce environment variables or command values in your request or template
198
+ * and retry.
199
+ *
105
200
  * `400` covers both "your request breaks a rule" and "no capacity",
106
201
  * because capacity exhaustion currently carries no machine-readable code
107
202
  * of its own — only a human-readable `detail`. A rule violation is
@@ -343,7 +438,9 @@ interface paths {
343
438
  };
344
439
  /**
345
440
  * List serverless endpoints
346
- * @description Returns all serverless endpoints owned by the authenticated user.
441
+ * @description Returns serverless endpoints owned by the authenticated user,
442
+ * cursor-paginated newest-first; an omitted `limit` defaults to 1000.
443
+ * Follow `pagination.nextCursor` until `hasNextPage` is false.
347
444
  */
348
445
  get: operations["listEndpoints"];
349
446
  put?: never;
@@ -516,6 +613,10 @@ interface paths {
516
613
  * release is a versioned configuration snapshot with a `diff` of what
517
614
  * changed; build-driven releases carry a `buildId` (fetch build detail via
518
615
  * the builds sub-routes).
616
+ *
617
+ * Releases are cursor-paginated newest-first; an omitted `limit`
618
+ * defaults to 1000. The rollout summary always describes the endpoint's
619
+ * current state, independent of the page requested.
519
620
  */
520
621
  get: operations["listEndpointReleases"];
521
622
  put?: never;
@@ -541,9 +642,10 @@ interface paths {
541
642
  };
542
643
  /**
543
644
  * List serverless endpoint builds
544
- * @description Returns the endpoint's GitHub build history, newest first (RunPod
545
- * GitHub-build integration). At most the 100 most recent builds are
546
- * returned; any older build can still be fetched by id via
645
+ * @description Returns the endpoint's GitHub build history, newest first (Runpod
646
+ * GitHub-build integration), cursor-paginated; an omitted `limit`
647
+ * defaults to 100, so a bare request returns at most the 100 most
648
+ * recent builds. Any build can also be fetched by id via
547
649
  * `GET /v2/serverless/{id}/builds/{buildId}`. Stream a build's logs via
548
650
  * `/v2/serverless/{id}/builds/{buildId}/logs`.
549
651
  */
@@ -577,7 +679,7 @@ interface paths {
577
679
  /**
578
680
  * Get a serverless endpoint build
579
681
  * @description Returns one of the endpoint's GitHub builds by id, regardless of age —
580
- * unlike the list, which is capped to recent history.
682
+ * no need to page through `GET /v2/serverless/{id}/builds` to reach it.
581
683
  */
582
684
  get: operations["getEndpointBuild"];
583
685
  put?: never;
@@ -634,7 +736,10 @@ interface paths {
634
736
  };
635
737
  /**
636
738
  * List templates
637
- * @description Returns all templates owned by the authenticated user.
739
+ * @description Returns templates owned by the authenticated user (including
740
+ * team/organization-scoped ones), cursor-paginated; an omitted `limit`
741
+ * defaults to 1000. Follow `pagination.nextCursor` until `hasNextPage`
742
+ * is false.
638
743
  */
639
744
  get: operations["listTemplates"];
640
745
  put?: never;
@@ -1010,7 +1115,9 @@ interface paths {
1010
1115
  * templates (public or private) are managed under `/v2/templates`; fetch
1011
1116
  * any individual template — catalog or owned — via `/v2/templates/{id}`.
1012
1117
  *
1013
- * At most 100 templates are returned. Pagination is not yet supported.
1118
+ * At most 100 templates are returned. Cursor pagination is not yet
1119
+ * supported here; `pagination` is always the exhausted marker
1120
+ * (`nextCursor: null`, `hasNextPage: false`).
1014
1121
  */
1015
1122
  get: operations["listPublicTemplates"];
1016
1123
  put?: never;
@@ -1070,7 +1177,7 @@ interface paths {
1070
1177
  };
1071
1178
  /**
1072
1179
  * Get serverless billing history
1073
- * @description Returns serverless endpoint billing detail for the authenticated user, split into time buckets by startTime/endTime with bucketSize or by lastN recent buckets. Use serverlessId to filter to one endpoint; without it, records are emitted per serverless endpoint per bucket. Each record reports endpoint-level GPU, CPU, disk, platform fee, and total amounts. This is distinct from pod billing, which covers standalone GPU and CPU pod costs rather than serverless endpoint workloads.
1180
+ * @description Returns serverless endpoint billing detail for the authenticated user, split into time buckets by startTime/endTime with bucketSize or by lastN recent buckets. Use serverlessId to filter to one endpoint; without it, records are emitted per serverless endpoint per bucket. Each record reports endpoint-level GPU, CPU, disk, and total amounts. This is distinct from pod billing, which covers standalone GPU and CPU pod costs rather than serverless endpoint workloads.
1074
1181
  */
1075
1182
  get: operations["listServerlessBilling"];
1076
1183
  put?: never;
@@ -1144,13 +1251,54 @@ interface paths {
1144
1251
  }
1145
1252
  interface components {
1146
1253
  schemas: {
1147
- /** @description Container configuration universal to every containerized resource. Compose ContainerConfig instead unless the resource cannot support private registries (clusters, until the upstream input accepts a registry credential). */
1254
+ /** @description Cursor-pagination metadata, uniform across list endpoints. Every response carries it: follow `nextCursor` while `hasNextPage` is true to walk the full result set. */
1255
+ Pagination: {
1256
+ /**
1257
+ * @description Pass as the `cursor` query parameter to fetch the next page. Null on the last page.
1258
+ * @example null
1259
+ */
1260
+ nextCursor: string | null;
1261
+ /**
1262
+ * @description Whether more items exist after this page.
1263
+ * @example false
1264
+ */
1265
+ hasNextPage: boolean;
1266
+ };
1267
+ /** @description Mixin for cursor-paginated list responses. Compose it with `allOf` next to the resource's bare list schema so that a list shape shared with a non-paginated endpoint (e.g. a cluster's member pods) does not inherit a pagination block it cannot honour. */
1268
+ Paginated: {
1269
+ pagination: components["schemas"]["Pagination"];
1270
+ };
1271
+ /** @description Container configuration universal to every containerized resource. Compose ContainerConfig instead unless the resource cannot support a direct registry credential (clusters — there the registry credential arrives via a pod template, see CreateClusterRequest.templateId). */
1148
1272
  BaseContainerConfig: {
1149
1273
  /**
1150
- * @description Arguments passed to the container entrypoint
1274
+ * @description The container's command, as a single raw string. This is the field `entrypoint` and `cmd` encode into, exposed in its stored form.
1275
+ *
1276
+ * Two shapes are accepted. A bare shell string is treated as CMD and split into arguments, which is what the console's "Container start command" field writes. A JSON object of the form `{"entrypoint":[...],"cmd":[...]}` sets either or both explicitly.
1277
+ *
1278
+ * Responses always return both representations: `args` exactly as stored, plus the deconstructed `entrypoint` and `cmd`. Supplying `args` together with `entrypoint` or `cmd` is allowed only when they describe the same command, so a read-modify-write client can send back everything it received. Send `""` to clear, omit to leave unchanged.
1279
+ * @example --model meta-llama/Llama-3-8B --max-model-len 8192
1280
+ * @example {"entrypoint":["/bin/bash","-c"],"cmd":["python -u main.py"]}
1151
1281
  * @example
1152
1282
  */
1153
1283
  args?: string;
1284
+ /**
1285
+ * @description Container CMD in exec form. When the image defines an ENTRYPOINT, this is the argument list passed to it. Encoded into the `args` field; supplying both is allowed only when they describe the same command. Send `[]` to clear, omit to leave unchanged.
1286
+ * @example [
1287
+ * "--model",
1288
+ * "meta-llama/Llama-3-8B",
1289
+ * "--max-model-len",
1290
+ * "8192"
1291
+ * ]
1292
+ */
1293
+ cmd?: string[];
1294
+ /**
1295
+ * @description Container ENTRYPOINT in exec form, overriding the image's own. Encoded into `args` field; supplying both is allowed only when they describe the same command. Send `[]` to clear, omit to leave unchanged.
1296
+ * @example [
1297
+ * "/bin/bash",
1298
+ * "-c"
1299
+ * ]
1300
+ */
1301
+ entrypoint?: string[];
1154
1302
  /**
1155
1303
  * @description Container disk in GB (ephemeral, wiped on restart)
1156
1304
  * @example 50
@@ -1459,6 +1607,21 @@ interface components {
1459
1607
  * @description Serverless GPU pool IDs (as returned by `GET /v2/catalog/gpus` in
1460
1608
  * `pool`). Workers are placed on whichever listed pool has capacity.
1461
1609
  * Narrow a pool down to specific cards with `excludedTypes`.
1610
+ *
1611
+ * On `PATCH`, `pools` and `excludedTypes` are one selection and are
1612
+ * replaced together, so sending `pools` by itself **clears the
1613
+ * exclusions**. Two cases:
1614
+ *
1615
+ * - **Changing pools, keeping exclusions** — send both fields in one
1616
+ * request: `{"gpu": {"pools": ["ADA_24"], "excludedTypes":
1617
+ * ["NVIDIA L40"]}}`. `GET` the endpoint first to read the current
1618
+ * `excludedTypes` and resend the ones that still apply to the new
1619
+ * pools; an exclusion naming a type outside `pools` is a 400.
1620
+ * - **Changing only `count` or a CUDA constraint** — omit `pools`:
1621
+ * `{"gpu": {"minCudaVersion": "12.4"}}`. The pool list and the
1622
+ * exclusions are both left exactly as they are.
1623
+ *
1624
+ * `excludedTypes` documents the full rule.
1462
1625
  * @example [
1463
1626
  * "ADA_24"
1464
1627
  * ]
@@ -1503,6 +1666,21 @@ interface components {
1503
1666
  * @description Serverless GPU pool IDs (as returned by `GET /v2/catalog/gpus` in
1504
1667
  * `pool`). Workers are placed on whichever listed pool has capacity.
1505
1668
  * Narrow a pool down to specific cards with `excludedTypes`.
1669
+ *
1670
+ * On `PATCH`, `pools` and `excludedTypes` are one selection and are
1671
+ * replaced together, so sending `pools` by itself **clears the
1672
+ * exclusions**. Two cases:
1673
+ *
1674
+ * - **Changing pools, keeping exclusions** — send both fields in one
1675
+ * request: `{"gpu": {"pools": ["ADA_24"], "excludedTypes":
1676
+ * ["NVIDIA L40"]}}`. `GET` the endpoint first to read the current
1677
+ * `excludedTypes` and resend the ones that still apply to the new
1678
+ * pools; an exclusion naming a type outside `pools` is a 400.
1679
+ * - **Changing only `count` or a CUDA constraint** — omit `pools`:
1680
+ * `{"gpu": {"minCudaVersion": "12.4"}}`. The pool list and the
1681
+ * exclusions are both left exactly as they are.
1682
+ *
1683
+ * `excludedTypes` documents the full rule.
1506
1684
  * @example [
1507
1685
  * "ADA_24"
1508
1686
  * ]
@@ -1530,6 +1708,21 @@ interface components {
1530
1708
  * @description Serverless GPU pool IDs (as returned by `GET /v2/catalog/gpus` in
1531
1709
  * `pool`). Workers are placed on whichever listed pool has capacity.
1532
1710
  * Narrow a pool down to specific cards with `excludedTypes`.
1711
+ *
1712
+ * On `PATCH`, `pools` and `excludedTypes` are one selection and are
1713
+ * replaced together, so sending `pools` by itself **clears the
1714
+ * exclusions**. Two cases:
1715
+ *
1716
+ * - **Changing pools, keeping exclusions** — send both fields in one
1717
+ * request: `{"gpu": {"pools": ["ADA_24"], "excludedTypes":
1718
+ * ["NVIDIA L40"]}}`. `GET` the endpoint first to read the current
1719
+ * `excludedTypes` and resend the ones that still apply to the new
1720
+ * pools; an exclusion naming a type outside `pools` is a 400.
1721
+ * - **Changing only `count` or a CUDA constraint** — omit `pools`:
1722
+ * `{"gpu": {"minCudaVersion": "12.4"}}`. The pool list and the
1723
+ * exclusions are both left exactly as they are.
1724
+ *
1725
+ * `excludedTypes` documents the full rule.
1533
1726
  * @example [
1534
1727
  * "ADA_24"
1535
1728
  * ]
@@ -1712,6 +1905,7 @@ interface components {
1712
1905
  };
1713
1906
  ListEndpointsResponse: {
1714
1907
  endpoints: components["schemas"]["Endpoint"][];
1908
+ pagination: components["schemas"]["Pagination"];
1715
1909
  };
1716
1910
  /**
1717
1911
  * @description Derived worker state, reconciled from the worker pod's lifecycle status
@@ -1881,11 +2075,13 @@ interface components {
1881
2075
  };
1882
2076
  ListEndpointBuildsResponse: {
1883
2077
  /**
1884
- * @description Build history, newest first. At most the 100 most recent builds
1885
- * are returned; any older build can still be fetched by id via
2078
+ * @description Build history, newest first, cursor-paginated (an omitted `limit`
2079
+ * defaults to 100). Page with `cursor`/`limit` to walk the full
2080
+ * history, or fetch any build by id via
1886
2081
  * `GET /v2/serverless/{id}/builds/{buildId}`.
1887
2082
  */
1888
2083
  builds: components["schemas"]["Build"][];
2084
+ pagination: components["schemas"]["Pagination"];
1889
2085
  };
1890
2086
  ReleaseDiffEntry: {
1891
2087
  /**
@@ -1962,6 +2158,7 @@ interface components {
1962
2158
  rollout: components["schemas"]["RolloutSummary"];
1963
2159
  /** @description Release history, newest first. */
1964
2160
  releases: components["schemas"]["Release"][];
2161
+ pagination: components["schemas"]["Pagination"];
1965
2162
  };
1966
2163
  CreateEndpointRequest: components["schemas"]["ContainerConfig"] & unknown & {
1967
2164
  gpu?: components["schemas"]["CreateEndpointGpuConfig"];
@@ -2189,6 +2386,61 @@ interface components {
2189
2386
  */
2190
2387
  keys: string[];
2191
2388
  };
2389
+ /** @description An account-scoped secret: an encrypted string stored by Runpod, referenced from pod, serverless, and template environment variables with the `{{ RUNPOD_SECRET_<name> }}` placeholder, substituted with the secret's value when the pod or worker boots. The value is write-only and never returned by the API. */
2390
+ Secret: {
2391
+ /**
2392
+ * @description Unique secret identifier
2393
+ * @example 2q9m7x4cavgd
2394
+ */
2395
+ id: string;
2396
+ /**
2397
+ * @description Unique, human-readable name — the `<name>` referenced by the `RUNPOD_SECRET_<name>` placeholder. Immutable after creation.
2398
+ * @example hf-token
2399
+ */
2400
+ name: string;
2401
+ /**
2402
+ * @description Human-readable description
2403
+ * @example Hugging Face read token
2404
+ */
2405
+ description?: string | null;
2406
+ /**
2407
+ * Format: date-time
2408
+ * @description When the secret was created
2409
+ */
2410
+ createdAt: string;
2411
+ /**
2412
+ * Format: date-time
2413
+ * @description When the secret's value was last set (creation or rotation)
2414
+ */
2415
+ valueLastUpdatedAt?: string | null;
2416
+ };
2417
+ CreateSecretRequest: {
2418
+ /**
2419
+ * @description Unique name for the secret — referenced from environment variables as `{{ RUNPOD_SECRET_<name> }}`; immutable after creation. Maximum 191 characters, must start with a letter or underscore, and may contain letters, digits, and `_.-/`. Names beginning with the reserved prefix `RUNPOD` are rejected (case-insensitive).
2420
+ * @example hf-token
2421
+ */
2422
+ name: string;
2423
+ /** @description The secret value. Write-only — never returned by the API. Must be smaller than 16 MiB of UTF-8 text (strictly under 16,777,216 bytes). */
2424
+ value: string;
2425
+ /**
2426
+ * @description Optional human-readable description, at most 65,535 bytes of UTF-8 text.
2427
+ * @example Hugging Face read token
2428
+ */
2429
+ description?: string;
2430
+ };
2431
+ /**
2432
+ * @description Only the provided fields are updated; at least one field is required.
2433
+ * The secret's `name` is immutable.
2434
+ */
2435
+ UpdateSecretRequest: {
2436
+ /** @description New secret value, replacing the current one. Write-only. Must be smaller than 16 MiB of UTF-8 text (strictly under 16,777,216 bytes). */
2437
+ value?: string;
2438
+ /** @description New human-readable description, at most 65,535 bytes of UTF-8 text. Send `""` to clear. */
2439
+ description?: string;
2440
+ };
2441
+ ListSecretsResponse: {
2442
+ secrets: components["schemas"]["Secret"][];
2443
+ };
2192
2444
  Pod: {
2193
2445
  /**
2194
2446
  * @description Docker image reference
@@ -2196,7 +2448,13 @@ interface components {
2196
2448
  */
2197
2449
  image: string;
2198
2450
  /**
2199
- * @description Arguments passed to the container entrypoint
2451
+ * @description The container's command, as a single raw string. This is the field `entrypoint` and `cmd` encode into, exposed in its stored form.
2452
+ *
2453
+ * Two shapes are accepted. A bare shell string is treated as CMD and split into arguments, which is what the console's "Container start command" field writes. A JSON object of the form `{"entrypoint":[...],"cmd":[...]}` sets either or both explicitly.
2454
+ *
2455
+ * Responses always return both representations: `args` exactly as stored, plus the deconstructed `entrypoint` and `cmd`. Supplying `args` together with `entrypoint` or `cmd` is allowed only when they describe the same command, so a read-modify-write client can send back everything it received. Send `""` to clear, omit to leave unchanged.
2456
+ * @example --model meta-llama/Llama-3-8B --max-model-len 8192
2457
+ * @example {"entrypoint":["/bin/bash","-c"],"cmd":["python -u main.py"]}
2200
2458
  * @example
2201
2459
  */
2202
2460
  args: string;
@@ -2314,7 +2572,7 @@ interface components {
2314
2572
  * @description Create-time flag telling the provisioner to start JupyterLab:
2315
2573
  * injects a generated `JUPYTER_PASSWORD` environment variable,
2316
2574
  * unless the request already sets one. Only images that honor
2317
- * the convention start Jupyter from it (RunPod official images
2575
+ * the convention start Jupyter from it (Runpod official images
2318
2576
  * do); expose `8888/http` in `ports` to reach it.
2319
2577
  *
2320
2578
  * Not part of the pod's readable config — never returned by
@@ -2330,7 +2588,7 @@ interface components {
2330
2588
  * already sets one. **Requires registered keys** (`PUT
2331
2589
  * /v2/account/ssh-keys`) — with none registered the flag does
2332
2590
  * nothing and the pod has no SSH access. Only images that honor
2333
- * the convention start sshd from it (all RunPod official images
2591
+ * the convention start sshd from it (all Runpod official images
2334
2592
  * do). Connect using the pod's `ssh` block; the `ssh.direct`
2335
2593
  * variant additionally needs a `22/tcp` entry in `ports`.
2336
2594
  *
@@ -2386,9 +2644,11 @@ interface components {
2386
2644
  PodActionRequest: {
2387
2645
  action: components["schemas"]["PodAction"];
2388
2646
  };
2389
- ListPodsResponse: {
2647
+ /** @description A bare list of pods. `GET /v2/clusters/{id}/pods` returns it as-is (a cluster's members are a small, complete set); `GET /v2/pods` composes it with the pagination block via ListPodsResponse. */
2648
+ PodList: {
2390
2649
  pods: components["schemas"]["Pod"][];
2391
2650
  };
2651
+ ListPodsResponse: components["schemas"]["PodList"] & components["schemas"]["Paginated"];
2392
2652
  /**
2393
2653
  * @description Cluster type. TRAINING is the generic distributed-training cluster; SLURM provisions a managed Slurm controller/compute topology; RAY provisions a managed Ray head/worker topology; APPLICATION is a general multi-node application cluster.
2394
2654
  * @example TRAINING
@@ -2522,6 +2782,18 @@ interface components {
2522
2782
  /** @example my-training-cluster */
2523
2783
  name: string;
2524
2784
  type: components["schemas"]["ClusterType"];
2785
+ /**
2786
+ * @description ID of a pod template to provision every member pod from. The
2787
+ * template supplies the container settings (image, args, disk,
2788
+ * env, ports) and the container registry credential for private
2789
+ * images — the only private-image path for clusters. Mutually
2790
+ * exclusive with `image`, `args`, `entrypoint`, `cmd`, `disk`,
2791
+ * `env`, `ports`, and `mounts` (rejected with 400). The cluster
2792
+ * retains the link: the `template` response field is set. Must be
2793
+ * a non-serverless pod template accessible to the caller.
2794
+ * @example 30zmvf89kd
2795
+ */
2796
+ templateId?: string;
2525
2797
  /**
2526
2798
  * @description Preferred data centers for placement. Omit or pass an empty
2527
2799
  * array to let the scheduler choose. A cluster is always placed
@@ -2562,7 +2834,13 @@ interface components {
2562
2834
  */
2563
2835
  image: string;
2564
2836
  /**
2565
- * @description Arguments passed to the container entrypoint
2837
+ * @description The container's command, as a single raw string. This is the field `entrypoint` and `cmd` encode into, exposed in its stored form.
2838
+ *
2839
+ * Two shapes are accepted. A bare shell string is treated as CMD and split into arguments, which is what the console's "Container start command" field writes. A JSON object of the form `{"entrypoint":[...],"cmd":[...]}` sets either or both explicitly.
2840
+ *
2841
+ * Responses always return both representations: `args` exactly as stored, plus the deconstructed `entrypoint` and `cmd`. Supplying `args` together with `entrypoint` or `cmd` is allowed only when they describe the same command, so a read-modify-write client can send back everything it received. Send `""` to clear, omit to leave unchanged.
2842
+ * @example --model meta-llama/Llama-3-8B --max-model-len 8192
2843
+ * @example {"entrypoint":["/bin/bash","-c"],"cmd":["python -u main.py"]}
2566
2844
  * @example
2567
2845
  */
2568
2846
  args: string;
@@ -2661,7 +2939,7 @@ interface components {
2661
2939
  * @description Start JupyterLab in containers created from this template:
2662
2940
  * injects a generated `JUPYTER_PASSWORD` environment variable,
2663
2941
  * unless `env` already sets one. Only images that honor the
2664
- * convention start Jupyter from it (RunPod official images do);
2942
+ * convention start Jupyter from it (Runpod official images do);
2665
2943
  * expose `8888/http` in `ports` to reach it. Defaults to `true`
2666
2944
  * when omitted, matching console-created templates.
2667
2945
  * @default true
@@ -2674,7 +2952,7 @@ interface components {
2674
2952
  * deployer's registered SSH public keys (`PUT
2675
2953
  * /v2/account/ssh-keys` — with none registered the flag does
2676
2954
  * nothing), unless `env` already sets one. Only images that
2677
- * honor the convention start sshd from it (all RunPod official
2955
+ * honor the convention start sshd from it (all Runpod official
2678
2956
  * images do); direct SSH also needs a `22/tcp` entry in
2679
2957
  * `ports`. Defaults to `true` when omitted, matching
2680
2958
  * console-created templates.
@@ -2696,9 +2974,11 @@ interface components {
2696
2974
  /** @description Provision SSH access at container startup (`PUBLIC_KEY` env injection). See the create-time field for details. */
2697
2975
  startSsh?: boolean;
2698
2976
  };
2699
- ListTemplatesResponse: {
2977
+ /** @description A bare list of templates. `GET /v2/catalog/templates` returns it as-is (the catalog is a capped, curated set); `GET /v2/templates` composes it with the pagination block via ListTemplatesResponse. */
2978
+ TemplateList: {
2700
2979
  templates: components["schemas"]["Template"][];
2701
2980
  };
2981
+ ListTemplatesResponse: components["schemas"]["TemplateList"] & components["schemas"]["Paginated"];
2702
2982
  NetworkVolume: {
2703
2983
  /**
2704
2984
  * @description Unique network volume identifier
@@ -3158,7 +3438,7 @@ interface components {
3158
3438
  * @enum {string}
3159
3439
  */
3160
3440
  BillingBucketSize: "hour" | "day" | "week" | "month" | "year";
3161
- /** @description Total spend across all billable Runpod resources with each cost component broken out, fully prefixed by resource. Backs the aggregate record's amounts and the metadata totals. */
3441
+ /** @description Total spend across all billable Runpod resources with each cost component broken out, fully prefixed by resource. Backs the aggregate record's amounts and the metadata totals. Serverless amounts are inclusive of platform charges. */
3162
3442
  BillingAmounts: {
3163
3443
  /**
3164
3444
  * Format: double
@@ -3198,7 +3478,8 @@ interface components {
3198
3478
  serverlessDiskAmount: number;
3199
3479
  /**
3200
3480
  * Format: double
3201
- * @description Serverless platform fee in USD for the bucket.
3481
+ * @deprecated
3482
+ * @description Unused and always 0. Platform charges are included in the serverless compute amounts.
3202
3483
  */
3203
3484
  serverlessFeeAmount: number;
3204
3485
  /**
@@ -3266,7 +3547,7 @@ interface components {
3266
3547
  */
3267
3548
  podId: string;
3268
3549
  };
3269
- /** @description Serverless cost components. Backs a record's amounts and the metadata totals. */
3550
+ /** @description Serverless cost components, inclusive of platform charges. Backs a record's amounts and the metadata totals. */
3270
3551
  ServerlessBillingAmounts: {
3271
3552
  /**
3272
3553
  * Format: double
@@ -3291,7 +3572,8 @@ interface components {
3291
3572
  diskAmount: number;
3292
3573
  /**
3293
3574
  * Format: double
3294
- * @description Serverless platform fee in USD for the bucket.
3575
+ * @deprecated
3576
+ * @description Unused and always 0. Platform charges are included in the GPU and CPU amounts.
3295
3577
  */
3296
3578
  feeAmount: number;
3297
3579
  };
@@ -3617,6 +3899,21 @@ interface components {
3617
3899
  * @example 30
3618
3900
  */
3619
3901
  BillingLastN: number;
3902
+ /**
3903
+ * @description Opaque resume cursor — pass the previous response's `pagination.nextCursor` through verbatim; omit for the first page. A cursor is only valid for the operation and parameters that issued it; a malformed or foreign cursor is rejected with 422.
3904
+ * @example Y3JlYXRlZEF0PTE3NDg3ODA0MDA
3905
+ */
3906
+ PaginationCursor: string;
3907
+ /**
3908
+ * @description Page size, 1–1000. Defaults to 1000 when omitted.
3909
+ * @example 50
3910
+ */
3911
+ PaginationLimit: number;
3912
+ /**
3913
+ * @description Page size, 1–100. Defaults to 100 when omitted.
3914
+ * @example 50
3915
+ */
3916
+ PaginationLimitBuilds: number;
3620
3917
  /**
3621
3918
  * @description Comma-separated optional expansions; see `CatalogInclude` for the supported values.
3622
3919
  * @example [
@@ -3774,6 +4071,229 @@ interface operations {
3774
4071
  };
3775
4072
  };
3776
4073
  };
4074
+ listSecrets: {
4075
+ parameters: {
4076
+ query?: {
4077
+ /** @description When provided, returns only the secret with this name (case-insensitive). */
4078
+ name?: string;
4079
+ };
4080
+ header?: never;
4081
+ path?: never;
4082
+ cookie?: never;
4083
+ };
4084
+ requestBody?: never;
4085
+ responses: {
4086
+ /** @description OK */
4087
+ 200: {
4088
+ headers: {
4089
+ RateLimit: components["headers"]["RateLimit"];
4090
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
4091
+ [name: string]: unknown;
4092
+ };
4093
+ content: {
4094
+ "application/json": components["schemas"]["ListSecretsResponse"];
4095
+ };
4096
+ };
4097
+ 401: components["responses"]["UnauthorizedError"];
4098
+ 403: components["responses"]["ForbiddenError"];
4099
+ 429: components["responses"]["TooManyRequestsError"];
4100
+ /** @description Error */
4101
+ default: {
4102
+ headers: {
4103
+ RateLimit: components["headers"]["RateLimit"];
4104
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
4105
+ [name: string]: unknown;
4106
+ };
4107
+ content: {
4108
+ "application/problem+json": components["schemas"]["ErrorResponse"];
4109
+ };
4110
+ };
4111
+ };
4112
+ };
4113
+ createSecret: {
4114
+ parameters: {
4115
+ query?: never;
4116
+ header?: never;
4117
+ path?: never;
4118
+ cookie?: never;
4119
+ };
4120
+ requestBody: {
4121
+ content: {
4122
+ "application/json": components["schemas"]["CreateSecretRequest"];
4123
+ };
4124
+ };
4125
+ responses: {
4126
+ /** @description Created */
4127
+ 201: {
4128
+ headers: {
4129
+ RateLimit: components["headers"]["RateLimit"];
4130
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
4131
+ [name: string]: unknown;
4132
+ };
4133
+ content: {
4134
+ "application/json": components["schemas"]["Secret"];
4135
+ };
4136
+ };
4137
+ 400: components["responses"]["BadRequestError"];
4138
+ 401: components["responses"]["UnauthorizedError"];
4139
+ 403: components["responses"]["ForbiddenError"];
4140
+ /** @description A secret with this name already exists. */
4141
+ 409: {
4142
+ headers: {
4143
+ [name: string]: unknown;
4144
+ };
4145
+ content: {
4146
+ "application/problem+json": components["schemas"]["ErrorResponse"];
4147
+ };
4148
+ };
4149
+ 422: components["responses"]["UnprocessableEntityError"];
4150
+ 429: components["responses"]["TooManyRequestsError"];
4151
+ /** @description Error */
4152
+ default: {
4153
+ headers: {
4154
+ RateLimit: components["headers"]["RateLimit"];
4155
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
4156
+ [name: string]: unknown;
4157
+ };
4158
+ content: {
4159
+ "application/problem+json": components["schemas"]["ErrorResponse"];
4160
+ };
4161
+ };
4162
+ };
4163
+ };
4164
+ getSecret: {
4165
+ parameters: {
4166
+ query?: never;
4167
+ header?: never;
4168
+ path: {
4169
+ /**
4170
+ * @description Secret identifier
4171
+ * @example 2q9m7x4cavgd
4172
+ */
4173
+ id: string;
4174
+ };
4175
+ cookie?: never;
4176
+ };
4177
+ requestBody?: never;
4178
+ responses: {
4179
+ /** @description OK */
4180
+ 200: {
4181
+ headers: {
4182
+ RateLimit: components["headers"]["RateLimit"];
4183
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
4184
+ [name: string]: unknown;
4185
+ };
4186
+ content: {
4187
+ "application/json": components["schemas"]["Secret"];
4188
+ };
4189
+ };
4190
+ 401: components["responses"]["UnauthorizedError"];
4191
+ 403: components["responses"]["ForbiddenError"];
4192
+ 404: components["responses"]["NotFoundError"];
4193
+ 429: components["responses"]["TooManyRequestsError"];
4194
+ /** @description Error */
4195
+ default: {
4196
+ headers: {
4197
+ RateLimit: components["headers"]["RateLimit"];
4198
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
4199
+ [name: string]: unknown;
4200
+ };
4201
+ content: {
4202
+ "application/problem+json": components["schemas"]["ErrorResponse"];
4203
+ };
4204
+ };
4205
+ };
4206
+ };
4207
+ deleteSecret: {
4208
+ parameters: {
4209
+ query?: never;
4210
+ header?: never;
4211
+ path: {
4212
+ /**
4213
+ * @description Secret identifier
4214
+ * @example 2q9m7x4cavgd
4215
+ */
4216
+ id: string;
4217
+ };
4218
+ cookie?: never;
4219
+ };
4220
+ requestBody?: never;
4221
+ responses: {
4222
+ /** @description Deleted. Response has no body. */
4223
+ 204: {
4224
+ headers: {
4225
+ RateLimit: components["headers"]["RateLimit"];
4226
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
4227
+ [name: string]: unknown;
4228
+ };
4229
+ content?: never;
4230
+ };
4231
+ 401: components["responses"]["UnauthorizedError"];
4232
+ 403: components["responses"]["ForbiddenError"];
4233
+ 404: components["responses"]["NotFoundError"];
4234
+ 429: components["responses"]["TooManyRequestsError"];
4235
+ /** @description Error */
4236
+ default: {
4237
+ headers: {
4238
+ RateLimit: components["headers"]["RateLimit"];
4239
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
4240
+ [name: string]: unknown;
4241
+ };
4242
+ content: {
4243
+ "application/problem+json": components["schemas"]["ErrorResponse"];
4244
+ };
4245
+ };
4246
+ };
4247
+ };
4248
+ updateSecret: {
4249
+ parameters: {
4250
+ query?: never;
4251
+ header?: never;
4252
+ path: {
4253
+ /**
4254
+ * @description Secret identifier
4255
+ * @example 2q9m7x4cavgd
4256
+ */
4257
+ id: string;
4258
+ };
4259
+ cookie?: never;
4260
+ };
4261
+ requestBody: {
4262
+ content: {
4263
+ "application/json": components["schemas"]["UpdateSecretRequest"];
4264
+ };
4265
+ };
4266
+ responses: {
4267
+ /** @description OK */
4268
+ 200: {
4269
+ headers: {
4270
+ RateLimit: components["headers"]["RateLimit"];
4271
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
4272
+ [name: string]: unknown;
4273
+ };
4274
+ content: {
4275
+ "application/json": components["schemas"]["Secret"];
4276
+ };
4277
+ };
4278
+ 400: components["responses"]["BadRequestError"];
4279
+ 401: components["responses"]["UnauthorizedError"];
4280
+ 403: components["responses"]["ForbiddenError"];
4281
+ 404: components["responses"]["NotFoundError"];
4282
+ 422: components["responses"]["UnprocessableEntityError"];
4283
+ 429: components["responses"]["TooManyRequestsError"];
4284
+ /** @description Error */
4285
+ default: {
4286
+ headers: {
4287
+ RateLimit: components["headers"]["RateLimit"];
4288
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
4289
+ [name: string]: unknown;
4290
+ };
4291
+ content: {
4292
+ "application/problem+json": components["schemas"]["ErrorResponse"];
4293
+ };
4294
+ };
4295
+ };
4296
+ };
3777
4297
  listPods: {
3778
4298
  parameters: {
3779
4299
  query?: {
@@ -3782,6 +4302,16 @@ interface operations {
3782
4302
  * @example false
3783
4303
  */
3784
4304
  includeClusterPods?: boolean;
4305
+ /**
4306
+ * @description Opaque resume cursor — pass the previous response's `pagination.nextCursor` through verbatim; omit for the first page. A cursor is only valid for the operation and parameters that issued it; a malformed or foreign cursor is rejected with 422.
4307
+ * @example Y3JlYXRlZEF0PTE3NDg3ODA0MDA
4308
+ */
4309
+ cursor?: components["parameters"]["PaginationCursor"];
4310
+ /**
4311
+ * @description Page size, 1–1000. Defaults to 1000 when omitted.
4312
+ * @example 50
4313
+ */
4314
+ limit?: components["parameters"]["PaginationLimit"];
3785
4315
  };
3786
4316
  header?: never;
3787
4317
  path?: never;
@@ -3844,6 +4374,15 @@ interface operations {
3844
4374
  401: components["responses"]["UnauthorizedError"];
3845
4375
  403: components["responses"]["ForbiddenError"];
3846
4376
  404: components["responses"]["NotFoundError"];
4377
+ /** @description The incoming request body or expanded upstream request exceeds the 102400 byte limit, or the upstream rejects the request as too large. */
4378
+ 413: {
4379
+ headers: {
4380
+ [name: string]: unknown;
4381
+ };
4382
+ content: {
4383
+ "application/problem+json": components["schemas"]["ErrorResponse"];
4384
+ };
4385
+ };
3847
4386
  422: components["responses"]["UnprocessableEntityError"];
3848
4387
  429: components["responses"]["TooManyRequestsError"];
3849
4388
  /** @description Error */
@@ -4384,7 +4923,7 @@ interface operations {
4384
4923
  [name: string]: unknown;
4385
4924
  };
4386
4925
  content: {
4387
- "application/json": components["schemas"]["ListPodsResponse"];
4926
+ "application/json": components["schemas"]["PodList"];
4388
4927
  };
4389
4928
  };
4390
4929
  401: components["responses"]["UnauthorizedError"];
@@ -4412,7 +4951,18 @@ interface operations {
4412
4951
  };
4413
4952
  listEndpoints: {
4414
4953
  parameters: {
4415
- query?: never;
4954
+ query?: {
4955
+ /**
4956
+ * @description Opaque resume cursor — pass the previous response's `pagination.nextCursor` through verbatim; omit for the first page. A cursor is only valid for the operation and parameters that issued it; a malformed or foreign cursor is rejected with 422.
4957
+ * @example Y3JlYXRlZEF0PTE3NDg3ODA0MDA
4958
+ */
4959
+ cursor?: components["parameters"]["PaginationCursor"];
4960
+ /**
4961
+ * @description Page size, 1–1000. Defaults to 1000 when omitted.
4962
+ * @example 50
4963
+ */
4964
+ limit?: components["parameters"]["PaginationLimit"];
4965
+ };
4416
4966
  header?: never;
4417
4967
  path?: never;
4418
4968
  cookie?: never;
@@ -4667,7 +5217,18 @@ interface operations {
4667
5217
  };
4668
5218
  listEndpointReleases: {
4669
5219
  parameters: {
4670
- query?: never;
5220
+ query?: {
5221
+ /**
5222
+ * @description Opaque resume cursor — pass the previous response's `pagination.nextCursor` through verbatim; omit for the first page. A cursor is only valid for the operation and parameters that issued it; a malformed or foreign cursor is rejected with 422.
5223
+ * @example Y3JlYXRlZEF0PTE3NDg3ODA0MDA
5224
+ */
5225
+ cursor?: components["parameters"]["PaginationCursor"];
5226
+ /**
5227
+ * @description Page size, 1–1000. Defaults to 1000 when omitted.
5228
+ * @example 50
5229
+ */
5230
+ limit?: components["parameters"]["PaginationLimit"];
5231
+ };
4671
5232
  header?: never;
4672
5233
  path: {
4673
5234
  /**
@@ -4710,7 +5271,18 @@ interface operations {
4710
5271
  };
4711
5272
  listEndpointBuilds: {
4712
5273
  parameters: {
4713
- query?: never;
5274
+ query?: {
5275
+ /**
5276
+ * @description Opaque resume cursor — pass the previous response's `pagination.nextCursor` through verbatim; omit for the first page. A cursor is only valid for the operation and parameters that issued it; a malformed or foreign cursor is rejected with 422.
5277
+ * @example Y3JlYXRlZEF0PTE3NDg3ODA0MDA
5278
+ */
5279
+ cursor?: components["parameters"]["PaginationCursor"];
5280
+ /**
5281
+ * @description Page size, 1–100. Defaults to 100 when omitted.
5282
+ * @example 50
5283
+ */
5284
+ limit?: components["parameters"]["PaginationLimitBuilds"];
5285
+ };
4714
5286
  header?: never;
4715
5287
  path: {
4716
5288
  /**
@@ -4878,7 +5450,18 @@ interface operations {
4878
5450
  };
4879
5451
  listTemplates: {
4880
5452
  parameters: {
4881
- query?: never;
5453
+ query?: {
5454
+ /**
5455
+ * @description Opaque resume cursor — pass the previous response's `pagination.nextCursor` through verbatim; omit for the first page. A cursor is only valid for the operation and parameters that issued it; a malformed or foreign cursor is rejected with 422.
5456
+ * @example Y3JlYXRlZEF0PTE3NDg3ODA0MDA
5457
+ */
5458
+ cursor?: components["parameters"]["PaginationCursor"];
5459
+ /**
5460
+ * @description Page size, 1–1000. Defaults to 1000 when omitted.
5461
+ * @example 50
5462
+ */
5463
+ limit?: components["parameters"]["PaginationLimit"];
5464
+ };
4882
5465
  header?: never;
4883
5466
  path?: never;
4884
5467
  cookie?: never;
@@ -5990,7 +6573,7 @@ interface operations {
5990
6573
  [name: string]: unknown;
5991
6574
  };
5992
6575
  content: {
5993
- "application/json": components["schemas"]["ListTemplatesResponse"];
6576
+ "application/json": components["schemas"]["TemplateList"];
5994
6577
  };
5995
6578
  };
5996
6579
  401: components["responses"]["UnauthorizedError"];