SIM Swap
SIM Swap(SIMスワップ)とは、ユーザーの電話番号を新しいSIMカードに紐付けるプロセスを指します。通常、カードの紛失による再発行、SIMカードのアップグレード、MNP(携帯電話番号ポータビリティ)、マルチSIMサービスの開始、または新しいユーザーが以前他人が使用していた番号を引き継いだ場合などに発生します。
攻撃者はSIM Swapを利用して他人の電話番号をハイジャックし、SMS認証コードを傍受してパスワードをリセットし、アカウントを乗っ取ることがあります。SIM Swap APIは、指定された電話番号でSIMスワップが発生したかどうかをリアルタイムで検出し、SMS OTP検証などの重要なプロセスにおける潜在的なSIMハイジャックのリスクを特定し、アカウント乗っ取りの確率を低減するのに役立ちます。
注意: 現在、以下の国/地域の番号でのみSIM Swapの照会をサポートしています:ブラジル、インドネシア。
本APIは2つの独立したインターフェースを提供します:
- Retrieve Date:指定された電話番号で直近にSIM Swapが発生した時間を照会します。
- Check:指定された電話番号で過去N時間以内にSIM Swapが発生したかどうかを検出します。
呼び出し認証
これらの2つのインターフェースはどちらもHTTP Basic Auth認証方式を採用しており、HTTP HeaderにAuthorizationを追加します:
Authorization: Basic ${base64_auth_string}
${base64_auth_string}の生成アルゴリズムはbase64(dev_key:dev_secret)です。
API認証の実行方法について詳しくは、呼び出し認証をご参照ください。
Retrieve Date
指定された電話番号で直近にSIM Swapが発生した時間を照会します。
呼び出しアドレス
POST https://otp.api.engagelab.cc/v1/sim-swap/retrieve-date
リクエスト例
リクエストオブジェクトはJSON形式で表現されるため、リクエストヘッダーにContent-Type: application/jsonを含める必要があります。
リクエストヘッダー
POST /v1/sim-swap/retrieve-date HTTP/1.1
Content-Type: application/json
Authorization: Basic ${base64_auth_string}
リクエストボディ
{
"phone_number": "+381692223535"
}
リクエストパラメータ
| パラメータ | 型 | オプション | 説明 |
|---|---|---|---|
phone_number |
String | 必須 | 照会対象の電話番号。E.164形式を推奨します |
レスポンスパラメータ
成功レスポンス
| フィールド | 型 | オプション | 説明 |
|---|---|---|---|
request_id |
String | 必須 | 今回の照会レコードID |
latest_sim_change |
String / null | 必須 | 直近のSIM Swap時間(RFC3339形式)。カードが一度も交換されていない場合は初回アクティベーション時間を返します。プライバシー規制によりデータを返せない場合はnullになります |
成功レスポンス例:
{
"request_id": "2055136570436075520",
"latest_sim_change": "2026-05-01T15:00:00Z"
}
失敗レスポンス
HTTPステータスコードは4xxまたは5xxで、レスポンスボディには以下のフィールドが含まれます:
| フィールド | 型 | オプション | 説明 |
|---|---|---|---|
code |
int | 必須 | エラーコード。詳細はエラーコードの説明を参照してください |
message |
String | 必須 | エラーの詳細 |
一般的な失敗レスポンス例:
パラメータエラーの例:
{
"code": 3002,
"message": "invalid phone_number"
}
残高不足の例:
{
"code": 3005,
"message": "balance not enough"
}
番号がサービス提供エリア外の例:
{
"code": 5101,
"message": "phone number is not in sim swap service coverage"
}
一般的な失敗の例:
{
"code": 5100,
"message": "failed to retrieve sim swap date"
}
Check
指定された電話番号で過去N時間以内にSIM Swapが発生したかどうかを検出します。
呼び出しアドレス
POST https://otp.api.engagelab.cc/v1/sim-swap/check
リクエスト例
リクエストオブジェクトはJSON形式で表現され、リクエストヘッダーにも同様にContent-Type: application/jsonを含める必要があります。
リクエストヘッダー
POST /v1/sim-swap/check HTTP/1.1
Content-Type: application/json
Authorization: Basic ${base64_auth_string}
リクエストボディ
{
"phone_number": "+381692223535",
"max_age": 400
}
リクエストパラメータ
| パラメータ | 型 | オプション | 説明 |
|---|---|---|---|
phone_number |
String | 必須 | 照会対象の電話番号。E.164形式を推奨します |
max_age |
Integer | 必須 | 照会ウィンドウ(単位:時間)。設定可能範囲は1 ~ 2400です |
レスポンスパラメータ
成功レスポンス
| フィールド | 型 | オプション | 説明 |
|---|---|---|---|
request_id |
String | 必須 | 今回の照会レコードID |
swapped |
Boolean | 必須 | 指定された時間ウィンドウ内にSIM Swapが発生したかどうか |
成功レスポンス例:
{
"request_id": "2055136570293469184",
"swapped": true
}
失敗レスポンス
構造はRetrieve Dateインターフェースと同じです。特有の失敗レスポンス例:
パラメータエラー(max_ageが範囲外):
{
"code": 3002,
"message": "max_age must be between 1 and 2400"
}
エラーコード
| エラーコード | HTTP Code | 説明 |
|---|---|---|
1000 |
500 | 内部エラー |
2001 |
401 | 認証失敗、正しいtokenが含まれていません |
2002 |
401 | 認証失敗、tokenが期限切れか無効化されています |
2004 |
403 | このAPIを呼び出す権限がありません |
3001 |
400 | リクエストパラメータの形式が無効です。パラメータがJSON形式に準拠しているか確認してください |
3002 |
400 | リクエストパラメータに誤りがあります。リクエストパラメータが要件を満たしているか確認してください |
3005 |
400 | 残高不足 |
5100 |
400 | SIM Swapの一般的な失敗 |
5101 |
400 | 該当番号はSIM Swapサービス提供エリア外です。これには、現在サポートされていない国、通信事業者、番号帯、または認識できない番号が含まれます |










