diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock
index fb66374d..1a68ec12 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: 92453912467fdc8c606b911a5b8e5975
+ docChecksum: ca478c9fe977377c5080ec03921023a8
docVersion: 1.0.0
speakeasyVersion: 1.787.0
generationVersion: 2.914.0
- releaseVersion: 1.3.25
- configChecksum: 197161ed7ce578b24625f5a89c79af0c
+ releaseVersion: 1.3.26
+ configChecksum: f1f6fdb944dd84de88b781a775f1b193
repoURL: https://github.com/OpenRouterTeam/python-sdk.git
installationURL: https://github.com/OpenRouterTeam/python-sdk.git
published: true
persistentEdits:
- generation_id: 3c68b6da-5bbc-41a4-952e-6a5dba9f015e
- pristine_commit_hash: 71ae1ce112aa0731f0289ec5c7db29743b949733
- pristine_tree_hash: c1fb516226b4c9d577b2086079251e204b8aca35
+ generation_id: 7e99d85c-0497-46d2-8f32-30b6816934f7
+ pristine_commit_hash: 6559d85090ca32fc4de97e741687929da41137e2
+ pristine_tree_hash: 3d570f3d755633ea2ee0eb370a1ed7571858d615
features:
python:
acceptHeaders: 3.0.0
@@ -8272,8 +8272,8 @@ trackedFiles:
pristine_git_object: b3a22348904b9b6e07314e82f77b08763524eb1b
docs/operations/createkeysdata.mdx:
id: bf8133a06827
- last_write_checksum: sha1:315420c8bb79b06c579bf9473d1f94a26b2aa626
- pristine_git_object: 7bcdd1c73d9fc389639976fb5a305b4ce436c66b
+ last_write_checksum: sha1:a8e15d810ead6120052ac4db3c137d500b177bae
+ pristine_git_object: 18bb520f75ea52e2d534f65d62f1d9c370a73e0f
docs/operations/createkeysglobals.mdx:
id: ebcc738c53da
last_write_checksum: sha1:dcec0f5013ef76e33fc43437e5689185abf61cb1
@@ -8292,8 +8292,8 @@ trackedFiles:
pristine_git_object: b07f924076b7262a3de54f708f12cd0ee87eab5b
docs/operations/createkeysresponse.mdx:
id: 08e825fab080
- last_write_checksum: sha1:268c49a74956884d1e3b3495fdf6ee6c7383e323
- pristine_git_object: 83f6a2a6ba3926b76f509b84b7a41bc0e10e6d58
+ last_write_checksum: sha1:143b32c4d483cd13b14703816777c1947eac29a7
+ pristine_git_object: ef2250aecae9ca3602cbc41cd4a99305cc730de7
docs/operations/createoauthtokenglobals.mdx:
id: 253b06bd452b
last_write_checksum: sha1:9f7cedf50a8fed5141d767597081ea1dc97a2469
@@ -8800,8 +8800,8 @@ trackedFiles:
pristine_git_object: cd83fdf513f2e3581b526d6fd2bee78841dfd8c6
docs/operations/getkeydata.mdx:
id: 6e826a999e6b
- last_write_checksum: sha1:8b5426689eaf7f90b5f12991eeb52cf3780d95f4
- pristine_git_object: 1e5f092708886ee92cf4c50a3fb27228fa8572ba
+ last_write_checksum: sha1:839f9b181199dc3f3596227d05e6631f1dcdb459
+ pristine_git_object: 3ad8cfab8c6a35553d58525f37db5d8025a3a97f
docs/operations/getkeyglobals.mdx:
id: e0e92d532c82
last_write_checksum: sha1:5a61d6565f3977a90314a46626caa89a8ab97c32
@@ -8812,8 +8812,8 @@ trackedFiles:
pristine_git_object: 917f4073281196fdf9aa85f2d093ce3dd8b869b6
docs/operations/getkeyresponse.mdx:
id: dd773bd25661
- last_write_checksum: sha1:2f5e0d69a00d8af16ea5ab66723cf638267a422a
- pristine_git_object: b54168e5f08390768a2d105df374bea1457536d8
+ last_write_checksum: sha1:bacb224ced61ce3b45824f4c9776c87eac29a371
+ pristine_git_object: 962912273e07a640e61a46d5b949a71d69586e66
docs/operations/getmodelglobals.mdx:
id: 18648d7998ae
last_write_checksum: sha1:7d198dc0c69e793b6681e2f96a76b7d43431cd4f
@@ -9068,8 +9068,8 @@ trackedFiles:
pristine_git_object: 90add74a591950b1c08757f18063f33a49c73f65
docs/operations/listdata.mdx:
id: 949d8d9f5ac7
- last_write_checksum: sha1:ad6cfad0f973f73ffc93542796af523c275eb535
- pristine_git_object: 9c01abd87d9c54b1c37d139f26ce8fbbed362a4e
+ last_write_checksum: sha1:85cc0dd377f335aabf60daf2cff403036ee378a1
+ pristine_git_object: a68b8ca9bb2b0d8875bd04cf1f84f001f26a3553
docs/operations/listembeddingsmodelsglobals.mdx:
id: b9243861091c
last_write_checksum: sha1:d9c528e4b7a94045e306b112a6b10c53205fe591
@@ -9680,8 +9680,8 @@ trackedFiles:
pristine_git_object: 059a2165b5a09252162e7d21d25de48eb631e29d
docs/operations/updatekeysdata.mdx:
id: d398ba596e27
- last_write_checksum: sha1:f028821be32f7627428ead62d856899c3d1d0fde
- pristine_git_object: 763bb1b482ec1067dd01ffe0e583718bd4f27d14
+ last_write_checksum: sha1:f6f5cd048b7b6037bc087eca052d0b19d22c5530
+ pristine_git_object: 46e464000bc73ddda899ba6e4451448d027849b6
docs/operations/updatekeysglobals.mdx:
id: b28932f180bb
last_write_checksum: sha1:1f5778b747552e491bdfff8ae6f24fa13d94e772
@@ -9700,8 +9700,8 @@ trackedFiles:
pristine_git_object: b293f36e7709b7bebad59271db0885d29711c2d9
docs/operations/updatekeysresponse.mdx:
id: a97d51fea627
- last_write_checksum: sha1:d480d817cca85b82432bcf8f2aba01e56fe14361
- pristine_git_object: 8bd3a4f574817f49907b51a0048fd76eba0b214b
+ last_write_checksum: sha1:e3064726562fa278b17b113764602a46e0919ffe
+ pristine_git_object: 9440f9f6b4670fbb189520ec160f96c32c1ebab1
docs/operations/updateobservabilitydestinationglobals.mdx:
id: f85617547bfa
last_write_checksum: sha1:c1f4d1a72d38359c5bd04f2845a587d2ad09d493
@@ -9968,8 +9968,8 @@ trackedFiles:
pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544
pyproject.toml:
id: 5d07e7d72637
- last_write_checksum: sha1:cff128d64b1561844bb58c5c3ef88161e984ec2c
- pristine_git_object: 1a6ea457cdf932162660ee381611299c74ce6ceb
+ last_write_checksum: sha1:178fb5ebf2d5e2e9357df50216ef837c9c45174b
+ pristine_git_object: 112fa9a986c4f28337593041fbe9378906ee2670
scripts/prepare_readme.py:
id: e0c5957a6035
last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54
@@ -9996,8 +9996,8 @@ trackedFiles:
pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137
src/openrouter/_version.py:
id: d8d15ad6c586
- last_write_checksum: sha1:4efea9715e5b25b9b96e4363b90af25cdd0d13a7
- pristine_git_object: f0da1b704a54839fa591866a2849df749fc02813
+ last_write_checksum: sha1:6e671a7634a6396b6de4bed0c69bd623b0ebbd90
+ pristine_git_object: 235db3aed8d14857805c9f976a5bc57a154113b3
src/openrouter/alpha.py:
id: 306c4d93308d
last_write_checksum: sha1:30f55a360f41376ab194b9ea725fe4e001a5ae1a
@@ -13684,8 +13684,8 @@ trackedFiles:
pristine_git_object: e25761cb500ef9cc21adf91165fb9f11fb8379da
src/openrouter/operations/createkeys.py:
id: 64ad31fdaa6c
- last_write_checksum: sha1:92e122bf7ca252e6cc1f4200cbcd6ded9a0d35a7
- pristine_git_object: 2fe95efbdbba0908f586d84148fad57b3b8a498e
+ last_write_checksum: sha1:ab6dc89efd3f557b263ccd2211fc5b2740d8e218
+ pristine_git_object: 90b845830f0bce796bd246c59c8c14806d764d44
src/openrouter/operations/createoauthtoken.py:
id: 02e1c061780d
last_write_checksum: sha1:006884cfeeecfede1434f194460b7189cae89de1
@@ -13876,8 +13876,8 @@ trackedFiles:
pristine_git_object: 6632fbbbe4e59918369b70cf2a365880f2d315d6
src/openrouter/operations/getkey.py:
id: d9769da90865
- last_write_checksum: sha1:0a73a314d782011063d9879302dbb7b829d759e3
- pristine_git_object: ceb137da2e14569b87b579ef40f3e21a45a063bd
+ last_write_checksum: sha1:63a27034e350b578b6d5f29d6568111bc14c75c1
+ pristine_git_object: 924bb00ec6b3bcb57c9fb8442407b9c3ccc92b9d
src/openrouter/operations/getmodel.py:
id: 90c926cd726f
last_write_checksum: sha1:3ba2f12410841c49e329821b8eaec5f87d5882c1
@@ -13952,8 +13952,8 @@ trackedFiles:
pristine_git_object: e2024274ca5a6aedb60eb9d9dfdc741e04b26c03
src/openrouter/operations/list.py:
id: 3ced31e3804e
- last_write_checksum: sha1:bfad6d8e4c453367e509f063825899ce72b33449
- pristine_git_object: bec5a577e95e905673b68d02fc873b0bb9a3cd8a
+ last_write_checksum: sha1:a81bfd1c2a41849005e61cbd11502cc3bd19d417
+ pristine_git_object: 7e0c0023c907ef35c9abc797d5cf9152603e3d23
src/openrouter/operations/listbatches.py:
id: 9ad1345dc956
last_write_checksum: sha1:e568e38db37703d3e2d35f460d25421f98da21a1
@@ -14152,8 +14152,8 @@ trackedFiles:
pristine_git_object: d87519cfb18258224c2958076dedb16ff4abe208
src/openrouter/operations/updatekeys.py:
id: 56fb213253a8
- last_write_checksum: sha1:143e7df66832596b325cc9f86aad485ba57d6cb8
- pristine_git_object: 970481df256dcdef6d95f63d9a8da6b67ef354dd
+ last_write_checksum: sha1:d70e4b1e06f8b0e1569a172e263b3e541edf4442
+ pristine_git_object: 3862d92575f681cc5eb43fd27d3d57114972ed2e
src/openrouter/operations/updateobservabilitydestination.py:
id: 18e06708d1b4
last_write_checksum: sha1:d490e19e8698ed5193df9d06673f975cb3a1410f
@@ -14625,7 +14625,7 @@ examples:
speakeasy-default-list:
responses:
"200":
- application/json: {"data": [{"byok_usage": 17.38, "byok_usage_daily": 17.38, "byok_usage_monthly": 17.38, "byok_usage_weekly": 17.38, "created_at": "2025-08-24T10:30:00Z", "creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000", "disabled": false, "external_user": null, "hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943", "include_byok_in_limit": false, "label": "Production API Key", "limit": 100, "limit_remaining": 74.5, "limit_reset": "monthly", "name": "My Production Key", "updated_at": "2025-08-24T15:45:00Z", "usage": 25.5, "usage_daily": 25.5, "usage_monthly": 25.5, "usage_weekly": 25.5, "workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"}]}
+ application/json: {"data": [{"byok_usage": 17.38, "byok_usage_daily": 17.38, "byok_usage_monthly": 17.38, "byok_usage_weekly": 17.38, "created_at": "2025-08-24T10:30:00Z", "creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000", "disabled": false, "external_user": null, "hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943", "include_byok_in_limit": false, "label": "Production API Key", "last_used_at": "2026-09-15T15:45:00Z", "limit": 100, "limit_remaining": 74.5, "limit_reset": "monthly", "name": "My Production Key", "updated_at": "2025-08-24T15:45:00Z", "usage": 25.5, "usage_daily": 25.5, "usage_monthly": 25.5, "usage_weekly": 25.5, "workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"}]}
"401":
application/json: {"error": {"code": 401, "message": "Missing Authentication header"}}
"429":
@@ -14640,7 +14640,7 @@ examples:
application/json: {"name": "My New API Key"}
responses:
"201":
- application/json: {"data": {"byok_usage": 0, "byok_usage_daily": 0, "byok_usage_monthly": 0, "byok_usage_weekly": 0, "created_at": "2025-08-24T10:30:00Z", "creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000", "disabled": false, "external_user": null, "hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943", "include_byok_in_limit": true, "label": "My New API Key", "limit": 50, "limit_remaining": 50, "limit_reset": "monthly", "name": "My New API Key", "updated_at": null, "usage": 0, "usage_daily": 0, "usage_monthly": 0, "usage_weekly": 0, "workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"}, "key": "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"}
+ application/json: {"data": {"byok_usage": 0, "byok_usage_daily": 0, "byok_usage_monthly": 0, "byok_usage_weekly": 0, "created_at": "2025-08-24T10:30:00Z", "creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000", "disabled": false, "external_user": null, "hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943", "include_byok_in_limit": true, "label": "My New API Key", "last_used_at": null, "limit": 50, "limit_remaining": 50, "limit_reset": "monthly", "name": "My New API Key", "updated_at": null, "usage": 0, "usage_daily": 0, "usage_monthly": 0, "usage_weekly": 0, "workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"}, "key": "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"}
"400":
application/json: {"error": {"code": 400, "message": "Invalid request parameters"}}
"401":
@@ -14660,7 +14660,7 @@ examples:
application/json: {}
responses:
"200":
- application/json: {"data": {"byok_usage": 17.38, "byok_usage_daily": 17.38, "byok_usage_monthly": 17.38, "byok_usage_weekly": 17.38, "created_at": "2025-08-24T10:30:00Z", "creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000", "disabled": false, "external_user": null, "hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943", "include_byok_in_limit": true, "label": "Updated API Key Name", "limit": 75, "limit_remaining": 49.5, "limit_reset": "daily", "name": "Updated API Key Name", "updated_at": "2025-08-24T16:00:00Z", "usage": 25.5, "usage_daily": 25.5, "usage_monthly": 25.5, "usage_weekly": 25.5, "workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"}}
+ application/json: {"data": {"byok_usage": 17.38, "byok_usage_daily": 17.38, "byok_usage_monthly": 17.38, "byok_usage_weekly": 17.38, "created_at": "2025-08-24T10:30:00Z", "creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000", "disabled": false, "external_user": null, "hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943", "include_byok_in_limit": true, "label": "Updated API Key Name", "last_used_at": "2026-09-15T15:45:00Z", "limit": 75, "limit_remaining": 49.5, "limit_reset": "daily", "name": "Updated API Key Name", "updated_at": "2025-08-24T16:00:00Z", "usage": 25.5, "usage_daily": 25.5, "usage_monthly": 25.5, "usage_weekly": 25.5, "workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"}}
"400":
application/json: {"error": {"code": 400, "message": "Invalid request parameters"}}
"401":
@@ -14712,7 +14712,7 @@ examples:
hash: "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943"
responses:
"200":
- application/json: {"data": {"byok_usage": 17.38, "byok_usage_daily": 17.38, "byok_usage_monthly": 17.38, "byok_usage_weekly": 17.38, "created_at": "2025-08-24T10:30:00Z", "creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000", "disabled": false, "external_user": null, "hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943", "include_byok_in_limit": false, "label": "Production API Key", "limit": 100, "limit_remaining": 74.5, "limit_reset": "monthly", "name": "My Production Key", "updated_at": "2025-08-24T15:45:00Z", "usage": 25.5, "usage_daily": 25.5, "usage_monthly": 25.5, "usage_weekly": 25.5, "workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"}}
+ application/json: {"data": {"byok_usage": 17.38, "byok_usage_daily": 17.38, "byok_usage_monthly": 17.38, "byok_usage_weekly": 17.38, "created_at": "2025-08-24T10:30:00Z", "creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000", "disabled": false, "external_user": null, "hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943", "include_byok_in_limit": false, "label": "Production API Key", "last_used_at": "2026-09-15T15:45:00Z", "limit": 100, "limit_remaining": 74.5, "limit_reset": "monthly", "name": "My Production Key", "updated_at": "2025-08-24T15:45:00Z", "usage": 25.5, "usage_daily": 25.5, "usage_monthly": 25.5, "usage_weekly": 25.5, "workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"}}
"401":
application/json: {"error": {"code": 401, "message": "Missing Authentication header"}}
"404":
@@ -18264,4 +18264,9 @@ examples:
"500":
application/json: {"error": {"code": 500, "message": "Internal Server Error"}}
examplesVersion: 1.0.2
-releaseNotes: "## Python SDK Changes:\n* `open_router.chat.send()`: \n * `request.plugins[].union(switchyard-router).judge_model` **Added**\n* `open_router.presets.create_presets_chat_completions()`: \n * `request.plugins[].union(switchyard-router).judge_model` **Added**\n* `open_router.presets.create_presets_messages()`: \n * `request.plugins[].union(switchyard-router).judge_model` **Added**\n* `open_router.presets.create_presets_responses()`: \n * `request.plugins[].union(switchyard-router).judge_model` **Added**\n* `open_router.responses.send()`: \n * `request.plugins[].union(switchyard-router).judge_model` **Added**\n* `open_router.beta.responses.send()`: \n * `request.plugins[].union(switchyard-router).judge_model` **Added**\n"
+releaseNotes: |
+ ## Python SDK Changes:
+ * `open_router.api_keys.list()`: `response.data[].last_used_at` **Added**
+ * `open_router.api_keys.create()`: `response.data.last_used_at` **Added**
+ * `open_router.api_keys.get()`: `response.data.last_used_at` **Added**
+ * `open_router.api_keys.update()`: `response.data.last_used_at` **Added**
diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml
index ae417ff7..dd19de0f 100644
--- a/.speakeasy/gen.yaml
+++ b/.speakeasy/gen.yaml
@@ -36,7 +36,7 @@ generation:
documentation: mintlify
preApplyUnionDiscriminators: true
python:
- version: 1.3.25
+ version: 1.3.26
additionalDependencies:
dev: {}
main: {}
diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml
index 4ff6cf80..adc005eb 100644
--- a/.speakeasy/out.openapi.yaml
+++ b/.speakeasy/out.openapi.yaml
@@ -43111,6 +43111,7 @@ paths:
hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943'
include_byok_in_limit: false
label: 'Production API Key'
+ last_used_at: '2026-09-15T15:45:00Z'
limit: 100
limit_remaining: 74.5
limit_reset: 'monthly'
@@ -43136,6 +43137,7 @@ paths:
hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943'
include_byok_in_limit: false
label: 'Production API Key'
+ last_used_at: '2026-09-15T15:45:00Z'
limit: 100
limit_remaining: 74.5
limit_reset: 'monthly'
@@ -43163,6 +43165,7 @@ paths:
hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943'
include_byok_in_limit: false
label: 'sk-or-v1-0e6...1c96'
+ last_used_at: '2026-09-15T15:45:00Z'
limit: 100
limit_remaining: 74.5
limit_reset: 'monthly'
@@ -43233,6 +43236,13 @@ paths:
description: 'Human-readable label for the API key'
example: 'sk-or-v1-0e6...1c96'
type: 'string'
+ last_used_at:
+ description: 'ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025'
+ example: '2026-09-15T15:45:00Z'
+ format: 'date-time'
+ type:
+ - 'string'
+ - 'null'
limit:
description: 'Spending limit for the API key in USD'
example: 100
@@ -43306,6 +43316,7 @@ paths:
- 'byok_usage_monthly'
- 'created_at'
- 'updated_at'
+ - 'last_used_at'
- 'external_user'
- 'creator_user_id'
- 'workspace_id'
@@ -43465,6 +43476,7 @@ paths:
hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943'
include_byok_in_limit: true
label: 'My New API Key'
+ last_used_at: null
limit: 50
limit_remaining: 50
limit_reset: 'monthly'
@@ -43491,6 +43503,7 @@ paths:
hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943'
include_byok_in_limit: true
label: 'My New API Key'
+ last_used_at: null
limit: 50
limit_remaining: 50
limit_reset: 'monthly'
@@ -43518,6 +43531,7 @@ paths:
hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943'
include_byok_in_limit: false
label: 'sk-or-v1-0e6...1c96'
+ last_used_at: '2026-09-15T15:45:00Z'
limit: 100
limit_remaining: 74.5
limit_reset: 'monthly'
@@ -43588,6 +43602,13 @@ paths:
description: 'Human-readable label for the API key'
example: 'sk-or-v1-0e6...1c96'
type: 'string'
+ last_used_at:
+ description: 'ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025'
+ example: '2026-09-15T15:45:00Z'
+ format: 'date-time'
+ type:
+ - 'string'
+ - 'null'
limit:
description: 'Spending limit for the API key in USD'
example: 100
@@ -43661,6 +43682,7 @@ paths:
- 'byok_usage_monthly'
- 'created_at'
- 'updated_at'
+ - 'last_used_at'
- 'external_user'
- 'creator_user_id'
- 'workspace_id'
@@ -43837,6 +43859,7 @@ paths:
hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943'
include_byok_in_limit: false
label: 'Production API Key'
+ last_used_at: '2026-09-15T15:45:00Z'
limit: 100
limit_remaining: 74.5
limit_reset: 'monthly'
@@ -43862,6 +43885,7 @@ paths:
hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943'
include_byok_in_limit: false
label: 'Production API Key'
+ last_used_at: '2026-09-15T15:45:00Z'
limit: 100
limit_remaining: 74.5
limit_reset: 'monthly'
@@ -43888,6 +43912,7 @@ paths:
hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943'
include_byok_in_limit: false
label: 'sk-or-v1-0e6...1c96'
+ last_used_at: '2026-09-15T15:45:00Z'
limit: 100
limit_remaining: 74.5
limit_reset: 'monthly'
@@ -43958,6 +43983,13 @@ paths:
description: 'Human-readable label for the API key'
example: 'sk-or-v1-0e6...1c96'
type: 'string'
+ last_used_at:
+ description: 'ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025'
+ example: '2026-09-15T15:45:00Z'
+ format: 'date-time'
+ type:
+ - 'string'
+ - 'null'
limit:
description: 'Spending limit for the API key in USD'
example: 100
@@ -44031,6 +44063,7 @@ paths:
- 'byok_usage_monthly'
- 'created_at'
- 'updated_at'
+ - 'last_used_at'
- 'external_user'
- 'creator_user_id'
- 'workspace_id'
@@ -44162,6 +44195,7 @@ paths:
hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943'
include_byok_in_limit: true
label: 'Updated API Key Name'
+ last_used_at: '2026-09-15T15:45:00Z'
limit: 75
limit_remaining: 49.5
limit_reset: 'daily'
@@ -44187,6 +44221,7 @@ paths:
hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943'
include_byok_in_limit: true
label: 'Updated API Key Name'
+ last_used_at: '2026-09-15T15:45:00Z'
limit: 75
limit_remaining: 49.5
limit_reset: 'daily'
@@ -44213,6 +44248,7 @@ paths:
hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943'
include_byok_in_limit: false
label: 'sk-or-v1-0e6...1c96'
+ last_used_at: '2026-09-15T15:45:00Z'
limit: 100
limit_remaining: 74.5
limit_reset: 'monthly'
@@ -44283,6 +44319,13 @@ paths:
description: 'Human-readable label for the API key'
example: 'sk-or-v1-0e6...1c96'
type: 'string'
+ last_used_at:
+ description: 'ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025'
+ example: '2026-09-15T15:45:00Z'
+ format: 'date-time'
+ type:
+ - 'string'
+ - 'null'
limit:
description: 'Spending limit for the API key in USD'
example: 100
@@ -44356,6 +44399,7 @@ paths:
- 'byok_usage_monthly'
- 'created_at'
- 'updated_at'
+ - 'last_used_at'
- 'external_user'
- 'creator_user_id'
- 'workspace_id'
diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock
index 04424f28..91a78bd4 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:60860108aac4bc42bde6965ab51b058bc2899b2c747747cea6304b7b2fd9e055
- sourceBlobDigest: sha256:814406dfec3321a42a6a09e93f3fe60edab725d14f8eedf34bea4ca19d53a364
+ sourceRevisionDigest: sha256:d24d16338614e6343ad2fa1f47f408d2f8c3eba071a3d8a472544748a0aa6620
+ sourceBlobDigest: sha256:da7dea9cc7d4012055e43f82b5e8dbf0324eda4990d380fc4968ae2e93bc5acd
tags:
- latest
- 1.0.0
@@ -11,10 +11,10 @@ targets:
open-router:
source: OpenRouter API
sourceNamespace: open-router-chat-completions-api
- sourceRevisionDigest: sha256:60860108aac4bc42bde6965ab51b058bc2899b2c747747cea6304b7b2fd9e055
- sourceBlobDigest: sha256:814406dfec3321a42a6a09e93f3fe60edab725d14f8eedf34bea4ca19d53a364
+ sourceRevisionDigest: sha256:d24d16338614e6343ad2fa1f47f408d2f8c3eba071a3d8a472544748a0aa6620
+ sourceBlobDigest: sha256:da7dea9cc7d4012055e43f82b5e8dbf0324eda4990d380fc4968ae2e93bc5acd
codeSamplesNamespace: open-router-python-code-samples
- codeSamplesRevisionDigest: sha256:9d35e2b24e2c243e828f1fc71d03e8d166b3a99427ef780bba63305f4e2c4902
+ codeSamplesRevisionDigest: sha256:3f73f08c00f988c928fcea61faba174a810f86938b84a2f3db39fb026966729c
workflow:
workflowVersion: 1.0.0
speakeasyVersion: 1.787.0
diff --git a/RELEASES.md b/RELEASES.md
index 1fbb25d9..00111650 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -3019,4 +3019,14 @@ Based on:
### Generated
- [python v1.3.25] .
### Releases
-- [PyPI v1.3.25] https://pypi.org/project/openrouter/1.3.25 - .
\ No newline at end of file
+- [PyPI v1.3.25] https://pypi.org/project/openrouter/1.3.25 - .
+
+## 2026-10-06 18:05:42
+### Changes
+Based on:
+- OpenAPI Doc
+- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.3.26] .
+### Releases
+- [PyPI v1.3.26] https://pypi.org/project/openrouter/1.3.26 - .
\ No newline at end of file
diff --git a/docs/operations/createkeysdata.mdx b/docs/operations/createkeysdata.mdx
index 7bcdd1c7..18bb520f 100644
--- a/docs/operations/createkeysdata.mdx
+++ b/docs/operations/createkeysdata.mdx
@@ -21,6 +21,7 @@ The created API key information
| `hash` | *str* | :heavy_check_mark: | Unique hash identifier for the API key | f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 |
| `include_byok_in_limit` | *bool* | :heavy_check_mark: | Whether to include external BYOK usage in the credit limit | false |
| `label` | *str* | :heavy_check_mark: | Human-readable label for the API key | sk-or-v1-0e6...1c96 |
+| `last_used_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025 | 2026-09-15T15:45:00Z |
| `limit` | *Nullable[float]* | :heavy_check_mark: | Spending limit for the API key in USD | 100 |
| `limit_remaining` | *Nullable[float]* | :heavy_check_mark: | Remaining spending limit in USD | 74.5 |
| `limit_reset` | *Nullable[str]* | :heavy_check_mark: | Type of limit reset for the API key | monthly |
diff --git a/docs/operations/createkeysresponse.mdx b/docs/operations/createkeysresponse.mdx
index 83f6a2a6..ef2250ae 100644
--- a/docs/operations/createkeysresponse.mdx
+++ b/docs/operations/createkeysresponse.mdx
@@ -7,7 +7,7 @@ API key created successfully
## Fields
-| Field | Type | Required | Description | Example |
-| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `data` | [operations.CreateKeysData](../operations/createkeysdata.mdx) | :heavy_check_mark: | The created API key information | \{
"byok_usage": 17.38,
"byok_usage_daily": 17.38,
"byok_usage_monthly": 17.38,
"byok_usage_weekly": 17.38,
"created_at": "2025-08-24T10:30:00Z",
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"disabled": false,
"expires_at": "2027-12-31T23:59:59Z",
"external_user": null,
"hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943",
"include_byok_in_limit": false,
"label": "sk-or-v1-0e6...1c96",
"limit": 100,
"limit_remaining": 74.5,
"limit_reset": "monthly",
"name": "My Production Key",
"updated_at": "2025-08-24T15:45:00Z",
"usage": 25.5,
"usage_daily": 25.5,
"usage_monthly": 25.5,
"usage_weekly": 25.5,
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
} |
-| `key` | *str* | :heavy_check_mark: | The actual API key string (only shown once) | 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 |
\ No newline at end of file
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [operations.CreateKeysData](../operations/createkeysdata.mdx) | :heavy_check_mark: | The created API key information | \{
"byok_usage": 17.38,
"byok_usage_daily": 17.38,
"byok_usage_monthly": 17.38,
"byok_usage_weekly": 17.38,
"created_at": "2025-08-24T10:30:00Z",
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"disabled": false,
"expires_at": "2027-12-31T23:59:59Z",
"external_user": null,
"hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943",
"include_byok_in_limit": false,
"label": "sk-or-v1-0e6...1c96",
"last_used_at": "2026-09-15T15:45:00Z",
"limit": 100,
"limit_remaining": 74.5,
"limit_reset": "monthly",
"name": "My Production Key",
"updated_at": "2025-08-24T15:45:00Z",
"usage": 25.5,
"usage_daily": 25.5,
"usage_monthly": 25.5,
"usage_weekly": 25.5,
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
} |
+| `key` | *str* | :heavy_check_mark: | The actual API key string (only shown once) | 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 |
\ No newline at end of file
diff --git a/docs/operations/getkeydata.mdx b/docs/operations/getkeydata.mdx
index 1e5f0927..3ad8cfab 100644
--- a/docs/operations/getkeydata.mdx
+++ b/docs/operations/getkeydata.mdx
@@ -21,6 +21,7 @@ The API key information
| `hash` | *str* | :heavy_check_mark: | Unique hash identifier for the API key | f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 |
| `include_byok_in_limit` | *bool* | :heavy_check_mark: | Whether to include external BYOK usage in the credit limit | false |
| `label` | *str* | :heavy_check_mark: | Human-readable label for the API key | sk-or-v1-0e6...1c96 |
+| `last_used_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025 | 2026-09-15T15:45:00Z |
| `limit` | *Nullable[float]* | :heavy_check_mark: | Spending limit for the API key in USD | 100 |
| `limit_remaining` | *Nullable[float]* | :heavy_check_mark: | Remaining spending limit in USD | 74.5 |
| `limit_reset` | *Nullable[str]* | :heavy_check_mark: | Type of limit reset for the API key | monthly |
diff --git a/docs/operations/getkeyresponse.mdx b/docs/operations/getkeyresponse.mdx
index b54168e5..96291227 100644
--- a/docs/operations/getkeyresponse.mdx
+++ b/docs/operations/getkeyresponse.mdx
@@ -7,6 +7,6 @@ API key details
## Fields
-| Field | Type | Required | Description | Example |
-| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `data` | [operations.GetKeyData](../operations/getkeydata.mdx) | :heavy_check_mark: | The API key information | \{
"byok_usage": 17.38,
"byok_usage_daily": 17.38,
"byok_usage_monthly": 17.38,
"byok_usage_weekly": 17.38,
"created_at": "2025-08-24T10:30:00Z",
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"disabled": false,
"expires_at": "2027-12-31T23:59:59Z",
"external_user": null,
"hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943",
"include_byok_in_limit": false,
"label": "sk-or-v1-0e6...1c96",
"limit": 100,
"limit_remaining": 74.5,
"limit_reset": "monthly",
"name": "My Production Key",
"updated_at": "2025-08-24T15:45:00Z",
"usage": 25.5,
"usage_daily": 25.5,
"usage_monthly": 25.5,
"usage_weekly": 25.5,
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
} |
\ No newline at end of file
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [operations.GetKeyData](../operations/getkeydata.mdx) | :heavy_check_mark: | The API key information | \{
"byok_usage": 17.38,
"byok_usage_daily": 17.38,
"byok_usage_monthly": 17.38,
"byok_usage_weekly": 17.38,
"created_at": "2025-08-24T10:30:00Z",
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"disabled": false,
"expires_at": "2027-12-31T23:59:59Z",
"external_user": null,
"hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943",
"include_byok_in_limit": false,
"label": "sk-or-v1-0e6...1c96",
"last_used_at": "2026-09-15T15:45:00Z",
"limit": 100,
"limit_remaining": 74.5,
"limit_reset": "monthly",
"name": "My Production Key",
"updated_at": "2025-08-24T15:45:00Z",
"usage": 25.5,
"usage_daily": 25.5,
"usage_monthly": 25.5,
"usage_weekly": 25.5,
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
} |
\ No newline at end of file
diff --git a/docs/operations/listdata.mdx b/docs/operations/listdata.mdx
index 9c01abd8..a68b8ca9 100644
--- a/docs/operations/listdata.mdx
+++ b/docs/operations/listdata.mdx
@@ -18,6 +18,7 @@ title: "ListData"
| `hash` | *str* | :heavy_check_mark: | Unique hash identifier for the API key | f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 |
| `include_byok_in_limit` | *bool* | :heavy_check_mark: | Whether to include external BYOK usage in the credit limit | false |
| `label` | *str* | :heavy_check_mark: | Human-readable label for the API key | sk-or-v1-0e6...1c96 |
+| `last_used_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025 | 2026-09-15T15:45:00Z |
| `limit` | *Nullable[float]* | :heavy_check_mark: | Spending limit for the API key in USD | 100 |
| `limit_remaining` | *Nullable[float]* | :heavy_check_mark: | Remaining spending limit in USD | 74.5 |
| `limit_reset` | *Nullable[str]* | :heavy_check_mark: | Type of limit reset for the API key | monthly |
diff --git a/docs/operations/updatekeysdata.mdx b/docs/operations/updatekeysdata.mdx
index 763bb1b4..46e46400 100644
--- a/docs/operations/updatekeysdata.mdx
+++ b/docs/operations/updatekeysdata.mdx
@@ -21,6 +21,7 @@ The updated API key information
| `hash` | *str* | :heavy_check_mark: | Unique hash identifier for the API key | f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 |
| `include_byok_in_limit` | *bool* | :heavy_check_mark: | Whether to include external BYOK usage in the credit limit | false |
| `label` | *str* | :heavy_check_mark: | Human-readable label for the API key | sk-or-v1-0e6...1c96 |
+| `last_used_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025 | 2026-09-15T15:45:00Z |
| `limit` | *Nullable[float]* | :heavy_check_mark: | Spending limit for the API key in USD | 100 |
| `limit_remaining` | *Nullable[float]* | :heavy_check_mark: | Remaining spending limit in USD | 74.5 |
| `limit_reset` | *Nullable[str]* | :heavy_check_mark: | Type of limit reset for the API key | monthly |
diff --git a/docs/operations/updatekeysresponse.mdx b/docs/operations/updatekeysresponse.mdx
index 8bd3a4f5..9440f9f6 100644
--- a/docs/operations/updatekeysresponse.mdx
+++ b/docs/operations/updatekeysresponse.mdx
@@ -7,6 +7,6 @@ API key updated successfully
## Fields
-| Field | Type | Required | Description | Example |
-| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `data` | [operations.UpdateKeysData](../operations/updatekeysdata.mdx) | :heavy_check_mark: | The updated API key information | \{
"byok_usage": 17.38,
"byok_usage_daily": 17.38,
"byok_usage_monthly": 17.38,
"byok_usage_weekly": 17.38,
"created_at": "2025-08-24T10:30:00Z",
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"disabled": false,
"expires_at": "2027-12-31T23:59:59Z",
"external_user": null,
"hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943",
"include_byok_in_limit": false,
"label": "sk-or-v1-0e6...1c96",
"limit": 100,
"limit_remaining": 74.5,
"limit_reset": "monthly",
"name": "My Production Key",
"updated_at": "2025-08-24T15:45:00Z",
"usage": 25.5,
"usage_daily": 25.5,
"usage_monthly": 25.5,
"usage_weekly": 25.5,
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
} |
\ No newline at end of file
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [operations.UpdateKeysData](../operations/updatekeysdata.mdx) | :heavy_check_mark: | The updated API key information | \{
"byok_usage": 17.38,
"byok_usage_daily": 17.38,
"byok_usage_monthly": 17.38,
"byok_usage_weekly": 17.38,
"created_at": "2025-08-24T10:30:00Z",
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"disabled": false,
"expires_at": "2027-12-31T23:59:59Z",
"external_user": null,
"hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943",
"include_byok_in_limit": false,
"label": "sk-or-v1-0e6...1c96",
"last_used_at": "2026-09-15T15:45:00Z",
"limit": 100,
"limit_remaining": 74.5,
"limit_reset": "monthly",
"name": "My Production Key",
"updated_at": "2025-08-24T15:45:00Z",
"usage": 25.5,
"usage_daily": 25.5,
"usage_monthly": 25.5,
"usage_weekly": 25.5,
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
} |
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
index 1a6ea457..112fa9a9 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "openrouter"
-version = "1.3.25"
+version = "1.3.26"
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 f0da1b70..235db3ae 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.25"
+__version__: str = "1.3.26"
__openapi_doc_version__: str = "1.0.0"
__gen_version__: str = "2.914.0"
-__user_agent__: str = "speakeasy-sdk/python 1.3.25 2.914.0 1.0.0 openrouter"
+__user_agent__: str = "speakeasy-sdk/python 1.3.26 2.914.0 1.0.0 openrouter"
try:
if __package__ is not None:
diff --git a/src/openrouter/operations/createkeys.py b/src/openrouter/operations/createkeys.py
index 2fe95efb..90b84583 100644
--- a/src/openrouter/operations/createkeys.py
+++ b/src/openrouter/operations/createkeys.py
@@ -302,6 +302,8 @@ class CreateKeysDataTypedDict(TypedDict):
r"""Whether to include external BYOK usage in the credit limit"""
label: str
r"""Human-readable label for the API key"""
+ last_used_at: Nullable[datetime]
+ r"""ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025"""
limit: Nullable[float]
r"""Spending limit for the API key in USD"""
limit_remaining: Nullable[float]
@@ -362,6 +364,9 @@ class CreateKeysData(BaseModel):
label: str
r"""Human-readable label for the API key"""
+ last_used_at: Nullable[datetime]
+ r"""ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025"""
+
limit: Nullable[float]
r"""Spending limit for the API key in USD"""
@@ -403,6 +408,7 @@ def serialize_model(self, handler):
"creator_user_id",
"expires_at",
"external_user",
+ "last_used_at",
"limit",
"limit_remaining",
"limit_reset",
diff --git a/src/openrouter/operations/getkey.py b/src/openrouter/operations/getkey.py
index ceb137da..924bb00e 100644
--- a/src/openrouter/operations/getkey.py
+++ b/src/openrouter/operations/getkey.py
@@ -176,6 +176,8 @@ class GetKeyDataTypedDict(TypedDict):
r"""Whether to include external BYOK usage in the credit limit"""
label: str
r"""Human-readable label for the API key"""
+ last_used_at: Nullable[datetime]
+ r"""ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025"""
limit: Nullable[float]
r"""Spending limit for the API key in USD"""
limit_remaining: Nullable[float]
@@ -236,6 +238,9 @@ class GetKeyData(BaseModel):
label: str
r"""Human-readable label for the API key"""
+ last_used_at: Nullable[datetime]
+ r"""ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025"""
+
limit: Nullable[float]
r"""Spending limit for the API key in USD"""
@@ -277,6 +282,7 @@ def serialize_model(self, handler):
"creator_user_id",
"expires_at",
"external_user",
+ "last_used_at",
"limit",
"limit_remaining",
"limit_reset",
diff --git a/src/openrouter/operations/list.py b/src/openrouter/operations/list.py
index bec5a577..7e0c0023 100644
--- a/src/openrouter/operations/list.py
+++ b/src/openrouter/operations/list.py
@@ -207,6 +207,8 @@ class ListDataTypedDict(TypedDict):
r"""Whether to include external BYOK usage in the credit limit"""
label: str
r"""Human-readable label for the API key"""
+ last_used_at: Nullable[datetime]
+ r"""ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025"""
limit: Nullable[float]
r"""Spending limit for the API key in USD"""
limit_remaining: Nullable[float]
@@ -265,6 +267,9 @@ class ListData(BaseModel):
label: str
r"""Human-readable label for the API key"""
+ last_used_at: Nullable[datetime]
+ r"""ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025"""
+
limit: Nullable[float]
r"""Spending limit for the API key in USD"""
@@ -306,6 +311,7 @@ def serialize_model(self, handler):
"creator_user_id",
"expires_at",
"external_user",
+ "last_used_at",
"limit",
"limit_remaining",
"limit_reset",
diff --git a/src/openrouter/operations/updatekeys.py b/src/openrouter/operations/updatekeys.py
index 970481df..3862d925 100644
--- a/src/openrouter/operations/updatekeys.py
+++ b/src/openrouter/operations/updatekeys.py
@@ -256,6 +256,8 @@ class UpdateKeysDataTypedDict(TypedDict):
r"""Whether to include external BYOK usage in the credit limit"""
label: str
r"""Human-readable label for the API key"""
+ last_used_at: Nullable[datetime]
+ r"""ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025"""
limit: Nullable[float]
r"""Spending limit for the API key in USD"""
limit_remaining: Nullable[float]
@@ -316,6 +318,9 @@ class UpdateKeysData(BaseModel):
label: str
r"""Human-readable label for the API key"""
+ last_used_at: Nullable[datetime]
+ r"""ISO 8601 UTC timestamp of the most recent usage recorded for the API key, or null if no usage has been recorded since the end of 2025"""
+
limit: Nullable[float]
r"""Spending limit for the API key in USD"""
@@ -357,6 +362,7 @@ def serialize_model(self, handler):
"creator_user_id",
"expires_at",
"external_user",
+ "last_used_at",
"limit",
"limit_remaining",
"limit_reset",
diff --git a/uv.lock b/uv.lock
index 0888773f..cdc856ea 100644
--- a/uv.lock
+++ b/uv.lock
@@ -213,7 +213,7 @@ wheels = [
[[package]]
name = "openrouter"
-version = "1.3.25"
+version = "1.3.26"
source = { editable = "." }
dependencies = [
{ name = "httpcore" },