To integrate Practo with V0 by Vercel, generate a healthcare booking UI with V0, create Next.js API routes that call the Practo API for doctor search and appointment availability, store your API credentials in Vercel environment variables, and deploy. Your app can display doctor profiles, clinic locations, and available appointment slots for patients in India and Southeast Asia.
Build Healthcare Booking Portals with Practo and V0 by Vercel
Practo is the dominant healthcare technology platform in India with over 100 million patients and 100,000+ verified doctors across specialties. For health-tech founders building patient portals, clinic management tools, or healthcare apps targeting the Indian market, Practo's API provides access to doctor directories, appointment systems, and health record infrastructure without building these from scratch. V0 can generate polished doctor search interfaces, appointment booking flows, and patient dashboards that connect to Practo's backend.
The Practo API enables two primary integration patterns for custom applications. The first is the Directory pattern: your app displays Practo's doctor and clinic database with search, filtering by specialty and location, and deep-linking to Practo's own booking flow. This is the simplest integration — fetch doctor data, display it with your own branding, and send patients to Practo for actual booking. The second is the Embedded pattern: using Practo's APIs for full appointment management within your app, including slot availability, booking confirmation, cancellation, and consultation notes integration.
For a V0-generated Next.js app, the directory integration pattern is the most practical starting point. You generate a search UI with V0 (specialty dropdown, location picker, filter sidebar), create API routes that query Practo's doctor search endpoint, and display results with a 'Book on Practo' button that deep-links to the doctor's Practo profile. This gives you a custom-branded doctor discovery experience backed by Practo's verified provider database. Full appointment management requires partnership-level API access that Practo grants to verified healthcare platforms.
Integration method
Practo integrates with V0-generated Next.js apps through server-side API routes that call the Practo API to search practitioners and check appointment availability. Your Practo API credentials are stored as server-only Vercel environment variables and never exposed to the browser. The V0-generated healthcare booking UI calls your Next.js routes, which proxy requests to Practo's API and return doctor listings, availability slots, and clinic information for patient-facing interfaces.
Prerequisites
- A Practo account — register at practo.com; API access for developers requires contacting Practo's platform team or applying through Practo's developer/partner program
- Practo API credentials — API access is available to registered healthcare businesses and technology partners; contact Practo at developer@practo.com with your use case description
- A registered business entity in India — Practo's API is intended for healthcare businesses and requires KYC verification for production access
- A V0 account at v0.dev and a Vercel account for deploying the Next.js app
- Familiarity with healthcare data privacy requirements in India (DPDPA - Digital Personal Data Protection Act) — patient health data has specific regulatory requirements for collection, storage, and processing
Step-by-step guide
Generate the Doctor Search UI with V0
Generate the Doctor Search UI with V0
Open V0 at v0.dev and describe the healthcare booking interface you want to build. Practo's data model centers on practitioners (doctors), their practices (clinics/hospitals), and consultation types (in-person, video, text). When describing your UI to V0, be specific about the search filters your patients need — specialty is usually the primary filter, followed by location (city and locality), consultation type (in-clinic vs. online), and language spoken. Doctor profile cards should display the information patients use to make booking decisions: qualifications (degrees like MBBS, MD), years of experience, specialization, consultation fees in INR, star ratings with review counts, and clinic name and address. V0 is well-suited to generate healthcare-specific UI elements like specialty selector dropdowns with medical icons, availability calendar components showing date slots, and doctor profile cards with credentialing information. For the booking flow, decide early whether you will redirect patients to Practo for the actual booking (simpler) or implement full appointment management within your app (requires deeper API access). For the redirect pattern, each doctor card simply has a 'Book on Practo' button that links to https://www.practo.com/doctor/{doctorId} — this handles all appointment confirmation, reminders, and telemedicine infrastructure on Practo's side. After generating the UI, push to GitHub via V0's Git panel.
Build a doctor search results page. Left sidebar: filter panel with checkboxes for Consultation Type (In-Clinic, Video Consult), checkboxes for Availability (Available Today, Available This Week), a Fees range slider (₹0 to ₹2000), and an Experience filter (1-5 years, 5-10 years, 10+ years). Main content: a results header showing '24 Doctors Found' with Sort dropdown (Relevance, Fee: Low to High, Experience, Rating). Below: doctor cards list. Each card has a doctor photo area, name, specialty badge, '15 Years Experience', 'MBBS, MD - Internal Medicine', '4.8 ★ (247 reviews)', clinic name and address, consultation fee '₹700', 'Next Available: Today, 3:30 PM', and 'Book Appointment' blue button. Mobile responsive.
Paste this in V0 chat
Pro tip: Ask V0 to generate a specialty selector with medical specialty icons — healthcare users expect visual specialty categories (heart for Cardiology, tooth for Dental, etc.) rather than a plain text dropdown. This significantly improves the search experience.
Expected result: A doctor search results page renders in V0's preview with filter sidebar, doctor profile cards showing qualifications and consultation fees in INR, availability indicators, and Book Appointment buttons.
Create the Practo Doctor Search API Route
Create the Practo Doctor Search API Route
Create the Next.js API route that searches Practo's practitioner database and returns doctor profiles for your search UI. The Practo API endpoint for doctor search accepts parameters including city, specialty, consultation type, and pagination offsets. The API uses your API key in the Authorization header and returns a JSON response with an array of practitioner objects. Each practitioner object includes the doctor's profile information (name, qualifications, experience, languages), their practice locations (clinics with addresses and maps coordinates), consultation fees by consultation type, availability summary (next available slot), and ratings and review counts from Practo's verified patient reviews. The Practo API is primarily designed for the Indian healthcare market — specialty names, qualification formats, and location data are structured around Indian healthcare conventions. City names in Practo's system use standardized names (Mumbai, Bengaluru, etc.) and support locality-level filtering within major cities. For the search interface, pass the user's selected specialty and city directly to the Practo API. The API returns paginated results — use the total count for building pagination controls that show how many doctors match the search criteria. For online consultation listing, the consultationType parameter filters to doctors who offer video or chat consultations on Practo, which is particularly relevant for telemedicine use cases.
1// app/api/practo/doctors/route.ts2import { NextRequest, NextResponse } from 'next/server';34const PRACTO_API_BASE = 'https://api.practo.com/v1';56interface PractoDoctor {7 practitioner_id: string;8 full_name: string;9 specializations: string[];10 qualifications: string[];11 experience_years: number;12 languages: string[];13 rating: number;14 review_count: number;15 practices: Array<{16 practice_id: string;17 name: string;18 address: string;19 city: string;20 locality: string;21 consultation_fees: number;22 currency: string;23 }>;24 online_consultation?: {25 enabled: boolean;26 fee: number;27 currency: string;28 };29 profile_url: string;30 photo_url?: string;31 next_availability?: string;32}3334export async function GET(request: NextRequest) {35 const apiKey = process.env.PRACTO_API_KEY;3637 if (!apiKey) {38 return NextResponse.json(39 { error: 'Practo API key not configured' },40 { status: 500 }41 );42 }4344 const { searchParams } = new URL(request.url);45 const specialty = searchParams.get('specialty') ?? '';46 const city = searchParams.get('city') ?? 'Bengaluru';47 const consultationType = searchParams.get('type') ?? 'clinic';48 const page = parseInt(searchParams.get('page') ?? '1', 10);49 const limit = parseInt(searchParams.get('limit') ?? '10', 10);5051 const params = new URLSearchParams({52 city,53 page: page.toString(),54 limit: limit.toString(),55 consultation_type: consultationType,56 });5758 if (specialty) params.set('specialization', specialty);5960 try {61 const response = await fetch(62 `${PRACTO_API_BASE}/practitioners/search?${params.toString()}`,63 {64 headers: {65 Authorization: `Bearer ${apiKey}`,66 'Content-Type': 'application/json',67 Accept: 'application/json',68 },69 next: { revalidate: 300 }, // Cache for 5 minutes70 }71 );7273 if (!response.ok) {74 throw new Error(`Practo API error: ${response.status}`);75 }7677 const data = await response.json() as {78 practitioners: PractoDoctor[];79 total: number;80 page: number;81 };8283 const doctors = (data.practitioners ?? []).map((doc) => {84 const primaryPractice = doc.practices?.[0];8586 return {87 id: doc.practitioner_id,88 name: doc.full_name,89 specialties: doc.specializations ?? [],90 qualifications: doc.qualifications ?? [],91 experience: doc.experience_years ?? 0,92 languages: doc.languages ?? ['English', 'Hindi'],93 rating: doc.rating ?? 0,94 reviewCount: doc.review_count ?? 0,95 clinicName: primaryPractice?.name ?? '',96 address: primaryPractice?.address ?? '',97 city: primaryPractice?.city ?? city,98 locality: primaryPractice?.locality ?? '',99 consultationFee: primaryPractice?.consultation_fees ?? 0,100 currency: primaryPractice?.currency ?? 'INR',101 onlineConsultation: doc.online_consultation?.enabled ?? false,102 onlineFee: doc.online_consultation?.fee ?? 0,103 profileUrl: doc.profile_url,104 photoUrl: doc.photo_url ?? null,105 nextAvailability: doc.next_availability ?? null,106 };107 });108109 return NextResponse.json({110 doctors,111 total: data.total ?? doctors.length,112 page,113 });114 } catch (error) {115 const message = error instanceof Error ? error.message : 'Unknown error';116 console.error('Practo API error:', message);117 return NextResponse.json(118 { error: 'Failed to fetch doctors', details: message },119 { status: 500 }120 );121 }122}Pro tip: Cache Practo doctor search results for 5 minutes using Next.js fetch revalidation — practitioner profiles and consultation fees don't change minute-to-minute, so caching reduces API quota usage without showing meaningfully stale data.
Expected result: GET /api/practo/doctors returns a normalized array of doctor objects with name, qualifications, consultation fees in INR, clinic address, ratings, and a Practo profile URL for deep-linking to booking.
Wire Up the Search UI and Implement Booking Deep-Links
Wire Up the Search UI and Implement Booking Deep-Links
Update your V0-generated search components to fetch from /api/practo/doctors and handle user interactions correctly. The specialty dropdown should trigger a new API call when the user selects a specialty, passing the selected value as the specialty query parameter. The city input should debounce API calls with a 400ms delay to avoid firing requests on every keystroke. The consultation type filter (in-clinic vs. online) maps to the type query parameter. For the booking flow, the simplest and most reliable approach is to deep-link from your 'Book Appointment' button to the doctor's Practo profile URL (doc.profileUrl from the API response). This sends patients to Practo's own appointment booking system which handles slot selection, patient information collection, consultation confirmation, and reminders. Your V0 app provides the discovery and search experience while Practo handles the booking transaction. This approach also means you avoid the complexity of handling patient health data directly in your Next.js app, which has significant regulatory implications under India's DPDPA. If you need to keep patients within your app for the full booking flow, this requires a deeper Practo partnership with access to availability and booking APIs — contact Practo's enterprise partnerships team. For the appointment availability preview ('Next Available: Today, 3:30 PM'), the Practo API returns next_availability as part of the practitioner search response, so you can display it without a separate API call.
Update the doctor search results to fetch from /api/practo/doctors with query params specialty, city, type (clinic/online), and page. On load, show the first page of results for the default city. When the specialty dropdown changes, refetch with the new specialty and reset to page 1. When the city input changes (debounced 400ms), refetch with the new city. Map the API response doctors array to doctor cards. The 'Book Appointment' button should open doc.profileUrl in a new tab. Show a loading spinner over the results while fetching. Show 'No doctors found for this search' empty state if the results array is empty. Wire up the pagination buttons using the page parameter.
Paste this in V0 chat
Pro tip: Add a 'Book Online Consultation' toggle that filters to doctors with onlineConsultation: true and shows the online consultation fee instead of the clinic fee — online consultations are increasingly popular and often cheaper for patients.
Expected result: The doctor search updates dynamically as users change specialty and city filters. Doctor cards show real Practo data with consultation fees in INR, and the Book Appointment button opens the doctor's Practo booking page in a new tab.
Configure Environment Variables and Deploy to Vercel
Configure Environment Variables and Deploy to Vercel
Push your code to GitHub and configure Practo API credentials in Vercel. Open the Vercel Dashboard, select your project, and go to Settings → Environment Variables. Add PRACTO_API_KEY with your Practo API access token. This key should not have the NEXT_PUBLIC_ prefix since all Practo API calls happen server-side. If Practo provides both an API key and a partner ID, add both as PRACTO_API_KEY and PRACTO_PARTNER_ID. For production deployment, also add NEXT_PUBLIC_PRACTO_DEEP_LINK_BASE with the value https://www.practo.com if you need to construct Practo profile URLs on the client side. Set environment variables for Production and Preview environments, save, and trigger a redeployment. After deployment, test the doctor search by opening your Vercel deployment URL, searching for a common specialty like 'General Physician' in a major Indian city like 'Mumbai', and verifying that real doctor results load with correct consultation fees and profile links. Test the 'Book Appointment' button to confirm it deep-links to the correct Practo doctor profile. For a public-facing healthcare portal in India, ensure you have the appropriate legal disclosures about your relationship with Practo and that your site complies with India's DPDPA data protection requirements for any patient data your V0 app collects.
Pro tip: Add a prominent 'Powered by Practo' attribution badge on your doctor search results page — this builds patient trust by associating your portal with Practo's verified doctor credentials, and it is typically required by Practo's API terms.
Expected result: The Vercel deployment succeeds and the doctor search portal loads real Practo practitioner data. Specialty and city searches return relevant doctors with consultation fees and working booking deep-links.
Common use cases
Doctor Search and Discovery Portal
A patient-facing portal where users search for doctors by specialty, city, and insurance. The results show Practo-verified doctor profiles with qualifications, experience, ratings, clinic addresses, and consultation fees, with a button to book through Practo.
Build a doctor search portal for Indian patients. Top section: three search inputs — Specialty (dropdown: Cardiologist, Dermatologist, Gynecologist, Pediatrician, etc.), City (text input with autocomplete), and Insurance (dropdown). Search button. Results section: doctor cards in a list view. Each card: doctor photo placeholder, doctor name, degree and qualification (e.g., 'MBBS, MD - Cardiology'), experience years badge, clinic name and address, consultation fee in INR, star rating with review count, 'Available Today' green badge if slots open, and 'Book Appointment' button. Show 10 results with pagination. Use a clean healthcare blue and white design.
Copy this prompt to try it in V0
Clinic Website with Appointment Booking
A standalone clinic website generated with V0 that displays the clinic's doctors from Practo with real-time availability. Patients can view doctor profiles, check available slots for the next 7 days, and book directly through a Practo-powered flow.
Create a clinic website for a multi-specialty clinic. Homepage hero with clinic name, address, and 'Book an Appointment' CTA button. Our Doctors section with 4 doctor cards showing: photo, name, specialty, years of experience, star rating, and 'View Profile & Book' button. Services section listing specialties with icons. How It Works section: Search → Select Time → Confirm Booking. Contact section with address map placeholder and phone number. Use a professional medical design with navy blue and white.
Copy this prompt to try it in V0
Corporate Health Program Dashboard
An employee wellness portal for corporates that shows pre-approved Practo network doctors, enables employees to book consultations as a corporate benefit, and tracks utilization. HR managers see aggregate usage reports while employees get a simplified booking experience.
Design a corporate health portal for employees. Header shows employee name, company name, and 'Health Credits Remaining: 5' badge. Quick Book section with 4 specialty tiles (General Physician, Mental Health, Nutrition, Dental) for common consultations. My Appointments section showing upcoming appointments as cards with doctor name, specialty, date/time, and Join/Reschedule buttons. A Benefits section showing what health services are covered. Use a trustworthy corporate health design in teal and white with friendly but professional typography.
Copy this prompt to try it in V0
Troubleshooting
Practo API returns 401 or 403 when calling the search endpoint
Cause: Practo's API is not publicly open — it requires a formal partner or developer agreement. The API key may not be activated for production use, or your access level may not include the endpoint you're calling.
Solution: Contact Practo's developer relations team at developer@practo.com to verify your API key status and access level. Confirm which API endpoints your partnership agreement covers. For testing, use Practo's sandbox environment if available, or verify your credentials directly with the Practo team before deploying to production.
Doctor search returns empty results for valid city and specialty combinations
Cause: Practo uses specific city names and specialization strings in their API — using 'Bangalore' instead of 'Bengaluru' or a non-standard specialty name can return empty results.
Solution: Use Practo's standardized city names from their documentation (Bengaluru, Mumbai, Delhi, Chennai, Hyderabad, etc.). Fetch the list of valid specializations from a Practo metadata endpoint if available, and use those exact strings in your specialty filter. Log the raw API response to check if Practo is returning an error about the city or specialty name.
1// Use Practo's standardized city names:2const PRACTO_CITIES = ['Bengaluru', 'Mumbai', 'Delhi', 'Chennai', 'Hyderabad', 'Pune', 'Kolkata'];Doctor profile photo URLs return broken images
Cause: Practo's doctor photo URLs may require authentication headers or may be served from a different domain than expected.
Solution: Check the photo URLs returned by the Practo API — if they require authentication, fetch the images through your Next.js API route and proxy them to the client. If photos are from Practo's CDN, add the CDN domain to next.config.js images.remotePatterns. Show a doctor avatar placeholder when photoUrl is null rather than a broken image.
1// Add Practo CDN domain to next.config.js:2module.exports = {3 images: {4 remotePatterns: [5 { protocol: 'https', hostname: '*.practo.com' },6 ],7 },8};Best practices
- Always display Practo's verified doctor credentials (qualifications, registration number) prominently — healthcare patients specifically value verified credentials and this builds trust in your platform
- Show consultation fees in INR clearly and prominently on doctor cards — consultation fee is one of the top deciding factors for Indian healthcare patients
- Cache doctor search results for 5 minutes to reduce Practo API calls — doctor availability changes more frequently than profile data, so availability should be refreshed more aggressively if you display exact slots
- Deep-link to Practo for actual appointment booking rather than trying to replicate the booking flow — Practo's booking system handles SMS reminders, patient form collection, and payment in a trusted, tested flow
- Store PRACTO_API_KEY without the NEXT_PUBLIC_ prefix — patient health data adjacent APIs must be called server-side only
- Add a clear disclosure that doctor information is powered by Practo and that appointment booking is handled on Practo's platform — this sets correct user expectations and meets Practo's attribution requirements
- Target major Indian cities (Mumbai, Delhi, Bengaluru, Chennai, Hyderabad, Pune) in your city autocomplete — these account for the majority of Practo's user base and have the most complete doctor listings
Alternatives
Use Zocdoc instead of Practo if your target market is the United States — Zocdoc is the US equivalent of Practo for doctor search and appointment booking, with a similar API for building patient portals.
Choose Mindbody instead of Practo if you're building wellness and fitness booking (yoga studios, spas, physical therapy) rather than medical consultations — Mindbody specializes in wellness and fitness appointment booking with a more accessible API.
Use Calendly instead of Practo if you want a general-purpose appointment scheduling solution without healthcare-specific features — Calendly works well for independent practitioners who want simple self-scheduling without a healthcare marketplace platform.
Frequently asked questions
Is Practo's API publicly available or does it require a partnership?
Practo's API requires a formal partnership agreement and is not publicly available to all developers. You need to contact Practo's developer or business development team with your use case, company registration details, and intended usage. Healthcare data APIs in India are subject to regulatory requirements, so Practo reviews potential partners before granting API access. Email developer@practo.com with your integration proposal.
Can I use Practo's API to book appointments directly or only to display doctor information?
The level of API access Practo grants depends on your partnership tier. Most partners get access to directory data (doctor profiles, search, clinic information) and can deep-link to Practo for booking. Full appointment booking API access (slot availability, booking creation, cancellation) is typically reserved for enterprise healthcare platforms with deeper integration requirements. Discuss your specific use case with Practo's partnership team to understand what's available.
Does the Practo API work for markets outside India?
Practo operates in India, Singapore, Indonesia, the Philippines, and Brazil. The API coverage is most comprehensive for India, where Practo has the largest doctor and clinic database. For other markets, coverage may be limited. If your primary market is India, Practo is the strongest choice; for other markets, look for local healthcare booking platforms with API access.
What are the data privacy requirements for handling Practo data in a Next.js app?
Patient health data in India falls under the Digital Personal Data Protection Act (DPDPA). If your app collects or processes any patient health information (including appointment records, medical history, or consultation notes), you need to comply with DPDPA requirements including data minimization, purpose limitation, and data subject rights. For apps that only display doctor directory information and deep-link to Practo for booking without storing patient data in your own database, compliance requirements are simpler. Consult a legal advisor familiar with Indian healthcare data law.
How do I display consultation fees in the correct format for Indian users?
Format consultation fees using the Indian Rupee symbol (₹) followed by the amount in Indian number formatting conventions. For fees in the typical Practo range (₹200 to ₹2,000), display without decimal places. For round numbers, Indian convention uses ₹700 rather than ₹700.00. Use the Indian number system for larger amounts (₹1,500 rather than ₹1500). You can format using the Intl.NumberFormat API: new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'INR', minimumFractionDigits: 0 }).format(fee).
Can V0 generate healthcare-appropriate UI components for a doctor booking portal?
Yes — V0 generates doctor search interfaces well since the pattern is similar to other search/filter/card UIs. Be explicit about healthcare-specific elements: specialty selector with medical icons, star ratings with review counts, qualification display format (MBBS, MD), consultation fee display in INR, and 'Available Today' badges. V0 can also generate appointment calendar components for showing available time slots when you have that data from the API.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation