tenzro-xyz Voices API

The Voices API from tenzro-xyz — 23 operation(s) for voices.

Operations 28

GET /voices/models Speech models, what is serving now, and prices #
GET /voices/status Which parts of Voices are serving now #
POST /voices/detect Check whether audio was made by Voices (multipart or raw audio, 25 MB) #
POST /voices/speech Text to speech (WAV, streamed by default) #
GET /voices/voices Voices this key may use #
POST /voices/voices Add a voice with the speaker's consent #
GET /voices/voices/{id} Get a voice #
DELETE /voices/voices/{id} Delete a voice #
POST /voices/voices/{id}/publish Publish a voice as a stock voice (Tenzro Labs only) #
POST /voices/consent-challenges Get the consent statement the speaker reads for cloning #
GET /voices/outputs/{id} A clip's signed provenance manifest and log entry #
GET /voices/outputs/{id}/audio A clip's audio (byte ranges supported) #
POST /voices/batches/estimate Estimate a batch: clips, audio and credits #
GET /voices/batches List batches #
POST /voices/batches Start a batch into a Dataset #
GET /voices/batches/{id} Get a batch #
GET /voices/batches/{id}/parts A batch's clips #
POST /voices/batches/{id}/cancel Cancel a batch #
POST /voices/batches/{id}/resume Resume a batch #
POST /voices/custom/estimate Estimate custom voice training #
GET /voices/custom List custom voices #
POST /voices/custom Train a custom voice on a consented Dataset #
GET /voices/custom/{id} Get a custom voice and its training job #
DELETE /voices/custom/{id} Delete a custom voice #
POST /voices/custom/{id}/cancel Cancel training #
POST /voices/custom/{id}/resume Resume training #
POST /voices/custom/{id}/share Share a custom voice with another organisation #
POST /voices/custom/{id}/export Export a custom voice where its base licence allows #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/tenzro-xyz:tenzro-xyz-voices-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API 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 Specification

tenzro-xyz-voices-api-openapi.yml Raw ↑
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.'