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

# Edit quality assurance settings

> Only checks listed in the request are updated; omitted checks keep their current settings.



## OpenAPI

````yaml /openapi/phrase-tms-all.json put /api2/v1/projectTemplates/{projectTemplateUid}/qaSettings
openapi: 3.0.0
info:
  description: |-
    Welcome to Phrase's TMS API documentation. 

     Please visit our [help center](https://support.phrase.com/hc/en-us/sections/5709662083612) for more information about the APIs. 

     If you have any questions, please contact [Support](https://support.phrase.com/hc/requests/new). 

     Please, include the `User-Agent` header with the name of your application or project. It might be a good idea to include some sort of contact information as well, so that we can get in touch if necessary. Examples of excellent `User-Agent` headers:
     > User-Agent: Example mobile app (example@phrase.com) <br/> User-Agent: ACME Inc Java 1.8 Client (http://acmeinc.com/contact)
  version: All
  title: Phrase TMS API
servers:
  - url: https://cloud.memsource.com/web
security:
  - ApiToken: []
  - OAuth2: []
tags:
  - name: Additional Workflow Step
  - name: Analysis
  - name: Async Request
  - name: Authentication
  - name: Automations
  - name: Bilingual File
  - name: Business Unit
  - name: Buyer
  - name: Client
  - name: Connector
  - name: Conversations
  - name: Cost Center
  - name: Custom Fields
  - name: Custom File Type
  - name: Domain
  - name: Due Date Scheme
  - name: Email Template
  - name: File
  - name: Glossary
  - name: Import settings
  - name: Job
  - name: Language AI
  - name: Language Assets
  - name: Language Quality Assessment
  - name: Machine Translation
  - name: Machine Translation Settings
  - name: Mapping
  - name: Net Rate Scheme
  - name: Notifications
  - name: Price List
  - name: Project
  - name: Project Template
  - name: Provider
  - name: Quality Assurance
  - name: Quality Profile
  - name: Quote
  - name: Reference File
  - name: SCIM
  - name: Segment
  - name: Segmentation Rules
  - name: Service
  - name: Spell Check
  - name: SubDomain
  - name: Supported Languages
  - name: Term Base
  - name: Translation
  - name: Translation Memory
  - name: User
  - name: Vendor
  - name: Webhook
  - name: Workflow Step
  - name: Workflow changes
  - name: XML Assistant
paths:
  /api2/v1/projectTemplates/{projectTemplateUid}/qaSettings:
    put:
      tags:
        - Project Template
      summary: Edit quality assurance settings
      description: >-
        Only checks listed in the request are updated; omitted checks keep their
        current settings.
      operationId: setProjectTemplateQASettings
      parameters:
        - name: projectTemplateUid
          in: path
          description: Project template UID
          required: true
          schema:
            type: string
      requestBody:
        $ref: '#/components/requestBodies/EditQASettingsDtoV2'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QASettingsDtoV2'
        '400':
          description: Bad Request
        '401':
          description: Not authorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
        '405':
          description: Method not allowed
        '408':
          description: Timeout
        '410':
          description: Gone
        '415':
          description: Unsupported media type
        '429':
          description: Too many requests
        '500':
          description: Internal server error
        '501':
          description: Not implemented
components:
  requestBodies:
    EditQASettingsDtoV2:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/EditQASettingsDtoV2'
      description: QA settings
      required: true
  schemas:
    QASettingsDtoV2:
      type: object
      properties:
        checks:
          type: array
          description: >-
            List of QA check configurations. The "strictJobStatus" check is a
            special case: it is not a content/segment-level QA rule but the
            project/template-wide completion gate — setting its "enabled" to
            true blocks linguists from setting a job to Completed while QA
            warnings are unresolved for that job. Its "ignorable" has no effect
            for this check name.
          items:
            $ref: '#/components/schemas/QACheckDtoV2'
    EditQASettingsDtoV2:
      type: object
      properties:
        checks:
          type: array
          example: |2-

                    {
                        "ignorable": false,
                        "enabled": true,
                        "type": "VOID",
                        "instant": false,
                        "name": "emptyTarget"
                    },
                    {
                        "ignorable": false,
                        "enabled": true,
                        "value": 12,
                        "type": "NUMBER",
                        "name": "targetLength"
                    },
                    {
                        "ignorable": false,
                        "enabled": true,
                        "value": "ASAP, irony",
                        "type": "STRING",
                        "instant": true,
                        "name": "forbiddenStrings"
                    },
                    {
                        "enabled": true,
                        "profile": "jiris",
                        "ignorable": true,
                        "type": "MORAVIA",
                        "name": "moravia"
                    },
                    {
                        "rules": [
                            {
                                "description": "Description",
                                "sourceRegexp": ".+",
                                "targetRegexp": ".+",
                                "ignorable": true
                            },
                            {
                                "description": "Description",
                                "sourceRegexp": "i+",
                                "targetRegexp": "e+",
                                "ignorable": false
                            }
                        ],
                        "type": "REGEX",
                        "name": "regexp"
                    },
                    {
                        "enabled": true,
                        "ignorable": true,
                        "type": "VOID",
                        "name": "customQa"
                    }
                
          description: >-
            List of QA check configurations. Each entry must include "name"
            (check identifier) and "type" (VOID, NUMBER, STRING, REGEX, or
            MORAVIA). VOID, NUMBER, and STRING checks accept "enabled",
            "ignorable", "instant", and "lock"; MORAVIA accepts "enabled",
            "ignorable", "instant", and a "profile" string; REGEX checks carry a
            "rules" array (per-rule fields define the regular expressions and
            flags). NUMBER checks require a numeric "value"; STRING checks
            accept a string "value". Only checks listed here are updated;
            omitted checks keep their current settings. The "strictJobStatus"
            check name is a special case: it is not a content/segment-level QA
            rule but the project/template-wide completion gate — setting its
            "enabled" to true blocks linguists from setting a job to Completed
            while QA warnings are unresolved for that job. Its "ignorable" has
            no effect for this check name.
          items:
            type: object
            additionalProperties:
              type: object
    QACheckDtoV2:
      type: object
      required:
        - name
        - type
      discriminator:
        propertyName: type
      properties:
        name:
          type: string
          description: >-
            Identifies the QA check. Note on "strictJobStatus": unlike the other
            check names, this is not a content/segment-level QA rule. It is the
            project/template-wide completion gate: setting its "enabled" to true
            blocks linguists from setting a job to Completed while QA warnings
            are unresolved for that job. Its "ignorable" has no effect for this
            check name.
          enum:
            - emptyTarget
            - inconsistentTranslation
            - joinMarksInconsistency
            - missingNumber
            - segmentNotConfirmed
            - nonConformingTerms
            - multipleSpaces
            - endPunctuation
            - targetLength
            - absoluteTargetLength
            - relativeTargetLength
            - inconsistentFormatting
            - unresolvedComment
            - emptyPairTags
            - strictJobStatus
            - forbiddenStringsEnabled
            - excludeLockedSegments
            - ignoreNotApprovedTerms
            - spellCheck
            - repeatedWords
            - inconsistentTagContent
            - emptyTagContent
            - malformed
            - forbiddenTerms
            - targetLengthPercent
            - targetLengthPerSegment
            - newerAtLowerLevel
            - leadingAndTrailingSpaces
            - targetSourceIdentical
            - ignoreInAllWorkflowSteps
            - regexp
            - unmodifiedFuzzyTranslation
            - unmodifiedFuzzyTranslationTM
            - unmodifiedFuzzyTranslationMTNT
            - moravia
            - extraNumbers
            - nestedTags
        type:
          type: string
          description: Check type; determines which additional fields apply
          enum:
            - VOID
            - NUMBER
            - STRING
            - REGEX
            - MORAVIA
  securitySchemes:
    ApiToken:
      description: >-
        Get a token from `auth/login` [endpoint](#operation/login) and then pass
        it in the `Authorization` HTTP header in every subsequent API call. For
        more information visit our [help
        center](https://support.phrase.com/hc/en-us/articles/5709662181404-API-Authentication-TMS-#token-0-0).
      type: apiKey
      name: Authorization
      in: header
    OAuth2:
      description: >-
        A standard OAuth 2.0 authorization code flow. For more information visit
        our [help
        center](https://support.phrase.com/hc/en-us/articles/5709662181404-API-Authentication-TMS-#oauth-2-0-0-1).
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://cloud.memsource.com/web/oauth/authorize
          tokenUrl: https://cloud.memsource.com/web/oauth/token
          scopes: {}

````