POST
/
addRespondent
curl --request POST \
  --url https://api.redem.io/addRespondent \
  --header 'Content-Type: application/json' \
  --header 'api-key: <api-key>' \
  --data '{
  "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",
        "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
    },
    {
      "qualityCheck": "BAS",
      "dataPointId": "interactionsQ1",
      "interactionData": [
        {
          "interactionType": "KEYSTROKE",
          "value": "W",
          "timestamp": "2024-12-01T06:22:59.809Z"
        },
        {
          "interactionType": "KEYSTROKE",
          "value": "We",
          "timestamp": "2024-12-01T06:22:59.833Z"
        },
        {
          "interactionType": "KEYSTROKE",
          "value": "We ",
          "timestamp": "2024-12-01T06:22:59.909Z"
        },
        {
          "interactionType": "KEYSTROKE",
          "value": "We w",
          "timestamp": "2024-12-01T06:22:59.962Z"
        },
        {
          "interactionType": "KEYSTROKE",
          "value": "We we",
          "timestamp": "2024-12-01T06:23:00.024Z"
        },
        {
          "interactionType": "KEYSTROKE",
          "value": "We were",
          "timestamp": "2024-12-01T06:23:00.086Z"
        },
        {
          "interactionType": "KEYSTROKE",
          "value": "We were ",
          "timestamp": "2024-12-01T06:23:00.148Z"
        },
        {
          "interactionType": "KEYSTROKE",
          "value": "We were a",
          "timestamp": "2024-12-01T06:23:00.210Z"
        },
        {
          "interactionType": "KEYSTROKE",
          "value": "We were at",
          "timestamp": "2024-12-01T06:23:00.272Z"
        }
      ]
    }
  ],
  "activateCleaning": true,
  "cleaningSettings": {
    "redemScore": 60,
    "OES": {
      "activate": true,
      "score": 40,
      "minDataPoints": 2,
      "categories": {
        "GENERIC_ANSWER": {
          "activate": false,
          "minDataPoints": 2
        },
        "NO_INFORMATION": {
          "activate": false,
          "minDataPoints": 2
        },
        "BAD_LANGUAGE": {
          "activate": true,
          "minDataPoints": 2
        },
        "NONSENSE": {
          "activate": true,
          "minDataPoints": 2
        },
        "DUPLICATE_ANSWER": {
          "activate": false,
          "minDataPoints": 1
        },
        "DUPLICATE_RESPONDENT": {
          "activate": false,
          "minDataPoints": 1
        },
        "WRONG_TOPIC": {
          "activate": true,
          "minDataPoints": 2
        },
        "WRONG_LANGUAGE": {
          "activate": true,
          "minDataPoints": 2
        },
        "AI_GENERATED_ANSWER": {
          "activate": true,
          "minDataPoints": 2
        }
      }
    },
    "CHS": {
      "activate": true,
      "score": 20
    },
    "GQS": {
      "activate": true,
      "score": 10,
      "minDataPoints": 2
    },
    "TS": {
      "activate": true,
      "score": 20
    },
    "BAS": {
      "activate": true,
      "score": 10,
      "minDataPoints": 2,
      "categories": {
        "UNNATURAL_TYPING": {
          "activate": true,
          "minDataPoints": 2
        },
        "COPY_AND_PASTE": {
          "activate": true,
          "minDataPoints": 2
        }
      }
    }
  },
  "synchronousResponse": true
}'
{
  "success": true,
  "message": "Respondent Evaluated successfully",
  "results": {
    "respondentId": "RESP497770",
    "status": "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 ...",
          "incoherentQuestions": [
            "Q1",
            "Q2"
          ]
        },
        {
          "qualityCheck": "GQS",
          "score": 85
        },
        {
          "qualityCheck": "TS",
          "score": 70
        },
        {
          "qualityCheck": "BAS",
          "score": 75
        }
      ],
      "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
        },
        {
          "qualityCheck": "BAS",
          "dataPointId": "interactionsQ1",
          "score": 75,
          "category": "NATURAL_TYPING"
        }
      ]
    }
  }
}

Authorizations

api-key
string
header
required

Body

application/json

Request body for adding a new respondent

respondentId
string
required

The unique identifier for a respondent, making it easy to distinguish them from others in the survey. The respondent ID can be freely chosen for flexibility.

💡 Important: The system utilizes this ID, combined with the survey name, to uniquely identify the respondent within a survey. This allows the same respondent ID to participate in multiple surveys without conflicts.

If the combination of survey name and respondent ID already exists, an error will be displayed.

🔦 Tip: You can use the same respondent ID as in the survey tool to easily identify the respondent later.

Example:

"RESP497770"

surveyName
string
required

The name of the survery, which helps identify different surveys. The survey name can be assigned freely.

💡Important: If the survey name already exists, the system will add the respondent under the appropriate survey. If the survey name is new, a new survey will be created, and the respondent will be added to the new survey.

⭕ Note: Each survey identifier must be unique for a given user.

🔦 Tip: you can simply make survey name unique by adding a timestamp. As Example: Global Vacation Insights - 1709040600

dataPoints
object[]
required

An array of data points used for quality checks on each respondent. For the Coherence Score (CHS), only a single data point is allowed, which must contain the entire interview.

🧪 Validations:

  • A maximum of 10 OES data points are allowed per respondent.
  • A maximum of 100 TS data points are allowed per respondent.
  • A maximum of 20 GQS data points are allowed per respondent.
  • A maximum of 1 with 1000 question/answer pairs CHS data point is allowed per respondent.

Exceeding these limits will trigger validation errors. Ensure that the number of data points per respondent remains within the allowed limits.

An array of data points used to perform quality checks on each respondent.

activateCleaning
boolean
default:false

Indicates whether cleaning should be applied to the respondent.

💡Important: To remove bad respondents automatically, ensure this variable is set to true.

When cleaning is enabled, the response will include the variable isExcluded, which indicates whether the respondent has been excluded based on the applied criteria.

Example:

true

cleaningSettings
object

Cleaning settings define the rules for determining whether a respondent should be excluded and marked as low quality. If a respondent’s scores fall below the threshold, they will be excluded and flagged as low quality.

💡Important: If no custom cleaning settings are defined and cleaning is enabled, the system will apply ReDem’s recommended cleaning settings. You can view the recommended settings here: ReDem Recommended Cleaning Settings

For more details on how cleaning works, refer to the Data Cleaning section.

synchronousResponse
boolean
default:true

Indicates whether the response should be processed synchronously.

  • Set to true if you need an immediate response.
  • Set to false if you don’t need to wait; you can later check the respondent’s status using the Get Respondent Status endpoint.
Example:

true

Response

200
application/json
When a request is successfully processed, the API returns a 200 OK status code along with the expected data. The structure of the response depends on the synchronousResponse parameter provided in the request body, which determines whether the response is synchronous (results of the respondent evaluation are returned immediately) or asynchronous (a respondent is created and the results of the respondent evaluation are available later through a separate endpoint).

Synchronous Response

This response mode is triggered when synchronousResponse is set to true.

In this mode, the system generates a detailed response containing all quality parameters of the respondent. The request will wait (await) until the full response is ready before proceeding.

success
boolean

A variable indicating whether the operation was successful.

message
string

A variable that human-readable message providing additional context or confirmation of the requested action.

results
object

This variable includes all quality parameters associated with a respondent.