Voiceflow bearer token
Create tool
curl --request POST \
--url https://realtime-api.voiceflow.com/v1/stable/tool \
--header 'Authorization: Bearer <token>'
--header 'Content-Type: application/json' \
--data '{
"description": "<string>",
"target": {
"global": true,
"playbookID": "<string>"
},
"messages": null,
"captureInputVariables": {},
"asyncExecution": false,
"inputVariables": {},
"captureResponse": {},
"type": "api",
"apiToolID": "<string>"
}'const response = await fetch('https://realtime-api.voiceflow.com/v1/stable/tool?projectID=<projectID>&environmentAlias=<environmentAlias>', {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"description": "<string>",
"target": {
"global": true,
"playbookID": "<string>"
},
"messages": null,
"captureInputVariables": {},
"asyncExecution": false,
"inputVariables": {},
"captureResponse": {},
"type": "api",
"apiToolID": "<string>"
}),
});
const data = await response.json();import requests
response = requests.post(
'https://realtime-api.voiceflow.com/v1/stable/tool?projectID=<projectID>&environmentAlias=<environmentAlias>',
headers={'Authorization': 'Bearer <token>'},
json={
"description": "<string>",
"target": {
"global": True,
"playbookID": "<string>"
},
"messages": None,
"captureInputVariables": {},
"asyncExecution": False,
"inputVariables": {},
"captureResponse": {},
"type": "api",
"apiToolID": "<string>"
},
)
data = response.json()vf tool create --project-id <projectID> --environment-alias <environmentAlias> \
< body.json{
"tool": {
"id": "<string>",
"createdAt": "2026-09-10T00:00:00.000Z",
"updatedAt": "2026-09-10T00:00:00.000Z",
"messages": "<AgentToolMessages>",
"description": "<string>",
"captureInputVariables": {},
"type": "api",
"apiToolID": "<string>",
"asyncExecution": true,
"inputVariables": {},
"captureResponse": {}
}
}Adds a tool to the environment, something a playbook can call during a conversation. The response carries the ID that later calls address it by.
POST
/v1/stable/tool
Create tool
curl --request POST \
--url https://realtime-api.voiceflow.com/v1/stable/tool \
--header 'Authorization: Bearer <token>'
--header 'Content-Type: application/json' \
--data '{
"description": "<string>",
"target": {
"global": true,
"playbookID": "<string>"
},
"messages": null,
"captureInputVariables": {},
"asyncExecution": false,
"inputVariables": {},
"captureResponse": {},
"type": "api",
"apiToolID": "<string>"
}'const response = await fetch('https://realtime-api.voiceflow.com/v1/stable/tool?projectID=<projectID>&environmentAlias=<environmentAlias>', {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"description": "<string>",
"target": {
"global": true,
"playbookID": "<string>"
},
"messages": null,
"captureInputVariables": {},
"asyncExecution": false,
"inputVariables": {},
"captureResponse": {},
"type": "api",
"apiToolID": "<string>"
}),
});
const data = await response.json();import requests
response = requests.post(
'https://realtime-api.voiceflow.com/v1/stable/tool?projectID=<projectID>&environmentAlias=<environmentAlias>',
headers={'Authorization': 'Bearer <token>'},
json={
"description": "<string>",
"target": {
"global": True,
"playbookID": "<string>"
},
"messages": None,
"captureInputVariables": {},
"asyncExecution": False,
"inputVariables": {},
"captureResponse": {},
"type": "api",
"apiToolID": "<string>"
},
)
data = response.json()vf tool create --project-id <projectID> --environment-alias <environmentAlias> \
< body.json{
"tool": {
"id": "<string>",
"createdAt": "2026-09-10T00:00:00.000Z",
"updatedAt": "2026-09-10T00:00:00.000Z",
"messages": "<AgentToolMessages>",
"description": "<string>",
"captureInputVariables": {},
"type": "api",
"apiToolID": "<string>",
"asyncExecution": true,
"inputVariables": {},
"captureResponse": {}
}
}Authorizations
Query Parameters
Body
Show child attributes
Option 1
Show child attributes
Show child attributes
Option 2
Show child attributes
Option 3
Show child attributes
Option 4
Show child attributes
Response
201 - application/jsonAttaches an existing API tool, function, or MCP tool to the agent or to a playbook, and returns the attachment with its generated ID and wiring. The underlying resource is referenced by ID and is not created here.
Show child attributes
Option 1
Show child attributes
Option 2
Show child attributes
Option 3
Show child attributes
Option 4
Show child attributes
Was this page helpful?
Thanks for your feedback.