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

# List proposed rewrites

> The quality review queue, most impactful first. Each row pairs the answer as analysed with the rewrite proposed for it, plus the diagnosis and the performance that justify the change.



## OpenAPI

````yaml /api-reference/specs/claudia/v1.json get /v1/knowledge-bases/{kbId}/improvements/quality
openapi: 3.0.1
info:
  title: Claudia API
  version: 1.0.0
servers:
  - url: https://api.cloudhumans.com/claudia
    description: Production
  - url: https://api.cloudhumans.com/claudia/staging
    description: Staging
security:
  - bearerAuth: []
tags:
  - name: MCP Servers
    description: >-
      The MCP servers your agents can call tools on. Registering one here is
      what makes its tools selectable in an agent; the credentials it needs are
      stored encrypted and never read back.
  - name: Knowledge Base Content
    description: Read, search and edit the content that answers your customers.
  - name: Content Quality
    description: Rewrites proposed for content that is answering your customers badly.
  - name: Playground
    description: >-
      Talk to one of your agents as if you were a customer, without touching a
      real conversation.
  - name: Project Settings
    description: >-
      Read and change how a ClaudIA project behaves — the settings screens of
      the ClaudIA app, as an API.
  - name: Content Improvements
    description: Answers Claudia proposes for questions your content does not cover yet.
  - name: Knowledge Bases
    description: The knowledge bases your account can manage.
  - name: Content Sources
    description: The sites Claudia crawls to keep a knowledge base in sync.
paths:
  /v1/knowledge-bases/{kbId}/improvements/quality:
    get:
      tags:
        - Content Quality
      summary: List proposed rewrites
      description: >-
        The quality review queue, most impactful first. Each row pairs the
        answer as analysed with the rewrite proposed for it, plus the diagnosis
        and the performance that justify the change.
      operationId: listQualityProposals
      parameters:
        - name: kbId
          in: path
          description: Knowledge base to operate on. Get the ids from listMyKnowledgeBases.
          required: true
          schema:
            type: string
        - name: status
          in: query
          description: >-
            Which proposals to read: the ones still waiting, the ones already
            decided, or all of them.
          required: false
          schema:
            type: string
            enum:
              - pending
              - approved
              - rejected
              - all
        - name: action
          in: query
          description: Keep only proposals that would do this to the content.
          required: false
          schema:
            type: string
            enum:
              - REESCREVER
              - MELHORAR
              - CONSOLIDAR
              - QUEBRAR
              - CORRIGIR_CONFIG
        - name: searchTerm
          in: query
          description: >-
            Substring match on the analysed question, the analysed answer and
            the proposed one.
          required: false
          schema:
            type: string
        - name: offset
          in: query
          description: Rows to skip. Page with `total` and `hasNext` from the response.
          required: false
          schema:
            type: integer
            format: int32
            default: 0
          example: 0
        - name: limit
          in: query
          description: Page size. Capped at 200.
          required: false
          schema:
            type: integer
            format: int32
            default: 50
          example: 50
      responses:
        '200':
          description: One page of proposals.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QualityProposalPage'
        '400':
          description: The request could not be answered as written.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing, expired or invalid credentials.
        '403':
          description: The credentials hold no account allowed to manage this content.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: >-
            No such resource, or none these credentials can reach — the two are
            deliberately indistinguishable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limit applied by the API gateway. Back off and retry.
components:
  schemas:
    QualityProposalPage:
      required:
        - hasNext
        - items
        - limit
        - offset
        - total
      type: object
      properties:
        items:
          type: array
          description: The proposals on this page, most impactful first.
          items:
            $ref: '#/components/schemas/QualityProposal'
        total:
          type: integer
          description: Total matching the query, across all pages.
          format: int64
          example: 31
        offset:
          type: integer
          description: Offset this page started at.
          format: int32
          example: 0
        limit:
          type: integer
          description: Page size actually applied (capped at 200).
          format: int32
          example: 50
        hasNext:
          type: boolean
          description: Whether another page follows.
          example: false
      description: One page of proposals.
    Error:
      required:
        - error
      type: object
      properties:
        error:
          type: string
          description: What went wrong.
          example: 'Forbidden: token holds no claim for the requested account'
      description: Something the caller needs to fix.
    QualityProposal:
      required:
        - action
        - analyzedResponse
        - analyzedTitle
        - createdAt
        - diagnosis
        - duplicateCheck
        - entryId
        - estimatedTickets
        - impactScore
        - performance
        - priority
        - reviewState
      type: object
      properties:
        id:
          type: string
          description: Use this id to edit, approve or reject the proposal.
          example: 6683f1c2a4b19e0012ab34cd
        entryId:
          type: string
          description: The content this proposal rewrites. Read it with getEntry.
        action:
          type: string
          description: >-
            What the proposal does to the content: REESCREVER and MELHORAR
            replace the answer, CORRIGIR_CONFIG also fixes the question,
            CONSOLIDAR and QUEBRAR restructure it and cannot be applied by this
            API yet.
          enum:
            - REESCREVER
            - MELHORAR
            - CONSOLIDAR
            - QUEBRAR
            - CORRIGIR_CONFIG
        analyzedTitle:
          type: string
          description: The question as it read when the content was analysed.
        analyzedResponse:
          type: string
          description: >-
            The answer as it read when the content was analysed. Compare it with
            the proposal to see what changes.
        proposedTitle:
          type: string
          description: Proposed new question. Only CORRIGIR_CONFIG changes it.
        proposedResponse:
          type: string
          description: Proposed new answer — what approving will publish.
        proposedChildren:
          type: array
          description: For a QUEBRAR proposal, the entries the content would be split into.
          items:
            $ref: '#/components/schemas/QualityChild'
        diagnosis:
          $ref: '#/components/schemas/QualityDiagnosis'
        performance:
          $ref: '#/components/schemas/QualityPerformance'
        priority:
          type: string
          description: How urgent the fix is.
          example: P1
        recommendationSummary:
          type: string
          description: The change in one line.
        recommendationDetails:
          type: string
          description: The reasoning behind the change, at length.
        impactScore:
          type: number
          description: >-
            Conversations per period this content could stop losing if it
            answered well — the theoretical ceiling.
          format: double
          example: 42
        estimatedTickets:
          type: number
          description: >-
            The realistic share of that ceiling, after how often the content is
            actually reached.
          format: double
          example: 17.5
        duplicateCheck:
          $ref: '#/components/schemas/QualityDuplicateCheck'
        reviewState:
          type: string
          description: Where the proposal stands in the review.
          enum:
            - PENDING
            - APPROVED
            - REJECTED
        clientDecision:
          type: string
          description: The decision recorded when it was approved or rejected.
          enum:
            - APROVAR_SEM_ALTERACAO
            - APROVAR_COM_AJUSTES
            - REESCREVER_DO_ZERO
            - REJEITAR
        finalText:
          type: string
          description: >-
            The text actually published on approval — the proposal, or your edit
            of it.
        clientNote:
          type: string
          description: The note recorded with the decision.
        decidedBy:
          type: string
          description: Who decided, taken from their credentials.
        decidedAt:
          type: string
          description: When it was decided (ISO-8601).
          example: '2026-08-11T09:14:22'
        driftDetected:
          type: boolean
          description: >-
            True when the content changed after it was analysed, so the proposal
            was written against an older answer. False when the current answer
            still matches. Absent when the current answer could not be read, so
            drift is unknown — the proposal may be written against stale
            content. Review it before approving; it never blocks.
          example: false
        analysisPeriod:
          type: string
          description: The window the performance figures cover.
          example: 2026-03-09 → 2026-04-07
        createdAt:
          type: string
          description: When the proposal was raised (ISO-8601).
          example: '2026-08-10T14:32:05'
      description: A rewrite proposed for content that is answering badly.
    QualityChild:
      required:
        - response
        - title
      type: object
      properties:
        title:
          type: string
          description: The question this child answers.
        response:
          type: string
          description: The answer.
        label:
          type: string
          description: Tag to apply.
        topic:
          type: string
          description: Topic to group it under.
      description: One entry a QUEBRAR proposal would split the content into.
    QualityDiagnosis:
      required:
        - actionability
        - clarity
        - composite
        - resolution
      type: object
      properties:
        resolution:
          $ref: '#/components/schemas/QualityScore'
        actionability:
          $ref: '#/components/schemas/QualityScore'
        clarity:
          $ref: '#/components/schemas/QualityScore'
        composite:
          type: number
          description: The three dimensions combined, 0 to 1.
          format: double
          example: 0.42
      description: Why the content is being flagged.
    QualityPerformance:
      type: object
      properties:
        timesUsed:
          type: integer
          description: How many times the content was used to answer.
          format: int32
          example: 312
        retentionRatePct:
          type: number
          description: >-
            Share of those conversations Claudia resolved without a human, as a
            percentage.
          format: double
          example: 61.4
        csatPct:
          type: number
          description: Customer satisfaction over those conversations, as a percentage.
          format: double
          example: 72
        csatResponses:
          type: integer
          description: How many satisfaction answers that percentage is based on.
          format: int32
          example: 38
        clarifiedPct:
          type: number
          description: >-
            Share of conversations where the customer had to ask again to be
            understood, as a percentage.
          format: double
          example: 12.5
      description: How the content performed over the analysed window.
    QualityDuplicateCheck:
      required:
        - similar
        - status
      type: object
      properties:
        status:
          type: string
          description: '`ok`, `warn` or `risk`.'
          example: ok
        note:
          type: string
          description: What the overlap is, when there is one.
        similar:
          type: array
          description: Existing content the rewrite may collide with.
          items:
            $ref: '#/components/schemas/SimilarEntry'
      description: Whether the rewrite risks overlapping existing content.
    QualityScore:
      required:
        - reason
        - score
      type: object
      properties:
        score:
          type: number
          description: Score from 0 (worst) to 1 (best).
          format: double
          example: 0.35
        reason:
          type: string
          description: Why it scored that.
      description: One scored dimension, with the reasoning behind the score.
    SimilarEntry:
      required:
        - entryId
      type: object
      properties:
        entryId:
          type: string
          description: Read it with getEntry.
        title:
          type: string
          description: The question it answers.
      description: Existing content that overlaps a proposal.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````