Podcastle Text-to-Speech API

Low-latency, human-like speech synthesis via the Async engine. Batch (/text_to_speech), streaming (/text_to_speech/streaming), word-timestamped (/text_to_speech/with_timestamps), and WebSocket (/text_to_speech/websocket/ws) generation across async_pro_v1.0 and async_flash models.

OpenAPI Specification

podcastle-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Async (Podcastle) Voice API
  description: >-
    The Async Voice API is the developer platform behind Podcastle's AI audio
    engine. It exposes low-latency, human-like text-to-speech, a browsable voice
    library, and instant voice cloning. Podcastle.ai rebranded its developer
    platform as Async; the API is served from https://api.async.com and
    authenticated with an x-api-key header plus a version header. Only
    documented endpoints and fields are modeled here; no endpoints are
    fabricated.
  termsOfService: https://async.com/terms
  contact:
    name: Async Support
    url: https://docs.async.com
  version: v1
servers:
  - url: https://api.async.com
    description: Async Voice API production base URL
security:
  - apiKey: []
tags:
  - name: Text to Speech
    description: Synthesize speech from text in batch, streaming, or with word timestamps.
  - name: Voices
    description: Browse the voice library and create instant voice clones.
paths:
  /text_to_speech:
    post:
      operationId: createSpeech
      tags:
        - Text to Speech
      summary: Generate audio from the input text.
      description: >-
        Converts a full transcript into a single audio file. On this endpoint
        only async_flash_v1.0 is documented as supported.
      parameters:
        - $ref: '#/components/parameters/Version'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TextToSpeechRequest'
      responses:
        '200':
          description: Audio file in the requested container format.
          content:
            audio/mpeg:
              schema:
                type: string
                format: binary
            audio/wav:
              schema:
                type: string
                format: binary
            application/octet-stream:
              schema:
                type: string
                format: binary
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '429':
          $ref: '#/components/responses/Error'
        '500':
          $ref: '#/components/responses/Error'
  /text_to_speech/streaming:
    post:
      operationId: createSpeechStreaming
      tags:
        - Text to Speech
      summary: Stream audio while it is being generated.
      description: >-
        Streams synthesized audio as it is generated, returning binary chunks as
        an octet-stream. Supports async_pro_v1.0, async_flash_v1.5, and
        async_flash_v1.0.
      parameters:
        - $ref: '#/components/parameters/Version'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TextToSpeechRequest'
      responses:
        '200':
          description: Binary audio stream.
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '429':
          $ref: '#/components/responses/Error'
        '500':
          $ref: '#/components/responses/Error'
  /text_to_speech/with_timestamps:
    post:
      operationId: createSpeechWithTimestamps
      tags:
        - Text to Speech
      summary: Generate audio with word-level timestamps.
      description: >-
        Returns base64-encoded audio plus a word-level alignment object with
        per-word start and end times in milliseconds. On this endpoint only
        async_flash_v1.0 is documented as supported.
      parameters:
        - $ref: '#/components/parameters/Version'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TextToSpeechRequest'
      responses:
        '200':
          description: Audio with word alignment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TimestampedSpeechResponse'
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '429':
          $ref: '#/components/responses/Error'
        '500':
          $ref: '#/components/responses/Error'
  /voices:
    post:
      operationId: listVoices
      tags:
        - Voices
      summary: List voices from the voice library.
      description: >-
        Returns a paginated list of predefined and custom voices. Filters by
        model, language, accent, gender, and style are supported, along with a
        cursor for pagination.
      parameters:
        - $ref: '#/components/parameters/Version'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ListVoicesRequest'
      responses:
        '200':
          description: A page of voices.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListVoicesResponse'
        '401':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '429':
          $ref: '#/components/responses/Error'
        '500':
          $ref: '#/components/responses/Error'
  /voices/clone:
    post:
      operationId: cloneVoice
      tags:
        - Voices
      summary: Create an instant voice clone.
      description: >-
        Creates a production-ready custom voice from a short audio clip. Accepts
        multipart/form-data with the audio sample and optional metadata.
        Supported audio formats: wav, mp3, flac, aiff.
      parameters:
        - $ref: '#/components/parameters/Version'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CloneVoiceRequest'
      responses:
        '200':
          description: The newly created cloned voice.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CloneVoiceResponse'
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/Error'
        '429':
          $ref: '#/components/responses/Error'
        '500':
          $ref: '#/components/responses/Error'
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: API key issued from the Async developer console.
  parameters:
    Version:
      name: version
      in: header
      required: true
      description: API version, for example v1.
      schema:
        type: string
        example: v1
  schemas:
    Voice:
      type: object
      properties:
        mode:
          type: string
          description: Voice selection mode.
          enum:
            - id
        id:
          type: string
          description: Voice identifier from the voice library.
      required:
        - mode
        - id
    OutputFormat:
      type: object
      properties:
        container:
          type: string
          description: Audio container format.
          enum:
            - raw
            - mp3
            - wav
        encoding:
          type: string
          description: PCM encoding (used with the raw container).
          enum:
            - pcm_f32le
            - pcm_s16le
            - pcm_mulaw
          default: pcm_s16le
        sample_rate:
          type: integer
          description: Sample rate in Hz.
          minimum: 8000
          maximum: 48000
        bit_rate:
          type: integer
          description: Bit rate in bits per second (MP3 only).
          minimum: 32000
          maximum: 320000
          default: 192000
      required:
        - container
        - sample_rate
    TextToSpeechRequest:
      type: object
      properties:
        model_id:
          type: string
          description: >-
            Synthesis model. async_pro_v1.0 (English, highest quality),
            async_flash_v1.5 (six languages, optimized for speed), and
            async_flash_v1.0 (legacy, fifteen languages). The batch and
            with_timestamps endpoints document support for async_flash_v1.0.
          enum:
            - async_pro_v1.0
            - async_flash_v1.5
            - async_flash_v1.0
        transcript:
          type: string
          description: The text to convert to speech.
        voice:
          $ref: '#/components/schemas/Voice'
        output_format:
          $ref: '#/components/schemas/OutputFormat'
        language:
          type: string
          description: Force synthesis in the specified language (ISO 639-1).
        speed_control:
          type: number
          description: Playback speed multiplier.
          minimum: 0.7
          maximum: 2.0
        stability:
          type: integer
          description: Voice stability.
          minimum: 0
          maximum: 100
      required:
        - model_id
        - transcript
        - voice
        - output_format
    TimestampedSpeechResponse:
      type: object
      properties:
        audio_base64:
          type: string
          description: Base64-encoded audio in the requested format.
        alignment:
          type: object
          description: Word-level timing aligned with the synthesized audio.
          properties:
            words:
              type: array
              items:
                type: string
            word_start_times_milliseconds:
              type: array
              items:
                type: number
            word_end_times_milliseconds:
              type: array
              items:
                type: number
    ListVoicesRequest:
      type: object
      properties:
        limit:
          type: integer
          description: Number of voices per page.
          minimum: 1
          maximum: 100
          default: 10
        model_id:
          type: string
          description: Filter by model.
        language:
          type: string
          description: Filter by language (ISO 639-1).
        accent:
          type: string
          description: Filter by accent.
        gender:
          type: string
          description: Filter by gender.
          enum:
            - Male
            - Female
            - Neutral
            - Unspecified
        style:
          type: string
          description: Filter by style.
        my_voice:
          type: boolean
          description: Return only voices owned by the current user.
        after:
          type: string
          description: Pagination cursor for subsequent pages.
    VoiceSummary:
      type: object
      properties:
        voice_id:
          type: string
        voice_type:
          type: string
          enum:
            - PREDEFINED
            - CUSTOM
        name:
          type: string
        description:
          type: string
        language:
          type: string
        gender:
          type: string
        accent:
          type: string
        style:
          type: string
        created_at:
          type: string
        updated_at:
          type: string
    ListVoicesResponse:
      type: object
      properties:
        voices:
          type: array
          items:
            $ref: '#/components/schemas/VoiceSummary'
        next_cursor:
          type: string
          description: Cursor for fetching the next page.
    CloneVoiceRequest:
      type: object
      properties:
        audio:
          type: string
          format: binary
          description: 'Audio clip file. Supported formats: wav, mp3, flac, aiff.'
        name:
          type: string
          description: Voice name or label.
        description:
          type: string
          description: Voice description.
        accent:
          type: string
          description: Accent specification.
        gender:
          type: string
          description: Voice gender.
          enum:
            - Male
            - Female
            - Neutral
            - Unspecified
        style:
          type: string
          description: Voice style(s), comma-separated.
        enhance:
          type: boolean
          description: Apply noise reduction to the sample.
          default: false
      required:
        - audio
        - name
    CloneVoiceResponse:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        language:
          type: string
          description: ISO 639-1 codes, comma-separated.
    Error:
      type: object
      properties:
        detail:
          type: object
          properties:
            error_code:
              type: string
            message:
              type: string
            extra:
              type: object
  responses:
    Error:
      description: Error response.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'