VisaIndex APIvisaindex.com ↗
Access passport power rankings, visa requirements between any two countries, golden visa programs, eTA info, and destination guides via the VisaIndex API.
What is the VisaIndex API?
The VisaIndex API exposes 8 endpoints covering passport power rankings, bilateral visa requirement checks, destination visa guides, golden visa programs, and eTA information. With get_country_passport_details you can retrieve a passport's global rank alongside categorized destination counts across five access tiers — visa-free, visa on arrival, eTA, visa online, and visa required — for any country by slug.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/b8215b25-edf0-477f-8b06-a9cae8024021/get_passport_ranking' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace visaindex-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: VisaIndex SDK — passport rankings, visa checks, destination guides."""
from parse_apis.visaindex_passport_visa_information_api import (
VisaIndex, OriginCountry, DestinationCountry, CountryNotFound
)
client = VisaIndex()
# List top passport rankings by power — limit caps total items fetched.
for ranking in client.passportrankings.list(limit=5):
print(ranking.country, ranking.rank, ranking.slug)
# Drill into the top passport's detailed visa categories.
top = client.passportrankings.list(limit=1).first()
if top:
details = top.details()
print(details.country, details.rank, details.total_visa_free)
for cat_name, cat in details.categories.items():
print(f" {cat_name}: {cat.count} countries")
# Check visa requirement between two countries using enums.
result = client.visarequirements.check(
origin_country=OriginCountry.SINGAPORE,
destination_country=DestinationCountry.RUSSIA,
)
print(result.origin, "->", result.destination, ":", result.status)
# Browse visa destination guides and get detailed info for the first one.
dest = client.visadestinations.list(limit=1).first()
if dest:
guide = dest.info()
print(guide.title, guide.url)
for section_title in list(guide.content.keys())[:3]:
print(f" Section: {section_title}")
# Typed error handling for a country lookup that might not exist.
try:
unknown = client.passportranking("nonexistent-country-xyz")
unknown.details()
except CountryNotFound as exc:
print(f"Country not found: {exc}")
# Get general eTA information.
eta = client.etainfos.get()
print(eta.title, eta.url)
print("exercised: passportrankings.list / details / visarequirements.check / visadestinations.list / info / etainfos.get")
Get the full passport ranking list from VisaIndex. Returns all countries ranked by passport power with their rank, slug, and URL. The list is ordered by rank (strongest passport first).
No input parameters required.
{
"type": "object",
"fields": {
"rankings": "array of objects with country (string), rank (string), slug (string), url (string)"
},
"sample": {
"data": {
"rankings": [
{
"url": "https://visaindex.com/country/singapore-passport-ranking/",
"rank": "1",
"slug": "singapore",
"country": "Singapore"
},
{
"url": "https://visaindex.com/country/japan-passport-ranking/",
"rank": "2",
"slug": "japan",
"country": "Japan"
},
{
"url": "https://visaindex.com/country/south-korea-passport-ranking/",
"rank": "3",
"slug": "south-korea",
"country": "South Korea"
}
]
},
"status": "success"
}
}About the VisaIndex API
Passport Rankings and Country Details
The get_passport_ranking endpoint returns the full global ranking list as an array of objects, each with country, rank, slug, and url. No inputs required. To go deeper on a single passport, get_country_passport_details accepts a country_slug (e.g., 'singapore', 'united-states-of-america') and returns the country's rank, total_visa_free count, and a categories object with five keys — visa_free, visa_on_arrival, eta, visa_online, visa_required — each containing a count and a full countries array.
Bilateral Visa Checks
check_visa_requirement takes an origin_country and destination_country using the site's exact naming conventions (e.g., 'United States of America', not 'United States') and returns a status string such as 'Visa is required' or 'Visa is not required', along with a direct url to the requirement page. The endpoint returns input_not_found when the country name pair does not match the source's expected format, so exact naming matters.
Destination Guides and Golden Visa Programs
list_visa_destinations enumerates all available destination guides with name, slug, and url. Passing a slug (e.g., 'schengen', 'canada', 'turkey') to get_visa_destination_info returns a content object mapping section titles to text blocks covering visa types, fees, and application processes. The same pattern applies to golden visa data: list_golden_visa_programs lists available programs, and get_golden_visa_info returns structured content sections on eligibility, investment options, and benefits for countries like Portugal, Malta, and the UAE.
eTA Information
get_eta_info requires no inputs and returns a content object with sections on what eTAs are, which nationalities are eligible, fees, application steps, and validity periods. The response also includes the source url and page title.
The VisaIndex API is a managed, monitored endpoint for visaindex.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when visaindex.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official visaindex.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Rank and compare passports by total visa-free access count using
get_country_passport_detailsand thetotal_visa_freefield - Build a bilateral travel eligibility checker by calling
check_visa_requirementfor any origin-destination pair - Populate a country comparison tool with categorized destination counts across all five access tiers
- Display golden visa program summaries for relocation or investment research using
get_golden_visa_info - Generate destination-specific visa guides by fetching
contentsections fromget_visa_destination_info - List and filter all residency-by-investment programs available on VisaIndex via
list_golden_visa_programs - Provide eTA eligibility and process information within a travel planning application using
get_eta_info
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does VisaIndex have an official developer API?+
What exactly does `check_visa_requirement` return, and why does it sometimes return `input_not_found`?+
status string (e.g., 'Visa is required' or 'Visa is not required'), the origin and destination names as provided, and a url to the source page. It returns input_not_found when the country names don't match the site's exact format. For example, 'United States' fails; the correct value is 'United States of America'. Checking slugs against get_passport_ranking output first can help confirm correct naming.Does the API return historical passport ranking data or track rank changes over time?+
Does `get_country_passport_details` return visa requirement details for each individual destination country?+
check_visa_requirement with individual origin-destination pairs.Are visa-on-arrival fees or specific entry conditions included in the passport detail response?+
get_country_passport_details exposes category-level counts and country lists but not fee amounts or conditions per destination. get_visa_destination_info returns richer text content on fees for specific destination countries. You can fork this API on Parse and revise it to extract structured fee data from those content sections.