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

# Create Playbook

> Create Playbook



## OpenAPI

````yaml post /api/v2/playbook/create
openapi: 3.0.0
info:
  version: 3.0.0
  title: Octave API
  description: API for Octave workspace management and AI-powered content generation
servers:
  - url: https://app.octavehq.com
security:
  - ApiKeyAuth: []
paths:
  /api/v2/playbook/create:
    post:
      tags:
        - Playbook
      summary: Create Playbook
      description: Create Playbook
      operationId: createPlaybook
      requestBody:
        description: Playbook creation input
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  nullable: true
                  description: Name of the playbook
                description:
                  type: string
                  description: Description of the playbook
                keyInsight:
                  type: string
                  description: Key insight of the playbook
                type:
                  type: string
                  description: >-
                    Type of the playbook. Legacy types are automatically mapped:
                    SEGMENT→SECTOR, SIGNAL→MILESTONE, SPECIALIST→PRACTITIONER.
                context:
                  type: string
                  description: >-
                    Context of the playbook - used to help select Personas and
                    Use Cases if none are provided
                personaOIds:
                  type: array
                  items:
                    type: string
                  description: Persona OIds of the playbook
                useCaseOIds:
                  type: array
                  items:
                    type: string
                  description: Use case OIds of the playbook
                competitorOId:
                  type: string
                  description: Competitor OId for competitive playbooks
                segmentOId:
                  type: string
                  description: Segment OId of the playbook
                proofPointOIds:
                  type: array
                  items:
                    type: string
                  description: Proof point OIds of the playbook
                referenceOIds:
                  type: array
                  items:
                    type: string
                  description: Reference OIds of the playbook
                productOId:
                  type: string
                  description: >-
                    @deprecated Use `offeringOId` instead. Kept for backward
                    compatibility.
                  deprecated: true
                brandVoiceOId:
                  type: string
                  description: Brand voice oId to apply to generated playbook
                  example: bv_123456
                status:
                  type: string
                  enum:
                    - active
                    - draft
                    - archived
                  default: active
                  description: Status of the playbook
                  example: active
                referenceMode:
                  type: string
                  enum:
                    - specific
                    - none
                  default: specific
                  description: Reference mode of the playbook
                  example: specific
                proofPointMode:
                  type: string
                  enum:
                    - specific
                    - none
                  default: none
                  description: Proof point mode of the playbook
                  example: none
                additionalContextSources:
                  $ref: '#/components/schemas/additionalContextSources'
                async:
                  type: boolean
                  default: false
                  description: >-
                    If true, the playbook creation will be processed
                    asynchronously. The API will return immediately with a
                    message indicating the request has been queued.
                  example: false
                callbackUrl:
                  type: string
                  format: uri
                  description: >-
                    Optional callback URL. When provided with async: true, the
                    API will POST the result to this URL once processing
                    completes.
                  example: https://example.com/webhook/playbook
                offeringOId:
                  type: string
                  description: >-
                    Workspace offering OId for the playbook. Accepts Product and
                    Service OIds only (Solution is not supported).
              required:
                - description
                - keyInsight
      responses:
        '200':
          description: Playbook data
          content:
            application/json:
              schema:
                type: object
                properties:
                  _metadata:
                    $ref: '#/components/schemas/Metadata'
                  playbook:
                    type: object
                    nullable: true
                    properties:
                      oId:
                        type: string
                        nullable: true
                      name:
                        type: string
                        nullable: true
                      description:
                        type: string
                        nullable: true
                      type:
                        type: string
                        nullable: true
                        enum:
                          - LEGACY
                          - SECTOR
                          - SOLUTION
                          - MILESTONE
                          - PRACTITIONER
                          - COMPETITIVE
                          - ACCOUNT
                          - CUSTOM
                          - null
                      keyInsight:
                        type: array
                        items:
                          type: string
                  personas:
                    type: array
                    items:
                      type: object
                      properties:
                        oId:
                          type: string
                          minLength: 1
                          description: The ID of the persona
                          example: p_1234
                        name:
                          type: string
                          nullable: true
                          description: The name of the persona
                          example: VP of Sales
                        internalName:
                          type: string
                          nullable: true
                          description: The internal name of the persona
                          example: Sally the Sales Leader
                        description:
                          type: string
                          nullable: true
                          description: The description of the persona
                        active:
                          type: boolean
                          default: true
                          description: Whether the persona is active and can be used
                          example: true
                        data:
                          $ref: '#/components/schemas/PersonaData'
                        qualifyingQuestions:
                          type: array
                          nullable: true
                          items:
                            type: object
                            properties:
                              question:
                                type: string
                                description: The question to ask to qualify the entity
                              rationale:
                                type: string
                                description: >-
                                  The rationale for the question as to why it
                                  helps qualify
                              fitType:
                                type: string
                                enum:
                                  - GOOD
                                  - BAD
                                description: The fit type of the question
                                example: GOOD
                              weight:
                                type: string
                                enum:
                                  - LOW
                                  - MEDIUM
                                  - HIGH
                                  - INSTANT_QUALIFIER
                                  - INSTANT_DISQUALIFIER
                                description: The weight of the question
                                example: MEDIUM
                              archivedAt:
                                type: string
                                nullable: true
                                format: date-time
                                description: The date and time the question was archived
                            required:
                              - question
                              - rationale
                              - fitType
                              - weight
                        valueProps:
                          type: array
                          items:
                            type: object
                            properties:
                              title:
                                type: string
                                nullable: true
                              details:
                                type: string
                                nullable: true
                              evidence:
                                type: array
                                nullable: true
                                items:
                                  type: string
                      required:
                        - oId
                        - data
                        - valueProps
                required:
                  - _metadata
                  - playbook
                  - personas
        '400':
          description: >-
            Bad request - Occurs with invalid input parameters, including when
            unsupported source types are provided (only URL and TEXT source
            types are supported)
          content:
            application/json:
              schema:
                type: object
                properties:
                  _metadata:
                    $ref: '#/components/schemas/Metadata'
                  message:
                    type: string
                required:
                  - _metadata
                  - message
      deprecated: false
components:
  schemas:
    additionalContextSources:
      type: array
      items:
        type: object
        properties:
          type:
            type: string
            enum:
              - TEXT
              - URL
              - GOOGLE_DRIVE_FILE_ID
              - GENERATIVE_NAME
              - OID
              - COMPANY_NAME
              - FIELDWISE_DOCUMENT_ID
              - RAG_DOCUMENT_ID
              - RESOURCE
              - REPORT
              - REPORT_SECTION
              - EVENT_OID_FINDINGS
              - FINDING_OIDS
          value:
            type: string
          name:
            type: string
            nullable: true
          details:
            type: string
            nullable: true
          useNameIfUrlFails:
            type: boolean
            nullable: true
        required:
          - type
          - value
      description: >-
        Additional context sources for the playbook.  URL and TEXT source types
        are supported.
      example:
        - type: URL
          value: https://example.com/market-research
        - type: TEXT
          value: Additional market insights about the target segment.
    Metadata:
      type: object
      properties:
        usage:
          type: number
          default: 0
          example: 0
          description: API usage
        requestId:
          type: string
          example: requestId
          description: Request ID
        message:
          type: string
          example: message
          description: Message
        timestamp:
          type: string
          example: '2021-01-01T00:00:00.000Z'
          description: Timestamp
      required:
        - requestId
        - timestamp
    PersonaData:
      type: object
      properties:
        internalName:
          type: string
          nullable: true
          description: The internal name of the persona
        primaryResponsibilities:
          type: array
          items:
            type: string
          default: []
          description: The primary responsibilities of the persona
          example:
            - Responsibility 1
            - Responsibility 2
        painPoints:
          type: array
          items:
            type: string
          default: []
          description: The pain points of the persona
          example:
            - Pain Point 1
            - Pain Point 2
        keyConcerns:
          type: array
          items:
            type: string
          default: []
          description: The key concerns of the persona
          example:
            - Concern 1
            - Concern 2
        keyObjectives:
          type: array
          items:
            type: string
          default: []
          description: The key objectives of the persona
          example:
            - Objective 1
            - Objective 2
        commonJobTitles:
          type: array
          items:
            type: string
          default: []
          description: The common job titles of the persona
          example:
            - Job Title 1
            - Job Title 2
        whyTheyMatterToUs:
          type: array
          items:
            type: string
          default: []
          description: The reasons why the persona matters to us
          example:
            - Reason 1
            - Reason 2
        whyWeMatterToThem:
          type: array
          items:
            type: string
          default: []
          description: The reasons why we matter to this type of persona
          example:
            - Reason 1
            - Reason 2
        buyingRole:
          type: array
          items:
            type: string
          default: []
          description: >-
            The function this persona typically plays in a purchase decision
            (e.g. economic buyer, champion, technical evaluator, end user,
            influencer, blocker), along with their level of sophistication on
            the problem space (newcomer, experienced, expert).
          example:
            - Economic buyer with budget authority over the GTM stack.
            - Experienced operator who has evaluated similar tooling before.
        customFields:
          $ref: '#/components/schemas/CustomDataFields'
        additionalProperties:
          type: object
          additionalProperties:
            anyOf:
              - type: string
              - type: array
                items:
                  type: string
              - type: number
              - type: boolean
    CustomDataFields:
      type: array
      items:
        $ref: '#/components/schemas/CustomDataFieldItem'
    CustomDataFieldItem:
      type: object
      properties:
        title:
          type: string
        value:
          type: array
          items:
            type: string
      required:
        - title
        - value
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: api_key

````