{
  "site": "https://drivingschools.nl",
  "page": "https://drivingschools.nl/result-link",
  "description": "How to construct a link that opens a computed licence verdict on drivingschools.nl. The answers travel in the URL fragment (after \"#\"), which the browser never sends to a server; the page evaluates them against the versioned rules files and renders the verdict, the sources and the cost.",
  "rules_version": "1.2.2",
  "last_verified": "2026-09-02",
  "url": "https://drivingschools.nl/check#<fragment>",
  "encoding": "The fragment is a query string: key=value pairs joined with \"&\", values percent-encoded (a colon may be written as \":\" or \"%3A\"). Key order does not matter. Unknown keys are ignored.",
  "validation": "A link whose required keys are missing or invalid (a malformed date, an issue or registration month in the future, an expiry before the issue, a parent code such as CA or GB) opens the empty checker instead of a verdict. It never shows a verdict built on impossible input.",
  "stability": "Keys are never removed or renamed. A link shared today keeps resolving; if the rules change, it re-evaluates against the current rules version, which is shown at the foot of the result.",
  "computed_where": "In the browser, by the same rules engine that builds the country pages. There is no server-side verdict endpoint: to read a verdict without a browser, use the per-country JSON at https://drivingschools.nl/exchange/<slug>.json (it carries a worked example computed by the engine) and the rules files at https://drivingschools.nl/rules/index.json.",
  "answer_keys": [
    {
      "key": "c",
      "required": true,
      "meaning": "The country or territory that issued the licence (not the holder's nationality).",
      "format": "An ISO 3166-1 alpha-2 code, or one of the sub-national codes: CA-AB, CA-QC, CA-OTHER, GB-GBN, GB-NIR, XK. The parent codes CA and GB are not a complete answer; NL is not a foreign licence. Any other two-letter code resolves (rule group \"everywhere else\")."
    },
    {
      "key": "iss",
      "required": true,
      "meaning": "The issue date printed on the licence (field 4a on an EU licence).",
      "format": "YYYY-MM or YYYY-MM-DD. Not after the current month. A month is read as its first day."
    },
    {
      "key": "brp",
      "required": true,
      "meaning": "Whether the holder is registered at a Dutch address (Basisregistratie Personen, BRP), and since when.",
      "format": "\"registered:YYYY-MM\" (or registered:YYYY-MM-DD; not after the current month), \"not_yet\" (moving here or just arrived), or \"visitor\" (not planning to register).",
      "values": [
        "registered:<date>",
        "not_yet",
        "visitor"
      ]
    },
    {
      "key": "exp",
      "required": false,
      "meaning": "The expiry date printed on the licence (field 4b).",
      "format": "YYYY-MM or YYYY-MM-DD, not before the issue date. A month is read as its last day. Empty or absent means \"not given\".",
      "default": "Unknown expiry; the engine assumes the licence is still valid."
    },
    {
      "key": "cat",
      "required": false,
      "meaning": "The categories on the licence.",
      "format": "Codes joined with a dot, e.g. \"B\" or \"B.C\". Accepted: AM, A1, A2, A, B, BE, C1, C, D1, D, C1E, CE, D1E, DE. Unknown codes are dropped; duplicates are merged.",
      "values": [
        "AM",
        "A1",
        "A2",
        "A",
        "B",
        "BE",
        "C1",
        "C",
        "D1",
        "D",
        "C1E",
        "CE",
        "D1E",
        "DE"
      ],
      "default": "B (a car licence)."
    },
    {
      "key": "x",
      "required": false,
      "meaning": "Whether the holder (or their partner) has a Belastingdienst expat-scheme (30% ruling) decision.",
      "format": "yes, no, applied (waiting for the decision) or not_sure.",
      "values": [
        "yes",
        "no",
        "applied",
        "not_sure"
      ],
      "when": "Asked only for non-EU/EFTA licences with a BRP registration and a licence that has not expired; otherwise it cannot change the result.",
      "default": "no."
    },
    {
      "key": "r",
      "required": false,
      "meaning": "Whether the holder lived in the issuing country for at least 185 days in the year the licence was issued.",
      "format": "yes, no or unsure.",
      "values": [
        "yes",
        "no",
        "unsure"
      ],
      "when": "Read for agreement countries, the Dutch Caribbean, and any country when x=yes (the RDW's 185-day residency condition for an exchange).",
      "default": "Not answered; the verdict says the condition is unconfirmed."
    },
    {
      "key": "tp",
      "required": false,
      "meaning": "Ukraine only: the holder is covered by the Temporary Protection Directive (residence document type 46).",
      "format": "\"1\" for yes. Any other value, or absent, means no.",
      "values": [
        "1"
      ],
      "when": "Read only when c=UA.",
      "default": "Not covered."
    }
  ],
  "cost_keys": [
    {
      "key": "city",
      "required": false,
      "meaning": "The gemeente whose exchange fee, appointment and processing time the cost table shows.",
      "format": "One of: amsterdam, den-haag, utrecht, rotterdam, eindhoven, leiden. Other values are ignored.",
      "values": [
        "amsterdam",
        "den-haag",
        "utrecht",
        "rotterdam",
        "eindhoven",
        "leiden"
      ],
      "default": "The national maximum fee."
    },
    {
      "key": "lessons",
      "required": false,
      "meaning": "Number of driving lessons assumed in the retest estimate.",
      "format": "An integer from 1 to 99.",
      "default": "The market median for the route (a labelled estimate)."
    },
    {
      "key": "price",
      "required": false,
      "meaning": "Price of one driving lesson in euros.",
      "format": "A number from 10 to 500.",
      "default": "The national median lesson price (a labelled estimate)."
    },
    {
      "key": "ta",
      "required": false,
      "meaning": "Theory exam attempts assumed.",
      "format": "A number from 1 to 9 (decimals allowed, for an expected value).",
      "default": "The default attempt count in retest_assumptions.json."
    },
    {
      "key": "pa",
      "required": false,
      "meaning": "Practical exam attempts assumed.",
      "format": "A number from 1 to 9 (decimals allowed).",
      "default": "The default attempt count in retest_assumptions.json."
    },
    {
      "key": "tt",
      "required": false,
      "meaning": "Include the optional interim test (tussentijdse toets) in the retest estimate.",
      "format": "\"1\" to include it.",
      "values": [
        "1"
      ],
      "default": "Not included."
    }
  ],
  "prefill_keys": [
    {
      "key": "go",
      "required": false,
      "meaning": "With c and no other answer keys: open the checker at the dates question with the country already answered.",
      "format": "\"1\". Without it, a link with only c shows the country pre-selected on the first question, to confirm or change.",
      "values": [
        "1"
      ]
    },
    {
      "key": "first",
      "required": false,
      "meaning": "No foreign licence at all: show the first-licence (beginner) cost roadmap instead of the questions. The cost keys still apply.",
      "format": "\"1\". The answer keys are ignored when it is present.",
      "values": [
        "1"
      ]
    }
  ],
  "examples": [
    {
      "title": "A United States car licence, registered in the Netherlands since June 2026",
      "url": "https://drivingschools.nl/check#c=US&cat=B&iss=2019-05&exp=2029-05&brp=registered%3A2026-06&x=no",
      "opens": "The verdict: 185 days from the registration month, the CBR-exams route, and the cost block for an experienced driver."
    },
    {
      "title": "The same licence, with the 30% ruling and the cost table set to Amsterdam",
      "url": "https://drivingschools.nl/check#c=US&cat=B&iss=2019-05&exp=2029-05&brp=registered%3A2026-06&x=yes&r=yes&city=amsterdam",
      "opens": "The exchange route through the expat scheme, priced with the Amsterdam fee."
    },
    {
      "title": "A Japanese licence with car and motorcycle categories, not yet registered",
      "url": "https://drivingschools.nl/check#c=JP&cat=A.B&iss=2015-03&brp=not_yet&r=yes",
      "opens": "The visitor verdict now, and the exchange route (A and B only) once registered."
    },
    {
      "title": "A German licence, registered since February 2026",
      "url": "https://drivingschools.nl/check#c=DE&iss=2018-06&brp=registered%3A2026-02",
      "opens": "The EU verdict: valid up to 15 years from issue, exchangeable at the gemeente for all categories. No expat-scheme key is needed."
    },
    {
      "title": "A Ukrainian licence under temporary protection",
      "url": "https://drivingschools.nl/check#c=UA&iss=2016-08&exp=2026-08&brp=registered%3A2022-04&tp=1",
      "opens": "The temporary-protection verdict: the licence stays valid here while the protection applies."
    },
    {
      "title": "A Canadian licence issued in Alberta",
      "url": "https://drivingschools.nl/check#c=CA-AB&iss=2020-01&brp=registered%3A2026-05&r=yes",
      "opens": "The Alberta verdict. \"c=CA\" alone is not a complete answer: the provinces have different rules."
    },
    {
      "title": "Start the checker with the country answered",
      "url": "https://drivingschools.nl/check#c=IN&go=1",
      "opens": "The checker at the dates question, India already chosen. No verdict yet."
    },
    {
      "title": "The beginner roadmap with 40 lessons at €75",
      "url": "https://drivingschools.nl/check#first=1&lessons=40&price=75",
      "opens": "The first-licence cost roadmap with those assumptions."
    }
  ],
  "old_paths": [
    "https://drivingschools.nl/cost#<fragment>",
    "https://drivingschools.nl/#<fragment>"
  ],
  "old_paths_note": "Older shared links used these paths with the same fragment; they still render the result.",
  "privacy": "Nothing in the fragment reaches the server: the browser does not send it with the request. No name, email or nationality is ever part of a link.",
  "contact": "hello@drivingschools.nl"
}