detektu
DigitalOcean API changes
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 ↗

−1+1421 change

1 / 1
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.