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

Why v0 + StructOCR is a natural fit for Travel Apps
v0 generates beautiful, accessible React interfaces using Tailwind CSS and shadcn/ui directly from plain English. It handles the frontend components perfectly — 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 v0 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 v0 are remarkable at generating UIs instantly — 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, v0 can wire it up from a single fetch call.
Integrate StructOCR in v0 (3 Steps)
Create a v0 project and describe your app
Open v0.dev and start a new prompt. 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 UI using shadcn. 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 in a clean card."Tell v0 to call the StructOCR API
Once v0 scaffolds the UI, ask it to create a Next.js server route that forwards Base64 image data to StructOCR and returns the response to the React components.
Follow-up prompt: "Create a server-side /api/passport-ocr route. It must accept a Base64 img string, POST JSON to https://api.structocr.com/v1/passport, and authenticate with the x-api-key header using process.env.STRUCTOCR_KEY."// Run this only in a Next.js server route const response = await fetch('https://api.structocr.com/v1/passport', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.STRUCTOCR_KEY, }, body: JSON.stringify({ img: base64Image }), });Add your StructOCR API key
When you export the project or deploy to Vercel, add the StructOCR key to .env.local or Vercel Environment Variables as a server-only secret.
Private variable name: STRUCTOCR_KEY — never prefix it with NEXT_PUBLIC_. Get your key at structocr.com/dashboardSTRUCTOCR_KEY=sk_live_xxxxxxxxxxxxxxxx
What you can build in v0 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 follow-up prompt into your v0 chat to generate the integration. The code block shows what v0 typically 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 v0/Next.js app securely.
1. Create a server-side POST route at /api/passport-ocr.
2. The browser converts the selected image to Base64 and sends { img } to this route.
3. The server route must POST application/json to https://api.structocr.com/v1/passport with body { img }.
4. Authenticate upstream with the x-api-key header using process.env.STRUCTOCR_KEY. Never expose this key through NEXT_PUBLIC_ or client-side code.
5. Return the StructOCR JSON response and display data.passport_number, data.surname, data.given_names, data.nationality, and data.date_of_expiry.
6. Add loading, file-size, upstream error, and invalid-response handling.What the API returns
A comprehensive JSON object containing the parsed passport fields. Your v0 React components 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 v0 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 v0 App in 5 Minutes
Step-by-step guide to integrating the StructOCR shipping container API into a v0 by Vercel app. Build logistics and yard management tools with zero backend.
Add Driver's License OCR to Your v0 App in 5 Minutes
Step-by-step guide to integrating the StructOCR Driver's License scanner API into a v0 by Vercel app. Build car rental and mobility onboarding flows with zero backend.
Add HIN OCR to Your v0 App in 5 Minutes
Step-by-step guide to integrating the StructOCR HIN (Hull Identification Number) scanner API into a v0 by Vercel app. Build marine and boat management tools with zero backend.
Add Invoice OCR to Your v0 App in 5 Minutes
Step-by-step guide to integrating the StructOCR invoice API into a v0 by Vercel app. Build accounts payable and expense tracking tools with zero backend.
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