curl --request POST \
--url https://api.redem.io/v3/qualityCheckSuggestions \
--header 'Content-Type: application/json' \
--header 'api-key: <api-key>' \
--data '
{
"surveyPlatform": "SightX",
"allInclusive": true,
"surveyStructure": [
{
"questionId": "Q1",
"questionType": "OpenEnd",
"question": "Why did you choose this product?"
},
{
"questionId": "Q2",
"questionType": "Grid",
"question": "Please rate the following brands.",
"items": [
"Brand A",
"Brand B",
"Brand C",
"Brand D",
"Brand E"
],
"answerOptions": [
"Very poor",
"Poor",
"Neutral",
"Good",
"Excellent"
],
"isMultiSelect": false
},
{
"questionId": "Q3",
"questionType": "Select",
"question": "Which age group are you in?",
"answerOptions": [
"18-24",
"25-34",
"35-44",
"45-54",
"55+"
],
"isMultiSelect": false
}
]
}
'import requests
url = "https://api.redem.io/v3/qualityCheckSuggestions"
payload = {
"surveyPlatform": "SightX",
"allInclusive": True,
"surveyStructure": [
{
"questionId": "Q1",
"questionType": "OpenEnd",
"question": "Why did you choose this product?"
},
{
"questionId": "Q2",
"questionType": "Grid",
"question": "Please rate the following brands.",
"items": ["Brand A", "Brand B", "Brand C", "Brand D", "Brand E"],
"answerOptions": ["Very poor", "Poor", "Neutral", "Good", "Excellent"],
"isMultiSelect": False
},
{
"questionId": "Q3",
"questionType": "Select",
"question": "Which age group are you in?",
"answerOptions": ["18-24", "25-34", "35-44", "45-54", "55+"],
"isMultiSelect": False
}
]
}
headers = {
"api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
surveyPlatform: 'SightX',
allInclusive: true,
surveyStructure: [
{
questionId: 'Q1',
questionType: 'OpenEnd',
question: 'Why did you choose this product?'
},
{
questionId: 'Q2',
questionType: 'Grid',
question: 'Please rate the following brands.',
items: ['Brand A', 'Brand B', 'Brand C', 'Brand D', 'Brand E'],
answerOptions: ['Very poor', 'Poor', 'Neutral', 'Good', 'Excellent'],
isMultiSelect: false
},
{
questionId: 'Q3',
questionType: 'Select',
question: 'Which age group are you in?',
answerOptions: ['18-24', '25-34', '35-44', '45-54', '55+'],
isMultiSelect: false
}
]
})
};
fetch('https://api.redem.io/v3/qualityCheckSuggestions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.redem.io/v3/qualityCheckSuggestions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'surveyPlatform' => 'SightX',
'allInclusive' => true,
'surveyStructure' => [
[
'questionId' => 'Q1',
'questionType' => 'OpenEnd',
'question' => 'Why did you choose this product?'
],
[
'questionId' => 'Q2',
'questionType' => 'Grid',
'question' => 'Please rate the following brands.',
'items' => [
'Brand A',
'Brand B',
'Brand C',
'Brand D',
'Brand E'
],
'answerOptions' => [
'Very poor',
'Poor',
'Neutral',
'Good',
'Excellent'
],
'isMultiSelect' => false
],
[
'questionId' => 'Q3',
'questionType' => 'Select',
'question' => 'Which age group are you in?',
'answerOptions' => [
'18-24',
'25-34',
'35-44',
'45-54',
'55+'
],
'isMultiSelect' => false
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.redem.io/v3/qualityCheckSuggestions"
payload := strings.NewReader("{\n \"surveyPlatform\": \"SightX\",\n \"allInclusive\": true,\n \"surveyStructure\": [\n {\n \"questionId\": \"Q1\",\n \"questionType\": \"OpenEnd\",\n \"question\": \"Why did you choose this product?\"\n },\n {\n \"questionId\": \"Q2\",\n \"questionType\": \"Grid\",\n \"question\": \"Please rate the following brands.\",\n \"items\": [\n \"Brand A\",\n \"Brand B\",\n \"Brand C\",\n \"Brand D\",\n \"Brand E\"\n ],\n \"answerOptions\": [\n \"Very poor\",\n \"Poor\",\n \"Neutral\",\n \"Good\",\n \"Excellent\"\n ],\n \"isMultiSelect\": false\n },\n {\n \"questionId\": \"Q3\",\n \"questionType\": \"Select\",\n \"question\": \"Which age group are you in?\",\n \"answerOptions\": [\n \"18-24\",\n \"25-34\",\n \"35-44\",\n \"45-54\",\n \"55+\"\n ],\n \"isMultiSelect\": false\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.redem.io/v3/qualityCheckSuggestions")
.header("api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"surveyPlatform\": \"SightX\",\n \"allInclusive\": true,\n \"surveyStructure\": [\n {\n \"questionId\": \"Q1\",\n \"questionType\": \"OpenEnd\",\n \"question\": \"Why did you choose this product?\"\n },\n {\n \"questionId\": \"Q2\",\n \"questionType\": \"Grid\",\n \"question\": \"Please rate the following brands.\",\n \"items\": [\n \"Brand A\",\n \"Brand B\",\n \"Brand C\",\n \"Brand D\",\n \"Brand E\"\n ],\n \"answerOptions\": [\n \"Very poor\",\n \"Poor\",\n \"Neutral\",\n \"Good\",\n \"Excellent\"\n ],\n \"isMultiSelect\": false\n },\n {\n \"questionId\": \"Q3\",\n \"questionType\": \"Select\",\n \"question\": \"Which age group are you in?\",\n \"answerOptions\": [\n \"18-24\",\n \"25-34\",\n \"35-44\",\n \"45-54\",\n \"55+\"\n ],\n \"isMultiSelect\": false\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.redem.io/v3/qualityCheckSuggestions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"surveyPlatform\": \"SightX\",\n \"allInclusive\": true,\n \"surveyStructure\": [\n {\n \"questionId\": \"Q1\",\n \"questionType\": \"OpenEnd\",\n \"question\": \"Why did you choose this product?\"\n },\n {\n \"questionId\": \"Q2\",\n \"questionType\": \"Grid\",\n \"question\": \"Please rate the following brands.\",\n \"items\": [\n \"Brand A\",\n \"Brand B\",\n \"Brand C\",\n \"Brand D\",\n \"Brand E\"\n ],\n \"answerOptions\": [\n \"Very poor\",\n \"Poor\",\n \"Neutral\",\n \"Good\",\n \"Excellent\"\n ],\n \"isMultiSelect\": false\n },\n {\n \"questionId\": \"Q3\",\n \"questionType\": \"Select\",\n \"question\": \"Which age group are you in?\",\n \"answerOptions\": [\n \"18-24\",\n \"25-34\",\n \"35-44\",\n \"45-54\",\n \"55+\"\n ],\n \"isMultiSelect\": false\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Quality check suggestions generated",
"results": {
"OES": [
{
"questionId": "Q1",
"keywords": [
"price",
"quality",
"brand"
],
"enableDuplicateCheck": true
}
],
"GQS": [
{
"questionId": "Q2",
"enablePatternCheck": true
}
],
"CHS": {
"questionIds": [
"Q3",
"Q2"
],
"surveyDescription": "A survey about brand preference and product choice among shoppers."
},
"BAS": [
{
"questionId": "Q1",
"keystrokes": true,
"mouse": true
}
],
"DES": [
{
"type": "ageRange",
"questionId": "Q3"
}
],
"cleaningSettings": {
"redemScore": 60,
"OES": {
"activate": true,
"score": 40,
"minDataPoints": 2
},
"CHS": {
"activate": true,
"score": 30
},
"GQS": {
"activate": true,
"score": 20,
"minDataPoints": 2
},
"TS": {
"activate": true,
"score": 30
},
"BAS": {
"activate": true,
"score": 20,
"minDataPoints": 2
},
"DES": {
"activate": true,
"score": 40
}
}
}
}{
"success": false,
"message": "Validation Failed",
"errors": {}
}Quality Check Suggestions
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, BAS, and DES.
Use the returned question IDs, keywords, and cleaning settings when calling POST /v3/addRespondent.
TS is not suggested by this endpoint. Pass qualityChecks to limit which checks are suggested.
curl --request POST \
--url https://api.redem.io/v3/qualityCheckSuggestions \
--header 'Content-Type: application/json' \
--header 'api-key: <api-key>' \
--data '
{
"surveyPlatform": "SightX",
"allInclusive": true,
"surveyStructure": [
{
"questionId": "Q1",
"questionType": "OpenEnd",
"question": "Why did you choose this product?"
},
{
"questionId": "Q2",
"questionType": "Grid",
"question": "Please rate the following brands.",
"items": [
"Brand A",
"Brand B",
"Brand C",
"Brand D",
"Brand E"
],
"answerOptions": [
"Very poor",
"Poor",
"Neutral",
"Good",
"Excellent"
],
"isMultiSelect": false
},
{
"questionId": "Q3",
"questionType": "Select",
"question": "Which age group are you in?",
"answerOptions": [
"18-24",
"25-34",
"35-44",
"45-54",
"55+"
],
"isMultiSelect": false
}
]
}
'import requests
url = "https://api.redem.io/v3/qualityCheckSuggestions"
payload = {
"surveyPlatform": "SightX",
"allInclusive": True,
"surveyStructure": [
{
"questionId": "Q1",
"questionType": "OpenEnd",
"question": "Why did you choose this product?"
},
{
"questionId": "Q2",
"questionType": "Grid",
"question": "Please rate the following brands.",
"items": ["Brand A", "Brand B", "Brand C", "Brand D", "Brand E"],
"answerOptions": ["Very poor", "Poor", "Neutral", "Good", "Excellent"],
"isMultiSelect": False
},
{
"questionId": "Q3",
"questionType": "Select",
"question": "Which age group are you in?",
"answerOptions": ["18-24", "25-34", "35-44", "45-54", "55+"],
"isMultiSelect": False
}
]
}
headers = {
"api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
surveyPlatform: 'SightX',
allInclusive: true,
surveyStructure: [
{
questionId: 'Q1',
questionType: 'OpenEnd',
question: 'Why did you choose this product?'
},
{
questionId: 'Q2',
questionType: 'Grid',
question: 'Please rate the following brands.',
items: ['Brand A', 'Brand B', 'Brand C', 'Brand D', 'Brand E'],
answerOptions: ['Very poor', 'Poor', 'Neutral', 'Good', 'Excellent'],
isMultiSelect: false
},
{
questionId: 'Q3',
questionType: 'Select',
question: 'Which age group are you in?',
answerOptions: ['18-24', '25-34', '35-44', '45-54', '55+'],
isMultiSelect: false
}
]
})
};
fetch('https://api.redem.io/v3/qualityCheckSuggestions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.redem.io/v3/qualityCheckSuggestions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'surveyPlatform' => 'SightX',
'allInclusive' => true,
'surveyStructure' => [
[
'questionId' => 'Q1',
'questionType' => 'OpenEnd',
'question' => 'Why did you choose this product?'
],
[
'questionId' => 'Q2',
'questionType' => 'Grid',
'question' => 'Please rate the following brands.',
'items' => [
'Brand A',
'Brand B',
'Brand C',
'Brand D',
'Brand E'
],
'answerOptions' => [
'Very poor',
'Poor',
'Neutral',
'Good',
'Excellent'
],
'isMultiSelect' => false
],
[
'questionId' => 'Q3',
'questionType' => 'Select',
'question' => 'Which age group are you in?',
'answerOptions' => [
'18-24',
'25-34',
'35-44',
'45-54',
'55+'
],
'isMultiSelect' => false
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.redem.io/v3/qualityCheckSuggestions"
payload := strings.NewReader("{\n \"surveyPlatform\": \"SightX\",\n \"allInclusive\": true,\n \"surveyStructure\": [\n {\n \"questionId\": \"Q1\",\n \"questionType\": \"OpenEnd\",\n \"question\": \"Why did you choose this product?\"\n },\n {\n \"questionId\": \"Q2\",\n \"questionType\": \"Grid\",\n \"question\": \"Please rate the following brands.\",\n \"items\": [\n \"Brand A\",\n \"Brand B\",\n \"Brand C\",\n \"Brand D\",\n \"Brand E\"\n ],\n \"answerOptions\": [\n \"Very poor\",\n \"Poor\",\n \"Neutral\",\n \"Good\",\n \"Excellent\"\n ],\n \"isMultiSelect\": false\n },\n {\n \"questionId\": \"Q3\",\n \"questionType\": \"Select\",\n \"question\": \"Which age group are you in?\",\n \"answerOptions\": [\n \"18-24\",\n \"25-34\",\n \"35-44\",\n \"45-54\",\n \"55+\"\n ],\n \"isMultiSelect\": false\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.redem.io/v3/qualityCheckSuggestions")
.header("api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"surveyPlatform\": \"SightX\",\n \"allInclusive\": true,\n \"surveyStructure\": [\n {\n \"questionId\": \"Q1\",\n \"questionType\": \"OpenEnd\",\n \"question\": \"Why did you choose this product?\"\n },\n {\n \"questionId\": \"Q2\",\n \"questionType\": \"Grid\",\n \"question\": \"Please rate the following brands.\",\n \"items\": [\n \"Brand A\",\n \"Brand B\",\n \"Brand C\",\n \"Brand D\",\n \"Brand E\"\n ],\n \"answerOptions\": [\n \"Very poor\",\n \"Poor\",\n \"Neutral\",\n \"Good\",\n \"Excellent\"\n ],\n \"isMultiSelect\": false\n },\n {\n \"questionId\": \"Q3\",\n \"questionType\": \"Select\",\n \"question\": \"Which age group are you in?\",\n \"answerOptions\": [\n \"18-24\",\n \"25-34\",\n \"35-44\",\n \"45-54\",\n \"55+\"\n ],\n \"isMultiSelect\": false\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.redem.io/v3/qualityCheckSuggestions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"surveyPlatform\": \"SightX\",\n \"allInclusive\": true,\n \"surveyStructure\": [\n {\n \"questionId\": \"Q1\",\n \"questionType\": \"OpenEnd\",\n \"question\": \"Why did you choose this product?\"\n },\n {\n \"questionId\": \"Q2\",\n \"questionType\": \"Grid\",\n \"question\": \"Please rate the following brands.\",\n \"items\": [\n \"Brand A\",\n \"Brand B\",\n \"Brand C\",\n \"Brand D\",\n \"Brand E\"\n ],\n \"answerOptions\": [\n \"Very poor\",\n \"Poor\",\n \"Neutral\",\n \"Good\",\n \"Excellent\"\n ],\n \"isMultiSelect\": false\n },\n {\n \"questionId\": \"Q3\",\n \"questionType\": \"Select\",\n \"question\": \"Which age group are you in?\",\n \"answerOptions\": [\n \"18-24\",\n \"25-34\",\n \"35-44\",\n \"45-54\",\n \"55+\"\n ],\n \"isMultiSelect\": false\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Quality check suggestions generated",
"results": {
"OES": [
{
"questionId": "Q1",
"keywords": [
"price",
"quality",
"brand"
],
"enableDuplicateCheck": true
}
],
"GQS": [
{
"questionId": "Q2",
"enablePatternCheck": true
}
],
"CHS": {
"questionIds": [
"Q3",
"Q2"
],
"surveyDescription": "A survey about brand preference and product choice among shoppers."
},
"BAS": [
{
"questionId": "Q1",
"keystrokes": true,
"mouse": true
}
],
"DES": [
{
"type": "ageRange",
"questionId": "Q3"
}
],
"cleaningSettings": {
"redemScore": 60,
"OES": {
"activate": true,
"score": 40,
"minDataPoints": 2
},
"CHS": {
"activate": true,
"score": 30
},
"GQS": {
"activate": true,
"score": 20,
"minDataPoints": 2
},
"TS": {
"activate": true,
"score": 30
},
"BAS": {
"activate": true,
"score": 20,
"minDataPoints": 2
},
"DES": {
"activate": true,
"score": 40
}
}
}
}{
"success": false,
"message": "Validation Failed",
"errors": {}
}- 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)
- Suggested DES demographic mappings (
type+questionId) when suitable demographics are present - Recommended default cleaning settings for API v3
- TS is not suggested here; configure it separately in your integration.
- Optional
qualityCheckslimits which checks are suggested (OES,GQS,CHS,BAS,DES). Omit it to suggest all of them. - Cap suggestion volume with
allInclusive(defaulttrue) to match all-inclusive plan limits.
Authorizations
Body
Request body for generating quality-check suggestions for an API project setup.
🔒 Authentication: This endpoint is only accessible via a PRIVATE API key.
Questionnaire structure used to suggest quality checks. Maximum 500 questions. Each item is a discriminated union on questionType (OpenEnd, Grid, or Select). Each questionId must be unique.
500A question from your survey platform questionnaire. Discriminated by questionType (OpenEnd | Grid | Select) — each variant has its own required and optional fields. questionId values must be unique across surveyStructure.
- OpenEnd
- Grid
- Select
Show child attributes
Show child attributes
Optional survey platform identifier (for example SightX, qualtrics). Stored for logging and support only; it does not change suggestions.
"SightX"
When true (default), suggestion counts are capped to all-inclusive plan limits (OES 5, GQS 20, CHS 100 question slots). When false, higher API maxima are used (OES 30, GQS 20, CHS 300 slots).
Optional subset of quality checks to suggest. When omitted, suggestions run for OES, GQS, CHS, BAS, and DES.
1OES, GQS, CHS, BAS, DES ["OES", "GQS", "CHS", "BAS", "DES"]

