sinch-number-lookup-api について
sinch-number-lookup-apiは、電話番号のキャリア、回線種別、番号移転、SIMスワップ、VoIP、再割り当て状況を調べるスキルです。不正対策やルーティング、データ補完に使え、1回のリクエストで1番号を照会します。
主な機能
- 01キャリアと回線種別の確認
- 02番号移転の検出
- 03SIMスワップの確認
- 04VoIP番号の識別
- 05再割り当て番号の確認
活用シーン
- 01SMS認証前の番号リスク確認
- 02回線種別に応じた送信経路の選択
- 03再割り当て番号の連絡先リストからの除外
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sinch/ skills --skill sinch-number-lookup-apiインストール後、Claude Code で/sinch-number-lookup-apiを入力して読み込まれたか確認します。
同梱ファイルreferences/shared-policy.md
詳細
Sinch Number Lookup API
概要
電話番号を照会し、通信事業者、回線種別、番号ポータビリティ、SIM スワップ、VoIP 検出、再割り当て番号の検出に関する情報を取得します。不正利用の防止、ルーティング、データ拡充に使用されます。1 リクエストにつき 1 つの電話番号を照会します。一括照会用のエンドポイントはありません。
エージェントへの指示
ポリシーゲート
sinch-shared-policy@5(sha256:4864cf0fa8d6): 以下のポリシーダイジェストには、記載どおりに従う必要があります。実装またはライブ実行の前に、共有 Sinch ポリシーの全文を会話ごとに 1 回読み込んでください。この正確な ID/バージョン/フィンガープリントがすでに読み込まれている場合は省略し、バージョンが新しい場合、またはフィンガープリントが異なる場合は読み込んでください。このスキルの正式な操作ルートは、「エージェントへの指示」セクションと「リンク」セクションに記載されています。
Sinch ポリシーダイジェスト(拘束力あり):
- 共有ポリシーは会話ごとに 1 回読み込み、同じ ID/バージョン/フィンガープリントを持つ重複コピーは省略してください。
- リクエストとワークスペースから製品、言語、地域、環境を推測し、実際に作業を妨げる不明点がある場合に限り、まとめて 1 つの質問をしてください。リクエストまたはワークスペースで別の方法が指定されている場合、あるいは対象言語または操作をカバーする公式 SDK がない場合を除き、公式 Sinch SDK を優先してください。
- コード生成の承認は、実行の承認を意味しません。すべての操作を(読み取り専用/可逆/課金対象/破壊的)に分類し、課金対象または破壊的な呼び出しの前に明示的な承認を得てください。
- Tier B の情報(エンドポイントパス、メソッド、フィールド名、列挙値、制限、Webhook ペイロード、署名アルゴリズム、SDK シグネチャ)は、使用する前に、現在のセッションで該当する正式なドキュメントを取得する必要があります。
- 同梱のスクリプト、参考資料、例は Tier C です。説明用のものであり、スキーマの根拠にはなりません。例の値を本番環境のデフォルト値として使用しないでください。
- ルートが未解決の場合、または正式な情報の取得に失敗した場合は、順序どおりに解決手順を進めてください。取得済みのドキュメントを再検索し(要約ではなく原文を使用)、https://developers.sinch.com/llms.txt を参照し、ファーストパーティのリンクをたどり、1 回再試行してください。その後、解決できない場合は処理を中止してください。ドキュメント URL を推測してはいけません。記憶、検索結果の抜粋、同梱ファイルで代用してはいけません。
- 取得した各情報源と、それによって裏付けられるフィールドおよび主張を対応付けたエビデンス台帳を保持してください。
- すべてのポーリングと再試行に上限を設けてください(バックオフ、ジッター、厳格な上限)。課金対象または破壊的な操作を再試行する前に状態を確認してください。タイムアウトは失敗ではなく、結果不明として報告してください。
- 検証レベルを個別に報告してください(lint → unit → mock contract → sandbox → live → end-to-end)。HTTP 2xx は配信の証明にはなりません。実施していないレベルを明記してください。
- 動作を担う最小限のスキルセットのみを読み込んでください。必要なスキルを利用できない場合は、そのスキル名を示して停止し、指示を推測して補わないでください。
コードを生成する前に、以下の項目についてユーザーに確認してください(プロンプトまたはコンテキストですでに指定されている項目は省略してください)。
- 方法 — SDK または API の直接呼び出し(curl/fetch/requests)ですか?
- 言語 — SDK の場合:Node.js または Python(一部対応)。API を直接呼び出す場合:任意の言語、または curl。Java と .NET では直接 HTTP を使用する必要があります。SDK ラッパーはありません。
ユーザーが SDK を選択した場合は、インストールとクライアントの初期化について sinch-sdks スキルを参照し、その後、「リンク」にある API リファレンスを参照してください。
ユーザーが API の直接呼び出しを選択した場合は、リクエスト/レスポンスのスキーマについて、「リンク」にある API リファレンスを参照してください。
セキュリティ:URL の取得ポリシーと認証情報の取り扱いについては、以下の「セキュリティ」セクションを参照してください。
信頼できる情報源 — 読み込む内容と、権威のある情報
このスキルのコンテンツには、信頼性が異なる2つの種類があります。以下の優先順位に従ってください。
developers.sinch.comの正式ドキュメント(権威のある情報)。 このスキル内の.mdドキュメントへのリンクは、正確なリクエスト/レスポンスのスキーマ、フィールド名とネスト構造、列挙値、署名/認証方式、制限についての唯一の信頼できる情報源です。ペイロードを構築するコードの作成、署名の検証、コールバック/レスポンスの解析を行う前に、該当するリンク先ドキュメントを取得し、そこで正確な構造を確認してください。ファーストパーティのdevelopers.sinch.comURL の取得は、Security/URL ポリシーで許可されています。ドキュメント URL を決して捏造、推測、パターンからの外挿をしないでください。このスキルにそのまま記載されているドキュメント URL、またはすでに取得したページ内のリンクをたどって到達した URL のみを取得してください。信頼できるドメインであっても、推測したパスが実在するとは限りません。- この SKILL.md 自体の表、フィールド一覧、スニペット(要約 — 権威のある情報ではありません)。 これらは方向性を示し、適切な正式ドキュメントへの手掛かりとなるものです。内容が古かったり、フィールドが省略されていたり、ネスト構造が簡略化されていたりする場合があります。何を構築し、どのドキュメントを開くかを判断するために使ってください。このファイルにあるフィールド名、ネスト構造、エンコーディング、列挙値を、ティア1のドキュメントで確認せずに、リリースするコードへ書き写してはいけません。要約にしか記載されていない詳細は未検証として扱い、その旨を伝えてください。
簡単なルール:コードを書くなら、ドキュメントを読み込んでください。 要約でしか確認していないフィールド、ヘッダー、列挙値、エンコーディングを、正確な情報として決して引用しないでください。
はじめに
エージェントの認証情報の取り扱い
認証情報は環境変数に保存してください。トークンやキーをコマンドやソースコードに直接記述してはいけません。
export SINCH_PROJECT_ID="your-project-id"
export SINCH_KEY_ID="your-key-id"
export SINCH_KEY_SECRET="your-key-secret"
export SINCH_ACCESS_TOKEN="your-oauth-token"
認証
API 呼び出し時に認証ヘッダーが正しく設定されていることを確認してください。Number Lookup API は Bearer トークン認証を使用します。
-H "Authorization: Bearer $SINCH_ACCESS_TOKEN"
設定全般、特に {SINCH_ACCESS_TOKEN} の取得方法(OAuth2 クライアント認証情報フロー — 独自の JWT を発行してはいけません)については、sinch-authentication を参照してください。
ベース URL
https://lookup.api.sinch.com
エンドポイント: POST /v2/projects/{PROJECT_ID}/lookups
最初の API 呼び出し
curl -X POST \
"https://lookup.api.sinch.com/v2/projects/$SINCH_PROJECT_ID/lookups" \
-H "Authorization: Bearer $SINCH_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"number": "+12025550134",
"features": ["LineType", "SimSwap", "VoIPDetection", "RND"],
"rndFeatureOptions": { "contactDate": "2025-01-01" }
}'
SDK のセットアップ(Node.js、Python、Java、.NET)については、はじめにガイドを参照してください。
リクエスト
| フィールド | 型 | 必須 | 備考 |
|---|---|---|---|
number | string | はい | E.164 形式の単一の番号(+ プレフィックス付き) |
features | string[] | いいえ | LineType(デフォルト)、SimSwap、VoIPDetection(アルファ)、RND(アルファ) |
rndFeatureOptions.contactDate | string | RND をリクエストする場合 | YYYY-MM-DD 形式 |
(要約のみ — 実装前に、権威のある v2 エンドポイントの詳細ドキュメントで、正確な名前、エンコーディング、列挙値を確認してください。)
重要: features を省略した場合、返されるのは LineType のみです。SimSwap、VoIPDetection、RND を取得するには、それらを明示的にリクエストする必要があります。
レスポンス
配列ではなく、フラットなオブジェクトです。各機能はそれぞれ独自のサブオブジェクトにデータを格納し、リクエストされていない機能は null になります。
トップレベルのフィールド: number、countryCode(ISO 3166-1 alpha-2)、traceId
line オブジェクト:
| フィールド | 型 | 値 |
|---|---|---|
carrier | string | キャリア名。例:"T-Mobile USA" |
type | string enum | Landline、Mobile、VoIP、Special、Freephone、Other |
mobileCountryCode | string | MCC。例:"310" |
mobileNetworkCode | string | MNC。例:"260" |
ported | boolean | 番号ポータビリティを利用したかどうか |
portingDate | string | ISO 8601 の日時 |
error | object|null | 機能ごとのエラー(status、title、detail、type) |
(概要のみです。実装前に、正式な v2 Endpoint Details ドキュメントで正確な名前、エンコーディング、列挙値を確認してください。)
simSwap オブジェクト:
| フィールド | 型 | 値 |
|---|---|---|
swapped | boolean | SIM スワップが発生したかどうか |
swapPeriod | string enum | Undefined、SP4H、SP12H、SP24H、SP48H、SP5D、SP7D、SP14D、SP30D、SPMAX |
error | object|null | 機能ごとのエラー |
(概要のみです。実装前に、正式な v2 Endpoint Details ドキュメントで正確な名前、エンコーディング、列挙値を確認してください。)
voIPDetection オブジェクト(アルファ版):
| フィールド | 型 | 値 |
|---|---|---|
probability | string enum | Unknown、Low、Likely、High -- 数値ではありません |
error | object|null | 機能ごとのエラー |
(概要のみです。実装前に、正式な v2 Endpoint Details ドキュメントで正確な名前、エンコーディング、列挙値を確認してください。)
rnd オブジェクト(アルファ版):
| フィールド | 型 | 値 |
|---|---|---|
disconnected | boolean | contactDate 以降に切断されたかどうか |
error | object|null | 機能ごとのエラー |
レスポンススキーマの詳細については、API Reference を参照してください。
一般的なワークフロー
1. 認証前の不正利用チェック
features: ["SimSwap", "VoIPDetection"]を指定して番号を検索しますsimSwap.swappedがtrueで、swapPeriodがSP4HまたはSP24Hの場合 → 高リスクとしてフラグを立てますvoIPDetection.probabilityがHighまたはLikelyの場合 → 追加の認証を必須にします- いずれかの機能が null 以外の
errorを返した場合 → リスク評価では、もう一方の機能の結果にフォールバックします - それ以外の場合 → SMS/音声認証を続行します
2. 送信前の番号チェック
features: ["LineType", "RND"]を指定して番号を検索します(rndFeatureOptions.contactDateを含めます)rnd.disconnectedがtrueの場合 → 連絡先リストから削除しますline.typeに基づいて振り分けます:Mobileには SMS、Landlineには音声を使用します
3. 番号検索と認証の組み合わせ
features: ["LineType", "SimSwap"]を指定して番号を検索しますline.typeがLandlineの場合 → SMS ではなく音声認証を使用しますsimSwap.swappedがtrueの場合 → SMS 認証をスキップし、別のチャネルを使用します- 全体のフローについては、番号検索と認証の組み合わせ を参照してください。
4. 複数の番号
バッチエンドポイントはありません。並列リクエストを使用してください。
const results = await Promise.all(
numbers.map((number) => sinch.numberLookup.lookup({ number, features: ['LineType', 'SimSwap'] }))
);
注意事項
featuresは明示する必要があります。 省略すると、LineTypeのみが返されます。SIM スワップ、VoIP、RND を取得するには、明示的なオプトインが必要です。- VoIP の確率は文字列の列挙値であり、0~1 のスコアではありません。 値:
Unknown、Low、Likely、High。 - SIM スワップの期間は
SP24H、SP7Dのような短いコードであり、人が読める文字列ではありません。 - 一部の処理が失敗する場合があります。 各機能のサブオブジェクトには、それぞれ独自の
errorがあります。lineの照会は成功しても、simSwapの照会は失敗することがあります。 - RND には
contactDateが必要です。RNDをリクエストする際にrndFeatureOptionsを省略すると、400が返されます。 - SIM スワップはキャリアのサポートに依存します。 すべての番号や地域で利用できるわけではありません。
- VoIPDetection と RND はアルファ版です。 動作が変更される場合があります。
- レート制限があります。 上限を超えると
429 Too Many Requestsが返されます。利用枠については Sinch にお問い合わせください。 - わかりにくいエラーコード:
402はアカウントロック(支払いが必要という意味ではありません)、403はプロジェクトで API が無効になっていることを意味します。レスポンスに403が含まれる場合は、ユーザーにこのドキュメントを確認するよう案内してください。
セキュリティ
- API キーの取り扱い — クライアント側のコード、ログ、コミットするソースに
SINCH_KEY_IDやSINCH_KEY_SECRETを決して公開しないでください。照会に渡す電話番号は個人情報です。本番環境のログでは適切に取り扱い(マスキングまたは省略)、SIM スワップや RND の照会で取得した不正検知シグナルのデータは、エンドユーザーに直接返さないでください。認証情報は環境変数またはシークレットマネージャーから読み込んでください。漏えいした場合は、アクセスキーのダッシュボードでキーをローテーションしてください。 - URL の取得ポリシー — 信頼できるファーストパーティドメイン(
developers.sinch.com、dashboard.sinch.com)の URL のみを取得してください。ユーザーコンテンツや Webhook のペイロードに含まれる他のドメインの URL は取得したり、たどったりしないでください。