diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock
index 3b0d16cb6..36becbe30 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: 434b72129cda1f59f72dae47227c00ba
+ docChecksum: 279b5f97d142c9e39e195b0a84085c9d
docVersion: 1.0.0
speakeasyVersion: 1.787.0
generationVersion: 2.914.0
- releaseVersion: 1.3.65
- configChecksum: 3dfa94babff61f2a72b47112402a6ce3
+ releaseVersion: 1.3.66
+ configChecksum: d60333aec60c8fc9660768e2c1487354
repoURL: https://github.com/OpenRouterTeam/python-sdk.git
installationURL: https://github.com/OpenRouterTeam/python-sdk.git
published: true
persistentEdits:
- generation_id: 3dcb622d-01b9-48e2-9a6f-5186f23b90de
- pristine_commit_hash: 03713aa9c715022aabafbaa3903e62b137404f37
- pristine_tree_hash: f65dc457eb12aa360c8c42bc3c3c534cf6d7c601
+ generation_id: 51013c78-9d03-44f4-ac2e-93284b41f297
+ pristine_commit_hash: df1988e5cff6b0b03406873a3986cdaaf8dff042
+ pristine_tree_hash: 1e738a4df36772d51cf0ada4ff040bb3429109b4
features:
python:
acceptHeaders: 3.0.0
@@ -4682,10 +4682,6 @@ trackedFiles:
id: f564e5e9a7d3
last_write_checksum: sha1:e51f09243a346926c426f53b07865f5ed145511d
pristine_git_object: 6025f743b09271172bd6bc22801cc51d73513980
- docs/components/method.mdx:
- id: 52eb604d9844
- last_write_checksum: sha1:a1671e63404dd1f194cf0704138919c10a9ca6c6
- pristine_git_object: 90145e7861da0ef5f30900bff09539fe2e1bdeb8
docs/components/mismatchbehavior.mdx:
id: 729a5cc8daa3
last_write_checksum: sha1:e964917ce0f95f4347824b1a51ac6bb120469707
@@ -5064,8 +5060,12 @@ trackedFiles:
pristine_git_object: 9476e2dbdbec63648b8493bee15c7fd9b37c6933
docs/components/observabilitywebhookdestinationconfig.mdx:
id: 3f56a0517583
- last_write_checksum: sha1:50a935198381531354a979579be97e2f61f1ad46
- pristine_git_object: 8dab0b1a2c58a1cc0d7b1d37d6290d7b5d67473a
+ last_write_checksum: sha1:81471a0841dd7068bfa104d246f61ec3708480f6
+ pristine_git_object: f74e02efc42ab6d39086ce5fed58a9e5684c20a3
+ docs/components/observabilitywebhookdestinationmethod.mdx:
+ id: d19f8cf49bfe
+ last_write_checksum: sha1:a9ba20f01604880cc2eafca89741b089fe8cc342
+ pristine_git_object: 7e7dd924ff4056ab3ae9003ca9c7dc7aebe4cf21
docs/components/observabilitywebhookdestinationtype.mdx:
id: 35262d81b0a1
last_write_checksum: sha1:53220ed66cf059d9f06df81b7f5bb0f2d87f5283
@@ -6758,6 +6758,10 @@ trackedFiles:
id: 4ad56b7d7d1a
last_write_checksum: sha1:0ee81f3831154c344605a72f2924167f220f402b
pristine_git_object: 2609a9af043ce5570970252f3ebd5df12d693be3
+ docs/components/route.mdx:
+ id: f43dfcb07063
+ last_write_checksum: sha1:473caf7a8c0c3ab2a0b9e6ec4d18b068e78a1489
+ pristine_git_object: d4c2213a983345b39746b758896ecfe67babc994
docs/components/routedservicetier.mdx:
id: 1ecc7cdd925e
last_write_checksum: sha1:674d22f78f85c9d89408f6e791023fd6d1f36289
@@ -6980,12 +6984,16 @@ trackedFiles:
pristine_git_object: 1c0dd3c44cfce8b531e7d89e3db6b2787f060984
docs/components/signinterndaemonrequest.mdx:
id: a611533bd5da
- last_write_checksum: sha1:9b4ac1fc0b10f73949fa916c7a6413f1dd4e31dc
- pristine_git_object: b4bf06967824c3ac778856a8b32cb08a9dd980d6
+ last_write_checksum: sha1:f3f1449053393f9bb4392d20e0c00b815a230e20
+ pristine_git_object: 637f6d3cb76052768c2451e81ac0496c8b27aa34
+ docs/components/signinterndaemonrequestmethod.mdx:
+ id: 43e07b7170f0
+ last_write_checksum: sha1:8b4d6c38b0c8eb62202d8f31d853bac2da0e2981
+ pristine_git_object: 3f4ae7426fc3bec4b84048ee50ebc8fd8c695809
docs/components/signinterndaemonresponse.mdx:
id: e86dd4c94fe2
- last_write_checksum: sha1:ae1a817ee130d525983e7d42615ac7a64ba4cdff
- pristine_git_object: d989162b01084a3c272851642eab332009f68512
+ last_write_checksum: sha1:ada171d25c67a5185ea699b948746190ef5d6e5f
+ pristine_git_object: 704de49dc9f5c22c068603f429ddbb8d38be6454
docs/components/softdeny.mdx:
id: d113e0c596b9
last_write_checksum: sha1:56c1888fc6437e170d31ceabfa505cc1aad87ce2
@@ -10264,8 +10272,8 @@ trackedFiles:
pristine_git_object: 08c687694efbecf50406ae7929029d39fb121295
docs/sdks/interns/README.mdx:
id: 2f8a053ffe78
- last_write_checksum: sha1:8008b93f37978808ea5c850f57a93653fd897da1
- pristine_git_object: b90fc698bfe2b3fc3fa0b06699a33e4e158aef22
+ last_write_checksum: sha1:78ad14c524469b4c89d30d0a90867da355bd090d
+ pristine_git_object: a72d409627f77eb58be18f3f8ba3074a135d465a
docs/sdks/models/README.mdx:
id: 58f1ca464e0b
last_write_checksum: sha1:aab5b254f0a6dc7ab7c6d543b20c889113cc0dc9
@@ -10340,8 +10348,8 @@ trackedFiles:
pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544
pyproject.toml:
id: 5d07e7d72637
- last_write_checksum: sha1:d9010c2b804870c3af08efc720a7a3a135591d08
- pristine_git_object: a6cf6662925f231ffe607ae14cdb7ed2d53bdae7
+ last_write_checksum: sha1:7337e6a742ddf8c0eace51964400336fa6230295
+ pristine_git_object: 8f7be67ffe7f60cb9210dcf954af115205edf7c6
scripts/prepare_readme.py:
id: e0c5957a6035
last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54
@@ -10368,8 +10376,8 @@ trackedFiles:
pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137
src/openrouter/_version.py:
id: d8d15ad6c586
- last_write_checksum: sha1:1ef3801c7751ad5b0de9b961109aadac386517df
- pristine_git_object: 65d80334569ef2a43d3e4217f9cf6e5dcdc5e2b5
+ last_write_checksum: sha1:3d286e29d6efe05e4e3008093b349ba5bf9358ed
+ pristine_git_object: a003753cca71e6a74f155937fea572fe184c3172
src/openrouter/alpha.py:
id: 306c4d93308d
last_write_checksum: sha1:30f55a360f41376ab194b9ea725fe4e001a5ae1a
@@ -10416,8 +10424,8 @@ trackedFiles:
pristine_git_object: ad3d247954547814054c01989a2dff3d12b3e4e1
src/openrouter/components/__init__.py:
id: 81754e97b3f4
- last_write_checksum: sha1:83b51cf340e3e52b4877b2c5b3b59b1669acb3f8
- pristine_git_object: 2fe86e6fd9510e807aa92c8d0297dbe9292b1b3d
+ last_write_checksum: sha1:7b928639267c6cc16d05a08d4b77811103e843d6
+ pristine_git_object: bc3bdb912faf2fdc73bbe4c57028467819b664a6
src/openrouter/components/aabenchmarkentry.py:
id: e2e0f0b48c82
last_write_checksum: sha1:fab4d9a24d2cea937bb749d46c5f83941e99d65c
@@ -12584,8 +12592,8 @@ trackedFiles:
pristine_git_object: c31d1a78f74e7a11f48313316d479c48e247fbf1
src/openrouter/components/observabilitywebhookdestination.py:
id: 2f942be86581
- last_write_checksum: sha1:747e2ed4b6109edb2f3fe13477841e468f624a5c
- pristine_git_object: 2547f18848d56de28583de085ca7b43e6e96159c
+ last_write_checksum: sha1:501abf22f567b88f3950c2cd854105e464ecf3d8
+ pristine_git_object: 86193307ec687026bf275fd0bf776f63a83535be
src/openrouter/components/openaifile.py:
id: fd021f0cb031
last_write_checksum: sha1:b44d0b18a4c9b119382e224786191e8d5c49960b
@@ -13360,12 +13368,12 @@ trackedFiles:
pristine_git_object: 418953ba7366a6015934bf8795178d79adb03b89
src/openrouter/components/signinterndaemonrequest.py:
id: 20aab639ddf2
- last_write_checksum: sha1:eb60468372e72512d198e78705dbd254dafe56c9
- pristine_git_object: 4d2f78f63e022201fb7729a1e218a4c02a148ffc
+ last_write_checksum: sha1:bde362d81745729323ff18cbcb534a45c62fa37a
+ pristine_git_object: a5d555221fbfd5ef01a1468b341042d8d39faeb3
src/openrouter/components/signinterndaemonresponse.py:
id: 206595537b76
- last_write_checksum: sha1:1903ab3a67f8695273bed9f3fe7e90b9f1aa83f2
- pristine_git_object: e44305da959380e177fcc2077d0e80ce4d522a57
+ last_write_checksum: sha1:c0675834e1a8bd8f67620f8e2fc1232421ee720b
+ pristine_git_object: 43b66eaec7de82007ea1b29e60c86dc609cafa6b
src/openrouter/components/speechinput.py:
id: 14e46bea4b32
last_write_checksum: sha1:c6e320441ce7eaa95072d8796e97f082302bb326
@@ -14052,8 +14060,8 @@ trackedFiles:
pristine_git_object: 50643a126668498dd668c7cceb9f78c03d413d32
src/openrouter/interns.py:
id: d18df05c5c6d
- last_write_checksum: sha1:0034247cc9ab55bae388b349c880f550c1c8d584
- pristine_git_object: cfee3dcdd1af583da4be969e51ee53bd43f60208
+ last_write_checksum: sha1:0e26b094dfe3e143d023a778b2c5a9415a5a458f
+ pristine_git_object: 56198d2f56c59f52eed5b35f59d54b5ec1f4247b
src/openrouter/models/__init__.py:
id: ed73b93abb3f
last_write_checksum: sha1:932a790ae66ccd7d7022b39c659bcf72a664ebea
@@ -18982,6 +18990,4 @@ examples:
"504":
application/json: {"error": {"code": 504, "message": "Vault request timed out"}}
examplesVersion: 1.0.2
-releaseNotes: |
- ## Python SDK Changes:
- * `open_router.vault.list_intern_connections()`: **Added**
+releaseNotes: "## Python SDK Changes:\n* `open_router.interns.sign_intern_daemon_access_request()`: \n * `request.route` **Added**\n * `response` **Changed**\n* `open_router.interns.sign_intern_daemon_request()`: \n * `request.route` **Added**\n * `response` **Changed**\n"
diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml
index 7c72c36ae..f298cd914 100644
--- a/.speakeasy/gen.yaml
+++ b/.speakeasy/gen.yaml
@@ -36,7 +36,7 @@ generation:
documentation: mintlify
preApplyUnionDiscriminators: true
python:
- version: 1.3.65
+ version: 1.3.66
additionalDependencies:
dev: {}
main: {}
diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml
index fc05cc128..82c168a4e 100644
--- a/.speakeasy/out.openapi.yaml
+++ b/.speakeasy/out.openapi.yaml
@@ -29854,6 +29854,24 @@ components:
example: 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
pattern: '^[0-9a-f]{64}$'
type: 'string'
+ route:
+ additionalProperties: false
+ description: 'The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`).'
+ properties:
+ method:
+ description: 'The HTTP method of the daemon request.'
+ enum:
+ - 'POST'
+ type: 'string'
+ path:
+ description: 'The daemon request path, percent-encoded as sent, without origin or query. The route-bound proof admits only this path.'
+ example: '/api/invoke'
+ pattern: '^\/[!"$->@-~]{0,2047}$'
+ type: 'string'
+ required:
+ - 'method'
+ - 'path'
+ type: 'object'
required:
- 'bodySha256'
type: 'object'
@@ -29865,9 +29883,15 @@ components:
x-ori-invoke-timestamp: '1789000000'
x-ori-invoke-user: 'user_2abc'
properties:
+ x-ori-invoke-nonce:
+ description: 'Present with `x-ori-invoke-signature-v2`: the single-use id that proof is bound to.'
+ type: 'string'
x-ori-invoke-signature:
description: 'Base64 Ed25519 signature over the intern id, timestamp, user and body digest.'
type: 'string'
+ x-ori-invoke-signature-v2:
+ description: 'Present when the request named a `route`: Base64 Ed25519 signature over the intern id, timestamp, nonce, user, method, path and body digest. The intern accepts it once.'
+ type: 'string'
x-ori-invoke-timestamp:
description: 'Unix seconds at signing; the daemon refuses proofs older than its window.'
type: 'string'
@@ -43400,7 +43424,7 @@ paths:
- $ref: "#/components/parameters/AppCategories"
/interns/{internId}/daemon:
get:
- description: 'Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. The API key selects the caller, workspace and visible interns. An intern''s own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required.'
+ description: 'Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: only an OAuth-token caller (`ori login --oidc`) may read it, the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. API keys get 403 `personal_identity_required`. The API key selects the caller, workspace and visible interns. An intern''s own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required.'
operationId: 'getInternDaemon'
parameters:
- description: 'ID of an intern visible to the authenticated API key.'
diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock
index 8fc4b0cbe..909f3ef4b 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:f4e39833826b4d8ecd08b96f825f301cadad81fdd5e6204b8b965cef04164b96
- sourceBlobDigest: sha256:50f36dd6ae42eee1e62fbb3a8963869260d5e271267089645576b1b4b16e385f
+ sourceRevisionDigest: sha256:6a01fa8140088735ccb9c5e5e79272410e4a8d64f9caa9756592c1d540feb4da
+ sourceBlobDigest: sha256:44dc586b67df101e5b115b16c8d6a2991c4488257eef039c3e1491f4af69437f
tags:
- latest
- 1.0.0
@@ -11,10 +11,10 @@ targets:
open-router:
source: OpenRouter API
sourceNamespace: open-router-chat-completions-api
- sourceRevisionDigest: sha256:f4e39833826b4d8ecd08b96f825f301cadad81fdd5e6204b8b965cef04164b96
- sourceBlobDigest: sha256:50f36dd6ae42eee1e62fbb3a8963869260d5e271267089645576b1b4b16e385f
+ sourceRevisionDigest: sha256:6a01fa8140088735ccb9c5e5e79272410e4a8d64f9caa9756592c1d540feb4da
+ sourceBlobDigest: sha256:44dc586b67df101e5b115b16c8d6a2991c4488257eef039c3e1491f4af69437f
codeSamplesNamespace: open-router-python-code-samples
- codeSamplesRevisionDigest: sha256:0d63545d7f55ad59e205de8824045c5232a9efd8cb66da46c991b3aa64d68586
+ codeSamplesRevisionDigest: sha256:14b00aec0efae7dcf67569be815b3772c0021a1e1eda7d404503d5de832ec122
workflow:
workflowVersion: 1.0.0
speakeasyVersion: 1.787.0
diff --git a/RELEASES.md b/RELEASES.md
index 32b3b92a9..dc787af08 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -3419,4 +3419,14 @@ Based on:
### Generated
- [python v1.3.65] .
### Releases
-- [PyPI v1.3.65] https://pypi.org/project/openrouter/1.3.65 - .
\ No newline at end of file
+- [PyPI v1.3.65] https://pypi.org/project/openrouter/1.3.65 - .
+
+## 2026-10-18 21:50:16
+### Changes
+Based on:
+- OpenAPI Doc
+- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.3.66] .
+### Releases
+- [PyPI v1.3.66] https://pypi.org/project/openrouter/1.3.66 - .
\ No newline at end of file
diff --git a/docs/components/observabilitywebhookdestinationconfig.mdx b/docs/components/observabilitywebhookdestinationconfig.mdx
index b05354574..b70eabd7b 100644
--- a/docs/components/observabilitywebhookdestinationconfig.mdx
+++ b/docs/components/observabilitywebhookdestinationconfig.mdx
@@ -4,8 +4,8 @@ title: "ObservabilityWebhookDestinationConfig"
## Fields
-| Field | Type | Required | Description |
-| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |
-| `headers` | Dict[str, *str*] | ➖ | N/A |
-| `method` | [Optional[components.Method]](../components/method.mdx) | ➖ | N/A |
-| `url` | *str* | ✅ | N/A |
\ No newline at end of file
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `headers` | Dict[str, *str*] | ➖ | N/A |
+| `method` | [Optional[components.ObservabilityWebhookDestinationMethod]](../components/observabilitywebhookdestinationmethod.mdx) | ➖ | N/A |
+| `url` | *str* | ✅ | N/A |
\ No newline at end of file
diff --git a/docs/components/method.mdx b/docs/components/observabilitywebhookdestinationmethod.mdx
similarity index 54%
rename from docs/components/method.mdx
rename to docs/components/observabilitywebhookdestinationmethod.mdx
index 90145e786..7e7dd924f 100644
--- a/docs/components/method.mdx
+++ b/docs/components/observabilitywebhookdestinationmethod.mdx
@@ -1,14 +1,14 @@
---
-title: "Method"
+title: "ObservabilityWebhookDestinationMethod"
---
## Example Usage
```python
-from openrouter.components import Method
+from openrouter.components import ObservabilityWebhookDestinationMethod
# Open enum: unrecognized values are captured as UnrecognizedStr
-value: Method = "POST"
+value: ObservabilityWebhookDestinationMethod = "POST"
```
diff --git a/docs/components/route.mdx b/docs/components/route.mdx
new file mode 100644
index 000000000..5ae3ea59d
--- /dev/null
+++ b/docs/components/route.mdx
@@ -0,0 +1,13 @@
+---
+title: "Route"
+---
+
+The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`).
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
+| `method` | [components.SignInternDaemonRequestMethod](../components/signinterndaemonrequestmethod.mdx) | ✅ | The HTTP method of the daemon request. | |
+| `path` | *str* | ✅ | The daemon request path, percent-encoded as sent, without origin or query. The route-bound proof admits only this path. | /api/invoke |
\ No newline at end of file
diff --git a/docs/components/signinterndaemonrequest.mdx b/docs/components/signinterndaemonrequest.mdx
index 5ed4ce9b1..9e1398349 100644
--- a/docs/components/signinterndaemonrequest.mdx
+++ b/docs/components/signinterndaemonrequest.mdx
@@ -4,6 +4,7 @@ title: "SignInternDaemonRequest"
## Fields
-| Field | Type | Required | Description | Example |
-| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
-| `body_sha256` | *str* | ✅ | Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body. | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
\ No newline at end of file
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `body_sha256` | *str* | ✅ | Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body. | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
+| `route` | [Optional[components.Route]](../components/route.mdx) | ➖ | The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`). | |
\ No newline at end of file
diff --git a/docs/components/signinterndaemonrequestmethod.mdx b/docs/components/signinterndaemonrequestmethod.mdx
new file mode 100644
index 000000000..3f4ae7426
--- /dev/null
+++ b/docs/components/signinterndaemonrequestmethod.mdx
@@ -0,0 +1,17 @@
+---
+title: "SignInternDaemonRequestMethod"
+---
+
+The HTTP method of the daemon request.
+
+## Example Usage
+
+```python
+from openrouter.components import SignInternDaemonRequestMethod
+value: SignInternDaemonRequestMethod = "POST"
+```
+
+
+## Values
+
+- `"POST"`
diff --git a/docs/components/signinterndaemonresponse.mdx b/docs/components/signinterndaemonresponse.mdx
index 5da8e2eeb..3b1cad78e 100644
--- a/docs/components/signinterndaemonresponse.mdx
+++ b/docs/components/signinterndaemonresponse.mdx
@@ -7,8 +7,10 @@ Headers the CLI copies onto the daemon request so the sidecar can verify who is
## Fields
-| Field | Type | Required | Description |
-| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
-| `x_ori_invoke_signature` | *str* | ✅ | Base64 Ed25519 signature over the intern id, timestamp, user and body digest. |
-| `x_ori_invoke_timestamp` | *str* | ✅ | Unix seconds at signing; the daemon refuses proofs older than its window. |
-| `x_ori_invoke_user` | *str* | ✅ | The verified OAuth subject the proof names. Never taken from the request. |
\ No newline at end of file
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `x_ori_invoke_nonce` | *Optional[str]* | ➖ | Present with `x-ori-invoke-signature-v2`: the single-use id that proof is bound to. |
+| `x_ori_invoke_signature` | *str* | ✅ | Base64 Ed25519 signature over the intern id, timestamp, user and body digest. |
+| `x_ori_invoke_signature_v2` | *Optional[str]* | ➖ | Present when the request named a `route`: Base64 Ed25519 signature over the intern id, timestamp, nonce, user, method, path and body digest. The intern accepts it once. |
+| `x_ori_invoke_timestamp` | *str* | ✅ | Unix seconds at signing; the daemon refuses proofs older than its window. |
+| `x_ori_invoke_user` | *str* | ✅ | The verified OAuth subject the proof names. Never taken from the request. |
\ No newline at end of file
diff --git a/docs/sdks/interns/README.mdx b/docs/sdks/interns/README.mdx
index a7bd746bb..c2bf0c73f 100644
--- a/docs/sdks/interns/README.mdx
+++ b/docs/sdks/interns/README.mdx
@@ -274,7 +274,7 @@ with OpenRouter(
## get_intern_daemon
-Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. The API key selects the caller, workspace and visible interns. An intern's own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required.
+Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: only an OAuth-token caller (`ori login --oidc`) may read it, the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. API keys get 403 `personal_identity_required`. The API key selects the caller, workspace and visible interns. An intern's own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required.
### Example Usage
@@ -397,14 +397,15 @@ with OpenRouter(
### Parameters
-| Parameter | Type | Required | Description | Example |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `intern_id` | *str* | ✅ | ID of an intern visible to the authenticated API key. | 7c9e6679-7425-40de-944b-e07fc1f90ae7 |
-| `body_sha256` | *str* | ✅ | Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body. | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
-| `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.
| |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | |
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `intern_id` | *str* | ✅ | ID of an intern visible to the authenticated API key. | 7c9e6679-7425-40de-944b-e07fc1f90ae7 |
+| `body_sha256` | *str* | ✅ | Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body. | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
+| `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.
| |
+| `route` | [Optional[components.Route]](../../components/route.mdx) | ➖ | The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`). | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | |
### Response
@@ -446,14 +447,15 @@ with OpenRouter(
### Parameters
-| Parameter | Type | Required | Description | Example |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `intern_id` | *str* | ✅ | ID of an intern visible to the authenticated API key. | 7c9e6679-7425-40de-944b-e07fc1f90ae7 |
-| `body_sha256` | *str* | ✅ | Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body. | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
-| `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.
| |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | |
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `intern_id` | *str* | ✅ | ID of an intern visible to the authenticated API key. | 7c9e6679-7425-40de-944b-e07fc1f90ae7 |
+| `body_sha256` | *str* | ✅ | Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body. | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
+| `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.
| |
+| `route` | [Optional[components.Route]](../../components/route.mdx) | ➖ | The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`). | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | |
### Response
diff --git a/pyproject.toml b/pyproject.toml
index a6cf66629..8f7be67ff 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "openrouter"
-version = "1.3.65"
+version = "1.3.66"
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 65d803345..a003753cc 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.65"
+__version__: str = "1.3.66"
__openapi_doc_version__: str = "1.0.0"
__gen_version__: str = "2.914.0"
-__user_agent__: str = "speakeasy-sdk/python 1.3.65 2.914.0 1.0.0 openrouter"
+__user_agent__: str = "speakeasy-sdk/python 1.3.66 2.914.0 1.0.0 openrouter"
try:
if __package__ is not None:
diff --git a/src/openrouter/components/__init__.py b/src/openrouter/components/__init__.py
index 2fe86e6fd..bc3bdb912 100644
--- a/src/openrouter/components/__init__.py
+++ b/src/openrouter/components/__init__.py
@@ -2944,10 +2944,10 @@
ObservabilityWeaveDestinationTypedDict,
)
from .observabilitywebhookdestination import (
- Method,
ObservabilityWebhookDestination,
ObservabilityWebhookDestinationConfig,
ObservabilityWebhookDestinationConfigTypedDict,
+ ObservabilityWebhookDestinationMethod,
ObservabilityWebhookDestinationType,
ObservabilityWebhookDestinationTypedDict,
)
@@ -3956,7 +3956,10 @@
ShellServerToolEnvironmentTypedDict,
)
from .signinterndaemonrequest import (
+ Route,
+ RouteTypedDict,
SignInternDaemonRequest,
+ SignInternDaemonRequestMethod,
SignInternDaemonRequestTypedDict,
)
from .signinterndaemonresponse import (
@@ -6346,7 +6349,6 @@
"MessagesToolRemovalBlockTypeToolReference",
"MessagesToolRemovalBlockTypedDict",
"MetadataLevel",
- "Method",
"MismatchBehavior",
"Modality",
"Mode",
@@ -6528,6 +6530,7 @@
"ObservabilityWebhookDestination",
"ObservabilityWebhookDestinationConfig",
"ObservabilityWebhookDestinationConfigTypedDict",
+ "ObservabilityWebhookDestinationMethod",
"ObservabilityWebhookDestinationType",
"ObservabilityWebhookDestinationTypedDict",
"OnError",
@@ -7145,6 +7148,8 @@
"ResultError",
"ResultErrorTypedDict",
"ResultTypedDict",
+ "Route",
+ "RouteTypedDict",
"RoutedServiceTier",
"RouterAttempt",
"RouterAttemptTypedDict",
@@ -7258,6 +7263,7 @@
"ShellServerToolType",
"ShellServerToolTypedDict",
"SignInternDaemonRequest",
+ "SignInternDaemonRequestMethod",
"SignInternDaemonRequestTypedDict",
"SignInternDaemonResponse",
"SignInternDaemonResponseTypedDict",
@@ -9925,10 +9931,10 @@
"ObservabilityWeaveDestinationConfigTypedDict": ".observabilityweavedestination",
"ObservabilityWeaveDestinationType": ".observabilityweavedestination",
"ObservabilityWeaveDestinationTypedDict": ".observabilityweavedestination",
- "Method": ".observabilitywebhookdestination",
"ObservabilityWebhookDestination": ".observabilitywebhookdestination",
"ObservabilityWebhookDestinationConfig": ".observabilitywebhookdestination",
"ObservabilityWebhookDestinationConfigTypedDict": ".observabilitywebhookdestination",
+ "ObservabilityWebhookDestinationMethod": ".observabilitywebhookdestination",
"ObservabilityWebhookDestinationType": ".observabilitywebhookdestination",
"ObservabilityWebhookDestinationTypedDict": ".observabilitywebhookdestination",
"OpenAIFile": ".openaifile",
@@ -10672,7 +10678,10 @@
"ShellServerToolEngine": ".shellservertoolengine",
"ShellServerToolEnvironment": ".shellservertoolenvironment",
"ShellServerToolEnvironmentTypedDict": ".shellservertoolenvironment",
+ "Route": ".signinterndaemonrequest",
+ "RouteTypedDict": ".signinterndaemonrequest",
"SignInternDaemonRequest": ".signinterndaemonrequest",
+ "SignInternDaemonRequestMethod": ".signinterndaemonrequest",
"SignInternDaemonRequestTypedDict": ".signinterndaemonrequest",
"SignInternDaemonResponse": ".signinterndaemonresponse",
"SignInternDaemonResponseTypedDict": ".signinterndaemonresponse",
diff --git a/src/openrouter/components/observabilitywebhookdestination.py b/src/openrouter/components/observabilitywebhookdestination.py
index 2547f1884..86193307e 100644
--- a/src/openrouter/components/observabilitywebhookdestination.py
+++ b/src/openrouter/components/observabilitywebhookdestination.py
@@ -12,7 +12,7 @@
from typing_extensions import NotRequired, TypedDict
-Method = Union[
+ObservabilityWebhookDestinationMethod = Union[
Literal[
"POST",
"PUT",
@@ -24,7 +24,7 @@
class ObservabilityWebhookDestinationConfigTypedDict(TypedDict):
url: str
headers: NotRequired[Dict[str, str]]
- method: NotRequired[Method]
+ method: NotRequired[ObservabilityWebhookDestinationMethod]
class ObservabilityWebhookDestinationConfig(BaseModel):
@@ -32,7 +32,7 @@ class ObservabilityWebhookDestinationConfig(BaseModel):
headers: Optional[Dict[str, str]] = None
- method: Optional[Method] = "POST"
+ method: Optional[ObservabilityWebhookDestinationMethod] = "POST"
@model_serializer(mode="wrap")
def serialize_model(self, handler):
diff --git a/src/openrouter/components/signinterndaemonrequest.py b/src/openrouter/components/signinterndaemonrequest.py
index 4d2f78f63..a5d555221 100644
--- a/src/openrouter/components/signinterndaemonrequest.py
+++ b/src/openrouter/components/signinterndaemonrequest.py
@@ -1,20 +1,66 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
import pydantic
-from typing_extensions import Annotated, TypedDict
+from pydantic import model_serializer
+from typing import Literal, Optional
+from typing_extensions import Annotated, NotRequired, TypedDict
+
+
+SignInternDaemonRequestMethod = Literal["POST",]
+r"""The HTTP method of the daemon request."""
+
+
+class RouteTypedDict(TypedDict):
+ r"""The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`)."""
+
+ method: SignInternDaemonRequestMethod
+ r"""The HTTP method of the daemon request."""
+ path: str
+ r"""The daemon request path, percent-encoded as sent, without origin or query. The route-bound proof admits only this path."""
+
+
+class Route(BaseModel):
+ r"""The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`)."""
+
+ method: SignInternDaemonRequestMethod
+ r"""The HTTP method of the daemon request."""
+
+ path: str
+ r"""The daemon request path, percent-encoded as sent, without origin or query. The route-bound proof admits only this path."""
class SignInternDaemonRequestTypedDict(TypedDict):
body_sha256: str
r"""Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body."""
+ route: NotRequired[RouteTypedDict]
+ r"""The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`)."""
class SignInternDaemonRequest(BaseModel):
body_sha256: Annotated[str, pydantic.Field(alias="bodySha256")]
r"""Lower-case hex SHA-256 of the exact bytes the CLI will send as the daemon request body."""
+ route: Optional[Route] = None
+ r"""The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`)."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["route"])
+ serialized = handler(self)
+ m = {}
+
+ for n, f in type(self).model_fields.items():
+ k = f.alias or n
+ val = serialized.get(k, serialized.get(n))
+
+ if val != UNSET_SENTINEL:
+ if val is not None or k not in optional_fields:
+ m[k] = val
+
+ return m
+
try:
SignInternDaemonRequest.model_rebuild()
diff --git a/src/openrouter/components/signinterndaemonresponse.py b/src/openrouter/components/signinterndaemonresponse.py
index e44305da9..43b66eaec 100644
--- a/src/openrouter/components/signinterndaemonresponse.py
+++ b/src/openrouter/components/signinterndaemonresponse.py
@@ -1,9 +1,11 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
import pydantic
-from typing_extensions import Annotated, TypedDict
+from pydantic import model_serializer
+from typing import Optional
+from typing_extensions import Annotated, NotRequired, TypedDict
class SignInternDaemonResponseTypedDict(TypedDict):
@@ -15,6 +17,10 @@ class SignInternDaemonResponseTypedDict(TypedDict):
r"""Unix seconds at signing; the daemon refuses proofs older than its window."""
x_ori_invoke_user: str
r"""The verified OAuth subject the proof names. Never taken from the request."""
+ x_ori_invoke_nonce: NotRequired[str]
+ r"""Present with `x-ori-invoke-signature-v2`: the single-use id that proof is bound to."""
+ x_ori_invoke_signature_v2: NotRequired[str]
+ r"""Present when the request named a `route`: Base64 Ed25519 signature over the intern id, timestamp, nonce, user, method, path and body digest. The intern accepts it once."""
class SignInternDaemonResponse(BaseModel):
@@ -33,6 +39,32 @@ class SignInternDaemonResponse(BaseModel):
x_ori_invoke_user: Annotated[str, pydantic.Field(alias="x-ori-invoke-user")]
r"""The verified OAuth subject the proof names. Never taken from the request."""
+ x_ori_invoke_nonce: Annotated[
+ Optional[str], pydantic.Field(alias="x-ori-invoke-nonce")
+ ] = None
+ r"""Present with `x-ori-invoke-signature-v2`: the single-use id that proof is bound to."""
+
+ x_ori_invoke_signature_v2: Annotated[
+ Optional[str], pydantic.Field(alias="x-ori-invoke-signature-v2")
+ ] = None
+ r"""Present when the request named a `route`: Base64 Ed25519 signature over the intern id, timestamp, nonce, user, method, path and body digest. The intern accepts it once."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["x-ori-invoke-nonce", "x-ori-invoke-signature-v2"])
+ serialized = handler(self)
+ m = {}
+
+ for n, f in type(self).model_fields.items():
+ k = f.alias or n
+ val = serialized.get(k, serialized.get(n))
+
+ if val != UNSET_SENTINEL:
+ if val is not None or k not in optional_fields:
+ m[k] = val
+
+ return m
+
try:
SignInternDaemonResponse.model_rebuild()
diff --git a/src/openrouter/interns.py b/src/openrouter/interns.py
index cfee3dcdd..56198d2f5 100644
--- a/src/openrouter/interns.py
+++ b/src/openrouter/interns.py
@@ -1463,7 +1463,7 @@ def get_intern_daemon(
) -> components.InternDaemonAccess:
r"""Get an intern's daemon access
- Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. The API key selects the caller, workspace and visible interns. An intern's own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required.
+ Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: only an OAuth-token caller (`ori login --oidc`) may read it, the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. API keys get 403 `personal_identity_required`. The API key selects the caller, workspace and visible interns. An intern's own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required.
If set, this operation will use `api_key` from the global security.
@@ -1591,7 +1591,7 @@ async def get_intern_daemon_async(
) -> components.InternDaemonAccess:
r"""Get an intern's daemon access
- Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. The API key selects the caller, workspace and visible interns. An intern's own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required.
+ Returns the origin and daemon token that attach `ori tui --host` to one visible, running intern. The token is a credential: only an OAuth-token caller (`ori login --oidc`) may read it, the response is sent with `Cache-Control: no-store`, and each reveal is logged by caller and intern. API keys get 403 `personal_identity_required`. The API key selects the caller, workspace and visible interns. An intern's own API key sees only that intern: the collection and every other intern answer 404 to it. There is no default workspace fallback. Requests on regional hostnames such as `eu.openrouter.ai` are refused. [API key](/docs/api-reference/authentication) required.
If set, this operation will use `api_key` from the global security.
@@ -1978,6 +1978,7 @@ def sign_intern_daemon_access_request(
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
+ route: Optional[Union[components.Route, components.RouteTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -1998,6 +1999,7 @@ def sign_intern_daemon_access_request(
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+ :param route: The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`).
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -2020,6 +2022,7 @@ def sign_intern_daemon_access_request(
intern_id=intern_id,
sign_intern_daemon_request=components.SignInternDaemonRequest(
body_sha256=body_sha256,
+ route=utils.get_pydantic_model(route, Optional[components.Route]),
),
)
@@ -2133,6 +2136,7 @@ async def sign_intern_daemon_access_request_async(
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
+ route: Optional[Union[components.Route, components.RouteTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -2153,6 +2157,7 @@ async def sign_intern_daemon_access_request_async(
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+ :param route: The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`).
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -2175,6 +2180,7 @@ async def sign_intern_daemon_access_request_async(
intern_id=intern_id,
sign_intern_daemon_request=components.SignInternDaemonRequest(
body_sha256=body_sha256,
+ route=utils.get_pydantic_model(route, Optional[components.Route]),
),
)
@@ -2285,6 +2291,7 @@ def sign_intern_daemon_request(
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
+ route: Optional[Union[components.Route, components.RouteTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -2305,6 +2312,7 @@ def sign_intern_daemon_request(
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+ :param route: The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`).
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -2327,6 +2335,7 @@ def sign_intern_daemon_request(
intern_id=intern_id,
sign_intern_daemon_request=components.SignInternDaemonRequest(
body_sha256=body_sha256,
+ route=utils.get_pydantic_model(route, Optional[components.Route]),
),
)
@@ -2437,6 +2446,7 @@ async def sign_intern_daemon_request_async(
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
+ route: Optional[Union[components.Route, components.RouteTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -2457,6 +2467,7 @@ async def sign_intern_daemon_request_async(
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+ :param route: The daemon request the proof is for. When present the response also carries the single-use, route-bound proof (`x-ori-invoke-signature-v2`, `x-ori-invoke-nonce`).
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -2479,6 +2490,7 @@ async def sign_intern_daemon_request_async(
intern_id=intern_id,
sign_intern_daemon_request=components.SignInternDaemonRequest(
body_sha256=body_sha256,
+ route=utils.get_pydantic_model(route, Optional[components.Route]),
),
)
diff --git a/uv.lock b/uv.lock
index b60de3131..9cdf2fd7d 100644
--- a/uv.lock
+++ b/uv.lock
@@ -213,7 +213,7 @@ wheels = [
[[package]]
name = "openrouter"
-version = "1.3.65"
+version = "1.3.66"
source = { editable = "." }
dependencies = [
{ name = "httpcore" },