{"openapi":"3.1.0","info":{"title":"Speechify (BYOK) API","version":"0.1.0","description":"Speechify (BYOK) lets an AI assistant read your own Speechify data through the Speechify API with a key you supply (Speechify API key). Read-only: 6 tools (list_voices, get_voice, list_models, list_projects, get_project, get_workspace_entitlements). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever sent to...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-speechify.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-speechify/docs"},"termsOfService":"https://connectorbay.com/byok-speechify/terms"},"servers":[{"url":"https://byok-speechify.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-speechify/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_voices":{"post":{"operationId":"list_voices","summary":"List text-to-speech voices (shared catalog and your cloned voices) with gender, locale and supported models; filter by t","description":"List text-to-speech voices (shared catalog and your cloned voices) with gender, locale and supported models; filter by type, locale, gender or model. Use for \"Which female English Speechify voices support the simba-3.2 model\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"type":{"anyOf":[{"enum":["personal","shared"],"type":"string"},{"type":"null"}],"default":null,"description":"personal for your cloned voices, shared for the public catalog; omit for both.","title":"Type"},"locale":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"BCP-47 prefix filter: 'en' matches en-US and en-GB.","title":"Locale"},"gender":{"anyOf":[{"enum":["male","female","not_specified"],"type":"string"},{"type":"null"}],"default":null,"description":"Only voices of this gender.","title":"Gender"},"model":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only voices that support this model id, for example simba-3.2.","title":"Model"},"project_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Cloned voices filed in this project (proj_...), or the word 'shared' for unfiled clones.","title":"Project Id"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Items per page (1 to 200; the API default is 50).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"The next_cursor from the previous answer; keep following it while has_more is true (a short or empty page is not the end).","title":"Cursor"}},"title":"list_voicesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_voice":{"post":{"operationId":"get_voice","summary":"Get one voice by id: display name, type, gender, locale and supported models. Use for \"Describe the Speechify voice with","description":"Get one voice by id: display name, type, gender, locale and supported models. Use for \"Describe the Speechify voice with id geffen\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"voice_id":{"description":"Voice id from list_voices.","maxLength":200,"title":"Voice Id","type":"string"}},"required":["voice_id"],"title":"get_voiceArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_models":{"post":{"operationId":"list_models","summary":"List the text-to-speech models the workspace can use, with languages, default and recommended flags, and deprecation or ","description":"List the text-to-speech models the workspace can use, with languages, default and recommended flags, and deprecation or sunset dates. Use for \"Which Speechify TTS models are available and which languages do they cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_modelsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_projects":{"post":{"operationId":"list_projects","summary":"List the workspace's projects with resource counts, monthly budget, month-to-date spend and budget status. Use for \"Whic","description":"List the workspace's projects with resource counts, monthly budget, month-to-date spend and budget status. Use for \"Which Speechify projects are close to their monthly budget\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"include_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include archived projects.","title":"Include Archived"},"include_purged":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include purged projects still inside their 30-day restore window.","title":"Include Purged"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Items per page (1 to 200; the API default is 50).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"The next_cursor from the previous answer; keep following it while has_more is true (a short or empty page is not the end).","title":"Cursor"}},"title":"list_projectsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_project":{"post":{"operationId":"get_project","summary":"Get one project's resource count, monthly budget, month-to-date spend and rate limit. Use for \"How much of its budget ha","description":"Get one project's resource count, monthly budget, month-to-date spend and rate limit. Use for \"How much of its budget has Speechify project proj_123 used\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Project id (proj_...) from list_projects.","maxLength":200,"title":"Project Id","type":"string"}},"required":["project_id"],"title":"get_projectArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_workspace_entitlements":{"post":{"operationId":"get_workspace_entitlements","summary":"Show the current workspace's plan limits (requests per second, concurrency, members, voice cloning, top-up caps) next to","description":"Show the current workspace's plan limits (requests per second, concurrency, members, voice cloning, top-up caps) next to the per-tier catalog. Use for \"What are my Speechify API rate limits and is voice cloning enabled\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_workspace_entitlementsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}