NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3113 most downloaded on PyPI
Official Python Client SDK for OpenRouter.
Last release 2 days ago
02 Oct 2026
Ships on a steady schedule
a new release about every 8 days
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
10 months old
317 releases · first in 2025
One column per month.
open_router.tts.create_speech() : request.provider Changed
open_router.tts.create_speech(): request.provider Changedopen_router.stt.create_transcription(): request.provider ChangedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.observability.list() : response.data[] Changed
open_router.observability.list(): response.data[] Changedopen_router.observability.create(): response.data Changedopen_router.observability.get(): response.data Changedopen_router.observability.update(): response.data ChangedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
open_router.images.generate() :
open_router.images.generate():
request.resolution.enum(1.5k) AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.analytics.get_user_activity() : response.data[].cached_tokens Added
open_router.analytics.get_user_activity(): response.data[].cached_tokens AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.generations.get_generation() : error.status[400] Added
open_router.generations.get_generation(): error.status[400] Addedopen_router.generations.list_generation_content(): error.status[400] AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
request.tools[].union(ChatDynamicServerTool) Added
open_router.chat.send():
request.tools[].union(ChatDynamicServerTool) Addedopen_router.presets.create_presets_chat_completions():
request.tools[].union(ChatDynamicServerTool) AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
open_router.organization.get_settings() : Added
open_router.organization.get_settings(): Addedopen_router.organization.update_settings(): AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.end_users.list() : Added
open_router.end_users.list(): Addedopen_router.end_users.create(): Addedopen_router.end_users.delete(): Addedopen_router.end_users.get(): Addedopen_router.end_users.update(): AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.batch.create_batches() : response.results[].response.body Changed
open_router.batch.create_batches(): response.results[].response.body Changedopen_router.batch.get_batches(): response.results[].response.body Changedopen_router.chat.send():
request.plugins[].union(alignment) Addedopen_router.presets.create_presets_chat_completions():
request.plugins[].union(alignment) Addedopen_router.presets.create_presets_messages():
request.plugins[].union(alignment) Addedopen_router.presets.create_presets_responses():
request.plugins[].union(alignment) Addedopen_router.responses.send():
request.plugins[].union(alignment) Addedresponse Changedopen_router.beta.responses.send():
request.plugins[].union(alignment) Addedresponse ChangedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
open_router.tools.list_tools() : Added
open_router.tools.list_tools(): Addedopen_router.tools.get_tool(): AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
request.service_tier.enum(ultrafast) Added
open_router.chat.send():
request.service_tier.enum(ultrafast) Addedopen_router.generations.get_generation(): response.data.provider_responses[].routed_service_tier.enum(ultrafast) Addedopen_router.presets.create_presets_chat_completions():
request.service_tier.enum(ultrafast) Addedopen_router.presets.create_presets_responses():
request.service_tier.enum(ultrafast) Addedopen_router.responses.send():
request.service_tier.enum(ultrafast) Addedopen_router.beta.responses.send():
request.service_tier.enum(ultrafast) AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.stt.create_transcription() :
open_router.stt.create_transcription():
request Changed (Breaking ⚠️)response Changedopen_router.embeddings.generate(): request.provider Changedopen_router.endpoints.list(): response.data.endpoints[].provider_name.enum(eleven_labs) Addedopen_router.stt.create_transcription_multipart():
request Changedresponse Changedopen_router.batch.create_batches():
request.provider.only[].union(ProviderName).enum(eleven_labs) Addedopen_router.byok.list():
request.provider Changedresponse.data[].provider.enum(elevenlabs) Addedopen_router.byok.create():
request.provider.enum(elevenlabs) Addedresponse.data.provider.enum(elevenlabs) Addedopen_router.byok.get(): response.data.provider.enum(elevenlabs) Addedopen_router.byok.update(): response.data.provider.enum(elevenlabs) Addedopen_router.chat.send(): request.provider Changedopen_router.generations.get_generation(): response.data.provider_responses[].provider_name.enum(eleven_labs) Addedopen_router.tts.create_speech():
request.provider.options.elevenlabs Addedopen_router.endpoints.list_zdr_endpoints(): response.data[].provider_name.enum(eleven_labs) Addedopen_router.alpha.decisions.create(): request.provider Changedopen_router.images.generate(): request.provider Changedopen_router.presets.create_presets_chat_completions(): request.provider Changedopen_router.presets.create_presets_messages(): request.provider Changedopen_router.presets.create_presets_responses(): request.provider Changedopen_router.rerank.rerank(): request.provider Changedopen_router.responses.send(): request.provider Changedopen_router.beta.responses.send(): request.provider Changedopen_router.system_one.create(): request.provider Changedopen_router.video_generation.generate():
request.provider.options.elevenlabs AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
request.plugins[].union(jev-router).allowed_models Added
open_router.chat.send():
request.plugins[].union(jev-router).allowed_models Addedopen_router.presets.create_presets_chat_completions():
request.plugins[].union(jev-router).allowed_models Addedopen_router.presets.create_presets_messages():
request.plugins[].union(jev-router).allowed_models Addedopen_router.presets.create_presets_responses():
request.plugins[].union(jev-router).allowed_models Addedopen_router.responses.send():
request.plugins[].union(jev-router).allowed_models Addedopen_router.beta.responses.send():
request.plugins[].union(jev-router).allowed_models AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
request.plugins[].union(jev-router) Added
open_router.chat.send():
request.plugins[].union(jev-router) Addedopen_router.presets.create_presets_chat_completions():
request.plugins[].union(jev-router) Addedopen_router.presets.create_presets_messages():
request.plugins[].union(jev-router) Addedopen_router.presets.create_presets_responses():
request.plugins[].union(jev-router) Addedopen_router.responses.send():
request.plugins[].union(jev-router) Addedopen_router.beta.responses.send():
request.plugins[].union(jev-router) AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.batch.get_batches() : error.status[410] Added
open_router.batch.get_batches(): error.status[410] AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
open_router.vault.list_intern_effective_vault_secrets() : Added
open_router.vault.list_intern_effective_vault_secrets(): AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.private_endpoints.list() : Added
open_router.private_endpoints.list(): Addedopen_router.private_endpoints.create(): Addedopen_router.private_endpoints.delete(): Addedopen_router.private_endpoints.get(): Addedopen_router.private_endpoints.update(): Addedopen_router.private_endpoints.activate(): Addedopen_router.private_endpoints.disable(): Addedopen_router.private_endpoints.enable(): Addedopen_router.private_endpoints.update_pricing(): Addedopen_router.private_endpoints.validate(): AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.batch.create_batches() : response.results[].response.body.union(class (2)).content[].union(web_fetch_tool_result).content.union(web_fetch_
open_router.batch.create_batches(): response.results[].response.body.union(class (2)).content[].union(web_fetch_tool_result).content.union(web_fetch_tool_result_error).error_code.enum(content_too_large) Addedopen_router.batch.get_batches(): response.results[].response.body.union(class (2)).content[].union(web_fetch_tool_result).content.union(web_fetch_tool_result_error).error_code.enum(content_too_large) AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.interns.get_intern_daemon_access() : Deprecated
open_router.interns.get_intern_daemon(): Addedopen_router.interns.get_intern_daemon_access(): Deprecatedopen_router.presets.create_presets_messages():
request.thinking.union(between_tools) AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.batch.create_batches() : response.results[].response.body.union(class (2)).content[].union(web_fetch_tool_result).content.union(web_fetch_
open_router.batch.create_batches(): response.results[].response.body.union(class (2)).content[].union(web_fetch_tool_result).content.union(web_fetch_tool_result_error).error_code.enum(url_not_in_prior_context) Addedopen_router.batch.get_batches(): response.results[].response.body.union(class (2)).content[].union(web_fetch_tool_result).content.union(web_fetch_tool_result_error).error_code.enum(url_not_in_prior_context) Addedopen_router.endpoints.list_zdr_endpoints(): response.data[].native_tools Addedopen_router.endpoints.list(): response.data.endpoints[].native_tools Addedopen_router.presets.create_presets_messages():
request.messages[].content.union(Array<>)[].union(web_search_tool_result).content.union(class (1)).error_code.enum(request_too_large) AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.embeddings.generate() : error.status[504] Added
open_router.embeddings.generate(): error.status[504] AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.alpha.decisions.create() : request.provider Changed
open_router.alpha.decisions.create(): request.provider Changedopen_router.tts.create_speech():
request.provider.options.respan Addedopen_router.stt.create_transcription():
request.provider.options.respan Addedopen_router.batch.create_batches():
request.provider.only[].union(ProviderName).enum(respan) Addedopen_router.byok.list():
request.provider Changedresponse.data[].provider.enum(respan) Addedopen_router.byok.create():
request.provider.enum(respan) Addedresponse.data.provider.enum(respan) Addedopen_router.byok.get(): response.data.provider.enum(respan) Addedopen_router.byok.update(): response.data.provider.enum(respan) Addedopen_router.chat.send(): request.provider Changedopen_router.embeddings.generate(): request.provider Changedopen_router.endpoints.list_zdr_endpoints(): response.data[].provider_name.enum(respan) Addedopen_router.endpoints.list(): response.data.endpoints[].provider_name.enum(respan) Addedopen_router.generations.get_generation(): response.data.provider_responses[].provider_name.enum(respan) Addedopen_router.images.generate(): request.provider Changedopen_router.presets.create_presets_chat_completions(): request.provider Changedopen_router.presets.create_presets_messages(): request.provider Changedopen_router.presets.create_presets_responses(): request.provider Changedopen_router.rerank.rerank(): request.provider Changedopen_router.responses.send(): request.provider Changedopen_router.beta.responses.send(): request.provider Changedopen_router.system_one.create(): request.provider Changedopen_router.video_generation.generate():
request.provider.options.respan AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.images.generate() : request Changed
open_router.images.generate(): request ChangedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.batch.list() : Added
open_router.batch.list(): Addedopen_router.batch.create_batches(): Addedopen_router.batch.delete(): Addedopen_router.batch.get_batches(): AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.tts.create_speech() :
open_router.tts.create_speech():
request.input_references[] Changedopen_router.endpoints.list_zdr_endpoints(): response.data[] Changedopen_router.endpoints.list(): response.data.endpoints[] ChangedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.interns.get_intern_daemon_access() : error.status[429] Removed (Breaking ⚠️ )
open_router.interns.get_intern_daemon_access(): error.status[429] Removed (Breaking ⚠️)Generated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.alpha.decisions.create() : request.provider Changed
open_router.alpha.decisions.create(): request.provider Changedopen_router.tts.create_speech():
request.provider.options.scaledown Addedopen_router.stt.create_transcription():
request.provider.options.scaledown Addedopen_router.byok.list():
request.provider Changedresponse.data[].provider.enum(scaledown) Addedopen_router.byok.create():
request.provider.enum(scaledown) Addedresponse.data.provider.enum(scaledown) Addedopen_router.byok.get(): response.data.provider.enum(scaledown) Addedopen_router.byok.update(): response.data.provider.enum(scaledown) Addedopen_router.chat.send(): request.provider Changedopen_router.embeddings.generate(): request.provider Changedopen_router.endpoints.list_zdr_endpoints(): response.data[].provider_name.enum(scale_down) Addedopen_router.endpoints.list(): response.data.endpoints[].provider_name.enum(scale_down) Addedopen_router.generations.get_generation(): response.data.provider_responses[].provider_name.enum(scale_down) Addedopen_router.images.generate(): request.provider Changedopen_router.presets.create_presets_chat_completions(): request.provider Changedopen_router.presets.create_presets_messages(): request.provider Changedopen_router.presets.create_presets_responses(): request.provider Changedopen_router.rerank.rerank(): request.provider Changedopen_router.responses.send(): request.provider Changedopen_router.beta.responses.send(): request.provider Changedopen_router.system_one.create(): request.provider Changedopen_router.video_generation.generate():
request.provider.options.scaledown AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.scim.list_groups() : request Changed
open_router.scim.list_groups(): request ChangedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.interns.get_intern_daemon_access() : Added
open_router.interns.get_intern_daemon_access(): AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.alpha.decisions.create() :
open_router.alpha.decisions.create():
request.provider.options Addedopen_router.chat.send():
request.provider.options Addedopen_router.embeddings.generate():
request.provider.options Addedopen_router.presets.create_presets_chat_completions():
request.provider.options Addedopen_router.presets.create_presets_messages():
request.provider.options Addedopen_router.presets.create_presets_responses():
request.provider.options Addedopen_router.rerank.rerank():
request.provider.options Addedopen_router.responses.send():
request.provider.options Addedopen_router.beta.responses.send():
request.provider.options Addedopen_router.system_one.create():
request.provider.options AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.presets.create_presets_responses() :
open_router.presets.create_presets_responses():
request.input.union(Array<>)[] Changed (Breaking ⚠️)open_router.responses.send():
request.input.union(Array<>)[] Changed (Breaking ⚠️)open_router.beta.responses.send():
request.input.union(Array<>)[] Changed (Breaking ⚠️)Generated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.interns.invoke() : Added
open_router.interns.invoke(): AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.presets.create_presets_messages() :
open_router.presets.create_presets_messages():
request.tools[].union(class (0)).strict AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
request.plugins[].union(switchyard-router) Added
open_router.chat.send():
request.plugins[].union(switchyard-router) Addedopen_router.presets.create_presets_chat_completions():
request.plugins[].union(switchyard-router) Addedopen_router.presets.create_presets_messages():
request.plugins[].union(switchyard-router) Addedopen_router.presets.create_presets_responses():
request.plugins[].union(switchyard-router) Addedopen_router.responses.send():
request.plugins[].union(switchyard-router) Addedopen_router.beta.responses.send():
request.plugins[].union(switchyard-router) AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
open_router.workspaces.list() : response.data[].disabled_server_tools Added
open_router.workspaces.list(): response.data[].disabled_server_tools Addedopen_router.workspaces.create():
request.disabled_server_tools Addedresponse.data.disabled_server_tools Addedopen_router.workspaces.get(): response.data.disabled_server_tools Addedopen_router.workspaces.update():
request.disabled_server_tools Addedresponse.data.disabled_server_tools AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.presets.create_presets_messages() : request.safeguards Added
open_router.presets.create_presets_messages(): request.safeguards AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.interns.create_intern() : error.status[415] Added
open_router.interns.create_intern(): error.status[415] Addedopen_router.interns.delete_intern(): error.status[415] Addedopen_router.interns.update_intern(): error.status[415] Addedopen_router.interns.provision_intern(): error.status[415] Addedopen_router.interns.suspend_intern(): error.status[415] AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.interns.chat() : response.status[202] Added (Breaking ⚠️ )
open_router.interns.chat(): response.status[202] Added (Breaking ⚠️)open_router.byok.list(): response.data[].declared_zdr Addedopen_router.byok.create():
request.declared_zdr Addedresponse.data.declared_zdr Addedopen_router.byok.get(): response.data.declared_zdr Addedopen_router.byok.update():
request.declared_zdr Addedresponse.data.declared_zdr AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.chat.send() : request Changed
open_router.chat.send(): request Changedopen_router.presets.create_presets_chat_completions(): request Changedopen_router.presets.create_presets_messages(): request Changedopen_router.presets.create_presets_responses(): request Changedopen_router.responses.send():
request Changedresponse Changedopen_router.beta.responses.send():
request Changedresponse ChangedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.video_generation.generate() :
open_router.video_generation.generate():
request.resolution.enum(360p) Addedopen_router.video_generation.list_videos_models(): response.data[] ChangedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.interns.list_interns() : error.metadata Added
open_router.interns.list_interns(): error.metadata Addedopen_router.interns.create_intern(): error.metadata Addedopen_router.interns.delete_intern(): error.metadata Addedopen_router.interns.get_intern(): error.metadata Addedopen_router.interns.update_intern(): error Changedopen_router.interns.provision_intern(): error Changedopen_router.interns.suspend_intern(): error Changedopen_router.interns.chat():
response Changederror ChangedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.system_one.create() : Added
open_router.system_one.create(): AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
open_router.byok.update() : error.status[403] Added
open_router.byok.update(): error.status[403] Addedopen_router.interns.list_interns():
request.starting_after Addedresponse.next_cursor AddedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
open_router.interns.delete_intern() :
open_router.interns.delete_intern():
request.acknowledge_workspace_loss Addederror ChangedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
open_router.interns.create_intern() : request.workspace_id Changed
open_router.interns.create_intern(): request.workspace_id Changedopen_router.interns.chat():
request.messages[].union(assistant).content ChangedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
open_router.api_keys.get_current_key_metadata() : response.data Changed
open_router.api_keys.get_current_key_metadata(): response.data ChangedGenerated with Speakeasy CLI 1.787.0
Publishing Completed
Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Your coding agent can read these notes before it upgrades. Set up the MCP server →