Skip to main content

User Identification

Verify user identity by submitting identity documents and face photos to increase transfer limits and unlock features.

KYC Requirement

User identification is required for increased limits and certain features as per regulatory requirements.

What is User Identification?​

User Identification API allows you to:

  • 📄 Submit identity documents (ID, passport, residence permit)
  • 📸 Provide face photos for identity verification
  • ✅ Verify user identity to unlock features
  • 📈 Increase transfer limits after successful verification

Identification Process​

Workflow

Status Flow

StatusDescriptionNext Action
waitingRequest created, awaiting documentsUpload documents & photos
processingDocuments uploaded, being processedWait for review
pendingQueued for manual reviewWait for support
reviewedReviewed by supportCheck comment field

Quick Start Example​

async function identifyUser(userId) {
// 1. Create identification request
const request = await api.createIdentificationRequest(userId);

console.log(`Request ID: ${request.id}`);
console.log(`Status: ${request.status}`); // "waiting"

// 2. Create identity document
const document = await api.createIdentityDocument(request.id, {
type: 'identity_card',
personal_number: '12345678901',
first_name: 'John',
last_name: 'Doe',
date_of_birth: '1990-01-15',
country: 'LT'
});

// 3. Upload document images (front & back)
await api.uploadDocumentImage(document.id, 0, frontImageBlob);
await api.uploadDocumentImage(document.id, 1, backImageBlob);

// 4. Upload face photo
await api.uploadFacePhoto(request.id, 0, facePhotoBlob);

// 5. Submit for review
await api.submitIdentificationRequest(request.id);

console.log('✅ Submitted for review');

// 6. Poll for result
return await waitForReview(request.id);
}

async function waitForReview(requestId) {
while (true) {
const request = await api.getIdentificationRequest(requestId);

if (request.status === 'reviewed') {
console.log(`Review complete: ${request.comment}`);
return request;
}

await new Promise(resolve => setTimeout(resolve, 60000)); // Check every minute
}
}

Supported Documents​

Identity Card

  • Type: identity_card
  • Images Required: Front and back
  • Most Common: EU countries

Passport

  • Type: passport
  • Images Required: Main page with photo
  • International: All countries

Residence Permit

  • Type: residence_permit
  • Images Required: Front and back
  • For: Non-citizens residing in country

Image Requirements​

Document Photos

  • ✅ Clear and legible - All text must be readable
  • ✅ Full document - All edges visible
  • ✅ Good lighting - No shadows or glare
  • ✅ High resolution - Minimum 1200x900 pixels
  • ❌ No filters - Original unedited photos only

Face Photos

  • ✅ Face clearly visible - Front-facing, eyes open
  • ✅ Good lighting - Natural or bright light
  • ✅ Neutral background - Plain wall preferred
  • ✅ Recent photo - Taken within last 6 months
  • ❌ No accessories - Remove sunglasses, hats

Advanced Topics​

API Endpoints

Identification Requests

EndpointMethodDescription
/rest/v1/user/{id}/identification-requestPOSTCreate request for user
/rest/v1/identification-requestPOSTCreate request with phone
/rest/v1/identification-request/{id}GETGet request details
/rest/v1/user/{id}/identification-requestsGETList user's requests
/rest/v1/identification-request/{id}/submitPUTSubmit for review

Identity Documents

EndpointMethodDescription
/rest/v1/identification-request/{id}/identity-documentPOSTCreate document
/rest/v1/identity-document/{id}/image/{order}PUTUpload document image

Face Photos

EndpointMethodDescription
/rest/v1/identification-request/{id}/face-photo/image/{order}PUTUpload face photo
Best Practices

1. Validate Images Before Upload

function validateImage(file) {
// Check file size (max 10MB)
if (file.size > 10 * 1024 * 1024) {
throw new Error('Image too large (max 10MB)');
}

// Check file type
if (!['image/jpeg', 'image/png'].includes(file.type)) {
throw new Error('Only JPEG and PNG allowed');
}

return true;
}

2. Provide User Guidance

const requirements = {
document: [
'Take photo in good lighting',
'Ensure all text is readable',
'Include all document edges',
'Avoid shadows and glare'
],
face: [
'Face directly at camera',
'Remove sunglasses and hat',
'Use neutral background',
'Ensure good lighting'
]
};

3. Handle Upload Errors

async function safeUpload(uploadFn, retries = 3) {
for (let i = 0; i < retries; i++) {
try {
return await uploadFn();
} catch (error) {
if (i === retries - 1) throw error;
await new Promise(r => setTimeout(r, 2000 * (i + 1)));
}
}
}
Relation Status

related Request is associated with authenticated user.

relating Request is being associated with user (via SMS code).

unrelated Request created with phone number, not yet linked to user.

After Review

Successful Verification

When status becomes reviewed with positive outcome:

  • ✅ Transfer limits increased
  • ✅ Additional features unlocked
  • ✅ Comment explains what was granted

Additional Information Needed

If more information required:

  • â„šī¸ Comment explains what's needed
  • 📧 Support may contact you directly
  • 🔄 May need to create new request
Security & Privacy

Data Protection

  • 🔒 All images encrypted in transit and at rest
  • 🔒 Access restricted to authorized support staff
  • 🔒 Images deleted after verification (as per policy)
  • 🔒 Compliance with GDPR and data protection laws

Best Practices

  • ✅ Use HTTPS for all API calls
  • ✅ Don't store images on your server
  • ✅ Inform users about data usage
  • ✅ Implement proper error handling
  • ❌ Don't log or cache sensitive data
Common Errors

"invalid_state" Error

Cause: Request not in waiting status

Solution:

const request = await api.getIdentificationRequest(requestId);
if (request.status !== 'waiting') {
throw new Error(`Cannot upload - status is ${request.status}`);
}

Need Help?​

Technical Support: tech_support@paysera.com - Subject: User Identification API

Identification Support: tech_support@paysera.com - For questions about specific identification requests