BashBrainTeammatesPricingDevelopersGet a test key

Deployments

How your Bash is set up, in versions: apply a whole vestra.yaml, promote, roll back, and the interview that drafts the file.

Send Authorization: Bearer vk_test_... on every call. Every route of Deployments.

POST/v1/deployments/interviewBuild a deployment by talking to Bash: describe the job, answer its questions, receive a draft version.

Your API key, scope setup or all. On the card: init. Every call here is a checked sample.

Request4 fields

Headers

Idempotency-KeystringSend the same key to retry this call safely for 24 hours.
Type
string

Body

namestringrequiredThe name of the new deployment the interview makes, 1 to 120 characters. It is always new: a taken name gets a numbered slug, and a taken slug is refused with 409 slug_taken.
Limits
1 to 120 characters.
Example
Trip rescue
slugstringIts name in URLs and refs. Absent: made from name.
Example
trip-rescue
jobstringrequiredWhat Bash should do for your users, in your own words, 20 to 4,000 characters. Bash asks what it needs, then drafts the file.
Limits
20 to 4000 characters.
Example
Help Tripnest travellers fix broken trips: rebook, refund, find a hotel.
Answers 2023 fields
object"deployment_interview"Always deployment_interview.
Type
"deployment_interview"
deploymentobjectThe deployment the interview drafts.
idstringThe deployment's id.
Example
dep_8f2k
object"deployment"Always deployment.
Type
"deployment"
namestringIts name, as people read it.
Type
string
slugstringIts name in URLs and refs: send it where a route takes {deployment_id}.
Example
trip-rescue
descriptionstringWhat it is for; empty when none was given.
Type
string
base"bash"What it is built on: always bash.
Type
"bash"
status"active" | "archived"active, or archived (put away: no new conversation or version reaches it).
Type
"active" | "archived"
draft_versionintegerThe version test keys run. A new save moves it there; a promote with a test key moves it to the version named, older ones included.
Type
integer
live_versioninteger | nullThe version live keys run; null until one is promoted.
Type
integer | null
created_atstringWhen it was made, as an ISO 8601 date and time in UTC.
Type
string
updated_atstringWhen it last changed, as an ISO 8601 date and time in UTC.
Type
string
conversation_idstringThe interview's conversation: follow its events for Bash's questions, and answer with POST /v1/conversations/{conversation_id}/messages.
Type
string
TypeScript
const draft = vestra.init({ describe: 'Help Tripnest travellers fix broken trips.' });await draft.started;
Python
draft = vestra.init("Help Tripnest travellers fix broken trips.")started = draft.started
CLI
vestra init "Help Tripnest travellers fix broken trips." --answers answers.txt
HTTP
# Describe the job. The interview runs as a conversation, so its questions arrive like any other reply.curl "$VESTRA_BASE_URL/v1/deployments/interview" \  -H "Authorization: Bearer $VESTRA_API_KEY" \  -H "Content-Type: application/json" \  -d '{ "name": "Trip rescue", "slug": "trip-rescue", "job": "Help Tripnest travellers fix broken trips: cancellations, delays, missed connections. Look bookings up with get_booking." }' # Answer its questions. Follow the conversation the response names, and reply in it.curl -N "$VESTRA_BASE_URL/v1/conversations/conv_iv7/events" \  -H "Authorization: Bearer $VESTRA_API_KEY" curl "$VESTRA_BASE_URL/v1/conversations/conv_iv7/messages" \  -H "Authorization: Bearer $VESTRA_API_KEY" \  -H "Content-Type: application/json" \  -d '{ "message": "Ask first before paying a fare difference." }' # Save the draft to your repo. When the interview ends, download the draft as vestra.yaml, starter tests# included.curl "$VESTRA_BASE_URL/v1/deployments/trip-rescue?format=yaml" \  -H "Authorization: Bearer $VESTRA_API_KEY" \  -o vestra.yaml # Read the closing words. The draft version (the deployment's draft_version) has them in its interview field:# what it set up, the tools your code must answer, the spending cap per task, the tests, and the next steps.curl "$VESTRA_BASE_URL/v1/deployments/trip-rescue/versions/2" \  -H "Authorization: Bearer $VESTRA_API_KEY"
MCP
{  "method": "tools/call",  "params": {    "name": "init",    "arguments": {      "describe": "Help Tripnest travellers fix broken trips: cancellations, delays, missed connections. Look bookings up with get_booking.",      "for": "customers"    }  }}