Add Passport OCR to Your Lovable.dev App in 5 Minutes
Lovable builds your UI. StructOCR reads the MRZ lines. Here's the exact prompt and API call to wire them together for instant travel onboarding.

Why Lovable.dev + StructOCR is a natural fit for Travel Apps
Lovable generates full-stack apps from plain English. It handles the UI, routing, and deployment automatically — but securely extracting a passport number, nationality, and expiry date from a glossy data page is something you have to wire up yourself. StructOCR fills exactly that gap: one API call, structured JSON back. Tell Lovable what you want, paste in the fetch code below, and your booking flow is ready.
The problem: Glossy pages and complex MRZ strings
Tools like Lovable.dev are remarkable at generating apps — but they stop at the file boundary. You can build a beautiful booking interface in minutes, yet the actual extraction of Machine Readable Zones (MRZ) and visual data from a highly reflective passport page requires a dedicated Passport OCR API. Standard vision models routinely fail on holograms, misread country codes, or output unformatted text blocks.
The solution: ICAO-compliant parsing, instantly
StructOCR's /v1/passport endpoint accepts a photo and returns a clean JSON object with the validated travel document fields. It automatically decodes the MRZ lines to cross-check the Visual Inspection Zone (VIZ), ensuring 100% accuracy on passport numbers and dates. Because it speaks plain HTTP, Lovable can wire it up from a single fetch call.
Integrate StructOCR in Lovable (3 Steps)
Create a Lovable project and describe your app
Open lovable.dev and start a new project. In the chat box, describe the travel or KYC tool you want to build — be specific about the fields you need.
Try this prompt: "Build a mobile-friendly hotel check-in app. Users can upload a photo of their passport data page, and the app will display the extracted full name, passport number, nationality, and expiry date."Tell Lovable to call the StructOCR API
Once Lovable scaffolds the UI, ask it to create a server-side Edge Function that forwards Base64 image data to StructOCR. The browser calls the function without receiving the StructOCR key.
Follow-up prompt: "Create a server-side Edge Function for Passport OCR. It must accept a Base64 img string, POST JSON to https://api.structocr.com/v1/passport, and use the x-api-key header with the private STRUCTOCR_KEY secret."// Run inside a server-side Edge Function const response = await fetch('https://api.structocr.com/v1/passport', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': Deno.env.get('STRUCTOCR_KEY')!, }, body: JSON.stringify({ img: base64Image }), });Add your StructOCR API key as an Edge Function secret
Add the key to the secret storage used by your server-side Edge Function. Do not create a
VITE_-prefixed variable, because it can be included in browser code.Private secret name: STRUCTOCR_KEY — get your free key at structocr.com/dashboardSTRUCTOCR_KEY=sk_live_xxxxxxxxxxxxxxxx
What you can build in Lovable with this integration
- Hotel & hospitality check-in: Let international guests snap a photo of their passport to instantly populate registration cards, speeding up front-desk operations. A perfect fit for travel automation.
- Airline booking portals: Build a mobile portal where passengers upload their passports during online check-in to automatically capture API (Advance Passenger Information) data.
- Global KYC onboarding: Create a secure onboarding flow for fintech apps that accepts passports from 150+ countries, extracting structured names and birth dates instantly.
- Visa application assistants: Add an upload step to a travel agency portal: extract passport details automatically to pre-fill complex international visa application forms.
The prompt and the code
Copy the Lovable prompt into your project chat to generate the integration. The JavaScript tab shows what Lovable produces — useful if you want to verify or customize it.
Prerequisite: A free StructOCR account — get your API key at structocr.com/dashboard (no credit card required)
I need to add Passport OCR to this Lovable app securely.
1. Create a server-side Edge Function named passport-ocr.
2. The browser converts the selected image to Base64 and invokes the function with { img }.
3. The Edge Function must POST application/json to https://api.structocr.com/v1/passport with body { img }.
4. Authenticate upstream with the x-api-key header using the private STRUCTOCR_KEY secret. Never use a VITE_-prefixed variable for this key.
5. Return the JSON response and display data.passport_number, data.surname, data.given_names, data.nationality, and data.date_of_expiry.
6. Add file-size, loading, upstream error, and invalid-response handling.What the API returns
A comprehensive JSON object containing the parsed passport fields. Your Lovable app can bind this directly to the UI.
{
"success": true,
"data": {
"type": "passport",
"country_code": "USA",
"nationality": "UNITED STATES",
"passport_number": "E12345678",
"surname": "DOE",
"given_names": "JOHN",
"sex": "M",
"date_of_birth": "1990-01-01",
"place_of_birth": "NEW YORK, USA",
"date_of_issue": "2020-01-01",
"date_of_expiry": "2030-01-01",
"place_of_issue": "PASSPORT AGENCY"
}
}Technical Specs
- Formats accepted: PNG, JPG, WEBP — optimized for smartphone and webcam photos
- Response time: typically 1–2 seconds per passport
- Condition handling: robust against glossy page glare, watermarks, and poor lighting
- Data Privacy: Zero data retention architecture; images are processed in memory and immediately discarded
- Global coverage: supports all ICAO Doc 9303 compliant passports globally
Key Features
- MRZ Cross-checking: automatically compares the extracted visual text against the machine-readable zone to ensure absolute accuracy
- Format validation: automatically verifies passport numbers and expiration dates against checksum rules
- Multi-angle support: reads passports held at skewed angles or taken in busy backgrounds
- Auto-cropping: automatically locates and crops the passport data page from the uploaded image
Live Demo: Passport scanner
No registration required. Upload a file to test the extraction.
Drop files here or click to browse
JPG · PNG · WebP · up to 500 files · max 4.5 MB each
Frequently Asked Questions
Does StructOCR work inside a Lovable.dev app?
Where should I store the API key for travel apps?
Does StructOCR store the passport photos?
Can it read passports with heavy glare over the photo?
How can I test the accuracy before building?
Is there a free tier to test with?
More Tutorials
Add Container OCR to Your Lovable.dev App in 5 Minutes
Step-by-step guide to integrating the StructOCR shipping container API into a Lovable.dev app. Build logistics and yard management tools with zero backend.
Add Driver's License OCR to Your Lovable.dev App in 5 Minutes
Step-by-step guide to integrating the StructOCR Driver's License scanner API into a Lovable.dev app. Build car rental and mobility onboarding flows with zero backend.
Add HIN OCR to Your Lovable.dev App in 5 Minutes
Step-by-step guide to integrating the StructOCR HIN (Hull Identification Number) scanner API into a Lovable.dev app. Build marine and boat management tools with zero backend required.
Add Invoice OCR to Your Lovable.dev App in 5 Minutes
Step-by-step guide to integrating the StructOCR invoice API into a Lovable.dev app. No backend required — just paste a prompt and add your API key.
Ready to Build with StructOCR?
Get your API key in under a minute. New users receive 200 free credits to test Passport, VIN, Lincense Plate, Container, Receipt, HIN, Driver License, ID Card, Vehicle Registration, ATM Cassette and Invoice OCR APIs.
✓ No credit card required · ✓ Instant API key · ✓ Full API access