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

# Create PlayNote

> Create a new PlayNote by providing a file URL.

<Tip>
  Check out the [Generate Conversation from PDF with PlayNote API](/documentation/playnote/playnote-quickstart) guide
  for a step-by-step approach to using the PlayNote API to create a podcast-style conversation (and more!) from a PDF.
</Tip>

After you create your PlayNotes, you can proceed to poll its status via the [Get PlayNote](/api-reference/playnote/get-id) endpoint.

Note: You can have only **one active generation**. If you face this error code `403` with the message `{"errorMessage":"User already has an active generation","errorId":"UNAUTHORIZED"}` then please wait for some time and try again later.


## OpenAPI

````yaml POST /api/v1/playnotes
openapi: 3.1.0
info:
  title: PlayAI API
  version: 1.0.0
  description: |
    A single, combined OpenAPI specification that merges:
      • PlayAI Agent API
      • PlayAI PlayNote API
      • PlayAI Text-to-Speech (TTS) API
      • PlayAI Dialog Turbo API

    This file contains all endpoints, schemas, and components 
    from the four original specs. See "Merged Issues" below 
    for notes on how certain conflicts were resolved.
servers:
  - url: https://api.play.ai
security:
  - ApiKeyAuth: []
    XUserIdAuth: []
paths:
  /api/v1/playnotes:
    post:
      description: >-
        Create a new PlayNote (multipart). Provide either `sourceFile` or
        `sourceFileUrl`.
      parameters:
        - name: content-type
          in: header
          required: true
          schema:
            type: string
            enum:
              - multipart/form-data
        - name: accept
          in: header
          required: false
          schema:
            type: string
            enum:
              - application/json
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PlayNoteCreateRequest'
            encoding:
              sourceFile:
                contentType: >-
                  text/plain, application/pdf, image/png, image/jpeg,
                  image/webp, image/heic, image/heif, video/mp4, video/mpeg,
                  video/quicktime, video/x-msvideo, video/x-flv, video/webm,
                  video/x-ms-wmv, audio/wav, audio/mpeg, audio/aiff, audio/aac,
                  audio/ogg, audio/flac
      responses:
        '201':
          description: PlayNote created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlayNoteResource'
components:
  schemas:
    PlayNoteCreateRequest:
      type: object
      properties:
        sourceFile:
          type: string
          format: binary
          description: >
            The source file to be uploaded. One and only one of `sourceFile` or
            `sourceFileUrl` must be provided.
        sourceFileUrl:
          type: string
          format: uri
          description: >
            URL to the source file. One and only one of `sourceFile`  or
            `sourceFileUrl` must be provided.
        synthesisStyle:
          $ref: '#/components/schemas/PlayNoteSynthesisStyle'
        voice1:
          $ref: '#/components/schemas/VoiceId'
          description: >-
            The unique ID for the first voice to be used.

            >**💡 Tip:** Check out the [How to Get ID of
            Voices](/documentation/text-to-speech/tts-voices#how-to-use-a-voice)
            guide
        voice1Name:
          type: string
          nullable: true
          example: Angelo
        voice1Gender:
          type: string
          nullable: true
          enum:
            - Male
            - Female
        voice2:
          $ref: '#/components/schemas/VoiceId'
          nullable: true
          description: >-
            The unique ID for the second voice to be used.

            >**💡 Tip:** Check out the [How to Get ID of
            Voices](/documentation/text-to-speech/tts-voices#how-to-use-a-voice)
            guide
        voice2Name:
          type: string
          nullable: true
          example: Deedee
        voice2Gender:
          type: string
          nullable: true
          enum:
            - Male
            - Female
        webHookUrl:
          $ref: '#/components/schemas/PlayNoteUserWebHookUrl'
      required:
        - synthesisStyle
        - voice1
        - voice1Name
    PlayNoteResource:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/PlayNoteId'
        ownerId:
          $ref: '#/components/schemas/UserId'
        name:
          type: string
          description: The name of the PlayNote
        sourceFileUrl:
          type: string
          format: uri
          description: URL to the source file
        audioUrl:
          type: string
          format: uri
          nullable: true
          description: URL to the generated PlayNote audio file
        synthesisStyle:
          $ref: '#/components/schemas/PlayNoteSynthesisStyle'
        voice1:
          $ref: '#/components/schemas/VoiceId'
          description: >-
            The unique ID for the first voice to be used.

            >**💡 Tip:** Check out the [How to Get ID of
            Voices](/documentation/text-to-speech/tts-voices#how-to-use-a-voice)
            guide
        voice1Name:
          type: string
          description: Name of the `voice1` character
        voice1Gender:
          type: string
          enum:
            - Male
            - Female
          description: Gender of the `voice1` character
        voice2:
          $ref: '#/components/schemas/VoiceId'
          nullable: true
          description: >-
            The unique ID for the second voice to be used.

            >**💡 Tip:** Check out the [How to Get ID of
            Voices](/documentation/text-to-speech/tts-voices#how-to-use-a-voice)
            guide
        voice2Name:
          type: string
          nullable: true
          description: Name of the `voice2` character
        voice2Gender:
          type: string
          enum:
            - Male
            - Female
          nullable: true
          description: Gender of the `voice2` character
        webHookUrl:
          $ref: '#/components/schemas/PlayNoteUserWebHookUrl'
        status:
          $ref: '#/components/schemas/PlayNoteStatus'
        duration:
          type: number
          nullable: true
          description: Duration of the audio in seconds
        requestedAt:
          type: string
          format: date-time
          description: When the PlayNote was requested
        createdAt:
          type: string
          format: date-time
          nullable: true
          description: When the PlayNote was created
      required:
        - id
        - ownerId
        - name
        - sourceFileUrl
        - synthesisStyle
        - voice1
        - status
        - requestedAt
    PlayNoteSynthesisStyle:
      type: string
      enum:
        - podcast
        - executive-briefing
        - childrens-story
        - debate
      description: The synthesis style of the PlayNote
    VoiceId:
      description: The unique ID for a PlayAI Voice.
      type: string
      example: >-
        s3://voice-cloning-zero-shot/baf1ef41-36b6-428c-9bdf-50ba54682bd8/original/manifest.json
    PlayNoteUserWebHookUrl:
      type: string
      format: uri
      description: A URL to receive status updates for the PlayNote
      example: https://my.webhook.url.com
    PlayNoteId:
      description: The unique ID for each PlayNote
      type: string
      example: qHMJf1MqlSPsfBdQIyYi
    UserId:
      description: The PlayAI unique ID for each user
      type: string
      example: gpTwobxZzJRczfqommFemErGJTU2
    PlayNoteStatus:
      type: string
      enum:
        - generating
        - completed
        - failed
      description: The current status of the PlayNote
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      description: >
        Your secret API key from [PlayAI](https://play.ai/api/keys), formatted
        as `Bearer YOUR_SECRET_API_KEY`.
    XUserIdAuth:
      type: apiKey
      in: header
      name: X-USER-ID
      description: |
        Your unique user ID from [PlayAI](https://play.ai/api/keys).
      x-prompt: What is your PlayAI user ID?

````