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

# Duplicate playbook

> Copy a playbook with its exit paths, messages and every tool but a workflow tool.



## OpenAPI

````yaml /specs-prettified/realtime/openapi.stable.json post /v1/stable/playbook/{playbookID}/duplicate
openapi: 3.0.0
info:
  title: Realtime
  description: Realtime gateway API service
  version: 1.0.0
  contact: {}
servers:
  - url: https://realtime-api.voiceflow.com
security: []
tags: []
paths:
  /v1/stable/playbook/{playbookID}/duplicate:
    post:
      tags:
        - Playbook
      summary: Duplicate playbook
      description: Copy a playbook with its exit paths, messages and every tool but a
        workflow tool.
      operationId: StablePlaybookController_duplicate
      parameters:
        - name: playbookID
          required: true
          in: path
          schema:
            type: string
        - name: projectID
          required: true
          in: query
          schema:
            type: string
            description: The ID of the project to operate on.
        - name: environmentAlias
          required: true
          in: query
          schema:
            type: string
            description: The alias of the environment to operate on (e.g. `main`).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StablePlaybookDuplicateRequest"
      responses:
        "201":
          description: ""
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/StablePlaybookDuplicateResponse"
      security:
        - token: []
components:
  schemas:
    StablePlaybookDuplicateRequest:
      type: object
      properties:
        name:
          description: The name of the copy. Leave it out to use the original's name with
            " copy" added.
          type: string
          minLength: 1
          maxLength: 255
      additionalProperties: false
    StablePlaybookDuplicateResponse:
      type: object
      properties:
        playbook:
          $ref: "#/components/schemas/StablePlaybookReadV2"
        ids:
          type: object
          properties:
            tools:
              type: object
              additionalProperties:
                type: string
              description: Each of the original's API, function, MCP and integration
                attachments mapped to the copy's.
            paths:
              type: object
              additionalProperties:
                type: string
              description: Each of the original's exit paths mapped to the copy's.
          required:
            - tools
            - paths
          description: Where each copied tool and exit path went.
        skippedWorkflowTools:
          type: array
          items:
            type: string
          description: The original's workflow tools. The copy did not get them, because
            workflow tools go on the Main Agent only. The original keeps them.
      required:
        - playbook
        - ids
        - skippedWorkflowTools
    StablePlaybookReadV2:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        settings:
          $ref: "#/components/schemas/AgentSettings"
        createdAt:
          type: string
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        updatedAt:
          type: string
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        description:
          nullable: true
          description: A human-readable description of what the playbook does.
          type: string
        instructions:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/MarkdownText"
        pathToolOrder:
          type: array
          items:
            type: string
          description: The IDs of the playbook's path tools, in display order.
        endTool:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/StableEndTool"
        cardTool:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/StableCardTool"
        buttonTool:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/StableButtonTool"
        carouselTool:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/StableCardTool"
        webSearchTool:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/StableWebSearchTool"
        callForwardTool:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/StableCallForwardTool"
        knowledgeBaseTool:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/StableKnowledgeBaseTool"
        skipTurnTool:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/AgentSkipTurnTool"
        instructionsLineCount:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: How many lines the instructions have, so a caller can decide
            whether to page through them.
      required:
        - id
        - name
        - settings
        - createdAt
        - updatedAt
        - description
        - pathToolOrder
        - endTool
        - cardTool
        - buttonTool
        - carouselTool
        - webSearchTool
        - callForwardTool
        - knowledgeBaseTool
        - skipTurnTool
        - instructionsLineCount
    AgentSettings:
      type: object
      properties:
        model:
          allOf:
            - $ref: "#/components/schemas/AIModel"
        realtime:
          type: object
          properties:
            voice:
              type: string
            eagerness:
              type: string
        maxTokens:
          type: number
        temperature:
          type: number
        reasoningEffort:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/AIReasoningEffort"
        serviceTier:
          description: "The service tier to request from models that support it.
            `priority` is faster processing: faster responses at a higher credit
            cost. When unset, the deprecated project-level `priorityProcessing`
            setting applies."
          nullable: true
          allOf:
            - $ref: "#/components/schemas/AIParamsServiceTier"
    AIModel:
      type: string
      enum:
        - gpt-3.5-turbo-1106
        - gpt-3.5-turbo
        - gpt-4
        - gpt-4o
        - gpt-4o-mini
        - gpt-4.1-2025-04-14
        - gpt-4.1-mini-2025-04-14
        - gpt-4.1-nano-2025-04-14
        - gpt-o3-mini
        - o3-2025-04-16
        - o4-mini-2025-04-16
        - gpt-5
        - gpt-5-mini
        - gpt-5-nano
        - gpt-5.2
        - gpt-5.4
        - gpt-5.4-mini
        - gpt-5.5
        - gpt-5.6-sol
        - gpt-5.6-terra
        - gpt-5.6-luna
        - gpt-6-sol
        - gpt-6-luna
        - gpt-6.1-sol
        - gpt-realtime
        - gpt-live-1
        - claude-4-opus
        - claude-4-sonnet
        - claude-4.5-sonnet
        - claude-4.6-sonnet
        - claude-4.5-haiku
        - claude-4.5-opus
        - claude-4.7-opus
        - bedrock-claude-4-sonnet
        - bedrock-claude-4.5-sonnet
        - bedrock-claude-4.6-sonnet
        - bedrock-claude-5-sonnet
        - bedrock-claude-5.5-sonnet
        - bedrock-claude-4.5-haiku
        - bedrock-claude-5.5-haiku
        - bedrock-claude-4.5-opus
        - bedrock-claude-4.7-opus
        - bedrock-claude-4.8-opus
        - voiceflow-core-4.0
        - voiceflow-core-4.1
        - voiceflow-core-4.2
        - voiceflow-flash-4.2
        - gemini-2.5-pro
        - gemini-2.5-flash
        - gemini-live-2.5-flash
        - gemini-3-flash
        - gemini-3.5-flash
        - gemini-3.1-pro
        - gpt-oss-20b
        - gpt-oss-120b
        - llama-guard-4
        - llama-3.1-instant
        - llama-3.3-versatile
        - qwen3.6-27b
        - grok-4.6
        - voiceflow-flash-4.1
        - kimi-k3
        - gemini-flash-2
        - gpt-4-turbo
        - claude-3.5-haiku
        - claude-3-opus
        - claude-3.7-sonnet
        - claude-v2
        - llama-3.2-1b-preview
        - gemini-pro-1.5
        - claude-3-haiku
        - claude-3-sonnet
        - text-davinci-003
        - claude-v1
        - claude-instant-v1
        - deep-seek-r1-distill-llama-70B
        - claude-3.5-sonnet
      x-enumNames:
        - GPT_3_5_TURBO_1106
        - GPT_3_5_TURBO
        - GPT_4
        - GPT_4_O
        - GPT_4_O_MINI
        - GPT_4_1
        - GPT_4_1_MINI
        - GPT_4_1_NANO
        - GPT_O_3_MINI
        - GPT_O_3
        - GPT_O_4_MINI
        - GPT_5
        - GPT_5_MINI
        - GPT_5_NANO
        - GPT_5_2
        - GPT_5_4
        - GPT_5_4_MINI
        - GPT_5_5
        - GPT_5_6_SOL
        - GPT_5_6_TERRA
        - GPT_5_6_LUNA
        - GPT_6_SOL
        - GPT_6_LUNA
        - GPT_6_1_SOL
        - GPT_REALTIME
        - GPT_LIVE_1
        - CLAUDE_4_OPUS
        - CLAUDE_4_SONNET
        - CLAUDE_4_5_SONNET
        - CLAUDE_4_6_SONNET
        - CLAUDE_4_5_HAIKU
        - CLAUDE_4_5_OPUS
        - CLAUDE_4_7_OPUS
        - BEDROCK_CLAUDE_4_SONNET
        - BEDROCK_CLAUDE_4_5_SONNET
        - BEDROCK_CLAUDE_4_6_SONNET
        - BEDROCK_CLAUDE_5_SONNET
        - BEDROCK_CLAUDE_5_5_SONNET
        - BEDROCK_CLAUDE_4_5_HAIKU
        - BEDROCK_CLAUDE_5_5_HAIKU
        - BEDROCK_CLAUDE_4_5_OPUS
        - BEDROCK_CLAUDE_4_7_OPUS
        - BEDROCK_CLAUDE_4_8_OPUS
        - VOICEFLOW_CORE_4_0
        - VOICEFLOW_CORE_4_1
        - VOICEFLOW_CORE_4_2
        - VOICEFLOW_FLASH_4_2
        - GEMINI_2_5_PRO
        - GEMINI_2_5_FLASH
        - GEMINI_LIVE_2_5_FLASH
        - GEMINI_3_FLASH
        - GEMINI_3_5_FLASH
        - GEMINI_3_1_PRO
        - GPT_OSS_20_B
        - GPT_OSS_120_B
        - LLAMA_GUARD_4
        - LLAMA_3_1_INSTANT
        - LLAMA_3_3_VERSATILE
        - QWEN_3_6_27_B
        - GROK_4_6
        - VOICEFLOW_FLASH_4_1
        - KIMI_K_3
        - GEMINI_FLASH_2
        - GPT_4_TURBO
        - CLAUDE_3_5_HAIKU
        - CLAUDE_3_OPUS
        - CLAUDE_3_7_SONNET
        - CLAUDE_V_2
        - LLAMA_3_2_1_B_PREVIEW
        - GEMINI_PRO_1_5
        - CLAUDE_3_HAIKU
        - CLAUDE_3_SONNET
        - DA_VINCI_003
        - CLAUDE_V_1
        - CLAUDE_INSTANT_V_1
        - DEEP_SEEK_R_1_DISTILL_LLAMA_70_B
        - CLAUDE_3_5_SONNET
    AIReasoningEffort:
      type: string
      enum:
        - off
        - adaptive
        - minimal
        - low
        - medium
        - high
      x-enumNames:
        - OFF
        - ADAPTIVE
        - MINIMAL
        - LOW
        - MEDIUM
        - HIGH
    AIParamsServiceTier:
      type: string
      enum:
        - default
        - flex
        - priority
      x-enumNames:
        - DEFAULT
        - FLEX
        - PRIORITY
    MarkdownText:
      type: string
      description: Markdown text. Backticked `Name` resolves to a tool, playbook, or
        workflow reference, and a system tool is written as its field name, such
        as `webSearchTool`; braced {name} resolves to a variable or entity
        reference. A name that resolves to nothing is stored as literal text and
        reported back in the response.
    StableEndTool:
      type: object
      properties:
        enabled:
          type: boolean
        messages:
          default: null
          nullable: true
          allOf:
            - $ref: "#/components/schemas/StableToolMessages"
        toolSound:
          default: null
          nullable: true
          allOf:
            - $ref: "#/components/schemas/ToolNodeDataToolSound"
        description:
          type: string
      required:
        - enabled
        - description
    StableToolMessages:
      type: object
      properties:
        generative:
          type: object
          properties:
            execution:
              allOf:
                - $ref: "#/components/schemas/StableToolMessageGenerative"
            failure:
              allOf:
                - $ref: "#/components/schemas/StableToolMessageGenerative"
            delay:
              allOf:
                - $ref: "#/components/schemas/StableToolMessageGenerative"
            completion:
              allOf:
                - $ref: "#/components/schemas/StableToolMessageGenerative"
        delayMessageID:
          nullable: true
          type: string
        failureMessageID:
          nullable: true
          type: string
        executionMessageID:
          nullable: true
          type: string
        completionMessageID:
          nullable: true
          type: string
        delayMessageSeconds:
          nullable: true
          type: number
      required:
        - delayMessageID
        - failureMessageID
        - executionMessageID
        - completionMessageID
        - delayMessageSeconds
    StableToolMessageGenerative:
      type: object
      properties:
        enabled:
          type: boolean
        examples:
          type: array
          items:
            $ref: "#/components/schemas/MarkdownLikeString"
      required:
        - enabled
    MarkdownLikeString:
      type: string
      description: "Message text shown to the end user. Limited markdown: **bold**,
        _italic_, <u>underline</u>, ~~strikethrough~~, [label](url).
        {variable_name} inserts a variable or entity, {variable_name.path} a
        field of a variable. Escape a literal { or \\ with a backslash. A name
        matching neither is stored as literal text and reported in
        unresolvedReferences; secrets are not available here."
    ToolNodeDataToolSound:
      type: object
      properties:
        ref:
          nullable: true
          type: string
        volume:
          default: 0.75
          type: number
          minimum: 0
          maximum: 1
      required:
        - ref
    StableCardTool:
      type: object
      properties:
        enabled:
          type: boolean
        messages:
          default: null
          nullable: true
          allOf:
            - $ref: "#/components/schemas/StableToolMessages"
        description:
          type: string
      required:
        - enabled
        - description
    StableButtonTool:
      type: object
      properties:
        enabled:
          type: boolean
        messages:
          default: null
          nullable: true
          allOf:
            - $ref: "#/components/schemas/StableToolMessages"
        description:
          type: string
      required:
        - enabled
        - description
    StableWebSearchTool:
      type: object
      properties:
        enabled:
          type: boolean
        messages:
          default: null
          nullable: true
          allOf:
            - $ref: "#/components/schemas/StableToolMessages"
        toolSound:
          default: null
          nullable: true
          allOf:
            - $ref: "#/components/schemas/ToolNodeDataToolSound"
        description:
          type: string
        allowedDomains:
          nullable: true
          type: array
          items:
            type: string
        sourceUrlsCount:
          nullable: true
          type: number
          minimum: 1
          maximum: 5
      required:
        - enabled
    StableCallForwardTool:
      type: object
      properties:
        enabled:
          type: boolean
        address:
          $ref: "#/components/schemas/VariableReferenceString"
        messages:
          default: null
          nullable: true
          allOf:
            - $ref: "#/components/schemas/StableToolMessages"
        extension:
          allOf:
            - $ref: "#/components/schemas/VariableReferenceString"
        toolSound:
          default: null
          nullable: true
          allOf:
            - $ref: "#/components/schemas/ToolNodeDataToolSound"
        description:
          type: string
        addressType:
          $ref: "#/components/schemas/CallForwardAddressType"
        callerIDPassthrough:
          type: boolean
      required:
        - enabled
        - address
        - description
        - addressType
    VariableReferenceString:
      type: string
      description: Plain text; markdown is not interpreted. {variable_name} inserts a
        variable or entity, {variable_name.path} a field of a variable. Escape a
        literal { or \ with a backslash. A name matching neither is stored as
        literal text and reported in unresolvedReferences; secrets are not
        available here.
    CallForwardAddressType:
      type: string
      enum:
        - phone
        - sip
      x-enumNames:
        - PHONE
        - SIP
    StableKnowledgeBaseTool:
      type: object
      properties:
        query:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/VariableReferenceString"
        enabled:
          type: boolean
        filters:
          type: array
          items:
            $ref: "#/components/schemas/StableKBFilter"
        messages:
          default: null
          nullable: true
          allOf:
            - $ref: "#/components/schemas/StableToolMessages"
        toolSound:
          default: null
          nullable: true
          allOf:
            - $ref: "#/components/schemas/ToolNodeDataToolSound"
        chunkLimit:
          nullable: true
          type: number
        description:
          type: string
        queryMode:
          allOf:
            - $ref: "#/components/schemas/AgentKnowledgeBaseToolQueryMode"
        sourceUrlsCount:
          nullable: true
          type: number
          minimum: 1
          maximum: 5
      required:
        - enabled
        - description
    StableKBFilter:
      type: object
      properties:
        description:
          default: null
          nullable: true
          type: string
        defaultValue:
          default: null
          nullable: true
          allOf:
            - $ref: "#/components/schemas/DefaultValueString"
        key:
          type: string
      required:
        - key
    DefaultValueString:
      type: string
      description: Plain text resolved at runtime and never shown to a model.
        {variable_name} inserts a variable or entity, {secret_name} a project
        secret, {variable_name.path} a field of a variable. Escape a literal {
        or \ with a backslash. When a name is both a variable and a secret, the
        secret wins. A name matching none is stored as literal text and reported
        in unresolvedReferences. Where the field is sent to an upstream system,
        an unresolved placeholder may be sent as literal text; on an MCP server
        it is re-resolved by name at connect time, so a literal that matches a
        real secret binds.
    AgentKnowledgeBaseToolQueryMode:
      type: string
      enum:
        - custom
        - rewriting
      x-enumNames:
        - CUSTOM
        - REWRITING
    AgentSkipTurnTool:
      type: object
      properties:
        enabled:
          type: boolean
        description:
          type: string
      required:
        - enabled
        - description
  securitySchemes:
    token:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: Voiceflow bearer token
````
