{"id":"269b3268-341a-4e41-8cca-26b5e63c0c06","entityType":"agent","slug":"clawhub-devcsde-oatda-generate-speech","name":"OATDA Generate Speech","canonicalUrl":"https://www.xpersona.co/agent/clawhub-devcsde-oatda-generate-speech","canonicalPath":"/agent/clawhub-devcsde-oatda-generate-speech","generatedAt":"2026-10-11T10:49:29.632Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T06:42:21.711Z","emptyReason":null},"description":"Generate speech or audio from text using OATDA's unified audio API. Triggers when the user wants to convert text to speech, create narration, voiceovers, acc... Skill: OATDA Generate Speech Owner: devcsde Summary: Generate speech or audio from text using OATDA's unified audio API. Triggers when the user wants to convert text to speech, create narration, voiceovers, acc... Tags: latest:1.1.0 Version history: v1.1.0 | 2026-07-17T23:20:42.873Z | user Remove deprecated tts-1/tts-1-hd model references. Replace static model table with list_models guidance. Broaden description to a","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s1715k9c0vyqryjet8h0ek3xc58447z6:oatda-generate-speech","sourceUrl":"https://clawhub.ai/devcsde/oatda-generate-speech","homepage":"https://clawhub.ai/devcsde/skills/oatda-generate-speech","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/devcsde/oatda-generate-speech","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/devcsde/skills/oatda-generate-speech","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Generate speech or audio from text using OATDA's unified audio API. Triggers when the user wants to convert text to speech, create narration, voiceovers, acc..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T06:42:21.711Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T06:42:21.711Z","emptyReason":null},"stars":null,"forks":null,"downloads":1131,"packageName":null,"latestVersion":"1.1.0","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T06:42:21.650Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T06:42:21.711Z","lastCrawledAt":"2026-10-11T06:42:21.650Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T06:42:21.650Z","lastVerifiedAt":null,"highlights":[{"version":"1.1.0","createdAt":"2026-07-17T23:20:42.873Z","changelog":"Remove deprecated tts-1/tts-1-hd model references. Replace static model table with list_models guidance. Broaden description to all TTS providers.","fileCount":3,"zipByteSize":3600},{"version":"1.0.3","createdAt":"2026-07-17T23:13:44.549Z","changelog":"- Expanded description to highlight support for multiple providers (OpenAI, xAI Grok, Google Gemini) and broader TTS applications. - Model selection flow now requires always calling `oatda-list-models` to confirm supported models, parameters, and voices. - Dropped static model mapping table; users are now guided to dynamically resolve model/voice support. - Clarified that if no model is specified, the skill should prompt or offer the current available TTS models. - Removed the skill-card.md file for simpler packaging.","fileCount":3,"zipByteSize":3804},{"version":"1.0.2","createdAt":"2026-07-17T23:11:41.357Z","changelog":"- Broadened TTS model support to include OpenAI, xAI Grok, Google Gemini, and more, via a single API key. - Updated model selection: users should query `oatda-list-models` to determine current voice, model, and parameter options instead of relying on hardcoded mappings. - Improved documentation on model resolution and discovery, emphasizing dynamic model and voice availability. - Simplified and clarified usage examples and introductory description. - Removed sample file: `skill-card.md`.","fileCount":3,"zipByteSize":3629},{"version":"1.0.1","createdAt":"2026-04-26T18:30:42.889Z","changelog":"Fix: replaced with correct OpenClaw skill format","fileCount":3,"zipByteSize":3463},{"version":"1.0.0","createdAt":"2026-04-26T18:26:15.014Z","changelog":"Initial release: Text-to-speech via OATDA unified audio API","fileCount":2,"zipByteSize":2741}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1715k9c0vyqryjet8h0ek3xc58447z6:oatda-generate-speech","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-devcsde-oatda-generate-speech/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-devcsde-oatda-generate-speech/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-devcsde-oatda-generate-speech/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-devcsde-oatda-generate-speech/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-devcsde-oatda-generate-speech/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-devcsde-oatda-generate-speech/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T10:49:29.631Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-devcsde-oatda-generate-speech/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-devcsde-oatda-generate-speech/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-devcsde-oatda-generate-speech/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-devcsde-oatda-generate-speech/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T06:42:21.711Z","emptyReason":null},"readme":"Skill: OATDA Generate Speech\n\nOwner: devcsde\n\nSummary: Generate speech or audio from text using OATDA's unified audio API. Triggers when the user wants to convert text to speech, create narration, voiceovers, acc...\n\nTags: latest:1.1.0\n\nVersion history:\n\nv1.1.0 | 2026-07-17T23:20:42.873Z | user\n\nRemove deprecated tts-1/tts-1-hd model references. Replace static model table with list_models guidance. Broaden description to all TTS providers.\n\nv1.0.3 | 2026-07-17T23:13:44.549Z | user\n\n- Expanded description to highlight support for multiple providers (OpenAI, xAI Grok, Google Gemini) and broader TTS applications.\n- Model selection flow now requires always calling `oatda-list-models` to confirm supported models, parameters, and voices.\n- Dropped static model mapping table; users are now guided to dynamically resolve model/voice support.\n- Clarified that if no model is specified, the skill should prompt or offer the current available TTS models.\n- Removed the skill-card.md file for simpler packaging.\n\nv1.0.2 | 2026-07-17T23:11:41.357Z | user\n\n- Broadened TTS model support to include OpenAI, xAI Grok, Google Gemini, and more, via a single API key.  \n- Updated model selection: users should query `oatda-list-models` to determine current voice, model, and parameter options instead of relying on hardcoded mappings.\n- Improved documentation on model resolution and discovery, emphasizing dynamic model and voice availability.\n- Simplified and clarified usage examples and introductory description.\n- Removed sample file: `skill-card.md`.\n\nv1.0.1 | 2026-04-26T18:30:42.889Z | user\n\nFix: replaced with correct OpenClaw skill format\n\nv1.0.0 | 2026-04-26T18:26:15.014Z | user\n\nInitial release: Text-to-speech via OATDA unified audio API\n\nArchive index:\n\nArchive v1.1.0: 3 files, 3600 bytes\n\nFiles: _meta.json (140b), skill-card.md (2098b), SKILL.md (4885b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: oatda-generate-speech\ndescription: Generate speech or audio from text using OATDA's unified audio API. Triggers when the user wants to convert text to speech, create narration, voiceovers, accessibility audio, or use TTS models such as OpenAI tts-1 through OATDA.\nhomepage: https://oatda.com\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🔊\",\n        \"requires\": { \"bins\": [\"curl\", \"jq\"], \"env\": [\"OATDA_API_KEY\"], \"config\": [\"~/.oatda/credentials.json\"] },\n        \"primaryEnv\": \"OATDA_API_KEY\",\n      },\n  }\n---\n\n# OATDA Speech Generation\n\nGenerate spoken audio from text through OATDA's unified audio API.\n\n## API Key Resolution\n\nAll commands need the OATDA API key. Resolve it inline for each `exec` call:\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\"\n```\n\nIf the key is empty or `null`, tell the user to get one at https://oatda.com and configure it.\n\n**Security**: Never print the full API key. Only verify existence or show first 8 chars.\n\n## Model Mapping\n\n| User says | Provider | Model |\n|-----------|----------|-------|\n| tts, tts-1, openai tts (default) | openai | tts-1 |\n| tts hd, tts-1-hd | openai | tts-1-hd |\n| gpt tts, gpt-4o mini tts | openai | gpt-4o-mini-tts |\n\n**Default**: `openai` / `tts-1` if no model specified.\n\nIf the user provides `provider/model` format directly (for example `openai/tts-1`), split on `/`.\n\nCommon OpenAI voices include `alloy`, `ash`, `ballad`, `coral`, `echo`, `fable`, `nova`, `onyx`, `sage`, and `shimmer`. Use `alloy` if the user does not specify a voice.\n\n> ⚠️ Models change over time. If a model ID fails, query `oatda-list-models` with `?type=audio` first.\n\n## Discovering Audio Model Parameters\n\nQuery available audio models and inspect `supported_params` before sending optional fields:\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X GET \"https://oatda.com/api/v1/llm/models?type=audio\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" | jq '.audio_models[] | {id, supported_params}'\n```\n\nLook for:\n- `audio_modes` containing `tts`\n- supported `voice` values\n- allowed `response_format` values\n- optional fields like `instructions` or `language`\n\n## API Call\n\nThe speech endpoint returns **binary audio**, not JSON. Always save the response to a file.\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X POST \"https://oatda.com/api/v1/llm/speech\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" \\\n  -d '{\n    \"provider\": \"<PROVIDER>\",\n    \"model\": \"<MODEL>\",\n    \"input\": \"<TEXT_TO_SPEAK>\",\n    \"voice\": \"alloy\",\n    \"response_format\": \"mp3\",\n    \"speed\": 1.0\n  }' \\\n  --output speech.mp3\n```\n\n### Common Parameters\n\n- `input`: Text to convert to speech, max 15000 characters\n- `voice`: Voice name, e.g. `alloy`, `nova`, `shimmer`\n- `response_format`: `mp3`, `opus`, `aac`, `flac`, `wav`, `pcm`, `mulaw`, or `alaw`\n- `speed`: 0.25 to 4.0, default 1.0\n- `instructions`: Optional tone/style guidance for supported models\n- `language`: Optional language code for supported models\n\n## Success Handling\n\nIf the request succeeds, tell the user where the file was saved, for example:\n\n> Speech generated successfully: `speech.mp3`\n\nIf headers matter, use `curl -D headers.txt` while still saving the audio body with `--output`.\n\n## Error Handling\n\n| HTTP Status | Meaning | Action |\n|-------------|---------|--------|\n| 401 | Invalid API key | Tell user to check their key |\n| 402 | Insufficient credits | Tell user to check balance |\n| 400 | Bad request / model not supported | Check model format and query `oatda-list-models` with `type=audio` |\n| 429 | Rate limited or monthly cap | Wait briefly and retry once |\n| 500 | Provider error | Show the error message if returned |\n\n## Example\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X POST \"https://oatda.com/api/v1/llm/speech\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" \\\n  -d '{\n    \"provider\": \"openai\",\n    \"model\": \"tts-1\",\n    \"input\": \"Welcome to OATDA, one API to direct all.\",\n    \"voice\": \"alloy\",\n    \"response_format\": \"mp3\",\n    \"speed\": 1.0\n  }' \\\n  --output speech.mp3\n```\n\n## Notes\n\n- Endpoint: `/api/v1/llm/speech`\n- Use `input`, not `prompt`, for TTS requests\n- Always save the response with `--output`\n- Use `oatda-list-models` to discover available audio models\n- Equivalent capability name: `generate_speech`\n- Related skills: `oatda-list-models`, `oatda-transcribe-audio`, `oatda-translate-audio`\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn7anz9axpc20rkkkfarxeh589845ssw\",\n  \"slug\": \"oatda-generate-speech\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1784330442873\n}\n\nFile v1.1.0:skill-card.md\n\n## Description:\n\nGenerate speech or audio from text using OATDA's unified audio API.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[devcsde](https://clawhub.ai/user/devcsde)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, creators, and accessibility-focused users use this skill through an agent to generate spoken audio, narration, voiceovers, and other text-to-speech outputs from text with OATDA-supported providers.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The command template can mishandle arbitrary user text and may allow command injection if text is pasted directly into JSON payloads.\n\nMitigation: Build request JSON with a proper encoder such as jq --arg, validate output paths, and avoid reusing shell snippets with unsanitized user input.\n\nRisk: The skill reads an OATDA API key and sends provided text to OATDA for speech generation.\n\nMitigation: Use the skill only when that data flow is acceptable, verify credential presence without printing the full key, and avoid sending sensitive text unless authorized.\n\n## Reference(s):\n\n- [OATDA Homepage](https://oatda.com)\n- [OATDA Audio Models Endpoint](https://oatda.com/api/v1/llm/models?type=audio)\n- [OATDA Speech Endpoint](https://oatda.com/api/v1/llm/speech)\n- [ClawHub Skill Page](https://clawhub.ai/devcsde/skills/oatda-generate-speech)\n\n## Skill Output:\n\n**Output Type(s):** [Shell commands, Configuration, Guidance, Files]\n\n**Output Format:** [Markdown with bash commands and generated audio file paths]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires curl, jq, OATDA_API_KEY, and safe JSON construction for user-provided text.]\n\n## Skill Version(s):\n\n1.1.0 (source: evidence.release.version and target metadata; artifact _meta.json reports 1.0.1)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.3: 3 files, 3804 bytes\n\nFiles: skill-card.md (2678b), SKILL.md (5131b), _meta.json (140b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: oatda-generate-speech\ndescription: Text-to-speech (TTS) and AI voice generation through OATDA's unified audio API gateway. Triggers when the user wants to convert text to speech, synthesize voice, create narration, voiceovers, audiobooks, podcast audio, accessibility audio, or generate spoken audio from text. Supports OpenAI, xAI Grok, Google Gemini and other TTS models via a single API key.\nhomepage: https://oatda.com\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🔊\",\n        \"requires\": { \"bins\": [\"curl\", \"jq\"], \"env\": [\"OATDA_API_KEY\"], \"config\": [\"~/.oatda/credentials.json\"] },\n        \"primaryEnv\": \"OATDA_API_KEY\",\n      },\n  }\n---\n\n# OATDA Speech Generation\n\nGenerate spoken audio from text through OATDA's unified audio API.\n\n## API Key Resolution\n\nAll commands need the OATDA API key. Resolve it inline for each `exec` call:\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\"\n```\n\nIf the key is empty or `null`, tell the user to get one at https://oatda.com and configure it.\n\n**Security**: Never print the full API key. Only verify existence or show first 8 chars.\n\n## Model Resolution\n\n> **⚠️ Model availability changes over time.** Always call `oatda-list-models` with `?type=audio` to verify the exact model ID, available voices, and supported parameters before generating speech.\n\nIf the user provides `provider/model` format directly (for example `openai/gpt-4o-mini-tts`), split on `/`.\n\nUse the `oatda-list-models` results to determine:\n- Available voices (from `supported_params.voice.values`)\n- Supported response formats\n- Optional parameters like `language` or `instructions`\n\nIf the user does not specify a model, query `oatda-list-models` first and offer a choice from the currently available TTS models.\n\n## Discovering Audio Model Parameters\n\nQuery available audio models and inspect `supported_params` before sending optional fields:\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X GET \"https://oatda.com/api/v1/llm/models?type=audio\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" | jq '.audio_models[] | {id, supported_params}'\n```\n\nLook for:\n- `audio_modes` containing `tts`\n- supported `voice` values\n- allowed `response_format` values\n- optional fields like `instructions` or `language`\n\n## API Call\n\nThe speech endpoint returns **binary audio**, not JSON. Always save the response to a file.\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X POST \"https://oatda.com/api/v1/llm/speech\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" \\\n  -d '{\n    \"provider\": \"<PROVIDER>\",\n    \"model\": \"<MODEL>\",\n    \"input\": \"<TEXT_TO_SPEAK>\",\n    \"voice\": \"alloy\",\n    \"response_format\": \"mp3\",\n    \"speed\": 1.0\n  }' \\\n  --output speech.mp3\n```\n\n### Common Parameters\n\n- `input`: Text to convert to speech, max 15000 characters\n- `voice`: Voice name, e.g. `alloy`, `nova`, `shimmer`\n- `response_format`: `mp3`, `opus`, `aac`, `flac`, `wav`, `pcm`, `mulaw`, or `alaw`\n- `speed`: 0.25 to 4.0, default 1.0\n- `instructions`: Optional tone/style guidance for supported models\n- `language`: Optional language code for supported models\n\n## Success Handling\n\nIf the request succeeds, tell the user where the file was saved, for example:\n\n> Speech generated successfully: `speech.mp3`\n\nIf headers matter, use `curl -D headers.txt` while still saving the audio body with `--output`.\n\n## Error Handling\n\n| HTTP Status | Meaning | Action |\n|-------------|---------|--------|\n| 401 | Invalid API key | Tell user to check their key |\n| 402 | Insufficient credits | Tell user to check balance |\n| 400 | Bad request / model not supported | Check model format and query `oatda-list-models` with `type=audio` |\n| 429 | Rate limited or monthly cap | Wait briefly and retry once |\n| 500 | Provider error | Show the error message if returned |\n\n## Example\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X POST \"https://oatda.com/api/v1/llm/speech\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" \\\n  -d '{\n    \"provider\": \"openai\",\n    \"model\": \"gpt-4o-mini-tts\",\n    \"input\": \"Welcome to OATDA, one API to direct all.\",\n    \"voice\": \"alloy\",\n    \"response_format\": \"mp3\",\n    \"speed\": 1.0\n  }' \\\n  --output speech.mp3\n```\n\n> **Note:** The model ID above is an example. Always verify the current model ID via `oatda-list-models` before use.\n\n## Notes\n\n- Endpoint: `/api/v1/llm/speech`\n- Use `input`, not `prompt`, for TTS requests\n- Always save the response with `--output`\n- Use `oatda-list-models` to discover available audio models\n- Equivalent capability name: `generate_speech`\n- Related skills: `oatda-list-models`, `oatda-transcribe-audio`, `oatda-translate-audio`\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn7anz9axpc20rkkkfarxeh589845ssw\",\n  \"slug\": \"oatda-generate-speech\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1784330024549\n}\n\nFile v1.0.3:skill-card.md\n\n## Description: <br>\nText-to-speech (TTS) and AI voice generation through OATDA's unified audio API gateway for converting text into spoken audio with supported provider models. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[devcsde](https://clawhub.ai/user/devcsde) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to generate narration, voiceovers, accessibility audio, podcast audio, audiobook audio, and other spoken output from text through OATDA's audio API. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Text submitted for speech generation is sent to OATDA and may include sensitive or regulated content. <br>\nMitigation: Use the skill only for content appropriate for OATDA processing, and avoid private or regulated text unless OATDA's data handling terms meet the user's requirements. <br>\nRisk: The skill depends on an OATDA API key that could be exposed in logs or output. <br>\nMitigation: Do not print the full API key; only confirm that a key exists or show a short prefix when needed. <br>\nRisk: Available audio models, voices, and supported parameters can change over time. <br>\nMitigation: Query the audio model list before generating speech and use only the currently reported model IDs, voices, and parameters. <br>\nRisk: The speech endpoint returns binary audio rather than JSON. <br>\nMitigation: Always save responses to a local output file and inspect errors separately when requests fail. <br>\n\n\n## Reference(s): <br>\n- [OATDA homepage](https://oatda.com) <br>\n- [OATDA audio models endpoint](https://oatda.com/api/v1/llm/models?type=audio) <br>\n- [OATDA speech endpoint](https://oatda.com/api/v1/llm/speech) <br>\n- [ClawHub skill page](https://clawhub.ai/devcsde/skills/oatda-generate-speech) <br>\n- [devcsde publisher profile](https://clawhub.ai/user/devcsde) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance, audio files] <br>\n**Output Format:** [Markdown guidance with inline bash commands and local audio file paths] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires OATDA_API_KEY and saves binary audio responses locally, such as MP3 or WAV files.] <br>\n\n## Skill Version(s): <br>\n1.0.3 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.2: 3 files, 3629 bytes\n\nFiles: skill-card.md (2208b), SKILL.md (5131b), _meta.json (140b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: oatda-generate-speech\ndescription: Text-to-speech (TTS) and AI voice generation through OATDA's unified audio API gateway. Triggers when the user wants to convert text to speech, synthesize voice, create narration, voiceovers, audiobooks, podcast audio, accessibility audio, or generate spoken audio from text. Supports OpenAI, xAI Grok, Google Gemini and other TTS models via a single API key.\nhomepage: https://oatda.com\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🔊\",\n        \"requires\": { \"bins\": [\"curl\", \"jq\"], \"env\": [\"OATDA_API_KEY\"], \"config\": [\"~/.oatda/credentials.json\"] },\n        \"primaryEnv\": \"OATDA_API_KEY\",\n      },\n  }\n---\n\n# OATDA Speech Generation\n\nGenerate spoken audio from text through OATDA's unified audio API.\n\n## API Key Resolution\n\nAll commands need the OATDA API key. Resolve it inline for each `exec` call:\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\"\n```\n\nIf the key is empty or `null`, tell the user to get one at https://oatda.com and configure it.\n\n**Security**: Never print the full API key. Only verify existence or show first 8 chars.\n\n## Model Resolution\n\n> **⚠️ Model availability changes over time.** Always call `oatda-list-models` with `?type=audio` to verify the exact model ID, available voices, and supported parameters before generating speech.\n\nIf the user provides `provider/model` format directly (for example `openai/gpt-4o-mini-tts`), split on `/`.\n\nUse the `oatda-list-models` results to determine:\n- Available voices (from `supported_params.voice.values`)\n- Supported response formats\n- Optional parameters like `language` or `instructions`\n\nIf the user does not specify a model, query `oatda-list-models` first and offer a choice from the currently available TTS models.\n\n## Discovering Audio Model Parameters\n\nQuery available audio models and inspect `supported_params` before sending optional fields:\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X GET \"https://oatda.com/api/v1/llm/models?type=audio\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" | jq '.audio_models[] | {id, supported_params}'\n```\n\nLook for:\n- `audio_modes` containing `tts`\n- supported `voice` values\n- allowed `response_format` values\n- optional fields like `instructions` or `language`\n\n## API Call\n\nThe speech endpoint returns **binary audio**, not JSON. Always save the response to a file.\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X POST \"https://oatda.com/api/v1/llm/speech\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" \\\n  -d '{\n    \"provider\": \"<PROVIDER>\",\n    \"model\": \"<MODEL>\",\n    \"input\": \"<TEXT_TO_SPEAK>\",\n    \"voice\": \"alloy\",\n    \"response_format\": \"mp3\",\n    \"speed\": 1.0\n  }' \\\n  --output speech.mp3\n```\n\n### Common Parameters\n\n- `input`: Text to convert to speech, max 15000 characters\n- `voice`: Voice name, e.g. `alloy`, `nova`, `shimmer`\n- `response_format`: `mp3`, `opus`, `aac`, `flac`, `wav`, `pcm`, `mulaw`, or `alaw`\n- `speed`: 0.25 to 4.0, default 1.0\n- `instructions`: Optional tone/style guidance for supported models\n- `language`: Optional language code for supported models\n\n## Success Handling\n\nIf the request succeeds, tell the user where the file was saved, for example:\n\n> Speech generated successfully: `speech.mp3`\n\nIf headers matter, use `curl -D headers.txt` while still saving the audio body with `--output`.\n\n## Error Handling\n\n| HTTP Status | Meaning | Action |\n|-------------|---------|--------|\n| 401 | Invalid API key | Tell user to check their key |\n| 402 | Insufficient credits | Tell user to check balance |\n| 400 | Bad request / model not supported | Check model format and query `oatda-list-models` with `type=audio` |\n| 429 | Rate limited or monthly cap | Wait briefly and retry once |\n| 500 | Provider error | Show the error message if returned |\n\n## Example\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X POST \"https://oatda.com/api/v1/llm/speech\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" \\\n  -d '{\n    \"provider\": \"openai\",\n    \"model\": \"gpt-4o-mini-tts\",\n    \"input\": \"Welcome to OATDA, one API to direct all.\",\n    \"voice\": \"alloy\",\n    \"response_format\": \"mp3\",\n    \"speed\": 1.0\n  }' \\\n  --output speech.mp3\n```\n\n> **Note:** The model ID above is an example. Always verify the current model ID via `oatda-list-models` before use.\n\n## Notes\n\n- Endpoint: `/api/v1/llm/speech`\n- Use `input`, not `prompt`, for TTS requests\n- Always save the response with `--output`\n- Use `oatda-list-models` to discover available audio models\n- Equivalent capability name: `generate_speech`\n- Related skills: `oatda-list-models`, `oatda-transcribe-audio`, `oatda-translate-audio`\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn7anz9axpc20rkkkfarxeh589845ssw\",\n  \"slug\": \"oatda-generate-speech\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1784329901357\n}\n\nFile v1.0.2:skill-card.md\n\n## Description: <br>\nText-to-speech (TTS) and AI voice generation through OATDA's unified audio API gateway. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[devcsde](https://clawhub.ai/user/devcsde) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agent users use this skill to convert text into spoken audio for narration, voiceovers, audiobooks, podcast audio, and accessibility workflows through OATDA. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Text submitted for speech generation is sent to OATDA and may be processed by the selected audio provider. <br>\nMitigation: Avoid sensitive text unless the user's OATDA account, provider choice, and data-handling requirements are appropriate for that content. <br>\nRisk: The skill requires an OATDA API key. <br>\nMitigation: Keep the key in an environment variable or configured credentials file and do not print the full key in logs or responses. <br>\nRisk: Generated speech is saved as a local audio file. <br>\nMitigation: Choose output paths intentionally and review files before sharing or relying on them. <br>\n\n\n## Reference(s): <br>\n- [OATDA](https://oatda.com) <br>\n- [OATDA audio model discovery endpoint](https://oatda.com/api/v1/llm/models?type=audio) <br>\n- [OATDA speech generation endpoint](https://oatda.com/api/v1/llm/speech) <br>\n- [ClawHub skill page](https://clawhub.ai/devcsde/skills/oatda-generate-speech) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with inline bash and JSON examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Guides agents to save binary speech output as a local audio file and report the saved path.] <br>\n\n## Skill Version(s): <br>\n1.0.2 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.1: 3 files, 3463 bytes\n\nFiles: skill-card.md (1949b), SKILL.md (4885b), _meta.json (140b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: oatda-generate-speech\ndescription: Generate speech or audio from text using OATDA's unified audio API. Triggers when the user wants to convert text to speech, create narration, voiceovers, accessibility audio, or use TTS models such as OpenAI tts-1 through OATDA.\nhomepage: https://oatda.com\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🔊\",\n        \"requires\": { \"bins\": [\"curl\", \"jq\"], \"env\": [\"OATDA_API_KEY\"], \"config\": [\"~/.oatda/credentials.json\"] },\n        \"primaryEnv\": \"OATDA_API_KEY\",\n      },\n  }\n---\n\n# OATDA Speech Generation\n\nGenerate spoken audio from text through OATDA's unified audio API.\n\n## API Key Resolution\n\nAll commands need the OATDA API key. Resolve it inline for each `exec` call:\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\"\n```\n\nIf the key is empty or `null`, tell the user to get one at https://oatda.com and configure it.\n\n**Security**: Never print the full API key. Only verify existence or show first 8 chars.\n\n## Model Mapping\n\n| User says | Provider | Model |\n|-----------|----------|-------|\n| tts, tts-1, openai tts (default) | openai | tts-1 |\n| tts hd, tts-1-hd | openai | tts-1-hd |\n| gpt tts, gpt-4o mini tts | openai | gpt-4o-mini-tts |\n\n**Default**: `openai` / `tts-1` if no model specified.\n\nIf the user provides `provider/model` format directly (for example `openai/tts-1`), split on `/`.\n\nCommon OpenAI voices include `alloy`, `ash`, `ballad`, `coral`, `echo`, `fable`, `nova`, `onyx`, `sage`, and `shimmer`. Use `alloy` if the user does not specify a voice.\n\n> ⚠️ Models change over time. If a model ID fails, query `oatda-list-models` with `?type=audio` first.\n\n## Discovering Audio Model Parameters\n\nQuery available audio models and inspect `supported_params` before sending optional fields:\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X GET \"https://oatda.com/api/v1/llm/models?type=audio\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" | jq '.audio_models[] | {id, supported_params}'\n```\n\nLook for:\n- `audio_modes` containing `tts`\n- supported `voice` values\n- allowed `response_format` values\n- optional fields like `instructions` or `language`\n\n## API Call\n\nThe speech endpoint returns **binary audio**, not JSON. Always save the response to a file.\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X POST \"https://oatda.com/api/v1/llm/speech\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" \\\n  -d '{\n    \"provider\": \"<PROVIDER>\",\n    \"model\": \"<MODEL>\",\n    \"input\": \"<TEXT_TO_SPEAK>\",\n    \"voice\": \"alloy\",\n    \"response_format\": \"mp3\",\n    \"speed\": 1.0\n  }' \\\n  --output speech.mp3\n```\n\n### Common Parameters\n\n- `input`: Text to convert to speech, max 15000 characters\n- `voice`: Voice name, e.g. `alloy`, `nova`, `shimmer`\n- `response_format`: `mp3`, `opus`, `aac`, `flac`, `wav`, `pcm`, `mulaw`, or `alaw`\n- `speed`: 0.25 to 4.0, default 1.0\n- `instructions`: Optional tone/style guidance for supported models\n- `language`: Optional language code for supported models\n\n## Success Handling\n\nIf the request succeeds, tell the user where the file was saved, for example:\n\n> Speech generated successfully: `speech.mp3`\n\nIf headers matter, use `curl -D headers.txt` while still saving the audio body with `--output`.\n\n## Error Handling\n\n| HTTP Status | Meaning | Action |\n|-------------|---------|--------|\n| 401 | Invalid API key | Tell user to check their key |\n| 402 | Insufficient credits | Tell user to check balance |\n| 400 | Bad request / model not supported | Check model format and query `oatda-list-models` with `type=audio` |\n| 429 | Rate limited or monthly cap | Wait briefly and retry once |\n| 500 | Provider error | Show the error message if returned |\n\n## Example\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X POST \"https://oatda.com/api/v1/llm/speech\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" \\\n  -d '{\n    \"provider\": \"openai\",\n    \"model\": \"tts-1\",\n    \"input\": \"Welcome to OATDA, one API to direct all.\",\n    \"voice\": \"alloy\",\n    \"response_format\": \"mp3\",\n    \"speed\": 1.0\n  }' \\\n  --output speech.mp3\n```\n\n## Notes\n\n- Endpoint: `/api/v1/llm/speech`\n- Use `input`, not `prompt`, for TTS requests\n- Always save the response with `--output`\n- Use `oatda-list-models` to discover available audio models\n- Equivalent capability name: `generate_speech`\n- Related skills: `oatda-list-models`, `oatda-transcribe-audio`, `oatda-translate-audio`\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7anz9axpc20rkkkfarxeh589845ssw\",\n  \"slug\": \"oatda-generate-speech\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1777228242889\n}\n\nFile v1.0.1:skill-card.md\n\n## Description: <br>\nGenerate speech or audio from text using OATDA's unified audio API. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[devcsde](https://clawhub.ai/user/devcsde) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agent users use this skill to convert text into spoken audio, narration, voiceovers, or accessibility audio through OATDA's speech API. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Text submitted for speech synthesis is sent to OATDA. <br>\nMitigation: Avoid sending secrets, regulated data, or confidential drafts unless that data flow is acceptable for the use case. <br>\nRisk: The skill requires an OATDA API key to call the speech and model-discovery endpoints. <br>\nMitigation: Use a scoped API key where possible and verify only that the key exists instead of printing the full value. <br>\n\n\n## Reference(s): <br>\n- [OATDA Homepage](https://oatda.com) <br>\n- [OATDA Audio Models Endpoint](https://oatda.com/api/v1/llm/models?type=audio) <br>\n- [OATDA Speech Endpoint](https://oatda.com/api/v1/llm/speech) <br>\n- [ClawHub Skill Page](https://clawhub.ai/devcsde/oatda-generate-speech) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Shell commands, API calls, Files, Guidance] <br>\n**Output Format:** [Markdown guidance with bash commands and a saved audio file] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires curl, jq, and an OATDA API key; speech responses are saved as local audio files.] <br>\n\n## Skill Version(s): <br>\n1.0.1 (source: ClawHub release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.0: 2 files, 2741 bytes\n\nFiles: SKILL.md (5398b), _meta.json (140b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: oatda-generate-speech\ndescription: Use when the user wants to generate speech/audio from text using OATDA's unified audio API. Supports text-to-speech (TTS), voiceovers, accessibility audio, and the generate_speech MCP capability with models such as OpenAI TTS.\n---\n\n# OATDA Speech Generation\n\nGenerate spoken audio from text through OATDA's unified audio API.\n\n## When to Use\n\nUse this skill when the user wants to:\n- Convert text to speech or audio\n- Create voiceovers, announcements, narration, or accessibility audio\n- Use TTS models such as OpenAI `tts-1` through OATDA\n- Use the OATDA `generate_speech` capability\n\n## Prerequisites\n\nThe user needs an OATDA API key. Check in this order:\n1. `$OATDA_API_KEY` environment variable\n2. `~/.oatda/credentials.json` config file\n\nIf neither exists, tell the user:\n> You need an OATDA API key. Get one at https://oatda.com, then set it:\n> `export OATDA_API_KEY=your_key_here`\n\n## Step-by-Step Instructions\n\n### 1. Resolve the API key\n\n```bash\n# Check env var first; if empty, auto-load from credentials file\nif [[ -z \"$OATDA_API_KEY\" ]]; then\n  export OATDA_API_KEY=$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)\nfi\n\n# Verify key exists (show first 8 chars only)\necho \"${OATDA_API_KEY:0:8}\"\n```\n\nIf the output is empty or `null`, stop and ask the user to configure their API key.\n\n**IMPORTANT**:\n- Never print the full API key. Only show the first 8 characters for verification.\n- The key resolution script and subsequent `curl` commands **must run in the same shell session**. Each separate bash/terminal invocation starts with an isolated environment where previously exported variables are lost. Either run all commands in one session, or chain them.\n\n### 2. Determine the model and voice\n\nMap common aliases:\n\n| User says | Provider | Model |\n|-----------|----------|-------|\n| tts, tts-1, openai tts (default) | openai | tts-1 |\n| tts hd, tts-1-hd | openai | tts-1-hd |\n| gpt tts, gpt-4o mini tts | openai | gpt-4o-mini-tts |\n\n**Default**: `openai` / `tts-1` if no model is specified.\n\nIf the user provides `provider/model` format directly (e.g., `openai/tts-1`), split on `/` to get separate `provider` and `model` values.\n\nCommon OpenAI voices include `alloy`, `ash`, `ballad`, `coral`, `echo`, `fable`, `nova`, `onyx`, `sage`, and `shimmer`. Use `alloy` if the user does not specify a voice.\n\n### 3. Optional: discover available audio models\n\n```bash\ncurl -s -X GET \"https://oatda.com/api/v1/llm/models?type=audio\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" | jq '.audio_models[] | {id, supported_params}'\n```\n\nUse `supported_params` to confirm model-specific options before sending optional fields.\n\n### 4. Make the API call\n\nThe speech endpoint returns **binary audio**, not JSON. Save the response to a file.\n\n```bash\ncurl -s -X POST \"https://oatda.com/api/v1/llm/speech\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" \\\n  -d '{\n    \"provider\": \"<PROVIDER>\",\n    \"model\": \"<MODEL>\",\n    \"input\": \"<TEXT_TO_SPEAK>\",\n    \"voice\": \"alloy\",\n    \"response_format\": \"mp3\",\n    \"speed\": 1.0\n  }' \\\n  --output speech.mp3\n```\n\nReplace `<PROVIDER>`, `<MODEL>`, and `<TEXT_TO_SPEAK>` with actual values.\n\n**Parameters**:\n- `input`: Text to convert to speech, max 15000 characters\n- `voice`: Voice name, e.g. `alloy`, `nova`, `shimmer`\n- `response_format`: `mp3`, `opus`, `aac`, `flac`, `wav`, `pcm`, `mulaw`, or `alaw`\n- `speed`: 0.25 to 4.0, default 1.0\n- `instructions`: Optional style/tone instructions for supported models\n- `language`: Optional language code for supported models\n\n### 5. Present the result\n\nIf the request succeeds, tell the user where the audio file was saved, e.g.:\n> Speech generated successfully: `speech.mp3`\n\nIf you need to inspect the response headers, use `curl -D headers.txt` while still saving the body to an audio file.\n\n### 6. Handle errors\n\n| HTTP Status | Meaning | Action |\n|-------------|---------|--------|\n| 401 | Invalid API key | Tell user to check their key at https://oatda.com/dashboard/api-keys |\n| 402 | Insufficient credits | Tell user to check balance at https://oatda.com/dashboard/usage |\n| 400 | Bad request / model not supported | Check model format and use `/oatda:oatda-list-models` with `type=audio` |\n| 429 | Rate limited or monthly cap | Wait briefly and retry once, or ask user to check caps |\n| 500 | Provider error | Show the error message if returned |\n\n## Full Example\n\nUser asks: \"Convert this text to speech with alloy voice using OpenAI TTS\"\n\n```bash\ncurl -s -X POST \"https://oatda.com/api/v1/llm/speech\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" \\\n  -d '{\n    \"provider\": \"openai\",\n    \"model\": \"tts-1\",\n    \"input\": \"Welcome to OATDA, one API to direct all.\",\n    \"voice\": \"alloy\",\n    \"response_format\": \"mp3\",\n    \"speed\": 1.0\n  }' \\\n  --output speech.mp3\n```\n\n## Tips\n\n- The endpoint is `/api/v1/llm/speech`.\n- Use `input`, not `prompt`, for text-to-speech requests.\n- The response is an audio file; always save it with `--output`.\n- For model discovery, use `/api/v1/llm/models?type=audio`.\n- Keep text under 15000 characters.\n- NEVER expose the full API key in output.\n- Equivalent MCP tool name: `generate_speech`.\n- Related skills: `/oatda:oatda-list-models`, `/oatda:oatda-transcribe-audio`, `/oatda:oatda-translate-audio`.\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7anz9axpc20rkkkfarxeh589845ssw\",\n  \"slug\": \"oatda-generate-speech\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1777227975014\n}","readmeExcerpt":"Skill: OATDA Generate Speech Owner: devcsde Summary: Generate speech or audio from text using OATDA's unified audio API. Triggers when the user wants to convert text to speech, create narration, voiceovers, acc... Tags: latest:1.1.0 Version history: v1.1.0 | 2026-07-17T23:20:42.873Z | user Remove deprecated tts-1/tts-1-hd model references. Replace static model table with list_models guidance. Broaden description to a","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"export OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\""},{"language":"bash","snippet":"curl -s -X GET \"https://oatda.com/api/v1/llm/models?type=audio\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" | jq '.audio_models[] | {id, supported_params}'"},{"language":"bash","snippet":"export OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X GET \"https://oatda.com/api/v1/llm/models?type=audio\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" | jq '.audio_models[] | {id, supported_params}'"},{"language":"bash","snippet":"curl -s -X POST \"https://oatda.com/api/v1/llm/speech\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" \\\n  -d '{"},{"language":"bash","snippet":"export OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X POST \"https://oatda.com/api/v1/llm/speech\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" \\\n  -d '{\n    \"provider\": \"<PROVIDER>\",\n    \"model\": \"<MODEL>\",\n    \"input\": \"<TEXT_TO_SPEAK>\",\n    \"voice\": \"alloy\",\n    \"response_format\": \"mp3\",\n    \"speed\": 1.0\n  }' \\\n  --output speech.mp3"},{"language":"bash","snippet":"curl -s -X POST \"https://oatda.com/api/v1/llm/speech\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" \\\n  -d '{"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: oatda-generate-speech\ndescription: Generate speech or audio from text using OATDA's unified audio API. Triggers when the user wants to convert text to speech, create narration, voiceovers, accessibility audio, or use TTS models such as OpenAI tts-1 through OATDA.\nhomepage: https://oatda.com\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🔊\",\n        \"requires\": { \"bins\": [\"curl\", \"jq\"], \"env\": [\"OATDA_API_KEY\"], \"config\": [\"~/.oatda/credentials.json\"] },\n        \"primaryEnv\": \"OATDA_API_KEY\",\n      },\n  }\n---\n\n# OATDA Speech Generation\n\nGenerate spoken audio from text through OATDA's unified audio API.\n\n## API Key Resolution\n\nAll commands need the OATDA API key. Resolve it inline for each `exec` call:\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\"\n```\n\nIf the key is empty or `null`, tell the user to get one at https://oatda.com and configure it.\n\n**Security**: Never print the full API key. Only verify existence or show first 8 chars.\n\n## Model Mapping\n\n| User says | Provider | Model |\n|-----------|----------|-------|\n| tts, tts-1, openai tts (default) | openai | tts-1 |\n| tts hd, tts-1-hd | openai | tts-1-hd |\n| gpt tts, gpt-4o mini tts | openai | gpt-4o-mini-tts |\n\n**Default**: `openai` / `tts-1` if no model specified.\n\nIf the user provides `provider/model` format directly (for example `openai/tts-1`), split on `/`.\n\nCommon OpenAI voices include `alloy`, `ash`, `ballad`, `coral`, `echo`, `fable`, `nova`, `onyx`, `sage`, and `shimmer`. Use `alloy` if the user does not specify a voice.\n\n> ⚠️ Models change over time. If a model ID fails, query `oatda-list-models` with `?type=audio` first.\n\n## Discovering Audio Model Parameters\n\nQuery available audio models and inspect `supported_params` before sending optional fields:\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X GET \"https://oatda.com/api/v1/llm/models?type=audio\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" | jq '.audio_models[] | {id, supported_params}'\n```\n\nLook for:\n- `audio_modes` containing `tts`\n- supported `voice` values\n- allowed `response_format` values\n- optional fields like `instructions` or `language`\n\n## API Call\n\nThe speech endpoint returns **binary audio**, not JSON. Always save the response to a file.\n\n```bash\nexport OATDA_API_KEY=\"${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}\" && \\\ncurl -s -X POST \"https://oatda.com/api/v1/llm/speech\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $OATDA_API_KEY\" \\\n  -d '{\n    \"provider\": \"<PROVIDER>\",\n    \"model\": \"<MODEL>\",\n    \"input\": \"<TEXT_TO_SPEAK>\",\n    \"voice\": \"alloy\",\n    \"response_format\": \"mp3\",\n    \"speed\": 1.0\n  }' \\\n  --output speech.mp3\n```\n\n### Common Parameters\n\n- `input`: Text to convert to s"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7anz9axpc20rkkkfarxeh589845ssw\",\n  \"slug\": \"oatda-generate-speech\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1784330442873\n}"},{"path":"skill-card.md","content":"## Description:\n\nGenerate speech or audio from text using OATDA's unified audio API.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[devcsde](https://clawhub.ai/user/devcsde)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, creators, and accessibility-focused users use this skill through an agent to generate spoken audio, narration, voiceovers, and other text-to-speech outputs from text with OATDA-supported providers.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The command template can mishandle arbitrary user text and may allow command injection if text is pasted directly into JSON payloads.\n\nMitigation: Build request JSON with a proper encoder such as jq --arg, validate output paths, and avoid reusing shell snippets with unsanitized user input.\n\nRisk: The skill reads an OATDA API key and sends provided text to OATDA for speech generation.\n\nMitigation: Use the skill only when that data flow is acceptable, verify credential presence without printing the full key, and avoid sending sensitive text unless authorized.\n\n## Reference(s):\n\n- [OATDA Homepage](https://oatda.com)\n- [OATDA Audio Models Endpoint](https://oatda.com/api/v1/llm/models?type=audio)\n- [OATDA Speech Endpoint](https://oatda.com/api/v1/llm/speech)\n- [ClawHub Skill Page](https://clawhub.ai/devcsde/skills/oatda-generate-speech)\n\n## Skill Output:\n\n**Output Type(s):** [Shell commands, Configuration, Guidance, Files]\n\n**Output Format:** [Markdown with bash commands and generated audio file paths]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires curl, jq, OATDA_API_KEY, and safe JSON construction for user-provided text.]\n\n## Skill Version(s):\n\n1.1.0 (source: evidence.release.version and target metadata; artifact _meta.json reports 1.0.1)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Generate speech or audio from text using OATDA's unified audio API. Triggers when the user wants to convert text to speech, create narration, voiceovers, acc... Skill: OATDA Generate Speech Owner: devcsde Summary: Generate speech or audio from text using OATDA's unified audio API. Triggers when the user wants to convert text to speech, create narration, voiceovers, acc... Tags: latest:1.1.0 Version history: v1.1.0 | 2026-07-17T23:20:42.873Z | user Remove deprecated tts-1/tts-1-hd model references. Replace static model table with list_models guidance. Broaden description to a","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1129,"uniquenessScore":49,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T06:42:21.711Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T06:42:21.711Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T10:49:29.632Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}