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

# Submit KYC

> This API allows you to submit the necessary KYC documents for a specific contact. The KYC documents include the contact's identity proof (e.g., ID card, passport), a selfie, and relevant document images. You must provide the correct contact `email`.



## OpenAPI

````yaml /api/openapi/v2-reference.yaml post /v2/contacts/submit_kyc
openapi: 3.0.2
info:
  title: Multi-currency Payment APIs
  description: >-
    ## Introduction

    The Multi-currency Payment API Solution provides developers with a unified
    API schema to support multiple currencies efficiently. These APIs enable
    seamless transactions for both payin and payout operations, ensuring a
    robust, reliable, and scalable payment infrastructure for businesses dealing
    with various currencies.

    ### Key Features

    - **Single API Schema**: A single schema supports all currencies in your
    account, simplifying integration and management.

    - **Payin and Payout Process**:
      - **Step 1**: Call the **Get payin method list** to retrieve the list of supported methods.
      - **Step 2**: Call the **Get payin required fields** to get specific required fields for each method.
      - **Step 3**: Create the payment using the method and required fields from the previous step.
      - **Step 4**: On the sandbox environment, you can call the **Simulate payin** to simulate the payment.

    <div class="gst-note-red">
      Please note: GST should only be set to <code>true</code> for AU Merchants for <b>AUD</b> currency only. For all other currencies, set GST to <code>false</code>.
    </div>

    This documentation provides detailed guidance for integrating these
    capabilities into your application.
  version: 2.0.0
  termsOfService: https://helloclever.co/terms
  contact:
    email: support@helloclever.co
servers:
  - url: https://api.cleverhub.co/api
    description: Sandbox Environment
  - url: https://api-merchant.helloclever.co/api
    description: Production Environment
security:
  - app-id: []
    secret-key: []
paths:
  /v2/contacts/submit_kyc:
    post:
      tags:
        - Contact
      summary: Submit KYC
      description: >-
        This API allows you to submit the necessary KYC documents for a specific
        contact. The KYC documents include the contact's identity proof (e.g.,
        ID card, passport), a selfie, and relevant document images. You must
        provide the correct contact `email`.
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - email
                - document_type
                - document_number
                - document_username
                - expiry_date
                - issue_country
                - nationality
                - selfie
                - id_doc_front_side
                - id_doc_back_side
                - webhook_notification
              properties:
                email:
                  type: string
                  description: The contact's email used for verification.
                document_type:
                  type: string
                  description: >-
                    The type of identification document (e.g., passport,
                    id_card).
                  enum:
                    - passport
                    - id_card
                    - driving_license
                document_number:
                  type: string
                  description: The identification number on the document.
                document_username:
                  type: string
                  description: The name as shown on the identification document.
                issue_date:
                  type: string
                  description: >-
                    The issue date of the identification document in format
                    'yyyy-mm-dd'.
                expiry_date:
                  type: string
                  description: >-
                    The expiry date of the identification document in format
                    'yyyy-mm-dd'.
                issue_country:
                  type: string
                  description: >-
                    The country that issued the identification document (ISO
                    3166-1 alpha-2).
                nationality:
                  type: string
                  description: >-
                    The country of nationality of the contact (ISO 3166-1
                    alpha-2 code).
                selfie:
                  type: string
                  format: binary
                  description: >-
                    A selfie image of the contact for identity verification
                    should be in `JPEG` format.
                id_doc_front_side:
                  type: string
                  format: binary
                  description: >-
                    The front side image of the identification document should
                    be in `JPEG` or `PNG` format.
                id_doc_back_side:
                  type: string
                  format: binary
                  description: >-
                    The back side image of the identification document should be
                    in `JPEG` or `PNG` format.
                webhook_notification:
                  allOf:
                    - required:
                        - endpoint_url
                        - authorization_header
                      type: object
                      description: Merchant Callback Details
                      properties:
                        endpoint_url:
                          type: string
                          format: url (endpoint_url)
                          example: https://example.org
                          description: >-
                            An internet accessible url which Hello Clever will
                            invoke when the status of the transaction has
                            changed. The call will be done using the HTTP POST
                            method. The endpoint exposed by the client must be
                            TLS 1.2 and the server certificate must be issued by
                            a well known commercial certificate authority and
                            that self-signed or internally signed certs are not
                            acceptable.
                        authorization_header:
                          type: string
                          format: (authorization_header)
                          example: SECRET
                          description: >-
                            The string which Hello Clever will put into the
                            Authorization request header when calling the
                            Callback url.
              example:
                email: test@example.com
                document_type: passport
                document_number: '12345678'
                document_username: Luyx Tran
                issue_date: '2024-04-16'
                expiry_date: '2024-04-16'
                issue_country: AU
                nationality: AU
                selfie: photo.jpeg
                id_doc_front_side: front_side.png
                id_doc_back_side: back_side.png
                webhook_notification:
                  endpoint_url: https://yourserver.co/notifications
                  authorization_header: '****'
      responses:
        '200':
          description: KYC submission successful
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
              example:
                status: Ok
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
              example:
                errors:
                  code: REQUIRE_LOGIN
                  message: Not Authorised
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: object
                    properties:
                      message:
                        type: string
              example:
                errors:
                  message: Email can't be blank
      callbacks:
        KYCStatusChanged:
          '{$request.body#/endpoint_url}':
            post:
              summary: KYC Status Changed Event
              description: >
                When the KYC status changes, Hello Clever will call the
                `endpoint_url` provided in the Submit KYC request. 

                The call will be made using the HTTP POST method.


                The notification will include detailed KYC information for the
                contact, including the updated status (pending, approved,
                failed), and other relevant details.
              parameters:
                - in: header
                  name: Authorization
                  required: true
                  schema:
                    type: string
                    description: >-
                      The value of the `Authorization` header will be taken from
                      `authorization_header` in the Submit KYC payload.
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      type: object
                      properties:
                        email:
                          type: string
                          description: Contact's email
                        first_name:
                          type: string
                          description: Contact's first name
                        last_name:
                          type: string
                          description: Contact's last name
                        type:
                          type: string
                          description: >-
                            The type of contact (e.g., individual or
                            organization)
                          example: individual
                          enum:
                            - individual
                            - organization
                        dob:
                          type: string
                          description: Contact date of birth format 'yyyy-mm-dd'
                        phone:
                          type: string
                          description: Contact's phone
                          example: +61-412345678
                        reg_no:
                          type: string
                          description: Contact registration number.
                        gender:
                          type: string
                          example: male
                          description: Contact's gender
                          enum:
                            - male
                            - female
                        street:
                          type: string
                          description: The primary name of an address's street.
                        city:
                          type: string
                          description: Name of an address's city or town.
                        postal_code:
                          type: string
                          description: The address's postcode
                        state:
                          type: string
                          description: The address's state / province / county.
                        country:
                          type: string
                          description: ISO 3166-1 alpha-2 country code.
                        identity:
                          type: object
                          description: >-
                            Contains the most recent KYC submission details for
                            the contact.
                          properties:
                            issue_country:
                              type: string
                              description: ISO 3166-1 alpha-2 country code.
                            id_doc_type:
                              type: string
                              description: Type of identification document
                              enum:
                                - passport
                                - id_card
                                - driving_license
                            document_number:
                              type: string
                              description: ID document number
                            issue_date:
                              type: string
                              description: Format 'yyyy-mm-dd'
                            expiry_date:
                              type: string
                              description: Format 'yyyy-mm-dd'
                        kyc_statuses:
                          type: array
                          description: >-
                            An array of KYC statuses for the contact, containing
                            multiple KYC instances with status and message.
                          items:
                            type: object
                            properties:
                              kyc_status:
                                type: string
                                description: >-
                                  - `pending`: KYC process has been initiated
                                  for the contact, but the verification is not
                                  yet completed. The contact is still in the
                                  process of submitting the necessary documents.

                                  - `failed`: contact was unable to verify the
                                  KYC documents due to invalid, incomplete, or
                                  unclear information. The contact may need to
                                  resubmit the documents.

                                  - `rejected`: KYC has been rejected for future
                                  transactions due to failure in meeting the
                                  required verification criteria. The contact
                                  cannot proceed with any further transactions
                                  until the issue is resolved.

                                  - `manual_review`: The KYC process is under
                                  review by the compliance team to approve or
                                  reject the documents. This status typically
                                  means that the submitted documents need
                                  further examination.

                                  - `blocked`: Contact's KYC has been blocked,
                                  preventing future transactions until further
                                  resolution. The block may be due to suspicious
                                  activity or a need for additional
                                  verification.

                                  - `approved`: Contact has successfully passed
                                  the KYC verification, and future transactions
                                  can proceed without issue. The contact's
                                  identity has been verified and is now
                                  compliant with the platform's standards.
                                enum:
                                  - pending
                                  - failed
                                  - rejected
                                  - manual_review
                                  - blocked
                                  - approved
                              message:
                                type: string
                                description: Message related to the KYC status
                      example:
                        email: test@example.com
                        first_name: Luyx
                        last_name: Tran
                        type: individual
                        dob: '1991-12-24'
                        phone: '+6123224242'
                        reg_no: '123456789'
                        gender: male
                        street: 338 George Street
                        city: Sydney
                        postal_code: '2000'
                        state: New South Wales
                        country: AU
                        identity:
                          issue_country: AU
                          document_number: '12345678'
                          issue_date: '2024-04-16'
                          expiry_date: '2024-04-16'
                          id_doc_type: Passport
                        kyc_statuses:
                          - kyc_status: approved
                            message: 'null'
                          - kyc_status: rejected
                            message: KYC is rejected.
              responses:
                '200':
                  description: The merchant's server should return this code
              method: post
              type: path
            path: '{$request.body#/endpoint_url}'
components:
  securitySchemes:
    app-id:
      type: apiKey
      in: header
      name: app-id
      description: |
        A unique identifier assigned to each application.
    secret-key:
      type: apiKey
      in: header
      name: secret-key
      description: |
        A secure token associated with the `app-id`.

````

## Related topics

- [Submit KYC With Token](/api/contact/submit-kyc-with-token.md)
- [Create KYC for Beneficiary](/api/aud-payout/create-kyc-for-beneficiary.md)
- [Create Contact](/api/contact/create-contact.md)
