# Wandava open data

The JSON files behind https://wandava.com. They are rebuilt on every deploy (at least weekly). Free to read; please link to https://wandava.com when you reuse the data. Not legal advice: confirm entry rules with the destination's official website before travel.

Countries are identified by ISO 3166-1 alpha-2 codes (`MA`, `TH`). Dates are `YYYY-MM-DD`.

## Entry types

Every passport/destination pair has one `type`, from easiest to hardest:

| `type` | Meaning |
|---|---|
| `visa-free` | Enter with the passport alone |
| `visa-on-arrival` | Visa issued at the border |
| `eta` | Online travel authorization before departure (e.g. UK ETA, K-ETA) |
| `e-visa` | Visa applied for and issued online |
| `visa-required` | Visa from an embassy or consulate |
| `no-admission` | Entry refused to this nationality |

`days` is the maximum stay in days, or `null` when the source states no number.

## /data/passports/{ISO2}.json

Entry rules for one passport, e.g. `/data/passports/MA.json`.

- `iso`: the passport.
- `rules[]`: one entry per destination: `to` (destination), `type`, `days`. `override` (optional) is the id of a sourced correction that replaced the base dataset value.
- `changes[]`: real-world rule changes that affect this passport: `destination`, `type` and `days` (the new rule), `effective` (date the new rule applies), `upcoming` (`true` while `effective` is in the future; `rules` still show the current rule until then), `headline`/`headlineFr`, `post`/`postFr` (blog slug at `/blog/{post}` and `/fr/blog/{postFr}`, may be `null`) and `source` (`url`, `publisher`).

- `transit[]`: what this passport needs to change planes in each hub, one entry per hub (`schengen`, `uk`, `us`, `ca`; the passport's own hub is left out). `need`: `airport-transit-visa` (Schengen ATV or UK DATV), `visa`, `eta` (ESTA or Canadian eTA), `restricted` (US visas suspended or restricted for this nationality) or `none`. `states`: for Schengen, the member states whose airports require it, or `null` for every Schengen airport. `waivedBy`: document ids (as in visa-unlocks) that exempt the holder. `exemptions`/`exemptionsFr`, `conditions[]`/`conditionsFr[]` and `sources[]` (`url`, `publisher`, `checked`): the official lists (EU Visa Code Annex IV, Commission Annex 7B, UK Home Office, US State Department/CBP, IRCC).

- `sources`: keyed by correction id (the `override` of a rule): `url`, `publisher` and `checked` (date we read the source).
- `portals`: keyed by destination, the official eVisa/eTA website for rules of that type (see visa-portals below).
- `audit`: the latest comparison with IATA Timatic through Wikipedia's "Visa requirements for X citizens" table, or `null`: `date`, `compared` (destinations compared), `agree`, `labelling` (both labels defensible), `dismissed` (Timatic differs, an official source confirmed our value), `disputed` (Timatic differs from one of our sourced corrections), `open` (differences not yet checked) and `source` (`url`, `lastEdited` of the Wikipedia page).

## /data/destinations/{ISO2}.json

The same rules seen from one destination, e.g. `/data/destinations/TH.json`.

- `rules[]`: `from` (passport), `type`, `days`, optional `override`.
- `changes[]`: as above, plus `passports[]` (the passports the change applies to).
- `portals[]`: official eVisa/eTA websites for this destination (see visa-portals below).

## /data/countries.json

- `visaDataVersion`: the dataset and correction date shown on every page. `dataDate`: last visa data check. `sources`: refresh date per enrichment source.
- `countries[]`: `iso`, `name`, `slug` (`/passport/{slug}`), `slugs.en`/`slugs.fr` (French pages at `/fr/passeport/{slugs.fr}`), `continent` (`AF`, `AS`, `EU`, `NA`, `OC`, `SA`), `mainAirport` (IATA), `cost` (estimated daily travel cost in USD: `min`, `avg`, `max`; `costEstimated: true` when filled from a regional average), `categories` (attraction types), `bestMonths` (1–12), `climateCity`, `advisory` (US State Department level 1–4 and `link`).

`/data/countries.fr.json` has the same shape with French names.

## /data/visa-unlocks.json

Extra countries open to holders of a valid US, UK or Schengen visa or residence permit. Only rules verified against an official government or embassy source are published.

- `documents`: the document ids used in `accepts` (`us-visa`, `us-residence`, `uk-visa`, `uk-residence`, `schengen-visa`, `schengen-residence`).
- `rules[]`: `destination`, `accepts[]` (any one of these documents is enough), `passports` (`{"all": true}`, `{"only": [...]}` or `{"except": [...]}`), `grants` (`type`, `days`), `conditions` (plain-language requirements), optional `validFrom`/`validUntil`, and `source` (`url`, `publisher`, `checked`).

`/data/visa-unlocks.fr.json` has the same rules with French `conditions`.

## /data/visa-portals.json

Official government eVisa and eTA application websites, never agencies.

- `portals`: keyed by destination, each a list of `types[]` (`eta`, `e-visa`), `url`, `fee` (`amount`, `currency`, only when the official page states one fee for all nationalities, else `null`) and `source` (`url`, `publisher`, `checked`).

## /data/pair-pages.json

The passport-to-destination pages (`/passport/{passport}/to/{destination}`, French `/fr/passeport/{passport}/vers/{destination}`). One entry per page, built only for a few passports and only for pairs whose rule was corrected with a cited source or where a held visa or residence permit makes entry easier.

- `passport`, `destination` (ISO2), `passportSlugs`, `paths.en`/`paths.fr`.
- `type`, `days`: the rule without any held document (same as `rules[]` in the passport file).
- `ruleSource`: `url`, `publisher`, `checked` and `since` (date the rule took effect, or `null` for a correction of stale data) when the rule comes from a sourced correction, else `null`.
- `unlocks[]`: ids of the visa-unlock rules that make entry easier for this passport.
- `change`: the announced rule change for this pair (same fields as `changes[]` above), or `null`.

## /data/data-quality.json

Summary behind the methodology page (`/methodology`).

- `dataDate`, `overrides` (`active` corrections, `checkedAt`), `dismissals` (differences confirmed with an official source), `recentlyChecked` (source checks dated within 30 days of `dataDate`), `unlocks`, `portals`, `transitLists`.
- `auditTotals`: across all audited passports, `passports`, `compared`, `confirmed` (agree + labelling + dismissed + disputed), `open`, `latest` (audit date).
- `passports[]`: the priority passports, each with `iso`, `counts` per entry type, `sourcedRules` and `audit` (as in the passport files).
