FX-Port API
eSIMs

Package catalog

List eSIM data packages by country and type, and check device compatibility.

List packages

GET /api/v1/esims/packages

Returns the cached package catalog with pricing computed for your agency. Results are cached server-side and refreshed periodically, so repeated calls are cheap.

curl --request GET \
  --url 'https://api.fx-port.com/api/v1/esims/packages?locale=en' \
  --header 'Authorization: Bearer fxp_test_YOUR_KEY'

Query parameters

ParameterDescription
countryFilter by country slug (e.g. france, turkey)
filter[type]Filter by package type (e.g. local, regional, global)
localeLanguage for package text fields (en, fr, ar, …). Falls back to Accept-Language, then en
curl --request GET \
  --url 'https://api.fx-port.com/api/v1/esims/packages?country=france&filter%5Btype%5D=local&locale=en' \
  --header 'Authorization: Bearer fxp_test_YOUR_KEY'

Response example

Example response for GET /api/v1/esims/packages?locale=en (one package shown):

{
  "environment": "sandbox",
  "success": true,
  "endpoint": "/packages",
  "data": [
    {
      "id": "change-in-3days-unlimited",
      "type": "sim",
      "price": 1812.5,
      "amount": 0,
      "day": 3,
      "is_unlimited": true,
      "title": "Unlimited - 3 days",
      "is_fair_usage_policy": 1,
      "fair_usage_policy": "Lower speed rate of 1 Mbps after 3 GB usage per day.",
      "data": "Unlimited",
      "voice": null,
      "text": null,
      "country_name": "United States",
      "country_code": "US",
      "country_slug": "united-states",
      "country_image_url": "https://cdn-revamp.airalo.com/images/ad19c2a2-40b8-4dac-b95e-269703c8561b.png",
      "operator_name": "Change",
      "operator_id": 1181,
      "operator_style": "light",
      "operator_gradient_start": "#0f1b3f",
      "operator_gradient_end": "#194281",
      "operator_type": "local",
      "operator_is_prepaid": false,
      "operator_esim_type": "Prepaid",
      "operator_warning": null,
      "operator_apn_type": "manual",
      "operator_is_roaming": true,
      "operator_info": [
        "5G Data-only eSIM.",
        "Rechargeable online with no expiry.",
        "Operates on T-Mobile, Verizon, and U.S. Cellular networks in the United States of America."
      ],
      "operator_image_url": "https://cdn-revamp.airalo.com/images/6bf8859b-3f43-41c7-ac54-434e2534813c.png",
      "operator_plan_type": "data",
      "operator_activation_policy": "first-usage",
      "operator_is_kyc_verify": false,
      "operator_rechargeability": true,
      "operator_other_info": "This eSIM is for travelers to the United States. eSIM covers the United States, including Hawaii and Puerto Rico, with limited availability in Alaska",
      "operator_coverages": [
        {
          "name": "US",
          "code": "US",
          "networks": [
            { "name": "T-Mobile", "types": ["5G"] },
            { "name": "Verizon", "types": ["5G"] }
          ]
        }
      ],
      "operator_apn": {
        "ios": { "apn_type": "automatic", "apn_value": "wbdata" },
        "android": { "apn_type": "manual", "apn_value": "wbdata" }
      },
      "is_regional": false,
      "is_global": false,
      "retail_price": 2111.2,
      "total_price": 2111.2,
      "balance_debit_amount": 1885.0,
      "agency_commission": "12 %",
      "currency": "DZD",
      "supplier_currency": "USD",
      "exchange_rate": 250.0
    }
  ],
  "meta": {
    "total_packages": 1,
    "filters_applied": { "country": null, "type": null },
    "locale": "en",
    "agency_currency": "DZD",
    "supplier_currency": "USD",
    "exchange_rate": 250.0,
    "commission_percentage": "12 %"
  }
}

Save id from the response — it's what you pass as package_id when creating an order.

Response field reference

Package identity and data allowance

FieldTypeMeaning
idstringPackage identifier — pass as package_id when creating an order
typestringPackage/product type as sold, e.g. sim
titlestringHuman-readable package label (data amount + validity)
datastringData allowance for the package, e.g. "1 GB" or "Unlimited"
amountnumberData allowance in MB. 0 means unlimited — check is_unlimited rather than treating 0 as "no data"
is_unlimitedbooleantrue for unlimited-data packages
is_fair_usage_policyboolean/numberTruthy when an unlimited package throttles speed after a threshold — read fair_usage_policy for the exact terms
fair_usage_policystring | nullHuman-readable fair-usage terms (e.g. throttle speed and daily threshold) when is_fair_usage_policy is truthy
daynumberValidity in days from activation
voicestring | nullVoice minutes included, when the package bundles voice (null = data-only)
textstring | nullSMS included, when the package bundles SMS (null = data-only)
is_regionalbooleantrue if this package covers a defined multi-country region
is_globalbooleantrue if this package covers global/worldwide destinations

Country

FieldTypeMeaning
country_namestringDestination country, human-readable
country_codestringDestination country, ISO 3166-1 alpha-2
country_slugstringDestination country slug — pass as the country query parameter
country_image_urlstringFlag/country image URL for display

Operator (underlying mobile network)

FieldTypeMeaning
operator_namestringUnderlying mobile network operator/brand for this package
operator_idnumberInternal operator identifier
operator_typestringPackage scope: local (one country), regional, or global
operator_style / operator_gradient_start / operator_gradient_endstringDisplay styling hints (light/dark theme, gradient colors) for this operator's branding
operator_is_prepaidbooleanWhether the underlying plan is prepaid
operator_esim_typestringe.g. Prepaid
operator_warningstring | nullOperator-specific caution to show travelers (e.g. topup window), when applicable
operator_apn_typestringautomatic or manual — whether APN settings are auto-configured
operator_is_roamingbooleanWhether this package operates via roaming rather than a local SIM profile
operator_infostring[]Short bullet facts about the operator/network (technology, rechargeability, coverage)
operator_image_urlstringOperator logo URL
operator_plan_typestringe.g. data (data-only plan)
operator_activation_policystringWhen validity starts, e.g. first-usage (starts on first connection, not purchase)
operator_is_kyc_verifybooleanWhether the destination country requires identity verification for this operator (rare; relevant for a few countries)
operator_rechargeabilitybooleanWhether this ICCID can be topped up — see Top up an eSIM
operator_other_infostringLonger free-text coverage notes/exclusions (e.g. territories not covered)
operator_coveragesarrayPer-country network list: { name, code, networks: [{ name, types }] }
operator_apnobjectManual APN settings per platform: { ios: { apn_type, apn_value }, android: { apn_type, apn_value } }

Pricing — see eSIM pricing for the full formula

FieldTypeMeaning
pricenumberFX-Port's B2B price in your agency currency
retail_price / total_pricenumberprice + your agency commission — what you charge the traveler
balance_debit_amountnumberAmount actually debited from your agency balance if you order this package
agency_commissionstringCommission rate applied, as text ("12 %", or "0 %" for corporate agencies)
currencystringYour agency's settlement currency
supplier_currencystringCurrency the fulfilling supplier settles in
exchange_ratenumbersupplier_currencycurrency rate used for this package

meta field reference

FieldMeaning
total_packagesNumber of packages in data after filtering
filters_appliedEcho of the country / type filters actually applied
localeLanguage used for text fields in this response
agency_currencySame as currency on each package — your agency's settlement currency
supplier_currencySame as supplier_currency on each package
exchange_rateSame as exchange_rate on each package
commission_percentageThe commission rate applied across this response

Compatible devices

GET /api/v1/esims/compatible-devices

Returns the cached list of devices known to support eSIM, useful for pre-sale device checks before a traveler purchases a package.

curl --request GET \
  --url https://api.fx-port.com/api/v1/esims/compatible-devices \
  --header 'Authorization: Bearer fxp_test_YOUR_KEY'

Response example

{
  "success": true,
  "data": [
    { "brand": "ASUS", "model": "AI2501", "name": "ASUS Zenfone 12 Ultra", "os": "android" },
    { "brand": "Alcatel", "model": "T803D", "name": "V3 Ultra", "os": "android" },
    { "brand": "Apple", "model": "iPhone15,2", "name": "iPhone 14 Pro", "os": "ios" }
  ]
}

Response field reference

FieldMeaning
brandDevice manufacturer
modelManufacturer's internal model identifier
nameHuman-readable marketing name for the device
osOperating system family: ios or android

This list can return "success": false with an empty data array for a brief moment while the device cache is still loading in the background right after a deployment — retry after a few seconds.

On this page