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

# Post External Screener Answers

> Post a participant's answers from your own screener — external-screener organizations only.
Rows upsert idempotently per questionId and must reference the project's declared `externalQuestions`.
The application reads as submitted once every declared question has an answer, or earlier when the payload
sets `complete: true`; the overall verdict is derived from the per-row `qualifies` flags.
Post the answers BEFORE redirecting the participant back to the Respondent apply page they came from.
Corrections are just another POST with the corrected rows.



## OpenAPI

````yaml post /v1/projects/{projectId}/screener-responses/{screenerResponseId}/external-screener-answers
openapi: 3.0.0
info:
  title: Partner API
  description: Public API for partner integrations
  version: '1.0'
  contact: {}
servers:
  - url: https://api-staging.respondent.io
security: []
tags: []
paths:
  /v1/projects/{projectId}/screener-responses/{screenerResponseId}/external-screener-answers:
    post:
      tags:
        - screener-responses
      summary: Post external screener answers
      description: >-
        Post a participant's answers from your own screener — external-screener
        organizations only.

        Rows upsert idempotently per questionId and must reference the project's
        declared `externalQuestions`.

        The application reads as submitted once every declared question has an
        answer, or earlier when the payload

        sets `complete: true`; the overall verdict is derived from the per-row
        `qualifies` flags.

        Post the answers BEFORE redirecting the participant back to the
        Respondent apply page they came from.

        Corrections are just another POST with the corrected rows.
      operationId: ScreenerResponsesController_ingestExternalScreenerAnswers
      parameters:
        - name: x-api-key
          in: header
          required: true
          schema:
            type: string
        - name: x-api-secret
          in: header
          required: true
          schema:
            type: string
        - name: projectId
          required: true
          in: path
          schema:
            type: string
        - name: screenerResponseId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IngestExternalScreenerAnswersDto'
      responses:
        '204':
          description: ''
components:
  schemas:
    IngestExternalScreenerAnswersDto:
      type: object
      properties:
        answers:
          description: >-
            Answer rows for this participant. Rows upsert idempotently per

            `questionId` — re-sending a row replaces the earlier one, so
            corrections

            are just another POST.
          type: array
          items:
            $ref: '#/components/schemas/ExternalScreenerAnswerRowDto'
        complete:
          type: boolean
          description: >-
            Completion signal. The application reads as submitted once the

            accumulated answers cover every declared `externalQuestions` entry,
            or

            earlier when this flag is true (use it when participants may skip

            optional questions on your side). Until then the response stays in
            the

            external screener.
      required:
        - answers
      title: External Screener Answers
    ExternalScreenerAnswerRowDto:
      type: object
      properties:
        questionId:
          type: string
          description: |-
            Must reference a declared `Project.externalQuestions[].questionId`.
            Every row must also carry content: at least one of `answerValues`
            (non-empty array) or `answerText` (non-empty string).
        answerValues:
          description: |-
            Selected option values / structured values (multi-select friendly).
            Required (non-empty) when `answerText` is not provided.
          type: array
          items:
            type: string
        answerText:
          type: string
          description: |-
            Free-text answer for TEXT/OTHER questions.
            Required (non-empty) when `answerValues` is not provided.
        qualifies:
          type: boolean
          description: Your per-question verdict for this participant.
      required:
        - questionId
        - qualifies

````