パートナーAPI(B2B)
商品検索
GET /b2b/v1/products — 国・キーワード・期間・データ量などでesimoaの商品を検索します。
リクエスト#
GET
/b2b/v1/productscurl "https://api.esimoa.com/b2b/v1/products?country=JP&isUnlimited=true&minDays=5&sortBy=price&limit=20" \
-H "X-API-Key: $ESIMOA_PARTNER_KEY"const params = new URLSearchParams({
country: 'JP',
isUnlimited: 'true',
minDays: '5',
sortBy: 'price',
limit: '20',
page: '1',
});
const res = await fetch(`https://api.esimoa.com/b2b/v1/products?${params}`, {
headers: { 'X-API-Key': process.env.ESIMOA_PARTNER_KEY },
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.code}: ${body.message}`);
const { data: products, total, page, limit } = body;import os
import requests
res = requests.get(
"https://api.esimoa.com/b2b/v1/products",
params={"country": "JP", "isUnlimited": "true", "minDays": 5, "sortBy": "price", "limit": 20, "page": 1},
headers={"X-API-Key": os.environ["ESIMOA_PARTNER_KEY"]},
timeout=10,
)
body = res.json()
if not res.ok:
raise RuntimeError(f"{body['code']}: {body['message']}")
products = body["data"]クエリパラメータ#
すべてのパラメータは任意です。範囲外の値は400になり、未知のパラメータは無視されます。
| パラメータ | 型 | 説明 |
|---|---|---|
country | string | ISO 3166-1 alpha-2 国コード(例: JP)。それ以外の形式は400 |
q | string | キーワード(最大60文字) |
isUnlimited | boolean | true で無制限のみ、false で無制限を除外 — true | false(1 | 0 も可) |
minDays · maxDays | integer | 有効日数の範囲、1–365 |
minDataGB | number | 最小データ量(GB)、0–1000 |
hasLocalNumber | boolean | 現地電話番号付きか — true | false(1 | 0 も可) |
isMultiCountry | boolean | 複数国商品か — true | false(1 | 0 も可) |
sortBy | string | recommended(既定)| price | validity | data |
sortOrder | string | asc | desc — 省略時は並び替えごとの既定値 |
page | integer | 1から開始、既定 1 |
limit | integer | 1–50、既定 20 |
並び替え#
| sortBy | 既定の sortOrder | 意味 |
|---|---|---|
| recommended | desc | esimoaのおすすめ順(販売数を反映)— ウェブと同じ順序 |
| price | asc | 価格の安い順 |
| validity | asc | 有効期間の短い順 |
| data | desc | データの多い順 |
ページング#
page は1から始まります。レスポンスに page・limit・total が含まれるので、最終ページは ceil(total / limit) で計算してください。
レスポンス#
200 OKjson
{
"success": true,
"data": [
{
"id": "partner_9VKPYQ3JRYVK5797",
"name": "Japan Unlimited 5일",
"country": "Japan",
"countryCode": "JP",
"coverageCountries": ["JP"],
"isMultiCountry": false,
"dataAmount": "Unlimited",
"isUnlimited": true,
"validityDays": 5,
"priceKRW": 12000,
"currency": "KRW",
"networkType": "5G",
"localNetworks": ["SoftBank"],
"isLocalNetwork": true,
"fupPolicy": null,
"hotspotEnabled": true,
"hasLocalNumber": false,
"voiceMinutes": null,
"smsCount": null,
"supportTopUp": false,
"supportsUsim": false,
"activationType": "instant"
}
],
"total": 128,
"page": 1,
"limit": 20
}PartnerProduct オブジェクト#
| フィールド | 型 | 説明 |
|---|---|---|
id | string | 'partner_<packageCode>' — esimoaウェブの商品IDと同じ |
name | string | 「<地域> <データ> <N>일」形式の表示名(韓国語の日数表記)。他言語では構造化フィールドから組み立ててください |
country | string | 対象地域の表示文言(複数国商品は国を列挙) |
countryCode | string? | ISO国コード — ない場合は省略 |
coverageCountries | string[] | 利用可能な国コード一覧 |
region | string? | 地域区分 — ない場合は省略 |
isMultiCountry | boolean | 複数国商品か |
dataAmount | string | カタログ表示文字列('10GB'、'Unlimited'、'1GB/Day + Unlimited' …) |
dataAmountGB | number? | GB数値 — 完全無制限なら省略 |
isUnlimited | boolean | 無制限プランか |
validityDays | integer | 有効日数 |
priceKRW / currency | integer / 'KRW' | esimoaの消費者価格(ウォン)— v1 にパートナー価格はありません |
networkType | string | ネットワーク(例: 5G)— 不明なら '' |
localNetworks | string[] | 現地キャリア一覧 |
isLocalNetwork | boolean | ローミングではなく現地回線を使うか |
fupPolicy | string | null | フェアユースポリシー(FUP)の文言 |
hotspotEnabled | boolean | null | テザリング可否 — null は不明 |
hasLocalNumber | boolean | 現地電話番号付きか |
voiceMinutes | integer | null | 通話分数 — -1 は無制限、null は提供なし |
smsCount | integer | null | SMS件数 — null は提供なし |
supportTopUp | boolean | null | チャージ可否 — null は不明 |
supportsUsim | boolean | 物理USIMでも販売されるか |
activationType | string | 開通方式(例: 'instant') |
注記
提供元・原価のフィールドはレスポンスに含まれません。フィールドは追加のみで名前や意味は変わらないため、未知のフィールドは無視するようにパースしてください。
