LE-KO KYC (v1.0.0)

Download OpenAPI specification:

LE-KO Know Your Customer (KYC) verification API for identity verification, document processing, and compliance management.

kyc

KYC verification

verifications

✨ Initiates a new KYC verification process for a coach

Authorizations:
bearerHttpAuthentication
header Parameters
x-current-user-id
required
string <uuid>
Request Body schema: application/json
required
notes
string <= 500 characters

Optional notes for the verification request

Responses

Request samples

Content type
application/json
{
  • "notes": "Initial KYC verification request"
}

Response samples

Content type
application/json
{
  • "id": "00000000-0000-1000-9000-55f01dda9dd0",
  • "coachId": "00000000-0000-1000-9000-55f01dda9dd0",
  • "status": "pending",
  • "currentStep": "passport_verification",
  • "avatarVerification": {
    • "isHuman": true,
    • "confidence": 0.95,
    • "processedAt": "2024-01-15T10:30:00Z"
    },
  • "passportVerification": {
    • "ocrSuccess": true,
    • "passportData": {
      • "firstName": "John",
      • "lastName": "Doe",
      • "passportNumber": "A1234567",
      • "dateOfBirth": "1990-01-15",
      • "issuedDate": "2030-01-15",
      • "placeOfBirth": "New York, USA",
      • "middleName": "James",
      • "subdivision": "NY"
      },
    • "processedAt": "2024-01-15T10:35:00Z"
    },
  • "imageMatchResult": {
    • "matchScore": 0.87,
    • "isMatched": true,
    • "processedAt": "2024-01-15T10:40:00Z"
    },
  • "createdAt": "2024-01-15T10:00:00Z",
  • "updatedAt": "2024-01-15T10:40:00Z"
}

verifications

✨ List all KYC verifications

Authorizations:
bearerHttpAuthentication
query Parameters
number
integer (PageNumber) >= 0
Default: 0
Example: number=0

Page number

limit
integer (Limit) [ 1 .. 100 ]
Default: 10
Example: limit=10

Page limit

coachId
string <uuid> (CoachId)
Example: coachId=00000000-0000-1000-9000-510d9bb07630

Coach ID

header Parameters
x-current-user-id
required
string <uuid>

Responses

Response Schema: application/json
Array of objects
Array
id
required
string <uuid> (VerificationId)

KYC verification ID

coachId
required
string <uuid> (CoachId)

Coach ID

status
required
string (Status)
Enum: "pending" "avatar_verified" "passport_verified" "approved" "rejected" "admin_review_required"

Current status of the KYC verification process

currentStep
required
string (VerificationStep)
Enum: "initialize" "avatar_verification" "passport_verification" "image_matching" "admin_review" "completed"

Current step in the KYC verification process

object (AvatarVerification)
object (PassportVerification)
object (ImageMatchResult)
object (VerificationFailure)
object (AdminApproval)
notes
string

Additional notes or comments

createdAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

updatedAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

completedAt
string <date-time> (DateTime)

Date and time in RFC-3339

count
required
integer (Count)

Page entries count

page
required
integer (PageNumber) >= 0
Default: 0

Page number

limit
required
integer (Limit) [ 1 .. 100 ]
Default: 10

Page limit

total
required
integer (Total) >= 0
Default: 0

Total count

Response samples

Content type
application/json
{
  • "data": [
    • {
      • "id": "00000000-0000-1000-9000-55f01dda9dd0",
      • "coachId": "00000000-0000-1000-9000-55f01dda9dd0",
      • "status": "pending",
      • "currentStep": "passport_verification",
      • "avatarVerification": {
        },
      • "passportVerification": {
        },
      • "imageMatchResult": {
        },
      • "createdAt": "2024-01-15T10:00:00Z",
      • "updatedAt": "2024-01-15T10:40:00Z"
      }
    ],
  • "count": 10,
  • "page": 0,
  • "limit": 10,
  • "total": 1000
}

verifications/{id}

✨ Retrieve details of a specific KYC verification

Authorizations:
bearerHttpAuthentication
path Parameters
verificationId
required
string <uuid> (VerificationId)
Example: 00000000-0000-1000-9000-55f01dda9dd0

ID of the verification to retrieve

header Parameters
x-current-user-id
required
string <uuid>

Responses

Response Schema: application/json
id
required
string <uuid> (VerificationId)

KYC verification ID

coachId
required
string <uuid> (CoachId)

Coach ID

status
required
string (Status)
Enum: "pending" "avatar_verified" "passport_verified" "approved" "rejected" "admin_review_required"

Current status of the KYC verification process

currentStep
required
string (VerificationStep)
Enum: "initialize" "avatar_verification" "passport_verification" "image_matching" "admin_review" "completed"

Current step in the KYC verification process

object (AvatarVerification)
isHuman
required
boolean

Whether the avatar image contains a human face

processedAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

errorMessage
string

Error message if verification failed

object (PassportVerification)
ocrSuccess
required
boolean

Whether OCR processing was successful

object (PassportData)
firstName
required
string <string> (PassportFirstName)

First name exactly as in the passport

lastName
required
string <string> (PassportLastName)

Last name exactly as in the passport

passportNumber
required
string

Passport number extracted from passport

dateOfBirth
required
string <date> (PassportDoB)

Date of birth exactly as in the passport in RFC-3339 format (YYYY-MM-DD)

issuedDate
required
string <date> (Date)

Date in RFC-3339 format (YYYY-MM-DD)

placeOfBirth
required
string

Place of birth if available

middleName
required
string

Middle name if available

subdivision
required
string

Subdivision if available

processedAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

errorMessage
string

Error message if OCR failed

confidence
number <float> [ 0 .. 1 ]

Confidence score for OCR accuracy (0-1)

object (ImageMatchResult)
isMatched
required
boolean

Whether the images are considered a match based on threshold

processedAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

errorMessage
string

Error message if matching failed

object (VerificationFailure)
step
required
string (VerificationStep)
Enum: "initialize" "avatar_verification" "passport_verification" "image_matching" "admin_review" "completed"

Current step in the KYC verification process

reason
required
string
Enum: "avatar_not_human" "passport_ocr_failed" "passport_invalid_format" "images_no_match" "image_processing_error" "admin_review_required" "system_error"

Reason for the failure

occurredAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

details
string

Additional details about the failure

retryable
boolean
Default: false

Whether the verification can be retried

object (AdminApproval)
approved
required
boolean

Whether the verification is approved

reason
string
Enum: "document_unclear" "identity_mismatch" "fake_document" "insufficient_quality" "inappropriate_content"

Reason for rejection

notes
string <= 500 characters

Optional notes for the approval

reviewerId
string

ID of the admin who approved

notes
string

Additional notes or comments

createdAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

updatedAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

completedAt
string <date-time> (DateTime)

Date and time in RFC-3339

Response samples

Content type
application/json
{
  • "id": "00000000-0000-1000-9000-55f01dda9dd0",
  • "coachId": "00000000-0000-1000-9000-55f01dda9dd0",
  • "status": "pending",
  • "currentStep": "passport_verification",
  • "avatarVerification": {
    • "isHuman": true,
    • "confidence": 0.95,
    • "processedAt": "2024-01-15T10:30:00Z"
    },
  • "passportVerification": {
    • "ocrSuccess": true,
    • "passportData": {
      • "firstName": "John",
      • "lastName": "Doe",
      • "passportNumber": "A1234567",
      • "dateOfBirth": "1990-01-15",
      • "issuedDate": "2030-01-15",
      • "placeOfBirth": "New York, USA",
      • "middleName": "James",
      • "subdivision": "NY"
      },
    • "processedAt": "2024-01-15T10:35:00Z"
    },
  • "imageMatchResult": {
    • "matchScore": 0.87,
    • "isMatched": true,
    • "processedAt": "2024-01-15T10:40:00Z"
    },
  • "createdAt": "2024-01-15T10:00:00Z",
  • "updatedAt": "2024-01-15T10:40:00Z"
}

verifications/{id}

✨ Update a specific KYC passport data

Authorizations:
bearerHttpAuthentication
path Parameters
verificationId
required
string <uuid> (VerificationId)
Example: 00000000-0000-1000-9000-55f01dda9dd0

KYC verification ID

header Parameters
x-current-user-id
required
string <uuid>
Request Body schema: application/json
required
firstName
required
string <string> (PassportFirstName)

First name exactly as in the passport

lastName
required
string <string> (PassportLastName)

Last name exactly as in the passport

passportNumber
required
string

Passport number extracted from passport

dateOfBirth
required
string <date> (PassportDoB)

Date of birth exactly as in the passport in RFC-3339 format (YYYY-MM-DD)

issuedDate
required
string <date> (Date)

Date in RFC-3339 format (YYYY-MM-DD)

placeOfBirth
required
string

Place of birth if available

middleName
required
string

Middle name if available

subdivision
required
string

Subdivision if available

Responses

Request samples

Content type
application/json
{
  • "firstName": "John",
  • "lastName": "Doe",
  • "passportNumber": "A1234567",
  • "dateOfBirth": "1990-01-15",
  • "issuedDate": "2030-01-15",
  • "placeOfBirth": "New York, USA",
  • "middleName": "James",
  • "subdivision": "NY"
}

Response samples

Content type
application/json
{
  • "errors": [
    • {
      • "code": "validation",
      • "message": "string",
      • "endpoint": "string",
      • "requestId": "string"
      }
    ]
}

verifications/{id}/avatar

✨ Upload an avatar image to verify it contains a human face

Authorizations:
bearerHttpAuthentication
path Parameters
verificationId
required
string <uuid> (VerificationId)
Example: 00000000-0000-1000-9000-55f01dda9dd0

ID of the verification

header Parameters
x-current-user-id
required
string <uuid>
Request Body schema: application/json
required
fileKey
required
string (AvatarFileKey)

Key to avatar image bytes in S3

Responses

Response Schema: application/json
id
required
string <uuid> (VerificationId)

KYC verification ID

coachId
required
string <uuid> (CoachId)

Coach ID

status
required
string (Status)
Enum: "pending" "avatar_verified" "passport_verified" "approved" "rejected" "admin_review_required"

Current status of the KYC verification process

currentStep
required
string (VerificationStep)
Enum: "initialize" "avatar_verification" "passport_verification" "image_matching" "admin_review" "completed"

Current step in the KYC verification process

object (AvatarVerification)
isHuman
required
boolean

Whether the avatar image contains a human face

processedAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

errorMessage
string

Error message if verification failed

object (PassportVerification)
ocrSuccess
required
boolean

Whether OCR processing was successful

object (PassportData)
firstName
required
string <string> (PassportFirstName)

First name exactly as in the passport

lastName
required
string <string> (PassportLastName)

Last name exactly as in the passport

passportNumber
required
string

Passport number extracted from passport

dateOfBirth
required
string <date> (PassportDoB)

Date of birth exactly as in the passport in RFC-3339 format (YYYY-MM-DD)

issuedDate
required
string <date> (Date)

Date in RFC-3339 format (YYYY-MM-DD)

placeOfBirth
required
string

Place of birth if available

middleName
required
string

Middle name if available

subdivision
required
string

Subdivision if available

processedAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

errorMessage
string

Error message if OCR failed

confidence
number <float> [ 0 .. 1 ]

Confidence score for OCR accuracy (0-1)

object (ImageMatchResult)
isMatched
required
boolean

Whether the images are considered a match based on threshold

processedAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

errorMessage
string

Error message if matching failed

object (VerificationFailure)
step
required
string (VerificationStep)
Enum: "initialize" "avatar_verification" "passport_verification" "image_matching" "admin_review" "completed"

Current step in the KYC verification process

reason
required
string
Enum: "avatar_not_human" "passport_ocr_failed" "passport_invalid_format" "images_no_match" "image_processing_error" "admin_review_required" "system_error"

Reason for the failure

occurredAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

details
string

Additional details about the failure

retryable
boolean
Default: false

Whether the verification can be retried

object (AdminApproval)
approved
required
boolean

Whether the verification is approved

reason
string
Enum: "document_unclear" "identity_mismatch" "fake_document" "insufficient_quality" "inappropriate_content"

Reason for rejection

notes
string <= 500 characters

Optional notes for the approval

reviewerId
string

ID of the admin who approved

notes
string

Additional notes or comments

createdAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

updatedAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

completedAt
string <date-time> (DateTime)

Date and time in RFC-3339

Request samples

Content type
application/json
{
  • "fileKey": "some-key"
}

Response samples

Content type
application/json
{
  • "id": "00000000-0000-1000-9000-55f01dda9dd0",
  • "coachId": "00000000-0000-1000-9000-55f01dda9dd0",
  • "status": "pending",
  • "currentStep": "passport_verification",
  • "avatarVerification": {
    • "isHuman": true,
    • "confidence": 0.95,
    • "processedAt": "2024-01-15T10:30:00Z"
    },
  • "passportVerification": {
    • "ocrSuccess": true,
    • "passportData": {
      • "firstName": "John",
      • "lastName": "Doe",
      • "passportNumber": "A1234567",
      • "dateOfBirth": "1990-01-15",
      • "issuedDate": "2030-01-15",
      • "placeOfBirth": "New York, USA",
      • "middleName": "James",
      • "subdivision": "NY"
      },
    • "processedAt": "2024-01-15T10:35:00Z"
    },
  • "imageMatchResult": {
    • "matchScore": 0.87,
    • "isMatched": true,
    • "processedAt": "2024-01-15T10:40:00Z"
    },
  • "createdAt": "2024-01-15T10:00:00Z",
  • "updatedAt": "2024-01-15T10:40:00Z"
}

verifications/{id}/passport

✨ Upload a passport image for OCR text extraction and verification

Authorizations:
bearerHttpAuthentication
path Parameters
verificationId
required
string <uuid> (VerificationId)
Example: 00000000-0000-1000-9000-55f01dda9dd0

ID of the verification

header Parameters
x-current-user-id
required
string <uuid>
Request Body schema: application/json
required
fileKey
required
string (PassportFileKey)

Key to passport image bytes in S3

Responses

Response Schema: application/json
id
required
string <uuid> (VerificationId)

KYC verification ID

coachId
required
string <uuid> (CoachId)

Coach ID

status
required
string (Status)
Enum: "pending" "avatar_verified" "passport_verified" "approved" "rejected" "admin_review_required"

Current status of the KYC verification process

currentStep
required
string (VerificationStep)
Enum: "initialize" "avatar_verification" "passport_verification" "image_matching" "admin_review" "completed"

Current step in the KYC verification process

object (AvatarVerification)
isHuman
required
boolean

Whether the avatar image contains a human face

processedAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

errorMessage
string

Error message if verification failed

object (PassportVerification)
ocrSuccess
required
boolean

Whether OCR processing was successful

object (PassportData)
firstName
required
string <string> (PassportFirstName)

First name exactly as in the passport

lastName
required
string <string> (PassportLastName)

Last name exactly as in the passport

passportNumber
required
string

Passport number extracted from passport

dateOfBirth
required
string <date> (PassportDoB)

Date of birth exactly as in the passport in RFC-3339 format (YYYY-MM-DD)

issuedDate
required
string <date> (Date)

Date in RFC-3339 format (YYYY-MM-DD)

placeOfBirth
required
string

Place of birth if available

middleName
required
string

Middle name if available

subdivision
required
string

Subdivision if available

processedAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

errorMessage
string

Error message if OCR failed

confidence
number <float> [ 0 .. 1 ]

Confidence score for OCR accuracy (0-1)

object (ImageMatchResult)
isMatched
required
boolean

Whether the images are considered a match based on threshold

processedAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

errorMessage
string

Error message if matching failed

object (VerificationFailure)
step
required
string (VerificationStep)
Enum: "initialize" "avatar_verification" "passport_verification" "image_matching" "admin_review" "completed"

Current step in the KYC verification process

reason
required
string
Enum: "avatar_not_human" "passport_ocr_failed" "passport_invalid_format" "images_no_match" "image_processing_error" "admin_review_required" "system_error"

Reason for the failure

occurredAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

details
string

Additional details about the failure

retryable
boolean
Default: false

Whether the verification can be retried

object (AdminApproval)
approved
required
boolean

Whether the verification is approved

reason
string
Enum: "document_unclear" "identity_mismatch" "fake_document" "insufficient_quality" "inappropriate_content"

Reason for rejection

notes
string <= 500 characters

Optional notes for the approval

reviewerId
string

ID of the admin who approved

notes
string

Additional notes or comments

createdAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

updatedAt
required
string <date-time> (DateTime)

Date and time in RFC-3339

completedAt
string <date-time> (DateTime)

Date and time in RFC-3339

Request samples

Content type
application/json
{
  • "fileKey": "some-key"
}

Response samples

Content type
application/json
{
  • "id": "00000000-0000-1000-9000-55f01dda9dd0",
  • "coachId": "00000000-0000-1000-9000-55f01dda9dd0",
  • "status": "pending",
  • "currentStep": "passport_verification",
  • "avatarVerification": {
    • "isHuman": true,
    • "confidence": 0.95,
    • "processedAt": "2024-01-15T10:30:00Z"
    },
  • "passportVerification": {
    • "ocrSuccess": true,
    • "passportData": {
      • "firstName": "John",
      • "lastName": "Doe",
      • "passportNumber": "A1234567",
      • "dateOfBirth": "1990-01-15",
      • "issuedDate": "2030-01-15",
      • "placeOfBirth": "New York, USA",
      • "middleName": "James",
      • "subdivision": "NY"
      },
    • "processedAt": "2024-01-15T10:35:00Z"
    },
  • "imageMatchResult": {
    • "matchScore": 0.87,
    • "isMatched": true,
    • "processedAt": "2024-01-15T10:40:00Z"
    },
  • "createdAt": "2024-01-15T10:00:00Z",
  • "updatedAt": "2024-01-15T10:40:00Z"
}

verifications/status

✨ Get the current status and progress of a recent KYC verification for the current user

Authorizations:
bearerHttpAuthentication
header Parameters
x-current-user-id
required
string <uuid>

Responses

Response Schema: application/json
id
required
string <uuid> (VerificationId)

KYC verification ID

status
required
string (Status)
Enum: "pending" "avatar_verified" "passport_verified" "approved" "rejected" "admin_review_required"

Current status of the KYC verification process

currentStep
required
string (VerificationStep)
Enum: "initialize" "avatar_verification" "passport_verification" "image_matching" "admin_review" "completed"

Current step in the KYC verification process

required
object
required
object (AvatarVerified)
success
boolean
attempts
integer
required
object (PassportVerified)
success
boolean
attempts
integer
imagesMatched
required
boolean

Whether image matching is complete

nextStep
string (VerificationStep)
Enum: "initialize" "avatar_verification" "passport_verification" "image_matching" "admin_review" "completed"

Current step in the KYC verification process

createdAt
string <date-time> (DateTime)

Date and time in RFC-3339

updatedAt
string <date-time> (DateTime)

Date and time in RFC-3339

Response samples

Content type
application/json
{
  • "id": "00000000-0000-1000-9000-55f01dda9dd0",
  • "status": "pending",
  • "currentStep": "avatar_verification",
  • "progress": {
    • "avatarVerified": {
      • "success": true,
      • "attempts": 0
      },
    • "passportVerified": {
      • "success": true,
      • "attempts": 0
      },
    • "imagesMatched": true
    },
  • "nextStep": "avatar_verification",
  • "createdAt": "2024-11-29T12:09:53+00:00",
  • "updatedAt": "2024-11-29T12:09:53+00:00"
}

verifications/{id}/admin

✨ Admin endpoint to approve or reject a KYC verification

Authorizations:
bearerHttpAuthentication
path Parameters
verificationId
required
string <uuid> (VerificationId)
Example: 00000000-0000-1000-9000-55f01dda9dd0

KYC verification ID

header Parameters
x-current-user-id
required
string <uuid>
Request Body schema: application/json
required
approved
required
boolean

Whether the verification is approved

reason
string
Enum: "document_unclear" "identity_mismatch" "fake_document" "insufficient_quality" "inappropriate_content"

Reason for rejection

notes
string <= 500 characters

Optional notes for the approval

reviewerId
string

ID of the admin who approved

Responses

Response Schema: application/json
id
required
string <uuid> (VerificationId)

KYC verification ID

status
required
string (Status)
Enum: "pending" "avatar_verified" "passport_verified" "approved" "rejected" "admin_review_required"

Current status of the KYC verification process

currentStep
required
string (VerificationStep)
Enum: "initialize" "avatar_verification" "passport_verification" "image_matching" "admin_review" "completed"

Current step in the KYC verification process

required
object
required
object (AvatarVerified)
success
boolean
attempts
integer
required
object (PassportVerified)
success
boolean
attempts
integer
imagesMatched
required
boolean

Whether image matching is complete

nextStep
string (VerificationStep)
Enum: "initialize" "avatar_verification" "passport_verification" "image_matching" "admin_review" "completed"

Current step in the KYC verification process

createdAt
string <date-time> (DateTime)

Date and time in RFC-3339

updatedAt
string <date-time> (DateTime)

Date and time in RFC-3339

Request samples

Content type
application/json
{
  • "approved": true,
  • "notes": "All documents verified successfully",
  • "reviewerId": "admin-123"
}

Response samples

Content type
application/json
{
  • "id": "00000000-0000-1000-9000-55f01dda9dd0",
  • "status": "pending",
  • "currentStep": "avatar_verification",
  • "progress": {
    • "avatarVerified": {
      • "success": true,
      • "attempts": 0
      },
    • "passportVerified": {
      • "success": true,
      • "attempts": 0
      },
    • "imagesMatched": true
    },
  • "nextStep": "avatar_verification",
  • "createdAt": "2024-11-29T12:09:53+00:00",
  • "updatedAt": "2024-11-29T12:09:53+00:00"
}