Skip to main content

MX8 Labs Research Platform API

Quick start guide to using the API

Updated over a week ago

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.

Did this answer your question?