InfoPreview
Endpoint added: POST /v1/audio/speech
openapi:POST /v1/audio/speech::operation.endpoint-added- Product
- DigitalOcean API
- Source
- OpenAPI URL
- Change kind
- Endpoint Added
- Detected
- Last updated
Deterministic evidence
Before / after
Extracted from DigitalOcean's published contract. Shows the whole operation — a narrower excerpt was not available for this change. Open the source ↗
null
{
"operationId": "inference_create_speech",
"requestBody": {
"content": {
"application/json": {
"schema": {
"properties": {
"input": {
"minLength": 1,
"type": "string"
},
"instructions": {
"type": "string"
},
"model": {
"type": "string"
},
"response_format": {
"type": "string"
},
"voice": {
"type": "string"
}
},
"required": [
"model",
"input"
],
"type": "object"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"properties": {
"created": {
"type": "integer"
},
"data": {
"items": {
"properties": {
"b64_json": {
"type": "string"
}
},
"required": [
"b64_json"
],
"type": "object"
},
"minItems": 1,
"type": "array"
}
},
"required": [
"data"
],
"type": "object"
}
},
"audio/mp3": {
"schema": {
"format": "binary",
"type": "string"
}
},
"audio/mpeg": {
"schema": {
"format": "binary",
"type": "string"
}
},
"audio/wav": {
"schema": {
"format": "binary",
"type": "string"
}
}
},
"headers": {
"ratelimit-limit": {
"$ref": "#/components/headers/ratelimit-limit"
},
"ratelimit-remaining": {
"$ref": "#/components/headers/ratelimit-remaining"
},
"ratelimit-reset": {
"$ref": "#/components/headers/ratelimit-reset"
}
}
},
"401": {
"$ref": "#/components/responses/unauthorized"
},
"429": {
"$ref": "#/components/responses/too_many_requests"
},
"500": {
"$ref": "#/components/responses/server_error"
},
"default": {
"$ref": "#/components/responses/unexpected_error"
}
},
"security": [
{
"inference_bearer_auth": []
}
],
"servers": [
{
"url": "https://inference.do-ai.run"
}
],
"tags": [
"Serverless Inference"
],
"x-codeSamples": [
{
"lang": "cURL",
"source": "curl -sS https://inference.do-ai.run/v1/audio/speech \\\n -H \"Authorization: Bearer $DIGITALOCEAN_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"model\": \"qwen3-tts-voicedesign\",\n \"input\": \"Hello, world!\",\n \"voice\": \"alloy\",\n \"response_format\": \"mp3\",\n \"instructions\": \"Speak naturally.\"\n }' \\\n --output output.mp3"
},
{
"lang": "Python",
"source": "import base64\nimport os\nfrom pydo.inference import Client\n\nclient = Client(token=os.environ.get(\"DIGITALOCEAN_TOKEN\"))\n\nresponse = client.audio.speech.create(\n model=\"qwen3-tts-voicedesign\",\n input=\"Hello, world!\",\n voice=\"alloy\",\n response_format=\"mp3\",\n instructions=\"Speak naturally.\",\n)\n\naudio_bytes = base64.b64decode(response.data[0].b64_json)\nwith open(\"output.mp3\", \"wb\") as f:\n f.write(audio_bytes)"
},
{
"lang": "Go",
"source": "package main\n\nimport (\n \"context\"\n \"fmt\"\n \"os\"\n\n \"github.com/digitalocean/godo\"\n)\n\nfunc main() {\n client := godo.NewFromToken(os.Getenv(\"DIGITALOCEAN_TOKEN\"))\n ctx := context.Background()\n\n speech, _, err := client.Audio.Speech.New(ctx, &godo.SpeechNewParams{\n Model: \"qwen3-tts-voicedesign\",\n Input: \"Hello, world!\",\n Voice: \"alloy\",\n ResponseFormat: \"mp3\",\n Instructions: \"Speak naturally.\",\n })\n if err != nil {\n panic(err)\n }\n\n audioBytes, err := speech.Bytes()\n if err != nil {\n panic(err)\n }\n if err := os.WriteFile(\"output.mp3\", audioBytes, 0644); err != nil {\n panic(err)\n }\n fmt.Println(\"Wrote output.mp3\")\n}"
},
{
"lang": "JavaScript",
"source": "import { writeFileSync } from \"fs\";\nimport { InferenceClient } from \"@digitalocean/dots\";\n\nconst client = new InferenceClient({\n apiKey: process.env.DIGITALOCEAN_TOKEN,\n});\n\nconst response = await client.audio.speech.create({\n model: \"qwen3-tts-voicedesign\",\n input: \"Hello, world!\",\n voice: \"alloy\",\n response_format: \"mp3\",\n instructions: \"Speak naturally.\",\n});\n\nconst audioBytes = Buffer.from(response.data[0].b64_json, \"base64\");\nwriteFileSync(\"output.mp3\", audioBytes);"
}
],
"x-inference-base-url": "https://inference.do-ai.run"
}
Monitored for you
Does this change affect your integration?
Choose the operations and fields your services use. Detektu matches DigitalOcean findings to that declared usage so your team can review the relevant evidence. No agent or repository access required.