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}
              
              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}
              
              POST /v1/sim-swap/retrieve-date HTTP/1.1
Content-Type: application/json
Authorization: Basic ${base64_auth_string}

            
このコードブロックはフローティングウィンドウ内に表示されます

リクエストボディ

{ "phone_number": "+381692223535" }
              
              {
  "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" }
              
              {
  "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": 3002,
  "message": "invalid phone_number"
}

            
このコードブロックはフローティングウィンドウ内に表示されます

残高不足の例:

{ "code": 3005, "message": "balance not enough" }
              
              {
  "code": 3005,
  "message": "balance not enough"
}

            
このコードブロックはフローティングウィンドウ内に表示されます

番号がサービス提供エリア外の例:

{ "code": 5101, "message": "phone number is not in sim swap service coverage" }
              
              {
  "code": 5101,
  "message": "phone number is not in sim swap service coverage"
}

            
このコードブロックはフローティングウィンドウ内に表示されます

一般的な失敗の例:

{ "code": 5100, "message": "failed to retrieve sim swap date" }
              
              {
  "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}
              
              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": "+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 }
              
              {
  "request_id": "2055136570293469184",
  "swapped": true
}

            
このコードブロックはフローティングウィンドウ内に表示されます

失敗レスポンス

構造はRetrieve Dateインターフェースと同じです。特有の失敗レスポンス例:

パラメータエラー(max_ageが範囲外):

{ "code": 3002, "message": "max_age must be between 1 and 2400" }
              
              {
  "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サービス提供エリア外です。これには、現在サポートされていない国、通信事業者、番号帯、または認識できない番号が含まれます
Icon Solid Transparent White Qiyu
お問い合わせ