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

# Create KYC Intent

> Request a KYC session for a specific action.



## OpenAPI

````yaml api-reference/openapi-payments.json POST /compliance/v2/kyc
openapi: 3.0.0
info:
  title: Forte Payments API
  version: v1.0.0
servers:
  - url: https://sandbox-api.sandbox.lemmax.com
    variables: {}
security:
  - authorization: []
tags:
  - name: Forte Payments
  - name: Forte Compliance
paths:
  /compliance/v2/kyc:
    post:
      tags:
        - Forte Compliance
      summary: Request a KYC session for a specific action.
      description: Request a KYC session for a specific action.
      operationId: startKycWorkflow
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/start_kyc_workflow_request'
        description: Start KYC Workflow Request
        required: false
      responses:
        '200':
          content:
            application/json:
              schema:
                description: >-
                  The error case where API response is with 200 HTTP status
                  code, but KYC cannot be started because customer is banned.
                          The 200 HTTP status code is returned so that Developers would still initialize the widget and provide the response directly to the widget.
                oneOf:
                  - $ref: '#/components/schemas/kyc_workflow_start_customer_banned'
                title: error_starting_kyc
                type: object
                x-struct: null
                x-validate: null
          description: >
            When this API is called, there is a certain case that won't start
            the KYC submission

            process, but the response is communicated under 200 HTTP code. This
            is to signal to

            the Developers that widget should still be initialized and the
            response from this

            API should be provided directly to the widget initialization.
        '201':
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/kyc_workflow_started'
                title: start_kyc_success_response
                type: object
                x-struct: null
                x-validate: null
          description: KYC process is successfully started.
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonErrorResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ERR01'
          description: Forbidden
        '406':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonErrorResponse'
          description: Not Acceptable
        '415':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonErrorResponse'
          description: Unsupported Media Type
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonErrorResponse'
          description: Unprocessable Content
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonErrorResponse'
          description: Too Many Requests
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonErrorResponse'
          description: Internal Server Error
      callbacks: {}
components:
  schemas:
    start_kyc_workflow_request:
      additionalProperties: false
      example:
        action:
          level: 1
          type: OCC_RULES_ENGINE
        customer:
          external_id: customer_PK
          wallet:
            address: '0xaac17f958d2ee523a2206206994597c13d831ec2'
            blockchain: sepolia
      properties:
        action:
          properties:
            level:
              description: KYC Level requested for the user
              maximum: 4
              minimum: 1
              type: integer
              x-struct: null
              x-validate: null
            type:
              enum:
                - OCC_RULES_ENGINE
                - OCC_RULES_ENGINE_V2
              type: string
              x-struct: null
              x-validate: null
          required:
            - type
            - level
          type: object
          x-struct: null
          x-validate: null
        customer:
          additionalProperties: false
          description: >-
            Customer object for propagating customer information from
            Developer's system.
          properties:
            external_id:
              description: >-
                Unique identifier in the Developer's system, ideally the Primary
                Key created for the customer in the Developer's database.
              maxLength: 1000
              type: string
              x-pnc-external: true
              x-struct: null
              x-validate: null
            wallet:
              additionalProperties: false
              description: Customer's wallet that will receive the NFT.
              properties:
                address:
                  description: The address of the crypto wallet.
                  example: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
                  maxLength: 1000
                  type: string
                  x-pnc-external: true
                  x-struct: null
                  x-validate: null
                blockchain:
                  description: The blockchain of the wallet.
                  enum:
                    - ethereum
                    - sepolia
                    - polygon
                    - amoy
                    - solana
                    - solana_devnet
                    - base
                    - base_sepolia
                    - avalanche_c
                    - avalanche_fuji
                    - binance_smart_chain
                    - binance_smart_chain_testnet
                    - arbitrum_one
                    - arbitrum_sepolia
                    - apechain
                    - curtis
                    - etherlink
                    - etherlink_testnet
                    - soneium
                    - soneium_minato
                    - aleo
                    - aleo_testnet
                  example: sepolia
                  type: string
                  x-struct: null
                  x-validate: null
                siwe:
                  additionalProperties: false
                  description: >
                    Sign In With Ethereum data (EIP-4361). Required if
                    application is configured

                    require wallet signatures.
                  properties:
                    message:
                      description: SIWE message according to EIP-4361
                      maxLength: 400
                      minLength: 100
                      type: string
                      x-pnc-external: true
                      x-struct: null
                      x-validate: null
                    signature:
                      description: >-
                        Hex encoded (with 0x prefix) personal signature of SIWE
                        message
                      example: >-
                        0x0da30e13183dfe0be9d7e6108f92dd2d0561807b684b8c68e6a8257e9faee8a51823dcddd56560cea25d33102e73c7a25f0be96749d733dc18683742ca1924d01b
                      maxLength: 132
                      minLength: 132
                      nullable: false
                      pattern: ^0x[a-fA-F0-9]{130}$
                      type: string
                      x-struct: null
                      x-validate: null
                  required:
                    - message
                    - signature
                  type: object
                  x-struct: null
                  x-validate: null
              required:
                - blockchain
                - address
              type: object
              x-struct: null
              x-validate: null
          required:
            - external_id
            - wallet
          type: object
          x-struct: null
          x-validate: null
      required:
        - customer
        - action
      title: start_kyc_workflow_request
      type: object
      x-struct: Elixir.ForteComplianceSvcWeb.OpenApi.Novapay.Kyc.StartKycWorkflowRequest
      x-validate: null
    kyc_workflow_start_customer_banned:
      example:
        data:
          error_code: ERR01
          flow: KYC_OCC
          widget_data: null
      properties:
        data:
          properties:
            error_code:
              description: >-
                The only field that will be present. When customer is banned, a
                payment intent is not created, so `widget_data` will be `null`.
              maxLength: 1000
              type: string
              x-pnc-external: true
              x-struct: null
              x-validate: null
            flow:
              enum:
                - KYC_OCC
              type: string
              x-struct: null
              x-validate: null
            widget_data:
              description: Base64 encoded widget initialization data.
              maxLength: 100000
              nullable: true
              pattern: ^[-a-zA-Z0-9_/+]+=*$
              type: string
              x-struct: null
              x-validate: null
          required:
            - error_code
            - widget_data
            - flow
          type: object
          x-struct: null
          x-validate: null
      required:
        - data
      title: kyc_workflow_start_customer_banned
      type: object
      x-struct: >-
        Elixir.ForteComplianceSvcWeb.OpenApi.Novapay.Kyc.StartKycWorkflowResponse.ERR01
      x-validate: null
    kyc_workflow_started:
      example:
        data:
          error_code: null
          flow: KYC_OCC
          widget_data: >-
            eyJhY2Nlc3NfdG9rZW4iOiAiZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SmhjSEJmYVdRaU9pSmxPRFk0WWpCak55MDFObVJtTFRReFpUUXRZVFpsTkMwMk9ESm1PVEkyTUdVM1kySWlMQ0pqZFhOMGIyMWxjbDlwWkNJNklqVTBZbVUxWXpkakxURTFNbVF0TkdaaFppMDROVFl6TFRObE9EZGpNR0l5T1dNME1pSXNJbVZ0WVdsc1gyRmtaSEpsYzNNaU9pSjBaWE4wYVc1blFHNXZjblJvWlhKdWJHRmljeTVqWVNJc0ltVnRZV2xzWDNabGNtbG1hV1ZrSWpwbVlXeHpaU3dpWlhod0lqb3hOamt5TURRMU1USTVMQ0pwYzNNaU9pSm1iM0owWlY5aGRYUm9YM04yWXlJc0ltMWxjbU5vWVc1MFgybGtJam9pTTJWak1qYzNNV0V0Wm1VeFppMDBOR1U1TFdGall6VXRPV0ZtTVdFNU9XVm1aR1l4SWl3aWRHOXJaVzVmZEhsd1pTSTZJbVY0ZEdWeWJtRnNYM1J2YTJWdUluMC5xUjRydmVMejVFQUt1eE91cTFOS0JhQ0ktM2hoMFVRVWlMQmpNaC1WT2QwIiwgImt5Y19hdHRyaWJ1dGVzIjogWyJOQU1FIiwgIkFERFJFU1MiLCAiRE9CIiwgIlBIT05FX05VTUJFUiJdLCAia3ljX3Nlc3Npb24iOiAiNzcyNTVhYmEtZmE3NS00NzgzLWEyYmItNjQ3MWQzZmFlM2QzIn0=
      properties:
        data:
          properties:
            error_code:
              description: >-
                Provided for the widget to consume and display the appropriate
                page.
                              `null` value for cases where kyc process is successfully started.
              maxLength: 1000
              nullable: true
              type: string
              x-pnc-external: true
              x-struct: null
              x-validate: null
            flow:
              enum:
                - KYC_OCC
              type: string
              x-struct: null
              x-validate: null
            widget_data:
              description: Base64 encoded widget initialization data.
              maxLength: 100000
              nullable: true
              pattern: ^[-a-zA-Z0-9_/+]+=*$
              type: string
              x-struct: null
              x-validate: null
          required:
            - widget_data
            - flow
            - error_code
          type: object
          x-struct: null
          x-validate: null
      required:
        - data
      title: kyc_workflow_started
      type: object
      x-struct: >-
        Elixir.ForteComplianceSvcWeb.OpenApi.Novapay.Kyc.StartKycWorkflowResponse.StartKycSuccessResponse
      x-validate: null
    JsonErrorResponse:
      additionalProperties: false
      example:
        error:
          message: The Foo resource could not be found
          reason: Not Found
          status: 404
      properties:
        error:
          additionalProperties: false
          properties:
            code:
              oneOf:
                - format: int32
                  type: integer
                  x-struct: null
                  x-validate: null
                - maxLength: 1000
                  type: string
                  x-pnc-external: true
                  x-struct: null
                  x-validate: null
              x-struct: null
              x-validate: null
            message:
              description: >-
                Extra information about the error that may be displayed, but
                should not be used for programmatic matching
              example: The Foo resource could not be found
              maxLength: 1000
              minLength: 0
              type: string
              x-struct: null
              x-validate: null
            reason:
              description: HTTP status description
              example: Not Found
              maxLength: 1000
              minLength: 1
              type: string
              x-struct: null
              x-validate: null
            status:
              description: HTTP status code
              example: 404
              format: int32
              type: integer
              x-struct: null
              x-validate: null
          required:
            - status
            - reason
          type: object
          x-struct: null
          x-validate: null
      required:
        - error
      title: JsonErrorResponse
      type: object
      x-struct: Elixir.PncCommon.OpenApi.JsonErrorResponse
      x-validate: null
    ERR01:
      additionalProperties: true
      properties:
        error:
          additionalProperties: true
          description: Error response for when customer is banned.
          properties:
            code:
              oneOf:
                - format: int32
                  type: integer
                  x-struct: null
                  x-validate: null
                - description: Customer is banned.
                  enum:
                    - ERR01
                  type: string
                  x-struct: null
                  x-validate: null
              x-struct: null
              x-validate: null
            message:
              description: >-
                Extra information about the error. Should **not** be used
                programmatically.
              maxLength: 1000
              type: string
              x-struct: null
              x-validate: null
            reason:
              description: HTTP status description.
              example: Forbidden
              maxLength: 1000
              type: string
              x-struct: null
              x-validate: null
            status:
              description: HTTP status code.
              example: 403
              format: int32
              type: integer
              x-struct: null
              x-validate: null
          required:
            - code
            - status
            - reason
          type: object
          x-struct: null
          x-validate: null
      required:
        - error
      title: ERR01
      type: object
      x-struct: Elixir.PncCommon.OpenApi.ErrorResponse.ERR01
      x-validate: null
  securitySchemes:
    authorization:
      description: '`access_token` returned by the `/auth/v1/oauth2/tokens` API call.'
      scheme: bearer
      type: http

````