Voiceflow bearer token
curl --request POST \
--url https://realtime-api.voiceflow.com/v1/stable/playbook/<playbookID>/duplicate \
--header 'Authorization: Bearer <token>'
--header 'Content-Type: application/json' \
--data '{
"name": "<string>"
}'const response = await fetch('https://realtime-api.voiceflow.com/v1/stable/playbook/<playbookID>/duplicate?projectID=<projectID>&environmentAlias=<environmentAlias>', {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "<string>"
}),
});
const data = await response.json();import requests
response = requests.post(
'https://realtime-api.voiceflow.com/v1/stable/playbook/<playbookID>/duplicate?projectID=<projectID>&environmentAlias=<environmentAlias>',
headers={'Authorization': 'Bearer <token>'},
json={
"name": "<string>"
},
)
data = response.json()vf playbook duplicate --playbook-id <playbookID> --project-id <projectID> --environment-alias <environmentAlias> \
< body.json{
"playbook": {
"id": "<string>",
"name": "<string>",
"settings": {
"model": "<AIModel>",
"realtime": {
"voice": "<string>",
"eagerness": "<string>"
},
"maxTokens": 0,
"temperature": 0,
"reasoningEffort": "<AIReasoningEffort>",
"serviceTier": "<AIParamsServiceTier>"
},
"createdAt": "2026-09-10T00:00:00.000Z",
"updatedAt": "2026-09-10T00:00:00.000Z",
"description": "<string>",
"instructions": "<string>",
"pathToolOrder": [
"<string>"
],
"endTool": {
"enabled": true,
"messages": null,
"toolSound": null,
"description": "<string>"
},
"cardTool": {
"enabled": true,
"messages": null,
"description": "<string>"
},
"buttonTool": {
"enabled": true,
"messages": null,
"description": "<string>"
},
"carouselTool": {
"enabled": true,
"messages": null,
"description": "<string>"
},
"webSearchTool": {
"enabled": true,
"messages": null,
"toolSound": null,
"description": "<string>",
"allowedDomains": [
"<string>"
],
"sourceUrlsCount": 0
},
"callForwardTool": {
"enabled": true,
"address": "<VariableReferenceString>",
"messages": null,
"extension": "<VariableReferenceString>",
"toolSound": null,
"description": "<string>",
"addressType": "<CallForwardAddressType>",
"callerIDPassthrough": true
},
"knowledgeBaseTool": {
"query": "<VariableReferenceString>",
"enabled": true,
"filters": [
"<StableKBFilter>"
],
"messages": null,
"toolSound": null,
"chunkLimit": 0,
"description": "<string>",
"queryMode": "<AgentKnowledgeBaseToolQueryMode>",
"sourceUrlsCount": 0
},
"skipTurnTool": {
"enabled": true,
"description": "<string>"
},
"instructionsLineCount": 0
},
"ids": {
"tools": {},
"paths": {}
},
"skippedWorkflowTools": [
"<string>"
]
}Copy a playbook with its exit paths, messages and every tool but a workflow tool.
Paste in your agent
1. Set up Voiceflow by following https://www.voiceflow.com/agents/setup 2. Read https://www.voiceflow.com/docs/api-reference/playbook/duplicate-playbook.md — the Voiceflow documentation page "Duplicate playbook". Use it to help me with this part of Voiceflow and answer my questions. Refer to https://www.voiceflow.com/docs/llms.txt if you need related documentation.
curl --request POST \
--url https://realtime-api.voiceflow.com/v1/stable/playbook/<playbookID>/duplicate \
--header 'Authorization: Bearer <token>'
--header 'Content-Type: application/json' \
--data '{
"name": "<string>"
}'const response = await fetch('https://realtime-api.voiceflow.com/v1/stable/playbook/<playbookID>/duplicate?projectID=<projectID>&environmentAlias=<environmentAlias>', {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "<string>"
}),
});
const data = await response.json();import requests
response = requests.post(
'https://realtime-api.voiceflow.com/v1/stable/playbook/<playbookID>/duplicate?projectID=<projectID>&environmentAlias=<environmentAlias>',
headers={'Authorization': 'Bearer <token>'},
json={
"name": "<string>"
},
)
data = response.json()vf playbook duplicate --playbook-id <playbookID> --project-id <projectID> --environment-alias <environmentAlias> \
< body.json{
"playbook": {
"id": "<string>",
"name": "<string>",
"settings": {
"model": "<AIModel>",
"realtime": {
"voice": "<string>",
"eagerness": "<string>"
},
"maxTokens": 0,
"temperature": 0,
"reasoningEffort": "<AIReasoningEffort>",
"serviceTier": "<AIParamsServiceTier>"
},
"createdAt": "2026-09-10T00:00:00.000Z",
"updatedAt": "2026-09-10T00:00:00.000Z",
"description": "<string>",
"instructions": "<string>",
"pathToolOrder": [
"<string>"
],
"endTool": {
"enabled": true,
"messages": null,
"toolSound": null,
"description": "<string>"
},
"cardTool": {
"enabled": true,
"messages": null,
"description": "<string>"
},
"buttonTool": {
"enabled": true,
"messages": null,
"description": "<string>"
},
"carouselTool": {
"enabled": true,
"messages": null,
"description": "<string>"
},
"webSearchTool": {
"enabled": true,
"messages": null,
"toolSound": null,
"description": "<string>",
"allowedDomains": [
"<string>"
],
"sourceUrlsCount": 0
},
"callForwardTool": {
"enabled": true,
"address": "<VariableReferenceString>",
"messages": null,
"extension": "<VariableReferenceString>",
"toolSound": null,
"description": "<string>",
"addressType": "<CallForwardAddressType>",
"callerIDPassthrough": true
},
"knowledgeBaseTool": {
"query": "<VariableReferenceString>",
"enabled": true,
"filters": [
"<StableKBFilter>"
],
"messages": null,
"toolSound": null,
"chunkLimit": 0,
"description": "<string>",
"queryMode": "<AgentKnowledgeBaseToolQueryMode>",
"sourceUrlsCount": 0
},
"skipTurnTool": {
"enabled": true,
"description": "<string>"
},
"instructionsLineCount": 0
},
"ids": {
"tools": {},
"paths": {}
},
"skippedWorkflowTools": [
"<string>"
]
}Authorizations
Query Parameters
Response
201 - application/jsonShow child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
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.
Show child attributes
Was this page helpful?
Thanks for your feedback.