diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock
index e71da49f..35a27e1a 100644
--- a/.speakeasy/gen.lock
+++ b/.speakeasy/gen.lock
@@ -1,19 +1,19 @@
lockVersion: 2.0.0
id: c48cf606-fb42-4a45-9c23-8f0555307828
management:
- docChecksum: c96eb05f8fa38a969d8b8e37bf2b7f92
+ docChecksum: 0958a10a31711b816dc9cd02bd337f8a
docVersion: 1.0.0
speakeasyVersion: 1.803.2
generationVersion: 2.950.13
- releaseVersion: 1.3.119
- configChecksum: 58bcf45d3e1e0911fd269902962fd390
+ releaseVersion: 1.3.120
+ configChecksum: 9b868e697244b0dbed98fd7fba98ba84
repoURL: https://github.com/OpenRouterTeam/python-sdk.git
installationURL: https://github.com/OpenRouterTeam/python-sdk.git
published: true
persistentEdits:
- generation_id: 03f5c8f4-ae2c-47ce-b913-65f8c0eae22a
- pristine_commit_hash: 10867ef33c8902a0b1285bd03ad547d511fdeed2
- pristine_tree_hash: 6c29fbc47d447931827314914f6d087540652cf7
+ generation_id: e8826673-e29c-4471-a306-ed3ef483d323
+ pristine_commit_hash: 18fb4ad13cbafb3c9ce582e43cc3572e788f2358
+ pristine_tree_hash: 147076f8bc197cc5b303c3f7fd9abb4c510bf3b2
features:
python:
acceptHeaders: 3.0.0
@@ -1804,8 +1804,8 @@ trackedFiles:
pristine_git_object: a00676abb210aeb3747aa6d6a0dfbe3e3ad42f76
docs/components/byokproviderslug.mdx:
id: 6ea70819f6d8
- last_write_checksum: sha1:78aa7d07fbba570280aacadb3c64e956568bd5be
- pristine_git_object: fa1124ca02f357b62a99c9e5c6b0511f54254d50
+ last_write_checksum: sha1:0a3990a2b43748a10ab598e28dd5c69801d3b6ca
+ pristine_git_object: 5af0c44dad9920f68d6f09ee5bd3c3ea92a103d4
docs/components/capabilitydescriptor.mdx:
id: 34ac0e581d79
last_write_checksum: sha1:62ee9ccab6cec4572383cef654997ab4106d4676
@@ -9248,8 +9248,8 @@ trackedFiles:
pristine_git_object: 62eedd2321693acb84070b67518bcf8746e71d25
docs/operations/createkeysrequestbody.mdx:
id: 77bb49febf62
- last_write_checksum: sha1:a4d813bf0eb6fbff50e00b9733e85253e14249f5
- pristine_git_object: 3f35133302ca574bb5599060b040ff9829026ec8
+ last_write_checksum: sha1:1144e92d57f67a5938dc2b37042aceee2b38efaa
+ pristine_git_object: 4525da98524a940d330f1d0402efb404c2ec0690
docs/operations/createkeysresponse.mdx:
id: 08e825fab080
last_write_checksum: sha1:ad171dae3c841d8f21b63a8266c79f22b2d5310c
@@ -10496,8 +10496,8 @@ trackedFiles:
pristine_git_object: edbbce3632fff19ba4cbd2677b6766805eaca140
docs/operations/provider.mdx:
id: c75b3bbeeaa0
- last_write_checksum: sha1:e6b9021e6ddbaf6d65a1396dd64bb8a6f42b3b5f
- pristine_git_object: 7562f3a82c17f1910d7a661350e288b870c1bcec
+ last_write_checksum: sha1:23c74f451a5803e8c29725a6bc8f8b4f60801d72
+ pristine_git_object: 17ead5cd65fa9481f3ebc79f5ee3318cb8807237
docs/operations/queryanalyticsdata1.mdx:
id: 0e41beea77d0
last_write_checksum: sha1:f9a349b4fee07f786180e94b45f92002bfae0e56
@@ -10764,8 +10764,8 @@ trackedFiles:
pristine_git_object: 2cfd14c40ab962877968c79c6c958ea432a4f083
docs/sdks/apikeys/README.mdx:
id: 27fcaae1c346
- last_write_checksum: sha1:84590ae50035abe2b53b292186cf494408af4030
- pristine_git_object: 21c449e89a2a1c61383688877f836cb10d2efd2e
+ last_write_checksum: sha1:80273bedf61e6131728eaafbdea8c2a9e7d8e7e7
+ pristine_git_object: c2e930c8fceb2d22431d2a2be01ceb227df72937
docs/sdks/batch/README.mdx:
id: e367aa4f4295
last_write_checksum: sha1:e5084fc19c2bfc9aa28e90a86d4accb5c9153130
@@ -10916,8 +10916,8 @@ trackedFiles:
pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544
pyproject.toml:
id: 5d07e7d72637
- last_write_checksum: sha1:536c24162fd1ef11307a17eadef620e9dc30d5c5
- pristine_git_object: 46dcc28ae56f5b08c61b875d1221dc854bf3c6e2
+ last_write_checksum: sha1:629840b0b324d2f93eb70a09282c7ac9b0478507
+ pristine_git_object: 84ee3e926c0ef1dd5ab0895bb8c0fa5f8dab8e86
scripts/prepare_readme.py:
id: e0c5957a6035
last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54
@@ -10944,8 +10944,8 @@ trackedFiles:
pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137
src/openrouter/_version.py:
id: d8d15ad6c586
- last_write_checksum: sha1:5383a50dd6d41003a2b5c8fc0a0d4804af596a47
- pristine_git_object: 3dd25ead883100f11b3e84e1072b97146e3be81a
+ last_write_checksum: sha1:d3a49dfd86d4466470276eec760afe57ea499d99
+ pristine_git_object: 1f79214623c560cc1a2841fa7f0496cdd8738ddf
src/openrouter/alpha.py:
id: 306c4d93308d
last_write_checksum: sha1:80cc0f39649445431cc2247ed0e0765438467766
@@ -10956,8 +10956,8 @@ trackedFiles:
pristine_git_object: 0e567f3a37cc6aeb45a2551d0d500412e4b7796d
src/openrouter/api_keys.py:
id: 876fac88fff6
- last_write_checksum: sha1:78bf0fcf8a3d194494c8f8d0c2f3f29c893c65b1
- pristine_git_object: 837cbce7fcb6e2d62545b46c09a11cb291171a60
+ last_write_checksum: sha1:3a2893899424d7129a75bf66fd877c83d54af502
+ pristine_git_object: 28616aac95dc38d48923169945f49cf2bceeeaf2
src/openrouter/basesdk.py:
id: c5733c5a1e12
last_write_checksum: sha1:65769ff2cb5473f85b364c6213a0ddc8c68644ea
@@ -11724,8 +11724,8 @@ trackedFiles:
pristine_git_object: 1b3f14e8e93ced25f87ee3ca73c01e2f32f42988
src/openrouter/components/byokproviderslug.py:
id: 6738a8516caf
- last_write_checksum: sha1:4351aca8d7ae2964f8d048f11cc6c557475bd9c1
- pristine_git_object: d527e9f97567abf82acf91589816851c79eea50b
+ last_write_checksum: sha1:dfc921a293020695b4f34809074110377e7f4223
+ pristine_git_object: 719477b8c8cdfd1e516886458e7011a84d04d3ed
src/openrouter/components/capabilitydescriptor.py:
id: 368790a86f10
last_write_checksum: sha1:a167551924ee82b4b5876a0ab698a45fe8c87a95
@@ -14856,8 +14856,8 @@ trackedFiles:
pristine_git_object: 8216a656ec1412a034878e257bd9de9e94fa8da1
src/openrouter/operations/createkeys.py:
id: 64ad31fdaa6c
- last_write_checksum: sha1:0f87b3e97a21a01c1c9b9da5f81c97677026d6e6
- pristine_git_object: 778f557b94a841ad99c9326ddd8bcd98ed87029e
+ last_write_checksum: sha1:97eab4df5a91777912ce61592c107ec2220bd1b7
+ pristine_git_object: 4b4164ca132bd16341c7d6f7fcb6106a30b24788
src/openrouter/operations/createoauthtoken.py:
id: 02e1c061780d
last_write_checksum: sha1:006884cfeeecfede1434f194460b7189cae89de1
@@ -15124,8 +15124,8 @@ trackedFiles:
pristine_git_object: 1dfdcafa35e010924f76a24ed007796e8ad40254
src/openrouter/operations/listbyokkeys.py:
id: b6dd42b3e05f
- last_write_checksum: sha1:c47a34884313b394b949719512cb61ba1ccf123c
- pristine_git_object: 1b25dfa9444abf490819a711e99a3c471823bf15
+ last_write_checksum: sha1:e94980f4b9e3d114e8c21360232f23b0cd50e662
+ pristine_git_object: 1f66e34523d69609a858a6e2acb6307f30de8846
src/openrouter/operations/listcontainerfiles.py:
id: 7a30b9291c76
last_write_checksum: sha1:937c9fb30fd651d28793340285b3389518b26d96
@@ -20076,9 +20076,4 @@ examples:
"500":
application/json: {"error": {"code": 500, "message": "Internal Server Error"}}
examplesVersion: 1.0.2
-releaseNotes: |
- ## Python SDK Changes:
- * `open_router.alpha.decisions.create()`: `response` **Changed**
- * `open_router.tts.create_speech()`: `request.provider` **Changed**
- * `open_router.stt.create_transcription()`: `request.provider` **Changed**
- * `open_router.system_one.create()`: `response` **Changed**
+releaseNotes: "## Python SDK Changes:\n* `open_router.byok.list()`: \n * `request.provider` **Changed**\n * `response.data[].provider.enum(primalabs)` **Added**\n* `open_router.byok.create()`: \n * `request.provider.enum(primalabs)` **Added**\n * `response.data.provider.enum(primalabs)` **Added**\n* `open_router.byok.get()`: `response.data.provider.enum(primalabs)` **Added**\n* `open_router.byok.update()`: `response.data.provider.enum(primalabs)` **Added**\n"
diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml
index ce8b83c5..8ee12675 100644
--- a/.speakeasy/gen.yaml
+++ b/.speakeasy/gen.yaml
@@ -37,7 +37,7 @@ generation:
documentation: mintlify
preApplyUnionDiscriminators: true
python:
- version: 1.3.119
+ version: 1.3.120
additionalDependencies:
dev:
pytest: '>=8.3'
diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml
index 370124c6..6e6de715 100644
--- a/.speakeasy/out.openapi.yaml
+++ b/.speakeasy/out.openapi.yaml
@@ -7118,6 +7118,7 @@ components:
- 'perplexity'
- 'phala'
- 'poolside'
+ - 'primalabs'
- 'primeintellect'
- 'quiver'
- 'recraft'
@@ -39319,6 +39320,7 @@ paths:
- 'perplexity'
- 'phala'
- 'poolside'
+ - 'primalabs'
- 'primeintellect'
- 'quiver'
- 'recraft'
@@ -45745,7 +45747,7 @@ paths:
name: 'My New API Key'
properties:
creator_user_id:
- description: 'Optional user ID of the key creator. Only meaningful for organization-owned keys where a specific member is creating the key.'
+ description: 'Optional user ID of the key creator. Only meaningful for organization-owned keys where a specific member is creating the key. A workspace-scoped management key may only name a member of its own workspace.'
example: 'user_2dHFtVWx2n56w6HkM0000000000'
minLength: 1
type:
diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock
index 25731d0a..fc06225c 100644
--- a/.speakeasy/workflow.lock
+++ b/.speakeasy/workflow.lock
@@ -2,8 +2,8 @@ speakeasyVersion: 1.803.2
sources:
OpenRouter API:
sourceNamespace: open-router-chat-completions-api
- sourceRevisionDigest: sha256:263bfe509d827a14df7d6fd4751900eaac8a6862d1c19fe8b51ec447e4a61d34
- sourceBlobDigest: sha256:e52279af6226c0914fb502f1843badb6c37eed9d359af170c5de580a14d7ab1c
+ sourceRevisionDigest: sha256:52436923d0a6723ff9b4fa9bf9302fbe04561046793ec97d59d0dc5941a3d6ef
+ sourceBlobDigest: sha256:5ce8c1c0436ba33eec92da10f762c92ab4a3e9d160a28bcf266c4e3e5f33ba5d
tags:
- latest
- 1.0.0
@@ -11,10 +11,10 @@ targets:
open-router:
source: OpenRouter API
sourceNamespace: open-router-chat-completions-api
- sourceRevisionDigest: sha256:263bfe509d827a14df7d6fd4751900eaac8a6862d1c19fe8b51ec447e4a61d34
- sourceBlobDigest: sha256:e52279af6226c0914fb502f1843badb6c37eed9d359af170c5de580a14d7ab1c
+ sourceRevisionDigest: sha256:52436923d0a6723ff9b4fa9bf9302fbe04561046793ec97d59d0dc5941a3d6ef
+ sourceBlobDigest: sha256:5ce8c1c0436ba33eec92da10f762c92ab4a3e9d160a28bcf266c4e3e5f33ba5d
codeSamplesNamespace: open-router-python-code-samples
- codeSamplesRevisionDigest: sha256:54631d79160710b2a2a6917f6a32aaf2231d8f815e622559df9945381e9e47c1
+ codeSamplesRevisionDigest: sha256:58f5a62e1535e7ffc644cdf4ac679438040334cc78fa660922f3c22cc1f3ba69
workflow:
workflowVersion: 1.0.0
speakeasyVersion: 1.803.2
diff --git a/RELEASES.md b/RELEASES.md
index 66c3323b..5bc63cb9 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -3959,4 +3959,14 @@ Based on:
### Generated
- [python v1.3.119] .
### Releases
-- [PyPI v1.3.119] https://pypi.org/project/openrouter/1.3.119 - .
\ No newline at end of file
+- [PyPI v1.3.119] https://pypi.org/project/openrouter/1.3.119 - .
+
+## 2026-11-04 21:04:27
+### Changes
+Based on:
+- OpenAPI Doc
+- Speakeasy CLI 1.803.2 (2.950.13) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.3.120] .
+### Releases
+- [PyPI v1.3.120] https://pypi.org/project/openrouter/1.3.120 - .
\ No newline at end of file
diff --git a/docs/components/byokproviderslug.mdx b/docs/components/byokproviderslug.mdx
index fa1124ca..5af0c44d 100644
--- a/docs/components/byokproviderslug.mdx
+++ b/docs/components/byokproviderslug.mdx
@@ -106,6 +106,7 @@ This is an open enum. Unrecognized values will not fail type checks.
- `"perplexity"`
- `"phala"`
- `"poolside"`
+- `"primalabs"`
- `"primeintellect"`
- `"quiver"`
- `"recraft"`
diff --git a/docs/operations/createkeysrequestbody.mdx b/docs/operations/createkeysrequestbody.mdx
index 3f351333..4525da98 100644
--- a/docs/operations/createkeysrequestbody.mdx
+++ b/docs/operations/createkeysrequestbody.mdx
@@ -6,7 +6,7 @@ title: "CreateKeysRequestBody"
| Field | Type | Required | Description | Example |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `creator_user_id` | *OptionalNullable[str]* | ➖ | Optional user ID of the key creator. Only meaningful for organization-owned keys where a specific member is creating the key. | user_2dHFtVWx2n56w6HkM0000000000 |
+| `creator_user_id` | *OptionalNullable[str]* | ➖ | Optional user ID of the key creator. Only meaningful for organization-owned keys where a specific member is creating the key. A workspace-scoped management key may only name a member of its own workspace. | user_2dHFtVWx2n56w6HkM0000000000 |
| `expires_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | ➖ | Optional ISO 8601 UTC expiration timestamp. Must include seconds (YYYY-MM-DDTHH:MM:SSZ; fractional seconds allowed); minute-precision timestamps are rejected. | 2027-12-31T23:59:59Z |
| `external` | [Optional[operations.External]](../operations/external.mdx) | ➖ | Optional partner-defined identity associated with the created API key. | |
| `include_byok_in_limit` | *Optional[bool]* | ➖ | Whether to include BYOK usage in the limit | true |
diff --git a/docs/operations/provider.mdx b/docs/operations/provider.mdx
index 7562f3a8..17ead5cd 100644
--- a/docs/operations/provider.mdx
+++ b/docs/operations/provider.mdx
@@ -106,6 +106,7 @@ This is an open enum. Unrecognized values will not fail type checks.
- `"perplexity"`
- `"phala"`
- `"poolside"`
+- `"primalabs"`
- `"primeintellect"`
- `"quiver"`
- `"recraft"`
diff --git a/docs/sdks/apikeys/README.mdx b/docs/sdks/apikeys/README.mdx
index 21c449e8..c2e930c8 100644
--- a/docs/sdks/apikeys/README.mdx
+++ b/docs/sdks/apikeys/README.mdx
@@ -150,7 +150,7 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | ➖ | 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.
| |
| `x_open_router_title` | *Optional[str]* | ➖ | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | ➖ | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `creator_user_id` | *OptionalNullable[str]* | ➖ | Optional user ID of the key creator. Only meaningful for organization-owned keys where a specific member is creating the key. | user_2dHFtVWx2n56w6HkM0000000000 |
+| `creator_user_id` | *OptionalNullable[str]* | ➖ | Optional user ID of the key creator. Only meaningful for organization-owned keys where a specific member is creating the key. A workspace-scoped management key may only name a member of its own workspace. | user_2dHFtVWx2n56w6HkM0000000000 |
| `expires_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | ➖ | Optional ISO 8601 UTC expiration timestamp. Must include seconds (YYYY-MM-DDTHH:MM:SSZ; fractional seconds allowed); minute-precision timestamps are rejected. | 2027-12-31T23:59:59Z |
| `external` | [Optional[operations.External]](../../operations/external.mdx) | ➖ | Optional partner-defined identity associated with the created API key. | |
| `include_byok_in_limit` | *Optional[bool]* | ➖ | Whether to include BYOK usage in the limit | true |
diff --git a/pyproject.toml b/pyproject.toml
index 46dcc28a..84ee3e92 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "openrouter"
-version = "1.3.119"
+version = "1.3.120"
description = "Official Python Client SDK for OpenRouter."
authors = [{ name = "OpenRouter" },]
readme = "README-PYPI.md"
diff --git a/src/openrouter/_version.py b/src/openrouter/_version.py
index 3dd25ead..1f792146 100644
--- a/src/openrouter/_version.py
+++ b/src/openrouter/_version.py
@@ -3,10 +3,10 @@
import importlib.metadata
__title__: str = "openrouter"
-__version__: str = "1.3.119"
+__version__: str = "1.3.120"
__openapi_doc_version__: str = "1.0.0"
__gen_version__: str = "2.950.13"
-__user_agent__: str = "speakeasy-sdk/python 1.3.119 2.950.13 1.0.0 openrouter"
+__user_agent__: str = "speakeasy-sdk/python 1.3.120 2.950.13 1.0.0 openrouter"
try:
if __package__ is not None:
diff --git a/src/openrouter/api_keys.py b/src/openrouter/api_keys.py
index 837cbce7..28616aac 100644
--- a/src/openrouter/api_keys.py
+++ b/src/openrouter/api_keys.py
@@ -590,7 +590,7 @@ def create(
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
- :param creator_user_id: Optional user ID of the key creator. Only meaningful for organization-owned keys where a specific member is creating the key.
+ :param creator_user_id: Optional user ID of the key creator. Only meaningful for organization-owned keys where a specific member is creating the key. A workspace-scoped management key may only name a member of its own workspace.
:param expires_at: Optional ISO 8601 UTC expiration timestamp. Must include seconds (YYYY-MM-DDTHH:MM:SSZ; fractional seconds allowed); minute-precision timestamps are rejected.
:param external: Optional partner-defined identity associated with the created API key.
:param include_byok_in_limit: Whether to include BYOK usage in the limit
@@ -762,7 +762,7 @@ async def create_async(
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
- :param creator_user_id: Optional user ID of the key creator. Only meaningful for organization-owned keys where a specific member is creating the key.
+ :param creator_user_id: Optional user ID of the key creator. Only meaningful for organization-owned keys where a specific member is creating the key. A workspace-scoped management key may only name a member of its own workspace.
:param expires_at: Optional ISO 8601 UTC expiration timestamp. Must include seconds (YYYY-MM-DDTHH:MM:SSZ; fractional seconds allowed); minute-precision timestamps are rejected.
:param external: Optional partner-defined identity associated with the created API key.
:param include_byok_in_limit: Whether to include BYOK usage in the limit
diff --git a/src/openrouter/components/byokproviderslug.py b/src/openrouter/components/byokproviderslug.py
index d527e9f9..719477b8 100644
--- a/src/openrouter/components/byokproviderslug.py
+++ b/src/openrouter/components/byokproviderslug.py
@@ -95,6 +95,7 @@
"perplexity",
"phala",
"poolside",
+ "primalabs",
"primeintellect",
"quiver",
"recraft",
diff --git a/src/openrouter/operations/createkeys.py b/src/openrouter/operations/createkeys.py
index 778f557b..4b4164ca 100644
--- a/src/openrouter/operations/createkeys.py
+++ b/src/openrouter/operations/createkeys.py
@@ -131,7 +131,7 @@ class CreateKeysRequestBodyTypedDict(TypedDict):
name: str
r"""Name for the new API key"""
creator_user_id: NotRequired[Nullable[str]]
- r"""Optional user ID of the key creator. Only meaningful for organization-owned keys where a specific member is creating the key."""
+ r"""Optional user ID of the key creator. Only meaningful for organization-owned keys where a specific member is creating the key. A workspace-scoped management key may only name a member of its own workspace."""
expires_at: NotRequired[Nullable[datetime]]
r"""Optional ISO 8601 UTC expiration timestamp. Must include seconds (YYYY-MM-DDTHH:MM:SSZ; fractional seconds allowed); minute-precision timestamps are rejected."""
external: NotRequired[ExternalTypedDict]
@@ -151,7 +151,7 @@ class CreateKeysRequestBody(BaseModel):
r"""Name for the new API key"""
creator_user_id: OptionalNullable[str] = UNSET
- r"""Optional user ID of the key creator. Only meaningful for organization-owned keys where a specific member is creating the key."""
+ r"""Optional user ID of the key creator. Only meaningful for organization-owned keys where a specific member is creating the key. A workspace-scoped management key may only name a member of its own workspace."""
expires_at: OptionalNullable[datetime] = UNSET
r"""Optional ISO 8601 UTC expiration timestamp. Must include seconds (YYYY-MM-DDTHH:MM:SSZ; fractional seconds allowed); minute-precision timestamps are rejected."""
diff --git a/src/openrouter/operations/listbyokkeys.py b/src/openrouter/operations/listbyokkeys.py
index 1b25dfa9..1f66e345 100644
--- a/src/openrouter/operations/listbyokkeys.py
+++ b/src/openrouter/operations/listbyokkeys.py
@@ -172,6 +172,7 @@ def serialize_model(self, handler):
"perplexity",
"phala",
"poolside",
+ "primalabs",
"primeintellect",
"quiver",
"recraft",
diff --git a/uv.lock b/uv.lock
index c9776201..e5674114 100644
--- a/uv.lock
+++ b/uv.lock
@@ -231,7 +231,7 @@ wheels = [
[[package]]
name = "openrouter"
-version = "1.3.119"
+version = "1.3.120"
source = { editable = "." }
dependencies = [
{ name = "httpcore" },