get_generation_status
The feature's generation state: its lifecycle status plus the live per-section progress of the latest generation.
Request
GET /api/v1/ops/projects/{project}/features/{feature}/generation
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project | path | string | yes | The project's public id. |
feature | path | string | yes | Feature id or name. |
- cURL
- CLI
- MCP
curl -H "Authorization: Bearer $TESTVIBE_API_KEY" \
"$TESTVIBE_SERVER/api/v1/ops/projects/$PROJECT/features/12/generation"
testvibe generate log "Login Functionality" --json
Tool get_generation_status — { "feature": "12" }.
Response
{
"featureId": 12,
"featureName": "Login Functionality",
"featureStatus": "generating",
"requestId": "a1b2c3d4-…",
"runnerStarted": true,
"overallStatus": "in_progress",
"overallConclusion": null,
"updatedUtc": "2026-06-10T14:30:12Z",
"sections": [
{ "section": "login-functionality", "status": "in_progress", "conclusion": null, "updatedUtc": "2026-06-10T14:30:12Z" }
]
}
featureStatusdescribes the feature row;isTerminal/terminalReasondescribe the operation outcome.runnerStarteddistinguishes "queued, sandbox warming up" (false) from "actively working" (true).sectionsmirror the live progress drawer in the app, one entry per generated section.
If the feature has never been generated, the response includes the feature fields, isTerminal: true, terminalReason: "never_generated", awaitingInput: false, and recommendedPollAfterSeconds: 0; it has no requestId or sections.
Errors
| HTTP | When |
|---|---|
404 not_found | No such feature in this project. |
Completion, questions, and cost
Use isTerminal as the completion flag; featureStatus and overallStatus can briefly disagree. terminalReason is succeeded, failed, cancelled, never_generated, or unknown. recommendedPollAfterSeconds is 3 while active, 30 while awaiting input, and 0 after completion.
awaitingInput: true means work is paused; pendingInput contains the question, options, and any fields. Answer through POST …/generation/answer or MCP answer_generation; do not start a second generation to answer it. See answering a paused generation.
credits reports {total, compute, ai} for this generation (or null if unavailable). statusReason and run-level logLines can explain failures before any section exists. Section status is reconciled with the terminal outcome; rawStatus preserves the stored value. When available, contractCoverage maps authored steps to implemented, substituted, omitted, or blocked. A successful verification is not proof that every authored step was implemented: also inspect contractCoverage.fullyImplemented.
The CLI example above reads the transcript, not this exact status document. Use the REST GET or MCP get_generation_status for status. testvibe generate <feature> --watch starts new work.