run_feature
Dispatch a test run for a feature. Returns the runId immediately; the sandbox executes in the background (duration depends on its tests, queue, and target).
The feature must have linked JavaScript test files under Features/ and must not be generating. Missing tests or an active generation return 409 conflict. generated is the normal ready state, but the dispatch validates stored files rather than only the status string.
Request
POST /api/v1/ops/projects/{project}/features/{feature}/run
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project | path | string | yes | The project's public id. |
feature | path | string | yes | Feature id or name. |
config | body | string | no | Playwright configuration name (default Default — see list_configs). |
siteUrl | body | string | no | Test site URL override. |
- cURL
- CLI
- MCP
curl -X POST -H "Authorization: Bearer $TESTVIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"config": "Mobile"}' \
"$TESTVIBE_SERVER/api/v1/ops/projects/$PROJECT/features/12/run"
testvibe run "Login Functionality" --config Mobile --wait --timeout 900
Tool run_feature — { "feature": "Login Functionality", "config": "Mobile" }. Follow with wait_for_run.
Response
202 Accepted
{ "runId": 214, "featureId": 12 }
Poll get_run (or use wait_for_run) until the run is terminal — queued, allocating and running are all still in flight. testvibe run … --wait does it for you and exits 0 passed / 1 failed / 3 no verdict (see the CLI wait contract).
Errors
| HTTP | When |
|---|---|
404 not_found | No such feature in this project. |
409 conflict | No linked tests, active generation, missing target/input values, or another dispatch gate rejected the run. |
Pass notify: true (MCP/REST) or --notify (CLI) to opt into completion notifications; API-originated dispatches are silent by default. Storage admission can return 507 storage_quota_exceeded; other dispatch refusals follow the shared error contract.