API Reference
Get Report Status
Poll the status of a report. When completed, the response embeds the full result.
GET /api/v1/reports/{request_id}Path parameters
| Parameter | Type | Description |
|---|---|---|
request_id | string | The ID returned by POST /api/v1/reports. |
Example
curl https://api.moevox.com/api/v1/reports/req_4f3a9c21e8b7d6c5 \ -H "Authorization: Bearer moe_sk_live_your_key_here"
Response while running — 200 OK
{
"request_id": "req_4f3a9c21e8b7d6c5",
"status": "sampling",
"progress": {
"stage": "sampling"
}
}Response when failed — 200 OK
{
"request_id": "req_4f3a9c21e8b7d6c5",
"status": "failed",
"error": {
"code": "report_generation_failed",
"message": "Questionnaire generation timed out. Please retry."
}
}Response when completed — 200 OK
{
"request_id": "req_4f3a9c21e8b7d6c5",
"status": "completed",
"result": {
"title": "Which pricing plan should we launch first?",
"report_url": "https://moevox.com/report/which-pricing-plan-should-we-launch-first-5f3a9c21e8b7",
"research_input": {
"question": "Which pricing plan should we launch first?",
"options": ["$29/month", "$49/month"],
"language": "en",
"audience_filters": {},
"sample_size": 100
},
"statistics": {
"target_respondent_count": 100,
"candidate_respondent_count": 120,
"sampled_respondent_count": 100,
"successful_respondent_count": 98,
"failed_respondent_count": 2,
"completion_rate": 0.98,
"failure_rate": 0.02
},
"analysis": {
"schema_version": "v1",
"analysis_version": "report_snapshot_v2",
"overview": { "headline": "...", "summary": "..." },
"winner": { "option": "Monthly $29", "support": 0.42 },
"confidence": { "level": "moderate", "reason": "..." },
"segment_breakdown": { "segments": [] },
"driver_breakdown": { "drivers": [] },
"risk_breakdown": { "risks": [] },
"open_text_themes": [],
"recommendation": { "summary": "..." }
},
"sample_data": {
"questionnaire": { "questions": [{ "id": "q1", "title": "...", "type": "single_choice" }] },
"respondents": [{ "respondent_id": "...", "display_name": "...", "answers": {} }]
},
"credits_used": 100,
"credits_left": 775
}
}Response fields
| Field | Type | Description |
|---|---|---|
status | string | queued · generating_questionnaire · sampling · completed · failed |
progress | object | Present while running. Contains the current stage. |
error | object | Present when status is failed. |
result.title | string | Report title, also rendered as the public report page H1. |
result.report_url | string | Public URL of the generated report. |
result.research_input | object | The research input settings: question, options, language, audience_filters, and sample_size. |
result.statistics | object | Sampling stats: target / candidate / sampled / successful / failed respondent counts plus completion_rate and failure_rate. |
result.analysis | object | Structured findings: overview, winner, confidence, segments, drivers, risks, themes, and a recommendation. |
result.sample_data | object | Raw data: the questionnaire and every respondent answer. |
result.credits_used | integer | Exact credits consumed by this report. |
result.credits_left | integer | Your balance after settlement. |
⚠️ 注意:完成态响应体很大。analysis(完整结构化结论)+sample_data(问卷 + 每位受访者逐题回答) 都内嵌在result中,样本越多响应体越大。请勿把整个 payload 原样回显给用户; 建议只取research_input/statistics作上下文,再结合analysis归纳结论,并引导用户访问report_url查看完整报告。
Errors
| Status | When |
|---|---|
401 | Missing, invalid, or revoked API key. |
404 | The request_id does not exist or does not belong to your account. |