Tool tree
gradeNot graded
page: Every page
get_shop_factsAnswer
What variotrip is and how it works, in the shop’s own words: one mobile-data eSIM for the whole route, one shared data pool, the trip length, ranges, delivery, payment, hotspot, activation, top-ups (data, days or a country), router activation, e-mails, support. Use for any question that is not a price. Answer from the returned facts in the shop’s own words; do not add refund windows, speeds or rules that are not returned.
View tool JSON
{
"name": "get_shop_facts",
"kind": "answer",
"impl": "imperative",
"description": "What variotrip is and how it works, in the shop’s own words: one mobile-data eSIM for the whole route, one shared data pool, the trip length, ranges, delivery, payment, hotspot, activation, top-ups (data, days or a country), router activation, e-mails, support. Use for any question that is not a price. Answer from the returned facts in the shop’s own words; do not add refund windows, speeds or rules that are not returned.",
"inputSchema": {
"type": "object",
"properties": {
"language": {
"type": "string",
"description": "ISO language of the conversation, e.g. en, de, ja. Defaults to the language of the page the user is on."
},
"bucket": {
"type": "string",
"description": "Optional language-region bucket. Defaults to the bucket of the page the user is on."
}
}
},
"page": "/"
}list_destinationsAnswer
Every country variotrip can put on a route, with the number of selectable networks and the starting price of a one-country route (1 GB · 7 days · cheapest network). Use to check coverage or to see which countries of a trip are available. from_price is the starting price of one country alone (1 GB x 7 days x cheapest network) - never add these up for a route; call quote_route for the route the customer actually wants.
View tool JSON
{
"name": "list_destinations",
"kind": "answer",
"impl": "imperative",
"description": "Every country variotrip can put on a route, with the number of selectable networks and the starting price of a one-country route (1 GB · 7 days · cheapest network). Use to check coverage or to see which countries of a trip are available. from_price is the starting price of one country alone (1 GB x 7 days x cheapest network) - never add these up for a route; call quote_route for the route the customer actually wants.",
"inputSchema": {
"type": "object",
"properties": {
"language": {
"type": "string",
"description": "ISO language of the conversation, e.g. en, de, ja. Defaults to the language of the page the user is on."
},
"bucket": {
"type": "string",
"description": "Optional language-region bucket. Defaults to the bucket of the page the user is on."
},
"currency": {
"type": "string",
"description": "Optional ISO 4217 override. Defaults to the currency shown on the page the user is on."
}
}
},
"page": "/"
}get_networksAnswer
The mobile networks the customer can tick for one country (operator name, 4G/5G) with the price of a reference one-country route on each network alone (1 GB · 7 days), so you can say which network is the cheapest and what the others add. reference_price is for a one-country route of 1 GB x 7 days on that network alone - a comparison aid, not a plan. The cheapest network is pre-selected; every extra network adds a small fee and can raise the price of the route. Never invent coverage or speeds.
View tool JSON
{
"name": "get_networks",
"kind": "answer",
"impl": "imperative",
"description": "The mobile networks the customer can tick for one country (operator name, 4G/5G) with the price of a reference one-country route on each network alone (1 GB · 7 days), so you can say which network is the cheapest and what the others add. reference_price is for a one-country route of 1 GB x 7 days on that network alone - a comparison aid, not a plan. The cheapest network is pre-selected; every extra network adds a small fee and can raise the price of the route. Never invent coverage or speeds.",
"inputSchema": {
"type": "object",
"properties": {
"destination": {
"type": "string",
"description": "Country in ANY language or its ISO code, e.g. \"Japan\", \"Japon\", \"jp\". Map a city to its country first."
},
"language": {
"type": "string",
"description": "ISO language of the conversation, e.g. en, de, ja. Defaults to the language of the page the user is on."
},
"bucket": {
"type": "string",
"description": "Optional language-region bucket. Defaults to the bucket of the page the user is on."
},
"currency": {
"type": "string",
"description": "Optional ISO 4217 override. Defaults to the currency shown on the page the user is on."
}
},
"required": [
"destination"
]
},
"page": "/"
}quote_routeAction
Use while the customer is still deciding — "how much is …?": the exact price of ONE eSIM for the whole route — the countries in travel order (1–8) with their networks, ONE data pool in GB for all of them and the trip length — the server price the customer would pay. A single country is a route of one. Quote it as returned, never compute, add up or scale it yourself. The result carries a buy_url for reference; when the customer says they want to buy, call start_checkout. ONE eSIM for the whole route: price is the FULL amount of exactly this route (price_basis total) - never per day, per GB or per country; quote it as returned and never add up, compute or scale it. data_gb is ONE pool for every country on the route; days count from the first connection on the route. networks lists the operators exactly as returned.
View tool JSON
{
"name": "quote_route",
"kind": "act",
"impl": "imperative",
"description": "Use while the customer is still deciding — \"how much is …?\": the exact price of ONE eSIM for the whole route — the countries in travel order (1–8) with their networks, ONE data pool in GB for all of them and the trip length — the server price the customer would pay. A single country is a route of one. Quote it as returned, never compute, add up or scale it yourself. The result carries a buy_url for reference; when the customer says they want to buy, call start_checkout. ONE eSIM for the whole route: price is the FULL amount of exactly this route (price_basis total) - never per day, per GB or per country; quote it as returned and never add up, compute or scale it. data_gb is ONE pool for every country on the route; days count from the first connection on the route. networks lists the operators exactly as returned.",
"inputSchema": {
"type": "object",
"properties": {
"route": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"description": "The countries of the trip in travel order (1–8, each once).",
"items": {
"type": "object",
"properties": {
"destination": {
"type": "string",
"description": "Country in ANY language or its ISO code, e.g. \"Vietnam\", \"Viêt Nam\", \"vn\". Map a city to its country first."
},
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: operator names (or codes) from get_networks for this country. Omit = its cheapest network."
}
},
"required": [
"destination"
]
}
},
"gb": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "The data pool for the WHOLE route in whole GB (1–100), shared by every country. Omit = sized for normal use (1.5 GB × days). Not sure? Call recommend_config."
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"description": "Trip length in days (1–90) for the whole route, counted from the first connection anywhere on the route."
},
"language": {
"type": "string",
"description": "ISO language of the conversation, e.g. en, de, ja. Defaults to the language of the page the user is on."
},
"bucket": {
"type": "string",
"description": "Optional language-region bucket. Defaults to the bucket of the page the user is on."
},
"currency": {
"type": "string",
"description": "Optional ISO 4217 override. Defaults to the currency shown on the page the user is on."
}
},
"required": [
"route",
"days"
]
},
"page": "/"
}recommend_configAction
Use when the customer describes a trip instead of a size: the countries (with the days in each, when known) and how they use data (usage light / normal / heavy, or gb_per_day). Sizes the shared pool from the trip length and returns three server-quoted routes — exact, comfortable (×1.5) and generous (×2) — each with the pool in GB, the full price, a one-line reason and its buy_url, plus an optional budget check. Same prices as quote_route. Every option is a complete route with its own pool (data_gb), full price and buy_url; present them as returned. Countries in not_available cannot be served - say so instead of guessing.
View tool JSON
{
"name": "recommend_config",
"kind": "act",
"impl": "imperative",
"description": "Use when the customer describes a trip instead of a size: the countries (with the days in each, when known) and how they use data (usage light / normal / heavy, or gb_per_day). Sizes the shared pool from the trip length and returns three server-quoted routes — exact, comfortable (×1.5) and generous (×2) — each with the pool in GB, the full price, a one-line reason and its buy_url, plus an optional budget check. Same prices as quote_route. Every option is a complete route with its own pool (data_gb), full price and buy_url; present them as returned. Countries in not_available cannot be served - say so instead of guessing.",
"inputSchema": {
"type": "object",
"properties": {
"route": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"description": "The countries of the trip in travel order (1–8, each once).",
"items": {
"type": "object",
"properties": {
"destination": {
"type": "string",
"description": "Country in ANY language or its ISO code, e.g. \"Vietnam\", \"Viêt Nam\", \"vn\". Map a city to its country first."
},
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: operator names (or codes) from get_networks for this country. Omit = its cheapest network."
},
"days_in_country": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"description": "Days the customer spends in this country. Without days, the trip length is the sum of the days_in_country given; with neither, the call fails with invalid_argument and asks for days."
}
},
"required": [
"destination"
]
}
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"description": "Trip length in days (1–90). Give days, or days_in_country on the countries (then the trip length is their sum). With neither, the call fails with invalid_argument asking for days."
},
"usage": {
"type": "string",
"enum": [
"light",
"normal",
"heavy"
],
"description": "light ≈ 0.5 GB/day, normal ≈ 1.5 GB/day (default), heavy ≈ 4 GB/day."
},
"gb_per_day": {
"type": "number",
"minimum": 0.1,
"maximum": 100,
"description": "Optional: the customer's own estimate in GB per day (wins over usage)."
},
"budget": {
"type": "number",
"description": "Optional budget for the whole route in the quoted currency; options above it are marked."
},
"language": {
"type": "string",
"description": "ISO language of the conversation, e.g. en, de, ja. Defaults to the language of the page the user is on."
},
"bucket": {
"type": "string",
"description": "Optional language-region bucket. Defaults to the bucket of the page the user is on."
},
"currency": {
"type": "string",
"description": "Optional ISO 4217 override. Defaults to the currency shown on the page the user is on."
}
},
"required": [
"route"
]
},
"page": "/"
}price_gridAnswer
The same route priced for several trip lengths (days, max 8) and several pool sizes (gb, max 6), in one call — e.g. to compare with other providers or to find the best fit. Same server prices as quote_route; each cell has its own buy_url. Every row is the full price of the whole route for that trip length and pool size; present the rows as a table with the currency, never derive per-day, per-GB or per-country figures. Use the buy_url of each row exactly.
View tool JSON
{
"name": "price_grid",
"kind": "answer",
"impl": "imperative",
"description": "The same route priced for several trip lengths (days, max 8) and several pool sizes (gb, max 6), in one call — e.g. to compare with other providers or to find the best fit. Same server prices as quote_route; each cell has its own buy_url. Every row is the full price of the whole route for that trip length and pool size; present the rows as a table with the currency, never derive per-day, per-GB or per-country figures. Use the buy_url of each row exactly.",
"inputSchema": {
"type": "object",
"properties": {
"route": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"description": "The countries of the trip in travel order (1–8, each once).",
"items": {
"type": "object",
"properties": {
"destination": {
"type": "string",
"description": "Country in ANY language or its ISO code, e.g. \"Vietnam\", \"Viêt Nam\", \"vn\". Map a city to its country first."
},
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: operator names (or codes) from get_networks for this country. Omit = its cheapest network."
}
},
"required": [
"destination"
]
}
},
"days": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 90
},
"minItems": 1,
"maxItems": 8,
"description": "Up to 8 trip lengths, e.g. [7,14,21,30]."
},
"gb": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"maxItems": 6,
"description": "Optional: up to 6 pool sizes for the whole route in whole GB, e.g. [5,10,20]. Omit = sized for normal use from each trip length."
},
"language": {
"type": "string",
"description": "ISO language of the conversation, e.g. en, de, ja. Defaults to the language of the page the user is on."
},
"bucket": {
"type": "string",
"description": "Optional language-region bucket. Defaults to the bucket of the page the user is on."
},
"currency": {
"type": "string",
"description": "Optional ISO 4217 override. Defaults to the currency shown on the page the user is on."
}
},
"required": [
"route",
"days"
]
},
"page": "/"
}start_checkoutSensitive Action
Use only once the customer has decided to buy ("I'll take it", "how do I buy?"): the checkout handoff for one route (same input as quote_route). Returns the buy_url to give the customer, the final price and a ready-to-send checkout block (next_step, payment_methods, delivery) — on the page the route builder shows exactly this route; they press "Get it" and pay securely. No account needed; the eSIM is delivered on screen and by e-mail right after payment. No in-chat order tracking, no discount codes. For prices while the customer is still comparing, use quote_route. Give the customer buy_url exactly as returned together with next_step: the route builder opens with exactly this route, they press "Get it" and pay. Quote price as returned (the full amount for the whole route).
View tool JSON
{
"name": "start_checkout",
"kind": "transact",
"impl": "imperative",
"description": "Use only once the customer has decided to buy (\"I'll take it\", \"how do I buy?\"): the checkout handoff for one route (same input as quote_route). Returns the buy_url to give the customer, the final price and a ready-to-send checkout block (next_step, payment_methods, delivery) — on the page the route builder shows exactly this route; they press \"Get it\" and pay securely. No account needed; the eSIM is delivered on screen and by e-mail right after payment. No in-chat order tracking, no discount codes. For prices while the customer is still comparing, use quote_route. Give the customer buy_url exactly as returned together with next_step: the route builder opens with exactly this route, they press \"Get it\" and pay. Quote price as returned (the full amount for the whole route).",
"inputSchema": {
"type": "object",
"properties": {
"route": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"description": "The countries of the trip in travel order (1–8, each once).",
"items": {
"type": "object",
"properties": {
"destination": {
"type": "string",
"description": "Country in ANY language or its ISO code, e.g. \"Vietnam\", \"Viêt Nam\", \"vn\". Map a city to its country first."
},
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: operator names (or codes) from get_networks for this country. Omit = its cheapest network."
}
},
"required": [
"destination"
]
}
},
"gb": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "The data pool for the WHOLE route in whole GB (1–100), shared by every country. Omit = sized for normal use (1.5 GB × days). Not sure? Call recommend_config."
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"description": "Trip length in days (1–90) for the whole route, counted from the first connection anywhere on the route."
},
"language": {
"type": "string",
"description": "ISO language of the conversation, e.g. en, de, ja. Defaults to the language of the page the user is on."
},
"bucket": {
"type": "string",
"description": "Optional language-region bucket. Defaults to the bucket of the page the user is on."
},
"currency": {
"type": "string",
"description": "Optional ISO 4217 override. Defaults to the currency shown on the page the user is on."
}
},
"required": [
"route",
"days"
]
},
"page": "/"
}get_locale_stateAnswer
Read the current site locale: UI language, region and the active /{language-region}/ bucket of the page the user is on.
View tool JSON
{
"name": "get_locale_state",
"kind": "answer",
"impl": "imperative",
"description": "Read the current site locale: UI language, region and the active /{language-region}/ bucket of the page the user is on.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}set_languageAction
Switch the site to a supported language-region bucket such as "de-de" or "en-gb" and navigate to that locale; prices then show in that region's currency. Call get_locale_state first to see the current bucket.
View tool JSON
{
"name": "set_language",
"kind": "act",
"impl": "imperative",
"description": "Switch the site to a supported language-region bucket such as \"de-de\" or \"en-gb\" and navigate to that locale; prices then show in that region's currency. Call get_locale_state first to see the current bucket.",
"inputSchema": {
"type": "object",
"properties": {
"bucket": {
"type": "string",
"description": "Lowercase language-region bucket, e.g. \"de-de\", \"en-us\", \"ja-jp\". The enum is the complete list of buckets this site offers; nothing outside it is accepted.",
"enum": [
"en-gb",
"en-ie",
"de-de",
"de-at",
"de-ch",
"nl-nl",
"fr-fr",
"fr-be",
"es-es",
"it-it",
"pt-pt",
"pl-pl",
"cs-cz",
"fr-lu",
"de-li",
"fr-mc",
"it-sm",
"it-va",
"en-mt",
"el-cy",
"el-gr",
"tr-tr",
"sv-se",
"nb-no",
"da-dk",
"fi-fi",
"sk-sk",
"hr-hr",
"bg-bg",
"lt-lt",
"lv-lv",
"et-ee",
"sl-si",
"ro-ro",
"ro-md",
"hu-hu",
"uk-ua",
"sr-rs",
"sr-me",
"hr-ba",
"is-is",
"en-us",
"en-ca",
"fr-ca",
"en-jm",
"en-tt",
"en-bz",
"es-mx",
"es-cr",
"es-co",
"es-pe",
"es-cl",
"es-uy",
"es-ar",
"pt-br",
"es-ec",
"es-sv",
"es-pa",
"es-bo",
"es-py",
"es-hn",
"es-gt",
"es-do",
"en-au",
"en-nz",
"en-za",
"en-ke",
"en-zw",
"ru-ru",
"ru-by",
"ru-kz",
"ru-uz",
"en-in",
"en-ph",
"en-my",
"en-pk",
"zh-cn",
"zh-sg",
"zht-tw",
"zht-hk",
"zht-mo",
"ja-jp",
"ko-kr"
]
}
},
"required": [
"bucket"
]
},
"page": "/"
}set_currencyAction
Switch the displayed currency by ISO 4217 code such as "EUR", "USD" or "GBP". Currency follows the region, so the site navigates to the matching region in the user's current language.
View tool JSON
{
"name": "set_currency",
"kind": "act",
"impl": "imperative",
"description": "Switch the displayed currency by ISO 4217 code such as \"EUR\", \"USD\" or \"GBP\". Currency follows the region, so the site navigates to the matching region in the user's current language.",
"inputSchema": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "ISO 4217 currency code, e.g. \"EUR\", \"USD\", \"GBP\". The enum is the complete list of currencies this site shows; nothing outside it is accepted.",
"enum": [
"GBP",
"EUR",
"CHF",
"PLN",
"CZK",
"TRY",
"SEK",
"NOK",
"DKK",
"RON",
"MDL",
"HUF",
"UAH",
"RSD",
"BAM",
"ISK",
"USD",
"CAD",
"JMD",
"TTD",
"BZD",
"MXN",
"CRC",
"COP",
"PEN",
"CLP",
"UYU",
"ARS",
"BRL",
"BOB",
"PYG",
"HNL",
"GTQ",
"DOP",
"AUD",
"NZD",
"ZAR",
"KES",
"RUB",
"BYN",
"KZT",
"UZS",
"INR",
"PHP",
"MYR",
"PKR",
"CNY",
"SGD",
"TWD",
"HKD",
"MOP",
"JPY",
"KRW"
]
}
},
"required": [
"code"
]
},
"page": "/"
}get_consent_stateAnswer
Read the visitor's current cookie-consent state on this site. Necessary cookies are always on. Reports whether the visitor has decided yet and the on/off state of analytics, ads and personalized ads. By design there is no tool to grant consent: consent is given by a human on the banner.
View tool JSON
{
"name": "get_consent_state",
"kind": "answer",
"impl": "imperative",
"description": "Read the visitor's current cookie-consent state on this site. Necessary cookies are always on. Reports whether the visitor has decided yet and the on/off state of analytics, ads and personalized ads. By design there is no tool to grant consent: consent is given by a human on the banner.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}reject_non_essential_cookiesAction
Opt the visitor out of all non-essential cookies (analytics, ads, personalized ads) and close the consent banner. Necessary cookies remain. Records a refusal only; it can never grant consent - that is a human decision by design. Use when the user wants to decline tracking.
View tool JSON
{
"name": "reject_non_essential_cookies",
"kind": "act",
"impl": "imperative",
"description": "Opt the visitor out of all non-essential cookies (analytics, ads, personalized ads) and close the consent banner. Necessary cookies remain. Records a refusal only; it can never grant consent - that is a human decision by design. Use when the user wants to decline tracking.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}get_configurationAnswer
Read the route the user is building on this page right now: the countries in order with the ticked networks of each, the data pool in GB for the whole route, the trip length in days and the price shown. Returns available=false on pages without the route builder.
View tool JSON
{
"name": "get_configuration",
"kind": "answer",
"impl": "imperative",
"description": "Read the route the user is building on this page right now: the countries in order with the ticked networks of each, the data pool in GB for the whole route, the trip length in days and the price shown. Returns available=false on pages without the route builder.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}set_configurationAction
Set the route on this page for the user: route = the countries in travel order (ISO codes, each once, up to 8), each with optional network codes to tick (from get_networks or get_configuration); gb = the data pool for the whole route (1-100, whole GB); days = the trip length (1-90). route replaces the whole route; omit it to change only gb or days. Nothing is bought - the user still presses "Get it". Returns the resulting route and the price shown.
View tool JSON
{
"name": "set_configuration",
"kind": "act",
"impl": "imperative",
"description": "Set the route on this page for the user: route = the countries in travel order (ISO codes, each once, up to 8), each with optional network codes to tick (from get_networks or get_configuration); gb = the data pool for the whole route (1-100, whole GB); days = the trip length (1-90). route replaces the whole route; omit it to change only gb or days. Nothing is bought - the user still presses \"Get it\". Returns the resulting route and the price shown.",
"inputSchema": {
"type": "object",
"properties": {
"route": {
"type": "array",
"maxItems": 8,
"items": {
"type": "object",
"properties": {
"iso": {
"type": "string",
"description": "ISO 3166-1 alpha-2, e.g. \"vn\"."
},
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Network codes to tick; omitted = the cheapest network."
}
},
"required": [
"iso"
]
}
},
"gb": {
"type": "integer",
"description": "Data pool for the whole route in whole GB (1-100)."
},
"days": {
"type": "integer",
"description": "Trip length in days (1-90)."
}
}
},
"page": "/"
}