tenzro-xyz Voices API
The Voices API from tenzro-xyz — 23 operation(s) for voices.
The Voices API from tenzro-xyz — 23 operation(s) for voices.
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/tenzro-xyz:tenzro-xyz-voices-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: Tenzro Labs Platform Voices API
version: 1.0.0
description: Browse the curated catalogue; manage credits, billing, keys, plans and rentals; place and pay orders; run Datasets, Fieldwork, Voices and Forecasts. Chat, embeddings, images, speech and the model list keep the OpenAI-compatible /v1 paths.
servers:
- url: https://api.tenzro.xyz
security:
- apiKey: []
tags:
- name: Voices
paths:
/voices/models:
get:
tags:
- Voices
summary: Speech models, what is serving now, and prices
description: No key needed.
operationId: getVoicesModels
x-tenzro-scope: public
security: []
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/status:
get:
tags:
- Voices
summary: Which parts of Voices are serving now
description: No key needed.
operationId: getVoicesStatus
x-tenzro-scope: public
security: []
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/detect:
post:
tags:
- Voices
summary: Check whether audio was made by Voices (multipart or raw audio, 25 MB)
description: No key needed.
operationId: postVoicesDetect
x-tenzro-scope: public
security: []
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/speech:
post:
tags:
- Voices
summary: Text to speech (WAV, streamed by default)
description: Needs a key with the `voices:speak` permission.
operationId: postVoicesSpeech
x-tenzro-scope: voices:speak
responses:
'200':
description: OK
content:
audio/wav:
schema:
type: string
format: binary
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/voices:
get:
tags:
- Voices
summary: Voices this key may use
description: Needs a key with the `voices:speak` permission.
operationId: getVoicesVoices
x-tenzro-scope: voices:speak
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
tags:
- Voices
summary: Add a voice with the speaker's consent
description: Needs a key with the `voices:admin` permission.
operationId: postVoicesVoices
x-tenzro-scope: voices:admin
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/voices/{id}:
get:
tags:
- Voices
summary: Get a voice
description: Needs a key with the `voices:speak` permission.
operationId: getVoicesVoicesById
x-tenzro-scope: voices:speak
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
delete:
tags:
- Voices
summary: Delete a voice
description: Needs a key with the `voices:admin` permission.
operationId: deleteVoicesVoicesById
x-tenzro-scope: voices:admin
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/voices/{id}/publish:
post:
tags:
- Voices
summary: Publish a voice as a stock voice (Tenzro Labs only)
description: Needs a key with the `voices:admin` permission.
operationId: postVoicesVoicesByIdPublish
x-tenzro-scope: voices:admin
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/consent-challenges:
post:
tags:
- Voices
summary: Get the consent statement the speaker reads for cloning
description: Needs a key with the `voices:admin` permission.
operationId: postVoicesConsentChallenges
x-tenzro-scope: voices:admin
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/outputs/{id}:
get:
tags:
- Voices
summary: A clip's signed provenance manifest and log entry
description: Needs a key with the `voices:speak` permission.
operationId: getVoicesOutputsById
x-tenzro-scope: voices:speak
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/outputs/{id}/audio:
get:
tags:
- Voices
summary: A clip's audio (byte ranges supported)
description: Needs a key with the `voices:speak` permission.
operationId: getVoicesOutputsByIdAudio
x-tenzro-scope: voices:speak
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
audio/wav:
schema:
type: string
format: binary
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/batches/estimate:
post:
tags:
- Voices
summary: 'Estimate a batch: clips, audio and credits'
description: Needs a key with the `voices:batch` permission.
operationId: postVoicesBatchesEstimate
x-tenzro-scope: voices:batch
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/batches:
get:
tags:
- Voices
summary: List batches
description: Needs a key with the `voices:batch` permission.
operationId: getVoicesBatches
x-tenzro-scope: voices:batch
parameters:
- name: limit
in: query
required: false
description: Page size
schema:
type: string
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
tags:
- Voices
summary: Start a batch into a Dataset
description: Needs a key with the `voices:batch` permission.
operationId: postVoicesBatches
x-tenzro-scope: voices:batch
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/batches/{id}:
get:
tags:
- Voices
summary: Get a batch
description: Needs a key with the `voices:batch` permission.
operationId: getVoicesBatchesById
x-tenzro-scope: voices:batch
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/batches/{id}/parts:
get:
tags:
- Voices
summary: A batch's clips
description: Needs a key with the `voices:batch` permission.
operationId: getVoicesBatchesByIdParts
x-tenzro-scope: voices:batch
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/batches/{id}/cancel:
post:
tags:
- Voices
summary: Cancel a batch
description: Needs a key with the `voices:batch` permission.
operationId: postVoicesBatchesByIdCancel
x-tenzro-scope: voices:batch
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/batches/{id}/resume:
post:
tags:
- Voices
summary: Resume a batch
description: Needs a key with the `voices:batch` permission.
operationId: postVoicesBatchesByIdResume
x-tenzro-scope: voices:batch
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/custom/estimate:
post:
tags:
- Voices
summary: Estimate custom voice training
description: Needs a key with the `voices:train` permission.
operationId: postVoicesCustomEstimate
x-tenzro-scope: voices:train
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/custom:
get:
tags:
- Voices
summary: List custom voices
description: Needs a key with the `voices:train` permission.
operationId: getVoicesCustom
x-tenzro-scope: voices:train
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
tags:
- Voices
summary: Train a custom voice on a consented Dataset
description: Needs a key with the `voices:train` permission.
operationId: postVoicesCustom
x-tenzro-scope: voices:train
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/custom/{id}:
get:
tags:
- Voices
summary: Get a custom voice and its training job
description: Needs a key with the `voices:train` permission.
operationId: getVoicesCustomById
x-tenzro-scope: voices:train
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
delete:
tags:
- Voices
summary: Delete a custom voice
description: Needs a key with the `voices:train` permission.
operationId: deleteVoicesCustomById
x-tenzro-scope: voices:train
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/custom/{id}/cancel:
post:
tags:
- Voices
summary: Cancel training
description: Needs a key with the `voices:train` permission.
operationId: postVoicesCustomByIdCancel
x-tenzro-scope: voices:train
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/custom/{id}/resume:
post:
tags:
- Voices
summary: Resume training
description: Needs a key with the `voices:train` permission.
operationId: postVoicesCustomByIdResume
x-tenzro-scope: voices:train
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/custom/{id}/share:
post:
tags:
- Voices
summary: Share a custom voice with another organisation
description: Needs a key with the `voices:admin` permission.
operationId: postVoicesCustomByIdShare
x-tenzro-scope: voices:admin
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/voices/custom/{id}/export:
post:
tags:
- Voices
summary: Export a custom voice where its base licence allows
description: Needs a key with the `voices:admin` permission.
operationId: postVoicesCustomByIdExport
x-tenzro-scope: voices:admin
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json: {}
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
Error:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
scope:
type: string
description: 'On a 403: the permission the key lacks.'
securitySchemes:
apiKey:
type: http
scheme: bearer
description: A Tenzro Labs API key (tzl_…).
ingestKey:
type: http
scheme: bearer
description: 'A Fieldwork ingest key (tzi_…): bound to one project and the origins listed on it, able only to run the participant flow. Safe in a browser. Create it with POST /fieldwork/projects/{id}/ingest-keys.'
serviceAssertion:
type: http
scheme: bearer
bearerFormat: JWT
description: 'A Tenzro Labs service''s ES256 assertion: header kid = the RFC 7638 thumbprint of a key in the service''s published JWKS; iss = sub = the service; aud = this endpoint; exp at most 60 s after iat; jti used once.'