Skip to main content

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
ParameterInTypeRequiredDescription
projectpathstringyesThe project's public id.
featurepathstringyesFeature id or name.
curl -H "Authorization: Bearer $TESTVIBE_API_KEY" \
"$TESTVIBE_SERVER/api/v1/ops/projects/$PROJECT/features/12/generation"

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" }
]
}
  • featureStatus describes the feature row; isTerminal / terminalReason describe the operation outcome.
  • runnerStarted distinguishes "queued, sandbox warming up" (false) from "actively working" (true).
  • sections mirror 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​

HTTPWhen
404 not_foundNo 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.