The MX8 Labs Research Platform API gives developers and analysts programmatic access to survey data and reports. It’s read-only and designed for integration into your existing tools and workflows.
Common Use Cases
You might use the API to:
Integrate with BI/reporting tools like Power BI, Tableau, or Looker
Feed survey data into an LLM for summarisation, comparison, or narrative generation
Automate QA or alerting on survey response rates and delivery
Compare survey waves or pull historical data snapshots
Power internal dashboards without needing direct access to the UI
API Documentation
Interactive OpenAPI docs:
Authentication
Every request requires either:
Bearer token (via Auth0)
API key in the access_token header
To request an API key, use the Intercom chat at the bottom left of the MX8 platform.
Endpoints Overview
1. List Surveys
GET /v2/surveys
Purpose: Fetch a list of all available surveys your account can access.
Use Case: Useful when syncing surveys into a third-party tool or browsing metadata before selecting a survey to report on.
Sample Response:
[
{
"id": 101,
"name": "Brand Tracker 2025 Q1",
"project": "PepsiCo",
"current_responses": 420,
"target_responses": 500,
"last_response": "2025-06-25T11:32:00Z"
},
{
"id": 102,
"name": "Concept Test – Ad Variant B",
"project": "Nestlé",
"current_responses": 300,
"target_responses": 300,
"last_response": "2025-06-27T16:14:43Z"
}
// ...
]
2. Get Survey Details
GET /v2/surveys/{survey_id}
Purpose: Retrieve detailed metadata for a single survey, including the question set and internal code.
Use Case: When configuring automated reporting or generating a dynamic UI for cross-tab setup.
Sample Response:
{
"id": 101,
"name": "Brand Tracker 2025 Q1",
"project": "PepsiCo",
"current_responses": 420,
"target_responses": 500,
"last_response": "2025-06-25T11:32:00Z",
"code": "...",
"questions": [
{
"id": 1001,
"question_text": "Which of these brands do you recognise?",
"reporting_label": "Brand Recognition"
},
{
"id": 1002,
"question_text": "Which of these have you purchased in the last 30 days?",
"reporting_label": "Recent Purchase"
}
// ...
]
}
3. Run a Report
POST /v2/surveys/{survey_id}/report
Purpose: Generate a cross-tab report based on a specific configuration of rows and columns.
Use Case: Core endpoint for pulling real-time reporting data into external tools, or piping data into LLMs for analysis.
Request Body:
{
"row_ids": [1001],
"column_ids": [1002]
}
Sample Response:
{
"headerColumns": [
{
"key": "recent_purchase",
"title": "Recent Purchase",
"headers": {
"Pepsi": "Pepsi",
"Coke": "Coke"
}
}
// ...
],
"valueColumns": [
{
"key": "brand_recognition",
"title": "Brand Recognition",
"headers": {
"Pepsi": "Pepsi",
"Coke": "Coke"
}
}
// ...
],
"rows": [
{
"id": "row-1",
"headerValues": ["Pepsi"],
"columnValues": [
{
"key": "brand_recognition",
"n": 150,
"val": 0.76,
"err": 0.04,
"type": "pct_bar",
"max": 1,
"stat_test": null
}
// ...
]
}
// ...
]
}
Error Handling
All endpoints may return:
422 Validation Error: usually indicates malformed input
Errors include location (loc), message (msg), and type (type) for easier debugging
Questions?
Use the chat at the bottom-left of this page to get help or request access credentials.