# Account Setup
Source: https://docs.redem.io/account-setup
Join ReDem and get started in just a few steps.
## Sign Up and Get Started
To start using ReDem, simply create your account. The setup process is quick and straightforward:
1. Go to the [registration page ](https://app.redem.io/auth/register).
2. Enter your organization’s name, your first and last name, email address, and choose a password.
3. Click “Register” to complete your registration.
Once registered, we’ll contact you to confirm your preferred subscription. After your plan is activated, you’ll receive an email with an activation link. Click the link to activate your account and start using ReDem. 🎊
## Want to learn more?
[Book a demo](https://meetings.hubspot.com/j-redem/get-to-know-redem) with our management team to see how ReDem can support your workflow.
We’re glad to have you on board. Our team is happy to support.
# API Keys
Source: https://docs.redem.io/api-reference/api-specifications/api-keys
Learn how to manage and use API keys within ReDem.
API keys let you call the ReDem API from your own systems. When you create a key, you choose a **permission level** that defines which endpoints it may call.
## Permission levels
You create keys with one of two permission levels:
| Level | Where to use it | What it can call |
| ----------- | ------------------------------------------------------------------------------------------------------------- | --------------------------- |
| **Private** | Backend servers, secure automation, and integrations where the key never reaches a browser or end-user device | **All** ReDem API endpoints |
| **Public** | Browser, mobile app, or any client-side integration where the key **must** be present on the device | **`addRespondent` only** |
Use a **public** key when your integration cannot keep the key on a server—for example, a script or app that runs directly in the respondent’s browser or on their phone and submits data via `addRespondent`.
Use a **private** key whenever the request originates from infrastructure you control (your backend, server-side survey tools, ETL jobs, etc.). Private keys unlock the full API (surveys, configuration, retrieval, and `addRespondent`).
**Private API keys must never** be embedded in frontend code, shipped in mobile apps, checked into repositories, or shared with third parties. If a private key is exposed—whether in logs, client bundles, or elsewhere—**delete that key immediately** in ReDem and **create a new private key**. Treat a leaked private key as compromised.
Public keys are designed to be visible on the client; they still authenticate your company and are subject to rate limits, but they **cannot** call endpoints other than `addRespondent`. Any other route requires a private key.
In the [API reference](/api-reference/intro/introduction), each operation’s request body schema includes an **Authentication** note stating whether a **private** or **public** key is allowed.
## Create API Key
You can create an API key by following these steps:
To create an API Key, you'll need a ReDem account. Don’t have an account yet?
Get started by [setting up your account](/account-setup).
Once you are logged in to [ReDem Application](https://app.redem.io/), navigate to the API Keys section in your profile.
Click on the "Create API Key" button to generate a new key.
Give your API key a clear, descriptive name so you can identify its purpose later, and choose **Private (server-side)** or **Public (browser / client)** according to [permission levels](#permission-levels) above.
Once you’ve created an API key, copy it and store it somewhere safe. You will not be able to see it again after you leave the screen.
Send the key in the api-key header on requests your integration is allowed to make (see your key’s permission level).
```http theme={null}
api-key: your_api_key_xxx
```
For submitting respondents from the client, use a public key with the addRespondent endpoint. For all other API calls, use a private key from your backend.
**Best practices for API key management:**
* Use separate keys for testing and live surveys
* Prefer a **private** key for server-side integrations; use a **public** key only when the key must live on the client.
* If any key is compromised or exposed inappropriately, delete it immediately and generate a new one.
## Rate limits
All API requests authenticated with `api-key` are subject to per-key rate limiting.
* `addRespondent`:
* Standard API keys: 1200 requests per minute
* Premium API keys (configured per client): up to 1600 requests per minute
* Other endpoints:
* 1200 requests per minute
If you exceed the limit, you will receive a `429` response:
```json theme={null}
{
"error": "rate_limit_exceeded",
"message": "This API key exceeded 1200 requests per minute.",
"statusCode": 429
}
```
# Rate Limits
Source: https://docs.redem.io/api-reference/api-specifications/rate-limits
Learn about ReDem’s API rate limits.
## Rate Limits & Performance Considerations
Rate limits are enforced **per API key** to protect platform stability and ensure fair usage across clients.
### Endpoint-specific limits
#### `addRespondent`
* **Standard API keys**: **600 requests / minute**
* **Premium API keys**: **1200 requests / minute**
#### All other endpoints (excluding `addRespondent`)
* **1200 requests / minute** per API key
⭕ **Please note:** If you exceed the configured limits, requests may be temporarily rejected (HTTP `429`).
**🔦 Tip:**
For clients with specific performance requirements or higher scalability needs, contact `info@redem.io` to explore the **Dedicated Tier**.
# Response Structure
Source: https://docs.redem.io/api-reference/api-specifications/response-structure
Understand the standardized response format used across all ReDem endpoints.
The ReDem API delivers clear, consistent, and well-structured responses to ensure seamless integration and efficient processing. Each response follows a standardized format aligned with **RESTful principles** and **OpenAPI standards**.
This structure enhances transparency, simplifies parsing and error handling, and supports fast debugging—ensuring reliability and predictability in every interaction.
### ✅ Success Response
The success response of the ReDem API indicates that the request has been processed successfully. This response is well-structured and provides crucial information about the request's status.
The success response follows a standardized format to ensure consistency, predictability, and ease of use for developers.
Success responses are structured as follows:
* `success`: A variable indicating whether the operation was successful.
* `message`: A variable that human-readable message providing additional context or confirmation of the requested action.
* `results`: This object serves as a container to hold the results for the requested data, encapsulating all relevant information and outputs in a structured format.
```json Sample success response for "Add Respondent" theme={null}
{
"success": true,
"message": "Respondent Evaluated successfully",
"results": {
"status": "JOB_COMPLETED",
"respondentQuality": {
"isExcluded": true,
"reasonsForExclusion": [
"Open Ended Score Threshold",
"Coherence Score Threshold"
],
"redemScore": 85,
// ... rest of the response object ...
}
}
}
```
### ⚠️ Error Response
The error response of the ReDem API is returned when a request fails due to various reasons. This response provides clear, actionable information to help developers identify and resolve the cause of the error. The response format is consistent, ensuring easy parsing and fast debugging.
Error responses are structured as follows:
* `success`: A variable indicating whether the operation was successful.
* `message`: A variable that human-readable message providing additional context or confirmation of the requested action.
* `errors`: This object serves as a container to hold the errors for the requested data.
```json Sample error response for "Add Respondent" theme={null}
{
"success": false,
"message": "Validation Error",
"errors": {
"0": "\"surveyName\" is required",
"1": "\"dataPoints[0].dataPointId\" is required"
}
}
```
# Add Respondent
Source: https://docs.redem.io/api-reference/endpoints/v3/addRespondent
POST /v3/addRespondent
API endpoint for adding a new respondent with quality check data (v3 with OES v3 categories)
# Credit Calculation
Source: https://docs.redem.io/api-reference/endpoints/v3/creditCalculation
POST /v3/creditCalculation
API endpoint for calculating the required number of credits for a respondent.
If you need to estimate the number of credits required to add a respondent, you can use this endpoint.
This endpoint is optional and serves informational purposes only. It provides an estimate of the credits required based on the selected quality scores.
# Delete Respondents
Source: https://docs.redem.io/api-reference/endpoints/v3/deleteRespondents
POST /v3/deleteRespondents
Delete one or more respondents from a survey and clean up related data.
Delete one or more respondents from a survey. Also removes related metadata, interaction data, and flattened records. If no respondents remain for the survey, the survey is deleted automatically.
# Delete Surveys
Source: https://docs.redem.io/api-reference/endpoints/v3/deleteSurveys
POST /v3/deleteSurveys
Delete one or more surveys and all associated data that you own.
Delete one or more surveys that you own. This removes all associated data: respondents, respondent metadata, interaction data, flattened collections, quality settings, and the survey itself.
# Get All Respondents
Source: https://docs.redem.io/api-reference/endpoints/v3/getAllRespondents
POST /v3/getAllRespondents
Retrieve all respondents for a survey.
# Get Respondent
Source: https://docs.redem.io/api-reference/endpoints/v3/getRespondent
POST /v3/getRespondent
Retrieve the quality check results and status for a specific respondent.
# Quality Check Suggestions
Source: https://docs.redem.io/api-reference/endpoints/v3/qualityCheckSuggestions
POST /v3/qualityCheckSuggestions
Generate smart quality-check suggestions from a survey questionnaire structure. Partners can use this to help their users set up API projects in ReDem with recommendations that align with ReDem best practices — reducing manual configuration effort for OES, GQS, CHS, and BAS.
Use the returned question IDs, keywords, and cleaning settings when calling `POST /v3/addRespondent`.
TS is not suggested by this endpoint. DES suggestions are coming soon.
Generate smart quality-check suggestions from a survey questionnaire structure. Partners can use this endpoint to help their users set up API projects in ReDem with recommendations that align with [ReDem best practices](/knowledge-base/best-practices/best-practice-setup) — reducing the manual effort of choosing which questions to score and how to configure them.
**What you get**
* Suggested **OES** questions with keywords and duplicate-check flags
* Suggested **GQS** grids with pattern-check recommendations
* Suggested **CHS** question IDs plus a `surveyDescription`
* Suggested **BAS** tracking targets (derived from suggested OES questions)
* Recommended default **cleaning settings** for API v3
**Notes**
* **TS** is not suggested here; configure it separately in your integration. **DES** suggestions are coming soon.
* Cap suggestion volume with `allInclusive` (default `true`) to match all-inclusive plan limits.
# Recalculate Respondents
Source: https://docs.redem.io/api-reference/endpoints/v3/recalculateRespondents
POST /v3/recalculateRespondents
This endpoint allows you to recalculate specific quality checks for a list of respondents within a given survey. It is useful for re-running checks with updated parameters or if they were skipped previously. Note that this operation requires the survey to be created with API version v3 and after the feature release date (2025-12-02).
This endpoint allows you to recalculate specific quality checks for a list of respondents within a survey. It is useful when you need to re-evaluate respondents with updated check configurations (e.g., enabling OES or Duplicate Detection) or if previous checks were skipped.
**Prerequisites:**
* The survey must have been created with API version `v3`.
* The feature must be enabled and the survey created after the feature release date (2025-12-02).
* You must provide valid `respondentIds` belonging to the specified `surveyName`.
* The number of `respondentIds` per request is limited to 100.
# Restart Survey
Source: https://docs.redem.io/api-reference/endpoints/v3/restartSurvey
POST /v3/restartSurvey
Restart a previously stopped survey to allow new respondent additions.
A **restarted survey resumes accepting new respondents**, allowing further additions after being previously stopped.
# Stop Survey
Source: https://docs.redem.io/api-reference/endpoints/v3/stopSurvey
POST /v3/stopSurvey
Stop a survey to prevent further respondent additions.
A **stopped survey no longer accepts new respondents**, preventing any further additions.
# Update Respondents Excluded Status
Source: https://docs.redem.io/api-reference/endpoints/v3/updateRespondentsExcludedStatus
POST /v3/updateRespondentsExcludedStatus
Updates the exclusion status of respondents within a specific survey.
This endpoint allows you to manually update the exclusion status of one or more respondents within a survey. It acts as a toggle — if a respondent is currently excluded, they will be included after the update, and vice versa. The endpoint also automatically updates the `reasonsForExclusion` field to reflect the respondent’s new status.
# Asynchronous Response
Source: https://docs.redem.io/api-reference/intro/asynchronous-response
Learn how to integrate ReDem with your survey tools
To integrate with ReDem, you must have a ReDem account.
Don’t have an account yet? Get started by [setting up your account](/account-setup).
Contact us at [support@redem.io](mailto:support@redem.io) to request an API key.
Ensure your data is formatted correctly according to the guidelines before sending it via the API. Below is a sample request object to help you structure your data properly.
For an asynchronous response approach, the `synchronousResponse` field **must always be set to `false`**. This allows you to continue engaging with your respondents without waiting for a response from ReDem.
```javascript Example request body theme={null}
{
"respondentId": "RESP497770",
"surveyName": "Global Vacation Insights 2024",
"dataPoints": [
{
"qualityCheck": "OES",
"dataPointId": "Q1",
"question": "Where did you spend your last vacation?",
"answer": "We were at Lake Garda in Italy",
"keywords": ["Beach", "Mountains", "Lake", "Museums", "Europe", "Asia", "Destination"],
"activateDuplicateDetection": true,
"allowedLanguages": ["en"]
},
{
"qualityCheck": "TS",
"dataPointId": "durationQ1",
"duration": 42670
},
// ... other data points ...
],
"activateCleaning": true,
"cleaningSettings": {
"redemScore": 60,
"OES": {
"score": 60,
"minDataPoints":2,
"categories": {
"BAD_LANGUAGE": {"activate": true, "minDataPoints":2},
"GIBBERISH": {"activate": true, "minDataPoints":2},
"OFF_TOPIC": {"activate": true, "minDataPoints":2},
"WRONG_LANGUAGE": {"activate": true, "minDataPoints":2},
"AI_SUSPECT": {"activate": true, "minDataPoints":2},
// ... other categories ...
}
},
"CHS": {"score": 50},
"GQS": {"score": 40, "minDataPoints":2},
"TS": {"score": 30}
},
"synchronousResponse": false,
}
```
For a full example and detailed guidance on using this request object, visit the [Add Respondent](/api-reference/endpoints/v3/addRespondent) endpoint. It includes explanations of all fields and their usage.
At the end of the survey, just before the respondent reaches the ‘complete’ state, submit an API request to ReDem including the respondent’s information and your API key.
```javascript Example request (JavaScript) theme={null}
const options = {
method: 'POST',
headers: {Authorization: 'Bearer ', 'Content-Type': 'application/json'},
body: '{"respondentId":"RESP497770","projectName":"Global Vacation Insights 2024","dataPoints":[{"qualityCheck":"OES","dataPointId":"Q1","question":"Where did you spend your last vacation?","answer":"We were at Lake Garda in Italy","keywords":["Beach","Mountains","Lake","Museums","Europe","Asia","Destination"],"activateDuplicateDetection":true,"allowedLanguages":["en","de","it"]},{"qualityCheck":"TS","dataPointId":"durationQ1","duration":42670},{"qualityCheck":"GQS","dataPointId":"Q2","gridAnswersPattern":[7,8,9,1,3,5,2,5,9,6]},{"qualityCheck":"OES","dataPointId":"Q3","question":"What was the most memorable part of your last vacation?","answer":"Italian cuisine, especially pizza and fine wine.","keywords":["Cuisine","Food","Art","Adventure","History","Landscape","Culture"],"activateDuplicateDetection":true,"allowedLanguages":["en","de","it"]},{"qualityCheck":"TS","dataPointId":"durationQ3","duration":69720},{"qualityCheck":"CHS","dataPointId":"CHS_Question","interviewData":[{"question":"What mode of transport did you use?","answer":"Car"},{"question":"How many days did you stay?","answer":5},{"question":"Did you travel with family?","answer":"yes"},{"question":"What was your approximate total budget for the trip (in EUR)?","answer":1500},{"question":"What type of accommodation did you stay in?","answer":"Hotel"}]},{"qualityCheck":"GQS","dataPointId":"Q4","gridAnswersPattern":[2,1,4,3,5,2,3,1,1,1]},{"qualityCheck":"TS","dataPointId":"totalDuration","duration":256843}],"cleaningSettings":{"standardSettings":false,"CustomSettings":{"redemScore":60,"OES":{"score":30,"minimumAnswers":2,"categories":{"genericAnswers":{"exclude":true,"minDataPoints":2},"noInformation":{"exclude":true,"minDataPoints":2},"badLanguage":{"exclude":true,"minDataPoints":2},"nonsense":{"exclude":true,"minDataPoints":1},"duplicateAnswer":{"exclude":true,"minDataPoints":1},"duplicateRespondent":{"exclude":true,"minDataPoints":1},"wrongTopic":{"exclude":true,"minDataPoints":1},"wrongLanguage":{"exclude":true,"minDataPoints":1},"copyPastAnswer":{"exclude":true,"minDataPoints":1},"fakeAnswer":{"exclude":true,"minDataPoints":1}}},"CHS":{"score":20},"GQS":{"score":10,"minimumItems":15},"TS":{"score":30}}},"synchronousResponse":false}'
};
fetch('https://api.redem.io/respondent/add', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
```
Retrieve the response from ReDem to ensure your request was successfully submitted and is still in progress.
```javascript Example response (JavaScript) theme={null}
{
"success": true,
"message": "Respondent Queued for Evaluation",
"results": {
"status": "QUEUED"
}
}
```
For a full example and detailed guidance on using this response object, visit the [Add Respondent](api-reference/endpoints/v3/addRespondent) endpoint. It includes explanations of all fields and their usage.
Since an asynchronous response approach is recommended, you can synchronize respondent evaluations from ReDem at any time.
To streamline the process, you can set up an automated job that performs the synchronization on a regular basis, ensuring your data remains up-to-date without requiring manual intervention.
To do this, you can use the [Get Respondent](/api-reference/endpoints/v3/getRespondent) endpoint or the [Get All Respondents](/api-reference/endpoints/v3/getAllRespondents) endpoint.
# Introduction
Source: https://docs.redem.io/api-reference/intro/introduction
Fundamental concepts of ReDem's API.
**Welcome to the ReDem API documentation! 👋🏼**
This documentation provides a step-by-step approach to seamlessly integrating the ReDem API into your workflows and applications.
The backbone of our platform is the ReDem API. With our API you have direct access to every feature ReDem offers from real-time data access to smooth integration with your existing applications.
Best of all, since the ReDem Application runs entirely on this API, everything you can do in the app, you can also do through the API. **No limitations, just endless possibilities!**
## Integration Use Cases
The ReDem API supports two main integration use cases, allowing you to choose the approach that best fits your workflow:
Receive an instant evaluation of the respondent's quality and seamlessly integrate this data into your workflow.
Process respondent quality evaluations in the background and retrieve results later using the Get Respondent/s endpoints.
## API Versioning
ReDem's API uses versioned endpoints to ensure backward compatibility while introducing new features. Currently, three API versions are available:
* **v1**: Legacy endpoints (deprecated)
* **v2**: Introduced consistent CHS question IDs
* **v3**: Enhanced OES with improved categories and effort scale (recommended)
**Important:** You cannot upgrade the API version for a survey that is currently running. Each survey is permanently tied to the API version it was created with. To use a newer API version, you must create a new survey with the updated endpoints.
For detailed migration instructions, see the [API Version Migration Guide](/api-reference/others/migration-guide).
## Base URL
ReDem's API is built on REST principles following the [OpenAPI](https://www.openapis.org/) standard as much as possible. To ensure data security, it operates exclusively over HTTPS, encrypting all interactions. Unencrypted HTTP connections are not supported, safeguarding your data by default.
The Base URL for all API endpoints is:
```plainApiKey_xxx theme={null}
https://api.redem.io/
```
Versioned endpoints use the format: `https://api.redem.io/v3/addRespondent`.
ReDem's API is currently in public beta and is subject to change. However, we will do our best to keep breaking changes to a minimum.
Need help or have questions? Contact our support team at [support@redem.io](mailto:support@redem.io). we're here to help you make the most of ReDem!
# Synchronous Response
Source: https://docs.redem.io/api-reference/intro/synchronous-response
Learn how to integrate ReDem and instantly receive all quality information
To integrate with ReDem, you must have a ReDem account.
Don’t have an account yet? Get started by [setting up your account](/account-setup).
Contact us at [support@redem.io](mailto:support@redem.io) to request an API key.
Ensure your data is formatted correctly according to the guidelines before sending it via the API. Below is a sample request object to help you structure your data properly.
For a synchronous response approach, the `synchronousResponse` field **must always be set to `true`**. This ensures you receive responses from ReDem in real time.
Please format the request data as shown below:
```javascript Example request body theme={null}
{
"respondentId": "RESP497770",
"surveyName": "Global Vacation Insights 2024",
"dataPoints": [
{
"qualityCheck": "OES",
"dataPointId": "Q1",
"question": "Where did you spend your last vacation?",
"answer": "We were at Lake Garda in Italy",
"keywords": ["Beach", "Mountains", "Lake", "Museums", "Europe", "Asia", "Destination"],
"activateDuplicateDetection": true,
"allowedLanguages": ["en"]
},
{
"qualityCheck": "TS",
"dataPointId": "durationQ1",
"duration": 42670
},
// ... other data points ...
],
"activateCleaning": true,
"cleaningSettings": {
"redemScore": 60,
"OES": {
"score": 40,
"minDataPoints":2,
"categories": {
"BAD_LANGUAGE": {"activate": true, "minDataPoints":2},
"GIBBERISH": {"activate": true, "minDataPoints":2},
"OFF_TOPIC": {"activate": true, "minDataPoints":2},
"WRONG_LANGUAGE": {"activate": true, "minDataPoints":2},
"AI_SUSPECT": {"activate": true, "minDataPoints":2},
// ... other categories ...
}
},
"CHS": {"score": 30},
"GQS": {"score": 20, "minDataPoints":2},
"TS": {"score": 30}
},
"synchronousResponse": true,
}
```
For a full example and detailed guidance on using this request object, visit the [Add Respondent](/api-reference/endpoints/v3/addRespondent) endpoint. It includes explanations of all fields and their usage.
At the end of the survey, just before the respondent reaches the ‘complete’ state, submit an API request to ReDem including the respondent’s information and your API key.
```javascript Example request (JavaScript) theme={null}
const options = {
method: 'POST',
headers: {Authorization: 'Bearer ', 'Content-Type': 'application/json'},
body: '{"respondentId":"RESP497770","projectName":"Global Vacation Insights 2024","dataPoints":[{"qualityCheck":"OES","dataPointId":"Q1","question":"Where did you spend your last vacation?","answer":"We were at Lake Garda in Italy","keywords":["Beach","Mountains","Lake","Museums","Europe","Asia","Destination"],"activateDuplicateDetection":true,"allowedLanguages":["en","de","it"]},{"qualityCheck":"TS","dataPointId":"durationQ1","duration":42670},{"qualityCheck":"GQS","dataPointId":"Q2","gridAnswersPattern":[7,8,9,1,3,5,2,5,9,6]},{"qualityCheck":"OES","dataPointId":"Q3","question":"What was the most memorable part of your last vacation?","answer":"Italian cuisine, especially pizza and fine wine.","keywords":["Cuisine","Food","Art","Adventure","History","Landscape","Culture"],"activateDuplicateDetection":true,"allowedLanguages":["en","de","it"]},{"qualityCheck":"TS","dataPointId":"durationQ3","duration":69720},{"qualityCheck":"CHS","dataPointId":"CHS_Question","interviewData":[{"question":"What mode of transport did you use?","answer":"Car"},{"question":"How many days did you stay?","answer":5},{"question":"Did you travel with family?","answer":"yes"},{"question":"What was your approximate total budget for the trip (in EUR)?","answer":1500},{"question":"What type of accommodation did you stay in?","answer":"Hotel"}]},{"qualityCheck":"GQS","dataPointId":"Q4","gridAnswersPattern":[2,1,4,3,5,2,3,1,1,1]},{"qualityCheck":"TS","dataPointId":"totalDuration","duration":256843}],"cleaningSettings":{"standardSettings":false,"CustomSettings":{"redemScore":60,"OES":{"score":30,"minimumAnswers":2,"categories":{"genericAnswers":{"exclude":true,"minDataPoints":2},"noInformation":{"exclude":true,"minDataPoints":2},"badLanguage":{"exclude":true,"minDataPoints":2},"nonsense":{"exclude":true,"minDataPoints":1},"duplicateAnswer":{"exclude":true,"minDataPoints":1},"duplicateRespondent":{"exclude":true,"minDataPoints":1},"wrongTopic":{"exclude":true,"minDataPoints":1},"wrongLanguage":{"exclude":true,"minDataPoints":1},"copyPastAnswer":{"exclude":true,"minDataPoints":1},"fakeAnswer":{"exclude":true,"minDataPoints":1}}},"CHS":{"score":20},"GQS":{"score":10,"minimumItems":15},"TS":{"score":30}}},"synchronousResponse":true}'
};
fetch('https://api.redem.io/respondent/add', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
```
Retrieve the response from ReDem to trigger the next step in your workflow. If cleaning is enabled, low-quality responses will be excluded before reaching the complete state, while high-quality responses will be retained as complete.
```javascript Example response (JavaScript) theme={null}
{
"success": true,
"message": "Respondent Evaluated successfully",
"results": {
"status": "JOB_COMPLETED",
"respondentQuality": {
"isExcluded": true,
"reasonsForExclusion": [
"Open Ended Score Threshold",
"Coherence Score Threshold"
],
"redemScore": 85,
"qualityScoreSummary": [
{
"qualityCheck": "OES",
"score": 80
},
{
"qualityCheck": "CHS",
"score": 75,
"reason": "The user shows several inconsistencies and contradictions, such as different ..."
},
{
"qualityCheck": "GQS",
"score": 85
},
{
"qualityCheck": "TS",
"score": 70
}
],
"dataPointsSummary": [
{
"qualityCheck": "OES",
"dataPointId": "Q1",
"score": 85,
"category": "Valid Answer"
},
{
"qualityCheck": "TS",
"dataPointId": "durationQ1",
"score": 95
},
{
"qualityCheck": "GQS",
"dataPointId": "Q2",
"score": 90
},
{
"qualityCheck": "OES",
"dataPointId": "Q3",
"score": 75,
"category": "Valid Answer"
},
{
"qualityCheck": "TS",
"dataPointId": "durationQ3",
"score": 50
},
{
"qualityCheck": "CHS",
"dataPointId": "CHS_Question",
"score": 75,
"reason": "The user shows several inconsistencies and contradictions, such as different ..."
},
{
"qualityCheck": "GQS",
"dataPointId": "Q4",
"score": 80
},
{
"qualityCheck": "TS",
"dataPointId": "totalDuration",
"score": 65
}
]
}
}
}
```
For a full example and detailed guidance on using this response object, visit the [Add Respondent](/api-reference/endpoints/v3/addRespondent) endpoint. It includes explanations of all fields and their usage.
# Behavior Tracking
Source: https://docs.redem.io/api-reference/others/behavior-tracking
Learn how to track respondent behavior
ReDem only uses the last 300 `MOUSE_MOVEMENT` and last 300 `MOUSE_CLICK` events per BAS data point. Cap client-side tracking at the same limits — storing more only inflates browser session data without improving scoring.
Copy the simple **JavaScript tracker code** (attached) into your survey platform’s frontend codebase or UI. This ensures that, whenever respondent complete surveys, it tracks input behavior data for open-ended questions directly from their individual browsers.
We are using this script to persist this input\_behavior in the browser until you are ready to call the API
```javascript theme={null}
```
When you are making the API call to ReDem use this structure from the session storage and make sure to connect `QUESTION_ID` during the integration process
# API Version Migration Guide
Source: https://docs.redem.io/api-reference/others/migration-guide
Step-by-step guide to migrate between ReDem API versions.
This guide will help you migrate your integration from one API version to another. Before starting, it's important to understand a key limitation:
**You cannot upgrade the API version for a survey that is currently running.** Each survey is permanently tied to the API version it was created with. To use a newer API version, you must create a new survey with the updated endpoints.
## Migration Overview
The ReDem API uses versioned endpoints to ensure backward compatibility while introducing new features:
* **v1**: Legacy endpoints
* **v2**: Introduced consistent CHS question IDs
* **v3**: Enhanced OES with improved categories and effort scale
## Migration from v1 to v2
### Key Changes
1. **Endpoint paths**: All endpoints now use the `/v2` prefix
* `POST /addRespondent` → `POST /v2/addRespondent`
* `POST /getRespondent` → `POST /v2/getRespondent`
* `POST /getAllRespondents` → `POST /v2/getAllRespondents`
* `POST /stopSurvey` → `POST /v2/stopSurvey`
* `POST /restartSurvey` → `POST /v2/restartSurvey`
* `POST /creditCalculation` → `POST /v2/creditCalculation`
2. **CHS questionId requirement**: Each CHS interview entry must include a `questionId` field
### Step-by-Step Migration
#### Step 1: Update Endpoint URLs
Update your base URL construction to include the `/v2` prefix:
```javascript theme={null}
// Before (v1)
const baseUrl = 'https://api.redem.io/addRespondent';
// After (v2)
const baseUrl = 'https://api.redem.io/v2/addRespondent';
```
#### Step 2: Add questionId to CHS Data Points
For each CHS data point, add the `questionId` field to the `interviewData` array:
```javascript theme={null}
// Before (v1)
{
"qualityCheck": "CHS",
"dataPointId": "CHS_Q1",
"interviewData": [
{
"question": "What type of accommodation did you stay in?",
"answer": "Hotel"
}
]
}
// After (v2)
{
"qualityCheck": "CHS",
"dataPointId": "CHS_Q1",
"interviewData": [
{
"questionId": "Q1", // Required in v2
"question": "What type of accommodation did you stay in?",
"answer": "Hotel"
}
]
}
```
The `questionId` should be consistent across all respondents for the same question. Use meaningful identifiers like "Q1", "Q2", or custom IDs that match your survey structure.
#### Step 3: Important: Create New Survey
**Important:** You cannot update a running survey to a new API version. You must create a new survey using v2 endpoints.
```javascript theme={null}
// Use v2 endpoint to create new survey
POST https://api.redem.io/v2/addRespondent
```
#### Step 4: Test Your Integration
1. Test adding a single respondent with the new v2 endpoint
2. Verify CHS results include consistent question IDs
3. Confirm all other endpoints work correctly with v2 paths
## Migration from v2 to v3
### Key Changes
1. **Endpoint paths**: All endpoints now use the `/v3` prefix
* `POST /v2/addRespondent` → `POST /v3/addRespondent`
* `POST /v2/getRespondent` → `POST /v3/getRespondent`
* `POST /v2/getAllRespondents` → `POST /v3/getAllRespondents`
* `POST /v2/stopSurvey` → `POST /v3/stopSurvey`
* `POST /v2/restartSurvey` → `POST /v3/restartSurvey`
* `POST /v2/creditCalculation` → `POST /v3/creditCalculation`
* `POST /v2/deleteRespondents` → `POST /v3/deleteRespondents`
* `POST /v2/deleteSurveys` → `POST /v3/deleteSurveys`
* `POST /v2/updateRespondentsExcludedStatus` → `POST /v3/updateRespondentsExcludedStatus`
2. **OES categories**: Updated category names in cleaning settings
* `NO_INFORMATION`, `GENERIC_ANSWER` → `NO_ANSWER`
* `FAKE_ANSWER` → `AI_SUSPECT`
* New categories: `OFF_TOPIC`, `GIBBERISH`
3. **New optional fields**:
* `surveyDescription` for CHS data points
* `respondentAttributes` for additional respondent metadata
### Step-by-Step Migration
#### Step 1: Update Endpoint URLs
Update your base URL construction to include the `/v3` prefix:
```javascript theme={null}
// Before (v2)
const baseUrl = 'https://api.redem.io/v2/addRespondent';
// After (v3)
const baseUrl = 'https://api.redem.io/v3/addRespondent';
```
#### Step 2: Update OES Categories in Cleaning Settings
Update the OES category names in your cleaning settings request:
```javascript theme={null}
// Before (v2)
{
"cleaningSettings": {
"redemScore": 60,
"OES": {
"activate": true,
"score": 60,
"minDataPoints": 2,
"categories": {
"GENERIC_ANSWER": {"activate": true, "minDataPoints": 2},
"NO_INFORMATION": {"activate": true, "minDataPoints": 3},
"FAKE_ANSWER": {"activate": true, "minDataPoints": 2}
}
}
}
}
// After (v3)
{
"cleaningSettings": {
"redemScore": 60,
"OES": {
"activate": true,
"score": 40,
"minDataPoints": 2,
"categories": {
"AI_SUSPECT": {"activate": true, "minDataPoints": 2},
"BAD_LANGUAGE": {"activate": true, "minDataPoints": 2},
"OFF_TOPIC": {"activate": true, "minDataPoints": 2},
"NO_ANSWER": {"activate": false, "minDataPoints": 2},
"WRONG_LANGUAGE": {"activate": true, "minDataPoints": 2},
"GIBBERISH": {"activate": true, "minDataPoints": 2},
"DUPLICATE_ANSWER": {"activate": false, "minDataPoints": 1},
"DUPLICATE_RESPONDENT": {"activate": false, "minDataPoints": 1}
}
}
}
}
```
These cleaning settings are examples and can be customized for each survey. Review and adjust the activation status and minimum data points thresholds according to your specific survey requirements and quality standards.
#### Step 3: Optional: Add Survey Description for CHS
You can now provide a `surveyDescription` when submitting CHS data points to improve accuracy:
```javascript theme={null}
{
"qualityCheck": "CHS",
"dataPointId": "CHS_Q1",
"surveyDescription": "Survey about vacation experiences in 2024", // Optional
"interviewData": [
{
"questionId": "Q1",
"question": "What type of accommodation did you stay in?",
"answer": "Hotel"
}
]
}
```
#### Step 4: Optional: Add Respondent Attributes
You can add metadata about respondents:
```javascript theme={null}
{
"surveyName": "Vacation Survey 2024",
"respondentId": "RESP001",
"respondentAttributes": { // Optional
"panel": "PanelA",
"market": "US",
"source": "email"
},
"dataPoints": [
// ... data points
]
}
```
#### Step 5: Important: Create New Survey
**Important:** You cannot update a running survey to a new API version. You must create a new survey using v3 endpoints.
#### Step 6: Test Your Integration
1. Test adding respondents with the new v3 endpoint
2. Verify responses use the new category names
3. Confirm all category names in cleaning settings are updated correctly
## Migration from v1 to v3
If you're migrating directly from v1 to v3, follow both migration paths:
1. First, apply all changes from v1 → v2 (especially adding `questionId` to CHS)
2. Then, apply all changes from v2 → v3 (OES categories, etc.)
## Best Practices
1. **Test with a sample survey** before migrating production surveys. Do not test with production surveys.
2. **Important:** You cannot update a running survey to a new API version. Create new surveys with the updated endpoints.
3. **Check responses in your tests** to ensure category mappings work correctly
## Need Help?
If you encounter issues during migration or have questions:
* Review the [API Change Log](/changelogs/api-change-log) for detailed version history
* Check the [endpoint documentation](/api-reference/endpoints/v3/addRespondent) for v3 specifics
* Contact support at [support@redem.io](mailto:support@redem.io)
# Structuring Surveys Responses for ReDem Compatibility
Source: https://docs.redem.io/api-reference/others/structuring-survey-responses
A complete guide on how to transform survey responses into ReDem-compatible data points
This guide explains how to format your survey data into structured data points suitable for submission to the addRespondent endpoint of the ReDem API.
## Preparing survey responses for CHS (Coherence Score)
For each CHS data point, all question–answer pairs must be included as separate objects within the interviewData array. Each object should contain a
* questionId - A unique identifier for the question.
* question - The full text of the question, When applicable, include all possible answer options that respondents can choose from to provide full context for the AI.
* answer - The respondent's selected answer(s) or written response.
### Recommended formats for different question types
For the most accurate assessments, the AI performs best when it has full visibility into the context of the questionnaire. Therefore, it is recommended to include as much information as possible from the questionnaire.
* **Single Choice Questions**
Includes dropdowns, radio buttons, yes/no, and Likert scale questions.
* **Question Field**: Provide the question text. If applicable, include all key answer options to give context to the selected response. For Likert scale questions, also include the scale labels in the Question field to ensure clarity.
* **Answer Field**: Include the respondent’s selected choice as a string or number.
```javascript Example interviewData object for a single-select question theme={null}
// Dropdown question
{
"questionId": "Q1",
"question": "What is your favorite type of cuisine? Select one option that describes your preference. - Italian, French, Chinese, Indian, Japanese, Mexican, Thai, Greek",
"answer": "Italian"
}
// Radio button question
{
"questionId": "Q1",
"question": "In a typical week, how frequently do you eat red meat (e.g., beef, pork)?",
"answer": "3–5 times per week"
}
// Yes/No question
{
"questionId": "Q1",
"question": "Do you like Fish or seafood? - Yes, No",
"answer": "No"
}
// Likert scale question - with text answer
{
"questionId": "Q1",
"question": "How much do you enjoy eating street food? - Not at all, A little, Somewhat, Quite a bit, Very much",
"answer": "Not at all"
}
// Likert scale question - with number answer
{
"questionId": "Q1",
"question": "To what extent do you agree with the following statement: Do you prefer home-cooked meals over eating out? - 1 = Strongly disagree, 2 = Disagree, 3 = Neutral, 4 = Agree, 5 = Strongly agree",
"answer": 4
}
// NPS question
{
"questionId": "Q1",
"question": "How likely are you to recommend our food delivery service to a friend or colleague - 1 = Not at all, 10 = Very much",
"answer": 8
}
```
* **Multiple Choice Questions**
* **Question Field**: Include the full question text and all possible answer options, separated by commas.
* **Answer Field**: List all selected options, separated by commas.
```javascript Example interviewData object for a checkbox question theme={null}
{
"questionId": "Q1",
"question": "Which of the following foods do you eat regularly? (You may select more than one.) - Chicken, Cheese, Bacon or sausage, Eggs, Fish or seafood, Plant-based meat substitutes (e.g., tofu, tempeh), Milk or dairy products, Fruits, Leafy vegetables (e.g., spinach, kale)",
"answer": "Cheese, Eggs"
}
```
* **Open-ended question**
These collect free-text input from respondents.
* **Question Field**: Include only the question text.
* **Answer Field**: Record the answer provided by the respondent.
```javascript Example interviewData object for an open-ended question theme={null}
{
"questionId": "Q1",
"question": "Can you describe your typical eating habits during the week?",
"answer": "I usually eat home-cooked meals with lots of vegetables and lean meats. I occasionally eat out on weekends, mostly opting for Asian or Mediterranean dishes. I try to avoid sugary snacks and drink plenty of water throughout the day."
}
```
* **Grid (matrix) questions**
Grid/matrix questions contain a stem plus multiple row items that share the same answer scale.
Transform the grid/matrix stem, row labels and answer scale into a structured object with the following format:
* Emit one object per row item so that each cell becomes its own data point
* **Question Field**: Concatenate the stem and the row label, separated by a hyphen (-), to form the full question text. Additionally, include all answer scale labels, separated by commas.
* **Answer Field**: Keep the selected scale label as the answer.
```javascript Example interviewData object for a grid/matrix question theme={null}
{
"questionId": "Q1",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Red meat (e.g., beef, pork) - Not at all, 1–2 times per week, 3–5 times per week, Several times per day, Daily",
"answer": "3–5 times per week"
},
{
"questionId": "Q2",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Fish or seafood - Not at all, 1–2 times per week, 3–5 times per week, Several times per day, Daily",
"answer": "Several times per day"
},
{
"questionId": "Q3",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Poultry (e.g., chicken, turkey) - Not at all, 1–2 times per week, 3–5 times per week, Several times per day, Daily",
"answer": "1–2 times per week"
},
{
"questionId": "Q4",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Dairy products (e.g., milk, cheese, yogurt) - Not at all, 1–2 times per week, 3–5 times per week, Several times per day, Daily",
"answer": "Daily"
},
{
"questionId": "Q5",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Eggs - Not at all, 1–2 times per week, 3–5 times per week, Several times per day, Daily",
"answer": "3–5 times per week"
},
{
"questionId": "Q6",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Legumes (e.g., beans, lentils, chickpeas) - Not at all, 1–2 times per week, 3–5 times per week, Several times per day, Daily",
"answer": "1–2 times per week"
},
{
"questionId": "Q7",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Grains (e.g., rice, pasta, bread) - Not at all, 1–2 times per week, 3–5 times per week, Several times per day, Daily",
"answer": "Daily"
}
```
### Minimum required formats for different question types
While we recommend the settings from the previous chapter to provide maximum context and achieve precise results, you can also use a simplified version, which does work but may not achieve the same level of accuracy.
* **Single Choice Questions**
Includes dropdowns, radio buttons, yes/no, and Likert scale questions.
* **Question Field**: Provide the question text.
* **Answer Field**: Include the respondent’s selected choice as a string or number.
```javascript Example interviewData object for a single-select question theme={null}
// Dropdown question
{
"questionId": "Q1",
"question": "What is your favorite type of cuisine? Select one option that describes your preference.",
"answer": "Italian"
}
// Radio button question
{
"questionId": "Q1",
"question": "In a typical week, how frequently do you eat red meat (e.g., beef, pork)?",
"answer": "3–5 times per week"
}
// Yes/No question
{
"questionId": "Q1",
"question": "Do you like Fish or seafood?",
"answer": "No"
}
// Likert scale question
{
"questionId": "Q1",
"question": "How much do you enjoy eating street food?",
"answer": "Not at all"
}
```
* **Multiple Choice Questions**
* **Question Field**: Include the full question text.
* **Answer Field**: List all selected options, separated by commas.
```javascript Example interviewData object for a checkbox question theme={null}
{
"questionId": "Q1",
"question": "Which of the following foods do you eat regularly? (You may select more than one.) - Chicken, Cheese, Bacon or sausage, Eggs, Fish or seafood, Plant-based meat substitutes (e.g., tofu, tempeh), Milk or dairy products, Fruits, Leafy vegetables (e.g., spinach, kale)",
"answer": "Cheese, Eggs"
}
```
* **Open-ended question**
These collect free-text input from respondents.
* **Question Field**: Include only the question text.
* **Answer Field**: Record the answer provided by the respondent.
```javascript Example interviewData object for an open-ended question theme={null}
{
"questionId": "Q1",
"question": "Can you describe your typical eating habits during the week?",
"answer": "I usually eat home-cooked meals with lots of vegetables and lean meats. I occasionally eat out on weekends, mostly opting for Asian or Mediterranean dishes. I try to avoid sugary snacks and drink plenty of water throughout the day."
}
```
* **Grid (matrix) questions**
Grid/matrix questions contain a stem plus multiple row items that share the same answer scale.
Transform the grid/matrix stem, row labels and answer scale into a structured object with the following format:
* Emit one object per row item so that each cell becomes its own data point
* **Question Field**: Concatenate the stem and the row label, separated by a hyphen (-), to form the full question text.
* **Answer Field**: Keep the selected scale label as the answer.
```javascript Example interviewData object for a grid/matrix question theme={null}
{
"questionId": "Q1",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Red meat (e.g., beef, pork)",
"answer": "3–5 times per week"
},
{
"questionId": "Q2",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Fish or seafood",
"answer": "Several times per day"
},
{
"questionId": "Q3",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Poultry (e.g., chicken, turkey)",
"answer": "1–2 times per week"
},
{
"questionId": "Q4",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Dairy products (e.g., milk, cheese, yogurt)",
"answer": "Daily"
},
{
"questionId": "Q5",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Eggs",
"answer": "3–5 times per week"
},
{
"questionId": "Q6",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Legumes (e.g., beans, lentils, chickpeas)",
"answer": "1–2 times per week"
},
{
"questionId": "Q7",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Grains (e.g., rice, pasta, bread)",
"answer": "Daily"
}
```
# API Change Log
Source: https://docs.redem.io/changelogs/api-change-log
Stay updated on the latest changes and improvements in the API.
## Duplicate Entrance Score
* Coming soon on POST /v3/addRespondent — Send a `DES` datapoint (v3 only) with optional `entranceTime`, optional `ip`, and up to 10 demographics (at least 4 for a valid score). At most one DES datapoint per respondent.
* DES detects likely duplicate entrants by comparing demographics and IP against recent peers in the same survey.
See the [v3 addRespondent](/api-reference/endpoints/v3/addRespondent) endpoint documentation and the [Duplicate Entrance Score](/knowledge-base/quality-checks/duplicate-entrance-score) guide.
## Quality Check Suggestions
* POST /v3/qualityCheckSuggestions — New endpoint for partners: send a survey questionnaire structure and receive smart quality-check suggestions (OES, GQS, CHS, BAS) plus recommended cleaning settings.
* Suggestions align with ReDem best practices so end users spend less effort configuring an API project.
* `allInclusive` (default `true`) caps suggestion counts to all-inclusive plan limits.
See the [Quality Check Suggestions](/api-reference/endpoints/v3/qualityCheckSuggestions) endpoint documentation.
## OES Answer Translation: Skip Languages
* POST /v3/addRespondent — On an OES datapoint, set `skipTranslationLanguages` to a list of ISO 639-1 language codes that should **not** be translated when `shouldTranslate` is `true`.
* Example: a German agency can send `skipTranslationLanguages: ["de"]` so German answers are left as-is while other non-English answers are still translated.
* English answers are never translated, with or without this field. Use the same two-letter codes as `allowedLanguages`.
* `ignoreAllowedLanguageError` also applies to `skipTranslationLanguages`: invalid codes are dropped instead of rejecting the request.
See the [v3 addRespondent](/api-reference/endpoints/v3/addRespondent) endpoint documentation for field details.
## OES Answer Translation
* POST /v3/addRespondent — Set `shouldTranslate: true` on an OES datapoint to translate non-valid, non-English answers to English during quality evaluation. This makes it easy to review and verify our results for any language.
* Valid answers and answers already detected as English are not translated.
* On success, the OES entry in `dataPointsSummary` includes `translatedAnswer`. If translation was requested but failed, `translationFailed` is `true` and no translation credits are charged.
* Translation is available on API **v3** only.
See the [v3 addRespondent](/api-reference/endpoints/v3/addRespondent) endpoint documentation and the [ReDem Credits docs](/knowledge-base/miscellaneous/redem-credits) for credit rules.
## Ignore Validation Errors
You can now opt in to skip specific validation errors instead of rejecting the request. All flags default to `false`.
* POST /v1/addRespondent , POST /v2/addRespondent , POST /v3/addRespondent
* **OES** `ignoreEmptyAnswer` — When `true`, this OES datapoint is removed if `answer` is empty (including whitespace-only). If every OES datapoint is removed, OES is skipped.
* **OES** `ignoreAllowedLanguageError` — When `true`, invalid `allowedLanguages` codes (wrong format or non-ISO 639-1) are dropped instead of rejecting the request. Valid codes are kept. If every code is invalid, `allowedLanguages` is removed. Wrong-language scoring is unchanged for remaining valid codes.
* **CHS** `ignoreEmptyAnswers` — When `true`, questions with no answer (empty or whitespace-only) are removed from `interviewData`. If no questions remain, the CHS datapoint is dropped and CHS is skipped.
See the [v3 addRespondent](/api-reference/endpoints/v3/addRespondent) endpoint documentation for field details.
## BAS: Mouse Movement and Click Tracking
* POST /v3/addRespondent — BAS `interactionData` now accepts two additional interaction types alongside keystrokes and copy-paste:
* `MOUSE_MOVEMENT` — pointer position as `{ x, y }` in pixels
* `MOUSE_CLICK` — click position on the target element as `{ width, height, offsetX, offsetY }`
* ReDem scores **typing** and **mouse** behaviour separately and uses the **lower** score for the BAS data point. If both scores are equal, the typing category is used.
* Two new BAS categories can be returned: `NATURAL_MOVEMENT` and `UNNATURAL_MOVEMENT`.
* ReDem only uses the **last 300** `MOUSE_MOVEMENT` and **last 300** `MOUSE_CLICK` events per data point. Cap client-side tracking at the same limits.
See the [Behavior Tracking guide](/api-reference/others/behavior-tracking) for a sample tracker and the [Behavioral Analytics Score docs](/knowledge-base/quality-checks/behavior-analysis-score#mouse-movement-and-clicks) for how mouse behaviour is evaluated.
## New Attribute: retentionDays
* POST /v3/addRespondent - You can now send an optional `retentionDays` in the request body. It is the number of days to retain the respondent's data. After the retention period is over the respondent will be deleted from ReDem. The data will be no longer available in our platform. The minimum value is 30 days.
See the [v3 addRespondent](/api-reference/endpoints/v3/addRespondent#body-retention-days) endpoint documentation for the request body.
## New Attribute: referenceSurveyId
* POST /v3/addRespondent - You can now send an optional `referenceSurveyId` in the request body. It is your **external survey identifier** (for example, the id or key of the project in your survey tool). When ReDem **creates** a new survey for the given `surveyName`, that value is stored on the survey for correlation with your own systems. If a survey with that `surveyName` already exists, the stored `referenceSurveyId` is **not** changed by later requests.
See the [v3 addRespondent](/api-reference/endpoints/v3/addRespondent) endpoint documentation for the request body.
## GQS Grid Length Update
You can now send grids with a minimum length of 5 items. Previously the lower limit was 7 items in a grid. The upper limit remains at 50 items.
The pattern check is not available to grids with length 5 or 6. You can send the `patternCheckEnabled` flag for these grids, but it will be silently ignored. Reason being that 5 or 6 items is not sufficient to detect patterns beyond (partial-)straightlining confidently.
## CHS Limit Update
* POST /v3/addRespondent - The maximum number of CHS question/answer pairs has been reduced from `1000` to `300`.
Recommendation for integrators:
* Send only the most relevant `interviewData` entries (up to 300) in a deterministic order.
* If your source survey has more than 300 CHS pairs, trim before sending to keep payloads predictable.
## New Attribute: surveyPlatform
* POST /v3/addRespondent - You can now provide `surveyPlatform` as an optional top-level field in the request body. This value is stored with the respondent and can be used to identify survey-platform-origin traffic in downstream workflows.
Recommended integration approach:
* Send a stable platform identifier (for example, `SightX`, `qualtrics`, `keyingress`) for every respondent created through a survey tool integration.
* Keep naming consistent across environments to avoid fragmented reporting (for example, use `qualtrics` instead of mixing `Qualtrics`, `QUALTRICS`, and `qtrx`).
* If an internal connector is used, send a deterministic connector name (for example, `my-company-ingress`) instead of dynamic values.
See the [v3 addRespondent endpoint documentation](/api-reference/endpoints/v3/addRespondent) for request details.
## New Attribute: Survey Description for CHS
* POST /v3/addRespondent - You can now provide a `surveyDescription` field when submitting CHS (Coherence Score) data points. This optional field provides additional context about the survey's purpose and intent, helping improve the quality and accuracy of the Coherence Score evaluation.
The survey description is especially useful when your survey asks about current events that occurred after the training cutoff date of the large language models, such as recently opened facilities, current political events, product launches, or recent market changes.
See the [Coherence Score documentation](/knowledge-base/quality-checks/coherence-score#survey-description) for more details and examples.
## New Attribute: Respondent Attributes
* POST /v3/addRespondent - You can now add additional attributes to the respondent, such as the panel source or the market of a respondent. These values will be available in the ReDem App and in the result export and can be used for further analysis of your data.
See the [endpoint docs](/api-reference/endpoints/v3/addRespondent#body-respondent-attributes) for further details.
## New Endpoint: Recalculate Respondents
* POST /v3/recalculateRespondents - Recalculate specific quality checks for a list of respondents within a survey.
See the [endpoint docs](/api-reference/endpoints/v3/recalculateRespondents) for request/response details.
## API v3 Released: OES v3 with Enhanced Category Detection and Effort Scale
### 🔥 OES v3 Now Available in ReDem API v3
We're excited to announce the release of ReDem API v3, featuring a major upgrade to the OES (Open-Ended Scoring) quality check system. This release introduces improved category definitions, enhanced scoring accuracy, and a new effort scale metric.
**All version 3 endpoints are now accessible via the /v3 path (e.g., /v3/addRespondent), ensuring a clean separation from previous versions.**
### 🚀 What's new in OES v3?
OES v3 introduces refined category definitions with clearer boundaries to reduce false positives and false negatives. The new categories are:
* **VALID\_ANSWER**: Responses that adequately address the question
* **NO\_ANSWER**: Responses that provide no meaningful information
* **BAD\_LANGUAGE**: Responses containing inappropriate or offensive language
* **GIBBERISH**: Responses that are nonsensical or incoherent
* **OFF\_TOPIC**: Responses that do not address the question asked
* **AI\_SUSPECT**: Responses that appear to be AI-generated
* **WRONG\_LANGUAGE**: Responses in an unexpected language
* **DUPLICATE\_ANSWER**: Responses that duplicate previous answers
* **DUPLICATE\_RESPONDENT**: Responses that duplicate other respondents' answers
### Key improvements in OES v3:
* **Clearer category boundaries**: Refined detection logic reduces false positives and false negatives across all categories, providing more accurate quality assessments.
* **Enhanced scoring system**: OES v3 introduces an effort scale (LOW, MEDIUM, HIGH) that factors into the final quality score. For VALID\_ANSWER and NO\_ANSWER categories, the effort level directly influences the score calculation, providing more nuanced quality metrics.
### 🔄 Backward Compatibility: How do v1 and v2 work?
Version 1 and version 2 endpoints remain available but use the legacy OES v2 classification system, which has less precise category boundaries and does not include the effort scale metric.
### ⛔ Deprecation Notice
* **API v1**: Will be deprecated within 7 days of this notice. Please migrate to v2 or v3 immediately.
* **API v2**: Will be deprecated on January 15th, 2026. We strongly encourage all teams and integrators to migrate to v3 endpoints before that date to take advantage of the improved OES accuracy and scoring system.
We recommend upgrading to API v3 at your earliest convenience to benefit from the enhanced OES v3 quality checks and improved scoring accuracy.
**Important:** You cannot upgrade the API version for a survey that is currently running. Each survey is permanently tied to the API version it was created with. To use a newer API version, you must create a new survey with the updated endpoints. See the [Migration Guide](/api-reference/others/migration-guide) for step-by-step instructions.
## New Endpoint: Update Respondents Excluded Status
* POST /v2/updateRespondentsExcludedStatus - Update the exclusion status of one or more respondents within a specific survey.
See the [endpoint docs](/api-reference/endpoints/v2/updateRespondentsExcludedStatus) for request/response details.
## New Endpoints: Delete Surveys and Delete Respondents
* POST /v2/deleteRespondents - Delete one or more respondents from a survey and clean up related data.
* POST /v2/deleteSurveys - Delete one or more surveys and all associated data.
See the endpoint docs for request/response details.
## API v2 Released: Consistent CHS Question IDs Supported
### 🔥 New Versioning Layer Introduced Across the ReDem API
We’re excited to introduce ReDem API v2 — a structured versioning layer that enables long-term enhancements while preserving backward compatibility with current integrations.
**All version 2 endpoints are now accessible via the /v2 path (e.g., /v2/addRespondent), ensuring a clean separation from legacy endpoints.**
### 🚀 What's new in v2?
In version 2, each CHS interview entry must explicitly include the associated questionId.
```javascript theme={null}
{
"questionId": "Q1"
"question": "What type of accommodation did you stay in?",
"answer": "Hotel",
}
```
By making questionId a required field in CHS interviewData, you now have:
* Consistent identifiers across all respondents
* Clear mapping between survey questions and CHS results
### 🔄 Backward Compatibility: How does v1 work?
In version 1, since questionId is not part of the schema:
* The system auto-generates questionIds like Q1, Q2, etc. uniquely for each respondent, making cross-respondent comparisons unreliable.
This means Q1 for one respondent may refer to a completely different question than Q1 for another.
### ⛔ Deprecation Notice: API v1
Version 1 of the ReDem API will be **deprecated starting 16th September 2025**.
We strongly encourage all teams and integrators to migrate to v2 endpoints before that date to avoid any disruption.
**Important:** You cannot upgrade the API version for a survey that is currently running. Each survey is permanently tied to the API version it was created with. To use a newer API version, you must create a new survey with the updated endpoints. See the [Migration Guide](/api-reference/others/migration-guide) for step-by-step instructions.
## API endpoint updates
The POST /addRespondent endpoint has been updated to rename parameters in the cleaning settings, changing from **camelCase to UPPERCASE\_UNDERSCORE** formatting.
The following is an example of the new cleaning settings object:
```javascript theme={null}
"redemScore": 60,
"OES": {
"activate": true,
"score": 60,
"minDataPoints":2,
"categories": {
"GENERIC_ANSWER": {"activate": true, "minDataPoints":2},
"NO_INFORMATION": {"activate": true, "minDataPoints":3},
// ... other categories ...
}
},
"CHS": {"activate": true,"score": 50},
"GQS": {"activate": true,"score": 40, "minDataPoints":2},
"TS": {"activate": true,"score": 20},
"BAS": {
"activate": true,
"score": 60,
"minDataPoints":2,
"categories": {
"UNNATURAL_TYPING": {"activate": true, "minDataPoints":2},
"COPY_AND_PASTE": {"activate": true, "minDataPoints":2},
}
}
```
## API endpoint updates
The following API endpoint changes have been implemented to improve consistency and standardization:
POST /respondent/add → POST /addRespondent
* The `interactionData` field within `dataPoints` → `qualityCheck: BAS` has been modified to support additional interaction types. Now, it has been expanded to include both `KEYSTROKE` and `COPY_AND_PASTE` interactions, enhancing tracking capabilities.
* Enhanced the **request body cleaning settings** by allowing **activate/deactivate** options for each quality check and enhanced **cleaning settings** by introducing **Behavioral Analytics Score (BAS)** along with its categories.
* Renamed the **Fake Answer** category in **Open-Ended Score (OES)** to **AI-Generated Answer**.
* We have **enhanced** the response structure by adding a field to retrieve **Behavioral Analytics Score (BAS)** results.
GET /respondent/getRespondent → POST /getRespondent
* Previously with `GET` request we pass the `surveyName` and `respondentId` as a path parameters. Now we pass it in the request body.
GET /respondent/getAllRespondents → POST /getAllRespondents
* Previously with `GET` request we pass the `surveyName` as a path parameter. Now we pass it in the request body.
GET /survey/stop → POST /stopSurvey
* Previously with `GET` request we pass the `surveyName` as a path parameter. Now we pass it in the request body.
GET /respondent/estimation → POST /creditCalculation
* Introduced a new variable, **`BASDataPoints`**, to specify the number of BAS data points required for credit calculation when evaluating a respondent.
* Rename the variable **`CHSInterviews`** to **`CHSAnswers`** in the request body.
* We have introduced a new response structure for the `POST /creditCalculation` endpoint, improving clarity by renaming several fields for better self-explanatory representation.
## Enhanced the quality checks by introducing Behavioral Analytics Score (BAS)
We have enhanced the quality checks by introducing **Behavioral Analytics Score (BAS)** to evaluate the respondent's behavior and provide a score and categories based on the behavior.
* Removed the **Copy-Paste** category from **Open-Ended Score (OES)** and incorporated it under **Behavioral Analytics Score (BAS)**.
## Streamlined the API response in error cases
When a request fails due to invalid input or other errors, the all API returns a **400 Bad Request** status code. The response includes a descriptive `message` explaining the issue and an `error` object containing additional details to aid in diagnosing and resolving the problem.
## **ReDem 3.0 API - Initial Release**
This initial release of the **ReDem API** empowers you to seamlessly integrate ReDem into your workflows and applications. As the backbone of our platform, the API provides direct access to all ReDem features, from real-time data insights to smooth integration with existing systems.
Since the **ReDem Application** is entirely powered by this API, anything you can do in the app, you can also achieve programmatically—without limitations, unlocking endless possibilities!
### 🎉 Key Endpoints
* POST /respondent/add - Add a respondent to a survey.
* GET /respondent/getRespondent - Get a respondent's details.
* GET /respondent/getAllRespondents - Get all respondents for a survey.
* GET /survey/stop - Stop a survey.
* GET /respondent/estimation - Get a respondent's estimation.
# Application Change Log
Source: https://docs.redem.io/changelogs/application-change-log
Stay updated on the latest changes and improvements in the ReDem application.
## Duplicate Entrance Score
* The **Duplicate Entrance Score (DES)** is coming soon. It detects likely duplicate survey entrants using demographics and IP.
* **API only at first** — send a DES datapoint on `POST /v3/addRespondent`. File import support will follow.
* See the [Duplicate Entrance Score guide](/knowledge-base/quality-checks/duplicate-entrance-score) and [best-practice set-up](/knowledge-base/best-practices/best-practice-setup#duplicate-entrance-score) for details.
* Also see the [API Change Log](/changelogs/api-change-log) for request fields.
## Performance
* Even the largest surveys in the platform now open essentially instantly, instead of showing a loading spinner.
## Data Cleaning
* Fixed a bug where activating cleaning for an OES category with the threshold set to **0** excluded every respondent for that category.
* Fixed a bug where respondents exactly at the exclusion threshold were excluded. For example, with a Timescore threshold of **30**, a score of **30** is now kept; only scores **below** 30 are excluded.
## File Import
* Fixed edge cases in Quick Import for Decipher surveys that should not have affected anyone.
## Decipher Integration Agent
* Fixed a bug that could break a live survey when a page had multiple number inputs.
## Open-Ended Score: Answer Translation
* You can now enable translation on open-ended questions. ReDem translates non-valid, non-English answers to English so you can easily review and verify our results for any language.
* Translated answers appear in the respondents table, respondent details, and exports.
* Via the API, set `shouldTranslate: true` on OES datapoints in `POST /v3/addRespondent`.
* See the [ReDem Credits docs](/knowledge-base/miscellaneous/redem-credits) for translation credit rules and the [API Change Log](/changelogs/api-change-log) for request and response details.
## BAS
* Fixed a bug where the Behavioral Analytics Score could occasionally show **101**. The score is now always capped at **100**.
## File Import
* Intellisurvey exports are now supported in Quick Import, just like Decipher and Confirmit. ReDem automatically detects the format and prepares the file.
* When a file has duplicate values in the header row, the import now shows exactly which values are duplicated.
## Respondent Insights
* AI explanations are now visible in the respondents table (**Explanation** column), the respondent details, and in downloads — alongside the structured **Reasons for Exclusion**.
* Explanations are removed after excluding or including a respondent, applying cleaning settings, recalculating scores, or changing quality checks. You can re-generate them afterward.
* See the [Respondent Insights guide](/features/respondent-insights) for details.
## Open-Ended Score
* Short answers are no longer marked as `AI_SUSPECT`, even when most of a respondent's other answers are. There is not enough evidence to classify very short answers as AI-written.
* See the [Open-Ended Score docs](/knowledge-base/quality-checks/open-ended-score#5-ai-suspect-probable-non-human-generated-response) for details.
## Duplicate Respondent Check
* Previously, a new respondent was only checked against the last 500 respondents in the survey. Many duplicates arrive days apart, so that window missed them. The check is now smarter and catches duplicates regardless of when they entered the survey.
## Small Fixes
* We fixed a handful of minor usability quirks and bugs — the kind most of you would never notice, but that make things feel a little smoother once they're gone.
## Exclusion Reason Breakdown
* The exclusion reason breakdown is now available at the company level on the **Surveys** page. Click the **info icon** next to **Excluded Respondents** in the metrics row to open it.
* **Employees** see a breakdown across all surveys they uploaded. **Admins** see a breakdown for the whole company.
* Per-survey breakdowns on the survey **results** page are unchanged. See the [Data Cleaning guide](/knowledge-base/features/cleaning-and-review#view-exclusion-reason-breakdown) for details.
## File Import
* Post-processing after the last respondent is scored now finishes much faster. Results are available almost immediately instead of keeping the progress bar visible for up to three minutes.
## Confirmit Import
* Confirmit exports do not include a length-of-interview column, only `interview_start` and `interview_end`. During Quick Import, ReDem now adds an artifical **`Length of Interview`** column so you can use the Time Score without creating that column yourself.
## Timescore
* The Timescore carries less weight in the ReDem Score when a survey has many time-score data points but few other quality checks. This prevents the Timescore from dominating the overall score in those cases.
## Performance
* The app loads noticeably faster again, especially when viewing 100 or 1,000 respondents at once.
## BAS
* Voice dictation and swipe typing are now classified as natural typing with a BAS score of 60.
* See the [Behavioral Analytics Score docs](/knowledge-base/quality-checks/behavior-analysis-score) for details.
## Exclusion Reason Breakdown
* You can now view a breakdown of exclusion reasons at the survey level, showing how many excluded respondents were removed for each cleaning criterion.
* See the [Data Cleaning guide](/knowledge-base/features/cleaning-and-review#view-exclusion-reason-breakdown) for how to find this information.
## Change Quality Check Settings
* Quality check settings can now be changed for API projects after the initial upload, including **BAS**. Use the same **Quality Checks** workflow as for manual imports.
* See the [File Import guide](/features/file-import#change-quality-check-settings) for details.
## Performance
* Opening larger surveys feels much faster now, especially when loading many respondents at once (for example, 1,000 respondents).
## File Import
* AYTM, Confirmit, and Quantilope exports can now be uploaded directly in Quick Import. We automatically detect the format and prepare the file. No separate conversion step is required.
## Respondent Insights
* **Explain All** is now available to every customer. Generate AI summaries in bulk for respondents that are excluded or have a low Coherence Score.
* See the [Respondent Insights guide](/features/respondent-insights) for how individual and bulk insights work.
## Open-Ended Score
* AI Suspect detection is more accurate. ReDem now evaluates all of a respondent's open-ended answers together instead of checking each answer in isolation. Individual answers are still categorized separately, but the combined context helps catch AI-generated text that short answers alone might miss.
* See the [Open-Ended Score docs](/knowledge-base/quality-checks/open-ended-score#5-ai-suspect-probable-non-human-generated-response) for details.
## Teams
* You can now create teams in ReDem to control which employees can access which surveys.
* See the [Teams guide](/features/teams) for details.
## File Import
* The import process now detects Confirmit files more accurately.
* For very large surveys, columns with a low response rate are removed automatically during upload. The separate [Column Cleaner](https://app.redem.io/integrationAssistance/clean-excel) utility is no longer required.
* You can delete multiple suggested datapoints in the upload process at once.
## Respondent Details
* When opening the respondent details you can now see how much weight each quality check has on the respondent's overall ReDem Score. This is only available for surveys created via new uploads or API projects after this release.
## Answer Distribution Analysis
* When opening the answer distribution chart in the Data Visualization tab, ReDem automatically highlights the top 5 questions where the difference in results pre and post cleaning is the biggest.
## Change Quality Check Settings
* After the initial upload you can now change the quality check settings for any manually imported survey. ReDem only re-runs checks that changed and only deducts credits for those changes.
* See the [File Import guide](/features/file-import#change-quality-check-settings) for details.
## Import Assistant
* The import assistant can now process files with any amount of respondents. Larger files may take longer, but AI suggestions are much more reliable, especially for the CHS.
## CHS
* The CHS survey description is now visible in the Respondent Detail View.
* CHS scoring is more reliable at distinguishing between a score of 20 and a score of 50. Previously the same respondent could receive either score inconsistently; results are now more stable.
## Contract Expiration
* You receive an email when your contract is about to expire and when it did expire.
## Decipher Integration Agent
* The Decipher Integration Agent can now handle multiple text-boxes for the same question for the OES and BAS.
## Answer Distribution Analysis
* In the overview of the Data Visualization tab you can select any question from the interview and see the respondents answer distribution pre and post cleaning.
* This is currently restricted to surveys that use the CHS.
* Some type of questions, like open ended questions, are currently not supported.
## Respondent Retention period
* Via the API you can now set a retention period for the respondents. This means that respondents will be deleted after the retention period has passed. This is only available for API v3 surveys. Check out the [API docs](/api-reference/endpoints/v3/addRespondent#body-retention-days) for more information.
## BAS
* We tuned the BAS to reduce the number of false positives for respondents that had a long chain of uninterrupted keystrokes.
## CHS
* The CHS will not flag false inconsistencies regarding the respondents age range and birth year anymore.
* For quick imports the CHS is using an additional verification step to reduce any false positives.
## Minor improvements
* The credit overview now shows the remaining and total credits from the current contract period by default.
* The resopndent explanations are much more precise and on point.
* The filters for the respondent table are visible by default.
* The sorting of the columns in the respondent table has been fixed. Previously the order was e.g. Q1, Q10, Q2. Now it's Q1, Q2, Q10.
* Copy & Paste of keywords for the OES is much smoother.
* Fixed a bug where larger surveys in the quick import did not finish the post-processing step.
## Respondent Table
* When sorting by any scores the unavailable scores, e.g. because some didn't respondent to an open ended question, will always be sorted to the end of the table. This means you get to always see the relevant results on the first page of the table.
* The table and the respondent details were sometimes not showing the incoherrent questions for the CHS. This issue is now resolved.
## Duplicate Answer Check
* The duplicate answer check had a high false positive rate on very short answers. We will only check for duplicate answers if at minimum 10 characters are provided. For CJK languages the threshold is 3 characters.
## Company Settings
* You can configure defaults for respondent attributes and missing values. These defaults are applied automatically for every import.
* You can enforce a survey description during import for the CHS.
## BAS
* The total BAS score has been slightly adapted so that it takes the number of keystrokes into account. More keystrokes carry a higher weight.
* In the BAS visualization you can show the chart without extreme outliers for easier review.
## Quick Import
* Decipher files are detected automatically. The **Is Decipher Export** checkbox has been removed.
## Quick Import
* There's a utility for the quick import that removes all columns from the survey export with a response rate lower than 10%. This improves the results you get from the CHS. You can find it here: [Column Cleaner](https://app.redem.io/integrationAssistance/clean-excel).
* In step 2 of the quick import you can now enter your own survey ID instead of just using a survey name. That allows for easier traceability between your survey platfom and ReDem.
## Respondent Table
* When you open the detail view of a respondent, you can let the AI generate a summary of the respondent's quality to understand the respondents score at a glance.
* You can now recalculate up to 500 respondents at once and see a progress bar while the recalculation is running.
## CHS
* The CHS has been improved to reduce the false positive rate for any type of survey and any type of question.
## Timescore
* We fixed a bug where the Timescore wasn't calculated for surveys with more than 100 TS datapoints.
## Decipher Integration Agent
* We updated the Decipher Integration Agent such that it generates higher quality code and works out of the box for more surveys.
It's still required to test the integration of your Survey with ReDem before going Live. The integration Agent has no guarantee that the integration will work out of the box.
## Bugfixes
* Fixed a bug where the respondent search yielded no results when on a page other than the first one.
* Some surveys couldn't load 1000 respondents at once. This issue is now resolved.
## API Keys
* There are now two different types of API keys: Private and Public.
* Private API keys are used for server-side integrations and can be used to access all endpoints.
* Public API keys are used for client-side integrations and can only be used to access the `addRespondent` endpoint.
* You can create and manage API keys in the API keys section of your profile as you're already used to.
* You can find more information about API keys in the [API Keys documentation](/api-reference/api-specifications/api-keys).
For API integrations in Decipher surveys you must use a Public API key. Otherwise you expose yourself to the risk of unauthorized access to your survey data.
## GQS Grid Length
* You can now send grids with a minimum length of 5 items. Previously the lower limit was 7 items in a grid. The upper limit remains at 50 items.
* The pattern check is not available to grids with length 5 or 6. The pattern check is only available for grids with length 7 or more. Reason being that 5 or 6 items is not sufficient to detect patterns beyond (partial-)straightlining confidently.
## BAS accuracy
* The BAS accuracy has been improved to detect more unnatural typing behaviors while simultaneously reducing false positives.
## Supported file formats
* We now support AYTM and Confirmit files for the quick import. The files must be pre-processed in our Integrations section and then imported into ReDem.
* [Confirmit Integration Assistance](https://app.redem.io/integrationAssistance/confirmit)
* [AYTM Integration Assistance](https://app.redem.io/integrationAssistance/aytm)
## Respondents
* You can now search for multiple respondents at once by typing their IDs into the search bar, or copy pasting a list of IDs into it.
* By clicking on a respondent in the table, this will open a detailed view of the respondent. In their you can easily find e.g. the incoherrent questions and answers for the CHS, a visualization of their grid answer pattern. More useful information will be added in the future.
## OES and CHS
* For our US customers we added a new geographic location to the OES and CHS processing. That way we avoid missing scores more reliably.
* An issue in the CHS was fixed were it flagged respondents based on valid ages in combination with their birth year.
## Respondents
* The download of respondents now works reliably with surveys of any size. Please keep in mind that large surveys may take a while to download.
* When hovering over a respondents OES or CHS answer, you can now see the exact question and answer text and don't have to resize columns anymore.
## Duplicate detection
* Previously the duplicate detection didn't flag the first duplicate response. Only subsequent duplicates were flagged. This issue is now resolved and the first duplicate response is now flagged as well. This only applies to the quick import.
## Import Assistant
* The Start and End Columns for the Grid Score can now be changed after their first selection.
## Respondents
* In the survey view you can **filter respondents by included or excluded** status. The filter applies to **downloads** and **data visualizations**, so exports and charts match the subset you are looking at.
## Other improvements
* **CHS & OES**: Requests Blocked by the AIs content filter are classified consistently as BAD\_LANGUAGE; CHS scoring is adjusted so common, realistic answer patterns are not penalized as inconsistent.
* **Import Assistant**: Hard limits on row and column counts clear errors when a file exceeds them.
## Surveys
* You can now rename a survey after it has been created. It's important to highlight that the survey name used to add respondents via the API must not be changed, even after renaming the survey in the app.
This is the only safe way to ensure that respondents are tracked in the correct survey.
## Timescore
* The lowest score a respondent can get if they're above the median time is now 20. Previously it was 30.
* In case their score is below 30, they will be excluded when using the default cleaning settings for the Timescore.
## Default Cleaning Settings
* The TS excludes respondents at a threshold of 30 by default.
* The BAS excludes respondents at a threshold of 20 by default and excludes respondents starting with the first Unnatural Typing data point.
## UX Improvements
* The respondent table shows the question text for all OES questions in the header.
* Pressing Enter on the keyboard in a confirm dialog now triggers the action, e.g. deleting respondents.
* Deleting and recalculating respondents fetches the updated data immediately. Previously there was a brief delay which led to confusion.
## File Import
* The upload of respondents is noticeably faster, such that results are available much earlier.
* We improved the import process for Decipher files. The import is now more reliable and configuring the survey is way faster than before.
* In case a file contains duplicate respondent IDs, the import will now point to the exact IDs that are duplicates.
## Support for tracking surveys
* When uploading a new survey, you can now choose to use the quality checks and cleaning settings from a previous one. This makes the import of recurring surveys much smoother and less error prone.
## Admin Permissions
* Company Admins can now exclude, recalculate and delete respondents for other employess in the company. They also can add additional respondents and delete surveys.
## CHS
* The CHS now accepts only up to 300 questions per respondent. We observed decreased accuracy of the CHS when using too many questions.
* Selecting single questions for the CHS during the import is now more intuitive.
## System Stability
* Recent issues with missing OES and CHS scores are now resolved.
## Minor improvements
* The UI now indicates if a respondent has been manually included when it was previously excluded.
* Pay-as-you-go customers can now see their used credits in the Credit Overview.
## CHS Import Assistant
* Configuring the CHS for the manual import is now easier than ever before. Instead of selecting individual questions, you can now select full groups of questions that belong together.
## Downloading Survey Results
* The export for larger surveys will now be sent via email to you. This way you don't have to wait on the page for the export to be ready.
## Minor improvements
* The manual import loading indicator is now more intuitive.
* Solved an issue where an error screen appeared after not using the app for a while.
## New Attribute: Survey Description for CHS
* You can now add a `surveyDescription` when submitting CHS data points to provide context about the survey’s purpose and intent. This increases the precision of the CHS. Find more information see the [Coherence Score docs](/knowledge-base/quality-checks/coherence-score) and the [API docs](/api-reference/endpoints/v3/addRespondent).
## Import Assistant
* Selecting Grid Scores with more than 50 items is now prevented. Previously this led to errors in the upload.
* Fixed an issue where ZIP codes lost leading zeros.
## Respondent Table
* It is easier to change the cleaning status of a respondent.
* Changing the cleaning status, deleting or recalculating respondents, does no longer reset your filter and sorting settings.
* Improved loading indicator when loading or sorting larger tables.
## Filtering Respondents by Attributes
* In the Respondent Table, you can now filter the respondents by their attributes to e.g. view all respondents from a specific panel.
* In the Data Visualization tab you can filter for specific attributes as well, giving you in depth insights into the data.
## Grid Quality Score
* The overall Grid Quality Score now takes into account the number of items in the grid. This means longer grids have a higher impact on the overall score.
## Minor improvements
* **Data Import**: Duplicate header rows are now consistently flagged as errors as soon as possible.
* **Adding additional respondents**: It could rarely happen that no or only few respondents were added to the survey. This issue is now resolved.
## Decipher Import Assistant
* The assistant’s output is now more accurate, requiring fewer manual adjustments to integrate with the ReDem API.
## Data Import
* **Reliability**: - The manual data import process can now handle even larger files more reliably, reducing the likelihood of errors.
* **Speed**: Individual steps in the import process have been optimized, significantly reducing upload times, especially for larger files.
* **Bugfixes**: In some cases, an error message was displayed on the survey page after the import process completed instead of the progress bar. This issue has now been resolved.
## Respondent Attributes: Support for your own custom attributes
* You can now add any custom attributes to the respondent during the import process. These values will be available in the ReDem App and in the result export and can be used for further analysis of your data.
## Minor improvements
* **Survey Overview**: The survey overview page is loading considerably faster now.
* **Respondent Table**:The table pagination used to be buggy when switching between pages and page sizes. This issue is now resolved.
## Improved Respondent Table
* **Column filtering**: You can now select which columns are displayed in the Respondent Table. This allows for a more focused view of the data.
* **Header grouping**: The headers in the Respondent Table used to be hard to read as grouping of columns was not clear. Now columns that belong together have their own header group.
* **Accessibility**: the readibility of several buttons in the Respondent Table is improved.
## Refined Excel and CSV Export
* **Column filtering**: The Excel and CSV export mimic the column filtering in the Respondent Table. Only columns visible in the Respondent Table will be exported.
* **Additional Excel sheets**: The Excel export now includes additional sheets for the OES, GQS, TS and CHS results. This makes post processesing the data easier.
## Time Score
* Respondents that take a very long time to complete a survey are now scored lower. Previously the lowest Time Score for a respondent that took longer than the median was 50. The lowest Score is now 30.
## New BAS keystroke visualization
* The BAS keystroke visualization has been completely revamped. You can skip the visualization during long pauses from respondents, see the total time spent typing and more.
## Survey Import
* There are several minor improvements to the survey import process that make it feel smoother and more user-friendly.
## Transaction Overview
* **Overview**: The Transaction Overview for Account Admins now shows a summary of the transactions for the account, as well as the total credits used and available.
* **Export**: It's now possible to export all transactions of your account. This is useful if you want to review transactions and get a better overview of your usage.
## Export: Excel Format Support
* **Excel export**: Results can now be exported in Excel (.xlsx) format in addition to CSV.
* **Reliable data structure**: Excel exports avoid the common issue of CSV imports incorrectly identifying separator characters, which often results in broken columns.
* **Better compatibility**: Excel format preserves data integrity across different regional settings and spreadsheet applications.
## File Import: OES Keywords Paste Support
* **Flexible keyword input**: OES keywords can now be pasted directly into the UI during file import with semicolons, commas, or newlines as separators.
* **Automatic separation**: The system automatically detects and separates keywords regardless of delimiter format.
* **Improved workflow**: Copy and paste keyword lists from spreadsheets or other sources without manual reformatting.
## Recalculate Respondents
* **Recalculate specific checks**: You can now recalculate specific respondents and select exactly which quality checks to recalculate (OES, GQS, TS, CHS, BAS).
* **Cost Efficiency**: Credits are only deducted for the specific checks you select.
* **Granular control**: Provides flexibility to fix data issues or apply new quality standards to a subset of respondents.
* **Updated configuration**: Recalculation operations can include options to update allowed languages for OES, activate duplicate detection, and enable pattern checks for GQS.
## OES v3 Support: Enhanced Category Visualization and Effort Scale
### 🔥 OES v3 Integration
The application now fully supports OES v3 with improved category detection and visualization capabilities.
### 🚀 New Features
* **OES v3 Categories Visualization**: Support for visualizing the new OES v3 categories (AI\_SUSPECT, OFF\_TOPIC, NO\_ANSWER, GIBBERISH) with clearer boundaries and improved accuracy.
* **Effort Scale Chart**: New chart visualizing the average effort (LOW, MEDIUM, HIGH) across a survey, providing insights into respondent engagement levels.
### 📊 Enhanced Quality Metrics
* Improved category boundaries reduce false positives and false negatives
* Effort scale integration provides more nuanced quality assessments for VALID\_ANSWER and NO\_ANSWER categories
* Better scoring accuracy with OES v3 classification system
The application automatically detects surveys created with API v3 and displays the appropriate OES v3 categories and effort metrics.
### 🧹 Manually Update Respondents' Excluded Status
* **Toggle exclusion status**: Manually switch one or more respondents between included and excluded without re-running the full import or cleaning flow.
* **Automatic reason updates**: The `Reasons For Exclusion` field is automatically updated to "Manually Excluded" to reflect each respondent's new status, keeping your quality reporting consistent.
* **Clear auditability**: Changes to exclusion status are surfaced in the UI so teams can quickly review which respondents were updated and why.
## File Import: Multi-Sheet Excel Support
* Users can upload Excel files where the data map is on a separate sheet. The system automatically relates columns in the data sheet with the data map sheet using AI.
## Export & Download
* CSV exports now include the survey name and a timestamp in the filename for clarity.
## UX & Interface
* Various small improvements.
## UX & Interface
* Various small UI improvements across the application.
* Survey Update: UX improvements to streamline updating surveys.
## Quality Checks: CHS
* Reduced CHS Quality Score errors by hardening parsing and validation.
## Manual Data Import
* It is now possible to specify a questionnaire language column to set allowed languages for OES data points during manual imports.
## UX & Interface
* Survey Update: Add new data records to surveys directly from the survey results page, improving imports for multi-wave surveys.
## Delete Features
* New feature for deleting respondents and surveys.
## Integrations & Monitoring
* Public-facing status page for ReDem 3.0 API & Application providing real-time availability and health monitoring.
## Bulk Cleaning and File Import UX
* Bulk cleaning: New backend endpoint and UI to clean all respondents from the survey results page with reusable settings.
* File import: Immediate progress bar after confirmation showing the total respondents being processed.
## Respondent Details: BAS Typing Behavior Chart
The BAS tab now displays an interactive chart of a respondent’s typing behavior for the question.
* Visualizes bursts, pauses, and total time; includes the typed text
* Hover or tap for moment-by-moment details
* Clicking on the BAS score or typing behavior of a respondent in the table opens this tab directly
## Respondent Details: Cleaning Tab
A dedicated Cleaning tab now shows all cleaning information for a single respondent.
* Clicking “Status” or “Reason for Exclusion” opens this tab directly
## File Import: CSV and Excel with AI Suggestions
You can now manually upload respondents from CSV (.csv) or Excel (.xlsx) files on the Import page. After uploading, the app provides AI-powered suggestions for the best quality checks to enable (e.g. OES, CHS, GQS, TS) based on your data.
* Supported file types: .csv, .xlsx
* AI suggestions: recommends quality checks and pre-fills survey metadata (title, row indexes, missing values, etc.)
👉 [Read the full guide](/features/file-import)
## Authentication: Letter Capitalization Fix
Fixed a bug that caused incorrect letter-case handling across authentication flows:
* Registration
* Login
* Password reset
* Invite user
Inputs are now normalized and validated consistently, preventing case-related failures.
## Performance: Faster Survey Page
The Surveys page now loads the list in under 3 seconds for typical workspaces.
* Optimized queries and pagination
* Improved caching
# File Import
Source: https://docs.redem.io/features/file-import
Learn how to upload your survey data in ReDem
## Preparing Your Data
To ensure smooth processing and the best possible results, please follow these guidelines before importing data.
### Supported Formats
Supported upload files:
* **CSV**
* **Excel**
ReDem also recognizes exports from common survey platforms and prepares them automatically during upload:
* **Decipher**
* **AYTM**
* **Confirmit**
* **Quantilope**
Upload the original export file from your platform — no separate conversion step is required. ReDem detects the format, maps sheets and metadata, and continues with the normal Quick Import flow. See [Supported Survey Tools](#supported-survey-tools) below for platform-specific export steps.
### Row and column limits
Each upload file may contain **at most 5,000 rows** and **at most 5,000 columns**. If your file exceeds either limit, you need to split or trim the data before you can import it.
If the file has **too many columns**, ReDem will ask you to reduce the file to **5,000 columns maximum** (for example by removing variables you do not need for the import) before you can continue.
The row limit applies to the full sheet you import (including header rows, question-text rows, and respondent rows). If you need more than 5,000 respondents in one survey, **upload a file that fits within the limit first**, then add further respondents afterward. See [Updating Imported Data](#updating-imported-data) for how to append new interviews after the initial upload.
### Required Formatting for Quality Checks
If you want to use content-based Quality Checks (**Coherence Score** or **Open-Ended Score**), your uploaded file must include both questions and answers in a clearly labeled format. You can structure your file in two ways:
#### a) Single-Sheet Files
If all data is stored in one sheet, ensure that each column contains:
* A unique variable identifier (e.g., `Q1A1_1`)
* The full question text (e.g., "Please indicate how often you usually eat the following types of food. Think about a normal week. / Red meat (e.g., beef, pork)")
* The labeled answer (e.g., "rarely")
**Recommended structure:**
* **Row 1 - Header row:** Unique variable identifiers
* **Row 2 - Question text row:** Full question text for each variable
* **Row 3 onward - Respondent data:** One row per respondent, with responses in plain text
It is also acceptable if the question text is embedded directly in the header row after the unique variable identifier (e.g., `Q1A1_1: Please indicate how often you usually eat the following types of food. Think about a normal week. / Red meat (e.g., beef, pork)`).
#### b) Two-Sheet Files
If you use separate sheets:
**Sheet 1 (Data):**
* **Row 1:** Unique variable identifiers
* **Row 2 onward:** Coded answers of the interview
**Sheet 2 (Codebook):**
Must include:
* The mapping between variable identifiers and their full question text
* The labeled answer options for each question and its variable identifier
Do not include additional information in the codebook (e.g., filter paths, metadata descriptions), as this may interfere with processing.
[Sample File Format](https://redem-public.s3.eu-central-1.amazonaws.com/ReDem+Data+Import+Example.xlsx)
Once your file is prepared, you can proceed with the import process either **manually** or with **AI assistance**.
## Quick Import
Follow these steps for a quick import:
Navigate to **Quick Import** and select the file from your computer. If you want to reuse the configuration from a previous tracking survey, activate **Reuse settings from existing survey**, select the reference survey, and click **Use Template Settings**. Otherwise choose **“Select Manually”** if you want to manually select which questions will be included in the quality check. If your Excel file contains multiple sheets, select which sheet contains the **data** and which sheet contains the **data map**.
* Assign a **survey name**.
* Confirm the correct **Header Row** (usually row 1), **Question Text Row** (usually row 2), and **Respondent Start Row** (usually row 3).
* If your dataset uses codes for missing values, enter them.
* Save your settings.
Select the column that uniquely identifies each respondent (e.g., Respondent ID).
* **Add a New Quality Check:** For example, choose *Open-Ended Score*.
* **Choose Data Points:** Select the relevant open-ended question.
* **Determine Settings:** Add the question text, enrich it with keywords if needed, specify the allowed languages (leave empty to allow all languages), and activate or deactivate the duplication check.
* **Recommendation:** Activate the duplicate check only if identical or highly similar responses to open-ends among and within the interviews are implausible.
* **Add Additional Open-Ended Questions:** Repeat as necessary, then confirm.
* **Configure Other Quality Checks:**
* **Grid Questions Score:** Assign a name to the data point, then select the first and last columns of the grid (minimum of 5 columns required). If the grid is not randomized and contains at least 7 items, enable the **Pattern Check** to identify fraudulent click patterns beyond simple straightlining.
* **Coherence Score:** Select all questions you want evaluated for coherence.
* **Time Score:** Select the variables that capture response time and/or interview length (in seconds or milliseconds).
Decide whether to enable ReDem’s Automatic Data Cleaning. This feature applies exclusion recommendations based on predefined thresholds.
* **If Enabled:** You can further customize the cleaning settings to suit your project.
* **If Disabled:** You will still receive the selected quality scores, but **no exclusion recommendations** will be applied.
For a detailed explanation of ReDem’s cleaning process, refer to [How to Clean Data with ReDem](/knowledge-base/features/cleaning-and-review)
**Recommended Settings**
We recommend using ReDem’s recommended cleaning settings for optimal data quality which means to exclude an interview if:
* ReDem Score is below 60 OR
* Two or more open-ended questions have an Open-Ended Score below 40 OR
* Two or more answers to open-ended questions are classified as:
* AI-Generated OR
* Gibberish OR
* Off Topic OR
* Wrong Language OR
* Bad Language OR
* Coherence Score is below 30 OR
* Two or more grid questions have a Grid-Question Score below 20 OR
* Time Score is below 30.
After configuring your quality checks and cleaning settings, you will see a summary of the selected questions and checks.
* **Review** your selections carefully.
* **Adjust** any mistakes before proceeding.
* Check how many **credits** your chosen checks will consume.
Once everything is correct, **approve and upload your data** to complete the process.
## AI Assisted Upload
Navigate to **Import Data** and select the file from your computer. If you want to reuse the configuration from a previous tracking survey, activate **Reuse settings from existing survey**, select the reference survey, and click **Use Template Settings**. Otherwise choose **“Analyze with AI”**. If your Excel file contains multiple sheets, select which sheet contains the **data** and which sheet contains the **data map**. Please note that this method may take additional time, as the system will analyze your file, identify the relevant questions for each quality check type, and extract the necessary metadata. Larger files will require more time to process. During this process, you can freely navigate to other pages or even close the application.
Check and confirm the extracted metadata for your survey. You can edit each item if needed.
Select the column that uniquely identifies each respondent (e.g., Respondent ID).
The AI’s suggestions can require refinement. Manually review each quality score, adjust as needed, and confirm your selections.
**Open-Ended Score (OES)**
* Add keywords (optional), define allowed languages (recommended), and enable or disable the duplicate check.
* Remove any open-ended questions you do not want scored with ReDem’s Open-End Score.
* Confirm your choices.
**Grid-Questions Score (GQS)**
* The AI identifies grid questions with 5 or more items.
* If any should be excluded - for example, where response patterns like straightlining are acceptable - remove them using the delete icon.
* Confirm your selections.
**Coherence Score (CHS)**
* Displays which questions are included in the check.
* Ideally, include all questions where possible.
* Select or deselect questions as needed, then confirm.
**Time Score (TS)**
* AI suggests the variables that capture response time and/or interview length.
* Select or deselect response times/interview length as needed, then confirm.
Decide whether to enable ReDem’s Automatic Data Cleaning. This feature applies exclusion recommendations based on predefined thresholds.
* **If Enabled:** You can further customize the cleaning settings to suit your project.
* **If Disabled:** You will still receive the selected quality scores, but **no exclusion recommendations** will be applied.
For a detailed explanation of ReDem’s cleaning process, refer to [How to Clean Data with ReDem](/knowledge-base/features/cleaning-and-review)
**Recommended Settings**
We recommend using ReDem’s recommended cleaning settings for optimal data quality which means to exclude an interview if:
* ReDem Score is below 60 OR
* Two or more open-ended questions have an Open-Ended Score below 40 OR
* Two or more answers to open-ended questions are classified as:
* AI-Generated OR
* Gibberish OR
* Off Topic OR
* Wrong Language OR
* Bad Language OR
* Coherence Score is below 30 OR
* Two or more grid questions have a Grid-Question Score below 20 OR
* Time Score is below 30.
After configuring your quality checks and cleaning settings, you will see a summary of the selected questions and checks.
* **Review** your selections carefully.
* **Adjust** any mistakes before proceeding.
* Check how many **credits** your chosen checks will consume.
Once everything is correct, **approve and upload your data** to complete the process.
## Updating Imported Data
Use this flow to add new interviews to an existing import without reprocessing previously uploaded records.
In the Surveys section, open the data file you want to update.
Click the green "+ Add Data Records" button in the top-left to open the Upload Data File screen again.
Choose the file that contains additional interviews from the same survey and click "Proceed to Review".
You may upload all interviews (previous + new) or only the new interviews. Existing interviews are automatically detected and skipped; only new interviews are uploaded.
If you upload **only** the new interviews, you will not be able to use [Change Quality Check Settings](#change-quality-check-settings) on that survey later, because ReDem no longer has a single file with the full respondent set. Uploading **previous + new** interviews keeps that option available.
* Verify the Survey Metadata is correct.
* Review the Respondent ID to ensure proper matching.
* Confirm the Quality Checks are set as intended.
Before confirming, a summary will show how many new interviews will be added and the associated credit cost. Only new interviews consume credits.
Approve to update your survey with the new interviews.
## Copy Survey with Settings
If you import recurring or tracking surveys, the fastest option is to reuse the setup from a previous survey.
Navigate to **Import Data** and upload the new CSV or Excel file.
After the file upload, activate **Reuse settings from existing survey** and select the previous survey you want to use as reference.
Click **Use Template Settings**. ReDem will carry over the reference survey's metadata, respondent ID and attributes, quality checks, and cleaning settings into the new import.
Continue through the import flow as usual. You can add to or change the imported settings throughout the remaining steps before you confirm the upload.
## Edit and Reapply Cleaning Settings
After you have cleaned a file, you can adjust and reapply your cleaning settings at any time.
On your survey results page, click the "Cleaning Settings" button at the top.
Modify the cleaning parameters as desired.
Click "Apply Cleaning" to recalculate your results using the updated settings.
## Change Quality Check Settings
After a survey has finished processing, you can change which questions are included in your quality checks and update check-specific settings (for example, keywords, languages, or duplicate detection for Open-Ended Score). ReDem recalculates **all existing respondents** using the updated configuration.
This is separate from [Edit and Reapply Cleaning Settings](#edit-and-reapply-cleaning-settings): quality check settings control **which data is scored and how**; cleaning settings control **exclusion thresholds** on scores you already have.
**Change Quality Checks** is available for **Quick Import** surveys (file upload) and **API** projects (API v3 and later). For older surveys, or when the import file no longer contains the **full respondent set** (see below), the feature is disabled.
If you append new respondents to a survey, this feature only remains available if your latest upload contains **all** previous respondents as well as the new ones.
In all other cases the feature is disabled. This is because we only store the raw data from your latest upload. If a respondent is missing in that upload, a change in quality check settings would lead to dataloss.
### API projects
For **API** projects, changing **Quality Checks** works the same
way as for Quick Import surveys. However, you cannot
add datapoints to respondents, as we do not have the necessary information
available to do so, e.g. the answers of respondents do a new open-ended question.
### Credits
Changing quality checks may consume additional credits. On the **Summary** step, ReDem shows a **maximum** credit estimate for the settings you changed across all respondents. You are charged only for **added or edited** datapoints on respondents that are recalculated successfully; **removing** datapoints does not refund credits. Turning duplicate detection on or off for an existing open-ended question without other processing changes does not add credits.
If your account does not have enough credits for the estimated maximum, you cannot apply the changes until you add credits. See [ReDem Credits](/knowledge-base/miscellaneous/redem-credits) for how credits are calculated.
On your survey **results** page, click **Quality Checks** at the top (next to **Cleaning Settings**).
If the survey is still processing, ReDem shows a message and blocks editing until processing finishes.
On the **Quality Check** step, adjust your checks the same way as during import: add or remove checks, change which columns or questions are included, and update check-specific options. Confirm each quality check panel before continuing. For details on configuring each check, see [Select Quality Checks and Questions](#manual-upload) in the manual upload steps above.
Use **Back to Survey** if you want to cancel without saving.
On the **Summary** step, review how many datapoints changed per quality check (added, removed, or net change) and the maximum credit requirement for all respondents. Click **Apply Changes** when you are ready.
ReDem verifies your credit balance, then asks you to confirm. Click **Confirm & Apply** to save the new settings and start recalculation for every respondent in the survey.
You return to the survey results page while ReDem processes respondents. A progress view shows how many respondents remain. You can leave the page and come back; processing continues in the background.
When recalculation finishes, scores, charts, and the respondent table reflect the updated quality check settings.
## Supported Survey Tools
ReDem recognizes exports from the platforms below. Upload the original file from your survey tool; ReDem detects the format and prepares it for import.
### Decipher
Export your survey from Decipher as Excel, then upload that file to the Quick Import.
Open your survey in Decipher, then click **Overview** -> **Data Downloads** -> **Excel**.
Decipher opens a status page while it prepares the export.
Open the downloaded ZIP file and upload the Excel file inside it to ReDem. ReDem detects the Decipher format automatically and selects the correct data and label sheets when possible.
### AYTM
Export your survey data from AYTM and upload the Excel file directly to the Quick Import. ReDem detects the AYTM format and prepares the file for the import steps that follow.
### Confirmit
Export your survey from Confirmit and upload the Excel file directly to the Quick Import. ReDem detects the Confirmit format, maps the data and datamap sheets, and continues with the normal import flow.
Confirmit exports include `interview_start` and `interview_end` timestamps but no length-of-interview column. ReDem adds a **`LengthOfInterview`** column during the import process so you can enable the Time Score without preparing that column yourself.
### Quantilope
Export your survey from Quantilope and upload the Excel file directly to the Quick Import. ReDem detects the Quantilope format and prepares the codebook and data sheets automatically.
# Respondent Insights
Source: https://docs.redem.io/features/respondent-insights
Review individual respondents and use AI-generated explanations to understand their quality scores.
After ReDem evaluates your survey, the **Respondent Table** on the survey results page lists every interview with quality scores, cleaning status, and question-level results. Use it to filter, sort, download, and open detailed views for individual respondents.
## Respondent detail view
Click any row in the Respondent Table to open the **respondent detail view**. From there you can review:
* **Overview**: ReDem Score, individual quality check scores, quality check weights on the overall score, and AI-generated respondent insights
* **Quality check tabs**: Drill into OES, CHS, GQS, TS, and BAS results for that respondent, including flagged answers, patterns, and visualizations where available
* **Cleaning**: Included or excluded status and the structured **Reasons for Exclusion**
## AI-generated respondent insights
ReDem can generate a plain-language **explanation** of a respondent's quality profile: why they were excluded, or that they look fine to include. The text is based on that respondent's cleaning status, exclusion reasons, and flagged quality-check results.
Each explanation is a **single short paragraph** (not separate summary and conclusion sections).
* **Excluded respondents**: The text usually opens with the exclusion reasons (for example, `Exclusion because of the Coherence Score Threshold…`), then briefly describes the substantive issues on the affected checks — such as OES categories and flagged question IDs, GQS straightlining, CHS contradictions, unusual completion time, or BAS patterns. Checks with no issues are omitted.
* **Included respondents**: The text is typically one short sentence stating that the respondent is included and not sufficiently suspicious across the checks.
These AI explanations are separate from the structured **Reasons for Exclusion** list (for example, `ReDem Score Threshold` or `Manually Excluded`). That list always comes from cleaning rules; the explanation is the readable narrative on top of it.
### Where explanations appear
Once generated, explanations show in three places:
* **Respondent Table**: An **Explanation** column appears when at least one respondent in the survey has an explanation. Long text is truncated in the cell; hover to read the full paragraph.
* **Respondent detail view**: On the **Overview** tab, under **Respondent Insights**.
* **Downloads**: Excel and CSV exports include an **Explanation** column when at least one respondent in the export has an explanation.
The table and downloads still include a separate **Reasons for Exclusion** column for the structured cleaning reasons.
### Generate insights for one respondent
1. Open the respondent detail view from the Respondent Table.
2. Go to the **Overview** tab.
3. Click **Generate Insights**.
Generation usually takes a few seconds. You can generate an explanation for any respondent from the detail view, including included respondents with a high Coherence Score.
If an explanation already exists, ReDem keeps it and does not overwrite it from this button. After an explanation is [cleared](#when-explanations-are-removed), click **Generate Insights** again to create a new one.
### Explain all respondents
For larger reviews, use **Explain All** in the Respondent Table toolbar to generate explanations in bulk.
1. Open the survey results page.
2. Click **Explain All** above the Respondent Table.
3. Confirm the operation.
ReDem queues explanations for respondents that are **excluded** or have a **Coherence Score below 80**. Included respondents with a CHS of 80 or above are skipped, because they typically need less manual review.
Bulk generation runs in the background. You can stay on the page or navigate elsewhere; a progress indicator shows while jobs are still running. When an explanation is ready, it appears in the **Explanation** column and in the respondent's **Overview** tab.
If a respondent could not be evaluated (for example, when the ReDem Score is unavailable), ReDem does not generate an explanation for them.
### When explanations are removed
Explanations are cleared automatically when respondent quality data changes, so the text does not stay out of date. ReDem removes the explanation when you:
* Exclude or include a respondent
* Apply new cleaning settings
* Recalculate the respondent's scores
* Change the respondent's quality check settings
After an explanation is removed, generate it again with **Generate Insights** or **Explain All**.
# Teams
Source: https://docs.redem.io/features/teams
Organize employees into teams and control who can access which surveys.
Teams let company **admins** group employees and control survey visibility within your organization. When employees work on the same projects, teams make it easy to collaborate without giving everyone access to every survey in the company.
## What teams are good for
* **Collaborate within a project group** — teammates can open and work on each other's surveys without extra setup for every new survey.
* **Keep teams isolated** — employees on Team A do not see Team B's surveys unless someone is explicitly invited.
* **Share across teams when needed** — use survey invites for one-off access across team boundaries (for example, a specialist on another team).
* **Stay in control as an admin** — admins always see all company surveys and manage team membership centrally.
Teams apply to **employees** only. Company admins are not team members and always have access to all surveys in the company.
## How survey access works
Every survey has an **owner** (the employee who created it). The owner always keeps access to their survey.
**Team access** is based on the owner's **current team**:
| Who | What they can access |
| ------------------------------------------ | ------------------------------------------------------- |
| **Company admin** | All surveys in the company |
| **Survey owner** | Their own surveys |
| **Employee on the same team as the owner** | Surveys owned by anyone on that team |
| **Employee invited to a survey** | That survey, even if they are on another team |
| **Employee with no team** | Only surveys they own, plus surveys they are invited to |
### When team membership changes
Access updates automatically — you do not need to re-share surveys.
* **Owner moves to another team** — their former teammates lose access; their new teammates gain access.
* **Employee joins a team** — they immediately see surveys owned by teammates on that team.
* **Employee leaves a team** — they keep surveys they own and surveys they were invited to, but lose team-based access to teammates' surveys.
If an employee creates surveys before joining a team, those surveys are still owned by that employee. Teammates only gain access after the owner is on the same team.
## Set up teams (admins)
Go to **Administration → Users**.
Click **Create Team** (or **Manage Teams** if teams already exist). Enter a team name and select at least one employee. Team names must be unique within your company.
Use the **Team** column in the user table to assign or change team membership. Each employee can belong to **one team at a time**. Assigning someone to a new team removes them from their previous team.
You can rename or delete teams from **Manage Teams**. Deleting a team removes team membership from its members. Surveys are not deleted; access changes because those users no longer share a team with the survey owners.
## Share a survey with specific people
Team membership covers most day-to-day collaboration. Use **Share** on a survey when someone outside the owner's team needs access.
1. Open the survey and click **Share**.
2. Review **Team access** to see which teammates already have access through the owner's team.
3. Under **Invited users**, select employees to invite and click **Invite**.
Invited employees can view and work on the survey even if they are on a different team. They cannot manage invites unless they are also on the owner's team (or are the owner or an admin).
Employees who are both invited and on the owner's team appear once under **Team access**, not twice.
## Who can manage invites
These users can add or remove invited users on a survey:
* Company **admins**
* The survey **owner**
* Employees on the **same team as the owner**
Invited-only users can use the survey but cannot change who is invited.
## Common scenarios
Put both employees on the same team. Each person's surveys become visible to the other through team access.
Keep teams as they are and **invite** the manager on that survey. They do not need to join the owner's team.
Reassign employees in **Administration → Users**. Survey access follows the owner's current team, so old project surveys stay with the old team unless owners move too.
They only see surveys they created and surveys they were explicitly invited to. Admins still see everything.
# How it works
Source: https://docs.redem.io/how-it-works
ReDem at a glance: Learn how ReDem works
ReDem helps you evaluate and clean survey data through a structured step-by-step process. From importing data to exporting cleaned results, each step helps you spot fraud, check quality, and make sure your data is reliable.
Design your survey to support ReDem’s quality checks. A well-structured questionnaire maximizes the effectiveness of fraud detection.
By integrating our API with your survey software, you can seamlessly import data into ReDem and perform real-time quality checks.
Discover how to effortlessly integrate the ReDem API into your workflows and applications for a smoother experience!
AI-driven checks in ReDem evaluate survey responses, detect fraud, and generate a ReDem Score for each respondent.
Based on your configured cleaning settings, ReDem automatically cleans your data and can either be sent back to your survey platform or exported as a CSV file.
# Decipher (Assistant)
Source: https://docs.redem.io/integration-guides/decipher
Learn how to use ReDem’s Integration Assistant to apply ReDem’s quality checks in Decipher
ReDem’s Integration Assistant is designed to make setting up quality checks for new Decipher projects faster and easier. It helps identify and insert the correct quality scripts into your survey’s XML file, but manual review is still essential to ensure accuracy.
1. Export or copy the XML file of your survey from Decipher.
2. Have this file ready for upload to ReDem’s Integration Assistant.
1. Log in to your ReDem account.
2. Navigate to Integrations and choose Decipher
1. Click Upload and Analyze with AI.
2. The AI will process your XML file in the background, automatically identifying:
* The type and location of each question.
* Which quality checks are suitable for your survey.
The AI’s suggestions are not always perfect - manual review ensures accuracy. Go through each quality score, make adjustments as needed, and confirm your selections.
**Open-Ended Score (OES)**
* Add keywords (optional), define allowed languages (recommended), and enable or disable the duplicate check.
* Remove any open-ended questions you do not want scored with ReDem’s Open-End Score.
* Confirm your choices.
**Grid-Questions Score (GQS)**
* The AI identifies grid questions with 5 or more items.
* If any should be excluded - for example, where response patterns like straightlining are acceptable - remove them using the delete icon.
* Confirm your selections.
**Behavioral Analytics Score (BAS)**
* Should correspond to the open-ended questions, since behavioral tracking is attached to their input fields.
* Verify alignment and confirm.
**Coherence Score (CHS)**
* Displays which questions are included in the check.
* Ideally, include all questions where possible.
* Select or deselect questions as needed, then confirm.
**Time Score (TS)**
* Shows page durations and the total survey duration.
* If desired, deselect specific pages under Edit.
* Confirm your settings.
1. Choose whether to enable ReDem’s automatic data cleaning - this applies ReDem’s exclusion recommendations based on predefined thresholds.
* If enabled, you can further customize the cleaning settings.
* If disabled: You will still receive the chosen quality scores, but without any exclusion recommendations.
2. Recommended Settings for ReDem’s automatic data cleaning
* We suggest enabling ReDem’s recommended settings for optimal data quality.
* To give a specific example: We recommend excluding an interview - regardless of other scores - if two or more open-ended questions result in an Open-Ended Score below 40. We also recommend excluding an interview - again, regardless of other scores - if two or more answers to open-ended questions are classified as:
* AI Suspect
* Gibberish
* Off Topic
* Wrong Language
* Bad Language
1. **Survey Name** - Enter the name for your survey.
2. **API Key** - Select an existing key or create a new one.
3. Review the Integration Summary, which shows:
* Confirmed quality checks.
* Cleaning settings.
* Estimated maximum credits per respondent.
1. The Integration Assistant creates an updated XML file with the approved quality scripts inserted.
2. You can:
* Download the file, or
* Copy the XML directly from ReDem and paste it into Decipher.
3. If needed, you can reset the process with a different XML file at any time.
**Important Notes**
* This tool is a starting point for integration, not a fully automated replacement for manual review.
* Decipher supports many question types, so always double-check that all scripts are applied correctly.
* In the XML, green-highlighted sections indicate newly added scripts (e.g., Behavioral Analytics scripts).
* The current version is in beta and will be further optimized to reduce code length.
* Your feedback on usability and time savings is highly valuable for improving the tool.
# Keyingress
Source: https://docs.redem.io/integration-guides/keyingress
Learn how to use ReDem with KeyIngress
This tutorial explains how to connect ReDem with Keyingress to run automated data quality checks on your surveys.
Before getting started, make sure you have a ReDem® user account.
If you don’t have one yet, please contact us at [info@redem.io](mailto:info@redem.io))
1. Log in to your ReDem account.
2. Navigate to **Administration → API Key Management**.
3. Either **create a new API key** or **use an existing one**.
4. **Copy** the API key.
1. Open your **Keyingress** platform.
2. Click the **gear icon** in the top-right corner.
3. Select **Features**.
4. Paste your copied **ReDem API Key** into the field labeled *ReDem API key*.
5. Click **Save**.
1. Set up your survey as usual in keyingress.
2. Once it’s ready, go to **Quality**.
3. Scroll down and **activate the ReDem Quality Check**.
You can choose whether you want ReDem to automatically clean data based on its quality scores.
* **Deactivate Cleaning (“Bereinigung”)** → You will receive ReDem Quality Scores, but no interviews will be screened out based on quality.
* **Activate “Cleaning” (“Bereinigung”)** → Low-quality interviews are automatically flagged and screened out according to the criteria listed below.
For optimal data quality, we recommend keeping ReDem’s default cleaning settings. Interviews will be flagged as bad quality if any of the following apply:
* **ReDem Score** \< 60
* **Two or more grid questions** have a Grid-Question Score \< 20
* **Two or more open-ended questions** have an Open-Ended Score \< 40
* **Two or more open-ended answers** are classified as:
* AI Suspect
* Gibberish
* Off Topic
* Wrong Language
* Bad Language
* **Time Score** \< 20
* **Two or more open-ended questions** have a Behavioral Analytics Score \< 20
* **Coherence Score** \< 30
You can adjust these thresholds if needed.
Next, assign the relevant questions to each type of quality check. For every score type, click the “Add Questions” button and select and safe the appropriate items.:
* First, choose the questions for the **Click Pattern Check**, which analyzes grid questions.
* Then, select the questions for the **Open-Ended Check**, which reviews text responses.
* Next, define the questions used for the **Time Score**, which evaluates response times.
* After that, select the questions for the **Behavioral Analytics Score**, which assesses how participants enter their responses.
* Finally, choose the questions for the **Coherence Score**, which measures how consistent the answers are throughout the interview.
After selecting questions for all checks, click Save Settings.
1. Run a few **test interviews** to confirm that everything works correctly.
2. In Keyingress, navigate to **Reporting & Export → Reporting Dataset → Show Data**.
In the dataset:
* **STC\_ID = 5** → Good quality
* **STC\_ID = 48** → Poor quality (screened out)
For more detailed results, return to your **ReDem** dashboard.
There, you can review all incoming interviews and detailed quality evaluations.
Note: In ReDem, the **keyingress tan** corresponds to the digits **before the first hyphen** in the ReDem respondent ID.
If needed, you can re-clean your data directly on the ReDem platform. This allows you to apply different cleaning settings after the survey has finished. To do this, open the relevant survey, click on “Cleaning Settings” at the top of the page, select a new configuration, and then reprocess the data using the updated settings. This flexibility ensures that you can refine your data quality thresholds even after data collection is complete.
# Best-Practice Set-Up
Source: https://docs.redem.io/knowledge-base/best-practices/best-practice-setup
Recommendations to ensure ReDem quality checks function reliably.
## Coherence Score
### Do's and Don'ts
To ensure the Coherence Score functions reliably, please follow the recommendations below.
#### **1. Select the right questions**
The total number of questions is not critical; even for long questionnaires, a maximum of approximately 100 well-chosen questions is usually sufficient. The primary selection criteria are that the full question wording and fully labeled answer options are provided (see section 2) and that the questions have been answered by the majority of study participants (80% or more).
In addition, it is important to include logically connected question sequences that allow the detection of contradictions and incoherence, such as questions on brand awareness followed by questions on brand usage, where claiming unawareness of a brand while reporting its use would constitute a clear inconsistency. Similarly, contradictions may arise when respondents make conflicting attitudinal and behavioral statements, for example claiming to be vegan while later reporting regular meat consumption.
Furthermore, our experience shows that sociodemographic questions are particularly effective for identifying contradictions and implausible response patterns and should therefore be included whenever possible. A typical example of a sociodemographic contradiction would be a respondent stating that they are 18–24 years old while later indicating that they have been in full-time employment for more than 15 years, which is not plausibly compatible. Sociodemographic information may also conflict with behavioral statements, such as a respondent claiming to use the metro every day while reporting that they live and work in a city that does not have a metro system.
#### **2. Use only complete question texts and labeled answers**
For the AI to detect contradictions effectively, it must be provided with the full question wording, and fully labeled answer options.
Do not include questions that are only partially formulated (e.g. brand name is missing) or questions whose answer options are numeric codes (e.g. 0, 1) instead of explicit labels (not selected, selected).
#### **3. Account for the AI Model's Knowledge Cutoff**
Even the most recent AI models are trained on data that is not fully up to date. Avoid questions that rely on recent information, such as: "Which smartphone model do you currently use?" Recently released products may not yet exist in the model's knowledge base and can therefore lead to unjustified Coherence Score deductions.
#### **4. Make Questionnaire Logic and Context Explicit**
The Coherence Score is designed to minimize false positives and to account for plausible explanations. However, when contextual information is missing or implicit, misclassification becomes unavoidable. Clear and explicit context is therefore the single most effective way to maximize Coherence Score accuracy. The Coherence Score can only correctly interpret routing, filters, skips, and conditional logic if this information is clearly visible in the data provided.
Ensure full contextual visibility by embedding answer options and explanatory notes directly into the question text. In addition, because the Coherence Score expects a list of actual question–answer pairs, include only questions that were actually shown to the respondent. If questions are skipped due to routing but still appear in the data, the Coherence Score may interpret this as inconsistency or inattention, resulting in a lower score.
## Grid Question Score
### Do's and Don'ts
To ensure the Grid Question Score functions reliably, please follow the recommendations below.
#### **1. Minimum requirements**
The Grid Question Score can be applied to grid questions with at least five rows and four columns. To reliably detect click patterns, use at least seven rows. In general, the more rows and columns, the more reliable the results.
#### **2. Item arrangement**
To avoid incorrectly penalizing legitimate response patterns, ensure that the item arrangement does not naturally encourage uniform answering.
Avoid, for example, placing all positive items on one side of the scale and all negative items on the other, or formulating all statements exclusively in either a positive or a negative direction. In such cases, respondents with genuinely positive or negative attitudes toward the research object may be incorrectly flagged as straightliners simply because they consistently select the most positive or most negative response option.
Instead, occasionally invert the direction of selected items so that consistently choosing the same scale point becomes implausible or logically contradictory, making true click patterns easier to identify.
#### **3. Scale**
The Grid Question Score does not strictly require an interval scale. In certain cases, an ordinal scale may also be suitable.
For example, in closed questions where respondents report how frequently they engage in specific behaviors, a uniform response pattern may be highly implausible. In such cases, grid questions using an ordinal scale can also be effectively analyzed.
## Time Score
### Do's and Don'ts
To ensure the Time Score functions reliably, please follow the recommendations below.
#### **1. Total Duration**
Only use the total interview duration/length of interview (loi) as a datapoint if it is not significantly influenced by routing or filtering. If respondents see different numbers of questions, total duration becomes unreliable.
#### **2. Interruptions**
When using total interview duration, ensure that it excludes interruptions. The measured time should reflect only the active time spent completing the interview, not breaks or pauses.
#### **3. Time per Question / Page**
We strongly recommend not relying on total interview duration. Instead, use the response time per individual question or page that a respondent actually saw. This approach is more reliable because it is not affected by routing or filtering. In addition, fraudsters and automated bots can easily manipulate total completion time by waiting at the end of the questionnaire, whereas abnormally fast response times at the question level remain detectable.
If response times for all individual questions are not available, use sections containing multiple questions that were answered by all respondents.
Avoid basing the Time Score on only a few individual questions. Response-time variance at the question level is naturally higher, making results less reliable than when evaluating complete sections or the full set of questions.
## Open Ended Score
### Do's and Don'ts
To ensure the Open-Ended Score operates reliably, please follow the recommendations below.
#### **1. Obligatory questions**
Make the open-ended questions used for the quality check mandatory. Fraudsters tend to answer only those questions they are required to answer. If open-ended questions are optional, low-quality or fraudulent respondents may skip them and remain undetected.
#### **2. Use questions with a defined context**
Select open-ended questions or reformulate them so that the AI can clearly evaluate whether an answer fits the question. Avoid overly generic questions such as "What else do you want to tell us?" In this case, virtually any response would be valid and cannot be meaningfully evaluated. Instead, use clearly contextualized questions.
For example: Rather than "What was the message of the commercial you have just seen?", use "What was the message of the insurance commercial you have just seen?" Alternatively, add key words (e.g. "insurance") in the keywords section of the open-ended check.
#### **3. Use unaided recall questions sparingly**
Use unaided brand recall questions only if no other open-ended questions are available. If they refer to specific brands that are not globally known or are limited to certain countries, add contextual information. This includes specifying the relevant country and providing a few example brands in the keywords section of the open-ended check. Doing so helps the AI correctly interpret plausible answers.
#### **4. Use multiple open-ended questions**
Include two or more open-ended questions for quality control. This improves overall reliability of the Open-Ended Score and enables to detect duplicates within interviews.
#### **5. Add open-ended questions**
If a questionnaire contains no suitable open-ended questions, add at least one specifically for quality-check purposes. These questions do not need to be substantively analyzed; they are used solely to help identify inattentive or fraudulent interviews. Open-ended questions added for this purpose should be thematically aligned with the research topic.
#### **6. Duplicate check**
Keep the duplicate answer and respondent check enabled in most cases. Deactivate it only if you expect very similar or identical answers within interviews or across respondents (for example, short factual answers or standardized phrases).
## Duplicate Entrance Score
### Do's and Don'ts
To ensure the Duplicate Entrance Score functions reliably, please follow the recommendations below.
#### **1. Use DES for national or international surveys**
Use the Duplicate Entrance Score only for national or international surveys. In samples of that scale, the statistical chance that two or more different people with the same demographics enter within the same 15-minute window is basically impossible. On smaller or highly local samples, coincidental demographic overlap is more likely and can produce false duplicates.
#### **2. Prefer zip or city, and enough demographics when location is coarse**
Prefer zip or city when available — fine-grained location is one of the strongest discriminators in the comparison window. Provide at least four demographics for a valid score. If zip or city information is not available and only country-level location is used, include at least five demographics. Depending on which demographics you choose, six may be preferable so the combination remains distinctive enough to distinguish real duplicates from chance matches.
#### **3. Do not use screening or quota demographics**
Do not include demographics where respondents are expected to give a specific answer, or where other answers terminate them from the survey. Those fields do not discriminate between entrants and can inflate duplicate matches.
For example, if you ask about ethnicity and only let Hispanics proceed, ethnicity **must not** be used for the DES.
#### **4. Do not include fields that are constant for all completers**
Do not include demographics that have the same value for everyone who completes the survey. They add no discrimination between entrants. For example, in a single-country study, `country` should not be used for the DES.
#### **5. Do not send IP for CATI surveys**
Do not include the IP address for CATI (telephone) surveys. Interviewers typically share the same office or call-center IP, which can incorrectly flag many respondents as `DUPLICATE_IP` false positives. Omit `ip` for CATI and rely on demographics instead.
***
If you have any questions, please contact [support@redem.io](mailto:support@redem.io)
# Data Cleaning
Source: https://docs.redem.io/knowledge-base/features/cleaning-and-review
Discover how ReDem automates and simplifies data cleaning.
## Why data cleaning matters?
Data cleaning helps ensure your results are based on valid, high-quality responses. ReDem automates this process to help you detect and exclude unreliable data.
ReDem’s data cleaning feature automates and streamlines this process, providing a standardized and transparent approach grounded in ReDem’s comprehensive evaluation framework.
## How Cleaning Works
Every respondent evaluated by ReDem undergoes a series of quality checks. These checks generate data points, classification labels and scores, which form the basis of the cleaning logic. When cleaning, you define what is acceptable or unacceptable by setting thresholds for these elements.
**OR Condition:**
* All cleaning options operate as OR conditions.
* You must select at least one score as a cleaning condition - usually the ReDem Score, since it is a comprehensive metric covering all selected quality checks.
* You may also add other scores in an OR condition if needed.
**Example:**
If you set an R-Score threshold of 60, all respondents below 60 are flagged. If you also apply an OR condition for Time Score \< 30, then even respondents with a valid R-Score (e.g., 70) are flagged if their Time Score is below 30 (speeding).
**Data Points:**
Data points indicate the number of measurements used to calculate a score.
**Example:**
If you set the Open-Ended Score threshold to 40 with two data points, then any interview with at least two open-ended responses and an overall Open-Ended Score below 40 is excluded.
**Default Settings:**
To simplify the process, ReDem provides recommended default settings that work well for many projects. You can, however, adjust them to match the specific needs of your study. The next two sections first describe the default settings and then explain how to select your own.
### ReDem Recommended Cleaning Settings
Our default settings apply best-practice thresholds to the following metrics:
* **ReDem Score (R-Score)**: Respondents with an R-Score below 60 are excluded.
* **Open-Ended Score (OES) & Response Categories:**
Respondents with an OES below 40 are excluded if they provide at least two open-ended responses.
Respondents flagged in at least two open-ended responses for wrong language, bad language, AI suspect, gibberish or off topic are excluded.
* **Coherence Score (CHS)**: Respondents with a CHS below 30 are excluded.
* **Grid-Question Score (GQS)**: Respondents with a GQS below 20 and at least two valid grid-question responses are excluded.
* **Time Score (TS)**: Respondents with a TS below 30 are excluded.
* **Behavioral Analytics Score (BAS)**: Respondents with a BAS below 20 and at least two valid BAS data points are excluded.
Respondents flagged for **Unnatural Typing** starting with the first valid BAS data point are excluded. Respondents flagged for **Copy and Paste** or **Unnatural Movement** in at least two valid BAS data points are excluded.
### Custom Cleaning Settings
You can define your own thresholds for each quality metric. This enables fine-tuned control over what qualifies as low-quality data based on your specific needs.
Customizable elements include:
* **ReDem Score (R-Score):** Threshold
* **Open-Ended Score (OES):** Threshold + min. number of open-ended responses + category-based exclusion logic
* **Open-Ended Response Categories:**
* **Bad Language:**
* **No Answer:**
* **Duplicate Respondent:**
* **Duplicate Answer:**
* **Gibberish:**
* **Wrong Language:**
* **Off Topic:**
* **AI Suspect:**
* **Time Score (TS):** Threshold + min. number of time data points
* **Grid-Question Score (GQS):** Threshold + min. valid grid questions
* **Coherence Score (CHS):** Threshold + min. number of coherence data points
* **Behavioral Analytics Score (BAS):** Threshold + min. valid BAS data points + category-based exclusion logic
* **BAS Categories:**
* **Unnatural Typing:**
* **Copy and Paste:**
* **Unnatural Movement:**
Here’s an example of a cleaning settings object that can be used to customize the cleaning process via the API:
```javascript theme={null}
"redemScore": 60,
"OES": {
"activate": true,
"score": 60,
"minDataPoints":2,
"categories": {
"NO_ANSWER": {"activate": true, "minDataPoints":3},
// ... other categories ...
}
},
"CHS": {"activate": true,"score": 50},
"GQS": {"activate": true,"score": 40, "minDataPoints":2},
"TS": {"activate": true,"score": 30},
"BAS": {
"activate": true,
"score": 60,
"minDataPoints":2,
"categories": {
"UNNATURAL_TYPING": {"activate": true, "minDataPoints":1},
"COPY_AND_PASTE": {"activate": true, "minDataPoints":2},
"UNNATURAL_MOVEMENT": {"activate": true, "minDataPoints":2},
}
}
```
## Changing cleaning settings
For **imported** and **live** (API-connected) projects, changing cleaning settings in the ReDem app works the same way: open the survey **results** page, use **Cleaning Settings**, update the thresholds, then **Apply Cleaning** to reprocess and update exclusions for respondents already in the project.
For **live surveys** that are still in the field, you should also update the **programming or settings in your survey platform** so it stays aligned with your chosen rules. Integrations send **cleaning settings per respondent** with each submission (for example in the `cleaningSettings` field of the addRespondent request). ReDem applies the settings included in **each** request to that respondent. **New respondents** therefore follow whatever you send on each call—if you only change settings inside the ReDem app but not in your fieldwork script, new completes may still be sent with the old `cleaningSettings` until you update the integration.
## What Is the Outcome of the Cleaning Process?
The cleaning process classifies each response as either **Included** or **Excluded**, with clear reasons provided for exclusions. Only one exclusion condition needs to be met for a respondent to be removed.
**Reasons for Exclusion** (only one needs to be true):
* **ReDem Score Threshold**: Respondent’s ReDem Score is below the default (60) or a custom threshold.
* **Open-Ended Score Threshold**: Respondent’s OES is below the default (40) or a custom threshold.
* **Open Ended Category**: Respondent exceeds the defined category threshold.
* **Time Score Threshold**: Respondent’s TS is below the default (30) or a custom threshold.
* **Grid-Question Score Threshold**: Respondent’s GQS is below the default (20) or a custom threshold.
* **Coherence Score Threshold**: Respondent’s CHS is below the default (30) or a custom threshold.
* **Behavioral Analytics Score Threshold**: Respondent’s BAS is below the default (20) or a custom threshold.
* **Behavioral Analytics Category**: Respondent exceeds the defined BAS category threshold (`UNNATURAL_TYPING`, `COPY_AND_PASTE`, or `UNNATURAL_MOVEMENT`).
This structured reasoning provides clear insights into exclusions, empowering users to refine their criteria based on the analysis.
## View Exclusion Reason Breakdown
The exclusion reason breakdown shows how many excluded respondents were removed for each cleaning criterion. It is available at two levels:
* **Company level** on the **Surveys** page: in the metrics row, click the **info icon** next to **Excluded Respondents** when at least one respondent is excluded. **Employees** see a breakdown across all surveys they have access to; **Admins** see a breakdown for the whole company.
* **Survey level** on the survey **results** page: in the **ReDem Score** card, click the **info icon** next to **Excluded Respondents** when at least one respondent in that survey is excluded.
The breakdown includes:
* A chart showing the share of exclusions per main category (for example, ReDem Score threshold, Open-Ended Score threshold, Coherence Score threshold)
* A table with the count and percentage for each category
* Expandable rows for **Open-Ended** and **BAS** category breakdowns (for example, AI Suspect, Copy and Paste, Unnatural Typing, Unnatural Movement)
Go to **Surveys**. In the metrics row at the top, find **Excluded Respondents**. If any respondents are excluded, click the **info icon** next to that label.
Go to **Surveys** and open the survey you want to review.
In the **ReDem Score** card, find **Excluded Respondents**. If any respondents are excluded, click the **info icon** next to that label.
In the dialog, review the chart and table. Expand a category row to see sub-categories where available.
Per-respondent exclusion reasons are still available in the respondent table (**Reasons for Exclusion** column) and in each respondent's **Cleaning** tab. For a plain-language AI explanation of those reasons (table, details, and download), see [Respondent Insights](/features/respondent-insights#ai-generated-respondent-insights).
## Example of How the Cleaning Process Works
As an example, let's consider the cleaning settings applied to a specific respondent:
```javascript theme={null}
"redemScore": 60,
"OES": {
"activate": true,
"score": 60,
"minDataPoints":2,
"categories": {
"NO_ANSWER": {"activate": true, "minDataPoints":2},
"BAD_LANGUAGE": {"activate": false, "minDataPoints":2},
"GIBBERISH": {"activate": false, "minDataPoints":2},
"DUPLICATE_ANSWER": {"activate": false, "minDataPoints":2},
"DUPLICATE_RESPONDENT": {"activate": false, "minDataPoints":2},
"OFF_TOPIC": {"activate": false, "minDataPoints":2},
"WRONG_LANGUAGE": {"activate": false, "minDataPoints":2},
"AI_SUSPECT": {"activate": true, "minDataPoints":2}
}
}
```
To better understand how cleaning settings are applied, let's consider different cases of respondent data and determine whether they should be excluded and what should be the reason for exclusion.
**Input:**
The respondent has a **ReDem Score of 50** and an **OES Score of 60**. They have provided **4 valid answers for OES data points**, **`3 of which are categorized as AI_SUSPECT`**.
**Output:**
The respondent is **excluded** because their **ReDem Score falls below the threshold**. Additionally, their **OES Score is below the defined threshold**, and they have provided **more than 2 valid answers for OES data points**, with **`3 categorized as AI_SUSPECT`**, exceeding the threshold set in the cleaning settings.
**Input:**
The respondent has a **ReDem Score of 70** and an **OES Score of 30**. They have provided **2 valid answers for OES data points**.
**Output:**
The respondent is **excluded** because their **Open-Ended Score is below the threshold** and they have provided **2 valid answers for OES data points**.
**Input:**
The respondent has a **ReDem Score of 70** and an **OES Score of 50**. They have provided **4 valid answers for OES data points**, with **`3 categorized as AI_SUSPECT`**.
**Output:**
The respondent is **excluded** despite their **ReDem Score and Open-Ended Score being above the threshold**, because **`more than 2 of their answers are categorized as AI_SUSPECT`**, exceeding the threshold defined in the cleaning settings.
**Input:**
The respondent has a **ReDem Score of 70** and an **OES Score of 30**. They have provided only **one valid OES data point**.
**Output:**
The respondent should **not be excluded** because they **do not meet the minimum valid OES data points requirement for cleaning**, even though their **OES Score is below the threshold**.
# Teams and Survey Access
Source: https://docs.redem.io/knowledge-base/features/teams-and-survey-access
How ReDem decides which surveys an employee can open.
Teams are optional groups within your company. They control which **employee**-owned surveys are visible to other employees, without replacing survey ownership.
For step-by-step setup, see the [Teams user guide](/features/teams).
## Core ideas
* **Survey owner** — the employee who created the survey. Ownership does not change when teams change.
* **Team access** — employees on the same team as the survey owner can open that survey.
* **Invited access** — explicit per-survey invites for employees who are not on the owner's team.
ReDem resolves team access from the owner's **current** team at the time someone opens or lists surveys. Access is not frozen when the survey was created.
## Access summary
| Access path | Read and write survey | Manage invited users |
| ------------------------------- | ------------------------- | -------------------- |
| Company admin | Yes — all company surveys | Yes |
| Survey owner | Yes | Yes |
| Same team as owner | Yes | Yes |
| Invited employee | Yes | No |
| Other team, not invited | No | No |
| No team, not owner, not invited | No | No |
## Why dynamic team access
When the survey owner switches teams, teammates on the new team gain access and teammates on the previous team lose it. That keeps survey visibility aligned with who the owner works with today, without admins re-sharing every survey manually.
Explicit invites stay in place when team membership changes. An invited user keeps access until someone removes the invite.
## Teams vs user management
**Administration → Users** is where you invite employees and assign **admin** rights. Teams are managed from the same page via **Create Team** / **Manage Teams** and the per-user **Team** column.
User management and teams serve different purposes:
* **Users** — who belongs to your company and whether they are an admin or employee.
* **Teams** — which employees share survey visibility with each other.
# Language Support
Source: https://docs.redem.io/knowledge-base/miscellaneous/language-support
ReDem supports multiple languages.
ReDem® checks are supported in multiple languages to ensure accurate quality assessment across global survey data.
Below is the list of supported languages along with their corresponding [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) two-letter codes:
* Albanian – `sq`
* Amharic – `am`
* Arabic – `ar`
* Armenian – `hy`
* Bengali – `bn`
* Bosnian – `bs`
* Bulgarian – `bg`
* Burmese – `my`
* Catalan – `ca`
* Chinese – `zh`
* Croatian – `hr`
* Czech – `cs`
* Danish – `da`
* Dutch – `nl`
* English - `en`
* Estonian – `et`
* Finnish – `fi`
* French – `fr`
* Georgian – `ka`
* German – `de`
* Greek – `el`
* Gujarati – `gu`
* Hindi – `hi`
* Hungarian – `hu`
* Icelandic – `is`
* Indonesian – `id`
* Italian – `it`
* Japanese – `ja`
* Kannada – `kn`
* Kazakh – `kk`
* Korean – `ko`
* Latvian – `lv`
* Lithuanian – `lt`
* Macedonian – `mk`
* Malay – `ms`
* Malayalam – `ml`
* Marathi – `mr`
* Mongolian – `mn`
* Norwegian – `no`
* Persian – `fa`
* Polish – `pl`
* Portuguese – `pt`
* Punjabi – `pa`
* Romanian – `ro`
* Russian – `ru`
* Serbian – `sr`
* Slovak – `sk`
* Slovenian – `sl`
* Somali – `so`
* Spanish – `es`
* Swahili – `sw`
* Swedish – `sv`
* Tagalog – `tl`
* Tamil – `ta`
* Telugu – `te`
* Thai – `th`
* Turkish – `tr`
* Ukrainian – `uk`
* Urdu – `ur`
* Vietnamese – `vi`
# Designing Questionnaires to Maximize ReDem’s Effectiveness
Source: https://docs.redem.io/knowledge-base/miscellaneous/questionnaire-criteria
Enhance fraud detection and data quality through smart survey design.
ReDem’s advanced quality checks work best when your questionnaire is strategically structured. Below are best practices for designing surveys that unlock the full power of ReDem’s quality scores.
### Open-Ended Questions
Open-ended questions are highly effective for quality assurance and fraud detection. We recommend including at least two mandatory open-ended questions in every survey.
🤔 **Why they matter:**
* **Mandatory answers filter out fraudsters:** Fraudsters and disengaged respondents often skip or give meaningless answers to open-ended questions. Making them mandatory helps eliminate them early.
* **AI-evaluable content:** Avoid generic questions like “Anything else you’d like to share?” Instead, ask questions that provide context, enabling ReDem’s AI to evaluate response quality.
* **Detecting AI-generated content:** Emotional or opinion-based questions are especially helpful, as AI systems often struggle to convincingly express authentic emotion or personal views.
* **Strategic placement:** Place one open-ended question at the beginning and one at the end. This helps evaluate attention and consistency across the interview.
* **Duplication detection:** ReDem checks for identical or similar open-ended responses both within and across interviews to flag suspicious patterns.
Use our [ChatGPT-powered OES Question Master](https://chatgpt.com/g/g-3YkEFGt1h-redem-oes-question-master) to generate high-quality open-ended questions for your survey.
### Grid-Questions
Grid or matrix-style questions allow for pattern recognition in click behavior, helping detect inattentive or fraudulent respondents.
👍🏼 **Design recommendations:**
* Include at least 1 grid question with a minimum of 5 items and 4 or more response options (e.g., a Likert scale). Use 7 or more items if you want ReDem to evaluate click patterns beyond straightlining.
* Ensure enough variability: A higher number of statements helps differentiate meaningful from arbitrary responses.
* Balance options and items: More items = fewer needed options, but never fewer than 3.
* Add inverted statements: Mix positive and negative phrasing to reveal inconsistent or bot answer patterns (e.g., straightlining or zigzagging).
### Time Durations
ReDem’s Time Score is more accurate when detailed timing data is available.
🤨 **What to capture:**
* **Total Interview Duration (LOI)**: Used to flag unusually fast or slow respondents.
* **Section/Page-Specific Timing**: Helps identify suspicious timing behavior, especially in longer or complex sections or pages.
* **Avoid brief sections**: Skip timing for yes/no or demographic questions.
* **Account for interruptions**: Be aware of idle time manipulation by bots trying to simulate realistic durations.
### Trap Questions
Trap questions support the Coherence Score by identifying respondents who overclaim, contradict themselves, or fail attention checks.
✅ **Best practices:**
* **Use Sparingly:** Limit to a maximum of two trap questions per survey to avoid participant frustration.
* **Design Subtly:** Don’t make trap questions obvious. If respondents detect them, they may adjust their answers unnaturally.
* **Mix formats:** Use variations like:
* Repeat questions with rephrased wording
* Instructions to select a specific option
* Fake or nonsense options (e.g., fictional brands)
* **Design for contradiction detection:** Structure your questionnaire in a way that allows contradictions to emerge. This helps ReDem’s Coherence Score detect dishonest or inattentive respondents more effectively.
* **Don’t rely on traps alone:** Trap questions should complement, not replace, broader ReDem checks. An isolated error shouldn’t unfairly disqualify high-quality respondents.
# ReDem Credits
Source: https://docs.redem.io/knowledge-base/miscellaneous/redem-credits
What ReDem Credits are and how they are used.
## What are ReDem Credits?
ReDem Credits are the internal currency used to run quality checks on your survey data. Credits can be purchased as part of an annual subscription plan.
## Basics of ReDem Credits
Analyzing data with ReDem requires ReDem Credits, with the number of credits needed varying based on the **credit calculation method** and the **quality checks selected** for each respondent.
ReDem offers two credit calculation methods:
Apply all possible quality checks\* to each interview for a **flat fee of 10 credits per interview**. This model offers predictable pricing and is best suited for teams seeking comprehensive quality assurance.
Only applicable to licenses purchased before December 2025.
The **minimum cost is 5 credits per respondent**, with additional credits required depending on the quality checks you select. This flexible approach enables you to balance costs while ensuring your desired level of data quality.
*\*Maximum data request: 100 CHS, 5 OES, 5 BAS, 20 GQS, and 100 TS. If additional data is required, modular credits will be calculated accordingly.*
## How credit calculation works in the modular calculation?
The following list provides a clear overview of how credits are calculated based on Quality Scores, with all calculations applied on a per-respondent basis:
| Score Type |
Base Credits |
Additional Credits |
Maximum Credits |
| Open-Ended-Score (OES) |
3 (for the first question) |
0.25 (for each additional question) |
- |
| Time-Score (TS) |
1 |
- |
1 |
| Coherence-Score (CHS) |
4 (for the first 100 questions) |
0.03 (for each additional question) |
- |
| Grid-Question-Score (GQS) |
0.05 per item |
- |
2 |
| Behaviour-Analysis-Score (BAS) |
2 (for the first data point) |
0.25 (for each additional data point) |
- |
| Duplicate-Entrance-Score (DES) |
1 |
- |
1 |
### 💡Important Credit Rules
* **OES answer translation:**
* When enabled on an open-ended question, ReDem translates non-valid, non-English answers to English.
* On modular plans, each successful translation costs **0.1 credits**.
* On All-Inclusive plans, translation is included when OES stays within the plan limit (≤ 5 datapoints). Above that limit, translations are charged at 0.1 credits for each OES.
* Credit estimates assume every translate-enabled datapoint may need translation (worst case). You are charged only for successful translations.
* In cases we can't provide a translation, no credits will be charged.
* **Grid-Question Score (GQS):**
* Each grid item costs 0.05 credits.
* The total cost for GQS is capped at 2 credits per respondent, regardless of how many items are answered.
* **Time Score (TS):**
* The maximum cost is 1 credit per respondent, regardless of the number of time-based data points analyzed.
* **Duplicate Entrance Score (DES):**
* The maximum cost is 1 credit per respondent.
* Recalculations are free — you are not charged again when DES is recalculated for a respondent who was already billed.
* **Coherence Score (CHS):**
* Covers up to 100 questions at a base cost of 4 credits per respondent.
* For each additional question beyond 100, an extra 0.03 credits is charged.
* **Credits are only charged when a respondent’s processing is successfully completed. If processing fails for any reason, no credits are charged.**
* **Credits are applied only to valid and available data points.**
* **No credits are charged for blank or missing responses.**
* **Total Credit Calculation for Surveys**:
* The total credit cost for a survey is the sum of credits used across all respondents.
* Each respondent’s usage depends on their individual data and the quality checks applied.
## Review credit usage
Company **admins** can review account-level credit usage in the ReDem app.
Credit Overview is available to **admins** only. Regular employees do not see this page.
Log in to the [ReDem Application](https://app.redem.io/) and go to **Administration → Credit Overview** in the sidebar.
You can also open **Credit Overview** from the administration tabs on any administration page (for example **My Profile** or **Users**).
### What you can see
**Credit summary** — a chart and totals for your account. Switch between **Current** (current contract period) and **All-time**:
| Metric | Current | All-time |
| -------------- | ------------------------------------------ | ----------------------------------- |
| Total | Total credits on the current contract | Total credits received |
| Available | Credits still available to use | Credits still available |
| Used & Expired | Credits consumed or expired in this period | Credits consumed or expired overall |
**Contract details** — start and end date of the current contract, and whether auto-renewal is enabled. If pay-as-you-go (PAYG) is enabled for your account, you also see PAYG consumption during the contract period and the estimated next invoice amount.
**Credit transactions** — a searchable table of account activity with columns for date, description, credits, number of respondents, last update, and transaction type. Filter by type:
* **Received** — credits added to your account
* **Used** — credits spent on quality checks
* **Expired** — credits that expired unused
* **Refund** — credits returned to your account
Use **Download** to export transactions matching your current search and filters.
### Sample Credit Calculation
Here’s an example of how credits are calculated for an individual respondent:
# Behavioral Analytics Score
Source: https://docs.redem.io/knowledge-base/quality-checks/behavior-analysis-score
Learn how the Behavioral Analytics Score evaluates typing and mouse behaviour
## What is the Behavioral Analytics Score?
The **Behavioral Analytics Score (BAS)** measures the quality of respondent interaction behaviour to distinguish between natural human input and potentially artificial or automated responses. It helps detect answers generated by AI bots, scripts, or copy-paste actions—enhancing the reliability and authenticity of survey data.
Each BAS data point receives a score from **0–100** and a category. When both typing and mouse behaviour are available, ReDem scores them separately and uses the **lower** score for the data point. If both scores are equal, the typing category is used.
## High-level checks performed
* Checks for unusually fast typing that is inconsistent with manual human input.
* Checks for copy-&-paste patterns (e.g., large blocks inserted with minimal keystroke events).
* Checks for highly uniform or repetitive keystroke rhythms that differ from typical human variation.
* Where instrumented, checks for behaviour metadata (e.g., pause durations between keystrokes, editing patterns) that deviate from expected human behaviour.
* Swipe Typing (Glide Typing): Detects swipe/glide typing on Android and iPhone. Classified as `NATURAL_TYPING` with a BAS score of 60. The score is intentionally conservative to reduce the impact of potential false negatives on the overall BAS score.
* Voice Dictation (Speech-to-Text): Detects speech-to-text input on Android and iPhone. Classified as `NATURAL_TYPING` with a BAS score of 60. The score is intentionally conservative to reduce the impact of potential false negatives on the overall BAS score.
## Typing categories
Typing is scored when at least **3** `KEYSTROKE` or `COPY_AND_PASTE` events are present for the data point.
* `NATURAL_TYPING` — typing behaviour looks human-like (score ≥ 50). Also used for detected swipe typing and voice dictation (score 60).
* `UNNATURAL_TYPING` — typing behaviour looks automated or scripted (score \< 50). Timing, rhythm, and editing signals that look non-human are reflected in this category — there is no separate “unnatural keystrokes” label.
* `COPY_AND_PASTE` — the interaction is entirely paste-based (100% of events are `COPY_AND_PASTE`). Score is **0**. Partial paste mixed with keystrokes is scored as typing instead.
## Mouse Movement and Clicks
When your integration tracks pointer behaviour, BAS evaluates mouse movement and clicks alongside typing. Send `MOUSE_MOVEMENT` and `MOUSE_CLICK` events in the same `interactionData` array as keystrokes. See the [Behavior Tracking guide](/api-reference/others/behavior-tracking) for a sample implementation.
**How scoring works**
* ReDem scores typing and mouse behaviour separately.
* The **lower** score is used for the BAS data point. If both scores are equal, the typing category is used.
* Typing still requires at least **3** keystroke or copy-paste events. Mouse behaviour can be scored on its own when movement or click events are present.
* ReDem only uses the **last 300** `MOUSE_MOVEMENT` and **last 300** `MOUSE_CLICK` events per data point.
**What mouse behaviour is checked**
* Unusually large or instant pointer jumps
* Repeated high-speed teleport-style movement
* Perfectly straight horizontal or vertical movement over longer distances
* Clicks placed at the exact centre of the target element
* Bursts of very rapid clicks
**Categories**
* `NATURAL_MOVEMENT` — mouse behaviour looks human-like (score ≥ 50)
* `UNNATURAL_MOVEMENT` — mouse behaviour looks automated or scripted (score \< 50)
`UNNATURAL_TYPING`, `COPY_AND_PASTE`, and `UNNATURAL_MOVEMENT` can be used as category-based cleaning and exclusion rules. See the [Data Cleaning guide](/knowledge-base/features/cleaning-and-review).
## How to use the BAS?
The BAS is designed to be used in real-time, via our API, or through survey software with integrated ReDem functionalities. This quality check is not available via the Quick Import.
# Coherence Score
Source: https://docs.redem.io/knowledge-base/quality-checks/coherence-score
Discover how the Coherence Score uncovers professional fraud that often goes undetected
The coherence score is an AI-driven metric that evaluates the plausibility and logical consistency of responses throughout an entire interview, from screening questions to socio-demographics. This highly robust quality check detects contradictions and inconsistencies, making manipulation nearly impossible. Unlike traditional trap questions—which fraudsters and AI bots can easily identify—the Coherence Score is a game-changer in fraud detection. It works seamlessly within regular questionnaires, identifying inconsistencies without relying on special questions. For example, it can flag contradictions, like a respondent claiming regular subway use while living in a city without one.
Additionally, the Coherence Score minimizes false positives by avoiding the disqualification of respondents who may have misclicked or momentarily lost focus but otherwise performed acceptably. This approach not only enhances fraud detection but also ensures more accurate and fair assessments.
## High-level checks performed
This check looks at, for example:
* Whether answers that should logically align (e.g., travel mode, days stayed, budget) are consistent with one another.
* Whether the pattern and combination of responses across different questions fit a plausible scenario.
* Whether any answers appear contradictory (for example: “I never use the app” in one section and “I use it weekly” in another).
* These checks are intended to flag inconsistent or implausible response sets.
## What the Coherence Score Includes:
* Explanation of the Rating: Provides a summary of the overall quality of the interview.
* Describes how consistent or contradictory the respondent’s answers are across questions.
* Highlights key factors that influenced the rating (e.g. logical flow, alignment of answers).
* List of Incoherent Questions: Identifies specific questions where the respondent’s answers were inconsistent or contradictory.
* Points out answers that conflict with earlier responses or are implausible in the context of the interview.
* Offers valuable insights into areas of potential concern, helping to flag data reliability issues.
## Survey Description
The Coherence Score can be enhanced by providing a **survey description** that gives additional context about the purpose and intent of the survey. This optional field helps improve the quality and accuracy of the Coherence Score evaluation by giving the AI model better context about the survey's objectives.
When submitting CHS data points via the API, you can include a `surveyDescription` field that provides supplementary information about what the survey aims to measure or understand.
### When Survey Description is Especially Useful
The survey description is particularly valuable when your survey asks about **current events that occurred after the training cutoff date of the large language models**. Examples include:
* **Recent openings or events**: Newly opened facilities (e.g., a shopping mall that opened two months ago)
* **Current political events**: Recent political developments, elections, or policy changes
* **Product launches**: Newly released products (e.g., a new smartphone model)
* **Recent market changes**: Current economic conditions or industry developments
In these cases, provide as much detail as possible in the survey description to help the AI model understand the context and make more accurate coherence assessments.
### Example: Survey About a Recently Opened Mall
> This survey evaluates shopping experiences at the Grand Central Mall, a new shopping center that opened in downtown Springfield opened in November 2025. The mall features over 150 stores including major retailers, restaurants, a cinema complex, and an entertainment area. The survey aims to understand visitor experiences, shopping patterns, and satisfaction with the new facility.
## Use of GPT for Coherence-Score
ReDem uses GPT hosted on Microsoft Azure, deployed in the EU region to ensure full GDPR compliance when calculating the Coherence Score.
### Individual Responses & Anonymity
Each interview is sent to Azure with a fully anonymized ID. Only the individual interview is transmitted per API request—entire survey datasets are never shared.
### Exclusive Interaction with Azure
Only ReDem communicates with Azure. No information about the origin or source of the data is disclosed to Microsoft.
### Data Residency
All data related to the Coherence Score is transmitted, stored, and processed exclusively within the EU.
# Duplicate Entrance Score
Source: https://docs.redem.io/knowledge-base/quality-checks/duplicate-entrance-score
Learn how the Duplicate Entrance Score detects duplicate survey entrants using demographics and IP.
## What is the Duplicate Entrance Score?
The **Duplicate Entrance Score (DES)** detects whether a respondent is likely a duplicate of another recent entrant in the same survey. It compares **demographics** and, when available, **IP address** against peers who entered shortly before.
DES is available for **API v3** projects only. It is not supported on v1/v2 `addRespondent` requests.
## High-level checks performed
* Requires **at least 4** demographic fields to compute a valid score. Fewer than 4 demographics are accepted but scored as invalid (`N/A`).
* Accepts **up to 10** demographics. Each demographic `type` must be unique (use custom type strings instead of repeating `"other"`).
* Compares the current entrant against peers from the last **15 minutes** (up to a minimum of **10** peers when available; fewer peers still compared).
* If no peers exist (first entrant in the window), the score is **100** (`VALID_ENTRANT`).
* If any peer shares the same IP, the score is **0** (`DUPLICATE_IP`) and peer respondent IDs are returned.
* Otherwise, demographics are compared per peer. Exact matches keep a low (duplicate-like) score; similar age / year of birth can add a limited penalty; any hard mismatch treats that peer as different. The final score is the **minimum** over peers.
* Scores **below 40** are categorized as `DUPLICATE_ENTRANT`; otherwise `VALID_ENTRANT`.
## Demographic types
`type` is a free-form string. Any custom label is allowed and compared with **exact** match (case-insensitive after trim), except the age-like types below.
**Recommended `type` values**
| `type` | Notes |
| ------------- | --------------------------------------------------------------- |
| `age` | Age-like similarity (see below) |
| `yearOfBirth` | Age-like similarity (see below) |
| `ageRange` | Exact match |
| `gender` | Exact match |
| `country` | Exact match |
| `city` | Exact match |
| `zip` | Exact match |
| `ethnicity` | Exact match |
| `salaryRange` | Exact match |
| `jobTitle` | Exact match |
| `other` | Exact match; prefer a specific custom type string when possible |
**Age-like types (`age`, `yearOfBirth`)**
These are the only types that use similarity instead of exact match:
* Numeric answers within **±3** count as **similar** (adds a limited score penalty once per peer, even if both `age` and `yearOfBirth` are similar)
* Exact numeric matches count as **same**
* Non-numeric or larger differences count as **different** (that peer is treated as fully different)
All other types — including recommended values above and any custom string — always use exact match.
## Categories
| Category | Meaning |
| ------------------- | ------------------------------------------------------------------- |
| `VALID_ENTRANT` | No strong evidence of a duplicate entrance |
| `DUPLICATE_ENTRANT` | Demographics look highly similar to a recent peer |
| `DUPLICATE_IP` | Same IP as a recent peer |
| `N/A` | Score could not be computed (for example fewer than 4 demographics) |
## Default cleaning
When cleaning is enabled with recommended settings:
* Exclude respondents with a DES score **below 40**
* Category-based DES exclusions (`DUPLICATE_IP`, `DUPLICATE_ENTRANT`) are **off** by default
## How to use the DES?
Send a single DES data point on [`POST /v3/addRespondent`](/api-reference/endpoints/v3/addRespondent) with optional `entranceTime` (defaults to the current timestamp if omitted), optional `ip`, and a `demographics` array. Only **one** DES data point is allowed per respondent (`dataPointId` defaults to `"DES"`).
# Grid-Question Score
Source: https://docs.redem.io/knowledge-base/quality-checks/grid-question-score
Learn how the Grid-Question Score identifies low-quality response patterns in grid questions.
## What is the Grid-Question Score?
The GQS helps assess data quality in grid questions (also known as matrix questions). It uses machine learning and a defined set of pattern-detection rules to evaluate how respondents interact with grid items.
## High-level checks performed
* Whether the sequence of responses across the grid items shows minimal variance, e.g., always choosing the same option across many rows (straight-lining).
* Whether the ordering of responses is highly repetitive or patterned (e.g., always lowest → highest → lowest → highest) when that would not make sense for the item content.
* Whether at least a minimum number of items are present in the grid. GQS supports grids with 5 or more items, while pattern checks are meaningful only from 7 items onward.
To detect response patterns beyond straightlining, grid question data must be submitted to the API in the original display order shown to the respondent.
## What Patterns Does the GQS Detect?
Here are some examples of behavioral patterns in grid responses that are analyzed by ReDem:
# Open-Ended Score
Source: https://docs.redem.io/knowledge-base/quality-checks/open-ended-score
Discover why the Open-Ended Score is an effective method for detecting poor data quality.
## What is the Open-Ended Score?
Open-ended quality checks evaluate free-text responses for relevance, informativeness, language conformity, duplication, and potential synthetic (automated) generation. The goal is to ensure that collected open-ended answers are meaningful and usable for analysis.
## How does ReDem classify responses?
ReDem classifies each open-ended response into distinct quality categories, ensuring a clear and consistent assessment of respondent performance. These categories capture all essential dimensions of open-ended response quality, from high-effort, meaningful engagement to outright fraud.
### 1. Valid Answer - Meaningful Answer with Varying Effort
**Definition:**
The question was read and answered meaningfully. The response is relevant to the question and demonstrates a varying degree of elaboration or cognitive effort.
### 2. No Answer ("Refusal or Inability to Answer")
**Definition:**
The question was read but not meaningfully answered. The respondent signals unwillingness or inability to answer the question.
**Typical Indicators:**
* Explicit refusal to provide an answer
* Dismissive statements
* Abbreviations indicating "no answer"
* One or more question marks
**Example Question:**
*Please describe your ideal summer vacation:*
**Example Answers:**
* Don't know
* I don't go on vacation
* None of your business
* I hate vacations
* ???????????
* n/a
## Effort Levels (Valid Answer & No Answer)
Effort is categorized into low, medium, or high, depending on the level of detail, specificity, and engagement shown in the response.\
This effort scale is applied to the **Valid Answer** and **No Answer** categories.
* **Low Effort**: Minimal response, short and factual, without elaboration.
**Example (Valid Answer):**
*Question: Please describe your ideal summer vacation:*
*Answer: In Italy.*
* **Medium Effort**: Some elaboration with relevant details; the response provides some context or specificity.
**Example (Valid Answer):**
*Question: Please describe your ideal summer vacation:*
*Answer: At a vineyard in Tuscany.*
* **High Effort**: Detailed and thoughtful response including context, reasoning, and multiple elements.
**Example (Valid Answer):**
*Question: Please describe your ideal summer vacation:*
*Answer: Two weeks at a Tuscan vineyard near Siena with my best friends, good food, and a swimming pool.*
### 3. Off Topic ("Irrelevant" - Misunderstanding or Lack of Motivation)
**Definition:**
The question was not properly read or understood. The response may be meaningful in another context but is irrelevant to the actual question, indicating that the respondent did not engage with the question's topic or intent.
**Typical Indicators:**
* Response unrelated to the question
* General or misplaced statements
* One-word or minimal replies that don't address the question
**Example Question:**
*Please describe your ideal summer vacation:*
**Example Answers:**
* My hobbies are cycling, reading, and swimming.
* My ideal vacation is at Christmas time in the mountains of Tyrol.
* Thanksgiving
* Everything
* Nothing
* No
### 4. Gibberish ("Nonsense" - Clear Fraud)
**Definition:**
The question was not read. The response is completely meaningless or incoherent, consisting of random text fragments, repetitions of the question or its instructions, or nonsensical character combinations.
**Typical Indicators:**
* Jumbled or unrelated text fragments
* Copying or repeating the question or parts of it ("parroting")
* Random letters, symbols, or punctuation ("text soup")
* Question marks combined with other random characters
**Example Question:**
*Please describe your ideal summer vacation:*
**Example Answers:**
* Hello! I call you because I am happy
* Please describe your ideal summer vacation
* your ideal summer vacation
* It is something when I have but never one How do you do?
* Gdhj2
* ………
* ?.
* x?
### 5. AI-Suspect (Probable Non-Human-Generated Response)
**Definition:**
The response shows characteristics of AI-generated text, indicating it was likely produced by a chatbot rather than a human respondent. Such answers often appear syntactically perfect, overly balanced, or emotionally neutral, lacking natural human imperfections, spontaneity, or personal perspective.
**How ReDem detects AI-Suspect answers:**
ReDem evaluates **all open-ended answers from the same respondent together** in a single analysis. Each answer still receives its own AI-Suspect classification, but the model uses the full set of responses for context. That improves detection when individual answers are short on their own but the combined text is enough to assess writing style.
The check runs when the respondent's open-ended answers contain enough text in total. If the combined length is too low, ReDem skips AI-Suspect for that respondent and applies the other open-ended categories instead.
**Typical Indicators:**
* Unusually polished or "too perfect" language
* Balanced, structured, and generic phrasing without individuality
* Overly coherent style inconsistent with typical survey responses
* Lack of typos, personal references, or informal language
**Example Question:**
*Please describe your ideal summer vacation:*
**Example Answer:**
*My ideal summer vacation would balance exploration, relaxation, and inspiration. It would start somewhere by the sea — perhaps a quiet coastal town in southern Italy or Greece — where mornings begin with espresso on a terrace overlooking the water, followed by swimming, reading, and writing in the shade.*
### 6. Bad Language (Non-Content-Related Hate Speech or Inappropriate Wording)
**Definition:**
The response contains insults, profanity, or vulgar expressions that are unrelated to the context of the question. Such language indicates disrespectful or hostile behavior rather than a genuine attempt to answer.
**Typical Indicators:**
* Direct insults or offensive remarks toward others
* Swearwords or vulgar language without contextual relevance
* Aggressive tone or hostility unrelated to the question content
**Example Question:**
*Please describe your ideal summer vacation:*
**Example Answers:**
* **Bad Language Example**: This survey is shit.
* **No Bad Language Example**: Similar to my last vacation in Ibiza. It kicked ass.
### 7. Wrong Language
The response is provided in a language that does not match the expected language(s) specified for the data point. This category helps identify responses that may have been misunderstood or provided by respondents who did not understand the question.
### 8. Duplicate Respondent
The response is identical or highly similar to responses provided by other respondents in the survey, indicating potential data quality issues or coordinated responses.
Activate the duplicate check only if identical or highly similar responses to open-ends among the interviews are implausible.
### 9. Duplicate Answer
The response is identical or highly similar to another response provided by the same respondent within the survey, indicating potential lack of engagement or copy-paste behavior.
Activate the duplicate check only if identical or highly similar responses to open ends within interviews are implausible.
## Use of GPT for Open-Ended Score
ReDem uses the most advanced GPT large language models (LLMs) from OpenAI, to analyze and categorize open-ended responses. This enables precise and reliable scoring by leveraging cutting-edge language understanding.
To ensure data privacy and compliance, GPT is integrated into the ReDem OES with strict safeguards:
### Individual Responses & Anonymity
Most open-ended categories are evaluated per answer, using a fully anonymized ID. Only the data needed for each check is transmitted — complete survey datasets are never shared. For **AI-Suspect**, ReDem sends all of a respondent's open-ended answers from that evaluation in one request so the model can compare writing style across answers; each answer still gets its own result.
### Exclusive Use by ReDem
Only ReDem communicates with OpenAI. The platform does not share any details about the origin or source of the responses.
### Data Storage & Retention
OpenAI retains data for up to 30 days, after which it is permanently deleted. The data is never used to train AI models.
### GDPR-Compliant Data Transfers
ReDem and OpenAI operate under a Data Processing Agreement based on EU Standard Contractual Clauses (SCCs). This ensures all data transfers—including those involving personal data—fully comply with GDPR
This setup gives you both the advanced capabilities of GPT and the data protection required for responsible AI use in survey research.
# ReDem Score
Source: https://docs.redem.io/knowledge-base/quality-checks/redem-score
An Integrated Assessment of Data Quality
## Comprehensive Quality Evaluation
The ReDem Total Quality Score (R-Score) provides a multidimensional evaluation of data quality in open-ended and close-ended survey responses. Built on a 360-degree assessment framework, each respondent’s data is systematically analyzed across multiple quality dimensions.
The ReDem Score functions like a trust index, reflecting how reliable an interview is in terms of quality. It ranges from 0 to 100, where:
* 0 indicates no trust in the interview quality.
* 100 represents complete trust.
To make interpretation easier, the scores are visualized using a traffic light system:
* 🔴 Red (0–39)
* Very poor quality interviews.
* Often indicative of fraudulent responses.
* Must be removed from the dataset.
* 🟡 Yellow (40–59)
* Doubtful quality.
* May include inattentive or low-engagement participants.
* Should also be removed to maintain data integrity.
* 🟢 Light Green (60–79)
* Acceptable quality.
* Especially scores between 60 and 70 are not ideal, but still passable.
* These interviews mark the cut-off threshold:
We recommend removing all interviews scoring below 60.
* 🟢 Dark Green (80–100)
* Good to very good quality.
* High confidence in the data's reliability.
## Objective and Transparent Scoring
The R-Score consolidates a broad range of quality indicators into a single, interpretable metric. This includes automated checks for inconsistencies, duplications, unnatural response patterns, language compliance, and other behavioral markers indicative of low-quality or fraudulent input.
## Robust Against Fraudulent Responses
By embedding quality control mechanisms throughout the survey process, ReDem ensures that data integrity is maintained at every step. This systematic approach minimizes the risk of undetected manipulation and provides researchers with a reliable basis for downstream analyses.
### The Subscores of the ReDem Score
Evaluates the quality of open-ended answers using AI. It considers factors such as relevance, duplication, and potential AI generation to detect inattentive, generic, or fraudulent responses.
Assesses the logical consistency and plausibility of a respondent’s answers across the entire interview. This score helps automatically identify contradictions and inconsistencies in response patterns.
Analyzes total interview duration and time spent per question. It flags responses that are too fast, too slow, or show irregular timing patterns compared to the expected baseline.
Evaluates response behavior in grid questions. It detects different patterns, such as straight-lining or zigzag answering, using machine learning.
Analyzes typing behavior to distinguish natural human input from potentially automated or artificial entries. It considers typing speed, rhythm, and variability to flag suspicious input patterns.
# Time Score
Source: https://docs.redem.io/knowledge-base/quality-checks/time-score
Understand how the Time Score is calculated and how it helps assess respondent engagement.
## What is the Time Score?
The Time Score allows you to evaluate how much time respondents spend on different parts of the questionnaire—such as the total interview duration, time per section, or time per question. It flags responses that significantly deviate from time patterns of other respondents, helping you detect rushed or overly slow behavior.
By identifying these anomalies, the Time Score helps improve the overall reliability of your survey data.
## High-level checks performed
* The total length of interview (LOI, “length of interview”) is compared with a benchmark or median for the study or subgroup.
* Optional durations for individual questions or sections may also be evaluated if available.
**Important:** Scores are only calculated when there are at least 30 respondents, ensuring the median is statistically meaningful.
## Total Time Score Calculation per Respondent
Time Scores are calculated for each available time metric (e.g., LOI, time per page), then combined into an overall score for the respondent.
To ensure accurate scoring, we recommend capturing the time spent per page. This allows for a more detailed and precise assessment of respondent engagement.
# Welcome
Source: https://docs.redem.io/welcome
to ReDem's User Guide
Our platform leverages advanced AI technology to automate the quality control and cleaning of survey responses, empowering organizations to make informed decisions based on reliable data.
ReDem's user guide offers a detailed resource to help you understand how the platform works and how to use it effectively."
## New to ReDem?
If you're new to ReDem, start by [setting up your account](/account-setup). Follow these simple steps to begin your journey to improved data quality!
## Learn how ReDem works
Follow our step-by-step guide to understand [how ReDem works](/how-it-works).
## Next steps
Discover the quality checks ReDem performs to ensure reliable and high-quality data.
Check our API documentation to learn how to integrate ReDem with your survey tool.
Begin by importing your first file into ReDem to get started.
Discover how ReDem makes data cleaning easier.
If you have questions or need assistance, contact our support team at [info@redem.io](mailto:info@redem.io). We're here to help you make the most of ReDem!
# API Keys
Source: https://docs.redem.io/api-reference/api-specifications/api-keys
Learn how to manage and use API keys within ReDem.
API keys let you call the ReDem API from your own systems. When you create a key, you choose a **permission level** that defines which endpoints it may call.
## Permission levels
You create keys with one of two permission levels:
| Level | Where to use it | What it can call |
| ----------- | ------------------------------------------------------------------------------------------------------------- | --------------------------- |
| **Private** | Backend servers, secure automation, and integrations where the key never reaches a browser or end-user device | **All** ReDem API endpoints |
| **Public** | Browser, mobile app, or any client-side integration where the key **must** be present on the device | **`addRespondent` only** |
Use a **public** key when your integration cannot keep the key on a server—for example, a script or app that runs directly in the respondent’s browser or on their phone and submits data via `addRespondent`.
Use a **private** key whenever the request originates from infrastructure you control (your backend, server-side survey tools, ETL jobs, etc.). Private keys unlock the full API (surveys, configuration, retrieval, and `addRespondent`).
**Private API keys must never** be embedded in frontend code, shipped in mobile apps, checked into repositories, or shared with third parties. If a private key is exposed—whether in logs, client bundles, or elsewhere—**delete that key immediately** in ReDem and **create a new private key**. Treat a leaked private key as compromised.
Public keys are designed to be visible on the client; they still authenticate your company and are subject to rate limits, but they **cannot** call endpoints other than `addRespondent`. Any other route requires a private key.
In the [API reference](/api-reference/intro/introduction), each operation’s request body schema includes an **Authentication** note stating whether a **private** or **public** key is allowed.
## Create API Key
You can create an API key by following these steps:
To create an API Key, you'll need a ReDem account. Don’t have an account yet?
Get started by [setting up your account](/account-setup).
Once you are logged in to [ReDem Application](https://app.redem.io/), navigate to the API Keys section in your profile.
Click on the "Create API Key" button to generate a new key.
Give your API key a clear, descriptive name so you can identify its purpose later, and choose **Private (server-side)** or **Public (browser / client)** according to [permission levels](#permission-levels) above.
Once you’ve created an API key, copy it and store it somewhere safe. You will not be able to see it again after you leave the screen.
Send the key in the api-key header on requests your integration is allowed to make (see your key’s permission level).
```http theme={null}
api-key: your_api_key_xxx
```
For submitting respondents from the client, use a public key with the addRespondent endpoint. For all other API calls, use a private key from your backend.
**Best practices for API key management:**
* Use separate keys for testing and live surveys
* Prefer a **private** key for server-side integrations; use a **public** key only when the key must live on the client.
* If any key is compromised or exposed inappropriately, delete it immediately and generate a new one.
## Rate limits
All API requests authenticated with `api-key` are subject to per-key rate limiting.
* `addRespondent`:
* Standard API keys: 1200 requests per minute
* Premium API keys (configured per client): up to 1600 requests per minute
* Other endpoints:
* 1200 requests per minute
If you exceed the limit, you will receive a `429` response:
```json theme={null}
{
"error": "rate_limit_exceeded",
"message": "This API key exceeded 1200 requests per minute.",
"statusCode": 429
}
```
# Rate Limits
Source: https://docs.redem.io/api-reference/api-specifications/rate-limits
Learn about ReDem’s API rate limits.
## Rate Limits & Performance Considerations
Rate limits are enforced **per API key** to protect platform stability and ensure fair usage across clients.
### Endpoint-specific limits
#### `addRespondent`
* **Standard API keys**: **600 requests / minute**
* **Premium API keys**: **1200 requests / minute**
#### All other endpoints (excluding `addRespondent`)
* **1200 requests / minute** per API key
⭕ **Please note:** If you exceed the configured limits, requests may be temporarily rejected (HTTP `429`).
**🔦 Tip:**
For clients with specific performance requirements or higher scalability needs, contact `info@redem.io` to explore the **Dedicated Tier**.
# Response Structure
Source: https://docs.redem.io/api-reference/api-specifications/response-structure
Understand the standardized response format used across all ReDem endpoints.
The ReDem API delivers clear, consistent, and well-structured responses to ensure seamless integration and efficient processing. Each response follows a standardized format aligned with **RESTful principles** and **OpenAPI standards**.
This structure enhances transparency, simplifies parsing and error handling, and supports fast debugging—ensuring reliability and predictability in every interaction.
### ✅ Success Response
The success response of the ReDem API indicates that the request has been processed successfully. This response is well-structured and provides crucial information about the request's status.
The success response follows a standardized format to ensure consistency, predictability, and ease of use for developers.
Success responses are structured as follows:
* `success`: A variable indicating whether the operation was successful.
* `message`: A variable that human-readable message providing additional context or confirmation of the requested action.
* `results`: This object serves as a container to hold the results for the requested data, encapsulating all relevant information and outputs in a structured format.
```json Sample success response for "Add Respondent" theme={null}
{
"success": true,
"message": "Respondent Evaluated successfully",
"results": {
"status": "JOB_COMPLETED",
"respondentQuality": {
"isExcluded": true,
"reasonsForExclusion": [
"Open Ended Score Threshold",
"Coherence Score Threshold"
],
"redemScore": 85,
// ... rest of the response object ...
}
}
}
```
### ⚠️ Error Response
The error response of the ReDem API is returned when a request fails due to various reasons. This response provides clear, actionable information to help developers identify and resolve the cause of the error. The response format is consistent, ensuring easy parsing and fast debugging.
Error responses are structured as follows:
* `success`: A variable indicating whether the operation was successful.
* `message`: A variable that human-readable message providing additional context or confirmation of the requested action.
* `errors`: This object serves as a container to hold the errors for the requested data.
```json Sample error response for "Add Respondent" theme={null}
{
"success": false,
"message": "Validation Error",
"errors": {
"0": "\"surveyName\" is required",
"1": "\"dataPoints[0].dataPointId\" is required"
}
}
```
# Asynchronous Response
Source: https://docs.redem.io/api-reference/intro/asynchronous-response
Learn how to integrate ReDem with your survey tools
To integrate with ReDem, you must have a ReDem account.
Don’t have an account yet? Get started by [setting up your account](/account-setup).
Contact us at [support@redem.io](mailto:support@redem.io) to request an API key.
Ensure your data is formatted correctly according to the guidelines before sending it via the API. Below is a sample request object to help you structure your data properly.
For an asynchronous response approach, the `synchronousResponse` field **must always be set to `false`**. This allows you to continue engaging with your respondents without waiting for a response from ReDem.
```javascript Example request body theme={null}
{
"respondentId": "RESP497770",
"surveyName": "Global Vacation Insights 2024",
"dataPoints": [
{
"qualityCheck": "OES",
"dataPointId": "Q1",
"question": "Where did you spend your last vacation?",
"answer": "We were at Lake Garda in Italy",
"keywords": ["Beach", "Mountains", "Lake", "Museums", "Europe", "Asia", "Destination"],
"activateDuplicateDetection": true,
"allowedLanguages": ["en"]
},
{
"qualityCheck": "TS",
"dataPointId": "durationQ1",
"duration": 42670
},
// ... other data points ...
],
"activateCleaning": true,
"cleaningSettings": {
"redemScore": 60,
"OES": {
"score": 60,
"minDataPoints":2,
"categories": {
"BAD_LANGUAGE": {"activate": true, "minDataPoints":2},
"GIBBERISH": {"activate": true, "minDataPoints":2},
"OFF_TOPIC": {"activate": true, "minDataPoints":2},
"WRONG_LANGUAGE": {"activate": true, "minDataPoints":2},
"AI_SUSPECT": {"activate": true, "minDataPoints":2},
// ... other categories ...
}
},
"CHS": {"score": 50},
"GQS": {"score": 40, "minDataPoints":2},
"TS": {"score": 30}
},
"synchronousResponse": false,
}
```
For a full example and detailed guidance on using this request object, visit the [Add Respondent](/api-reference/endpoints/v3/addRespondent) endpoint. It includes explanations of all fields and their usage.
At the end of the survey, just before the respondent reaches the ‘complete’ state, submit an API request to ReDem including the respondent’s information and your API key.
```javascript Example request (JavaScript) theme={null}
const options = {
method: 'POST',
headers: {Authorization: 'Bearer ', 'Content-Type': 'application/json'},
body: '{"respondentId":"RESP497770","projectName":"Global Vacation Insights 2024","dataPoints":[{"qualityCheck":"OES","dataPointId":"Q1","question":"Where did you spend your last vacation?","answer":"We were at Lake Garda in Italy","keywords":["Beach","Mountains","Lake","Museums","Europe","Asia","Destination"],"activateDuplicateDetection":true,"allowedLanguages":["en","de","it"]},{"qualityCheck":"TS","dataPointId":"durationQ1","duration":42670},{"qualityCheck":"GQS","dataPointId":"Q2","gridAnswersPattern":[7,8,9,1,3,5,2,5,9,6]},{"qualityCheck":"OES","dataPointId":"Q3","question":"What was the most memorable part of your last vacation?","answer":"Italian cuisine, especially pizza and fine wine.","keywords":["Cuisine","Food","Art","Adventure","History","Landscape","Culture"],"activateDuplicateDetection":true,"allowedLanguages":["en","de","it"]},{"qualityCheck":"TS","dataPointId":"durationQ3","duration":69720},{"qualityCheck":"CHS","dataPointId":"CHS_Question","interviewData":[{"question":"What mode of transport did you use?","answer":"Car"},{"question":"How many days did you stay?","answer":5},{"question":"Did you travel with family?","answer":"yes"},{"question":"What was your approximate total budget for the trip (in EUR)?","answer":1500},{"question":"What type of accommodation did you stay in?","answer":"Hotel"}]},{"qualityCheck":"GQS","dataPointId":"Q4","gridAnswersPattern":[2,1,4,3,5,2,3,1,1,1]},{"qualityCheck":"TS","dataPointId":"totalDuration","duration":256843}],"cleaningSettings":{"standardSettings":false,"CustomSettings":{"redemScore":60,"OES":{"score":30,"minimumAnswers":2,"categories":{"genericAnswers":{"exclude":true,"minDataPoints":2},"noInformation":{"exclude":true,"minDataPoints":2},"badLanguage":{"exclude":true,"minDataPoints":2},"nonsense":{"exclude":true,"minDataPoints":1},"duplicateAnswer":{"exclude":true,"minDataPoints":1},"duplicateRespondent":{"exclude":true,"minDataPoints":1},"wrongTopic":{"exclude":true,"minDataPoints":1},"wrongLanguage":{"exclude":true,"minDataPoints":1},"copyPastAnswer":{"exclude":true,"minDataPoints":1},"fakeAnswer":{"exclude":true,"minDataPoints":1}}},"CHS":{"score":20},"GQS":{"score":10,"minimumItems":15},"TS":{"score":30}}},"synchronousResponse":false}'
};
fetch('https://api.redem.io/respondent/add', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
```
Retrieve the response from ReDem to ensure your request was successfully submitted and is still in progress.
```javascript Example response (JavaScript) theme={null}
{
"success": true,
"message": "Respondent Queued for Evaluation",
"results": {
"status": "QUEUED"
}
}
```
For a full example and detailed guidance on using this response object, visit the [Add Respondent](api-reference/endpoints/v3/addRespondent) endpoint. It includes explanations of all fields and their usage.
Since an asynchronous response approach is recommended, you can synchronize respondent evaluations from ReDem at any time.
To streamline the process, you can set up an automated job that performs the synchronization on a regular basis, ensuring your data remains up-to-date without requiring manual intervention.
To do this, you can use the [Get Respondent](/api-reference/endpoints/v3/getRespondent) endpoint or the [Get All Respondents](/api-reference/endpoints/v3/getAllRespondents) endpoint.
# Synchronous Response
Source: https://docs.redem.io/api-reference/intro/synchronous-response
Learn how to integrate ReDem and instantly receive all quality information
To integrate with ReDem, you must have a ReDem account.
Don’t have an account yet? Get started by [setting up your account](/account-setup).
Contact us at [support@redem.io](mailto:support@redem.io) to request an API key.
Ensure your data is formatted correctly according to the guidelines before sending it via the API. Below is a sample request object to help you structure your data properly.
For a synchronous response approach, the `synchronousResponse` field **must always be set to `true`**. This ensures you receive responses from ReDem in real time.
Please format the request data as shown below:
```javascript Example request body theme={null}
{
"respondentId": "RESP497770",
"surveyName": "Global Vacation Insights 2024",
"dataPoints": [
{
"qualityCheck": "OES",
"dataPointId": "Q1",
"question": "Where did you spend your last vacation?",
"answer": "We were at Lake Garda in Italy",
"keywords": ["Beach", "Mountains", "Lake", "Museums", "Europe", "Asia", "Destination"],
"activateDuplicateDetection": true,
"allowedLanguages": ["en"]
},
{
"qualityCheck": "TS",
"dataPointId": "durationQ1",
"duration": 42670
},
// ... other data points ...
],
"activateCleaning": true,
"cleaningSettings": {
"redemScore": 60,
"OES": {
"score": 40,
"minDataPoints":2,
"categories": {
"BAD_LANGUAGE": {"activate": true, "minDataPoints":2},
"GIBBERISH": {"activate": true, "minDataPoints":2},
"OFF_TOPIC": {"activate": true, "minDataPoints":2},
"WRONG_LANGUAGE": {"activate": true, "minDataPoints":2},
"AI_SUSPECT": {"activate": true, "minDataPoints":2},
// ... other categories ...
}
},
"CHS": {"score": 30},
"GQS": {"score": 20, "minDataPoints":2},
"TS": {"score": 30}
},
"synchronousResponse": true,
}
```
For a full example and detailed guidance on using this request object, visit the [Add Respondent](/api-reference/endpoints/v3/addRespondent) endpoint. It includes explanations of all fields and their usage.
At the end of the survey, just before the respondent reaches the ‘complete’ state, submit an API request to ReDem including the respondent’s information and your API key.
```javascript Example request (JavaScript) theme={null}
const options = {
method: 'POST',
headers: {Authorization: 'Bearer ', 'Content-Type': 'application/json'},
body: '{"respondentId":"RESP497770","projectName":"Global Vacation Insights 2024","dataPoints":[{"qualityCheck":"OES","dataPointId":"Q1","question":"Where did you spend your last vacation?","answer":"We were at Lake Garda in Italy","keywords":["Beach","Mountains","Lake","Museums","Europe","Asia","Destination"],"activateDuplicateDetection":true,"allowedLanguages":["en","de","it"]},{"qualityCheck":"TS","dataPointId":"durationQ1","duration":42670},{"qualityCheck":"GQS","dataPointId":"Q2","gridAnswersPattern":[7,8,9,1,3,5,2,5,9,6]},{"qualityCheck":"OES","dataPointId":"Q3","question":"What was the most memorable part of your last vacation?","answer":"Italian cuisine, especially pizza and fine wine.","keywords":["Cuisine","Food","Art","Adventure","History","Landscape","Culture"],"activateDuplicateDetection":true,"allowedLanguages":["en","de","it"]},{"qualityCheck":"TS","dataPointId":"durationQ3","duration":69720},{"qualityCheck":"CHS","dataPointId":"CHS_Question","interviewData":[{"question":"What mode of transport did you use?","answer":"Car"},{"question":"How many days did you stay?","answer":5},{"question":"Did you travel with family?","answer":"yes"},{"question":"What was your approximate total budget for the trip (in EUR)?","answer":1500},{"question":"What type of accommodation did you stay in?","answer":"Hotel"}]},{"qualityCheck":"GQS","dataPointId":"Q4","gridAnswersPattern":[2,1,4,3,5,2,3,1,1,1]},{"qualityCheck":"TS","dataPointId":"totalDuration","duration":256843}],"cleaningSettings":{"standardSettings":false,"CustomSettings":{"redemScore":60,"OES":{"score":30,"minimumAnswers":2,"categories":{"genericAnswers":{"exclude":true,"minDataPoints":2},"noInformation":{"exclude":true,"minDataPoints":2},"badLanguage":{"exclude":true,"minDataPoints":2},"nonsense":{"exclude":true,"minDataPoints":1},"duplicateAnswer":{"exclude":true,"minDataPoints":1},"duplicateRespondent":{"exclude":true,"minDataPoints":1},"wrongTopic":{"exclude":true,"minDataPoints":1},"wrongLanguage":{"exclude":true,"minDataPoints":1},"copyPastAnswer":{"exclude":true,"minDataPoints":1},"fakeAnswer":{"exclude":true,"minDataPoints":1}}},"CHS":{"score":20},"GQS":{"score":10,"minimumItems":15},"TS":{"score":30}}},"synchronousResponse":true}'
};
fetch('https://api.redem.io/respondent/add', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
```
Retrieve the response from ReDem to trigger the next step in your workflow. If cleaning is enabled, low-quality responses will be excluded before reaching the complete state, while high-quality responses will be retained as complete.
```javascript Example response (JavaScript) theme={null}
{
"success": true,
"message": "Respondent Evaluated successfully",
"results": {
"status": "JOB_COMPLETED",
"respondentQuality": {
"isExcluded": true,
"reasonsForExclusion": [
"Open Ended Score Threshold",
"Coherence Score Threshold"
],
"redemScore": 85,
"qualityScoreSummary": [
{
"qualityCheck": "OES",
"score": 80
},
{
"qualityCheck": "CHS",
"score": 75,
"reason": "The user shows several inconsistencies and contradictions, such as different ..."
},
{
"qualityCheck": "GQS",
"score": 85
},
{
"qualityCheck": "TS",
"score": 70
}
],
"dataPointsSummary": [
{
"qualityCheck": "OES",
"dataPointId": "Q1",
"score": 85,
"category": "Valid Answer"
},
{
"qualityCheck": "TS",
"dataPointId": "durationQ1",
"score": 95
},
{
"qualityCheck": "GQS",
"dataPointId": "Q2",
"score": 90
},
{
"qualityCheck": "OES",
"dataPointId": "Q3",
"score": 75,
"category": "Valid Answer"
},
{
"qualityCheck": "TS",
"dataPointId": "durationQ3",
"score": 50
},
{
"qualityCheck": "CHS",
"dataPointId": "CHS_Question",
"score": 75,
"reason": "The user shows several inconsistencies and contradictions, such as different ..."
},
{
"qualityCheck": "GQS",
"dataPointId": "Q4",
"score": 80
},
{
"qualityCheck": "TS",
"dataPointId": "totalDuration",
"score": 65
}
]
}
}
}
```
For a full example and detailed guidance on using this response object, visit the [Add Respondent](/api-reference/endpoints/v3/addRespondent) endpoint. It includes explanations of all fields and their usage.
# API Version Migration Guide
Source: https://docs.redem.io/api-reference/others/migration-guide
Step-by-step guide to migrate between ReDem API versions.
This guide will help you migrate your integration from one API version to another. Before starting, it's important to understand a key limitation:
**You cannot upgrade the API version for a survey that is currently running.** Each survey is permanently tied to the API version it was created with. To use a newer API version, you must create a new survey with the updated endpoints.
## Migration Overview
The ReDem API uses versioned endpoints to ensure backward compatibility while introducing new features:
* **v1**: Legacy endpoints
* **v2**: Introduced consistent CHS question IDs
* **v3**: Enhanced OES with improved categories and effort scale
## Migration from v1 to v2
### Key Changes
1. **Endpoint paths**: All endpoints now use the `/v2` prefix
* `POST /addRespondent` → `POST /v2/addRespondent`
* `POST /getRespondent` → `POST /v2/getRespondent`
* `POST /getAllRespondents` → `POST /v2/getAllRespondents`
* `POST /stopSurvey` → `POST /v2/stopSurvey`
* `POST /restartSurvey` → `POST /v2/restartSurvey`
* `POST /creditCalculation` → `POST /v2/creditCalculation`
2. **CHS questionId requirement**: Each CHS interview entry must include a `questionId` field
### Step-by-Step Migration
#### Step 1: Update Endpoint URLs
Update your base URL construction to include the `/v2` prefix:
```javascript theme={null}
// Before (v1)
const baseUrl = 'https://api.redem.io/addRespondent';
// After (v2)
const baseUrl = 'https://api.redem.io/v2/addRespondent';
```
#### Step 2: Add questionId to CHS Data Points
For each CHS data point, add the `questionId` field to the `interviewData` array:
```javascript theme={null}
// Before (v1)
{
"qualityCheck": "CHS",
"dataPointId": "CHS_Q1",
"interviewData": [
{
"question": "What type of accommodation did you stay in?",
"answer": "Hotel"
}
]
}
// After (v2)
{
"qualityCheck": "CHS",
"dataPointId": "CHS_Q1",
"interviewData": [
{
"questionId": "Q1", // Required in v2
"question": "What type of accommodation did you stay in?",
"answer": "Hotel"
}
]
}
```
The `questionId` should be consistent across all respondents for the same question. Use meaningful identifiers like "Q1", "Q2", or custom IDs that match your survey structure.
#### Step 3: Important: Create New Survey
**Important:** You cannot update a running survey to a new API version. You must create a new survey using v2 endpoints.
```javascript theme={null}
// Use v2 endpoint to create new survey
POST https://api.redem.io/v2/addRespondent
```
#### Step 4: Test Your Integration
1. Test adding a single respondent with the new v2 endpoint
2. Verify CHS results include consistent question IDs
3. Confirm all other endpoints work correctly with v2 paths
## Migration from v2 to v3
### Key Changes
1. **Endpoint paths**: All endpoints now use the `/v3` prefix
* `POST /v2/addRespondent` → `POST /v3/addRespondent`
* `POST /v2/getRespondent` → `POST /v3/getRespondent`
* `POST /v2/getAllRespondents` → `POST /v3/getAllRespondents`
* `POST /v2/stopSurvey` → `POST /v3/stopSurvey`
* `POST /v2/restartSurvey` → `POST /v3/restartSurvey`
* `POST /v2/creditCalculation` → `POST /v3/creditCalculation`
* `POST /v2/deleteRespondents` → `POST /v3/deleteRespondents`
* `POST /v2/deleteSurveys` → `POST /v3/deleteSurveys`
* `POST /v2/updateRespondentsExcludedStatus` → `POST /v3/updateRespondentsExcludedStatus`
2. **OES categories**: Updated category names in cleaning settings
* `NO_INFORMATION`, `GENERIC_ANSWER` → `NO_ANSWER`
* `FAKE_ANSWER` → `AI_SUSPECT`
* New categories: `OFF_TOPIC`, `GIBBERISH`
3. **New optional fields**:
* `surveyDescription` for CHS data points
* `respondentAttributes` for additional respondent metadata
### Step-by-Step Migration
#### Step 1: Update Endpoint URLs
Update your base URL construction to include the `/v3` prefix:
```javascript theme={null}
// Before (v2)
const baseUrl = 'https://api.redem.io/v2/addRespondent';
// After (v3)
const baseUrl = 'https://api.redem.io/v3/addRespondent';
```
#### Step 2: Update OES Categories in Cleaning Settings
Update the OES category names in your cleaning settings request:
```javascript theme={null}
// Before (v2)
{
"cleaningSettings": {
"redemScore": 60,
"OES": {
"activate": true,
"score": 60,
"minDataPoints": 2,
"categories": {
"GENERIC_ANSWER": {"activate": true, "minDataPoints": 2},
"NO_INFORMATION": {"activate": true, "minDataPoints": 3},
"FAKE_ANSWER": {"activate": true, "minDataPoints": 2}
}
}
}
}
// After (v3)
{
"cleaningSettings": {
"redemScore": 60,
"OES": {
"activate": true,
"score": 40,
"minDataPoints": 2,
"categories": {
"AI_SUSPECT": {"activate": true, "minDataPoints": 2},
"BAD_LANGUAGE": {"activate": true, "minDataPoints": 2},
"OFF_TOPIC": {"activate": true, "minDataPoints": 2},
"NO_ANSWER": {"activate": false, "minDataPoints": 2},
"WRONG_LANGUAGE": {"activate": true, "minDataPoints": 2},
"GIBBERISH": {"activate": true, "minDataPoints": 2},
"DUPLICATE_ANSWER": {"activate": false, "minDataPoints": 1},
"DUPLICATE_RESPONDENT": {"activate": false, "minDataPoints": 1}
}
}
}
}
```
These cleaning settings are examples and can be customized for each survey. Review and adjust the activation status and minimum data points thresholds according to your specific survey requirements and quality standards.
#### Step 3: Optional: Add Survey Description for CHS
You can now provide a `surveyDescription` when submitting CHS data points to improve accuracy:
```javascript theme={null}
{
"qualityCheck": "CHS",
"dataPointId": "CHS_Q1",
"surveyDescription": "Survey about vacation experiences in 2024", // Optional
"interviewData": [
{
"questionId": "Q1",
"question": "What type of accommodation did you stay in?",
"answer": "Hotel"
}
]
}
```
#### Step 4: Optional: Add Respondent Attributes
You can add metadata about respondents:
```javascript theme={null}
{
"surveyName": "Vacation Survey 2024",
"respondentId": "RESP001",
"respondentAttributes": { // Optional
"panel": "PanelA",
"market": "US",
"source": "email"
},
"dataPoints": [
// ... data points
]
}
```
#### Step 5: Important: Create New Survey
**Important:** You cannot update a running survey to a new API version. You must create a new survey using v3 endpoints.
#### Step 6: Test Your Integration
1. Test adding respondents with the new v3 endpoint
2. Verify responses use the new category names
3. Confirm all category names in cleaning settings are updated correctly
## Migration from v1 to v3
If you're migrating directly from v1 to v3, follow both migration paths:
1. First, apply all changes from v1 → v2 (especially adding `questionId` to CHS)
2. Then, apply all changes from v2 → v3 (OES categories, etc.)
## Best Practices
1. **Test with a sample survey** before migrating production surveys. Do not test with production surveys.
2. **Important:** You cannot update a running survey to a new API version. Create new surveys with the updated endpoints.
3. **Check responses in your tests** to ensure category mappings work correctly
## Need Help?
If you encounter issues during migration or have questions:
* Review the [API Change Log](/changelogs/api-change-log) for detailed version history
* Check the [endpoint documentation](/api-reference/endpoints/v3/addRespondent) for v3 specifics
* Contact support at [support@redem.io](mailto:support@redem.io)
# Structuring Surveys Responses for ReDem Compatibility
Source: https://docs.redem.io/api-reference/others/structuring-survey-responses
A complete guide on how to transform survey responses into ReDem-compatible data points
This guide explains how to format your survey data into structured data points suitable for submission to the addRespondent endpoint of the ReDem API.
## Preparing survey responses for CHS (Coherence Score)
For each CHS data point, all question–answer pairs must be included as separate objects within the interviewData array. Each object should contain a
* questionId - A unique identifier for the question.
* question - The full text of the question, When applicable, include all possible answer options that respondents can choose from to provide full context for the AI.
* answer - The respondent's selected answer(s) or written response.
### Recommended formats for different question types
For the most accurate assessments, the AI performs best when it has full visibility into the context of the questionnaire. Therefore, it is recommended to include as much information as possible from the questionnaire.
* **Single Choice Questions**
Includes dropdowns, radio buttons, yes/no, and Likert scale questions.
* **Question Field**: Provide the question text. If applicable, include all key answer options to give context to the selected response. For Likert scale questions, also include the scale labels in the Question field to ensure clarity.
* **Answer Field**: Include the respondent’s selected choice as a string or number.
```javascript Example interviewData object for a single-select question theme={null}
// Dropdown question
{
"questionId": "Q1",
"question": "What is your favorite type of cuisine? Select one option that describes your preference. - Italian, French, Chinese, Indian, Japanese, Mexican, Thai, Greek",
"answer": "Italian"
}
// Radio button question
{
"questionId": "Q1",
"question": "In a typical week, how frequently do you eat red meat (e.g., beef, pork)?",
"answer": "3–5 times per week"
}
// Yes/No question
{
"questionId": "Q1",
"question": "Do you like Fish or seafood? - Yes, No",
"answer": "No"
}
// Likert scale question - with text answer
{
"questionId": "Q1",
"question": "How much do you enjoy eating street food? - Not at all, A little, Somewhat, Quite a bit, Very much",
"answer": "Not at all"
}
// Likert scale question - with number answer
{
"questionId": "Q1",
"question": "To what extent do you agree with the following statement: Do you prefer home-cooked meals over eating out? - 1 = Strongly disagree, 2 = Disagree, 3 = Neutral, 4 = Agree, 5 = Strongly agree",
"answer": 4
}
// NPS question
{
"questionId": "Q1",
"question": "How likely are you to recommend our food delivery service to a friend or colleague - 1 = Not at all, 10 = Very much",
"answer": 8
}
```
* **Multiple Choice Questions**
* **Question Field**: Include the full question text and all possible answer options, separated by commas.
* **Answer Field**: List all selected options, separated by commas.
```javascript Example interviewData object for a checkbox question theme={null}
{
"questionId": "Q1",
"question": "Which of the following foods do you eat regularly? (You may select more than one.) - Chicken, Cheese, Bacon or sausage, Eggs, Fish or seafood, Plant-based meat substitutes (e.g., tofu, tempeh), Milk or dairy products, Fruits, Leafy vegetables (e.g., spinach, kale)",
"answer": "Cheese, Eggs"
}
```
* **Open-ended question**
These collect free-text input from respondents.
* **Question Field**: Include only the question text.
* **Answer Field**: Record the answer provided by the respondent.
```javascript Example interviewData object for an open-ended question theme={null}
{
"questionId": "Q1",
"question": "Can you describe your typical eating habits during the week?",
"answer": "I usually eat home-cooked meals with lots of vegetables and lean meats. I occasionally eat out on weekends, mostly opting for Asian or Mediterranean dishes. I try to avoid sugary snacks and drink plenty of water throughout the day."
}
```
* **Grid (matrix) questions**
Grid/matrix questions contain a stem plus multiple row items that share the same answer scale.
Transform the grid/matrix stem, row labels and answer scale into a structured object with the following format:
* Emit one object per row item so that each cell becomes its own data point
* **Question Field**: Concatenate the stem and the row label, separated by a hyphen (-), to form the full question text. Additionally, include all answer scale labels, separated by commas.
* **Answer Field**: Keep the selected scale label as the answer.
```javascript Example interviewData object for a grid/matrix question theme={null}
{
"questionId": "Q1",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Red meat (e.g., beef, pork) - Not at all, 1–2 times per week, 3–5 times per week, Several times per day, Daily",
"answer": "3–5 times per week"
},
{
"questionId": "Q2",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Fish or seafood - Not at all, 1–2 times per week, 3–5 times per week, Several times per day, Daily",
"answer": "Several times per day"
},
{
"questionId": "Q3",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Poultry (e.g., chicken, turkey) - Not at all, 1–2 times per week, 3–5 times per week, Several times per day, Daily",
"answer": "1–2 times per week"
},
{
"questionId": "Q4",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Dairy products (e.g., milk, cheese, yogurt) - Not at all, 1–2 times per week, 3–5 times per week, Several times per day, Daily",
"answer": "Daily"
},
{
"questionId": "Q5",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Eggs - Not at all, 1–2 times per week, 3–5 times per week, Several times per day, Daily",
"answer": "3–5 times per week"
},
{
"questionId": "Q6",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Legumes (e.g., beans, lentils, chickpeas) - Not at all, 1–2 times per week, 3–5 times per week, Several times per day, Daily",
"answer": "1–2 times per week"
},
{
"questionId": "Q7",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Grains (e.g., rice, pasta, bread) - Not at all, 1–2 times per week, 3–5 times per week, Several times per day, Daily",
"answer": "Daily"
}
```
### Minimum required formats for different question types
While we recommend the settings from the previous chapter to provide maximum context and achieve precise results, you can also use a simplified version, which does work but may not achieve the same level of accuracy.
* **Single Choice Questions**
Includes dropdowns, radio buttons, yes/no, and Likert scale questions.
* **Question Field**: Provide the question text.
* **Answer Field**: Include the respondent’s selected choice as a string or number.
```javascript Example interviewData object for a single-select question theme={null}
// Dropdown question
{
"questionId": "Q1",
"question": "What is your favorite type of cuisine? Select one option that describes your preference.",
"answer": "Italian"
}
// Radio button question
{
"questionId": "Q1",
"question": "In a typical week, how frequently do you eat red meat (e.g., beef, pork)?",
"answer": "3–5 times per week"
}
// Yes/No question
{
"questionId": "Q1",
"question": "Do you like Fish or seafood?",
"answer": "No"
}
// Likert scale question
{
"questionId": "Q1",
"question": "How much do you enjoy eating street food?",
"answer": "Not at all"
}
```
* **Multiple Choice Questions**
* **Question Field**: Include the full question text.
* **Answer Field**: List all selected options, separated by commas.
```javascript Example interviewData object for a checkbox question theme={null}
{
"questionId": "Q1",
"question": "Which of the following foods do you eat regularly? (You may select more than one.) - Chicken, Cheese, Bacon or sausage, Eggs, Fish or seafood, Plant-based meat substitutes (e.g., tofu, tempeh), Milk or dairy products, Fruits, Leafy vegetables (e.g., spinach, kale)",
"answer": "Cheese, Eggs"
}
```
* **Open-ended question**
These collect free-text input from respondents.
* **Question Field**: Include only the question text.
* **Answer Field**: Record the answer provided by the respondent.
```javascript Example interviewData object for an open-ended question theme={null}
{
"questionId": "Q1",
"question": "Can you describe your typical eating habits during the week?",
"answer": "I usually eat home-cooked meals with lots of vegetables and lean meats. I occasionally eat out on weekends, mostly opting for Asian or Mediterranean dishes. I try to avoid sugary snacks and drink plenty of water throughout the day."
}
```
* **Grid (matrix) questions**
Grid/matrix questions contain a stem plus multiple row items that share the same answer scale.
Transform the grid/matrix stem, row labels and answer scale into a structured object with the following format:
* Emit one object per row item so that each cell becomes its own data point
* **Question Field**: Concatenate the stem and the row label, separated by a hyphen (-), to form the full question text.
* **Answer Field**: Keep the selected scale label as the answer.
```javascript Example interviewData object for a grid/matrix question theme={null}
{
"questionId": "Q1",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Red meat (e.g., beef, pork)",
"answer": "3–5 times per week"
},
{
"questionId": "Q2",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Fish or seafood",
"answer": "Several times per day"
},
{
"questionId": "Q3",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Poultry (e.g., chicken, turkey)",
"answer": "1–2 times per week"
},
{
"questionId": "Q4",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Dairy products (e.g., milk, cheese, yogurt)",
"answer": "Daily"
},
{
"questionId": "Q5",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Eggs",
"answer": "3–5 times per week"
},
{
"questionId": "Q6",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Legumes (e.g., beans, lentils, chickpeas)",
"answer": "1–2 times per week"
},
{
"questionId": "Q7",
"question": "Please indicate how often you usually eat the following types of food. Think about a normal week. - Grains (e.g., rice, pasta, bread)",
"answer": "Daily"
}
```
# API Change Log
Source: https://docs.redem.io/changelogs/api-change-log
Stay updated on the latest changes and improvements in the API.
## Duplicate Entrance Score
* Coming soon on POST /v3/addRespondent — Send a `DES` datapoint (v3 only) with optional `entranceTime`, optional `ip`, and up to 10 demographics (at least 4 for a valid score). At most one DES datapoint per respondent.
* DES detects likely duplicate entrants by comparing demographics and IP against recent peers in the same survey.
See the [v3 addRespondent](/api-reference/endpoints/v3/addRespondent) endpoint documentation and the [Duplicate Entrance Score](/knowledge-base/quality-checks/duplicate-entrance-score) guide.
## Quality Check Suggestions
* POST /v3/qualityCheckSuggestions — New endpoint for partners: send a survey questionnaire structure and receive smart quality-check suggestions (OES, GQS, CHS, BAS) plus recommended cleaning settings.
* Suggestions align with ReDem best practices so end users spend less effort configuring an API project.
* `allInclusive` (default `true`) caps suggestion counts to all-inclusive plan limits.
See the [Quality Check Suggestions](/api-reference/endpoints/v3/qualityCheckSuggestions) endpoint documentation.
## OES Answer Translation: Skip Languages
* POST /v3/addRespondent — On an OES datapoint, set `skipTranslationLanguages` to a list of ISO 639-1 language codes that should **not** be translated when `shouldTranslate` is `true`.
* Example: a German agency can send `skipTranslationLanguages: ["de"]` so German answers are left as-is while other non-English answers are still translated.
* English answers are never translated, with or without this field. Use the same two-letter codes as `allowedLanguages`.
* `ignoreAllowedLanguageError` also applies to `skipTranslationLanguages`: invalid codes are dropped instead of rejecting the request.
See the [v3 addRespondent](/api-reference/endpoints/v3/addRespondent) endpoint documentation for field details.
## OES Answer Translation
* POST /v3/addRespondent — Set `shouldTranslate: true` on an OES datapoint to translate non-valid, non-English answers to English during quality evaluation. This makes it easy to review and verify our results for any language.
* Valid answers and answers already detected as English are not translated.
* On success, the OES entry in `dataPointsSummary` includes `translatedAnswer`. If translation was requested but failed, `translationFailed` is `true` and no translation credits are charged.
* Translation is available on API **v3** only.
See the [v3 addRespondent](/api-reference/endpoints/v3/addRespondent) endpoint documentation and the [ReDem Credits docs](/knowledge-base/miscellaneous/redem-credits) for credit rules.
## Ignore Validation Errors
You can now opt in to skip specific validation errors instead of rejecting the request. All flags default to `false`.
* POST /v1/addRespondent , POST /v2/addRespondent , POST /v3/addRespondent
* **OES** `ignoreEmptyAnswer` — When `true`, this OES datapoint is removed if `answer` is empty (including whitespace-only). If every OES datapoint is removed, OES is skipped.
* **OES** `ignoreAllowedLanguageError` — When `true`, invalid `allowedLanguages` codes (wrong format or non-ISO 639-1) are dropped instead of rejecting the request. Valid codes are kept. If every code is invalid, `allowedLanguages` is removed. Wrong-language scoring is unchanged for remaining valid codes.
* **CHS** `ignoreEmptyAnswers` — When `true`, questions with no answer (empty or whitespace-only) are removed from `interviewData`. If no questions remain, the CHS datapoint is dropped and CHS is skipped.
See the [v3 addRespondent](/api-reference/endpoints/v3/addRespondent) endpoint documentation for field details.
## BAS: Mouse Movement and Click Tracking
* POST /v3/addRespondent — BAS `interactionData` now accepts two additional interaction types alongside keystrokes and copy-paste:
* `MOUSE_MOVEMENT` — pointer position as `{ x, y }` in pixels
* `MOUSE_CLICK` — click position on the target element as `{ width, height, offsetX, offsetY }`
* ReDem scores **typing** and **mouse** behaviour separately and uses the **lower** score for the BAS data point. If both scores are equal, the typing category is used.
* Two new BAS categories can be returned: `NATURAL_MOVEMENT` and `UNNATURAL_MOVEMENT`.
* ReDem only uses the **last 300** `MOUSE_MOVEMENT` and **last 300** `MOUSE_CLICK` events per data point. Cap client-side tracking at the same limits.
See the [Behavior Tracking guide](/api-reference/others/behavior-tracking) for a sample tracker and the [Behavioral Analytics Score docs](/knowledge-base/quality-checks/behavior-analysis-score#mouse-movement-and-clicks) for how mouse behaviour is evaluated.
## New Attribute: retentionDays
* POST /v3/addRespondent - You can now send an optional `retentionDays` in the request body. It is the number of days to retain the respondent's data. After the retention period is over the respondent will be deleted from ReDem. The data will be no longer available in our platform. The minimum value is 30 days.
See the [v3 addRespondent](/api-reference/endpoints/v3/addRespondent#body-retention-days) endpoint documentation for the request body.
## New Attribute: referenceSurveyId
* POST /v3/addRespondent - You can now send an optional `referenceSurveyId` in the request body. It is your **external survey identifier** (for example, the id or key of the project in your survey tool). When ReDem **creates** a new survey for the given `surveyName`, that value is stored on the survey for correlation with your own systems. If a survey with that `surveyName` already exists, the stored `referenceSurveyId` is **not** changed by later requests.
See the [v3 addRespondent](/api-reference/endpoints/v3/addRespondent) endpoint documentation for the request body.
## GQS Grid Length Update
You can now send grids with a minimum length of 5 items. Previously the lower limit was 7 items in a grid. The upper limit remains at 50 items.
The pattern check is not available to grids with length 5 or 6. You can send the `patternCheckEnabled` flag for these grids, but it will be silently ignored. Reason being that 5 or 6 items is not sufficient to detect patterns beyond (partial-)straightlining confidently.
## CHS Limit Update
* POST /v3/addRespondent - The maximum number of CHS question/answer pairs has been reduced from `1000` to `300`.
Recommendation for integrators:
* Send only the most relevant `interviewData` entries (up to 300) in a deterministic order.
* If your source survey has more than 300 CHS pairs, trim before sending to keep payloads predictable.
## New Attribute: surveyPlatform
* POST /v3/addRespondent - You can now provide `surveyPlatform` as an optional top-level field in the request body. This value is stored with the respondent and can be used to identify survey-platform-origin traffic in downstream workflows.
Recommended integration approach:
* Send a stable platform identifier (for example, `SightX`, `qualtrics`, `keyingress`) for every respondent created through a survey tool integration.
* Keep naming consistent across environments to avoid fragmented reporting (for example, use `qualtrics` instead of mixing `Qualtrics`, `QUALTRICS`, and `qtrx`).
* If an internal connector is used, send a deterministic connector name (for example, `my-company-ingress`) instead of dynamic values.
See the [v3 addRespondent endpoint documentation](/api-reference/endpoints/v3/addRespondent) for request details.
## New Attribute: Survey Description for CHS
* POST /v3/addRespondent - You can now provide a `surveyDescription` field when submitting CHS (Coherence Score) data points. This optional field provides additional context about the survey's purpose and intent, helping improve the quality and accuracy of the Coherence Score evaluation.
The survey description is especially useful when your survey asks about current events that occurred after the training cutoff date of the large language models, such as recently opened facilities, current political events, product launches, or recent market changes.
See the [Coherence Score documentation](/knowledge-base/quality-checks/coherence-score#survey-description) for more details and examples.
## New Attribute: Respondent Attributes
* POST /v3/addRespondent - You can now add additional attributes to the respondent, such as the panel source or the market of a respondent. These values will be available in the ReDem App and in the result export and can be used for further analysis of your data.
See the [endpoint docs](/api-reference/endpoints/v3/addRespondent#body-respondent-attributes) for further details.
## New Endpoint: Recalculate Respondents
* POST /v3/recalculateRespondents - Recalculate specific quality checks for a list of respondents within a survey.
See the [endpoint docs](/api-reference/endpoints/v3/recalculateRespondents) for request/response details.
## API v3 Released: OES v3 with Enhanced Category Detection and Effort Scale
### 🔥 OES v3 Now Available in ReDem API v3
We're excited to announce the release of ReDem API v3, featuring a major upgrade to the OES (Open-Ended Scoring) quality check system. This release introduces improved category definitions, enhanced scoring accuracy, and a new effort scale metric.
**All version 3 endpoints are now accessible via the /v3 path (e.g., /v3/addRespondent), ensuring a clean separation from previous versions.**
### 🚀 What's new in OES v3?
OES v3 introduces refined category definitions with clearer boundaries to reduce false positives and false negatives. The new categories are:
* **VALID\_ANSWER**: Responses that adequately address the question
* **NO\_ANSWER**: Responses that provide no meaningful information
* **BAD\_LANGUAGE**: Responses containing inappropriate or offensive language
* **GIBBERISH**: Responses that are nonsensical or incoherent
* **OFF\_TOPIC**: Responses that do not address the question asked
* **AI\_SUSPECT**: Responses that appear to be AI-generated
* **WRONG\_LANGUAGE**: Responses in an unexpected language
* **DUPLICATE\_ANSWER**: Responses that duplicate previous answers
* **DUPLICATE\_RESPONDENT**: Responses that duplicate other respondents' answers
### Key improvements in OES v3:
* **Clearer category boundaries**: Refined detection logic reduces false positives and false negatives across all categories, providing more accurate quality assessments.
* **Enhanced scoring system**: OES v3 introduces an effort scale (LOW, MEDIUM, HIGH) that factors into the final quality score. For VALID\_ANSWER and NO\_ANSWER categories, the effort level directly influences the score calculation, providing more nuanced quality metrics.
### 🔄 Backward Compatibility: How do v1 and v2 work?
Version 1 and version 2 endpoints remain available but use the legacy OES v2 classification system, which has less precise category boundaries and does not include the effort scale metric.
### ⛔ Deprecation Notice
* **API v1**: Will be deprecated within 7 days of this notice. Please migrate to v2 or v3 immediately.
* **API v2**: Will be deprecated on January 15th, 2026. We strongly encourage all teams and integrators to migrate to v3 endpoints before that date to take advantage of the improved OES accuracy and scoring system.
We recommend upgrading to API v3 at your earliest convenience to benefit from the enhanced OES v3 quality checks and improved scoring accuracy.
**Important:** You cannot upgrade the API version for a survey that is currently running. Each survey is permanently tied to the API version it was created with. To use a newer API version, you must create a new survey with the updated endpoints. See the [Migration Guide](/api-reference/others/migration-guide) for step-by-step instructions.
## New Endpoint: Update Respondents Excluded Status
* POST /v2/updateRespondentsExcludedStatus - Update the exclusion status of one or more respondents within a specific survey.
See the [endpoint docs](/api-reference/endpoints/v2/updateRespondentsExcludedStatus) for request/response details.
## New Endpoints: Delete Surveys and Delete Respondents
* POST /v2/deleteRespondents - Delete one or more respondents from a survey and clean up related data.
* POST /v2/deleteSurveys - Delete one or more surveys and all associated data.
See the endpoint docs for request/response details.
## API v2 Released: Consistent CHS Question IDs Supported
### 🔥 New Versioning Layer Introduced Across the ReDem API
We’re excited to introduce ReDem API v2 — a structured versioning layer that enables long-term enhancements while preserving backward compatibility with current integrations.
**All version 2 endpoints are now accessible via the /v2 path (e.g., /v2/addRespondent), ensuring a clean separation from legacy endpoints.**
### 🚀 What's new in v2?
In version 2, each CHS interview entry must explicitly include the associated questionId.
```javascript theme={null}
{
"questionId": "Q1"
"question": "What type of accommodation did you stay in?",
"answer": "Hotel",
}
```
By making questionId a required field in CHS interviewData, you now have:
* Consistent identifiers across all respondents
* Clear mapping between survey questions and CHS results
### 🔄 Backward Compatibility: How does v1 work?
In version 1, since questionId is not part of the schema:
* The system auto-generates questionIds like Q1, Q2, etc. uniquely for each respondent, making cross-respondent comparisons unreliable.
This means Q1 for one respondent may refer to a completely different question than Q1 for another.
### ⛔ Deprecation Notice: API v1
Version 1 of the ReDem API will be **deprecated starting 16th September 2025**.
We strongly encourage all teams and integrators to migrate to v2 endpoints before that date to avoid any disruption.
**Important:** You cannot upgrade the API version for a survey that is currently running. Each survey is permanently tied to the API version it was created with. To use a newer API version, you must create a new survey with the updated endpoints. See the [Migration Guide](/api-reference/others/migration-guide) for step-by-step instructions.
## API endpoint updates
The POST /addRespondent endpoint has been updated to rename parameters in the cleaning settings, changing from **camelCase to UPPERCASE\_UNDERSCORE** formatting.
The following is an example of the new cleaning settings object:
```javascript theme={null}
"redemScore": 60,
"OES": {
"activate": true,
"score": 60,
"minDataPoints":2,
"categories": {
"GENERIC_ANSWER": {"activate": true, "minDataPoints":2},
"NO_INFORMATION": {"activate": true, "minDataPoints":3},
// ... other categories ...
}
},
"CHS": {"activate": true,"score": 50},
"GQS": {"activate": true,"score": 40, "minDataPoints":2},
"TS": {"activate": true,"score": 20},
"BAS": {
"activate": true,
"score": 60,
"minDataPoints":2,
"categories": {
"UNNATURAL_TYPING": {"activate": true, "minDataPoints":2},
"COPY_AND_PASTE": {"activate": true, "minDataPoints":2},
}
}
```
## API endpoint updates
The following API endpoint changes have been implemented to improve consistency and standardization:
POST /respondent/add → POST /addRespondent
* The `interactionData` field within `dataPoints` → `qualityCheck: BAS` has been modified to support additional interaction types. Now, it has been expanded to include both `KEYSTROKE` and `COPY_AND_PASTE` interactions, enhancing tracking capabilities.
* Enhanced the **request body cleaning settings** by allowing **activate/deactivate** options for each quality check and enhanced **cleaning settings** by introducing **Behavioral Analytics Score (BAS)** along with its categories.
* Renamed the **Fake Answer** category in **Open-Ended Score (OES)** to **AI-Generated Answer**.
* We have **enhanced** the response structure by adding a field to retrieve **Behavioral Analytics Score (BAS)** results.
GET /respondent/getRespondent → POST /getRespondent
* Previously with `GET` request we pass the `surveyName` and `respondentId` as a path parameters. Now we pass it in the request body.
GET /respondent/getAllRespondents → POST /getAllRespondents
* Previously with `GET` request we pass the `surveyName` as a path parameter. Now we pass it in the request body.
GET /survey/stop → POST /stopSurvey
* Previously with `GET` request we pass the `surveyName` as a path parameter. Now we pass it in the request body.
GET /respondent/estimation → POST /creditCalculation
* Introduced a new variable, **`BASDataPoints`**, to specify the number of BAS data points required for credit calculation when evaluating a respondent.
* Rename the variable **`CHSInterviews`** to **`CHSAnswers`** in the request body.
* We have introduced a new response structure for the `POST /creditCalculation` endpoint, improving clarity by renaming several fields for better self-explanatory representation.
## Enhanced the quality checks by introducing Behavioral Analytics Score (BAS)
We have enhanced the quality checks by introducing **Behavioral Analytics Score (BAS)** to evaluate the respondent's behavior and provide a score and categories based on the behavior.
* Removed the **Copy-Paste** category from **Open-Ended Score (OES)** and incorporated it under **Behavioral Analytics Score (BAS)**.
## Streamlined the API response in error cases
When a request fails due to invalid input or other errors, the all API returns a **400 Bad Request** status code. The response includes a descriptive `message` explaining the issue and an `error` object containing additional details to aid in diagnosing and resolving the problem.
## **ReDem 3.0 API - Initial Release**
This initial release of the **ReDem API** empowers you to seamlessly integrate ReDem into your workflows and applications. As the backbone of our platform, the API provides direct access to all ReDem features, from real-time data insights to smooth integration with existing systems.
Since the **ReDem Application** is entirely powered by this API, anything you can do in the app, you can also achieve programmatically—without limitations, unlocking endless possibilities!
### 🎉 Key Endpoints
* POST /respondent/add - Add a respondent to a survey.
* GET /respondent/getRespondent - Get a respondent's details.
* GET /respondent/getAllRespondents - Get all respondents for a survey.
* GET /survey/stop - Stop a survey.
* GET /respondent/estimation - Get a respondent's estimation.