diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock
index 0f1e3be3..32f916b7 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: bebc2e8fea10251aec0323a863417eab
+ docChecksum: b583c5419cb41238eb23ec5310d0eefe
docVersion: 1.0.0
speakeasyVersion: 1.787.0
generationVersion: 2.914.0
- releaseVersion: 1.3.60
- configChecksum: eb7c86d6839742b98d33d2a96d8b5013
+ releaseVersion: 1.3.61
+ configChecksum: 4dd10f5236bd68b1856293d2cb4a4868
repoURL: https://github.com/OpenRouterTeam/python-sdk.git
installationURL: https://github.com/OpenRouterTeam/python-sdk.git
published: true
persistentEdits:
- generation_id: e6a5b1eb-7359-4fb4-a437-def88295741c
- pristine_commit_hash: cb90be710af20c8724a347fff8de3e7e0a1a3608
- pristine_tree_hash: bf3098a3566832138f8cab929b1c28b6c1a88d33
+ generation_id: ec10f6c4-3075-4f20-99cb-79e5bab7166b
+ pristine_commit_hash: 5a1c8675b0c241df8d11fe2652cbf4e200fb407f
+ pristine_tree_hash: eb5353f0e825f9787eaac5885ade5f001a7eaf1e
features:
python:
acceptHeaders: 3.0.0
@@ -7020,8 +7020,8 @@ trackedFiles:
pristine_git_object: 99478c90d4d43c6e23cbe275f97998502c2378ae
docs/components/speechinputreferenceimage.mdx:
id: 8e77f64c57a8
- last_write_checksum: sha1:586ef478d847509339873a7e5bbc7134d38f1b36
- pristine_git_object: 068290f70f3496c0a6a3b030ce6f5cb384550fb9
+ last_write_checksum: sha1:dd5d1a3a16e897982592f497fd58402ce739b113
+ pristine_git_object: bf760441b93a155b756ae9fad8f427f315e936ff
docs/components/speechinputreferenceimageinput.mdx:
id: 04884f13e007
last_write_checksum: sha1:fb6443433e5735e00e7264c3dfee8389af295339
@@ -7040,8 +7040,8 @@ trackedFiles:
pristine_git_object: 34f4f07fb3008df83646fa3d88ce04009274246a
docs/components/speechrequest.mdx:
id: 06e81b0433f6
- last_write_checksum: sha1:c2a048132db0ccec0c3b5b59ab52a78a49e83e29
- pristine_git_object: e87bc0ab286848af07a53d51097ccdb5088ead6c
+ last_write_checksum: sha1:fce189de411c036986b99d2de21a823dcd91897e
+ pristine_git_object: 036ebce5676497208c225e1110c841a39149a70f
docs/components/speechrequestdatacollection.mdx:
id: 6c5938568888
last_write_checksum: sha1:89a08b4c4de66c1ef7676792a38747e030ed6729
@@ -10304,8 +10304,8 @@ trackedFiles:
pristine_git_object: 1dd30f0b898f2a842d1bb585b03d887be90e7845
docs/sdks/tts/README.mdx:
id: cd1132543884
- last_write_checksum: sha1:baa3374d9c06310a87893eb14a25511de061f3dc
- pristine_git_object: 7b3c78a7323028a4668d6ce8394c8cdd4c15b67d
+ last_write_checksum: sha1:b7fb22570df11bee71ef3db33c436b186b23168c
+ pristine_git_object: a8923ec2c634bf0d4e80f553c29d4cc6586afd9a
docs/sdks/vault/README.mdx:
id: 3738c6722acd
last_write_checksum: sha1:b608fe6954d2fc05d3982c4d071d8818ce68c1d8
@@ -10324,8 +10324,8 @@ trackedFiles:
pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544
pyproject.toml:
id: 5d07e7d72637
- last_write_checksum: sha1:de158115560e39857ddf2f7bd50debf50f14f1f5
- pristine_git_object: 96d4e82b753bc9dcf61521a131fdc9483f8a7e63
+ last_write_checksum: sha1:0372a5c23dad109dedc50d76356f81bc587827e1
+ pristine_git_object: bb0535ad8d221ad947dcff5bf4a7997adc14ecff
scripts/prepare_readme.py:
id: e0c5957a6035
last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54
@@ -10352,8 +10352,8 @@ trackedFiles:
pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137
src/openrouter/_version.py:
id: d8d15ad6c586
- last_write_checksum: sha1:466bbdaf1a80e3946d8f91eacf4b29a1866e1c1d
- pristine_git_object: 2b7810548e159b9920517756e64e486f2ef318e1
+ last_write_checksum: sha1:fc46f0b442635ab1eced7ce2a28fd70d00130946
+ pristine_git_object: c946511615cf4489c6c11bdb7e9108021fcf9146
src/openrouter/alpha.py:
id: 306c4d93308d
last_write_checksum: sha1:30f55a360f41376ab194b9ea725fe4e001a5ae1a
@@ -13368,8 +13368,8 @@ trackedFiles:
pristine_git_object: 33d35ab0c8d110d9253331c790c4b78b920660f3
src/openrouter/components/speechinputreferenceimage.py:
id: 644d542991a7
- last_write_checksum: sha1:1e9923984145ab1fa0ced2ccccdba8997e2bba11
- pristine_git_object: 6129f2f1ecb2c8883a1d998e2ac976d54c90ee94
+ last_write_checksum: sha1:c3eb8ac62c419901fffb5fd8534a1183c29060d1
+ pristine_git_object: b3f79479d118b226cd75760be00c9b0ae8d9a6e2
src/openrouter/components/speechinputreferenceimageinput.py:
id: 91a49498faa8
last_write_checksum: sha1:b8f5ae40360a7d96de4128d730b042bcd0d2d8e8
@@ -13380,8 +13380,8 @@ trackedFiles:
pristine_git_object: 4633e5d7658c500aa903ce8caa8ef86cc97b78eb
src/openrouter/components/speechrequest.py:
id: 2a9400167112
- last_write_checksum: sha1:5bfcf28dde5e94e671165f5919e24b3b9de83853
- pristine_git_object: ea07e4017cdd9b909f84129e83c0582c7effe10a
+ last_write_checksum: sha1:9bdc4fc5e786c7d8905534390d12969e4c63aaaf
+ pristine_git_object: ebd871980db2bb08535fba69a26993811971d81b
src/openrouter/components/speechturn.py:
id: 121e0a940f91
last_write_checksum: sha1:31bdba00e027b81de8a3872d48e694475cf02e7a
@@ -14720,8 +14720,8 @@ trackedFiles:
pristine_git_object: 701fa8597ff85f41a60736ade55fcb32f9ec7125
src/openrouter/tts.py:
id: 5055d4b95f1d
- last_write_checksum: sha1:93fae27a87035c17b86c6e5353754c371c9c3faa
- pristine_git_object: 001335f1dc471131bca2c942ea98c67825c7921f
+ last_write_checksum: sha1:a2b5c587bacc54e9255a15130318926d762b9a8b
+ pristine_git_object: 7f6f87ca20d750478ba987112d95be0550725472
src/openrouter/types/__init__.py:
id: 5eab536205b7
last_write_checksum: sha1:f9ad14217f832e74f594285960125add50324be9
@@ -18836,6 +18836,3 @@ examples:
"500":
application/json: {"error": {"code": 404, "message": "Intern not found"}}
examplesVersion: 1.0.2
-releaseNotes: |
- ## Python SDK Changes:
- * `open_router.models.list_for_user()`: `request.sort` **Added**
diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml
index 16726be1..e01de01d 100644
--- a/.speakeasy/gen.yaml
+++ b/.speakeasy/gen.yaml
@@ -36,7 +36,7 @@ generation:
documentation: mintlify
preApplyUnionDiscriminators: true
python:
- version: 1.3.60
+ version: 1.3.61
additionalDependencies:
dev: {}
main: {}
diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml
index 26e00d88..ae9a074f 100644
--- a/.speakeasy/out.openapi.yaml
+++ b/.speakeasy/out.openapi.yaml
@@ -29898,7 +29898,7 @@ components:
type: 'string'
type: 'object'
SpeechInputReferenceImage:
- description: 'Reference image describing the desired voice. Cannot be combined with `input_audio` parts. Only routed to endpoints that support image references.'
+ description: 'Reference image. On its own it describes the desired voice (voice design); alongside an `input_audio` part it is a scene image describing the setting the cloned voice speaks in. At most one per request. Only routed to endpoints that support image references.'
example:
image_url:
url: 'data:image/png;base64,iVBORw0KGgo...'
@@ -29957,7 +29957,7 @@ components:
input:
$ref: '#/components/schemas/SpeechInput'
input_references:
- description: 'Reference content for stateless voice cloning or voice design. Audio mode: one to three `input_audio` parts, each optionally paired with a `text` part carrying its transcript (a single clip accepts its transcript before or after it; with multiple clips each transcript immediately follows its clip); only routed to endpoints that support voice cloning (and multiple references when more than one part is sent). Image mode: exactly one `image_url` part; only routed to endpoints that support image references. The two modes cannot be mixed. An empty array is treated as no reference.'
+ description: 'Reference content for stateless voice cloning or voice design. Audio mode: one to three `input_audio` parts, each optionally paired with a `text` part carrying its transcript (a single clip accepts its transcript before or after it; with multiple clips each transcript immediately follows its clip), plus at most one `image_url` part as a scene image on providers that condition the cloned voice on its setting; only routed to endpoints that support voice cloning (and multiple references or image references when those parts are sent). Image mode: exactly one `image_url` part; only routed to endpoints that support image references. An empty array is treated as no reference.'
example:
- input_audio:
data: 'data:audio/wav;base64,UklGRuQXDABXQVZF...'
diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock
index 335408c6..2fd44c1c 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:0aacdcc949b2d7675bc27707be861a6976a4f319f12a069e6948227f453053c4
- sourceBlobDigest: sha256:23001c8d777328a9560ba8cd6428170d7229c7eda4f9b64909fbfb3711c18c94
+ sourceRevisionDigest: sha256:18d72f2bc62f6b608dd343c71a6043d3a919cb0678bdd809f6ba69a171fd652c
+ sourceBlobDigest: sha256:2240cec91aaeea1493f020f9b670cc51fbcefc2e299efb5b7a478c64c96157c3
tags:
- latest
- 1.0.0
@@ -11,10 +11,10 @@ targets:
open-router:
source: OpenRouter API
sourceNamespace: open-router-chat-completions-api
- sourceRevisionDigest: sha256:0aacdcc949b2d7675bc27707be861a6976a4f319f12a069e6948227f453053c4
- sourceBlobDigest: sha256:23001c8d777328a9560ba8cd6428170d7229c7eda4f9b64909fbfb3711c18c94
+ sourceRevisionDigest: sha256:18d72f2bc62f6b608dd343c71a6043d3a919cb0678bdd809f6ba69a171fd652c
+ sourceBlobDigest: sha256:2240cec91aaeea1493f020f9b670cc51fbcefc2e299efb5b7a478c64c96157c3
codeSamplesNamespace: open-router-python-code-samples
- codeSamplesRevisionDigest: sha256:65be134e3c1e615193ecaadca3d31ece2693ac80067917230150b8dffc36592b
+ codeSamplesRevisionDigest: sha256:c204e88675e5f9d466b6ff4b8f70763207686374e7866333ae8a19e90c2167f3
workflow:
workflowVersion: 1.0.0
speakeasyVersion: 1.787.0
diff --git a/RELEASES.md b/RELEASES.md
index 59f25e55..fa635312 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -3369,4 +3369,14 @@ Based on:
### Generated
- [python v1.3.60] .
### Releases
-- [PyPI v1.3.60] https://pypi.org/project/openrouter/1.3.60 - .
\ No newline at end of file
+- [PyPI v1.3.60] https://pypi.org/project/openrouter/1.3.60 - .
+
+## 2026-10-15 23:43:55
+### Changes
+Based on:
+- OpenAPI Doc
+- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.3.61] .
+### Releases
+- [PyPI v1.3.61] https://pypi.org/project/openrouter/1.3.61 - .
\ No newline at end of file
diff --git a/docs/components/speechinputreferenceimage.mdx b/docs/components/speechinputreferenceimage.mdx
index c02d1d3c..044350be 100644
--- a/docs/components/speechinputreferenceimage.mdx
+++ b/docs/components/speechinputreferenceimage.mdx
@@ -2,7 +2,7 @@
title: "SpeechInputReferenceImage"
---
-Reference image describing the desired voice. Cannot be combined with `input_audio` parts. Only routed to endpoints that support image references.
+Reference image. On its own it describes the desired voice (voice design); alongside an `input_audio` part it is a scene image describing the setting the cloned voice speaks in. At most one per request. Only routed to endpoints that support image references.
## Fields
diff --git a/docs/components/speechrequest.mdx b/docs/components/speechrequest.mdx
index 15e0eb0d..0cc902bb 100644
--- a/docs/components/speechrequest.mdx
+++ b/docs/components/speechrequest.mdx
@@ -7,16 +7,16 @@ Text-to-speech request input
## Fields
-| Field | Type | Required | Description | Example |
-| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `input` | [components.SpeechInput](../components/speechinput.mdx) | ✅ | Text to synthesize, or a list of turns for multi-speaker input. Each turn has its own text, voice, and instructions. Multi-speaker input is supported by Gemini TTS models and by Fish Audio models other than S1. | Hello world |
-| `input_references` | List[[components.SpeechInputReference](../components/speechinputreference.mdx)] | ➖ | Reference content for stateless voice cloning or voice design. Audio mode: one to three `input_audio` parts, each optionally paired with a `text` part carrying its transcript (a single clip accepts its transcript before or after it; with multiple clips each transcript immediately follows its clip); only routed to endpoints that support voice cloning (and multiple references when more than one part is sent). Image mode: exactly one `image_url` part; only routed to endpoints that support image references. The two modes cannot be mixed. An empty array is treated as no reference. | [
\{
"input_audio": \{
"data": "data:audio/wav;base64,UklGRuQXDABXQVZF..."
},
"type": "input_audio"
},
\{
"text": "I used to rule the world.",
"type": "text"
}
] |
-| `instructions` | *Optional[str]* | ➖ | Delivery instructions for the whole request, such as tone, pacing, or emotion. Supported by OpenAI gpt-4o-mini-tts, Gemini TTS, and Fish Audio models. Ignored by other providers. | Speak in a warm and friendly tone. |
-| `model` | *str* | ✅ | TTS model identifier | mistralai/voxtral-mini-tts-2603 |
-| `provider` | [Optional[components.SpeechRequestProvider]](../components/speechrequestprovider.mdx) | ➖ | Provider configuration: data policy routing preferences (`zdr`, `data_collection`) and provider-specific passthrough options | |
-| `response_format` | [Optional[components.SpeechRequestResponseFormat]](../components/speechrequestresponseformat.mdx) | ➖ | Audio output format | pcm |
-| `session_id` | *Optional[str]* | ➖ | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). Used for observability grouping in Broadcast and private logging; never sent to the provider. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters. | session-1234 |
-| `speed` | *Optional[float]* | ➖ | Playback speed multiplier. Honored by models that support it (e.g. OpenAI TTS). Other providers either ignore it or return a 400 for a non-default value when the model has no speed control. | 1 |
-| `trace` | [Optional[components.TraceConfig]](../components/traceconfig.mdx) | ➖ | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | \{
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} |
-| `user` | *Optional[str]* | ➖ | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | user-1234 |
-| `voice` | *Optional[str]* | ➖ | Voice identifier (provider-specific). | en_paul_neutral |
\ No newline at end of file
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `input` | [components.SpeechInput](../components/speechinput.mdx) | ✅ | Text to synthesize, or a list of turns for multi-speaker input. Each turn has its own text, voice, and instructions. Multi-speaker input is supported by Gemini TTS models and by Fish Audio models other than S1. | Hello world |
+| `input_references` | List[[components.SpeechInputReference](../components/speechinputreference.mdx)] | ➖ | Reference content for stateless voice cloning or voice design. Audio mode: one to three `input_audio` parts, each optionally paired with a `text` part carrying its transcript (a single clip accepts its transcript before or after it; with multiple clips each transcript immediately follows its clip), plus at most one `image_url` part as a scene image on providers that condition the cloned voice on its setting; only routed to endpoints that support voice cloning (and multiple references or image references when those parts are sent). Image mode: exactly one `image_url` part; only routed to endpoints that support image references. An empty array is treated as no reference. | [
\{
"input_audio": \{
"data": "data:audio/wav;base64,UklGRuQXDABXQVZF..."
},
"type": "input_audio"
},
\{
"text": "I used to rule the world.",
"type": "text"
}
] |
+| `instructions` | *Optional[str]* | ➖ | Delivery instructions for the whole request, such as tone, pacing, or emotion. Supported by OpenAI gpt-4o-mini-tts, Gemini TTS, and Fish Audio models. Ignored by other providers. | Speak in a warm and friendly tone. |
+| `model` | *str* | ✅ | TTS model identifier | mistralai/voxtral-mini-tts-2603 |
+| `provider` | [Optional[components.SpeechRequestProvider]](../components/speechrequestprovider.mdx) | ➖ | Provider configuration: data policy routing preferences (`zdr`, `data_collection`) and provider-specific passthrough options | |
+| `response_format` | [Optional[components.SpeechRequestResponseFormat]](../components/speechrequestresponseformat.mdx) | ➖ | Audio output format | pcm |
+| `session_id` | *Optional[str]* | ➖ | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). Used for observability grouping in Broadcast and private logging; never sent to the provider. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters. | session-1234 |
+| `speed` | *Optional[float]* | ➖ | Playback speed multiplier. Honored by models that support it (e.g. OpenAI TTS). Other providers either ignore it or return a 400 for a non-default value when the model has no speed control. | 1 |
+| `trace` | [Optional[components.TraceConfig]](../components/traceconfig.mdx) | ➖ | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | \{
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} |
+| `user` | *Optional[str]* | ➖ | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | user-1234 |
+| `voice` | *Optional[str]* | ➖ | Voice identifier (provider-specific). | en_paul_neutral |
\ No newline at end of file
diff --git a/docs/sdks/tts/README.mdx b/docs/sdks/tts/README.mdx
index c0773b0b..f8551332 100644
--- a/docs/sdks/tts/README.mdx
+++ b/docs/sdks/tts/README.mdx
@@ -38,23 +38,23 @@ with OpenRouter(
### Parameters
-| Parameter | Type | Required | Description | Example |
-| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `input` | [components.SpeechInput](../../components/speechinput.mdx) | ✅ | Text to synthesize, or a list of turns for multi-speaker input. Each turn has its own text, voice, and instructions. Multi-speaker input is supported by Gemini TTS models and by Fish Audio models other than S1. | Hello world |
-| `model` | *str* | ✅ | TTS model identifier | mistralai/voxtral-mini-tts-2603 |
-| `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.
| |
-| `input_references` | List[[components.SpeechInputReference](../../components/speechinputreference.mdx)] | ➖ | Reference content for stateless voice cloning or voice design. Audio mode: one to three `input_audio` parts, each optionally paired with a `text` part carrying its transcript (a single clip accepts its transcript before or after it; with multiple clips each transcript immediately follows its clip); only routed to endpoints that support voice cloning (and multiple references when more than one part is sent). Image mode: exactly one `image_url` part; only routed to endpoints that support image references. The two modes cannot be mixed. An empty array is treated as no reference. | [
\{
"input_audio": \{
"data": "data:audio/wav;base64,UklGRuQXDABXQVZF..."
},
"type": "input_audio"
},
\{
"text": "I used to rule the world.",
"type": "text"
}
] |
-| `instructions` | *Optional[str]* | ➖ | Delivery instructions for the whole request, such as tone, pacing, or emotion. Supported by OpenAI gpt-4o-mini-tts, Gemini TTS, and Fish Audio models. Ignored by other providers. | Speak in a warm and friendly tone. |
-| `provider` | [Optional[components.SpeechRequestProvider]](../../components/speechrequestprovider.mdx) | ➖ | Provider configuration: data policy routing preferences (`zdr`, `data_collection`) and provider-specific passthrough options | |
-| `response_format` | [Optional[components.SpeechRequestResponseFormat]](../../components/speechrequestresponseformat.mdx) | ➖ | Audio output format | pcm |
-| `session_id` | *Optional[str]* | ➖ | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). Used for observability grouping in Broadcast and private logging; never sent to the provider. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters. | session-1234 |
-| `speed` | *Optional[float]* | ➖ | Playback speed multiplier. Honored by models that support it (e.g. OpenAI TTS). Other providers either ignore it or return a 400 for a non-default value when the model has no speed control. | 1 |
-| `trace` | [Optional[components.TraceConfig]](../../components/traceconfig.mdx) | ➖ | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | \{
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} |
-| `user` | *Optional[str]* | ➖ | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | user-1234 |
-| `voice` | *Optional[str]* | ➖ | Voice identifier (provider-specific). | en_paul_neutral |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | |
+| Parameter | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `input` | [components.SpeechInput](../../components/speechinput.mdx) | ✅ | Text to synthesize, or a list of turns for multi-speaker input. Each turn has its own text, voice, and instructions. Multi-speaker input is supported by Gemini TTS models and by Fish Audio models other than S1. | Hello world |
+| `model` | *str* | ✅ | TTS model identifier | mistralai/voxtral-mini-tts-2603 |
+| `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.
| |
+| `input_references` | List[[components.SpeechInputReference](../../components/speechinputreference.mdx)] | ➖ | Reference content for stateless voice cloning or voice design. Audio mode: one to three `input_audio` parts, each optionally paired with a `text` part carrying its transcript (a single clip accepts its transcript before or after it; with multiple clips each transcript immediately follows its clip), plus at most one `image_url` part as a scene image on providers that condition the cloned voice on its setting; only routed to endpoints that support voice cloning (and multiple references or image references when those parts are sent). Image mode: exactly one `image_url` part; only routed to endpoints that support image references. An empty array is treated as no reference. | [
\{
"input_audio": \{
"data": "data:audio/wav;base64,UklGRuQXDABXQVZF..."
},
"type": "input_audio"
},
\{
"text": "I used to rule the world.",
"type": "text"
}
] |
+| `instructions` | *Optional[str]* | ➖ | Delivery instructions for the whole request, such as tone, pacing, or emotion. Supported by OpenAI gpt-4o-mini-tts, Gemini TTS, and Fish Audio models. Ignored by other providers. | Speak in a warm and friendly tone. |
+| `provider` | [Optional[components.SpeechRequestProvider]](../../components/speechrequestprovider.mdx) | ➖ | Provider configuration: data policy routing preferences (`zdr`, `data_collection`) and provider-specific passthrough options | |
+| `response_format` | [Optional[components.SpeechRequestResponseFormat]](../../components/speechrequestresponseformat.mdx) | ➖ | Audio output format | pcm |
+| `session_id` | *Optional[str]* | ➖ | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). Used for observability grouping in Broadcast and private logging; never sent to the provider. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters. | session-1234 |
+| `speed` | *Optional[float]* | ➖ | Playback speed multiplier. Honored by models that support it (e.g. OpenAI TTS). Other providers either ignore it or return a 400 for a non-default value when the model has no speed control. | 1 |
+| `trace` | [Optional[components.TraceConfig]](../../components/traceconfig.mdx) | ➖ | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | \{
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} |
+| `user` | *Optional[str]* | ➖ | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | user-1234 |
+| `voice` | *Optional[str]* | ➖ | Voice identifier (provider-specific). | en_paul_neutral |
+| `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 96d4e82b..bb0535ad 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "openrouter"
-version = "1.3.60"
+version = "1.3.61"
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 2b781054..c9465116 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.60"
+__version__: str = "1.3.61"
__openapi_doc_version__: str = "1.0.0"
__gen_version__: str = "2.914.0"
-__user_agent__: str = "speakeasy-sdk/python 1.3.60 2.914.0 1.0.0 openrouter"
+__user_agent__: str = "speakeasy-sdk/python 1.3.61 2.914.0 1.0.0 openrouter"
try:
if __package__ is not None:
diff --git a/src/openrouter/components/speechinputreferenceimage.py b/src/openrouter/components/speechinputreferenceimage.py
index 6129f2f1..b3f79479 100644
--- a/src/openrouter/components/speechinputreferenceimage.py
+++ b/src/openrouter/components/speechinputreferenceimage.py
@@ -14,7 +14,7 @@
class SpeechInputReferenceImageTypedDict(TypedDict):
- r"""Reference image describing the desired voice. Cannot be combined with `input_audio` parts. Only routed to endpoints that support image references."""
+ r"""Reference image. On its own it describes the desired voice (voice design); alongside an `input_audio` part it is a scene image describing the setting the cloned voice speaks in. At most one per request. Only routed to endpoints that support image references."""
image_url: SpeechInputReferenceImageInputTypedDict
r"""Reference image input object"""
@@ -22,7 +22,7 @@ class SpeechInputReferenceImageTypedDict(TypedDict):
class SpeechInputReferenceImage(BaseModel):
- r"""Reference image describing the desired voice. Cannot be combined with `input_audio` parts. Only routed to endpoints that support image references."""
+ r"""Reference image. On its own it describes the desired voice (voice design); alongside an `input_audio` part it is a scene image describing the setting the cloned voice speaks in. At most one per request. Only routed to endpoints that support image references."""
image_url: SpeechInputReferenceImageInput
r"""Reference image input object"""
diff --git a/src/openrouter/components/speechrequest.py b/src/openrouter/components/speechrequest.py
index ea07e401..ebd87198 100644
--- a/src/openrouter/components/speechrequest.py
+++ b/src/openrouter/components/speechrequest.py
@@ -107,7 +107,7 @@ class SpeechRequestTypedDict(TypedDict):
model: str
r"""TTS model identifier"""
input_references: NotRequired[List[SpeechInputReferenceTypedDict]]
- r"""Reference content for stateless voice cloning or voice design. Audio mode: one to three `input_audio` parts, each optionally paired with a `text` part carrying its transcript (a single clip accepts its transcript before or after it; with multiple clips each transcript immediately follows its clip); only routed to endpoints that support voice cloning (and multiple references when more than one part is sent). Image mode: exactly one `image_url` part; only routed to endpoints that support image references. The two modes cannot be mixed. An empty array is treated as no reference."""
+ r"""Reference content for stateless voice cloning or voice design. Audio mode: one to three `input_audio` parts, each optionally paired with a `text` part carrying its transcript (a single clip accepts its transcript before or after it; with multiple clips each transcript immediately follows its clip), plus at most one `image_url` part as a scene image on providers that condition the cloned voice on its setting; only routed to endpoints that support voice cloning (and multiple references or image references when those parts are sent). Image mode: exactly one `image_url` part; only routed to endpoints that support image references. An empty array is treated as no reference."""
instructions: NotRequired[str]
r"""Delivery instructions for the whole request, such as tone, pacing, or emotion. Supported by OpenAI gpt-4o-mini-tts, Gemini TTS, and Fish Audio models. Ignored by other providers."""
provider: NotRequired[SpeechRequestProviderTypedDict]
@@ -136,7 +136,7 @@ class SpeechRequest(BaseModel):
r"""TTS model identifier"""
input_references: Optional[List[SpeechInputReference]] = None
- r"""Reference content for stateless voice cloning or voice design. Audio mode: one to three `input_audio` parts, each optionally paired with a `text` part carrying its transcript (a single clip accepts its transcript before or after it; with multiple clips each transcript immediately follows its clip); only routed to endpoints that support voice cloning (and multiple references when more than one part is sent). Image mode: exactly one `image_url` part; only routed to endpoints that support image references. The two modes cannot be mixed. An empty array is treated as no reference."""
+ r"""Reference content for stateless voice cloning or voice design. Audio mode: one to three `input_audio` parts, each optionally paired with a `text` part carrying its transcript (a single clip accepts its transcript before or after it; with multiple clips each transcript immediately follows its clip), plus at most one `image_url` part as a scene image on providers that condition the cloned voice on its setting; only routed to endpoints that support voice cloning (and multiple references or image references when those parts are sent). Image mode: exactly one `image_url` part; only routed to endpoints that support image references. An empty array is treated as no reference."""
instructions: Optional[str] = None
r"""Delivery instructions for the whole request, such as tone, pacing, or emotion. Supported by OpenAI gpt-4o-mini-tts, Gemini TTS, and Fish Audio models. Ignored by other providers."""
diff --git a/src/openrouter/tts.py b/src/openrouter/tts.py
index 001335f1..7f6f87ca 100644
--- a/src/openrouter/tts.py
+++ b/src/openrouter/tts.py
@@ -60,7 +60,7 @@ def create_speech(
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
- :param input_references: Reference content for stateless voice cloning or voice design. Audio mode: one to three `input_audio` parts, each optionally paired with a `text` part carrying its transcript (a single clip accepts its transcript before or after it; with multiple clips each transcript immediately follows its clip); only routed to endpoints that support voice cloning (and multiple references when more than one part is sent). Image mode: exactly one `image_url` part; only routed to endpoints that support image references. The two modes cannot be mixed. An empty array is treated as no reference.
+ :param input_references: Reference content for stateless voice cloning or voice design. Audio mode: one to three `input_audio` parts, each optionally paired with a `text` part carrying its transcript (a single clip accepts its transcript before or after it; with multiple clips each transcript immediately follows its clip), plus at most one `image_url` part as a scene image on providers that condition the cloned voice on its setting; only routed to endpoints that support voice cloning (and multiple references or image references when those parts are sent). Image mode: exactly one `image_url` part; only routed to endpoints that support image references. An empty array is treated as no reference.
:param instructions: Delivery instructions for the whole request, such as tone, pacing, or emotion. Supported by OpenAI gpt-4o-mini-tts, Gemini TTS, and Fish Audio models. Ignored by other providers.
:param provider: Provider configuration: data policy routing preferences (`zdr`, `data_collection`) and provider-specific passthrough options
:param response_format: Audio output format
@@ -316,7 +316,7 @@ async def create_speech_async(
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
- :param input_references: Reference content for stateless voice cloning or voice design. Audio mode: one to three `input_audio` parts, each optionally paired with a `text` part carrying its transcript (a single clip accepts its transcript before or after it; with multiple clips each transcript immediately follows its clip); only routed to endpoints that support voice cloning (and multiple references when more than one part is sent). Image mode: exactly one `image_url` part; only routed to endpoints that support image references. The two modes cannot be mixed. An empty array is treated as no reference.
+ :param input_references: Reference content for stateless voice cloning or voice design. Audio mode: one to three `input_audio` parts, each optionally paired with a `text` part carrying its transcript (a single clip accepts its transcript before or after it; with multiple clips each transcript immediately follows its clip), plus at most one `image_url` part as a scene image on providers that condition the cloned voice on its setting; only routed to endpoints that support voice cloning (and multiple references or image references when those parts are sent). Image mode: exactly one `image_url` part; only routed to endpoints that support image references. An empty array is treated as no reference.
:param instructions: Delivery instructions for the whole request, such as tone, pacing, or emotion. Supported by OpenAI gpt-4o-mini-tts, Gemini TTS, and Fish Audio models. Ignored by other providers.
:param provider: Provider configuration: data policy routing preferences (`zdr`, `data_collection`) and provider-specific passthrough options
:param response_format: Audio output format
diff --git a/uv.lock b/uv.lock
index 5bd29657..aaebd136 100644
--- a/uv.lock
+++ b/uv.lock
@@ -213,7 +213,7 @@ wheels = [
[[package]]
name = "openrouter"
-version = "1.3.60"
+version = "1.3.61"
source = { editable = "." }
dependencies = [
{ name = "httpcore" },