Docs / API Reference / KYC & KYB

KYC & KYB

Know Your Customer (KYC) and Know Your Business (KYB) verification is mandatory for users who send funds through the PayItFast platform. PayItFast uses a tiered verification system with transaction limits that vary by jurisdiction. Verification is powered by Sumsub under the hood.

Prerequisite

Users must be created via the User Management endpoints before KYC or KYB can be submitted. Level 0 (basic) data is collected during account creation.

KYC Overview

Verification Levels

PayItFast uses a tiered KYC system. Each level unlocks progressively higher transaction limits.

Level Name Requirements Purpose
Level 0 Basic KYC (Trial) First name, last name, DOB, country, email, phone, address Collected during account creation. Allows trial transactions.
Level 1 Standard KYC ID document, selfie, address verification, phone confirmation Enables standard transaction limits
Level 2 Enhanced KYC Proof of source of funds (PSoF), address proof Enables higher transaction limits
Automatic Prompting

When transaction limits are exceeded, the API will return STANDARD_KYC_REQUIRED (Level 1 needed) or ENHANCED_KYC_REQUIRED (Level 2 needed) to indicate which verification tier is required.

KYC Statuses

Status Description Retryable
user_created Account established --
user_approved Basic screening clearance --
user_rejected Rejected by PayItFast --
user_manual_review Compliance team reviewing --
kyc_initiated Verification process started --
kyc_pending Documentation submitted, awaiting verification --
kyc_success User successfully verified --
kyc_failed Verification unsuccessful Yes
kyc_manual_review Compliance reviewing submission Yes
kyc_edd_pending Advanced verification initiated Yes
kyc_rejected Permanently rejected No
kyc_blocked Blocked status No
kyc_expired Credentials expired during monitoring Yes

Endpoints Overview

KYC Endpoints

POST /v2/kyc/standard Submit Standard KYC (Level 1)
POST /v2/kyc/advanced Submit Advanced KYC (Level 2)
POST /v2/kyc/share/same-vendor Share KYC via Sumsub token
POST /v2/kyc/share/third-vendor Share KYC from third-party provider
POST /v2/kyc/share/add-docs Submit additional KYC documents
GET /v2/kyc/user Get KYC status

KYB Endpoints

POST /v2/kyb/standard Submit Standard KYB (Level 1)
POST /v2/kyb/advanced Submit Advanced KYB (Level 2)
GET /v2/kyb/user Get KYB status

Submit Standard KYC (Level 1)

Initiate the Standard KYC verification flow for an individual user. This returns a redirect URL that opens the PayItFast KYC widget (powered by Sumsub), where the user completes country selection, document upload, liveness verification, and review.

POST /v2/kyc/standard

Request Body

Parameter Type Required Description
email string Required User email. Use @kycfailure.sandbox domain to simulate failure in sandbox.
redirectUrl string Required URL to redirect the user after KYC submission
firstName string Optional First name (pre-fills the KYC widget)
lastName string Optional Last name (pre-fills the KYC widget)
country string Optional Country code (pre-fills the KYC widget)

Request Example

JSON
POST /v2/kyc/standard
Content-Type: application/json
Authorization: Basic <base64(username:password)>

{
  "email": "john@example.com",
  "redirectUrl": "https://www.yourapp.com/kyc-complete",
  "firstName": "John",
  "lastName": "Doe",
  "country": "US"
}

Response

200 OK
JSON
{
  "redirectUrl": "https://pay-widget.payitfast.com/user/initiate-kyc?token=TOKEN",
  "userId": "UX-1231231253213"
}

Response Fields

Field Type Description
redirectUrl string URL to redirect the user to the KYC verification widget
userId string Unique user identifier

Submit Advanced KYC (Level 2)

Initiate the Advanced (Enhanced) KYC verification flow for a user who has already passed Level 1. This is required when the user exceeds standard transaction limits. The user will be asked to provide proof of source of funds and address proof.

POST /v2/kyc/advanced

Request Body

Parameter Type Required Description
email string Required User email address
redirectUrl string Required URL to redirect the user after submission

Request Example

JSON
POST /v2/kyc/advanced
Content-Type: application/json
Authorization: Basic <base64(username:password)>

{
  "email": "john@example.com",
  "redirectUrl": "https://www.yourapp.com/kyc-advanced-complete"
}

Response

200 OK
JSON
{
  "redirectUrl": "https://pay-widget.payitfast.com/user/initiate-advanced-kyc?token=TOKEN",
  "userId": "UX-1231231253213"
}

Share KYC via Sumsub Token

For organizations with a tripartite Sumsub agreement. Transfers existing KYC data from your Sumsub account to PayItFast via a share token, allowing users to skip the verification widget entirely.

POST /v2/kyc/share/same-vendor

Request Body

Parameter Type Required Description
email string Required User email address
name string Required Full name of the user
token string Required Sumsub share token (see below for how to obtain)
Obtaining the Sumsub Share Token

Call the Sumsub API to generate a share token for an existing applicant:

cURL
curl --request POST \
  'https://api.sumsub.com/resources/accessTokens/-/shareToken?applicantId={{sumsubApplicantId}}&forClientId=payitfast.com_123'

Request Example

JSON
POST /v2/kyc/share/same-vendor
Content-Type: application/json
Authorization: Basic <base64(username:password)>

{
  "email": "john@doe.com",
  "name": "John Doe",
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

Response

200 OK
JSON
{
  "email": "john@doe.com",
  "status": "kyc_success",
  "userId": "UX-1201923942",
  "userName": "John Doe"
}

Error Responses

HTTP Status Error Code Description
422 INVALID_TOKEN_DETAILS Email or phone does not match the share token data
422 TOKEN_DATA_INCOMPLETE Required KYC information is missing from the token
400 KYC_IMPORT_FAILED Invalid token format

Share KYC from Third-Party Provider

For partners using a non-Sumsub KYC provider. Submit identity documents directly via a multipart form upload. The documents will be reviewed by the compliance team.

POST /v2/kyc/share/third-vendor
Content Type

This endpoint requires Content-Type: multipart/form-data since it accepts file uploads.

Request Body (multipart/form-data)

Parameter Type Required Description
email string Required User email
userId string Required Customer unique ID
firstName string Required Given name
lastName string Required Family name
gender string Required "male" or "female"
dob string Required Date of birth (YYYY-MM-DD)
phoneNo string Required Phone with +countryCode prefix (e.g. +12125551234)
country string Required Residence country (ISO 3166-1 alpha-2)
nationality string Required Citizenship (ISO 3166-1 alpha-2)
street string Required Street address
city string Required City
state string Required State / Province
postalCode string Required Postal code
idDocType string Required "passport", "id_card", or "drivers"
idDocFrontSide binary Required Front side of ID document (image file)
idDocBackSide binary Required Back side of ID document (image file)
idDocIssuerCountry string Required Document issuing country (ISO 3166-1 alpha-2)
idDocExpiryDate string Required Document expiry date (YYYY-MM-DD)
idDocUserName string Required Name as printed on the document
selfie binary Required User photograph / selfie (image file)

Request Example

cURL
curl -X POST https://sandbox-api.payitfast.com/v2/kyc/share/third-vendor \
  -H "Authorization: Basic <base64(username:password)>" \
  -F "email=john@example.com" \
  -F "userId=UX-241125161812424" \
  -F "firstName=John" \
  -F "lastName=Doe" \
  -F "gender=male" \
  -F "dob=1990-05-15" \
  -F "phoneNo=+12125551234" \
  -F "country=US" \
  -F "nationality=US" \
  -F "street=123 Main St" \
  -F "city=Springfield" \
  -F "state=IL" \
  -F "postalCode=62701" \
  -F "idDocType=passport" \
  -F "idDocFrontSide=@/path/to/passport-front.jpg" \
  -F "idDocBackSide=@/path/to/passport-back.jpg" \
  -F "idDocIssuerCountry=US" \
  -F "idDocExpiryDate=2030-12-31" \
  -F "idDocUserName=John Doe" \
  -F "selfie=@/path/to/selfie.jpg"

Response

200 OK
JSON
{
  "status": "kyc_pending"
}

Add Additional Documents

Submit additional supporting documents for a user whose transaction volume has reached a threshold requiring enhanced documentation, or when the compliance team has requested supplementary evidence.

POST /v2/kyc/share/add-docs
Content Type

This endpoint requires Content-Type: multipart/form-data since it accepts file uploads.

Request Body (multipart/form-data)

Parameter Type Required Description
email string Required User email
additionalDocType string Required Document type (e.g. "bank_statement")
additionalDoc binary Required PDF file of the supporting document

Request Example

cURL
curl -X POST https://sandbox-api.payitfast.com/v2/kyc/share/add-docs \
  -H "Authorization: Basic <base64(username:password)>" \
  -F "email=john@example.com" \
  -F "additionalDocType=bank_statement" \
  -F "additionalDoc=@/path/to/bank_statement.pdf"

Get KYC Status

Retrieve the current KYC verification status for an individual user. If the KYC was rejected, the response includes rejectLabels describing the reasons.

GET /v2/kyc/user

Query Parameters

Parameter Type Required Description
email string Required User email address

Request Example

HTTP
GET /v2/kyc/user?email=john@example.com
Authorization: Basic <base64(username:password)>

Response

200 OK
JSON
{
  "status": "kyc_success",
  "rejectLabels": []
}

Response Fields

Field Type Description
status string Current KYC status (see KYC Statuses table)
rejectLabels array Array of rejection reason codes (empty when not rejected). See Reject Labels.

Submit Standard KYB (Level 1)

Initiate the Standard KYB verification for a business user. Basic KYB must be approved before Standard KYB can be submitted. The response contains a verification link that expires in 12 hours.

POST /v2/kyb/standard

Request Body

Parameter Type Required Description
email string Required Business email address

Request Example

JSON
POST /v2/kyb/standard
Content-Type: application/json
Authorization: Basic <base64(username:password)>

{
  "email": "finance@acmecorp.com"
}

Response

200 OK
JSON
{
  "link": "https://verify.payitfast.com/?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
  "expiresIn": "12h"
}

Response Fields

Field Type Description
link string Verification URL to redirect the business user to complete KYB
expiresIn string Link expiry duration (e.g. "12h")

Error Responses

HTTP Status Error Code Description
400 BASIC_KYB_NOT_APPROVED Basic KYB must be approved before Standard KYB can be submitted
400 STANDARD_KYB_ALREADY_APPROVED Standard KYB has already been completed for this user
400 USER_BLOCKED_OR_REJECTED The user account is blocked or rejected
500 KYB_LINK_GENERATION_FAILED Internal error generating the verification link

Submit Advanced KYB (Level 2)

Initiate the Advanced KYB verification for a business user. Standard KYB must be approved before Advanced KYB can be submitted. Uses the same request and response structure as Standard KYB.

POST /v2/kyb/advanced

Request Body

Parameter Type Required Description
email string Required Business email address

Request Example

JSON
POST /v2/kyb/advanced
Content-Type: application/json
Authorization: Basic <base64(username:password)>

{
  "email": "finance@acmecorp.com"
}

Response

200 OK
JSON
{
  "link": "https://verify.payitfast.com/?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
  "expiresIn": "12h"
}

Error Responses

HTTP Status Error Code Description
400 STANDARD_KYB_NOT_APPROVED Standard KYB must be approved before Advanced KYB can be submitted
400 ADVANCED_KYB_ALREADY_APPROVED Advanced KYB has already been completed for this user
400 USER_BLOCKED_OR_REJECTED The user account is blocked or rejected

Get KYB Status

Retrieve the current KYB verification status for a business user.

GET /v2/kyb/user

Query Parameters

Parameter Type Required Description
email string Required Business email address

Request Example

HTTP
GET /v2/kyb/user?email=finance@acmecorp.com
Authorization: Basic <base64(username:password)>

Response

200 OK
JSON
{
  "status": "user_approved",
  "rejectLabels": []
}

KYB Status Values

Status Description
user_approved Business user approved
kyb_pending KYB verification in progress
user_rejected Business user rejected
kyb_rejected KYB verification rejected
kyb_blocked Business user blocked
kyb_manual_review Under manual compliance review

Reject Labels

When a KYC submission is rejected, the rejectLabels array in the status response contains one or more of the following codes explaining the reason for rejection.

Document Issues

Label Description
DIGITAL_DOCUMENT Digital version submitted instead of physical document
DOCUMENT_DAMAGED ID document too damaged to read
DOCUMENT_PAGE_MISSING Both sides of the document are required
INCOMPLETE_DOCUMENT Document in incomplete format
SCREENSHOTS Screenshots are not accepted
UNSATISFACTORY_PHOTOS Photos are illegible, blurred, or cropped

Identity Verification

Label Description
BAD_FACE_MATCHING Face mismatch between selfie and ID photo
BAD_SELFIE Selfie test failed
SELFIE_MISMATCH Selfie does not match the submitted documents

Data Inconsistencies

Label Description
AGE_REQUIREMENT_MISMATCH User outside the 18-70 age range
PROBLEMATIC_APPLICANT_DATA DOB, name, or gender mismatch between fields
INCONSISTENT_PROFILE Documents appear to belong to different people

Fraud & Compliance

Label Description
ADVERSE_MEDIA Flagged in adverse media, under compliance review
BLACKLIST / BLOCKLIST Suspected fraudulent account
CRIMINAL Convicted criminal
FORGERY Deep fake or document tampering detected
FRAUDULENT_PATTERNS Fraudulent behavior patterns detected
PEP Politically exposed person
SANCTIONS Flagged on international sanctions lists

Administrative

Label Description
DUPLICATE Same ID document used with multiple email addresses
EXPIRATION_DATE Document expired or expires within 1 month
ID_INVALID Invalid identity document
INCOMPATIBLE_LANGUAGE Document language not supported
COMPROMISED_PERSONS Incomplete name on document
SPAM Irrelevant images submitted or 6+ consecutive failures
GRAPHIC_EDITOR Document appears to have been edited with graphics tools

Supported ID Documents

The following identity document types are accepted for KYC verification.

Document Type Supported Countries
National ID All 69 supported countries
Passport All countries except Brazil (BR)
Driving License Australia (AU), Canada (CA), United States (US) only

Next Steps

After completing KYC or KYB verification, users can begin transacting on the platform:

Orders & Payments

Create payin and payout orders once the user has passed verification.

View Orders docs

Webhooks

Receive real-time notifications for KYC status changes including kyc_success, kyc_rejected, and more.

View Webhooks docs