Wise kyc-review API

KYC Review API provides endpoints to view, update and submit information related to the KYC flow. There are two ways to collect KYC requirements from your customers: - **Hosted KYC** — redirect your customer to a Wise-hosted UI that guides them through the process. - **API submission** — use the [KYC Requirement Submit](/api-reference/kyc-review/kycreviewrequirementsubmit) endpoint to submit requirements directly. This is only available for requirement types where `apiCollectionSupported` is `true`. Please refer to our [Hosted KYC guide](/guides/product/kyc/wise-kyc/hosted-kyc) for more information on the general use of the endpoints included below.

OpenAPI Specification

wise-kyc-review-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Wise Platform 3ds kyc-review API
  version: ''
  description: "The Wise Platform API is a REST-based interface that enables programmatic access to Wise's payment infrastructure. All endpoints return JSON-formatted responses and use standard HTTP methods and status codes.\n{% admonition type=\"success\" name=\"New to wise?\" %}\n  We strongly recommend first reading our **[Getting Started Guide](/guides/developer/index.md)** to help you set up credentials and make your first call.\n{% /admonition %}\n\nBefore you begin {% .title-2 .m-t-5 %}\n\nTo use this API reference effectively, you should have:\n\n- Received Valid [API credentials from Wise](/guides/developer/auth-and-security/index.md) (Client ID and Client Secret)\n- Understand OAuth 2.0 authentication\n- Be familiar with RESTful API concepts\n\nCore API resources {% .title-2 .m-t-5 .m-b-0 %}\n\n| Resource | Purpose |\n|----------|---------|\n| **[Quote](/api-reference/quote)** | Exchange rate and fee calculations |\n| **[Recipient](/api-reference/recipient)** | Beneficiary account management |\n| **[Transfer](/api-reference/transfer)** | Payment creation and execution |\n| **[Balance](/api-reference/balance)** | Multi-currency account operations |\n| **[Profile](/api-reference/profile)** | Account ownership details |\n| **[Rate](/api-reference/rate)** | Current and historical exchange rates |\n\n**Not sure which workflow to build?**<br>\nStart with our [Integration Guides](/guides/product/send-money/use-cases/index.md) for step-by-step implementation examples.{% .m-t-3 .m-b-5 %}\n"
servers:
- url: https://api.wise.com
  description: Production Environment
- url: https://api.wise-sandbox.com
  description: Sandbox Environment
tags:
- name: kyc-review
  x-displayName: KYC Review
  description: 'KYC Review API provides endpoints to view, update and submit information related to the KYC flow.


    There are two ways to collect KYC requirements from your customers:

    - **Hosted KYC** — redirect your customer to a Wise-hosted UI that guides them through the process.

    - **API submission** — use the [KYC Requirement Submit](/api-reference/kyc-review/kycreviewrequirementsubmit) endpoint to submit requirements directly. This is only available for requirement types where `apiCollectionSupported` is `true`.


    Please refer to our [Hosted KYC guide](/guides/product/kyc/wise-kyc/hosted-kyc) for more information on the general use of the endpoints included below.

    '
paths:
  /v1/profiles/{profileId}/kyc-reviews:
    post:
      operationId: kycReviewCreate
      summary: Create a KYC Review
      description: 'Creates a KYC Review for a specific customer action.

        '
      tags:
      - kyc-review
      security:
      - UserToken: []
      parameters:
      - name: profileId
        in: path
        required: true
        description: The profile ID.
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/X-External-Correlation-Id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - type
              properties:
                type:
                  type: string
                  description: 'Type of the underlying action or process this KYC Review is for. Usually a reference to which product this KYC Review is for (like `QUOTE` or `TRANSFER`) or a reference to a KYC process on the profile that isn''t related to a specific product (like `REFRESH_CYCLE` or `REPAPERING`).


                    Following types are available when creating a KYC Review using this endpoint:

                    - `QUOTE`

                    - `PROACTIVE_SEND_MONEY`

                    - `CARD`

                    '
                  enum:
                  - QUOTE
                  - PROACTIVE_SEND_MONEY
                  - CARD
                  example: QUOTE
                triggerData:
                  type: object
                  description: 'Object containing data of the underlying product object that triggered the KYC Review.

                    '
                  properties:
                    id:
                      type: string
                      format: uuid
                      description: ID of the underlying product object. For example, if type is `QUOTE` then this would be the quote ID. This ID might be null when referencing an ID isn't meaningful. As an example, there's only ever one active refresh cycle per profile so referencing by ID isn't useful.
                      example: ba83a43a-f623-46f0-956d-196c13e2ab01
      responses:
        '202':
          description: KYC Review successfully created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/kyc-review'
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '400':
          description: Invalid request (e.g. unsupported `type`, null `type`).
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '401':
          description: User is not authorised to access the resource.
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '404':
          description: Underlying action with provided ID is not found (e.g. quote not found).
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '429':
          $ref: '#/components/responses/429'
    get:
      operationId: kycReviewList
      summary: Get all KYC Reviews for a profile
      description: 'Retrieves a list of all active KYC Reviews for a given profile.

        '
      tags:
      - kyc-review
      security:
      - UserToken: []
      parameters:
      - name: profileId
        in: path
        required: true
        description: The profile ID.
        schema:
          type: integer
          format: int64
      - name: pageNumber
        in: query
        required: false
        description: Page number. Default value is `1`.
        schema:
          type: integer
          default: 1
      - name: pageSize
        in: query
        required: false
        description: Desired number of items per page. Max `100`, default `100`.
        schema:
          type: integer
          default: 100
          maximum: 100
      - $ref: '#/components/parameters/X-External-Correlation-Id'
      responses:
        '200':
          description: Returns a list of KYC Review objects for the profile. Returns an empty list if no KYC Review exists for the profile.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/kyc-review'
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '401':
          description: User is not authorised to access the resource.
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '429':
          $ref: '#/components/responses/429'
  /v1/profiles/{profileId}/kyc-reviews/{kycReviewId}:
    get:
      operationId: kycReviewGetV1
      summary: Get KYC Review by ID (V1)
      deprecated: true
      description: '{% admonition type="warning" %}

        This endpoint is deprecated. Use [Get KYC Review by ID](kycreviewget) (V2) instead.

        {% /admonition %}


        Retrieves a single KYC Review by ID for a profile.

        '
      tags:
      - kyc-review
      security:
      - UserToken: []
      parameters:
      - name: profileId
        in: path
        required: true
        description: The profile ID.
        schema:
          type: integer
          format: int64
      - name: kycReviewId
        in: path
        required: true
        description: The KYC Review ID.
        schema:
          type: string
          format: uuid
      - $ref: '#/components/parameters/X-External-Correlation-Id'
      responses:
        '200':
          description: Returns the KYC Review object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/kyc-review'
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '401':
          description: User is not authorised to access the resource.
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '404':
          description: KYC Review not found.
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '429':
          $ref: '#/components/responses/429'
    patch:
      operationId: kycReviewRedirectUrlUpdate
      summary: Update KYC Review to get a Hosted KYC link
      description: 'Updates the KYC Review with a redirect URL.


        Returns the KYC Review object with a `link` field containing a URL where the end customer needs to be directed in order to complete the Hosted KYC flow.


        Once the Hosted KYC flow is completed by the end customer, they will be redirected to the `redirectUrl` provided in this API call. During the redirection, the `redirectUrl` will be appended with query parameters: `status=success`, `status=failed`, or `status=closed`.

        '
      tags:
      - kyc-review
      security:
      - UserToken: []
      parameters:
      - name: profileId
        in: path
        required: true
        description: The profile ID.
        schema:
          type: integer
          format: int64
      - name: kycReviewId
        in: path
        required: true
        description: The KYC Review ID.
        schema:
          type: string
          format: uuid
      - $ref: '#/components/parameters/X-External-Correlation-Id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - redirectUrl
              properties:
                redirectUrl:
                  type: string
                  description: URL where the user will be redirected at the end of the flow. Can contain query params and path fragments. It has to be a valid URL as per [RFC 2396](https://www.ietf.org/rfc/rfc2396.txt).
                  example: https://example.com
      responses:
        '200':
          description: Returns the updated KYC Review object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/kyc-review'
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '400':
          description: Invalid request (e.g. not a valid URI).
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '401':
          description: User is not authorised to access the resource.
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '404':
          description: KYC Review not found.
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '429':
          $ref: '#/components/responses/429'
  /v2/profiles/{profileId}/kyc-reviews/{kycReviewId}:
    get:
      operationId: kycReviewGet
      summary: Get KYC Review by ID
      description: 'Retrieves a single KYC Review by ID for a profile.

        '
      tags:
      - kyc-review
      security:
      - UserToken: []
      parameters:
      - name: profileId
        in: path
        required: true
        description: The profile ID.
        schema:
          type: integer
          format: int64
      - name: kycReviewId
        in: path
        required: true
        description: The KYC Review ID.
        schema:
          type: string
          format: uuid
      - $ref: '#/components/parameters/X-External-Correlation-Id'
      responses:
        '200':
          description: Returns the KYC Review object including the `requirements` field.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/kyc-review'
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '401':
          description: User is not authorised to access the resource.
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '404':
          description: KYC Review not found.
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '429':
          $ref: '#/components/responses/429'
  /v2/profiles/{profileId}/kyc-requirements/{requirementKey}:
    post:
      operationId: kycReviewRequirementSubmit
      summary: Submit a KYC Requirement
      description: 'Submit a KYC requirement for a KYC Review.


        - A KYC requirement can only be submitted if the KYC Review status is `WAITING_CUSTOMER_INPUT` or `PASSED_WITH_REQUIREMENTS`.

        - A KYC requirement should only be submitted if its `state` is `NOT_PROVIDED` and `apiCollectionSupported` is `true`.


        See the [KYC requirement types](/guides/product/kyc/wise-kyc/kyc-requirement-types) guide for the full list of supported requirement types, submission data structures, and accepted values.

        '
      tags:
      - kyc-review
      security:
      - UserToken: []
      parameters:
      - name: profileId
        in: path
        required: true
        description: The profile ID.
        schema:
          type: integer
          format: int64
      - name: requirementKey
        in: path
        required: true
        description: 'The KYC requirement type to submit.


          See the [KYC requirement types](/guides/product/kyc/wise-kyc/kyc-requirement-types) guide for details on each type.

          '
        schema:
          type: string
          enum:
          - ACCOUNT_INTENT
          - ACCOUNT_PURPOSE
          - ANNUAL_VOLUME
          - BUSINESS_ANNUAL_INCOME
          - BUSINESS_AUTHORISATION_ID
          - BUSINESS_AUTHORISATION_LETTER
          - BUSINESS_DIRECTORS_CHECK
          - BUSINESS_MONTHLY_VOLUME
          - BUSINESS_REGISTRATION_DOCS
          - BUSINESS_SHAREHOLDERS_CHECK
          - BUSINESS_SOURCE_OF_WEALTH
          - BUSINESS_SOURCE_OF_WEALTH_INFO
          - BUSINESS_SOURCE_OF_WEALTH_PROOF
          - BUSINESS_ULTIMATE_BENEFICIAL_OWNER_ID
          - BUSINESS_USE_CASE
          - ID_DOCUMENT
          - INCOME
          - INDIA_TRANSFER_PURPOSE
          - PROOF_OF_TRADING_ADDRESS
          - SOURCE_OF_FUNDS
          - SOURCE_OF_WEALTH
          - SOURCE_OF_WEALTH_INFO
          - SOURCE_OF_WEALTH_PROOF
          - TAX_RESIDENCY
          - USE_CASE_COUNTRIES
      - $ref: '#/components/parameters/X-External-Correlation-Id'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
              - submissionData
              properties:
                submissionData:
                  type: string
                  format: application/json
                  description: "A JSON string containing the following fields:\n\n- `data` — an object whose fields vary by requirement type. Some requirement types do not require a `data` field.\n- `version` — the submission version, currently `\"V1\"`.\n- `kycReviewId` — the ID of the KYC Review this submission belongs to.\n\nFor example, the JSON payload would look like below, but it should be included as a string value in the multipart form field:\n\n```json\n{\n  \"data\": {\n    \"accountPurpose\": \"SENDING_MONEY_TO_FRIENDS_OR_FAMILY\"\n  },\n  \"version\": \"V1\",\n  \"kycReviewId\": \"93a903ea-636c-4c86-a25c-cf6d2bd00e81\"\n}\n```\n\nSee the [KYC requirement types](/guides/product/kyc/wise-kyc/kyc-requirement-types) guide for the `data` structure and accepted values for each requirement type.\n"
                files:
                  type: array
                  items:
                    type: string
                    format: binary
                  description: "One or more files to upload. Required for certain requirement types.\n\nThere are 3 accepted types for documents, they must be provided with the below content-type/Mime-type and have a matching file extension.\n\nContentType/MimeType & file extension:\n  - `image/png` & `.png`\n  - `image/jpeg` & (`.jpg` or `jpeg`)\n  - `application/pdf` & `.pdf`\n\n\nSee the [KYC requirement types](/guides/product/kyc/wise-kyc/kyc-requirement-types) guide for which types require files.\n"
            example:
              submissionData: '{"data":{"accountPurpose":"SENDING_MONEY_TO_FRIENDS_OR_FAMILY"},"version":"V1","kycReviewId":"93a903ea-636c-4c86-a25c-cf6d2bd00e81"}'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \\\n  'https://api.wise-sandbox.com/v2/profiles/{profileId}/kyc-requirements/{requirementKey}' \\\n  -H 'Authorization: Bearer <token>' \\\n  -F 'submissionData={\"data\":{\"accountPurpose\":\"SENDING_MONEY_TO_FRIENDS_OR_FAMILY\"},\"version\":\"V1\",\"kycReviewId\":\"93a903ea-636c-4c86-a25c-cf6d2bd00e81\"};type=application/json' \\\n  -F 'files=@\"<file>\"'\n"
      responses:
        '202':
          description: KYC requirement successfully submitted.
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '400':
          description: 'Invalid request. Common error scenarios:

            - No `submissionData` provided

            - No `kycReviewId` provided in submission data

            - No `data` provided in submission data

            - Invalid field values

            - Missing required files

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  type:
                    type: string
                    example: /errors/types/validation
                  title:
                    type: string
                    example: Validation Error
                  status:
                    type: integer
                    example: 400
                  instance:
                    type: string
                  detail:
                    type: string
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        code:
                          type: string
                        ref:
                          type: string
                        detail:
                          type: string
                        attributes:
                          type: object
              examples:
                no-submission-data:
                  summary: No submissionData provided
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/ACCOUNT_INTENT
                    errors:
                    - code: invalid_value
                      ref: submissionData
                      detail: submissionData must not be empty
                no-kyc-review-id:
                  summary: No kycReviewId provided
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/ACCOUNT_INTENT
                    errors:
                    - code: invalid_value
                      ref: submissionData.kycReviewId
                      detail: kycReviewId must not be empty
                no-data:
                  summary: No data provided
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    detail: No files or submissionData is submitted
                    instance: /v2/profiles/{profileId}/kyc-requirements/ACCOUNT_INTENT
                    errors: []
                invalid-field-value:
                  summary: Invalid field value
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/ACCOUNT_INTENT
                    errors:
                    - code: invalid_value
                      ref: accountPurpose
                      detail: 'Invalid accountPurpose submitted: invalid'
                      attributes:
                        acceptedValues:
                        - Consult API documentation
                negative-amount:
                  summary: Negative amount provided
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    detail: Amount must be greater than zero.
                    instance: /v2/profiles/{profileId}/kyc-requirements/BUSINESS_ANNUAL_INCOME
                    errors: []
                invalid-currency:
                  summary: Invalid currency provided
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/BUSINESS_ANNUAL_INCOME
                    errors:
                    - code: invalid_request
                      ref: submissionData
                      detail: submitted data is invalid
                      attributes: null
                no-files:
                  summary: No files provided
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/BUSINESS_AUTHORISATION_ID
                    errors:
                    - code: missing_value
                      ref: files
                      detail: No file has been provided
                mismatching-filenames:
                  summary: Mismatching fileNames provided
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/BUSINESS_AUTHORISATION_ID
                    errors:
                    - code: invalid_value
                      ref: files
                      detail: File - filenames mismatch
                      attributes:
                        acceptedValues:
                        - xx.png
                missing-front-filename:
                  summary: Multiple files provided without frontFileName field
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/BUSINESS_AUTHORISATION_ID
                    errors:
                    - code: missing_value
                      ref: frontSideFilename
                      detail: No front side file name is provided
                empty-source-of-wealth-list:
                  summary: Empty sourceOfWealthList provided
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/BUSINESS_SOURCE_OF_WEALTH
                    errors:
                    - code: invalid_value
                      ref: sourceOfWealthList
                      detail: No business source of wealth provided
                      attributes:
                        acceptedValues:
                        - REVENUE
                        - PERSONAL_FUNDING
                        - BUSINESS_LOAN
                        - FUNDING_AND_SHAREHOLDER_INVESTMENTS
                        - INVESTMENT_INCOME
                        - DONATIONS
                        - GRANTS
                        - OTHER
                        - LEGAL
                missing-wealth-description:
                  summary: No description when sourceOfWealthList is OTHER
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/BUSINESS_SOURCE_OF_WEALTH
                    errors:
                    - code: invalid_value
                      ref: sourceOfWealthList
                      detail: Missing business source of wealth description
                      attributes:
                        acceptedValues:
                        - REVENUE
                        - PERSONAL_FUNDING
                        - BUSINESS_LOAN
                        - FUNDING_AND_SHAREHOLDER_INVESTMENTS
                        - INVESTMENT_INCOME
                        - DONATIONS
                        - GRANTS
                        - OTHER
                        - LEGAL
                wealth-description-too-short:
                  summary: Short description when sourceOfWealthList is OTHER
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/BUSINESS_SOURCE_OF_WEALTH
                    errors:
                    - code: invalid_value
                      ref: sourceOfWealthList
                      detail: Source of wealth description too short
                      attributes:
                        acceptedValues:
                        - REVENUE
                        - PERSONAL_FUNDING
                        - BUSINESS_LOAN
                        - FUNDING_AND_SHAREHOLDER_INVESTMENTS
                        - INVESTMENT_INCOME
                        - DONATIONS
                        - GRANTS
                        - OTHER
                        - LEGAL
                india-transfer-purpose-non-inr-from-currency:
                  summary: India transfer purpose submitted for non-INR currency
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE
                    errors:
                    - code: invalid_value
                      ref: requirementKey
                      detail: Transfer which triggered KycReview is not from INR currency so submission of this requirement is not permitted
                india-transfer-purpose-not-accepted-to-currency:
                  summary: India transfer purpose submitted to not accepted currency
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE
                    errors:
                    - code: invalid_value
                      ref: requirementKey
                      detail: Transfer which triggered KycReview does not have an accepted target currency so submission of this requirement is not permitted
                india-transfer-purpose-invalid-code:
                  summary: India transfer purpose invalid code
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE
                    errors:
                    - code: invalid_value
                      ref: code
                      detail: The code provided is not valid
                india-transfer-purpose-not-required:
                  summary: India transfer purpose not required
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE
                    errors:
                    - code: invalid_value
                      ref: requirementKey
                      detail: INDIA_TRANSFER_PURPOSE is not required for the KycReview
                india-transfer-purpose-additionaldocumentfilename-not-supplied:
                  summary: additionalDocumentFileName missing or empty
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE
                    errors:
                    - code: missing_value
                      ref: additionalDocumentFileName
                      detail: additionalDocumentFileName cannot be null or empty
                india-transfer-purpose-educationpaidwithloan-not-supplied:
                  summary: educationPaidWithLoan missing
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE
                    errors:
                    - code: missing_value
                      ref: educationPaidWithLoan
                      detail: educationPaidWithLoan cannot be null
                india-transfer-purpose-educationpaidwithloan-not-required:
                  summary: educationPaidWithLoan not required
                  value:
                    type: /errors/types/validation
                    title: Validation Error
                    status: 400
                    instance: /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE
                    errors:
                    - code: invalid_value
                      ref: educationPaidWithLoan
                      detail: educationPaidWithLoan is only valid for OVERSEAS_EDUCATION & EDUCATION_EXPENSES
                india-transfer-purpose-loandocumentfilename-not-supplied:
                  summary: loanDocumentFileName missing
            

# --- truncated at 32 KB (61 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/wise/refs/heads/main/openapi/wise-kyc-review-api-openapi.yml