Appearance
YeboVerify Code Examples
cURL
Selfie Match Verification
bash
curl -X POST https://api.yeboverify.com/v1/verify/selfie-match \
-H "X-API-Key: your_api_key" \
-F "selfie=@/path/to/selfie.jpg" \
-F "profilePictureUrl=https://example.com/user/profile.jpg" \
-F "externalRef=user_123"ID Document Verification
bash
curl -X POST https://api.yeboverify.com/v1/verify/id-document \
-H "X-API-Key: your_api_key" \
-F "selfie=@/path/to/selfie.jpg" \
-F "idFront=@/path/to/id-front.jpg" \
-F "idBack=@/path/to/id-back.jpg" \
-F "externalRef=user_123"List Verifications
bash
curl -X GET "https://api.yeboverify.com/v1/verifications?page=1&limit=20" \
-H "X-API-Key: your_api_key"Get Verification Details
bash
curl -X GET https://api.yeboverify.com/v1/verifications/vrf_id_abc123 \
-H "X-API-Key: your_api_key"Node.js
Installation
bash
npm install node-fetch form-data
# or with axios
npm install axios form-dataSelfie Match Verification
javascript
const fs = require('fs');
const FormData = require('form-data');
async function verifySelfieMatch(selfiePath, profilePictureUrl, externalRef) {
const form = new FormData();
form.append('selfie', fs.createReadStream(selfiePath));
form.append('profilePictureUrl', profilePictureUrl);
if (externalRef) {
form.append('externalRef', externalRef);
}
const response = await fetch('https://api.yeboverify.com/v1/verify/selfie-match', {
method: 'POST',
headers: {
'X-API-Key': process.env.YEBOVERIFY_API_KEY,
...form.getHeaders(),
},
body: form,
});
const result = await response.json();
if (!result.success) {
throw new Error(result.error.message);
}
return result.data;
}
// Usage
const result = await verifySelfieMatch(
'./selfie.jpg',
'https://example.com/profile.jpg',
'user_123'
);
console.log('Same person:', result.samePerson);
console.log('Match score:', result.matchScore);
console.log('Confidence:', result.confidence);ID Document Verification
javascript
const fs = require('fs');
const FormData = require('form-data');
async function verifyIDDocument(selfiePath, idFrontPath, idBackPath, externalRef) {
const form = new FormData();
form.append('selfie', fs.createReadStream(selfiePath));
form.append('idFront', fs.createReadStream(idFrontPath));
if (idBackPath) {
form.append('idBack', fs.createReadStream(idBackPath));
}
if (externalRef) {
form.append('externalRef', externalRef);
}
const response = await fetch('https://api.yeboverify.com/v1/verify/id-document', {
method: 'POST',
headers: {
'X-API-Key': process.env.YEBOVERIFY_API_KEY,
...form.getHeaders(),
},
body: form,
});
const result = await response.json();
if (!result.success) {
throw new Error(result.error.message);
}
return result.data;
}
// Usage
const result = await verifyIDDocument(
'./selfie.jpg',
'./id-front.jpg',
'./id-back.jpg',
'user_123'
);
console.log('Decision:', result.decision);
console.log('Name:', result.documentData.names, result.documentData.surname);
console.log('ID Number:', result.documentData.idNumber);YeboVerify Client Class
javascript
const fs = require('fs');
const FormData = require('form-data');
class YeboVerifyClient {
constructor(apiKey) {
this.apiKey = apiKey;
this.baseUrl = 'https://api.yeboverify.com';
}
async selfieMatch(selfiePath, profilePictureUrl, options = {}) {
const form = new FormData();
form.append('selfie', fs.createReadStream(selfiePath));
form.append('profilePictureUrl', profilePictureUrl);
if (options.externalRef) {
form.append('externalRef', options.externalRef);
}
return this._request('POST', '/v1/verify/selfie-match', form);
}
async idDocument(selfiePath, idFrontPath, options = {}) {
const form = new FormData();
form.append('selfie', fs.createReadStream(selfiePath));
form.append('idFront', fs.createReadStream(idFrontPath));
if (options.idBackPath) {
form.append('idBack', fs.createReadStream(options.idBackPath));
}
if (options.externalRef) {
form.append('externalRef', options.externalRef);
}
if (options.documentType) {
form.append('documentType', options.documentType);
}
return this._request('POST', '/v1/verify/id-document', form);
}
async listVerifications(options = {}) {
const params = new URLSearchParams();
if (options.page) params.append('page', options.page);
if (options.limit) params.append('limit', options.limit);
if (options.status) params.append('status', options.status);
const query = params.toString() ? `?${params.toString()}` : '';
return this._request('GET', `/v1/verifications${query}`);
}
async getVerification(verificationId) {
return this._request('GET', `/v1/verifications/${verificationId}`);
}
async _request(method, path, body = null) {
const headers = {
'X-API-Key': this.apiKey,
};
if (body instanceof FormData) {
Object.assign(headers, body.getHeaders());
}
const response = await fetch(`${this.baseUrl}${path}`, {
method,
headers,
body,
});
const result = await response.json();
if (!result.success) {
const error = new Error(result.error.message);
error.code = result.error.code;
throw error;
}
return result.data;
}
}
// Usage
const client = new YeboVerifyClient(process.env.YEBOVERIFY_API_KEY);
// Selfie match
const selfieResult = await client.selfieMatch('./selfie.jpg', 'https://example.com/profile.jpg');
// ID document verification
const idResult = await client.idDocument('./selfie.jpg', './id-front.jpg', {
idBackPath: './id-back.jpg',
externalRef: 'user_123',
});
// List verifications
const verifications = await client.listVerifications({ page: 1, limit: 10 });Python
Installation
bash
pip install requestsSelfie Match Verification
python
import requests
import os
def verify_selfie_match(selfie_path, profile_picture_url, external_ref=None):
url = 'https://api.yeboverify.com/v1/verify/selfie-match'
headers = {
'X-API-Key': os.environ.get('YEBOVERIFY_API_KEY')
}
with open(selfie_path, 'rb') as selfie_file:
files = {
'selfie': selfie_file
}
data = {
'profilePictureUrl': profile_picture_url
}
if external_ref:
data['externalRef'] = external_ref
response = requests.post(url, headers=headers, files=files, data=data)
result = response.json()
if not result.get('success'):
raise Exception(result['error']['message'])
return result['data']
# Usage
result = verify_selfie_match(
'./selfie.jpg',
'https://example.com/profile.jpg',
'user_123'
)
print(f"Same person: {result['samePerson']}")
print(f"Match score: {result['matchScore']}")
print(f"Confidence: {result['confidence']}")ID Document Verification
python
import requests
import os
def verify_id_document(selfie_path, id_front_path, id_back_path=None, external_ref=None):
url = 'https://api.yeboverify.com/v1/verify/id-document'
headers = {
'X-API-Key': os.environ.get('YEBOVERIFY_API_KEY')
}
files = {}
data = {}
try:
files['selfie'] = open(selfie_path, 'rb')
files['idFront'] = open(id_front_path, 'rb')
if id_back_path:
files['idBack'] = open(id_back_path, 'rb')
if external_ref:
data['externalRef'] = external_ref
response = requests.post(url, headers=headers, files=files, data=data)
finally:
for f in files.values():
f.close()
result = response.json()
if not result.get('success'):
raise Exception(result['error']['message'])
return result['data']
# Usage
result = verify_id_document(
'./selfie.jpg',
'./id-front.jpg',
'./id-back.jpg',
'user_123'
)
print(f"Decision: {result['decision']}")
print(f"Name: {result['documentData']['names']} {result['documentData']['surname']}")
print(f"ID Number: {result['documentData']['idNumber']}")YeboVerify Client Class
python
import requests
import os
from typing import Optional, Dict, Any
class YeboVerifyClient:
def __init__(self, api_key: str):
self.api_key = api_key
self.base_url = 'https://api.yeboverify.com'
def selfie_match(
self,
selfie_path: str,
profile_picture_url: str,
external_ref: Optional[str] = None
) -> Dict[str, Any]:
"""Compare a selfie against a profile picture URL."""
with open(selfie_path, 'rb') as selfie_file:
files = {'selfie': selfie_file}
data = {'profilePictureUrl': profile_picture_url}
if external_ref:
data['externalRef'] = external_ref
return self._request('POST', '/v1/verify/selfie-match', files=files, data=data)
def id_document(
self,
selfie_path: str,
id_front_path: str,
id_back_path: Optional[str] = None,
external_ref: Optional[str] = None,
document_type: Optional[str] = None
) -> Dict[str, Any]:
"""Full ID document verification with OCR and face matching."""
files = {}
data = {}
try:
files['selfie'] = open(selfie_path, 'rb')
files['idFront'] = open(id_front_path, 'rb')
if id_back_path:
files['idBack'] = open(id_back_path, 'rb')
if external_ref:
data['externalRef'] = external_ref
if document_type:
data['documentType'] = document_type
return self._request('POST', '/v1/verify/id-document', files=files, data=data)
finally:
for f in files.values():
f.close()
def list_verifications(
self,
page: int = 1,
limit: int = 20,
status: Optional[str] = None
) -> Dict[str, Any]:
"""List verifications for your business."""
params = {'page': page, 'limit': limit}
if status:
params['status'] = status
return self._request('GET', '/v1/verifications', params=params)
def get_verification(self, verification_id: str) -> Dict[str, Any]:
"""Get details of a specific verification."""
return self._request('GET', f'/v1/verifications/{verification_id}')
def _request(
self,
method: str,
path: str,
files: Optional[Dict] = None,
data: Optional[Dict] = None,
params: Optional[Dict] = None
) -> Dict[str, Any]:
headers = {'X-API-Key': self.api_key}
response = requests.request(
method,
f'{self.base_url}{path}',
headers=headers,
files=files,
data=data,
params=params
)
result = response.json()
if not result.get('success'):
raise YeboVerifyError(
result['error']['message'],
result['error']['code']
)
return result['data']
class YeboVerifyError(Exception):
def __init__(self, message: str, code: str):
self.message = message
self.code = code
super().__init__(f"[{code}] {message}")
# Usage
client = YeboVerifyClient(os.environ.get('YEBOVERIFY_API_KEY'))
# Selfie match
selfie_result = client.selfie_match('./selfie.jpg', 'https://example.com/profile.jpg')
# ID document verification
id_result = client.id_document(
'./selfie.jpg',
'./id-front.jpg',
id_back_path='./id-back.jpg',
external_ref='user_123'
)
# List verifications
verifications = client.list_verifications(page=1, limit=10)Browser (JavaScript/TypeScript)
Selfie Match with File Input
javascript
async function verifySelfie(selfieFile, profilePictureUrl) {
const formData = new FormData();
formData.append('selfie', selfieFile);
formData.append('profilePictureUrl', profilePictureUrl);
const response = await fetch('https://api.yeboverify.com/v1/verify/selfie-match', {
method: 'POST',
headers: {
'X-API-Key': 'your_api_key', // Note: Don't expose API keys in client-side code!
},
body: formData,
});
return response.json();
}
// Usage with file input
document.getElementById('verifyBtn').addEventListener('click', async () => {
const selfieInput = document.getElementById('selfieInput');
const selfieFile = selfieInput.files[0];
if (!selfieFile) {
alert('Please select a selfie');
return;
}
try {
const result = await verifySelfie(selfieFile, 'https://example.com/profile.jpg');
if (result.success) {
console.log('Match score:', result.data.matchScore);
console.log('Same person:', result.data.samePerson);
} else {
console.error('Error:', result.error.message);
}
} catch (error) {
console.error('Request failed:', error);
}
});Using Base64 Images
javascript
// Convert file to base64
function fileToBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = reject;
});
}
// Convert base64 to Blob for FormData
function base64ToBlob(base64, mimeType) {
const byteString = atob(base64.split(',')[1]);
const ab = new ArrayBuffer(byteString.length);
const ia = new Uint8Array(ab);
for (let i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ab], { type: mimeType });
}
// Usage
const base64Image = await fileToBase64(file);
const blob = base64ToBlob(base64Image, 'image/jpeg');
const formData = new FormData();
formData.append('selfie', blob, 'selfie.jpg');⚠️ Security Warning: Never expose your API key in client-side code. Always make API calls from your backend server.