MCP Server

eSIM-Global.VIP eSIM Catalog

vip.esim-global/esim-catalog
Commerce & Retail Travel & Hospitality Public & reachable MCP 2026-07-28

What this MCP does

Searches prepaid travel eSIM plans, provides plan details and prices, and hands customers to a secure checkout.

get_plan_details
Get plan details
Full facts for one eSIM-Global.VIP plan by product id: coverage with networks per country, data and speed rules, activation and validity rules, hotspot / APN / registration facts, top-up, refund rule, price with basis, reviews and link — quoted in the customer's bucket or currency when given.
Read only Open world Idempotent
Input schema
{'type': 'object', 'required': ['product_id'], 'properties': {'bucket': {'type': 'string', 'description': 'Optional language-region bucket the customer shops in, e.g. "en-gb", "de-de". Wins over language; prices and links are quoted in it.'}, 'currency': {'type': 'string', 'description': 'Optional ISO 4217 code. Every price in the result is quoted in it.'}, 'language': {'type': 'string', 'description': 'ISO language of the conversation, e.g. en, de, ja. Plan names and country names come back in it when available. Bare "en" is quoted in en-us / USD.'}, 'product_id': {'type': 'integer', 'description': 'Product id from search_esim_plans or recommend_plan.'}}}
Output schema
{'type': 'object', 'properties': {'apn': {'type': 'string', 'description': 'APN to set when the vendor requires one.'}, 'sku': {'type': 'string', 'description': 'Catalogue SKU.'}, 'url': {'type': 'string', 'description': 'Product page in pricing_bucket. Use verbatim.'}, 'data': {'type': 'string', 'description': 'Data Pack: total data label, e.g. "5GB".'}, 'days': {'type': 'integer', 'description': 'Validity in days (Data Pack, Daily Pack).'}, 'name': {'type': 'string', 'description': 'Short plan name: destination · data · validity · type.'}, 'type': {'enum': ['Data Pack', 'Daily Pack', 'Unlimited Flex'], 'type': 'string', 'description': 'Plan type.'}, 'price': {'type': 'number', 'description': 'Price in currency, read WITH price_basis: the full price of the plan when "total", the price of ONE day when "per_day". Never a per-GB rate. The price shown is the price paid.'}, 'title': {'type': 'string', 'description': 'Full product title in the requested language.'}, 'topup': {'type': 'object', 'properties': {'how': {'type': 'string', 'description': 'How the customer tops up.'}, 'kind': {'enum': ['data', 'days', 'none'], 'type': 'string', 'description': 'What TopUp can add without a new eSIM: data (Data Pack), days (Unlimited Flex / Daily Pack), or none.'}}, 'description': 'Top-up possibility for this plan.', 'additionalProperties': True}, 'rating': {'type': 'number', 'description': 'Average customer rating (1-5). Present only when reviews exist.'}, 'data_gb': {'type': 'number', 'description': 'Data amount in GB. Meaning given by data_period.'}, 'hotspot': {'type': 'string', 'description': 'Hotspot / tethering rule as the vendor states it, e.g. "Supported" or a device limit.'}, 'summary': {'type': 'string', 'description': 'Short description in the requested language, from the product page.'}, 'currency': {'type': 'string', 'description': 'ISO 4217 currency of every price in this object.'}, 'fair_use': {'type': 'string', 'description': 'Fair-use policy text from the supplier, when stated.'}, 'networks': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Operator names across the plan (deduplicated). Per-country detail is in coverage_countries.'}, 'validity': {'type': 'string', 'description': 'Validity label, e.g. "30 days".'}, 'plan_note': {'type': 'string', 'description': 'One-sentence vendor fact to present verbatim when present; overrides the generic type description.'}, 'price_max': {'type': 'number', 'description': 'Only on price_basis "per_day": the price for the longest duration in days_range, discount applied — the figure to quote for a full period. Never infer it by multiplying.'}, 'speed_cap': {'type': 'string', 'description': 'Present only on plans with a PERMANENT speed cap, e.g. "10 Mbit/s". Never call such a plan high-speed.'}, 'voice_sms': {'type': 'string', 'description': 'Always "none": data only, no telephone number, no SMS.'}, 'covers_via': {'type': 'string', 'description': "Present when the plan was returned for a country it covers as part of a multi-country plan: the plan's own region name."}, 'days_range': {'type': 'string', 'description': 'Unlimited Flex: choosable durations in days, e.g. "1-30".'}, 'expires_on': {'type': 'string', 'description': 'Stock expiry date (YYYY-MM-DD) when the product itself has one.'}, 'product_id': {'type': 'integer', 'description': 'Product id. Use it for get_plan_details and start_checkout.'}, 'data_period': {'enum': ['total', 'per_day'], 'type': 'string', 'description': '"total": data_gb is the whole plan (Data Pack). "per_day": data_gb is the daily full-speed allowance (Unlimited Flex, Daily Pack).'}, 'ip_breakout': {'type': 'string', 'description': 'Country whose internet connection the customer appears to use (IP breakout), ISO code(s) — matters for banking apps, streaming and mainland-China access. Vendor fact.'}, 'price_basis': {'enum': ['total', 'per_day'], 'type': 'string', 'description': 'What `price` means.'}, 'refund_rule': {'type': 'string', 'description': 'The refund class in words - present verbatim.'}, 'kyc_required': {'type': 'boolean', 'description': 'true when the vendor requires real-name registration (ID verification) on arrival before data works.'}, 'last_updated': {'type': 'string', 'description': 'Date the plan was last updated in the catalogue (YYYY-MM-DD).'}, 'refund_class': {'enum': ['until_install', 'non_refundable', 'no_cancel'], 'type': 'string', 'description': 'Vendor refund/cancellation class for this plan.'}, 'review_count': {'type': 'integer', 'description': 'Number of reviews. Present only when > 0.'}, 'transparency': {'type': 'boolean', 'description': 'A per-order Transparency link shows remaining data in near real-time.'}, 'coverage_note': {'type': 'string', 'description': 'Coverage caveat to present verbatim, e.g. traffic routed via Hong Kong.'}, 'always_on_rate': {'type': 'string', 'description': 'Unlimited Flex / Daily Pack: reduced speed after the daily allowance, e.g. "512 Kbit/s". Empty when the plan has a speed_cap or is unlimited.'}, 'coverage_count': {'type': 'integer', 'description': 'Number of countries in coverage_countries.'}, 'price_is_final': {'type': 'boolean', 'description': 'Always true: no tax or fee is added at checkout.'}, 'pricing_bucket': {'type': 'string', 'description': 'language-region bucket the prices and links are quoted in, e.g. "en-us".'}, 'daily_high_speed': {'type': 'string', 'description': 'Unlimited Flex / Daily Pack: daily allowance at full speed, e.g. "2GB"; "unlimited" = unlimited data every day at full speed (fair-use policy).'}, 'daily_reset_time': {'type': 'string', 'description': 'When the daily allowance resets, as the vendor states it (clock and time zone). Absent = resets 24 h after activation is NOT implied; simply unknown.'}, 'unused_valid_days': {'type': 'integer', 'description': 'Days the eSIM may remain unused after purchase before it expires (supplier value).'}, 'activation_trigger': {'enum': ['install', 'first_connection'], 'type': 'string', 'description': '"install": validity and billing start the moment the eSIM is installed — install only when ready to use. "first_connection": the eSIM can be installed before travel; validity starts on first connection to a network at the destination.'}, 'coverage_countries': {'type': 'array', 'items': {'type': 'object', 'properties': {'iso': {'type': 'string', 'description': 'ISO 3166-1 alpha-2, lowercase.'}, 'name': {'type': 'string', 'description': 'Country name in the requested language.'}, 'networks': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Operator names in that country, as the supplier lists them.'}}, 'additionalProperties': True}, 'description': 'Every country the plan works in, with the network operators per country when known.'}, 'network_generation': {'type': 'string', 'description': 'Network technology, e.g. "4G/LTE/5G". Never an operator name.'}, 'start_date_required': {'type': 'boolean', 'description': 'true when a start date must be chosen at checkout.'}, 'install_before_travel': {'type': 'boolean', 'description': 'true when the eSIM can safely be installed before departure (activation_trigger first_connection).'}}, 'description': 'One eSIM plan. Every field is present only when the catalogue holds a value for it; an absent field is unknown, never "no".', 'additionalProperties': True}
get_shop_facts
Shop facts
How eSIM-Global.VIP works, in the shop's own words: delivery and installation, device requirements, payment methods, money-back guarantee, top-up, hotspot, support and company details. Use for any "how / when / what if" question that is not about one specific plan.
Read only Open world Idempotent
Input schema
{'type': 'object', 'properties': {}}
Output schema
{'type': 'object', 'additionalProperties': True}
recommend_plan
Recommend a plan for a trip
Turn a trip into up to three plan recommendations: countries (1-5, any language), number of days and how much data the traveller uses. Each fit carries the full plan facts, the total price for the whole trip and a one-sentence reason built only from catalogue facts. Use this first whenever the user describes a trip rather than asks for a list.
Read only Open world Idempotent
Input schema
{'type': 'object', 'required': ['countries', 'days'], 'properties': {'days': {'type': 'integer', 'maximum': 365, 'minimum': 1, 'description': 'Trip length in days.'}, 'usage': {'enum': ['light', 'normal', 'heavy'], 'type': 'string', 'description': 'light ≈ 0.5 GB/day (maps, messaging), normal ≈ 1.5 GB/day (social, some video), heavy ≈ 4 GB/day (video, hotspot). Default normal.'}, 'bucket': {'type': 'string', 'description': 'Optional language-region bucket the customer shops in, e.g. "en-gb", "de-de". Wins over language; prices and links are quoted in it.'}, 'budget': {'type': 'number', 'minimum': 0, 'description': 'Optional maximum total for the trip, in the result currency.'}, 'currency': {'type': 'string', 'description': 'Optional ISO 4217 code. Every price in the result is quoted in it.'}, 'language': {'type': 'string', 'description': 'ISO language of the conversation, e.g. en, de, ja. Plan names and country names come back in it when available. Bare "en" is quoted in en-us / USD.'}, 'countries': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 5, 'minItems': 1, 'description': 'Countries or regions of the trip, any language.'}, 'gb_per_day': {'type': 'number', 'minimum': 0.1, 'description': 'Overrides usage with an explicit daily need in GB.'}}}
Output schema
{'type': 'object', 'properties': {'trip': {'type': 'object', 'properties': {'days': {'type': 'integer'}, 'gb_total': {'type': 'number'}, 'countries': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'gb_per_day': {'type': 'number'}}, 'additionalProperties': True}, 'message': {'type': 'string'}, 'currency': {'type': 'string'}, 'all_plans_url': {'type': 'string'}, 'pricing_bucket': {'type': 'string'}, 'recommendations': {'type': 'array', 'items': {'type': 'object', 'properties': {'why': {'type': 'string', 'description': 'One sentence built from catalogue facts only.'}, 'plan': {'type': 'object', 'properties': {'apn': {'type': 'string', 'description': 'APN to set when the vendor requires one.'}, 'sku': {'type': 'string', 'description': 'Catalogue SKU.'}, 'url': {'type': 'string', 'description': 'Product page in pricing_bucket. Use verbatim.'}, 'data': {'type': 'string', 'description': 'Data Pack: total data label, e.g. "5GB".'}, 'days': {'type': 'integer', 'description': 'Validity in days (Data Pack, Daily Pack).'}, 'name': {'type': 'string', 'description': 'Short plan name: destination · data · validity · type.'}, 'type': {'enum': ['Data Pack', 'Daily Pack', 'Unlimited Flex'], 'type': 'string', 'description': 'Plan type.'}, 'price': {'type': 'number', 'description': 'Price in currency, read WITH price_basis: the full price of the plan when "total", the price of ONE day when "per_day". Never a per-GB rate. The price shown is the price paid.'}, 'title': {'type': 'string', 'description': 'Full product title in the requested language.'}, 'topup': {'type': 'object', 'properties': {'how': {'type': 'string', 'description': 'How the customer tops up.'}, 'kind': {'enum': ['data', 'days', 'none'], 'type': 'string', 'description': 'What TopUp can add without a new eSIM: data (Data Pack), days (Unlimited Flex / Daily Pack), or none.'}}, 'description': 'Top-up possibility for this plan.', 'additionalProperties': True}, 'rating': {'type': 'number', 'description': 'Average customer rating (1-5). Present only when reviews exist.'}, 'data_gb': {'type': 'number', 'description': 'Data amount in GB. Meaning given by data_period.'}, 'hotspot': {'type': 'string', 'description': 'Hotspot / tethering rule as the vendor states it, e.g. "Supported" or a device limit.'}, 'summary': {'type': 'string', 'description': 'Short description in the requested language, from the product page.'}, 'currency': {'type': 'string', 'description': 'ISO 4217 currency of every price in this object.'}, 'fair_use': {'type': 'string', 'description': 'Fair-use policy text from the supplier, when stated.'}, 'networks': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Operator names across the plan (deduplicated). Per-country detail is in coverage_countries.'}, 'validity': {'type': 'string', 'description': 'Validity label, e.g. "30 days".'}, 'plan_note': {'type': 'string', 'description': 'One-sentence vendor fact to present verbatim when present; overrides the generic type description.'}, 'price_max': {'type': 'number', 'description': 'Only on price_basis "per_day": the price for the longest duration in days_range, discount applied — the figure to quote for a full period. Never infer it by multiplying.'}, 'speed_cap': {'type': 'string', 'description': 'Present only on plans with a PERMANENT speed cap, e.g. "10 Mbit/s". Never call such a plan high-speed.'}, 'voice_sms': {'type': 'string', 'description': 'Always "none": data only, no telephone number, no SMS.'}, 'covers_via': {'type': 'string', 'description': "Present when the plan was returned for a country it covers as part of a multi-country plan: the plan's own region name."}, 'days_range': {'type': 'string', 'description': 'Unlimited Flex: choosable durations in days, e.g. "1-30".'}, 'expires_on': {'type': 'string', 'description': 'Stock expiry date (YYYY-MM-DD) when the product itself has one.'}, 'product_id': {'type': 'integer', 'description': 'Product id. Use it for get_plan_details and start_checkout.'}, 'data_period': {'enum': ['total', 'per_day'], 'type': 'string', 'description': '"total": data_gb is the whole plan (Data Pack). "per_day": data_gb is the daily full-speed allowance (Unlimited Flex, Daily Pack).'}, 'ip_breakout': {'type': 'string', 'description': 'Country whose internet connection the customer appears to use (IP breakout), ISO code(s) — matters for banking apps, streaming and mainland-China access. Vendor fact.'}, 'price_basis': {'enum': ['total', 'per_day'], 'type': 'string', 'description': 'What `price` means.'}, 'refund_rule': {'type': 'string', 'description': 'The refund class in words - present verbatim.'}, 'kyc_required': {'type': 'boolean', 'description': 'true when the vendor requires real-name registration (ID verification) on arrival before data works.'}, 'last_updated': {'type': 'string', 'description': 'Date the plan was last updated in the catalogue (YYYY-MM-DD).'}, 'refund_class': {'enum': ['until_install', 'non_refundable', 'no_cancel'], 'type': 'string', 'description': 'Vendor refund/cancellation class for this plan.'}, 'review_count': {'type': 'integer', 'description': 'Number of reviews. Present only when > 0.'}, 'transparency': {'type': 'boolean', 'description': 'A per-order Transparency link shows remaining data in near real-time.'}, 'coverage_note': {'type': 'string', 'description': 'Coverage caveat to present verbatim, e.g. traffic routed via Hong Kong.'}, 'always_on_rate': {'type': 'string', 'description': 'Unlimited Flex / Daily Pack: reduced speed after the daily allowance, e.g. "512 Kbit/s". Empty when the plan has a speed_cap or is unlimited.'}, 'coverage_count': {'type': 'integer', 'description': 'Number of countries in coverage_countries.'}, 'price_is_final': {'type': 'boolean', 'description': 'Always true: no tax or fee is added at checkout.'}, 'pricing_bucket': {'type': 'string', 'description': 'language-region bucket the prices and links are quoted in, e.g. "en-us".'}, 'daily_high_speed': {'type': 'string', 'description': 'Unlimited Flex / Daily Pack: daily allowance at full speed, e.g. "2GB"; "unlimited" = unlimited data every day at full speed (fair-use policy).'}, 'daily_reset_time': {'type': 'string', 'description': 'When the daily allowance resets, as the vendor states it (clock and time zone). Absent = resets 24 h after activation is NOT implied; simply unknown.'}, 'unused_valid_days': {'type': 'integer', 'description': 'Days the eSIM may remain unused after purchase before it expires (supplier value).'}, 'activation_trigger': {'enum': ['install', 'first_connection'], 'type': 'string', 'description': '"install": validity and billing start the moment the eSIM is installed — install only when ready to use. "first_connection": the eSIM can be installed before travel; validity starts on first connection to a network at the destination.'}, 'coverage_countries': {'type': 'array', 'items': {'type': 'object', 'properties': {'iso': {'type': 'string', 'description': 'ISO 3166-1 alpha-2, lowercase.'}, 'name': {'type': 'string', 'description': 'Country name in the requested language.'}, 'networks': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Operator names in that country, as the supplier lists them.'}}, 'additionalProperties': True}, 'description': 'Every country the plan works in, with the network operators per country when known.'}, 'network_generation': {'type': 'string', 'description': 'Network technology, e.g. "4G/LTE/5G". Never an operator name.'}, 'start_date_required': {'type': 'boolean', 'description': 'true when a start date must be chosen at checkout.'}, 'install_before_travel': {'type': 'boolean', 'description': 'true when the eSIM can safely be installed before departure (activation_trigger first_connection).'}}, 'description': 'One eSIM plan. Every field is present only when the catalogue holds a value for it; an absent field is unknown, never "no".', 'additionalProperties': True}, 'rank': {'type': 'integer'}, 'caveats': {'type': 'array', 'items': {'type': 'string'}}, 'plans_needed': {'type': 'integer', 'description': '1, or the number of consecutive Data Packs needed to cover the trip length.'}, 'total_for_trip': {'type': 'number', 'description': 'Checkout total for the trip in currency (Flex: days x per-day price with the discount ladder; packs: the plan price, times the number of plans needed when one does not cover the trip).'}}, 'additionalProperties': True}}}, 'additionalProperties': True}
search_esim_plans
Find eSIM plans
Find eSIM-Global.VIP eSIM plans for one destination or several (countries or regions, any language). Returns the best-value plans first with full facts, coverage lists and a direct link; multi-country plans that include the destination are returned too and marked covers_via. Use when a user wants mobile data abroad; use recommend_plan when they describe a whole trip.
Read only Open world Idempotent
Input schema
{'type': 'object', 'required': [], 'properties': {'sort': {'enum': ['value', 'price', 'data'], 'type': 'string', 'description': 'value = best price per GB / cheapest Flex first (default); price = cheapest first; data = most data first.'}, 'type': {'enum': ['data_pack', 'daily_pack', 'unlimited_flex', 'any'], 'type': 'string', 'description': 'Plan type. Default any.'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Plans to return. Default 10; all_plans_url lists everything.'}, 'bucket': {'type': 'string', 'description': 'Optional language-region bucket the customer shops in, e.g. "en-gb", "de-de". Wins over language; prices and links are quoted in it.'}, 'currency': {'type': 'string', 'description': 'Optional ISO 4217 code. Every price in the result is quoted in it.'}, 'language': {'type': 'string', 'description': 'ISO language of the conversation, e.g. en, de, ja. Plan names and country names come back in it when available. Bare "en" is quoted in en-us / USD.'}, 'min_days': {'type': 'integer', 'minimum': 1, 'description': 'Only plans valid for at least this many days (Unlimited Flex counts when days_range allows it).'}, 'destination': {'type': 'string', 'description': 'Country or region in any language, e.g. "Thailand", "Japon", "Europa", or a 2-letter ISO code. For a city, pass its country.'}, 'destinations': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 5, 'description': 'Several countries for one trip; only plans covering ALL of them are returned. Overrides destination.'}}}
Output schema
{'type': 'object', 'properties': {'iso': {'type': 'string', 'description': 'Resolved ISO code or region slug of the (first) destination.'}, 'note': {'type': 'string', 'description': 'Present when part of the request could not be honoured (e.g. more than 5 destinations).'}, 'plans': {'type': 'array', 'items': {'type': 'object', 'properties': {'apn': {'type': 'string', 'description': 'APN to set when the vendor requires one.'}, 'sku': {'type': 'string', 'description': 'Catalogue SKU.'}, 'url': {'type': 'string', 'description': 'Product page in pricing_bucket. Use verbatim.'}, 'data': {'type': 'string', 'description': 'Data Pack: total data label, e.g. "5GB".'}, 'days': {'type': 'integer', 'description': 'Validity in days (Data Pack, Daily Pack).'}, 'name': {'type': 'string', 'description': 'Short plan name: destination · data · validity · type.'}, 'type': {'enum': ['Data Pack', 'Daily Pack', 'Unlimited Flex'], 'type': 'string', 'description': 'Plan type.'}, 'price': {'type': 'number', 'description': 'Price in currency, read WITH price_basis: the full price of the plan when "total", the price of ONE day when "per_day". Never a per-GB rate. The price shown is the price paid.'}, 'title': {'type': 'string', 'description': 'Full product title in the requested language.'}, 'topup': {'type': 'object', 'properties': {'how': {'type': 'string', 'description': 'How the customer tops up.'}, 'kind': {'enum': ['data', 'days', 'none'], 'type': 'string', 'description': 'What TopUp can add without a new eSIM: data (Data Pack), days (Unlimited Flex / Daily Pack), or none.'}}, 'description': 'Top-up possibility for this plan.', 'additionalProperties': True}, 'rating': {'type': 'number', 'description': 'Average customer rating (1-5). Present only when reviews exist.'}, 'data_gb': {'type': 'number', 'description': 'Data amount in GB. Meaning given by data_period.'}, 'hotspot': {'type': 'string', 'description': 'Hotspot / tethering rule as the vendor states it, e.g. "Supported" or a device limit.'}, 'summary': {'type': 'string', 'description': 'Short description in the requested language, from the product page.'}, 'currency': {'type': 'string', 'description': 'ISO 4217 currency of every price in this object.'}, 'fair_use': {'type': 'string', 'description': 'Fair-use policy text from the supplier, when stated.'}, 'networks': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Operator names across the plan (deduplicated). Per-country detail is in coverage_countries.'}, 'validity': {'type': 'string', 'description': 'Validity label, e.g. "30 days".'}, 'plan_note': {'type': 'string', 'description': 'One-sentence vendor fact to present verbatim when present; overrides the generic type description.'}, 'price_max': {'type': 'number', 'description': 'Only on price_basis "per_day": the price for the longest duration in days_range, discount applied — the figure to quote for a full period. Never infer it by multiplying.'}, 'speed_cap': {'type': 'string', 'description': 'Present only on plans with a PERMANENT speed cap, e.g. "10 Mbit/s". Never call such a plan high-speed.'}, 'voice_sms': {'type': 'string', 'description': 'Always "none": data only, no telephone number, no SMS.'}, 'covers_via': {'type': 'string', 'description': "Present when the plan was returned for a country it covers as part of a multi-country plan: the plan's own region name."}, 'days_range': {'type': 'string', 'description': 'Unlimited Flex: choosable durations in days, e.g. "1-30".'}, 'expires_on': {'type': 'string', 'description': 'Stock expiry date (YYYY-MM-DD) when the product itself has one.'}, 'product_id': {'type': 'integer', 'description': 'Product id. Use it for get_plan_details and start_checkout.'}, 'data_period': {'enum': ['total', 'per_day'], 'type': 'string', 'description': '"total": data_gb is the whole plan (Data Pack). "per_day": data_gb is the daily full-speed allowance (Unlimited Flex, Daily Pack).'}, 'ip_breakout': {'type': 'string', 'description': 'Country whose internet connection the customer appears to use (IP breakout), ISO code(s) — matters for banking apps, streaming and mainland-China access. Vendor fact.'}, 'price_basis': {'enum': ['total', 'per_day'], 'type': 'string', 'description': 'What `price` means.'}, 'refund_rule': {'type': 'string', 'description': 'The refund class in words - present verbatim.'}, 'kyc_required': {'type': 'boolean', 'description': 'true when the vendor requires real-name registration (ID verification) on arrival before data works.'}, 'last_updated': {'type': 'string', 'description': 'Date the plan was last updated in the catalogue (YYYY-MM-DD).'}, 'refund_class': {'enum': ['until_install', 'non_refundable', 'no_cancel'], 'type': 'string', 'description': 'Vendor refund/cancellation class for this plan.'}, 'review_count': {'type': 'integer', 'description': 'Number of reviews. Present only when > 0.'}, 'transparency': {'type': 'boolean', 'description': 'A per-order Transparency link shows remaining data in near real-time.'}, 'coverage_note': {'type': 'string', 'description': 'Coverage caveat to present verbatim, e.g. traffic routed via Hong Kong.'}, 'always_on_rate': {'type': 'string', 'description': 'Unlimited Flex / Daily Pack: reduced speed after the daily allowance, e.g. "512 Kbit/s". Empty when the plan has a speed_cap or is unlimited.'}, 'coverage_count': {'type': 'integer', 'description': 'Number of countries in coverage_countries.'}, 'price_is_final': {'type': 'boolean', 'description': 'Always true: no tax or fee is added at checkout.'}, 'pricing_bucket': {'type': 'string', 'description': 'language-region bucket the prices and links are quoted in, e.g. "en-us".'}, 'daily_high_speed': {'type': 'string', 'description': 'Unlimited Flex / Daily Pack: daily allowance at full speed, e.g. "2GB"; "unlimited" = unlimited data every day at full speed (fair-use policy).'}, 'daily_reset_time': {'type': 'string', 'description': 'When the daily allowance resets, as the vendor states it (clock and time zone). Absent = resets 24 h after activation is NOT implied; simply unknown.'}, 'unused_valid_days': {'type': 'integer', 'description': 'Days the eSIM may remain unused after purchase before it expires (supplier value).'}, 'activation_trigger': {'enum': ['install', 'first_connection'], 'type': 'string', 'description': '"install": validity and billing start the moment the eSIM is installed — install only when ready to use. "first_connection": the eSIM can be installed before travel; validity starts on first connection to a network at the destination.'}, 'coverage_countries': {'type': 'array', 'items': {'type': 'object', 'properties': {'iso': {'type': 'string', 'description': 'ISO 3166-1 alpha-2, lowercase.'}, 'name': {'type': 'string', 'description': 'Country name in the requested language.'}, 'networks': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Operator names in that country, as the supplier lists them.'}}, 'additionalProperties': True}, 'description': 'Every country the plan works in, with the network operators per country when known.'}, 'network_generation': {'type': 'string', 'description': 'Network technology, e.g. "4G/LTE/5G". Never an operator name.'}, 'start_date_required': {'type': 'boolean', 'description': 'true when a start date must be chosen at checkout.'}, 'install_before_travel': {'type': 'boolean', 'description': 'true when the eSIM can safely be installed before departure (activation_trigger first_connection).'}}, 'description': 'One eSIM plan. Every field is present only when the catalogue holds a value for it; an absent field is unknown, never "no".', 'additionalProperties': True}}, 'covered': {'type': 'boolean'}, 'message': {'type': 'string', 'description': 'Present when nothing matched: says why and what to try.'}, 'currency': {'type': 'string'}, 'returned': {'type': 'integer'}, 'from_price': {'type': 'string', 'description': 'Lowest price in this result set, shop-formatted (per-day plans count with their day price).'}, 'destination': {'type': 'string'}, 'destinations': {'type': 'array', 'items': {'type': 'object', 'properties': {'iso': {'type': 'string'}, 'name': {'type': 'string'}, 'query': {'type': 'string'}}, 'additionalProperties': True}, 'description': 'How each requested destination was understood.'}, 'all_plans_url': {'type': 'string'}, 'pricing_bucket': {'type': 'string'}, 'total_available': {'type': 'integer', 'description': 'Plans matched before limit; the rest are on all_plans_url.'}}, 'additionalProperties': True}
start_checkout
Start secure checkout
Hand the customer to the eSIM-Global.VIP shop to buy one plan. Returns buy_url (the product page where they tap Buy now and pay securely — card, Apple Pay, Google Pay, PayPal, with an optional discount code) plus the plan name and price in the customer's bucket or currency. No account needed; the eSIM is emailed right after payment. There is no in-chat order tracking.
Read only Open world Idempotent
Input schema
{'type': 'object', 'required': ['product_id'], 'properties': {'days': {'type': 'integer', 'minimum': 1, 'description': 'Unlimited Flex only: the duration the customer wants; the returned total_for_days is the checkout total for it.'}, 'bucket': {'type': 'string', 'description': 'Optional language-region bucket the customer shops in, e.g. "en-gb", "de-de". Wins over language; prices and links are quoted in it.'}, 'currency': {'type': 'string', 'description': 'Optional ISO 4217 code. Every price in the result is quoted in it.'}, 'language': {'type': 'string', 'description': 'ISO language of the conversation, e.g. en, de, ja. Plan names and country names come back in it when available. Bare "en" is quoted in en-us / USD.'}, 'product_id': {'type': 'integer', 'description': 'Product id to buy.'}}}
Output schema
{'type': 'object', 'properties': {'days': {'type': 'integer'}, 'price': {'type': 'number', 'description': 'Read WITH price_basis.'}, 'buy_url': {'type': 'string', 'description': 'The exact product page to send the customer to. Use verbatim.'}, 'message': {'type': 'string'}, 'product': {'type': 'string'}, 'currency': {'type': 'string'}, 'price_max': {'type': 'number'}, 'days_range': {'type': 'string'}, 'product_id': {'type': 'integer'}, 'price_basis': {'enum': ['total', 'per_day'], 'type': 'string'}, 'presentation': {'type': 'string'}, 'price_is_final': {'type': 'boolean'}, 'pricing_bucket': {'type': 'string'}, 'total_for_days': {'type': 'number', 'description': 'Unlimited Flex: checkout total for the requested days, discount applied.'}}, 'additionalProperties': True}
Added
get_shop_facts
Oct. 1, 2026, 2:51 a.m.
Added
recommend_plan
Oct. 1, 2026, 2:51 a.m.
Changed
start_checkout
Oct. 1, 2026, 2:51 a.m.
Changed
get_plan_details
Oct. 1, 2026, 2:51 a.m.
Changed
search_esim_plans
Oct. 1, 2026, 2:51 a.m.
Changed
start_checkout
Sept. 23, 2026, 2:51 a.m.
Changed
get_plan_details
Sept. 23, 2026, 2:51 a.m.
Changed
search_esim_plans
Sept. 23, 2026, 2:51 a.m.
Added
start_checkout
Sept. 17, 2026, 12:55 p.m.
Added
get_plan_details
Sept. 17, 2026, 12:55 p.m.
Added
search_esim_plans
Sept. 17, 2026, 12:55 p.m.