Tests
The scenarios a version must pass, drafted or written, and the runs that check it before your users see it.
POST/v1/deployments/{deployment_id}/scenariosAdd one: a pretend user, their goal, what success looks like, what must never happen.
Request9 fields
Path
deployment_idstringrequiredThe deployment's id (dep_...). The /v1/deployments routes also take its name.
- Type
string
Headers
Idempotency-KeystringSend the same key to retry this call safely for 24 hours.
- Type
string
Body
namestringrequiredIts name, 1 to 120 characters.
- Limits
- 1 to 120 characters.
- Example
Bag allowance
personastringrequiredWho the test user is, in a few sentences, up to 2,000 characters.
- Limits
- 1 to 2000 characters.
- Example
A first-time flyer, anxious, on a phone.
goalstringrequiredWhat the test user wants, in their words, up to 2,000 characters.
- Limits
- 1 to 2000 characters.
- Example
How many kilos can I take on booking TN-48213?
success_criteriastring[]requiredWhat a pass looks like: 1 to 12 lines, each up to 500 characters. Every one must be met.
- Limits
- 1 to 12 items.
- Example
["Says 7 kg of cabin baggage."]
must_neverstring[]What must never happen: up to 12 lines, each up to 500 characters. Any one fails the test.
- Default
[]- Limits
- At most 12 items.
- Example
["Promises a refund."]
tool_resultsmap of anyWhat each tool answers in this test, as any JSON, at most 20: a declared tool by its name, and a tool of an MCP server as <server>.<tool> (the server's slug), since a test never runs one for real unless the server marks it read-only. A tool with none answers an error.
- Example
{"get_booking":{"cabin_kg":7}}
approvesbooleantrue: the test user says yes to each approval for a tool of one of the deployment's own MCP servers, which in a test plays its tool_results entry or does not run. Absent or false: it says no to every approval. Anything else that waits for a yes is always declined.
- Example
true
Answers 20112 fields
namestringIts name, 1 to 120 characters.
- Limits
- 1 to 120 characters.
- Example
Bag allowance
personastringWho the test user is, in a few sentences, up to 2,000 characters.
- Limits
- 1 to 2000 characters.
- Example
A first-time flyer, anxious, on a phone.
goalstringWhat the test user wants, in their words, up to 2,000 characters.
- Limits
- 1 to 2000 characters.
- Example
How many kilos can I take on booking TN-48213?
success_criteriastring[]What a pass looks like: 1 to 12 lines, each up to 500 characters. Every one must be met.
- Limits
- 1 to 12 items.
- Example
["Says 7 kg of cabin baggage."]
must_neverstring[]What must never happen: up to 12 lines, each up to 500 characters. Any one fails the test.
- Default
[]- Limits
- At most 12 items.
- Example
["Promises a refund."]
tool_resultsmap of anymay be absentWhat each tool answers in this test, as any JSON, at most 20: a declared tool by its name, and a tool of an MCP server as <server>.<tool> (the server's slug), since a test never runs one for real unless the server marks it read-only. A tool with none answers an error.
- Example
{"get_booking":{"cabin_kg":7}}
approvesbooleanmay be absenttrue: the test user says yes to each approval for a tool of one of the deployment's own MCP servers, which in a test plays its tool_results entry or does not run. Absent or false: it says no to every approval. Anything else that waits for a yes is always declined.
- Example
true
idstringThe scenario's id.
- Type
string
object"scenario"Always scenario.
- Type
"scenario"
deployment_idstringThe deployment it tests.
- Type
string
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
No sample in your language for this route, so here it is over HTTP.
curl -X POST "$VESTRA_BASE_URL/v1/deployments/{deployment_id}/scenarios" \ -H "Authorization: Bearer $VESTRA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Bag allowance", "persona": "A first-time flyer, anxious, on a phone.", "goal": "How many kilos can I take on booking TN-48213?", "success_criteria": [ "Says 7 kg of cabin baggage." ] }'