run_suite
Dispatch runs for several features in one call — one run per feature, on the same spine as run_feature. Omit features to run every feature with status generated (the whole runnable suite). Returns the dispatched runIds immediately.
A feature whose dispatch fails (e.g. no generated tests) is reported per-item with an error instead of aborting the rest.
Request
POST /api/v1/ops/projects/{project}/runs
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project | path | string | yes | The project's public id. |
features | body | string[] | no | Feature ids or names. Omit to run all generated features. |
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 '{}' \
"$TESTVIBE_SERVER/api/v1/ops/projects/$PROJECT/runs"
testvibe run --all --wait --timeout 1800 # the whole suite; exit 1 on any failure
testvibe run Login Checkout --wait
Tool run_suite — {} for the whole suite, or { "features": ["Login", "Checkout"] }. Follow each runId with wait_for_run.
Response
202 Accepted
{
"runs": [
{ "featureId": 12, "featureName": "Login Functionality", "runId": 215 },
{ "featureId": 15, "featureName": "Checkout", "runId": 216 },
{ "featureId": 18, "featureName": "Search", "error": "conflict", "message": "This feature has no generated tests yet — generate them first." }
]
}
Poll each runId with wait_for_run / get_run.
testvibe run --all --wait does that polling for you under one --timeout budget for the whole suite (not one per feature) and prints a summary. A run it stopped watching is reported as no verdict, never as a failure: the command exits 1 only if something actually failed, and 3 if nothing failed but a run was still unfinished. See the CLI wait contract.
Errors
| HTTP | When |
|---|---|
404 not_found | No such project, or a named feature doesn't exist. |
409 conflict | features was omitted and the project has no generated features. |
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.
Select, preview, or combine runs
REST select: {group?, versionTag?, search?, includeSuggestions?} chooses features server-side instead of features. Add preview: true to return 200 with matched, runnable, included, excluded (with reasons), and complete without dispatch. Preview requires select; check complete and narrow a selection that exceeds the 2,000-item page ceiling before dispatching. A selection matching no runnable tests returns 409 on dispatch.
MCP uses flat selectGroup, selectVersionTag, and selectSearch with preview. It does not expose every REST selector.
Pass single: true or multiple configs to dispatch one combined run for the selected features × configurations. The 202 response is {runId, runs:[{runId}]}. Without this option, the ordinary runs array contains one per-feature result. configs takes precedence over scalar config.
An explicit non-empty select replaces the features selection. Avoid mixing them. Keep checking each returned result for dispatch errors before waiting for run ids.