diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock
index 3a27b6c32..52c8e151a 100644
--- a/.speakeasy/gen.lock
+++ b/.speakeasy/gen.lock
@@ -1,19 +1,19 @@
lockVersion: ""
id: ""
management:
- docChecksum: 2a0db5478432d0ae3c6c404e1a8df654
+ docChecksum: 02b4c06ec2d52324408d051bd1168781
docVersion: 1.0.0
speakeasyVersion: 1.787.0
generationVersion: 2.914.0
- releaseVersion: 1.3.7
- configChecksum: 2c146ec2b9f4f8ceaab02caddffce2a4
+ releaseVersion: 1.3.8
+ configChecksum: e7d73e099a3f00a2b6a28aba29165bf3
repoURL: https://github.com/OpenRouterTeam/typescript-sdk.git
installationURL: https://github.com/OpenRouterTeam/typescript-sdk
published: true
persistentEdits:
- generation_id: f872b08a-0cd4-490a-89f8-f7ce86abe31a
- pristine_commit_hash: 0fa91667ac56411438d4c89f2e96abb5f5e40568
- pristine_tree_hash: 5ef6b97b4c4b477c54679de3f1f7b790ae011aef
+ generation_id: 2f195164-ed59-4a37-99e5-bf853e71c5c7
+ pristine_commit_hash: be866010dc5972ed501e239d2b6e6ac7e5b527b0
+ pristine_tree_hash: d8367ee92538fa9973b18117f9d3673bdd02af78
features:
typescript:
acceptHeaders: 2.81.2
@@ -7775,6 +7775,14 @@ trackedFiles:
id: 2d76b1e8e8b7
last_write_checksum: sha1:0cd53c1569a60f47eb1d4cd7392d34d54ef16fa5
pristine_git_object: 2199321b31cfce31bf1ee7a7aa106f359e49120a
+ docs/models/operations/createsystemoneglobals.mdx:
+ id: 984ed7850b98
+ last_write_checksum: sha1:27052d1b6c33f4a154546b80c50b1c05e8ca712f
+ pristine_git_object: 50ad8be8e54484ad67402683ca3a6dcb90563455
+ docs/models/operations/createsystemonerequest.mdx:
+ id: b366ea72f04b
+ last_write_checksum: sha1:a0fd9ef1035d64ef5a37a74cc418c583ac95e5a3
+ pristine_git_object: d5b6c52bc93c20c7fc887370e12d17b86155f0af
docs/models/operations/createttsglobals.md:
id: d77253ce42ea
last_write_checksum: sha1:9516108a1caa4256a40d277dd24f9d3be5f92a2d
@@ -13717,6 +13725,10 @@ trackedFiles:
id: 190b0dc9a5d1
last_write_checksum: sha1:b835cb30bf693fe45095b52a0ae93c0f65fabce4
pristine_git_object: 5dbc5cf9ec9371f37d3470af2be60d2f1c815695
+ docs/sdks/systemone/README.mdx:
+ id: 55c317c71f3d
+ last_write_checksum: sha1:bc9bdc066212391be32e4418438b965694faa2c8
+ pristine_git_object: b537f54a24ec9db99114c4e3c87aad4394218e5f
docs/sdks/tts/README.md:
id: 0c425074d09f
last_write_checksum: sha1:019ae6737c83daac03ebbe7d56c49b0d3ad11262
@@ -13770,12 +13782,12 @@ trackedFiles:
pristine_git_object: 410efafd6a7f50d91ccb87131fedbe0c3d47e15a
jsr.json:
id: 7f6ab7767282
- last_write_checksum: sha1:743b1e4539e309eee48126d7fcbd5ea655727b5f
- pristine_git_object: e3372dc4b537db14c011f1ab756ab37b342dba62
+ last_write_checksum: sha1:d6f8a7ef49bc1b7a5bb8a927882c66b271e7c8eb
+ pristine_git_object: be3e0babc6a39b526683ecc11e6407f18963292e
package.json:
id: 7030d0b2f71b
- last_write_checksum: sha1:a80684464694855cc69fcc9c6c4e81267157f1b5
- pristine_git_object: 3fbf5c9e1acb2ce102c98990ad52da4564bdcaef
+ last_write_checksum: sha1:d74eaf28ee1efc7a498f0046d0beabce53f40cb3
+ pristine_git_object: 4cf3a1777ced6eac316f37c97a3bd222637b286c
src/core.ts:
id: f431fdbcd144
last_write_checksum: sha1:5aa66b0b6a5964f3eea7f3098c2eb3c0ee9c0131
@@ -14164,6 +14176,10 @@ trackedFiles:
id: ec09b43036c3
last_write_checksum: sha1:a4ccbbbf93dc4b205afcae8e2fec5e769056a8ce
pristine_git_object: c0a7ee9d613521068a759c5c7de0ec298aa30723
+ src/funcs/systemOneCreate.ts:
+ id: 446a269bb013
+ last_write_checksum: sha1:371dfcdd07849de9b435b70f4a853d5296cb4101
+ pristine_git_object: 7ff9ffc17f233b69e4b603894acf1ef5a443b0d1
src/funcs/ttsCreateSpeech.ts:
id: ed304f5d6ad8
last_write_checksum: sha1:9036bff1fc295e995ac27b32a022b378b548b3bd
@@ -14282,8 +14298,8 @@ trackedFiles:
pristine_git_object: a187e58707bdb726ca2aff74941efe7493422d4e
src/lib/config.ts:
id: 320761608fb3
- last_write_checksum: sha1:fd11a36b280af275a71abd346a80a0b648c3b592
- pristine_git_object: a005a25f16d860375833b94762fd8204c3250740
+ last_write_checksum: sha1:9fade4cf1bca63a2b085ab8abaa6dc19b5fecd82
+ pristine_git_object: 8aec2c30548ca1528f9a8dda377c1e34f751315a
src/lib/dlv.ts:
id: b1988214835a
last_write_checksum: sha1:eaac763b22717206a6199104e0403ed17a4e2711
@@ -16350,6 +16366,10 @@ trackedFiles:
id: ebd7800a291d
last_write_checksum: sha1:0fbbd383b5a354b70f758c06ba85d2001802e189
pristine_git_object: 38b8d8511d4503a767e6483091e00d06047cb276
+ src/models/operations/createsystemone.ts:
+ id: ac12b9bcab42
+ last_write_checksum: sha1:6bd652a9c0c725768dd1f5386a417ecbff1ca304
+ pristine_git_object: 8577f62cf4d311802bfaa54f3d251c5b4894d9b3
src/models/operations/createvideos.ts:
id: 06dc92996e18
last_write_checksum: sha1:debbfb49bdfed99a57248da4ed95dc06be8c1e43
@@ -16520,8 +16540,8 @@ trackedFiles:
pristine_git_object: a052ed42bd123e79be1f05dc823c808f8c32b383
src/models/operations/index.ts:
id: 0d9ffaf774d2
- last_write_checksum: sha1:ae345b4b04b8059f56f1b33dea4739f5a7b2a0a5
- pristine_git_object: 1309cce46cb496de3d21f05b77bf4349cc9e2558
+ last_write_checksum: sha1:b52bbe7ff22d625b02bf92fbcf5aa834df8768b0
+ pristine_git_object: 811736c154678b258d041233c1e70c50ae70cc0c
src/models/operations/list.ts:
id: ce11386ad30f
last_write_checksum: sha1:357fb735d77e377eba5fec5742d7a4dca6747f47
@@ -17812,12 +17832,16 @@ trackedFiles:
pristine_git_object: 8e9b4047e476a17451b5feb7e9d4a32eec7f61f8
src/sdk/sdk.ts:
id: 784571af2f69
- last_write_checksum: sha1:fc11c771bddc7539fe381439004ae7de407d112b
- pristine_git_object: dee18dfe000e6d40dc50a884a4ec91650971d3d4
+ last_write_checksum: sha1:45eb0c06159c711db01045e7c5f9d798a3ad9a7c
+ pristine_git_object: d15ef3c72127a043a25e40474d479b750d44d523
src/sdk/stt.ts:
id: fd9e88c22d1f
last_write_checksum: sha1:baa74a0310eb8b465dea302495e744e3f3ea1ca5
pristine_git_object: 7efe904b807115d3c691636b37a98fdf3b079878
+ src/sdk/systemone.ts:
+ id: af359eaea7c4
+ last_write_checksum: sha1:6159ff585ccef54dab6c74d100869f46f1d38360
+ pristine_git_object: 7e2b7285263de15e0803472e1411eea57057f5b5
src/sdk/tts.ts:
id: b3236e8fa217
last_write_checksum: sha1:ebe45b666f4809ceb2406e6fd6f307f9455076b3
@@ -21082,4 +21106,38 @@ examples:
application/json: {"error": {"code": 524, "message": "Request timed out. Please try again later."}}
"529":
application/json: {"error": {"code": 529, "message": "Provider returned error"}}
+ createSystemone:
+ speakeasy-default-create-systemone:
+ requestBody:
+ application/json: {"model": "Taurus", "questions": {}, "state": {"key": "Utah", "key1": "Alaska", "key2": "Ohio"}}
+ responses:
+ "200":
+ application/json: {"answers": {"key": {"score": 9690, "type": "score"}}, "model": "Model Y", "usage": {"input_tokens": 514823, "output_tokens": 883118}}
+ "400":
+ application/json: {"error": {"code": 400, "message": "Invalid request parameters"}}
+ "401":
+ application/json: {"error": {"code": 401, "message": "Missing Authentication header"}}
+ "402":
+ application/json: {"error": {"code": 402, "message": "Insufficient credits. Add more using https://openrouter.ai/credits"}}
+ "403":
+ application/json: {"error": {"code": 403, "message": "Only management keys can perform this operation"}}
+ "404":
+ application/json: {"error": {"code": 404, "message": "Resource not found"}}
+ "413":
+ application/json: {"error": {"code": 413, "message": "Request payload too large"}}
+ "429":
+ application/json: {"error": {"code": 429, "message": "Rate limit exceeded"}}
+ "500":
+ application/json: {"error": {"code": 500, "message": "Internal Server Error"}}
+ "502":
+ application/json: {"error": {"code": 502, "message": "Provider returned error"}}
+ "503":
+ application/json: {"error": {"code": 503, "message": "Service temporarily unavailable"}}
+ "524":
+ application/json: {"error": {"code": 524, "message": "Request timed out. Please try again later."}}
+ "529":
+ application/json: {"error": {"code": 529, "message": "Provider returned error"}}
examplesVersion: 1.0.2
+releaseNotes: |
+ ## Typescript SDK Changes:
+ * `openrouter.systemOne.create()`: **Added**
diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml
index 5046ecd41..569c87482 100644
--- a/.speakeasy/gen.yaml
+++ b/.speakeasy/gen.yaml
@@ -37,7 +37,7 @@ generation:
documentation: mintlify
preApplyUnionDiscriminators: true
typescript:
- version: 1.3.7
+ version: 1.3.8
acceptHeaderEnum: false
additionalDependencies:
dependencies:
diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml
index 41d1b10c6..d877656cb 100644
--- a/.speakeasy/out.openapi.yaml
+++ b/.speakeasy/out.openapi.yaml
@@ -43313,7 +43313,7 @@ paths:
- $ref: "#/components/parameters/AppCategories"
/systemone:
post:
- description: 'TypeSafe SDK compatible alias for `POST /api/alpha/decisions`. Accepts the same request body and returns the same response. Bare TypeSafe model IDs such as `jev-1.13` and `jev-latest` are mapped onto the `typesafe/` namespace.'
+ description: 'Sends state and typed questions to a System One model such as Jev and returns its answers. Compatible with the TypeSafe SDKs. Bare System One model IDs such as `jev-1.13` and `jev-latest` are mapped onto the `typesafe/` namespace.'
operationId: 'createSystemone'
requestBody:
content:
@@ -43506,10 +43506,10 @@ paths:
schema:
$ref: '#/components/schemas/ProviderOverloadedResponse'
description: 'Provider Overloaded - Provider is temporarily overloaded'
- summary: 'Submit a System One request (TypeSafe SDK compatible alias)'
+ summary: 'Submit a System One request'
tags:
- - 'alpha.decisions'
- x-speakeasy-ignore: true
+ - 'SystemOne'
+ x-speakeasy-name-override: 'create'
parameters:
- $ref: "#/components/parameters/AppIdentifier"
- $ref: "#/components/parameters/AppDisplayName"
@@ -46481,6 +46481,9 @@ tags:
- description: 'Speech-to-text endpoints'
name: 'STT'
x-displayName: 'Transcriptions'
+ - description: 'System One endpoints for models such as Jev, compatible with the TypeSafe SDKs. See https://openrouter.ai/docs/guides/community/typesafe-sdk.'
+ name: 'SystemOne'
+ x-displayName: 'System One'
- description: 'Text-to-speech endpoints'
name: 'TTS'
x-displayName: 'Speech'
diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock
index 8d833e085..25558463b 100644
--- a/.speakeasy/workflow.lock
+++ b/.speakeasy/workflow.lock
@@ -2,8 +2,8 @@ speakeasyVersion: 1.787.0
sources:
OpenRouter API:
sourceNamespace: open-router-chat-completions-api
- sourceRevisionDigest: sha256:61814618fd7b34af9aaf27dc0eca5d35b47a7d1b0279ba38493dd526a9509dc5
- sourceBlobDigest: sha256:ca4c9cf7aa68e15b51a1a808c528d15d7e90649d2d9006e7fe64a585d7b05fbf
+ sourceRevisionDigest: sha256:217cc17d35c02b1b2bb855a52836ea401e778d519baec6679c86e18d07311a76
+ sourceBlobDigest: sha256:7228242345cf800709206502b1f6b6103752a46578e8f553d67bc6e373995327
tags:
- latest
- 1.0.0
@@ -11,10 +11,10 @@ targets:
openrouter:
source: OpenRouter API
sourceNamespace: open-router-chat-completions-api
- sourceRevisionDigest: sha256:61814618fd7b34af9aaf27dc0eca5d35b47a7d1b0279ba38493dd526a9509dc5
- sourceBlobDigest: sha256:ca4c9cf7aa68e15b51a1a808c528d15d7e90649d2d9006e7fe64a585d7b05fbf
+ sourceRevisionDigest: sha256:217cc17d35c02b1b2bb855a52836ea401e778d519baec6679c86e18d07311a76
+ sourceBlobDigest: sha256:7228242345cf800709206502b1f6b6103752a46578e8f553d67bc6e373995327
codeSamplesNamespace: open-router-chat-completions-api-typescript-code-samples
- codeSamplesRevisionDigest: sha256:6908a14f33339808df89c7a84b697a912466b367a0c85f863fc4a49cfe7d0478
+ codeSamplesRevisionDigest: sha256:df5447f18e01ce0c745bf36442e17e092031f31fdf1a3c9d8de2fa52eac174c9
workflow:
workflowVersion: 1.0.0
speakeasyVersion: 1.787.0
diff --git a/RELEASES.md b/RELEASES.md
index 468bc23ac..ca21e3db6 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -3866,4 +3866,14 @@ Based on:
### Generated
- [typescript v1.3.7] .
### Releases
-- [NPM v1.3.7] https://www.npmjs.com/package/@openrouter/sdk/v/1.3.7 - .
\ No newline at end of file
+- [NPM v1.3.7] https://www.npmjs.com/package/@openrouter/sdk/v/1.3.7 - .
+
+## 2026-09-20 04:44:17
+### Changes
+Based on:
+- OpenAPI Doc
+- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [typescript v1.3.8] .
+### Releases
+- [NPM v1.3.8] https://www.npmjs.com/package/@openrouter/sdk/v/1.3.8 - .
\ No newline at end of file
diff --git a/docs/docs.json b/docs/docs.json
index a1846f7e5..2f08b62f3 100644
--- a/docs/docs.json
+++ b/docs/docs.json
@@ -38,6 +38,7 @@
"sdks/responses/README",
"sdks/scim/README",
"sdks/stt/README",
+ "sdks/systemone/README",
"sdks/tts/README",
"sdks/vault/README",
"sdks/videogeneration/README",
diff --git a/docs/models/operations/createsystemoneglobals.mdx b/docs/models/operations/createsystemoneglobals.mdx
new file mode 100644
index 000000000..50ad8be8e
--- /dev/null
+++ b/docs/models/operations/createsystemoneglobals.mdx
@@ -0,0 +1,19 @@
+---
+title: "CreateSystemoneGlobals"
+---
+
+## Example Usage
+
+```typescript
+import { CreateSystemoneGlobals } from "@openrouter/sdk/models/operations";
+
+let value: CreateSystemoneGlobals = {};
+```
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `httpReferer` | *string* | :heavy_minus_sign: | The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
|
+| `appTitle` | *string* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `appCategories` | *string* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/models/operations/createsystemonerequest.mdx b/docs/models/operations/createsystemonerequest.mdx
new file mode 100644
index 000000000..d5b6c52bc
--- /dev/null
+++ b/docs/models/operations/createsystemonerequest.mdx
@@ -0,0 +1,26 @@
+---
+title: "CreateSystemoneRequest"
+---
+
+## Example Usage
+
+```typescript
+import { CreateSystemoneRequest } from "@openrouter/sdk/models/operations";
+
+let value: CreateSystemoneRequest = {
+ decisionsRequest: {
+ model: "Escalade",
+ questions: {},
+ state: {},
+ },
+};
+```
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `httpReferer` | *string* | :heavy_minus_sign: | The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
|
+| `appTitle` | *string* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `appCategories` | *string* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
+| `decisionsRequest` | [models.DecisionsRequest](../../models/decisionsrequest.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/sdks/systemone/README.mdx b/docs/sdks/systemone/README.mdx
new file mode 100644
index 000000000..b537f54a2
--- /dev/null
+++ b/docs/sdks/systemone/README.mdx
@@ -0,0 +1,170 @@
+---
+title: "SystemOne"
+description: "System One endpoints for models such as Jev, compatible with the TypeSafe SDKs. See https://openrouter.ai/docs/guides/community/typesafe-sdk."
+---
+
+## Overview
+
+System One endpoints for models such as Jev, compatible with the TypeSafe SDKs. See https://openrouter.ai/docs/guides/community/typesafe-sdk.
+
+### Available Operations
+
+* [create](#create) - Submit a System One request
+
+## create
+
+Sends state and typed questions to a System One model such as Jev and returns its answers. Compatible with the TypeSafe SDKs. Bare System One model IDs such as `jev-1.13` and `jev-latest` are mapped onto the `typesafe/` namespace.
+
+### Example Usage
+
+```typescript
+import { OpenRouter } from "@openrouter/sdk";
+
+const openRouter = new OpenRouter({
+ httpReferer: "",
+ appTitle: "",
+ appCategories: "",
+ apiKey: process.env["OPENROUTER_API_KEY"] ?? "",
+});
+
+async function run() {
+ const result = await openRouter.systemOne.create({
+ decisionsRequest: {
+ model: "typesafe/jev-1.13",
+ questions: {
+ "is_bug": {
+ criteria: {
+ false: "The customer is asking a question or requesting a feature.",
+ true: "The customer describes broken or unexpected product behavior.",
+ },
+ instructions: "Is the customer reporting a software defect?",
+ type: "noul",
+ },
+ "team": {
+ criteria: {
+ "account": "Login, permissions, or profile issues.",
+ "frontend": "Rendering, layout, or browser compatibility issues.",
+ "payments": "Checkout, billing, or payment processing issues.",
+ },
+ instructions: "Which team should own this ticket?",
+ type: "choice",
+ },
+ "urgency": {
+ criteria: [
+ "Can wait for the next release",
+ "Should be fixed this week",
+ "Blocking revenue right now",
+ ],
+ instructions: "How urgent is this ticket?",
+ type: "score",
+ },
+ },
+ state: {
+ "customer_tier": "enterprise",
+ "ticket": "My checkout page shows a blank screen after I click Pay. I have tried two browsers.",
+ },
+ },
+ });
+
+ console.log(result);
+}
+
+run();
+```
+
+### Standalone function
+
+The standalone function version of this method:
+
+```typescript
+import { OpenRouterCore } from "@openrouter/sdk/core.js";
+import { systemOneCreate } from "@openrouter/sdk/funcs/systemOneCreate.js";
+
+// Use `OpenRouterCore` for best tree-shaking performance.
+// You can create one instance of it to use across an application.
+const openRouter = new OpenRouterCore({
+ httpReferer: "",
+ appTitle: "",
+ appCategories: "",
+ apiKey: process.env["OPENROUTER_API_KEY"] ?? "",
+});
+
+async function run() {
+ const res = await systemOneCreate(openRouter, {
+ decisionsRequest: {
+ model: "typesafe/jev-1.13",
+ questions: {
+ "is_bug": {
+ criteria: {
+ false: "The customer is asking a question or requesting a feature.",
+ true: "The customer describes broken or unexpected product behavior.",
+ },
+ instructions: "Is the customer reporting a software defect?",
+ type: "noul",
+ },
+ "team": {
+ criteria: {
+ "account": "Login, permissions, or profile issues.",
+ "frontend": "Rendering, layout, or browser compatibility issues.",
+ "payments": "Checkout, billing, or payment processing issues.",
+ },
+ instructions: "Which team should own this ticket?",
+ type: "choice",
+ },
+ "urgency": {
+ criteria: [
+ "Can wait for the next release",
+ "Should be fixed this week",
+ "Blocking revenue right now",
+ ],
+ instructions: "How urgent is this ticket?",
+ type: "score",
+ },
+ },
+ state: {
+ "customer_tier": "enterprise",
+ "ticket": "My checkout page shows a blank screen after I click Pay. I have tried two browsers.",
+ },
+ },
+ });
+ if (res.ok) {
+ const { value: result } = res;
+ console.log(result);
+ } else {
+ console.log("systemOneCreate failed:", res.error);
+ }
+}
+
+run();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `request` | [operations.CreateSystemoneRequest](../../models/operations/createsystemonerequest.mdx) | :heavy_check_mark: | The request object to use for the request. |
+| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. |
+| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. |
+| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.mdx) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. |
+
+### Response
+
+**Promise\<[models.DecisionsResponse](../../models/decisionsresponse.mdx)\>**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| -------------------------------------- | -------------------------------------- | -------------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.PaymentRequiredResponseError | 402 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.PayloadTooLargeResponseError | 413 | application/json |
+| errors.TooManyRequestsResponseError | 429 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.BadGatewayResponseError | 502 | application/json |
+| errors.ServiceUnavailableResponseError | 503 | application/json |
+| errors.EdgeNetworkTimeoutResponseError | 524 | application/json |
+| errors.ProviderOverloadedResponseError | 529 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/jsr.json b/jsr.json
index e3372dc4b..be3e0babc 100644
--- a/jsr.json
+++ b/jsr.json
@@ -2,7 +2,7 @@
{
"name": "@openrouter/sdk",
- "version": "1.3.7",
+ "version": "1.3.8",
"exports": {
".": "./src/index.ts",
"./models/errors": "./src/models/errors/index.ts",
diff --git a/package.json b/package.json
index 1b5742afb..d5c362659 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@openrouter/sdk",
- "version": "1.3.7",
+ "version": "1.3.8",
"author": "OpenRouter",
"description": "The OpenRouter TypeScript SDK is a type-safe toolkit for building AI applications with access to 400+ language models through a unified API.",
"keywords": [
@@ -73,15 +73,15 @@
"lint": "eslint --cache --max-warnings=0 src",
"build": "tsc",
"prepublishOnly": "npm run build",
+ "compile": "tsc",
+ "postinstall": "node scripts/check-types.js || true",
"test": "vitest --run --project unit",
- "test:transit": "exit 0",
+ "test:e2e": "vitest --run --project e2e",
"test:watch": "vitest --watch --project unit",
+ "prepare": "npm run build",
+ "test:transit": "exit 0",
"typecheck": "tsc --noEmit",
- "typecheck:transit": "exit 0",
- "postinstall": "node scripts/check-types.js || true",
- "test:e2e": "vitest --run --project e2e",
- "compile": "tsc",
- "prepare": "npm run build"
+ "typecheck:transit": "exit 0"
},
"peerDependencies": {},
"devDependencies": {
diff --git a/src/funcs/systemOneCreate.ts b/src/funcs/systemOneCreate.ts
new file mode 100644
index 000000000..7ff9ffc17
--- /dev/null
+++ b/src/funcs/systemOneCreate.ts
@@ -0,0 +1,242 @@
+/*
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
+ * @generated-id: 446a269bb013
+ */
+
+import { OpenRouterCore } from "../core.js";
+import { encodeJSON, encodeSimple } from "../lib/encodings.js";
+import { matchStatusCode } from "../lib/http.js";
+import * as M from "../lib/matchers.js";
+import { compactMap } from "../lib/primitives.js";
+import { safeParse } from "../lib/schemas.js";
+import { RequestOptions } from "../lib/sdks.js";
+import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js";
+import { pathToFunc } from "../lib/url.js";
+import {
+ ConnectionError,
+ InvalidRequestError,
+ RequestAbortedError,
+ RequestTimeoutError,
+ UnexpectedClientError,
+} from "../models/errors/httpclienterrors.js";
+import * as errors from "../models/errors/index.js";
+import { OpenRouterError } from "../models/errors/openroutererror.js";
+import { ResponseValidationError } from "../models/errors/responsevalidationerror.js";
+import { SDKValidationError } from "../models/errors/sdkvalidationerror.js";
+import * as models from "../models/index.js";
+import * as operations from "../models/operations/index.js";
+import { APICall, APIPromise } from "../types/async.js";
+import { Result } from "../types/fp.js";
+
+/**
+ * Submit a System One request
+ *
+ * @remarks
+ * Sends state and typed questions to a System One model such as Jev and returns its answers. Compatible with the TypeSafe SDKs. Bare System One model IDs such as `jev-1.13` and `jev-latest` are mapped onto the `typesafe/` namespace.
+ */
+export function systemOneCreate(
+ client: OpenRouterCore,
+ request: operations.CreateSystemoneRequest,
+ options?: RequestOptions,
+): APIPromise<
+ Result<
+ models.DecisionsResponse,
+ | errors.BadRequestResponseError
+ | errors.UnauthorizedResponseError
+ | errors.PaymentRequiredResponseError
+ | errors.ForbiddenResponseError
+ | errors.NotFoundResponseError
+ | errors.PayloadTooLargeResponseError
+ | errors.TooManyRequestsResponseError
+ | errors.InternalServerResponseError
+ | errors.BadGatewayResponseError
+ | errors.ServiceUnavailableResponseError
+ | errors.EdgeNetworkTimeoutResponseError
+ | errors.ProviderOverloadedResponseError
+ | OpenRouterError
+ | ResponseValidationError
+ | ConnectionError
+ | RequestAbortedError
+ | RequestTimeoutError
+ | InvalidRequestError
+ | UnexpectedClientError
+ | SDKValidationError
+ >
+> {
+ return new APIPromise($do(
+ client,
+ request,
+ options,
+ ));
+}
+
+async function $do(
+ client: OpenRouterCore,
+ request: operations.CreateSystemoneRequest,
+ options?: RequestOptions,
+): Promise<
+ [
+ Result<
+ models.DecisionsResponse,
+ | errors.BadRequestResponseError
+ | errors.UnauthorizedResponseError
+ | errors.PaymentRequiredResponseError
+ | errors.ForbiddenResponseError
+ | errors.NotFoundResponseError
+ | errors.PayloadTooLargeResponseError
+ | errors.TooManyRequestsResponseError
+ | errors.InternalServerResponseError
+ | errors.BadGatewayResponseError
+ | errors.ServiceUnavailableResponseError
+ | errors.EdgeNetworkTimeoutResponseError
+ | errors.ProviderOverloadedResponseError
+ | OpenRouterError
+ | ResponseValidationError
+ | ConnectionError
+ | RequestAbortedError
+ | RequestTimeoutError
+ | InvalidRequestError
+ | UnexpectedClientError
+ | SDKValidationError
+ >,
+ APICall,
+ ]
+> {
+ const parsed = safeParse(
+ request,
+ (value) => operations.CreateSystemoneRequest$outboundSchema.parse(value),
+ "Input validation failed",
+ );
+ if (!parsed.ok) {
+ return [parsed, { status: "invalid" }];
+ }
+ const payload = parsed.value;
+ const body = encodeJSON("body", payload.DecisionsRequest, { explode: true });
+
+ const path = pathToFunc("/systemone")();
+
+ const headers = new Headers(compactMap({
+ "Content-Type": "application/json",
+ Accept: "application/json",
+ "HTTP-Referer": encodeSimple(
+ "HTTP-Referer",
+ payload["HTTP-Referer"] ?? client._options.httpReferer,
+ { explode: false, charEncoding: "none" },
+ ),
+ "X-OpenRouter-Categories": encodeSimple(
+ "X-OpenRouter-Categories",
+ payload.appCategories ?? client._options.appCategories,
+ { explode: false, charEncoding: "none" },
+ ),
+ "X-OpenRouter-Title": encodeSimple(
+ "X-OpenRouter-Title",
+ payload.appTitle ?? client._options.appTitle,
+ { explode: false, charEncoding: "none" },
+ ),
+ }));
+
+ const secConfig = await extractSecurity(client._options.apiKey);
+ const securityInput = secConfig == null ? {} : { apiKey: secConfig };
+ const requestSecurity = resolveGlobalSecurity(securityInput);
+
+ const context = {
+ options: client._options,
+ baseURL: options?.serverURL ?? client._baseURL ?? "",
+ operationID: "createSystemone",
+ oAuth2Scopes: null,
+
+ resolvedSecurity: requestSecurity,
+
+ securitySource: client._options.apiKey,
+ retryConfig: options?.retries
+ || client._options.retryConfig
+ || {
+ strategy: "backoff",
+ backoff: {
+ initialInterval: 500,
+ maxInterval: 60000,
+ exponent: 1.5,
+ maxElapsedTime: 3600000,
+ },
+ retryConnectionErrors: true,
+ }
+ || { strategy: "none" },
+ retryCodes: options?.retryCodes || ["5XX"],
+ };
+
+ const requestRes = client._createRequest(context, {
+ security: requestSecurity,
+ method: "POST",
+ baseURL: options?.serverURL,
+ path: path,
+ headers: headers,
+ body: body,
+ userAgent: client._options.userAgent,
+ timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1,
+ }, options);
+ if (!requestRes.ok) {
+ return [requestRes, { status: "invalid" }];
+ }
+ const req = requestRes.value;
+
+ const doResult = await client._do(req, {
+ context,
+ isErrorStatusCode: (statusCode: number) =>
+ matchStatusCode({ status: statusCode } as Response, ["4XX", "5XX"]),
+ retryConfig: context.retryConfig,
+ retryCodes: context.retryCodes,
+ });
+ if (!doResult.ok) {
+ return [doResult, { status: "request-error", request: req }];
+ }
+ const response = doResult.value;
+
+ const responseFields = {
+ HttpMeta: { Response: response, Request: req },
+ };
+
+ const [result] = await M.match<
+ models.DecisionsResponse,
+ | errors.BadRequestResponseError
+ | errors.UnauthorizedResponseError
+ | errors.PaymentRequiredResponseError
+ | errors.ForbiddenResponseError
+ | errors.NotFoundResponseError
+ | errors.PayloadTooLargeResponseError
+ | errors.TooManyRequestsResponseError
+ | errors.InternalServerResponseError
+ | errors.BadGatewayResponseError
+ | errors.ServiceUnavailableResponseError
+ | errors.EdgeNetworkTimeoutResponseError
+ | errors.ProviderOverloadedResponseError
+ | OpenRouterError
+ | ResponseValidationError
+ | ConnectionError
+ | RequestAbortedError
+ | RequestTimeoutError
+ | InvalidRequestError
+ | UnexpectedClientError
+ | SDKValidationError
+ >(
+ M.json(200, models.DecisionsResponse$inboundSchema),
+ M.jsonErr(400, errors.BadRequestResponseError$inboundSchema),
+ M.jsonErr(401, errors.UnauthorizedResponseError$inboundSchema),
+ M.jsonErr(402, errors.PaymentRequiredResponseError$inboundSchema),
+ M.jsonErr(403, errors.ForbiddenResponseError$inboundSchema),
+ M.jsonErr(404, errors.NotFoundResponseError$inboundSchema),
+ M.jsonErr(413, errors.PayloadTooLargeResponseError$inboundSchema),
+ M.jsonErr(429, errors.TooManyRequestsResponseError$inboundSchema),
+ M.jsonErr(500, errors.InternalServerResponseError$inboundSchema),
+ M.jsonErr(502, errors.BadGatewayResponseError$inboundSchema),
+ M.jsonErr(503, errors.ServiceUnavailableResponseError$inboundSchema),
+ M.jsonErr(524, errors.EdgeNetworkTimeoutResponseError$inboundSchema),
+ M.jsonErr(529, errors.ProviderOverloadedResponseError$inboundSchema),
+ M.fail("4XX"),
+ M.fail("5XX"),
+ )(response, req, { extraFields: responseFields });
+ if (!result.ok) {
+ return [result, { status: "complete", request: req, response }];
+ }
+
+ return [result, { status: "complete", request: req, response }];
+}
diff --git a/src/lib/config.ts b/src/lib/config.ts
index 3aef16de4..304ed1e51 100644
--- a/src/lib/config.ts
+++ b/src/lib/config.ts
@@ -79,7 +79,7 @@ export function serverURLFromOptions(options: SDKOptions): URL | null {
export const SDK_METADATA = {
language: "typescript",
openapiDocVersion: "1.0.0",
- sdkVersion: "1.3.7",
+ sdkVersion: "1.3.8",
genVersion: "2.914.0",
- userAgent: "speakeasy-sdk/typescript 1.3.7 2.914.0 1.0.0 @openrouter/sdk",
+ userAgent: "speakeasy-sdk/typescript 1.3.8 2.914.0 1.0.0 @openrouter/sdk",
} as const;
diff --git a/src/models/operations/createsystemone.ts b/src/models/operations/createsystemone.ts
new file mode 100644
index 000000000..8577f62cf
--- /dev/null
+++ b/src/models/operations/createsystemone.ts
@@ -0,0 +1,85 @@
+/*
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
+ * @generated-id: ac12b9bcab42
+ */
+
+import * as z from "zod/v4";
+import { remap as remap$ } from "../../lib/primitives.js";
+import * as models from "../index.js";
+
+export type CreateSystemoneGlobals = {
+ /**
+ * The app identifier should be your app's URL and is used as the primary identifier for rankings.
+ *
+ * @remarks
+ * This is used to track API usage per application.
+ */
+ httpReferer?: string | undefined;
+ /**
+ * The app display name allows you to customize how your app appears in OpenRouter's dashboard.
+ *
+ * @remarks
+ */
+ appTitle?: string | undefined;
+ /**
+ * Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
+ *
+ * @remarks
+ */
+ appCategories?: string | undefined;
+};
+
+export type CreateSystemoneRequest = {
+ /**
+ * The app identifier should be your app's URL and is used as the primary identifier for rankings.
+ *
+ * @remarks
+ * This is used to track API usage per application.
+ */
+ httpReferer?: string | undefined;
+ /**
+ * The app display name allows you to customize how your app appears in OpenRouter's dashboard.
+ *
+ * @remarks
+ */
+ appTitle?: string | undefined;
+ /**
+ * Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
+ *
+ * @remarks
+ */
+ appCategories?: string | undefined;
+ decisionsRequest: models.DecisionsRequest;
+};
+
+/** @internal */
+export type CreateSystemoneRequest$Outbound = {
+ "HTTP-Referer"?: string | undefined;
+ appTitle?: string | undefined;
+ appCategories?: string | undefined;
+ DecisionsRequest: models.DecisionsRequest$Outbound;
+};
+
+/** @internal */
+export const CreateSystemoneRequest$outboundSchema: z.ZodType<
+ CreateSystemoneRequest$Outbound,
+ CreateSystemoneRequest
+> = z.object({
+ httpReferer: z.string().optional(),
+ appTitle: z.string().optional(),
+ appCategories: z.string().optional(),
+ decisionsRequest: models.DecisionsRequest$outboundSchema,
+}).transform((v) => {
+ return remap$(v, {
+ httpReferer: "HTTP-Referer",
+ decisionsRequest: "DecisionsRequest",
+ });
+});
+
+export function createSystemoneRequestToJSON(
+ createSystemoneRequest: CreateSystemoneRequest,
+): string {
+ return JSON.stringify(
+ CreateSystemoneRequest$outboundSchema.parse(createSystemoneRequest),
+ );
+}
diff --git a/src/models/operations/index.ts b/src/models/operations/index.ts
index 1309cce46..811736c15 100644
--- a/src/models/operations/index.ts
+++ b/src/models/operations/index.ts
@@ -31,6 +31,7 @@ export * from "./creatererank.js";
export * from "./createresponses.js";
export * from "./createscimgroupmapping.js";
export * from "./createscimsyncjob.js";
+export * from "./createsystemone.js";
export * from "./createvideos.js";
export * from "./createworkspace.js";
export * from "./deletebyokkey.js";
diff --git a/src/sdk/sdk.ts b/src/sdk/sdk.ts
index dee18dfe0..d15ef3c72 100644
--- a/src/sdk/sdk.ts
+++ b/src/sdk/sdk.ts
@@ -32,6 +32,7 @@ import { Rerank } from "./rerank.js";
import { Responses } from "./responses.js";
import { Scim } from "./scim.js";
import { STT } from "./stt.js";
+import { SystemOne } from "./systemone.js";
import { TTS } from "./tts.js";
import { Vault } from "./vault.js";
import { VideoGeneration } from "./videogeneration.js";
@@ -195,6 +196,11 @@ export class OpenRouter extends ClientSDK {
return (this._scim ??= new Scim(this._options));
}
+ private _systemOne?: SystemOne;
+ get systemOne(): SystemOne {
+ return (this._systemOne ??= new SystemOne(this._options));
+ }
+
private _vault?: Vault;
get vault(): Vault {
return (this._vault ??= new Vault(this._options));
diff --git a/src/sdk/systemone.ts b/src/sdk/systemone.ts
new file mode 100644
index 000000000..7e2b72852
--- /dev/null
+++ b/src/sdk/systemone.ts
@@ -0,0 +1,29 @@
+/*
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
+ * @generated-id: af359eaea7c4
+ */
+
+import { systemOneCreate } from "../funcs/systemOneCreate.js";
+import { ClientSDK, RequestOptions } from "../lib/sdks.js";
+import * as models from "../models/index.js";
+import * as operations from "../models/operations/index.js";
+import { unwrapAsync } from "../types/fp.js";
+
+export class SystemOne extends ClientSDK {
+ /**
+ * Submit a System One request
+ *
+ * @remarks
+ * Sends state and typed questions to a System One model such as Jev and returns its answers. Compatible with the TypeSafe SDKs. Bare System One model IDs such as `jev-1.13` and `jev-latest` are mapped onto the `typesafe/` namespace.
+ */
+ async create(
+ request: operations.CreateSystemoneRequest,
+ options?: RequestOptions,
+ ): Promise {
+ return unwrapAsync(systemOneCreate(
+ this,
+ request,
+ options,
+ ));
+ }
+}