Moevox API

Quickstart

Create an API key and generate your first research report.

1. Create an API key

Open the research workspace, go to API keys in your account menu, and create a key. The full key is shown only once — store it somewhere safe.

Keys look like this:

API key format
moe_sk_live_ followed by 43 random characters

2. Check your credits

curl
curl https://api.moevox.com/api/v1/credits \
  -H "Authorization: Bearer moe_sk_live_your_key_here"
Response
{
  "credits_left": 1000
}

3. Submit a report

curl
curl -X POST https://api.moevox.com/api/v1/reports \
  -H "Authorization: Bearer moe_sk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "question": "Which landing page headline converts best?",
    "options": [
      "AI research for product teams",
      "Market validation, automated",
      "Know your market in minutes"
    ],
    "sample_size": 100
  }'

The response contains a request_id. The pipeline runs async and takes a few minutes.

4. Poll for the result

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

Poll every 5 seconds while the questionnaire is being generated, then every 15 seconds during sampling. The status moves through queuedgenerating_questionnaire samplingcompleted. When completed, the response embeds the full result:

Response — completed
{
  "request_id": "req_4f3a9c21e8b7d6c5",
  "status": "completed",
  "result": {
    "report_url": "https://moevox.com/report/...",
    "title": "Which pricing plan should we launch first?",
    "analysis": { "overview": { "headline": "..." } },
    "sample_data": {
      "questionnaire": { "questions": [] },
      "respondents": []
    },
    "credits_used": 100,
    "credits_left": 900
  }
}

5. Use the report

Open report_url in a browser for the public report page. The analysis JSON contains the structured findings (winner, confidence, segment breakdown, risks, recommendation), and sample_data contains every respondent answer.

6. The whole flow in JavaScript

The same submit-and-poll loop in one snippet (Node.js 18+, no dependencies). Save it as .mjs or wrap the code in anasync function (it uses top-level await):

Node.js
const BASE_URL = 'https://api.moevox.com';
const API_KEY = 'moe_sk_live_your_key_here';

const headers = { Authorization: `Bearer ${API_KEY}` };

async function createReport() {
  const res = await fetch(`${BASE_URL}/api/v1/reports`, {
    method: 'POST',
    headers: { ...headers, 'Content-Type': 'application/json' },
    body: JSON.stringify({
      question: 'Which pricing plan should we launch first?',
      options: ['Monthly $29', 'Monthly $49', 'Annual $299'],
      sample_size: 100,
    }),
  });
  if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
  return res.json(); // { request_id, status: 'queued', credits_estimated, credits_left }
}

async function pollUntilDone(requestId) {
  for (;;) {
    const res = await fetch(`${BASE_URL}/api/v1/reports/${requestId}`, { headers });
    const data = await res.json();
    if (data.status === 'completed' || data.status === 'failed') return data;
    await new Promise((r) => setTimeout(r, 5000));
  }
}

const { request_id } = await createReport();
const report = await pollUntilDone(request_id);
console.log(report.result); // report_url, analysis, sample_data, credits_used, credits_left

This mirrors the curl flow above. For a polling loop that also handles credits and errors, copy the AI Prompt.