Get eSIM Packages
curl --request GET \
--url https://api.vellosim.com/api/esim/packages \
--header 'X-API-Key: <api-key>'const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.vellosim.com/api/esim/packages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.vellosim.com/api/esim/packages"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.vellosim.com/api/esim/packages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.vellosim.com/api/esim/packages"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}[
{
"packageCode": "US_5GB_30D",
"packageName": "USA 5GB - 30 Days",
"data": "5GB",
"validity": 30,
"price": 8000,
"currency": "NGN",
"originalPriceUSD": 10,
"coverage": ["United States"],
"networkProviders": ["AT&T", "T-Mobile", "Verizon"],
"dataType": "Data Only",
"speed": "4G/5G",
"activation": "Automatic upon installation",
"topUpAvailable": true
},
{
"packageCode": "US_10GB_30D",
"packageName": "USA 10GB - 30 Days",
"data": "10GB",
"validity": 30,
"price": 15000,
"currency": "NGN",
"originalPriceUSD": 18,
"coverage": ["United States"],
"networkProviders": ["AT&T", "T-Mobile", "Verizon"],
"dataType": "Data Only",
"speed": "4G/5G",
"activation": "Automatic upon installation",
"topUpAvailable": true
},
{
"packageCode": "US_UNLIMITED_30D",
"packageName": "USA Unlimited - 30 Days",
"data": "Unlimited",
"validity": 30,
"price": 25000,
"currency": "NGN",
"originalPriceUSD": 30,
"coverage": ["United States"],
"networkProviders": ["AT&T", "T-Mobile"],
"dataType": "Data Only",
"speed": "4G/5G (throttled after 50GB)",
"activation": "Automatic upon installation",
"topUpAvailable": false
}
]
{
"success": false,
"message": "Bad Request",
"error": {
"code": "MISSING_REGION_CODE",
"details": "regionCode parameter is required"
}
}
{
"success": false,
"message": "Not Found",
"error": {
"code": "REGION_NOT_FOUND",
"details": "No packages found for the specified region"
}
}
eSIM
Get eSIM Packages
Get eSIM packages filtered by region with pricing
GET
/
api
/
esim
/
packages
Get eSIM Packages
curl --request GET \
--url https://api.vellosim.com/api/esim/packages \
--header 'X-API-Key: <api-key>'const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.vellosim.com/api/esim/packages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.vellosim.com/api/esim/packages"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.vellosim.com/api/esim/packages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.vellosim.com/api/esim/packages"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}[
{
"packageCode": "US_5GB_30D",
"packageName": "USA 5GB - 30 Days",
"data": "5GB",
"validity": 30,
"price": 8000,
"currency": "NGN",
"originalPriceUSD": 10,
"coverage": ["United States"],
"networkProviders": ["AT&T", "T-Mobile", "Verizon"],
"dataType": "Data Only",
"speed": "4G/5G",
"activation": "Automatic upon installation",
"topUpAvailable": true
},
{
"packageCode": "US_10GB_30D",
"packageName": "USA 10GB - 30 Days",
"data": "10GB",
"validity": 30,
"price": 15000,
"currency": "NGN",
"originalPriceUSD": 18,
"coverage": ["United States"],
"networkProviders": ["AT&T", "T-Mobile", "Verizon"],
"dataType": "Data Only",
"speed": "4G/5G",
"activation": "Automatic upon installation",
"topUpAvailable": true
},
{
"packageCode": "US_UNLIMITED_30D",
"packageName": "USA Unlimited - 30 Days",
"data": "Unlimited",
"validity": 30,
"price": 25000,
"currency": "NGN",
"originalPriceUSD": 30,
"coverage": ["United States"],
"networkProviders": ["AT&T", "T-Mobile"],
"dataType": "Data Only",
"speed": "4G/5G (throttled after 50GB)",
"activation": "Automatic upon installation",
"topUpAvailable": false
}
]
{
"success": false,
"message": "Bad Request",
"error": {
"code": "MISSING_REGION_CODE",
"details": "regionCode parameter is required"
}
}
{
"success": false,
"message": "Not Found",
"error": {
"code": "REGION_NOT_FOUND",
"details": "No packages found for the specified region"
}
}
Endpoint
GET /api/esim/packages
Description
This endpoint returns eSIM packages available for a specific region. Prices are automatically calculated based on your account currency (NGN or USD).Authentication
string
required
API Key for authentication
YOUR_API_KEY
Query Parameters
string
required
Region code to filter packages (e.g., “US”, “EU”, “ASIA”)Get available region codes from
/api/esim/regionsstring
Package type filter:
BASE- New eSIM packages (default)TOPUP- Top-up packages for existing eSIMs
string
Filter by region type:
LC- Local (single country)RG- Regional (multi-country)GL- Global
string
Specific package code to retrieve (required when type is TOPUP)
Response
array
Array of package objects with pricing
Show Package Object
Show Package Object
string
Unique package identifier
string
Package display name
string
Data allowance (e.g., “5GB”, “10GB”, “Unlimited”)
number
Validity period in days
number
Package price in your currency
string
Your account currency (NGN or USD)
number
Original price in USD
array
List of countries covered (for regional packages)
array
Available network providers
Example Request
# Get packages for United States
curl -X GET 'https://api.vellosim.com/api/esim/packages?regionCode=US&type=BASE' \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json"
# Get top-up packages for a specific eSIM
curl -X GET 'https://api.vellosim.com/api/esim/packages?regionCode=US&type=TOPUP&packageCode=US_5GB_30D' \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json"
// Get base packages for a region
async function getPackages(regionCode) {
const response = await fetch(
`https://api.vellosim.com/api/esim/packages?regionCode=${regionCode}&type=BASE`,
{
method: 'GET',
headers: {
'X-API-Key': ' YOUR_API_KEY',
'Content-Type': 'application/json'
}
}
);
const packages = await response.json();
return packages;
}
// Usage
const usPackages = await getPackages('US');
console.log(`Found ${usPackages.length} packages for USA`);
// Get top-up options
async function getTopUpOptions(regionCode, packageCode) {
const response = await fetch(
`https://api.vellosim.com/api/esim/packages?regionCode=${regionCode}&type=TOPUP&packageCode=${packageCode}`,
{
method: 'GET',
headers: {
'X-API-Key': ' YOUR_API_KEY',
'Content-Type': 'application/json'
}
}
);
return await response.json();
}
import requests
def get_packages(region_code, package_type='BASE'):
"""Get eSIM packages for a region"""
headers = {
'X-API-Key': ' YOUR_API_KEY',
'Content-Type': 'application/json'
}
params = {
'regionCode': region_code,
'type': package_type
}
response = requests.get(
'https://api.vellosim.com/api/esim/packages',
headers=headers,
params=params
)
return response.json()
# Get packages for Europe
eu_packages = get_packages('EU')
print(f"Found {len(eu_packages)} packages for Europe")
# Filter by data size
large_packages = [p for p in eu_packages if '10GB' in p['data']]
print(f"{len(large_packages)} packages with 10GB+ data")
<?php
function getPackages($regionCode, $type = 'BASE') {
$apiKey = 'YOUR_API_KEY';
$url = 'https://api.vellosim.com/api/esim/packages?' . http_build_query([
'regionCode' => $regionCode,
'type' => $type
]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-API-Key: ' . $apiKey,
'Content-Type: application/json'
]);
$response = curl_exec($ch);
$packages = json_decode($response, true);
curl_close($ch);
return $packages;
}
// Get packages for Asia
$asiaPackages = getPackages('ASIA');
echo "Found " . count($asiaPackages) . " packages for Asia\n";
?>
Example Response
[
{
"packageCode": "US_5GB_30D",
"packageName": "USA 5GB - 30 Days",
"data": "5GB",
"validity": 30,
"price": 8000,
"currency": "NGN",
"originalPriceUSD": 10,
"coverage": ["United States"],
"networkProviders": ["AT&T", "T-Mobile", "Verizon"],
"dataType": "Data Only",
"speed": "4G/5G",
"activation": "Automatic upon installation",
"topUpAvailable": true
},
{
"packageCode": "US_10GB_30D",
"packageName": "USA 10GB - 30 Days",
"data": "10GB",
"validity": 30,
"price": 15000,
"currency": "NGN",
"originalPriceUSD": 18,
"coverage": ["United States"],
"networkProviders": ["AT&T", "T-Mobile", "Verizon"],
"dataType": "Data Only",
"speed": "4G/5G",
"activation": "Automatic upon installation",
"topUpAvailable": true
},
{
"packageCode": "US_UNLIMITED_30D",
"packageName": "USA Unlimited - 30 Days",
"data": "Unlimited",
"validity": 30,
"price": 25000,
"currency": "NGN",
"originalPriceUSD": 30,
"coverage": ["United States"],
"networkProviders": ["AT&T", "T-Mobile"],
"dataType": "Data Only",
"speed": "4G/5G (throttled after 50GB)",
"activation": "Automatic upon installation",
"topUpAvailable": false
}
]
{
"success": false,
"message": "Bad Request",
"error": {
"code": "MISSING_REGION_CODE",
"details": "regionCode parameter is required"
}
}
{
"success": false,
"message": "Not Found",
"error": {
"code": "REGION_NOT_FOUND",
"details": "No packages found for the specified region"
}
}
Package Types
| Type | Description | Use Case |
|---|---|---|
| BASE | New eSIM packages | First-time purchase for a region |
| TOPUP | Data top-up packages | Add data to existing eSIM |
Pricing
- Prices are automatically converted to your account currency
- NGN prices include the website’s price increment percentage
- USD prices are shown for reference
- All prices are final (no hidden fees)
Exchange rates and pricing increments are configured in your account settings
Use Cases
Display Package Catalog
Display Package Catalog
Show available packages in your UI:
async function displayPackages(regionCode) {
const packages = await getPackages(regionCode);
packages.forEach(pkg => {
console.log(`${pkg.packageName}: ${pkg.currency} ${pkg.price}`);
console.log(`Data: ${pkg.data}, Validity: ${pkg.validity} days`);
console.log(`Networks: ${pkg.networkProviders.join(', ')}\n`);
});
}
Filter by Price Range
Filter by Price Range
Let users filter packages by their budget:
function filterByPrice(packages, minPrice, maxPrice) {
return packages.filter(pkg =>
pkg.price >= minPrice && pkg.price <= maxPrice
);
}
const affordablePackages = filterByPrice(packages, 0, 10000);
Show Top-Up Options
Show Top-Up Options
Display data top-up options for existing eSIMs:
async function getTopUpOptions(esimPackageCode) {
const topups = await fetch(
`/api/esim/packages?regionCode=US&type=TOPUP&packageCode=${esimPackageCode}`,
{ headers: { 'X-API-Key': ' YOUR_API_KEY' } }
).then(r => r.json());
return topups;
}
Next Steps
Purchase eSIM
Buy an eSIM package
Get Package Details
Get detailed info for a specific package
Top Destinations
View popular destinations
Integration Guide
Build a package catalog UI
⌘I
