> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wondercraft.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Generate AI-scripted podcast with 2 hosts using Convo Mode

> Starts a background job that creates an AI generated script and produces an audio file in convo mode.
    The response contains a `job_id` that can be used with the `/podcast/{job_id}` endpoint
    to query for status.
    Requires a valid `X-API-TOKEN` header.


    **Note that generating via Convo Mode yields more natural results but takes longer.
    Expect at least 1 minute of processing per minute duration of audio before investigating a potential failure.**

    Throws:
    - 429 if the user has too many jobs in flight.
    - 400 if any voice_ids provided are invalid or if the length of voice_ids is not 2.



## OpenAPI

````yaml POST /podcast/convo-mode/ai-scripted
openapi: 3.1.0
info:
  title: Wondercraft Public API
  version: 0.0.1
servers:
  - url: https://api.wondercraft.ai/v1
    description: Base Wondercraft API
security: []
paths:
  /podcast/convo-mode/ai-scripted:
    post:
      tags:
        - Podcasts
      summary: Generate AI-scripted podcast with 2 hosts using Convo Mode
      description: >-
        Starts a background job that creates an AI generated script and produces
        an audio file in convo mode.
            The response contains a `job_id` that can be used with the `/podcast/{job_id}` endpoint
            to query for status.
            Requires a valid `X-API-TOKEN` header.


            **Note that generating via Convo Mode yields more natural results but takes longer.
            Expect at least 1 minute of processing per minute duration of audio before investigating a potential failure.**

            Throws:
            - 429 if the user has too many jobs in flight.
            - 400 if any voice_ids provided are invalid or if the length of voice_ids is not 2.
      operationId: >-
        generate_ai_scripted_convo_mode_episode_podcast_convo_mode_ai_scripted_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenerateAiScriptedConvoModeEpisodeRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenerateEpisodeResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - APIKeyHeader: []
components:
  schemas:
    GenerateAiScriptedConvoModeEpisodeRequest:
      properties:
        prompt:
          type: string
          title: Prompt
          description: >-
            The prompt to instruct the AI to generate the script. You can
            specify the duration, and include links. Sometimes, the AI
            hallucinates, so it helps to mention that this podcast has two
            hosts.
        voice_ids:
          items:
            type: string
          type: array
          title: Voice Ids
          description: >-
            A list of voice_ids to use for the generated audio. **Must provide
            exactly 2 voices for this endpoint.** If the script has multiple
            speakers, we will use the voices from this list in the order they
            appear in. All ids in this list must be unique. If no IDs are
            provided, 2 defaults will be used.
        delivery_instructions:
          anyOf:
            - type: string
            - type: 'null'
          title: Delivery Instructions
          description: >-
            An optional delivery instructions for the generated audio. This will
            be used to guide the generation of the audio.
        music_spec:
          anyOf:
            - $ref: '#/components/schemas/MusicTrackSpec'
            - type: 'null'
          description: >-
            An optional spec for adding background music to the generated
            script. Note that if the chosenmusic track is longer than the
            duration of the generated script, it will be cut off.
      additionalProperties: false
      type: object
      required:
        - prompt
      title: GenerateAiScriptedConvoModeEpisodeRequest
      description: >-
        A request to start a job that generates an audio file for a podcast in
        convo mode

        with a script generated by AI using the provided prompt.

        An optional list of Voice IDs can be provided to control the audio
        generation output. If no voice_ids are provided,

        defaults of up to 2 convo-mode voices will be chosen.
    GenerateEpisodeResponse:
      properties:
        job_id:
          type: string
          format: uuid
          title: Job Id
          description: >-
            The job ID for the episode generation. The status of this job can be
            queried using the`/podcast/{job_id}` endpoint.
      additionalProperties: false
      type: object
      required:
        - job_id
      title: GenerateEpisodeResponse
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    MusicTrackSpec:
      properties:
        music_id:
          type: string
          title: Music Id
          description: >-
            The ID of the music track to used in the background. This can be
            copied from theWondercraft platform
        fade_in_ms:
          type: integer
          title: Fade In Ms
          description: >-
            The number of milliseconds to fade in from the start of the music
            track
          default: 0
        fade_out_ms:
          type: integer
          title: Fade Out Ms
          description: >-
            The number of milliseconds to fade out from the end of the music
            track
          default: 0
        playback_start:
          type: integer
          title: Playback Start
          description: >-
            A millisecond into the music track at which we start playing.
            Equivalent to trimming thebeginning of the music track. Defaults to
            0 (i.e. no trimming)
          default: 0
        playback_end:
          anyOf:
            - type: integer
            - type: 'null'
          title: Playback End
          description: >-
            How many milliseconds into the music should we playback. Equivalent
            to trimming up to this numberof milliseconds from the music track.
            Defaults to the entire music track.
        volume:
          type: number
          title: Volume
          description: >-
            The volume to apply to the music track. Defaults to 0.05. Must be
            between 0.0 and 1.0
          default: 0.05
        loop:
          type: boolean
          title: Loop
          description: Whether to loop the music track. Defaults to False.
          default: false
      additionalProperties: false
      type: object
      required:
        - music_id
      title: MusicTrackSpec
      description: >-
        A music track to add to the generated audio. Note that the music will
        always be added at the very beginning of the

        generated podcast and will be automatically trimmed to match the content
        length.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: X-API-KEY

````