Getting StartedUser KYC

Identity Verification (KYC)

Every individual user is verified in levels. Basic screening runs automatically when you create the user. Standard KYC verifies the user's identity document and selfie. Advanced KYC collects additional documents.

Before you start

Sandbox base URLhttps://sandbox-api.aparatech.io
AuthenticationHTTP Basic auth with your API username and password
MID headerRequired only if your account uses merchants. Format: customer_merchant_submerchant

All endpoints on this page are under /v1/public.

Levels

LevelWhat is checkedHow it runs
BasicScreening of the details sent when the user is createdAutomatically, after Create user
StandardIdentity document and selfieHosted flow, Sumsub import, or document upload

Flow

  1. Create the user. You receive a userId, and basic screening starts.
  2. Wait for basic screening to be approved.
  3. Run Standard KYC using one of the three methods.
  4. Check the KYC status.

Step 1: Create the user

POST /v1/public/users/individual

curl --location 'https://sandbox-api.aparatech.io/v1/public/users/individual' \
  -u 'USERNAME:PASSWORD' \
  --header 'Content-Type: application/json' \
  --data '{
    "firstName": "John",
    "lastName": "Doe",
    "isAgeAllowed": true,
    "email": "john.doe@example.com",
    "phone": "2125551234",
    "phoneCode": "+1",
    "country": "US",
    "countryOfResidence": "US",
    "date": "15-06-1990",
    "gender": "male",
    "address": {
      "street": "123 Main Street",
      "city": "New York",
      "state": "NY",
      "postalCode": "10001"
    }
  }'
FieldRequiredFormat
firstNameYes1–50 characters
lastNameYes1–50 characters
isAgeAllowedYesBoolean. Confirms the user is at least 18 and not more then 70. false is rejected with AGE_LIMIT_ERROR
emailYesValid email, up to 100 characters
phoneYes8–15 digits, without the country code
phoneCodeYesCountry calling code, for example +1
countryYesISO 3166-1 alpha-2 code, for example US
countryOfResidenceYesISO 3166-1 alpha-2 code
address.streetYesText
address.cityYesText
address.stateYesText
address.postalCodeYesText
dateNoDate of birth, DD-MM-YYYY. When sent, the user must be at least 18
genderNomale or female

Response

{
  "status": "success",
  "data": {
    "userId": "UX-261102080659432863"
  }
}

If a user with the same email or phone already exists, the response returns that user's userId with "code": "USER_ALREADY_EXISTS". Store the userId: every KYC call needs it.

Step 2: Wait for basic screening

Basic screening runs in the background after the user is created. Until it is approved, hosted verification and Sumsub import return BASIC_KYC_NOT_APPROVED.

To check it

curl --location 'https://sandbox-api.aparatech.io/v1/public/users/individual?email=john.doe@example.com' \
  -u 'USERNAME:PASSWORD'

Step 3: Run Standard KYC

MethodWhen to use itEndpoint
Hosted verification (default)The user completes verification on the Apara pagePOST /v1/public/kyc/standard

Hosted verification

curl --location 'https://sandbox-api.aparatech.io/v1/public/kyc/standard' \
  -u 'USERNAME:PASSWORD' \
  --header 'Content-Type: application/json' \
  --data '{
    "userId": "UX-261102080659432863",
    "redirectUrl": "https://yourapp.example.com/kyc/complete"
  }'
FieldRequiredFormat
userIdYesThe userId from Create user, starts with UX-
redirectUrlYesValid URL. The user returns here after verification
{
  "status": "success",
  "data": {
    "userId": "UX-261102080659432863",
    "kycUrl": "https://sandbox-pay-widget.aparatech.io/user/initiate-kyc?token=..."
  }
}

Send the user to kycUrl. When they finish, they return to your redirectUrl. Then check the status.

Step 4: Check the KYC status

GET /v1/public/kyc/status/{userId}

curl --location 'https://sandbox-api.aparatech.io/v1/public/kyc/status/UX-261102080659432863' \
  -u 'USERNAME:PASSWORD'
{
  "rejectLabels": [],
  "status": "kyc_success"
}

status is the user's current status. rejectLabels lists the reasons when verification is rejected, and is empty otherwise. This response is not wrapped in status and data.

Statuses

StatusMeaning
user_createdUser created. Basic screening has not finished
user_approvedBasic screening approved
user_rejectedBasic screening rejected. KYC cannot be started
kyc_initiatedHosted Standard KYC started. Waiting for the user
kyc_manual_reviewUnder manual review
kyc_successStandard KYC approved
kyc_failedVerification failed
kyc_rejectedVerification rejected. See rejectLabels
kyc_expiredVerification expired
kyc_blockedUser blocked