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

# Update Problem

> Update settings on an existing technical assessment. Only the fields present in the request body are changed; omitted fields keep their current value. Video screens, archived problems, and problems shared from the Ropes Test Bank cannot be updated, and a problem must be in the Ready status. Changes apply to assessments issued from this point on — assessments already issued keep the settings they were created with.



## OpenAPI

````yaml https://api.ropes.ai/api/docs/openapi.json patch /api/public/problems/{problemId}
openapi: 3.0.0
info:
  title: Ropes Public API
  version: 1.0.0
  description: >-
    Public API for Ropes. Authenticate using your API key in the x-api-key
    header.
servers:
  - url: https://api.ropes.ai
    description: Production server
  - url: http://localhost:3001
    description: Local development server
security: []
paths:
  /api/public/problems/{problemId}:
    patch:
      tags:
        - Problems
      summary: Update Problem
      description: >-
        Update settings on an existing technical assessment. Only the fields
        present in the request body are changed; omitted fields keep their
        current value. Video screens, archived problems, and problems shared
        from the Ropes Test Bank cannot be updated, and a problem must be in the
        Ready status. Changes apply to assessments issued from this point on —
        assessments already issued keep the settings they were created with.
      parameters:
        - schema:
            type: string
            description: The unique identifier of the problem
          required: true
          description: The unique identifier of the problem
          name: problemId
          in: path
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                problemTitle:
                  type: string
                  minLength: 1
                  maxLength: 255
                  description: New problem title.
                desiredTime:
                  type: integer
                  minimum: 30
                  maximum: 60
                  description: >-
                    New assessment duration in minutes. Must be between 30 and
                    60. Assessments already issued keep the duration they were
                    created with.
                externalResourceMode:
                  type: string
                  enum:
                    - CLOSED
                    - OPEN
                    - AI_ASSISTED
                  description: >-
                    New external-resource policy. Only CLOSED and AI_ASSISTED
                    can be set here, and switching modes rewrites the problem's
                    scoring rubric for the target mode. Problems currently in
                    OPEN mode cannot be converted through the API.
                includeAiUsageScoring:
                  type: boolean
                  description: >-
                    Adds an AI-usage scoring category when converting to
                    AI_ASSISTED. Only valid alongside externalResourceMode
                    "AI_ASSISTED".
                expirationDays:
                  type: integer
                  nullable: true
                  minimum: 1
                  maximum: 365
                  description: >-
                    Days an issued assessment link stays valid. Send null to
                    clear the problem override and fall back to the
                    organization's default.
              additionalProperties: false
      responses:
        '200':
          description: Successfully updated the problem
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetailsResponse'
        '400':
          description: >-
            Bad request - no updatable fields were provided, a value was
            invalid, or the requested assessment mode cannot be set through the
            API.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemErrorResponse'
        '401':
          description: Unauthorized - Invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemErrorResponse'
        '403':
          description: Forbidden - the organization is disabled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemErrorResponse'
        '404':
          description: Problem not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemErrorResponse'
        '409':
          description: >-
            Conflict - the problem is archived, or it is still being created or
            edited. Retry once its status is Ready.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemErrorResponse'
        '422':
          description: >-
            Unprocessable Entity - video screening problems cannot be updated
            through this endpoint.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemErrorResponse'
        '429':
          description: >-
            Rate limit exceeded - contact support@ropes.ai for further
            assistance.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemErrorResponse'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    ProblemDetailsResponse:
      type: object
      properties:
        problem:
          $ref: '#/components/schemas/ProblemDetails'
      required:
        - problem
    ProblemErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Error message
      required:
        - error
    ProblemDetails:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for the problem
        name:
          type: string
          description: Display name/title of the problem
        status:
          type: string
          enum:
            - Ready
            - Creating
            - Editing
          description: Current status of the problem
        type:
          $ref: '#/components/schemas/ProblemType'
        duration:
          type: number
          nullable: true
          description: >-
            Problem duration in minutes. For video screens, this is the sum of
            question durations.
        candidateSummary:
          type: string
          nullable: true
          description: Summary shown to candidates. Always null for video screens.
        problemSummary:
          type: string
          nullable: true
          description: Internal summary of the problem. Always null for video screens.
        scoringCategories:
          type: array
          items:
            $ref: '#/components/schemas/ProblemScoringCategory'
          description: >-
            Scoring categories with weights and rubrics. Empty for video
            screens.
        externalResourceMode:
          $ref: '#/components/schemas/ProblemExternalResourceMode'
        integrationSource:
          type: string
          description: Integration source for the problem
        externalId:
          type: string
          description: External ID from the ATS integration
        testMode:
          type: boolean
          description: >-
            True if this is a non-production problem created for API integration
            testing.
        isFromRopesTestBank:
          type: boolean
          description: True if this problem is from the shared Ropes Test Bank.
      required:
        - id
        - name
        - status
        - type
        - duration
        - candidateSummary
        - problemSummary
        - scoringCategories
        - externalResourceMode
      description: Detailed problem information
    ProblemType:
      type: string
      enum:
        - technical-assessment
        - video-screening
      description: Problem type discriminator
    ProblemScoringCategory:
      type: object
      properties:
        title:
          type: string
          description: Title of the scoring category
        weight:
          type: number
          description: Weight/percentage value configured for this scoring category
        rubric:
          type: string
          description: Rubric/prompt used when evaluating this category
      required:
        - title
        - weight
        - rubric
    ProblemExternalResourceMode:
      type: string
      nullable: true
      enum:
        - CLOSED
        - OPEN
        - AI_ASSISTED
      description: >-
        External-resource policy governing the assessment. Always null for video
        screens.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````