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

# List project survey response

> Records one rating for the survey named in the body. The rating is validated against the survey's own control range (thumbs 0-1, star 1-5, scale 0-10) and REJECTED rather than clamped when out of range, so a fabricated value can never reach the score. The response counts toward the survey's headline figure by default, scored by the survey's own method exactly as a runtime-captured response is. Requires the feedback-survey:write permission.



## OpenAPI

````yaml agent-platform/api-specs/public-feedback-survey.yaml post /api/public/feedback/projects/{projectId}
openapi: 3.1.0
info:
  title: Public Feedback Survey API
  version: 1.0.0
  description: >-
    Partner-facing survey capture and retrieval. A partner collects ratings in
    their own channels, submits them here against a survey referenced by name,
    then polls the survey's responses back with stable keyset pagination.

    Authentication is by platform API key only (x-api-key: abl_*, or
    Authorization: Bearer abl_*). The key is the registered origin: its clientId
    is resolved server-side and stamped on every submitted response, so a body
    can never set origin, capture method, the survey template id, or a score —
    those fields are refused rather than ignored. A user session (JWT) has no
    clientId and is refused on both endpoints.

    Retrieval returns the survey's COMPLETE responses — runtime-captured and
    every integration's — to any credential holding the read scope; the audience
    is the project's own team, not mutually-distrusting partners. Each row
    carries response_source so a caller can still separate capture paths.
servers:
  - url: /
security: []
paths:
  /api/public/feedback/projects/{projectId}:
    post:
      summary: Submit a rating against a named survey
      description: >-
        Records one rating for the survey named in the body. The rating is
        validated against the survey's own control range (thumbs 0-1, star 1-5,
        scale 0-10) and REJECTED rather than clamped when out of range, so a
        fabricated value can never reach the score. The response counts toward
        the survey's headline figure by default, scored by the survey's own
        method exactly as a runtime-captured response is. Requires the
        feedback-survey:write permission.
      operationId: submitSurveyResponse
      parameters:
        - $ref: '#/components/parameters/ProjectId'
        - $ref: '#/components/parameters/ApiKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitRequest'
      responses:
        '201':
          $ref: '#/components/responses/SubmitAccepted'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/SurveyNotFound'
        '422':
          $ref: '#/components/responses/Unprocessable'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
components:
  parameters:
    ProjectId:
      name: projectId
      in: path
      required: true
      schema:
        type: string
    ApiKey:
      name: x-api-key
      in: header
      required: true
      schema:
        type: string
        pattern: ^abl_
  schemas:
    SubmitRequest:
      type: object
      additionalProperties: false
      required:
        - survey
        - rating
      properties:
        survey:
          type: string
          description: The survey this rating answers, by name.
        rating:
          type: number
          description: >-
            The value given, on the survey control's own scale. Validated
            against the resolved survey's range and rejected (422 INVALID_INPUT)
            when out of range — never clamped.
        session_id:
          type: string
          description: The conversation this rating belongs to, if the caller knows it.
        comment:
          type: string
          maxLength: 4000
          description: >-
            Open-text comment. Optional; readable by any caller holding the read
            scope.
        externalUserId:
          type: string
          description: >-
            The caller's own identifier for the respondent. Never used for
            scoring.
        channel:
          type: string
          description: The caller's own channel label for this response.
        response_source:
          type: string
          default: external
          description: >-
            How the caller categorises the capture source. Stored as given so a
            partner can distinguish its own sub-sources. It does not change
            origin (resolved from the credential) or the score.
        message_id:
          type: string
          description: The caller's own message or turn identifier, stored for correlation.
    SubmitResult:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          const: true
        data:
          type: object
          required:
            - response_id
          properties:
            response_id:
              type: string
              description: >-
                The stored response's stable id. A repeated submission returns
                the original id.
    Error:
      type: object
      required:
        - success
        - error
      properties:
        success:
          type: boolean
          const: false
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: A stable
              machine-readable error code.: null
            message:
              type: string
              description: A human-readable explanation.
  responses:
    SubmitAccepted:
      description: The rating was recorded.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SubmitResult'
    BadRequest:
      description: >-
        The request shape was invalid. Codes: INVALID_BODY, SURVEY_REQUIRED,
        RATING_REQUIRED, INVALID_COMMENT, COMMENT_TOO_LONG, FIELD_NOT_ACCEPTED,
        UNKNOWN_FIELD (submit); INVALID_CURSOR (list).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Authentication is required. Code AUTHENTICATION_REQUIRED.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: >-
        The credential is not permitted. ORIGIN_UNRESOLVED when the credential
        has no registered origin (for example a user session rather than an API
        key); otherwise a missing feedback-survey:write / feedback-survey:read
        permission.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    SurveyNotFound:
      description: The named survey does not exist in this project. Code SURVEY_NOT_FOUND.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unprocessable:
      description: >-
        The rating could not be accepted. TEMPLATE_COLLECTS_NO_RATING when the
        survey is free-text; INVALID_INPUT when the rating is outside the
        control's range (the message names the accepted range).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: The credential's rate allowance is exhausted.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServerError:
      description: >-
        The request could not be completed. SUBMIT_FAILED on submit,
        RETRIEVAL_FAILED on list.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'

````