Raw schema
{
"type": "object",
"properties": {
"country": {
"type": "string",
"enum": [
"BE",
"NL",
"LU",
"FR",
"IS",
"HU",
"FI",
"SI",
"IE",
"SK",
"EE",
"LV",
"HR",
"GR",
"MT",
"LI",
"PT",
"LT",
"RO",
"BG",
"CY",
"CZ",
"NO",
"SE",
"AT",
"PL",
"IT",
"DK",
"GB",
"CH",
"ES",
"DE",
"US"
],
"description": "Market, ISO 3166-1 alpha-2 (BE, NL, LU, FR, IS, HU, FI, SI, IE, SK, EE, LV, HR, GR, MT, LI, PT, LT, RO, BG, CY, CZ, NO, SE, AT, PL, IT, DK, GB, CH, ES, DE, US). Prices are in that market's currency."
},
"data_gb_month": {
"type": [
"number",
"string"
],
"description": "Mobile data the person uses per month, in GB, or \"unlimited\"."
},
"minutes_month": {
"type": [
"number",
"null"
],
"description": "National call minutes per month; null = unlimited. Default 100."
},
"sms_month": {
"type": [
"number",
"null"
],
"description": "National SMS per month; null = unlimited. Default 0. Plans that charge per SMS beyond their allowance are costed at the stated rate, so a rough figure is fine."
},
"travel": {
"type": "array",
"description": "Specific trips per year, when the person knows them. Takes precedence over travel_profile. Omit both if unknown (the result then lists travel under missing_inputs); pass [] if the person does not travel.",
"items": {
"type": "object",
"properties": {
"country": {
"type": "string",
"description": "Destination, ISO 3166-1 alpha-2 (e.g. FR, US, MA)."
},
"days_per_year": {
"type": "number"
},
"data_gb_per_day": {
"type": "number",
"description": "Default 0.5."
}
},
"required": [
"country",
"days_per_year"
]
}
},
"needs_esim": {
"type": "boolean"
},
"needs_5g": {
"type": "boolean"
},
"lines": {
"type": "number",
"description": "Number of lines (e.g. a family of 4). Default 1. Costs are then the total for all lines; each line has the data/minutes need above."
},
"hotspot_gb_month": {
"type": "number",
"description": "Mobile hotspot (tethering) data needed per month, in GB. Plans that don't state enough hotspot data don't fit."
},
"autopay": {
"type": "boolean",
"description": "false = the person won't use AutoPay; advertised AutoPay discounts are added back. Default true."
},
"travel_profile": {
"type": "string",
"enum": [
"none",
"eu_occasional",
"eu_frequent"
],
"description": "How the person travels, when they describe it loosely: eu_occasional = a couple of weeks a year in the EU, eu_frequent = about two months a year in the EU. Costed with the published assumptions (see assumptions in the result)."
},
"travels_outside_eu": {
"type": "boolean",
"description": "True if the person sometimes travels outside the EU. Each result then lists the plan's own options there (passes, included countries, pay-per-use rate) without costing a specific trip."
},
"max_monthly_eur": {
"type": "number",
"description": "Budget per month in the market's currency (despite the name), as advertised; for all lines together."
},
"accept_contract": {
"type": "boolean",
"description": "false = only plans without a minimum contract. Prepaid packs paid several months up front are not contracts (each result says so); use max_term_months to limit them."
},
"max_term_months": {
"type": "number",
"description": "Longest term the person accepts, in months: a contract or months paid up front (e.g. an annual prepaid pack). 1 = month to month only; 12, 24, 36… Omit for any."
},
"accept_prepaid": {
"type": "boolean"
},
"has_home_internet_with": {
"type": "string",
"description": "Operator group the person has home internet with (e.g. Proximus, Orange or Telenet in Belgium), which unlocks bundle prices."
},
"age": {
"type": "number",
"description": "Only needed for youth and senior plans."
},
"special_eligibility": {
"type": "boolean",
"description": "True if the person qualifies for offers limited to some customers (students, social tariffs, porting from a named operator, existing customers of another service). Default false: such plans are listed as not fitting, with the condition."
},
"horizon_months": {
"type": "number",
"description": "Months to average costs over, including promos. Default 12."
},
"limit": {
"type": "number",
"description": "Number of results, default 5, max 20."
}
},
"required": [
"data_gb_month"
]
}