list_features
List the project's features. generated is the normal ready state; inspect specStale before relying on a saved test. Individual dispatch also checks for linked test files and refuses an active generation.
Request
GET /api/v1/ops/projects/{project}/features[?status=]
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project | path | string | yes | The project's public id. |
status | query | string | no | Only features with this lifecycle status (e.g. generated). |
- cURL
- CLI
- MCP
curl -H "Authorization: Bearer $TESTVIBE_API_KEY" \
"$TESTVIBE_SERVER/api/v1/ops/projects/$PROJECT/features?status=generated"
testvibe features list --status generated
Tool list_features — optional project and status.
Response
[
{
"id": 12,
"name": "Login Functionality",
"kind": "feature",
"status": "generated",
"updatedUtc": "2026-06-10T14:32:07Z"
},
{
"id": 15,
"name": "Checkout",
"kind": "feature",
"status": "draft",
"updatedUtc": "2026-06-10T15:01:44Z"
}
]
See Features & the lifecycle for the status values.
Errors
| HTTP | When |
|---|---|
404 not_found | No such project in this workspace. |
Group filtering and paged REST results
The CLI testvibe features list --group Authentication and MCP list_features({group: "Authentication"}) filter the ordinary array using the group catalog. Both can combine group with status; an unknown group name is an error.
REST switches to a different response shape when any of generatedOnly, search, group, offset, limit, includeSuggestions, or version_tag is supplied:
{ "items": [], "total": 0, "complete": true, "groups": [], "versionTags": [] }
Paged requests default to limit=200 (maximum 2,000). group accepts an internal id, public group id, name, or ungrouped. search filters names; generatedOnly=true selects runnable entries; includeSuggestions=true includes suggestions. The legacy status filter applies to the array form, not this paged branch. Use total / complete to detect a partial result.
Array rows also include group/version metadata, specStale, and creation, editing, and generation attribution fields. Fields without recorded attribution can be null.