Travel Visa Requirements API for Developers

Check visa rules, view historical changes, generate map colors, and build custom passport rankings with a single API. Designed for travel apps, booking platforms, immigration tools, and passport intelligence products covering 200 passports and 211 destinations worldwide. Free tier included.

The Travel Buddy Visa Requirements API delivers the most up-to-date visa requirements for 200 passports and 211 destinations. Version 2 introduces a structured model with primary and secondary visa rules, exception rules, and mandatory registration requirements. Developers can also generate color-coded Visa Maps for global visualization or create custom Passport Rankings by weighting visa categories like Visa-free, eVisa, or Freedom of movement.
Built for travel apps, booking engines, and immigration tools, the API is updated daily and offers a free tier to get started quickly.

Key Features

Tourist Visa Checks

Determine visa need and stay duration for any passport–destination pair.

Determine if a visa is required for travel between specific countries.

eVisa & eTA Links

Direct links to official application portals where available.

Links to official government eVisa/eTA/tourist card .. etc website when available.

Entry Requirements

Passport validity, embassy info, phone code, currency, capital, and more.

Get information on how long your passport must be valid beyond your stay.

MapColor Endpoint

Power passport‑index style maps with green/blue/yellow/red indicators.

Get essential details such as your destination's phone code, currency, and capital city.

Historic Visa Rules

Historical changes in the visa rule from a selected date.

Historical changes for the primary visa rule between one passport and one destination from a selected date.

Travel Visa API: Quickstart

Integrate in minutes: our Visa Requirements API delivers up-to-date entry rules, powered by our most accurate API data, with color‑coded statuses for fast UX. From travel planners to booking engines and immigration workflows, flexible pricing (including a free tier) makes it easy to start and scale.

Endpoints:

  • Visa Check: Visa requirement details for one passport to one destination (JSON response with status, stay length, validity rules, embassy/eVisa links).
  • MapColor: Color codes for one passport across 210 destinations (green, blue, yellow, red) for instant map visualizations.
  • Custom Passport Ranking: Create your custom global passport ranking of passports based on your own weighting of visa rule categories
  • Historic Visa Rules: Track how visa requirements have changed over time for one passport and destination pair, starting from a selected date. See previous and current rules, change dates, stay duration, and status colors. Real historic data is available on MEGA and VIP; other authenticated users receive clearly marked demo data.

Open the Visa Requirements API Playground to test requests, then ship a smoother travel experience with Travel Buddy.

Quick Examples

Visa Check (v2)

The /v2/visa/check endpoint provides a detailed breakdown of visa and entry requirements for one passport–destination pair. It returns structured information about:

  • Passport & destination details – country codes, names, continent, capital, currency, exchange info, population, area, phone code, time zone, and passport validity requirements.
  • Mandatory registration rules – e.g., e-Arrival, police registration, or other pre-travel forms, including color-coded status and official links.
  • Visa rules – primary and secondary entry policies (visa-free, visa required, visa on arrival, eVisa, eTA, etc.), with allowed duration of stay, color-coded category, and links to official sources if available.
    The exception of primary entry policy.

Example Request

curl -X POST https://visa-requirement.p.rapidapi.com/v2/visa/check \
  -H "Content-Type: application/json" \
  -H "X-RapidAPI-Proxy-Secret: ${RAPIDAPI_SECRET}" \
  -d '{"passport":"CN","destination":"ID"}'

Example Response


{
  "data": {
    "passport": {
      "code": "CN",
      "name": "China",
      "currency_code": "CNY"
    },
    "destination": {
      "code": "ID",
      "name": "Indonesia",
      "continent": "Asia",
      "capital": "Jakarta",
      "currency_code": "IDR",
      "currency": "Indonesian Rupiah",
      "exchange": "0.00425",
      "passport_validity": "3 months beyond the period of stay",
      "phone_code": "+62",
      "timezone": "+08:00",
      "population": 277329163,
      "area_km2": 1916907,
      "embassy_url": "https://www.embassypages.com/china#titlePlaceholder2"
    },
    "mandatory_registration": {
      "name": "e-Arrival",
      "color": "yellow",
      "link": "https://link.travel-buddy.ai/?link=76E321T3"
    },
    "visa_rules": {
      "primary_rule": {
        "name": "Visa on arrival",
        "duration": "30 days",
        "color": "blue"
      },
      "secondary_rule": {
        "name": "eVisa",
        "duration": "30 days",
        "color": "blue",
        "link": "https://link.travel-buddy.ai/?link=76E323T2"
      }
    }
  },
  "meta": {
    "version": "2.0",
    "language": "en",
    "generated_at": "2025-09-28T11:47:00+00:00"
  }
}

How to display Visa Rules to end users

Use the primary_rule as the authoritative color (UI badge) and combine it with secondary_rule for a concise customer-facing line such as: “Visa on arrival / eVisa – 30 days”.

SituationConditionWhat to displayDuration used
Only primary rule existssecondary_rule is absentprimary_rule – XXX daysprimary_rule.duration
Both rules have durationsBoth primary_rule.duration and
secondary_rule.duration are present
primary_rule / secondary_rule – XXX daysprimary_rule.duration
Primary has no durationprimary_rule.duration is null/empty and secondary_rule.duration existsprimary_rule / secondary_rule – XXX dayssecondary_rule.duration

Notes: “XXX days” is the duration chosen per the rules above. If neither rule has a duration, omit the days suffix (e.g., “Visa required / eTA”).

What is exception_rule?

An exception is a conditional rule that can override the primary policy for travelers who meet specific criteria (e.g., holding a valid visa/residence for another country, traveling in an organized tour, or meeting transit-waiver conditions). The API may include fields such as:

  • exception_rule.name and exception_rule.exception_type_name – the exception type.
  • exception_rule.full_text – human-readable condition(s).
  • exception_rule.country_codes – related countries referred to by the exception.
  • exception_rule.link – official source/details.

Display guidance: Show exceptions as a highlighted notice beneath the combined rule line, e.g., “Exception:  Visa waiver available for holders of US/CA visas”. Do not change the primary color badge unless your UI allows users to confirm they meet the exception criteria.

What is mandatory_registration?

Some destinations require travelers to complete a pre-arrival immigration/arrival form online (e.g., “e-Arrival”, “pre-registration”, “ED card”). This step is always free but mandatory for all (or most) travelers, and it is separate from visas or eVisas.

  • Show this near the top of your UI, e.g., “Mandatory registration: e-Arrival”.
  • Use the provided mandatory_registration.link so travelers complete the official form.
  • This does not replace a visa requirement; it’s an additional step.

Example: { "name": "e-Arrival", "color": "yellow", "link": "https://link.travel-buddy.ai/?link=...T3" }

Map Colors (v2)

The /v2/visa/map endpoint provides a color-coded overview of visa requirements for all 210 destinations from the perspective of a single passport. Instead of listing rules individually, it groups destinations by color category (visa-free, visa on arrival, eTA, visa required, etc.) for efficient map visualization.

  • passport – the passport country code (ISO Alpha-2).
  • colors – an object where each key is a visa category color, and the value is a comma-separated list of destination ISO codes.

 

The color represent:

  • Red - Visa required,  Online visa required, Not admitted
  • Blue - Visa on Arrival or eVisa
  • Green - Visa not required, Freedom of movement .. etc
  • Yellow - eTA, Visa Waiver Registration

Example request

curl -X POST https://visa-requirement.p.rapidapi.com/v2/visa/map \
  -H "Content-Type: application/json" \
  -H "X-RapidAPI-Proxy-Secret: ${RAPIDAPI_SECRET}" \
  -d '{"passport":"CN"}'

Example response


{
  "data": {
    "passport": "CN",
    "colors": {
      "red": "AD,AF,AR,AT,AU,AW,BE,BG,BM,BR,BZ,CA,CF,CG,CH,CL,CM,CN,CR,CW,CY,CZ,DE,DK,DO,DZ,EC,EE,ER,ES,FI,FR,GB,GH,GM,GP,GR,GT,GY,HN,HR,HU,IE,IL,IN,IS,IT,KP,KR,KW,KY,LI,LR,LS,LT,LU,LV,MC,ME,MF,MH,MK,ML,MQ,MT,MX,NE,NI,NL,NO,NR,NZ,PA,PE,PG,PL,PT,PY,RO,SD,SE,SI,SK,SM,SO,SV,SX,SZ,TC,TM,TW,US,UY,VA,VC,VE,VG,XK,YE",
      "green": "AE,AG,AL,AM,AO,AZ,BA,BB,BJ,BN,BS,BY,CU,DM,FJ,FM,GD,GE,HT,IR,JM,KI,KZ,LC,MA,MU,MV,MW,MY,MZ,PS,RS,SG,SR,ST,TH,TN,UZ,VU,WS,ZM",
      "blue": "AI,BD,BF,BH,BI,BO,BT,BW,CD,CO,CV,DJ,EG,ET,GA,GN,GQ,GW,HK,ID,IQ,JO,JP,KG,KH,KM,LA,LB,LY,MD,MG,MM,MN,MO,MR,MS,NA,NG,NP,OM,PH,PK,PW,QA,RU,RW,SA,SB,SL,SN,SS,SY,TD,TG,TJ,TL,TO,TR,TT,TV,TZ,UA,UG,VN,ZA,ZW",
      "yellow": "CI,KE,KN,LK,SC"
    }
  },
  "meta": {
    "version": "2.0",
    "language": "en",
    "generated_at": "2025-09-28T11:56:37+00:00"
  }
}
Color Visa Map

Free example Color Map

HTML, jQuery + SimpleMap

Custom Passport Ranking (new v2)

The /v2/passport/rank/custom endpoint lets you generate a custom global ranking of passports based on your own weighting of visa rule categories. You provide a weight per category (positive, zero, or negative). The service computes a score for each passport using your weights and returns a ranked list.

  • What you get – A list of passports with rank, total score, basic passport info, and a breakdown of counts per visa category used in the score.
  • How scoring works – For each passport: score = Σ(count_in_category × weight_of_category). Higher scores rank higher.
  • Categories you can weight – Typically include: Visa-freeVisa on arrivalVisa requiredeVisaeTATourist cardFreedom of movementNot admitted.
  • Defaults – Any category you do not specify is treated as weight 0. Weights can be integers or floats.

Example request

curl -X POST https://visa-requirement.p.rapidapi.com/v2/passport/rank/custom \
  -H "Content-Type: application/json" \
  -H "X-RapidAPI-Proxy-Secret: ${RAPIDAPI_SECRET}" \
  -d '{
    "weights": {
      "Visa-free": 2,
      "Visa on arrival": 1,
      "Visa required": 0,
      "eVisa": 1,
      "eTA": 1,
      "Tourist card": 0,
      "Freedom of movement": 3,
      "Not admitted": -1
    }
  }'

Example response

{
  "data": [
    {
      "rank": 1,
      "score": 218.0,
      "passport": { "code": "SE", "name": "Sweden" },
      "categories": {
        "Visa-free": 120,
        "Visa on arrival": 30,
        "Visa required": 10,
        "eVisa": 5,
        "eTA": 2,
        "Tourist card": 3,
        "Freedom of movement": 12,
        "Not admitted": 1
      }
    },
    {
      "rank": 2,
      "score": 205.0,
      "passport": { "code": "BG", "name": "Bulgaria" },
      "categories": {
        "Visa-free": 95,
        "Visa on arrival": 25,
        "Visa required": 15,
        "eVisa": 8,
        "eTA": 1,
        "Tourist card": 5,
        "Freedom of movement": 5,
        "Not admitted": 2
      }
    }
  ],
  "meta": {
    "version": "2.0",
    "language": "en",
    "weights": {
      "Visa-free": 2,
      "Visa on arrival": 1,
      "Visa required": 0,
      "eVisa": 1,
      "eTA": 1,
      "Tourist card": 0,
      "Freedom of movement": 3,
      "Not admitted": -1
    },
    "generated_at": "2024-09-25T22:47:00Z"
  }
}

Historic Visa Rules API (v2)

Track how visa requirements have changed over time between a passport country and a destination country.

The Historic Visa Rules endpoint lets you check the history of the primary visa rule for one passport and one destination, starting from a selected date. It shows whether the rule has changed, when the change happened, what the previous rule was, and what the current rule is.

This is useful for travel platforms, booking engines, visa comparison tools, mobility dashboards, immigration workflows, and data teams that need more than the current visa status.

With historic visa rules, you can:

  • Show when a destination changed from visa required to visa-free, eVisa, visa on arrival, or another category
  • Compare previous and current entry requirements
  • Explain changes in passport mobility or destination access
  • Build visa change alerts, travel intelligence dashboards, and policy history tools
  • Support internal research, reporting, and compliance workflows

Endpoint

GET /v2/visa/check/history/{passport}/{destination}/{fromDate}

Example request

GET /v2/visa/check/history/KZ/ME/2024-01-01

This request checks historic visa rule changes for Kazakhstan passport holders traveling to Montenegro, starting from 2024-01-01.

Parameters

ParameterDescription
passportISO 3166-1 alpha-2 passport country code, for example KZ
destinationISO 3166-1 alpha-2 destination country code, for example ME
fromDateStart date for checking history. Accepted formats: YYYY-MM-DD, YYYYMMDD, DDMMYYYY

Example response

{
  "data": {
    "pcc": "KZ",
    "dcc": "ME",
    "from_date": "2024-01-01",
    "passport": {
      "code": "KZ",
      "name": "Kazakhstan"
    },
    "destination": {
      "code": "ME",
      "name": "Montenegro"
    },
    "has_changes_since_from_date": true,
    "current_rule": {
      "id": 21,
      "name": "Visa not required",
      "display_label": "Visa not required",
      "duration": "30 days",
      "duration_days": 30,
      "color": "green"
    },
    "changes": [
      {
        "date": "2024-07-29",
        "old_rule": {
          "id": 68,
          "name": "Visa required",
          "display_label": "Visa required",
          "color": "red"
        },
        "new_rule": {
          "id": 21,
          "name": "Visa not required",
          "display_label": "Visa not required",
          "duration": "30 days",
          "duration_days": 30,
          "color": "green"
        }
      }
    ]
  },
  "meta": {
    "version": "2.0",
    "language": "en",
    "generated_at": "2026-05-01T00:00:00+00:00",
    "data_mode": "real",
    "is_demo": false
  }
}

Real data access

Real historic visa rule data is available for MEGA plan users and CUSTOM-internal access.

Other authenticated users can still test the endpoint with demo data. Demo responses are clearly marked in the response metadata:

{
  "data_mode": "demo",
  "is_demo": true
}

Real responses are marked as:

{
  "data_mode": "real",
  "is_demo": false
}

This makes it easy to test the endpoint before upgrading, while clearly separating demo data from real historic visa rule data.

Migration (v1 → v2)

  1. Switch endpoint paths from /v1/* to /v2/*.
  2. Change body to JSON (from x-www-form-urlencoded), fields stay passport and destination.
  3. Expect nested data.* and visa_rules.primary/secondary/exception.

Errors

400 Other domain errors (rare).
401 Authentication or quota issues
404 Resource not found (e.g., no visa or map data)
405 Wrong method on `/` root helper route.
422 Validation problems (missing parameters, invalid weights, identical passport/destination, bad JSON).
500 Unhandled errors (logged server-side).

Pricing: Free and Paid Plans

We offer four public subscription plans to fit projects of any size, including a generous free tier with 120 monthly requests. Paid plans start at just $4.99/month, which includes 3,000 requests per month, and scale up to support millions of requests. For high-volume or custom needs, we also offer a private enterprise plan for select partners. Click here to see the full pricing and compare plans..

Contact Us

Have questions? Our dedicated support team is ready to assist you. Contact us anytime at [email protected].

FAQ