> ## Documentation Index
> Fetch the complete documentation index at: https://docs.repdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# REVIEW (GET)

Text analysis of an open-ended survey response. Returns a composite quality score plus copy/paste, profanity, engagement, language, and LLM-detection signals.

`q_id`, `text`, `sn_ud`, `sy_nr`, and `question` are required. The GET method caps the number of characters that can be sent — use [REVIEW (POST)](https://docs.repdata.com/research-defender/endpoints/post-api-v4-respondents-review-publishable_key) for longer text.

For full parameter definitions and the copy/paste JS library, see the [REVIEW guide](https://docs.repdata.com/research-defender/guides/03-review).


## OpenAPI

````yaml GET /api/v4/respondents/review/{publishable_key}
openapi: 3.0.3
info:
  title: Research Defender API
  version: 1.0.0
  description: >-
    Research Defender protects survey data quality through digital
    fingerprinting, duplication detection, and open-end text analysis. This
    reference covers the **SEARCH**, **REVIEW**, and **PREDUPE** products.


    > ACTIVITY and VERIFY are hosted on a separate domain (resdefio.com) and are
    documented separately.


    ## Authentication


    Client-side calls (SEARCH, REVIEW, GETTOKEN) use your **publishable key** in
    the URL path. Server-side lookups (destination_platforms) use your **private
    key**. For enhanced protection, use V3 server-to-server tokens (GETTOKEN) or
    V4 Hashed Validation.


    ## Environments


    Production: `https://prod.rtymgt.com`  

    Staging: `https://staging.rtymgt.com`
servers:
  - url: https://prod.rtymgt.com
    description: Production
  - url: https://staging.rtymgt.com
    description: Staging
security: []
paths:
  /api/v4/respondents/review/{publishable_key}:
    get:
      summary: REVIEW (GET)
      operationId: Review_ReviewGet
      parameters:
        - name: publishable_key
          in: path
          required: true
          description: Your Research Defender publishable key (client-side).
          schema:
            type: string
          example: 9fc32a73-8165-4dd4-ae19-458bed3c8db5
        - name: q_id
          in: query
          required: true
          description: Identifier for each survey question.
          schema:
            type: string
          example: '3333'
        - name: text
          in: query
          required: true
          description: Text entered by the respondent.
          schema:
            type: string
          example: I am very satisfied because the features meet all my needs.
        - name: sn_ud
          in: query
          required: true
          description: Unique session identifier (GUID recommended).
          schema:
            type: string
          example: T_test
        - name: sy_nr
          in: query
          required: true
          description: Unique identifier for the client survey.
          schema:
            type: string
          example: test
        - name: question
          in: query
          required: true
          description: The survey question, which drives contextual analysis.
          schema:
            type: string
          example: How satisfied are you with the current product features?
        - name: c_text
          in: query
          required: false
          description: Pasted text from the JS library, base64-encoded.
          schema:
            type: string
        - name: s_text_length
          in: query
          required: false
          description: Minimum number of characters needed to run the similarity check.
          schema:
            type: string
          example: '50'
        - name: t_page_load
          in: query
          required: false
          description: Page-load time (base64-encoded).
          schema:
            type: string
        - name: t_text_typed
          in: query
          required: false
          description: Time when typing started (base64-encoded).
          schema:
            type: string
        - name: t_submit
          in: query
          required: false
          description: Time on submit (base64-encoded).
          schema:
            type: string
      responses:
        '200':
          description: Open-end text analysis result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  model:
                    type: object
                    properties:
                      rw_context_risk_score:
                        type: integer
                      rw_context_risk_level:
                        type: string
                      rw_context_description:
                        type: string
                      rw_llm_risk_score:
                        type: integer
                      rw_llm_risk_level:
                        type: string
                      rw_llm_description:
                        type: string
                        description: Whether the response appears LLM-generated.
                  input:
                    type: object
                    properties:
                      sy_nr:
                        type: string
                      q_id:
                        type: string
                      question:
                        type: string
                      sn_ud:
                        type: string
                      text:
                        type: string
                      similarity_text_length:
                        type: string
                  score:
                    type: object
                    properties:
                      composite_score:
                        type: integer
                        description: Primary measure of response quality.
                      similarity_text:
                        type: integer
                        description: 1 if a duplicate open-end is detected.
                      profanity_check:
                        type: integer
                        description: 1 if profanity detected, else 0.
                      engagement_score:
                        type: number
                        description: >-
                          Response length relative to others for the question
                          ID.
                      language_detected:
                        type: string
                      language_detected_score:
                        type: number
                      pasted_response_score:
                        type: number
                      page_view_time:
                        type: number
                      typed_response_time:
                        type: number
                      profanity_check_score:
                        type: number
                      pasted_response:
                        type: integer
                      garbage_words:
                        type: integer
                      garbage_words_score:
                        type: integer
              example:
                model:
                  rw_context_risk_score: 12
                  rw_context_risk_level: low
                  rw_context_description: Yes, contextually correct
                  rw_llm_risk_score: 1
                  rw_llm_risk_level: low
                  rw_llm_description: LLM not detected
                input:
                  sy_nr: test
                  q_id: '3333'
                  question: How satisfied are you with the current product features?
                  sn_ud: T_test
                  text: I am very satisfied because the features meet all my needs.
                  similarity_text_length: '50'
                score:
                  garbage_words_score: 0
                  pasted_response_score: 0
                  typed_response_time: 0
                  page_view_time: 0
                  profanity_check_score: 0
                  composite_score: 0
                  garbage_words: 0
                  language_detected_score: 0.01
                  engagement_score: 1
                  similarity_text: 1
                  profanity_check: 0
                  language_detected: English
                  pasted_response: 0

````