Estimated reading time: 20-30 minutes for complete configuration

What will you learn from this guide?

This guide will teach you how to use our document monitoring system JAAK Document Verify to detect fraudulent documents, validate identities and secure authenticity of official credentials. No advanced technical skills required - Just follow the steps.

Before Start - Checks list

Be sure to have these elements ready:

  • Access to your account JAAK
  • API Valid key (provided by your manager)
  • Digital Test Documents (JPEG / PNG)
  • List of countries where your company operates
  • Basic knowledge of APIs REST (for developers)

Contents Index

SectionWhat will you do?Time
Step 1Configure System Access5 min
Step 2Prepare documents for verification10 min
Step 3First check10 min
Step 4Replay Results10 min
Step 5Configure Government Verification5 min

Passage 1: Configure System Access

Objective

Configure your system access JAAK Document Check and validate that you have the necessary permission.

Steps to be followed

1.1 Check Fitted Products

Step 1: Access your dashboard JAAK

Step 2: Check that you have the following products enabled:

  • Document Product - Access to verification services
  • KYC Product - Functionality KYC complete

1.2 To get API Key

Step 1: At dashboard, go to Setup → API Kys

Step 2: Copy your API Key (format: Bearer {token})

Important

Never share your API That's your unique access credit.

1.3 Configure Countries Permitted

Step 1: Go to Setting up My Company

Step 2: select countries where your company operates:

CountryCode ISOSupported Documents
MexicoMEXINEPassport, License
Estados UnidosUSADriver's License, Passport
ColombiaCOLDula, Passenger
SpainESPDNI, Passport

Tip

Just select countries where you really operate. That improves the accuracy of verification.

Step 2: Prepare Documents for Verification

Objective

Prepare document images correctly to get best check results.

Image Requirements

2.1 Technical specifications

RequirementSpecificationWhy's that important?
ResolutionMinimum 1080pIncreased detection accuracy
FormatJPEG / NPGCompatibility with system
SizeMaximum 10MBTest optimization
CodificationBase64Formatt required by API

2.2 Best Capture Practices

Do this:

  • Use good light or artificial uniform
  • Make sure that document's complete with the image
  • Keep the camera perpendicular to the document
  • Use a flat and contrasting surface
  • Check that text to be legible

Avoid this:

  • Shadows about document
  • Glow or shine
  • partially visible
  • Unfocused or blurred images
  • Rotation of document

2.3 Convert Image to Base64

For developers:

// Example of conversion to Base64
const convertToBase64 = (imageFile) => {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = () => {
      // Remove the header "data: image /..."
      const base64 = reader.result.split(',')[1];
      resolve(base64);
    };
    reader.onerror = reject;
    reader.readAsDataURL(imageFile);
  });
};

For non-technical users:

  • Use online tools such as base64encode.org
  • Be sure to copy only the Base64 (without heads)

Step 3: conduct First Verification

Objective

Run your first document check using API Document Verify.

Main endpoint

POST https://api.sandbox.jaak.ai/api/v3/document/verify

3.1 Configure Leaders

{
  "Authorization": "Bearer TU_API_KEY",
  "Content-Type": "application/json",
  "Request-Id": "req_123456789",
  "Language": "es"
}

3.2 Requiest structure

{
  "imageFront": "iVBORw0KGgoAAAANSUhEUgAAAB4...",
  "imageBack": "",
  "imageBarcode": "",
  "allowedCountries": ["MEX", "USA", "COL"],
  "dataVerification": false
}

3.3 explain parameters

ParameterTypeRequiredDescription
imageFrontstringYesFront image of the document at Base64
imageBackstringNoRear image of the document at Base64
imageBarcodestringNoBarcode photo at Base64
countriesarrayNoList of countries permitted for this verification
dataVerificationbooleanNoEnabling Government Verification (Mexico)

3.4 Example of implementation

For Developer:

const verifyDocument = async (documentData) => {
  const response = await fetch('https://api.sandbox.jaak.ai/api/v3/document/verify', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer TU_API_KEY',
      'Content-Type': 'application/json',
      'Request-Id': 'req_' + Date.now(),
      'Language': 'es'
    },
    body: JSON.stringify({
      imageFront: documentData.frontImage,
      imageBack: documentData.backImage || '',
      allowedCountries: ['MEX'],
      dataVerification: true
    })
  });

  const result = await response.json();
  return result;
};

For Non-Technical users:

Use tools as Postman or Insomnia:

  1. Method: POST
  2. URL: https://api.sandbox.jaak.ai/api/v3/document/verify
  3. Headers: Add Authorisation, Content-Type, etc.
  4. Body: Play JSON with your Base64 image

Step 4: Replay Results

Objective

To understand and make decisions about monitoring results.

Response structure

4.1 Successful Response

{
  "eventId": "evt_1234567890_abcdef",
  "requestId": "req_1234567890_ghijkl",
  "evaluation": "SUCCESS",
  "document": {
    "type": "driving_license",
    "side": "front",
    "country": "MEX",
    "icaoCode": "MEX123"
  },
  "processTime": 1250.5,
  "state": {
    "documentCompleteSides": true,
    "dataConsistent": true,
    "documentLiveness": true,
    "securityFeatures": true,
    "documentValidity": true,
    "imageQuality": true,
    "handPresence": false,
    "photoForgery": false,
    "message": "document successfully verified"
  }
}

4.2 Evaluation levels

EvaluationMeaningRecommended Action
SUCCESSAuthentic documentApprove process
WARNINGSuspicious documentCheck manually
REJECTEDFilling documentReject proceedings

4.3 Special Validation

Security ratings

ValidationDescriptionTrue ValueFasse Value
documentationPhysical document vs. photoactual documentScreenphoto
securityFeatureSecurity elementsPresentAbsence / Retirement
document ValidityValidity of documentValidExtent / Invalid
imageQualityImage qualitygood qualityLow quality
photoForgeryFilling detectionNo alterationsRejected photo

Information about the document

FieldDescriptionExample
TypeType of document"driving\ _ license," "passport," "national\ _ id"
CountryCountry of origin"MEX," "USA," "COL"
sideRetirementfront, back, both
processTimeProcessing time1250.5 (milliseconds)

4.4 Cases of Use by Result

SUCCESS - Authentic document

if (result.evaluation === 'SUCCESS') {
  console.log('document successfully verified');
  console.log('Tipo:', result.document.type);
  console.log('Country:', result.document.country);

  // Continue with the onboarding process
  approveUser(result);
}

WARNING - Manual Review

if (result.evaluation === 'WARNING') {
  console.log('document requires manual review');
  console.log('Motivo:', result.state.message);

  // Send to manual review tail
  sendToManualReview(result);
}

REJECTED - Frudely document

if (result.evaluation === 'REJECTED') {
  console.log('Rejected document');
  console.log('Motivo:', result.state.message);

  // Reject and notify
  rejectUser(result);
}

Step 5: Configure Government Verification

Objective

Enabling monitoring against government databases for more security.

Available

5.1 RENAPO (Mexico)

What's that? National Population Registry of Mexico

What's his check?

  • CURP valid
  • Name
  • Date of birth
  • Document number

5.2 Enabling Government Verification

Step 1: At your request, change dataVerification a true:

{
  "imageFront": "iVBORw0KGgoAAAANSUhEUgAAAB4...",
  "imageBack": "",
  "allowedCountries": ["MEX"],
  "dataVerification": true
}

Step 2: Review the additional results in the response:

{
  "state": {
    "validations": {
      "namesMatch": true,
      "lastNameMatch": true,
      "birthDateMatch": true,
      "personalIdNumberMatch": true,
      "message": "Successful Government Validation"
    }
  }
}

5.3 Interpretation of Government Results

ValidationDescriptionTrueFasse
namesMatchNames matchCoincidenceThey don't match.
lastNameMatchSurname matchingCoincidenceThey don't match.
birthDateMatchDates matchCoincidenceThey don't match.
personalCURP That's right.CoincideNo match.

Tip

Recommendation: Use government verification to:

  • High-risk processes
  • Financial transactions
  • strict regulatory compliance

Common Problem Resolution

Common

Error DC08 - Invalid Base64 Format

Problem: "Invalid Base64 format"

Cause: Image includes header "data: image /..."

solution:

// Incorrecto
const imageWithHeader = 'data:image/jpeg;base64,/9j/4AAQ...';

// Correcto
const imageBase64 = '/9j/4AAQ...'; // Just the Base64 part

DC25 Error - Unallowed Country

Problem: "Country not allowed"

Cause: Unconfigured Country document

solution:

  1. Add Country to Business Setup
  2. Include allowedCountries
  3. Use empty array to allow all: "allowedCountries": []

DC13 Error - Unsufficient Image Quality

Problem: "Insufficient image quality"

Cause: A blurred, incomplete or mallit image

solution:

  • Use minimum resolution 1080p
  • To improve light
  • Ensure complete document
  • Avoid shadows and reflections

DC10 Error - Life Verification Failed

Problem: "Document liveness failed"

Cause: Screenphoto instead of physical document

solution:

  • Using original physical document
  • Avoid screen images
  • To improve capture quality

Checklist of Troublehooting

Before contacting support, check:

  • API valid and activated key
  • Image in pure Base64 format (without heads)
  • Minimum 1080p image resolution
  • complete and legible document
  • Country included in configuration
  • good light and without reflection
  • Stable Internet connection

Best Practices

For Developer

Implement Retry Logic

const verifyWithRetry = async (documentData, maxRetries = 3) => {
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      const result = await verifyDocument(documentData);
      return result;
    } catch (error) {
      if (attempt === maxRetries) throw error;
      await new Promise(resolve => setTimeout(resolve, 1000 * attempt));
    }
  }
};

Validate Images Before sending

const validateImage = (base64Image) => {
  // Check that's valid Base64
  const base64Regex = /^[A-Za-z0-9+/]*={0,2}$/;
  if (!base64Regex.test(base64Image)) {
    throw new Error('Base64 invalid format');
  }

  // Check size (maximum 10MB)
  const sizeInBytes = (base64Image.length * 3) / 4;
  if (sizeInBytes > 10 * 1024 * 1024) {
    throw new Error('Very large image (up to 10MB)');
  }

  return true;
};

For Business Users

Decision Flow

Threshold Setup

Case of UseRecommended Configure
BasicOnly SUCCESS approved
Strict VerificationSUCCESS + Government Verification
Manual ReviewWARNING → Review Cola

Security considerations

Data Protection

API Kys

  • Never explain API front code keys
  • Use environment variables
  • Regular rotary keys
  • Access restricted by IP (optional)

Sensitive data

  • Transmission by HTTPS
  • Do not store images without encryption
  • Logs without personal information
  • GDPR / CCPA compliance

Rate Limiting

  • Implement client boundaries
  • Drive answers 429 (Too Many Requests)
  • Using exponential backoff

Support and Contact

When To Contact Support

  • Undocumented errors in this guide
  • Persistent performance challenges
  • Special configuration required
  • Doubts about integration

Contact information

Email: support

Information to be included:

  • Special description of the problem
  • Error code (if applicable)
  • Failed request
  • Steps to Replay The Problem
  • Configure used

Additional

Ready to get started!

With this guide you have everything necessary to implement JAAK Document Verify in your product. Start with a basic check and gradually add advanced functionality as required.

Do you need additional help? Do not hesitate to contact our support team.