Visa and entry requirements — 199 passports · 39,402 routes
Can I enter?
Pick a passport and a destination: the rule, the allowed stay, and what to arrange before you fly. Five free checks a day, no account.
Verify you're human to unlock 20 checks a day
Where next · Trust and transparency · Developers and agents: the same check as an HTTP request
01 — Where next
- Netherlands → Japan
- United States → Brazil
- United Kingdom → United States
- India → United Arab Emirates
- India → Thailand
- United States → China
- Germany → Thailand
- Philippines → Japan
- Australia → Indonesia
- Canada → Mexico
- United States → Vietnam
- United Kingdom → Australia
Every passport to destination pair has a page: where a passport can go · who needs a visa for a destination · 39,402 routes in the sitemap.
02 — Trust and transparency
Counted from the dataset itself
Every figure below is computed from the exact dataset this deployment serves: nothing is written by hand. Every entry rule is re-checked against its cited official source every day; the live counters come straight from production, refreshed every five minutes.
199
Passports covered
39,402
Passport to destination routes
191/199
Verified against official sources
827
Rules with source citations
71
Rules re-verified today
538
Official sources checked daily
0d
Median rule age since verification
2026-08-12
Dataset version
—
API uptime · 30 days
172/199
Official application portals linked
—
AI-agent visits today
—
MCP tool calls · all time
Verification activity
- AGOSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- ARESources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- ATGSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- AUSSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- AUTPassport-validity, blank-pages, onward-ticket, residence-permit-exemption and purpose-scope rules re-read against oesterreich.gv.at and bmeia.gv.at, all unchanged; the flagged content-hash change was a cosmetic page-furniture update.
- BHRSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- BIHSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- BTNPassport-validity, sustainable-development-fee and purpose-scope rules re-read against doi.gov.bt and bhutan.travel, all unchanged.
- CANPassport, blank-pages, health, TWOV, residence-permit-exemption and purpose-scope rules re-read against canada.ca, all unchanged; the flagged eta.html hash change was a transient scheduled-maintenance banner.
- CHLFull deep audit: every populated field (passport validity, onward ticket, TWOV, residence-permit exemptions, purpose scope where applicable) re-read against live official sources and found accurate.
- CHNFull deep audit: every populated field (passport validity, onward ticket, TWOV, residence-permit exemptions, purpose scope where applicable) re-read against live official sources and found accurate.
- CIVFull deep audit: every populated field (passport validity, onward ticket, TWOV, residence-permit exemptions, purpose scope where applicable) re-read against live official sources and found accurate.
- CMRFull deep audit: every populated field (passport validity, onward ticket, TWOV, residence-permit exemptions, purpose scope where applicable) re-read against live official sources and found accurate.
- CODFull deep audit: every populated field (passport validity, onward ticket, TWOV, residence-permit exemptions, purpose scope where applicable) re-read against live official sources and found accurate.
- COGFull deep audit: every populated field (passport validity, onward ticket, TWOV, residence-permit exemptions, purpose scope where applicable) re-read against live official sources and found accurate.
- COLSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- COMFull deep audit: every populated field (passport validity, onward ticket, TWOV, residence-permit exemptions, purpose scope where applicable) re-read against live official sources and found accurate.
- CPVTourist-visa duration corrected from a flat 30-day cap to 90 days (extendable once to 180); transit visa corrected to 4 days; added the EASE pre-registration and TSA airport-tax requirement that applies even to visa-exempt travellers. Passport-validity and onward-ticket reconfirmed unchanged.
- CRISources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- CUBFull deep audit: every populated field (passport validity, onward ticket, TWOV, residence-permit exemptions, purpose scope where applicable) re-read against live official sources and found accurate.
- CYPDeep audit: blank-pages, airport-transit-visa and two of three residence-permit-exemption clauses reconfirmed unchanged, and the third clause's excluded-country list corrected to 'except the UK and Ireland' (was 'except Ireland'); passport-validity flagged needs_review because the cited embassy page states two different anchors for the 3-month buffer (beyond the visa's validity in one section, beyond the trip in another) without reconciling them.
- CZEFull deep audit: every populated field (passport validity, onward ticket, TWOV, residence-permit exemptions, purpose scope where applicable) re-read against live official sources and found accurate.
- DEUFull deep audit: every populated field (passport validity, onward ticket, TWOV, residence-permit exemptions, purpose scope where applicable) re-read against live official sources and found accurate.
- GABSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- GINSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- HUNSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- INDPassport-validity, blank-pages, onward-ticket and purpose-scope rules re-read against indianembassyusa.gov.in and indianvisaonline.gov.in, all unchanged; the flagged hash change was a page-footer date edit.
- IRNSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- IRQPassport-validity, blank-pages, onward-ticket and purpose-scope rules re-read against UK FCDO and the Iraqi MOFA, all unchanged.
- KHMSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- LCAPassport-validity and purpose-scope rules re-read against stlucia.org and govt.lc, unchanged.
- LSOBlank-pages rule flagged needs_review: the cited source states the 3-clean-pages requirement specifically for trade-purpose visas, while the general embassy visa-requirements list has no blank-pages item at all. Passport-validity, onward-ticket, health and purpose-scope reconfirmed unchanged.
- MDASources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- MNGSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- MOZSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- MUSSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- MYSSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- NAMBlank-pages note corrected: both current MHAISS documents require 3 clean pages uniformly; the prior note's claim of a 2-page exception for online applications was not supported by either source. Passport-validity, onward-ticket, health and purpose-scope reconfirmed unchanged.
- NGASources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
- NPLSources previously flagged unreachable were retried and loaded successfully; live official content matches the stored rules unchanged (prior failures were sandbox/proxy artifacts, not real outages).
Full data, machine-readable: GET /transparency · GET /stats.json · GET /changes.json · status.canienter.com
03 — Integration
The answer, sold by the request.
An unpaid call returns HTTP 402 with payment instructions. Any x402 client settles $0.03 in USDC and retries. Payments run on Base mainnet.
# Free tier — 5 checks a day, no auth curl "https://api.canienter.com/free/check?passport=NLD&destination=JPN" # Paid tier — answers HTTP 402 Payment Required. The offer (amount, # asset, pay-to) is base64 JSON in the PAYMENT-REQUIRED header; # any x402 client settles it and retries automatically. curl "https://api.canienter.com/v1/check?passport=NLD&destination=JPN" # Peek at the offer without paying: curl -s -o /dev/null -D - "https://api.canienter.com/v1/check?passport=NLD&destination=JPN" \ | grep -i "^payment-required" | cut -d" " -f2 | base64 -d
// npm i @x402/fetch @x402/evm viem (Node 18+) // WARNING: running this spends real USDC ($0.03/call, Base mainnet). // Inspect the offer first, free of charge: const probe = await fetch("https://api.canienter.com/v1/check?passport=NLD&destination=JPN"); console.log(probe.status, /* 402 */ JSON.parse(atob(probe.headers.get("PAYMENT-REQUIRED")))); // Then pay per call — key from an env var, never hardcoded or logged: import { wrapFetchWithPaymentFromConfig } from "@x402/fetch"; import { ExactEvmScheme } from "@x402/evm"; import { privateKeyToAccount } from "viem/accounts"; const account = privateKeyToAccount(process.env.X402_PRIVATE_KEY); const payFetch = wrapFetchWithPaymentFromConfig(fetch, { schemes: [ { network: "eip155:8453", client: new ExactEvmScheme(account) }]}); const res = await payFetch( "https://api.canienter.com/v1/check?passport=NLD&destination=JPN"); if (!res.ok) throw new Error("check failed: " + res.status); const { requirement, allowed_stay_days } = await res.json();
# The API publishes its own agent skill (Claude Code paths shown; # Codex/Cursor/other agents: use your agent's skills directory) mkdir -p ~/.claude/skills/visa-check curl -s "https://api.canienter.com/.well-known/agent-skills/visa-check/SKILL.md" \ -o ~/.claude/skills/visa-check/SKILL.md # Discovery index with the SKILL.md sha256 digest (verify, updates, extras): curl -s "https://api.canienter.com/.well-known/agent-skills/index.json" # Remove: delete ~/.claude/skills/visa-check
The skill lets an agent look up entry requirements and pay per request over x402. There is no API key to leak.
Machine docs: GET /llms.txt · GET /openapi.json
Add to your agent
| Endpoint | Price |
|---|---|
| /free/check | free · 5/day |
| /v1/check | $0.03 |
| /v1/trips/evaluatefull trip: multi-leg, multi-passport, explanations | $0.10 |
| /v1/passport/{iso3}all 198 destinations at once | $0.15 |
- USDC on Base mainnet · x402 v2
- No account, no API key, no contract
- Freshness date on every answer
01 — Call
GET /v1/check: the unpaid request returns HTTP 402 with a payment offer.
02 — Pay
$0.03 USDC via any x402 client, settled on Base mainnet.
03 — Answer
JSON verdict plus an on-chain receipt for the payment.
Not a developer? The same answers go on your own site with two lines of HTML: no API call, no account.
04 — Your site
Runs on your pages, too.
A travel guide, a relocation blog, a booking flow: paste two lines and your readers get the requirement, the allowed stay and a link to the sourced rules without leaving your page. It is free for any site, commercial or not. The only thing asked in return is that the attribution link stays visible.
<!-- anywhere in your page --> <div data-canienter-widget></div> <script src="https://canienter.com/embed.js" async></script> <!-- on a Japan guide, pre-select the destination --> <div data-canienter-widget data-destination="JPN"></div>
- No cookies, no tracking, no account
- Follows your reader's light and dark setting
- Auto-sizes to its container
- Answers cite the same official sources