Moevox API
API Reference

Get Report Status

Poll the status of a report. When completed, the response embeds the full result.

Endpoint
GET /api/v1/reports/{request_id}

Path parameters

ParameterTypeDescription
request_idstringThe ID returned by POST /api/v1/reports.

Example

curl
curl https://api.moevox.com/api/v1/reports/req_4f3a9c21e8b7d6c5 \
  -H "Authorization: Bearer moe_sk_live_your_key_here"

Response while running — 200 OK

Response body
{
  "request_id": "req_4f3a9c21e8b7d6c5",
  "status": "sampling",
  "progress": {
    "stage": "sampling"
  }
}

Response when failed — 200 OK

Response body
{
  "request_id": "req_4f3a9c21e8b7d6c5",
  "status": "failed",
  "error": {
    "code": "report_generation_failed",
    "message": "Questionnaire generation timed out. Please retry."
  }
}

Response when completed — 200 OK

Response body
{
  "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

FieldTypeDescription
statusstringqueued · generating_questionnaire · sampling · completed · failed
progressobjectPresent while running. Contains the current stage.
errorobjectPresent when status is failed.
result.titlestringReport title, also rendered as the public report page H1.
result.report_urlstringPublic URL of the generated report.
result.research_inputobjectThe research input settings: question, options, language, audience_filters, and sample_size.
result.statisticsobjectSampling stats: target / candidate / sampled / successful / failed respondent counts plus completion_rate and failure_rate.
result.analysisobjectStructured findings: overview, winner, confidence, segments, drivers, risks, themes, and a recommendation.
result.sample_dataobjectRaw data: the questionnaire and every respondent answer.
result.credits_usedintegerExact credits consumed by this report.
result.credits_leftintegerYour balance after settlement.
⚠️ 注意:完成态响应体很大。 analysis(完整结构化结论)+ sample_data(问卷 + 每位受访者逐题回答) 都内嵌在 result 中,样本越多响应体越大。请勿把整个 payload 原样回显给用户; 建议只取 research_input / statistics 作上下文,再结合 analysis 归纳结论,并引导用户访问 report_url 查看完整报告。

Errors

StatusWhen
401Missing, invalid, or revoked API key.
404The request_id does not exist or does not belong to your account.