FlowSpeech Tts API
The Tts API from FlowSpeech — 3 operation(s) for tts.
The Tts API from FlowSpeech — 3 operation(s) for tts.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/flowspeech:flowspeech-tts-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: FlowSpeech Text-to-Speech Tts API
version: 1.0.0
description: Subscription-gated asynchronous speech. Result URLs are link-accessible public objects, not private signed URLs. See /docs/public-api for retention, idempotency, billing and workload limits.
servers:
- url: https://flowspeech.io
security:
- BearerAuth: []
tags:
- name: TTS
paths:
/api/v1/tts/jobs:
post:
operationId: createSpeechJob
summary: Create or recover an idempotent speech generation
description: Maximum body 1 MiB. Reuse the same UUID on transport retries. Maximum combined input length 100,000 UTF-16 code units. Job timeout is two hours.
parameters:
- name: Idempotency-Key
in: header
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateJob'
responses:
'202':
description: Accepted unfinished job
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
'200':
description: Replayed terminal job
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
'400':
description: Invalid request
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Invalid API key
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Insufficient credits
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Subscription or scope required
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Job not found
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Idempotency conflict or already completed
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: Body exceeds 1 MiB
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'415':
description: Use application/json
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate or workload limit
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Temporarily unavailable
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- TTS
get:
operationId: findSpeechJob
summary: Recover by idempotency UUID
parameters:
- name: requestId
in: query
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Job status
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
'400':
description: Invalid request
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Invalid API key
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Insufficient credits
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Subscription or scope required
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Job not found
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Idempotency conflict or already completed
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: Body exceeds 1 MiB
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'415':
description: Use application/json
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate or workload limit
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Temporarily unavailable
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- TTS
/api/v1/tts/jobs/{id}:
get:
operationId: getSpeechJob
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Job status; failed jobs also return HTTP 200
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
'400':
description: Invalid request
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Invalid API key
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Insufficient credits
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Subscription or scope required
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Job not found
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Idempotency conflict or already completed
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: Body exceeds 1 MiB
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'415':
description: Use application/json
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate or workload limit
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Temporarily unavailable
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- TTS
summary: Get speech job
x-summary-source: derived
/api/v1/tts/jobs/{id}/cancel:
post:
operationId: cancelSpeechJob
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Cancelled or existing terminal job; successful jobs return 409
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
'400':
description: Invalid request
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Invalid API key
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Insufficient credits
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Subscription or scope required
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Job not found
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Idempotency conflict or already completed
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: Body exceeds 1 MiB
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'415':
description: Use application/json
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate or workload limit
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Temporarily unavailable
headers:
X-Request-Id:
schema:
type: string
format: uuid
Retry-After:
schema:
type: integer
minimum: 1
description: Suggested polling or retry delay, when present.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- TTS
summary: Cancel speech job
x-summary-source: derived
components:
schemas:
Error:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
retryable:
type: boolean
required:
- code
- message
- retryable
traceId:
type: string
format: uuid
required:
- error
- traceId
Job:
type: object
properties:
id:
type: string
format: uuid
requestId:
type: string
format: uuid
model:
const: gemini-tts
status:
type: string
enum:
- queued
- running
- merging
- settling
- success
- failed
- cancelled
progress:
type: object
properties:
completed:
type: integer
minimum: 0
total:
type: integer
minimum: 0
required:
- completed
- total
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
deadlineAt:
type: string
format: date-time
usage:
$ref: '#/components/schemas/Usage'
quota:
$ref: '#/components/schemas/Quota'
error:
type: object
properties:
code:
type: string
required:
- code
resultDeleted:
type: boolean
result:
oneOf:
- type: 'null'
- type: object
properties:
url:
type: string
format: uri
mimeType:
const: audio/wav
sampleRate:
const: 24000
channels:
const: 1
bitsPerSample:
const: 16
access:
const: link
required:
- url
- mimeType
- sampleRate
- channels
- bitsPerSample
- access
required:
- id
- requestId
- model
- status
- progress
- createdAt
- updatedAt
- deadlineAt
- usage
Usage:
type: object
properties:
billableCharacters:
type: integer
minimum: 0
reservedCredits:
type: integer
minimum: 0
chargedCredits:
type: integer
minimum: 0
required:
- billableCharacters
- reservedCredits
- chargedCredits
CreateJob:
type: object
properties:
model:
type: string
enum:
- gemini-tts
default: gemini-tts
input:
oneOf:
- type: object
properties:
mode:
const: single
text:
type: string
minLength: 1
maxLength: 100000
voiceName:
type: string
minLength: 1
maxLength: 100
description: Voice name returned by GET /api/v1/voices.
required:
- mode
- text
- voiceName
additionalProperties: false
- type: object
properties:
mode:
const: multi
segments:
type: array
minItems: 1
items:
type: object
properties:
speaker:
type: string
minLength: 1
maxLength: 100
text:
type: string
minLength: 1
maxLength: 100000
voiceName:
type: string
minLength: 1
maxLength: 100
description: Voice name returned by GET /api/v1/voices.
required:
- speaker
- text
- voiceName
additionalProperties: false
required:
- mode
- segments
additionalProperties: false
discriminator:
propertyName: mode
required:
- input
additionalProperties: false
Quota:
type: object
properties:
total:
type: integer
minimum: 0
remaining:
type: integer
minimum: 0
reserved:
type: integer
minimum: 0
available:
type: integer
minimum: 0
nextResetAt:
type:
- string
- 'null'
required:
- total
- remaining
- reserved
- available
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: FlowSpeech API key