The World's Most Complete
Visa Eligibility API
Programmatic access to 1,912 verified visa programmes across 200 countries. Check eligibility, list programmes, and query entry requirements with simple REST calls.
API Endpoints
Three endpoints cover the full visa intelligence pipeline -- from eligibility checks to detailed requirements.
Submit a user profile and receive matched visa programmes ranked by eligibility score. The scoring engine evaluates priority fit, profession match, pathway speed, financial fit, and language requirements.
Request body:
| Parameter | Type | Description |
|---|---|---|
nationality required | string | ISO 3166-1 country name (e.g. "India", "United Kingdom") |
age required | integer | Applicant age (18-70) |
profession required | string | One of 89 supported professions (e.g. "Software Engineer", "Nurse") |
education required | string | Highest level: "high_school", "bachelor", "master", "phd" |
savings_eur | integer | Available savings in EUR |
income_eur | integer | Annual income in EUR |
languages | string[] | Languages spoken (ISO 639-1 codes) |
priorities | string[] | Up to 3: "cost", "safety", "career", "weather", "healthcare", "family" |
limit | integer | Max results (default: 10, max: 50) |
Response: Array of matched programmes with score (0-100), programme_name, country, visa_type, processing_days, difficulty, and eligibility_breakdown.
Retrieve all visa programmes available for a given country. Returns programme details including type, requirements, processing time, and difficulty score.
| Parameter | Type | Description |
|---|---|---|
country required | string (path) | Country slug (e.g. "germany", "united-arab-emirates") |
type | string (query) | Filter by visa type (e.g. "skilled_worker", "investor", "digital_nomad") |
Response: Array of programmes with id, name, type, investment_required, processing_time_days, difficulty_score, education_required, language_level, and official_source_url.
Get entry requirements and country metadata for a specific destination. Includes cost of living, safety index, healthcare rating, tax regime, and special programmes.
| Parameter | Type | Description |
|---|---|---|
code required | string (path) | ISO 3166-1 alpha-2 code (e.g. "DE", "AE", "CA") |
Response: Object with country, programmes_count, cost_of_living_index, safety_index, healthcare_rating, tax_regime, special_programmes, official_immigration_url, and visa_free_nationalities.
Code Examples
Get started in minutes with your preferred language.
# Check eligibility for a software engineer from India curl -X POST https://api.wheretoemigrate.io/v1/check-eligibility \ -H "Content-Type: application/json" \ -H "X-API-Key: your_api_key_here" \ -d '{ "nationality": "India", "age": 28, "profession": "Software Engineer", "education": "bachelor", "savings_eur": 15000, "income_eur": 45000, "languages": ["en", "hi"], "priorities": ["career", "safety"], "limit": 5 }' # Response { "status": "ok", "count": 5, "programmes": [ { "score": 87.4, "programme_name": "Germany EU Blue Card", "country": "Germany", "visa_type": "skilled_worker", "processing_days": 45, "difficulty": 3.2, "eligibility_breakdown": { "priority_fit": 92, "profession_match": 88, "pathway_speed": 85, "financial_fit": 80, "language_fit": 90 } } ] }
const response = await fetch('https://api.wheretoemigrate.io/v1/check-eligibility', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Key': 'your_api_key_here' }, body: JSON.stringify({ nationality: 'India', age: 28, profession: 'Software Engineer', education: 'bachelor', savings_eur: 15000, income_eur: 45000, languages: ['en', 'hi'], priorities: ['career', 'safety'], limit: 5 }) }); const data = await response.json(); // Top match console.log(data.programmes[0].programme_name); // "Germany EU Blue Card" console.log(data.programmes[0].score); // 87.4 // List all programmes for Canada const canada = await fetch( 'https://api.wheretoemigrate.io/v1/programmes/canada', { headers: { 'X-API-Key': 'your_api_key_here' } } ); const programmes = await canada.json(); console.log(`Canada has ${programmes.count} visa programmes`);
import requests # Check eligibility response = requests.post( "https://api.wheretoemigrate.io/v1/check-eligibility", headers={ "Content-Type": "application/json", "X-API-Key": "your_api_key_here" }, json={ "nationality": "India", "age": 28, "profession": "Software Engineer", "education": "bachelor", "savings_eur": 15000, "income_eur": 45000, "languages": ["en", "hi"], "priorities": ["career", "safety"], "limit": 5 } ) data = response.json() # Top match top = data["programmes"][0] print(f"{top['programme_name']} — Score: {top['score']}") # Germany EU Blue Card — Score: 87.4 # Get country requirements reqs = requests.get( "https://api.wheretoemigrate.io/v1/countries/DE/requirements", headers={"X-API-Key": "your_api_key_here"} ).json() print(f"Safety index: {reqs['safety_index']}") print(f"Programmes: {reqs['programmes_count']}")
Authentication
All API requests require an API key passed in the X-API-Key header. Keys are issued upon approval of your access request.
API keys are scoped to your account and track usage against your plan limits. Keep your key secure -- do not expose it in client-side code. Use server-to-server calls or a backend proxy.
If your key is compromised, contact us immediately at hello@wheretoemigrate.io and we will rotate it within the hour.
Rate Limits
| Plan | Requests | Rate | Overage |
|---|---|---|---|
| Free | 10 / day | 1 req/sec | HTTP 429 |
| Pro | 1,000 / month | 5 req/sec | HTTP 429 |
| Enterprise | Unlimited | 50 req/sec | Contact us |
When rate limited, the response includes a Retry-After header indicating seconds until your next allowed request.
API Pricing
Start free. No credit card required.
Pro
- 1,000 requests per month
- 5 req/sec burst rate
- Email support (48h)
- Usage dashboard
Enterprise
- Unlimited requests
- 50 req/sec burst rate
- 99.9% uptime SLA
- Dedicated support
Request API Key
Tell us about your project and expected usage. We review requests within 24 hours.
Frequently Asked Questions
Is the data returned in real-time?
Yes. The API queries our live database of 1,912 verified visa programmes. Data is updated continuously as immigration rules change, with full verification cycles completed monthly. Every programme includes an official_source_url linking to the government source.
What response formats are supported?
All endpoints return JSON with consistent field naming and pagination. Response bodies include programme details, eligibility scores, and metadata. We plan to add CSV export for bulk queries in a future release.
What is the uptime SLA?
Free and Pro plans operate on a best-effort basis with historically 99.5%+ uptime. Enterprise plans include a contractual 99.9% uptime SLA with service credits for any downtime exceeding the guarantee.
How do rate limits work?
Rate limits are tracked per API key on a rolling window. Free tier allows 10 requests per day, Pro allows 1,000 per month, and Enterprise has no hard limit. Exceeding your quota returns HTTP 429 with a Retry-After header indicating when you can retry.
Is there a free tier?
Yes. The free tier includes 10 API requests per day with access to all three endpoints. No credit card required. It is designed for prototyping, evaluation, and low-volume integrations. Upgrade to Pro when you need higher throughput.