バイブコーダー向けSMSゲートウェイAPI
SMS8は、ご自身のAndroidの上に構築された開発者向けSMSゲートウェイです。Claude Code、Cursor、Windsurf、あるいはcurlからSMS、MMS、OTP、USSDを送信できます。1つのキー、1つのベースURL、入出力はJSONです。
プレイグラウンド
ここから直接SMSゲートウェイを試せます。APIキーを貼り付け、電話番号とメッセージを入力し、送信を押してください。/services/send.phpへPOSTを行い、実際のJSONレスポンスを表示します。タブを切り替えると、curl、PHP、JavaScript、Python、Claude Code / Cursor用プロンプトとして同じリクエストを取得できます。
テスト & コピー
実際のSMSを1件送信します。1クレジットを消費します。APIキーはブラウザから出ません。リクエストはapp.sms8.ioに直接送信されます。
概要
SMS8のSMSゲートウェイは、機能ごとに1つのエンドポイントを持つ単一のホストを公開しています。パスパラメータもネストされたリソースもありません。すべてのアクションは、フォームエンコードされたフィールドを持つフラットなPOSTです。
- ベースURL:
https://app.sms8.io/services/ - メソッド: すべてのエンドポイントで
POST - ボディ:
application/x-www-form-urlencoded - レスポンス:
application/json - 認証: ボディに
key=YOUR_SMS8_API_KEY
mcp.sms8.ioのMCPサーバーを追加し、AIアシスタントにこれらのエンドポイントを呼び出してもらいましょう。AIツールを参照してください。
認証
すべてのリクエストはPOSTボディでAPIキーを送信します。キーはアカウント単位で、すべてのエンドポイントを認可します。ダッシュボードのAPIページapp.sms8.io/api.phpから取得でき、いつでも再発行できます。古いキーは即座に無効化されます。
# すべてのリクエスト
key=YOUR_SMS8_API_KEY
mcp.sms8.ioのMCPサーバーは同じキーをBearerヘッダー(Authorization: Bearer YOUR_SMS8_API_KEY)として受け付けます。ヘッダーベース認証のみをサポートするツールで便利です。
最初のSMS
プライマリ端末を使ってペアリングされたAndroidから1つの番号へメッセージを送信します。YOUR_SMS8_API_KEYと宛先番号を置き換えてください。
curl https://app.sms8.io/services/send.php \ -d "key=YOUR_SMS8_API_KEY" \ -d "number=+81901234567" \ -d "message=SMS8からこんにちは"
レスポンス形式
すべてのエンドポイントはペイロードをsuccessエンベロープでラップします。
{
"success": true,
"data": {
"messages": [
{
"ID": "1",
"number": "+81901234567",
"message": "SMS8からこんにちは",
"deviceID": "1",
"simSlot": "0",
"status": "Pending",
"type": "sms",
"sentDate": "2026-05-24T10:30:00+00:00",
"deliveredDate": null,
"groupID": "…"
}
]
}
}
エラー
失敗時、successはfalseで、ボディに構造化されたerrorを含みます。
{
"success": false,
"error": {
"code": 401,
"message": "Invalid API key"
}
}
| コード | 意味 |
|---|---|
| 400 | パラメータの欠落または形式不正 |
| 401 | APIキーが欠落または無効 |
| 402 | メッセージクレジット不足 |
| 403 | このアカウントまたはプランでは許可されていないアクション |
| 404 | リソースが見つかりません(例: 不明なメッセージID) |
| 429 | レート制限に到達、ペースを落として再試行してください |
| 500 | サーバーエラー、再試行してください |
SMS & MMS送信
/services/send.php
単一送信、バッチ、リスト一斉配信、MMS
1つのエンドポイントが4つの送信モードをカバーします: 単一メッセージ、バッチ(番号ごとに異なるメッセージ)、連絡先リストへの一斉配信、添付付きMMS。どのフィールドを送るかでモードを選びます。
| フィールド | 型 | 備考 |
|---|---|---|
| key | string | APIキー、必須 |
| number | string | E.164電話番号、または単一/一斉モードのカンマ区切りリスト |
| message | string | メッセージ本文、numberまたはlistIDと必須 |
| messages | JSON | 真のバッチモード用の{number, message, type, attachments}の配列 |
| listID | int | このリスト内のすべての連絡先に送信 |
| devices | JSON|int | 単一ID、JSON配列、またはSIM指定形式"2|0" |
| option | 0|1|2 | ルーティングを参照: 指定、全端末、全SIM |
| useRandomDevice | 0|1 | 選択肢からランダムに1端末を選ぶ |
| prioritize | 0|1 | キューを飛び越える(OTP、返信用) |
| type | sms|mms | デフォルトはsms |
| attachments | string | カンマ区切りの画像URL(MMSのみ) |
| schedule | unix ts | この未来のタイムスタンプに送信 |
1回の呼び出しでバッチ送信
curl https://app.sms8.io/services/send.php \ -d "key=YOUR_SMS8_API_KEY" \ -d 'messages=[{"number":"+81...","message":"こんにちは 1"},{"number":"+81...","message":"こんにちは 2"}]' \ -d "option=2"
連絡先リストへ一斉配信
curl https://app.sms8.io/services/send.php \ -d "key=YOUR_SMS8_API_KEY" \ -d "listID=1" \ -d "message=本日中限定セール"
メッセージ取得
/services/read-messages.php
ID、グループ、ステータス、端末、時間で取得
| フィールド | 型 | 備考 |
|---|---|---|
| key | string | APIキー、必須 |
| id | int | IDで1件取得 |
| groupId | string | 送信時に返されるグループID、バッチで有用 |
| status | string | Received、Sent、Pending、Failed |
| deviceID | int | 端末でフィルタ |
| simSlot | int | 0は第一SIM、1は第二SIM |
| startTimestamp | unix ts | 下限(含む) |
| endTimestamp | unix ts | 上限(含む) |
# デバイス8のSIM 0で過去24時間の受信SMS curl https://app.sms8.io/services/read-messages.php \ -d "key=YOUR_SMS8_API_KEY" \ -d "status=Received" \ -d "deviceID=8" \ -d "simSlot=0" \ -d "startTimestamp=$(( $(date +%s) - 86400 ))"
再送信
/services/resend.php
ID、グループ、ステータスで再試行
read-messagesと同じフィルタ形式。1つのID、グループ内のすべてのメッセージ、または時間枠内の特定ステータスのすべてのメッセージを再試行します。
連絡先
/services/manage-contacts.php
追加、再購読、購読解除
| フィールド | 型 | 備考 |
|---|---|---|
| key | string | APIキー、必須 |
| listID | int | 対象連絡先リスト、必須 |
| number | string | 連絡先電話、必須 |
| name | string | 表示名(追加時のみ) |
| resubscribe | 0|1 | 以前購読解除されていた場合に再購読 |
| unsubscribe | 0|1 | リストから削除 |
デバイス
/services/get-devices.php
ペアリング済みAndroid端末を一覧表示
モデル、SIMスロット、プライマリフラグを含むすべての有効な端末を返します。送信呼び出しでdevicesを構築する前に有用です。
USSD
/services/send-ussd-request.php
例: 残高確認の*150#
/services/read-ussd-requests.php
送信済みUSSDリクエストを参照
ペアリングされた端末上でキャリアUSSDコードを実行し、レスポンスを読み戻します。プリペイド残高確認やキャリアメニューに便利です。
受信Webhook
ダッシュボードのAPIページでWebhook URLを設定してください。SMS8は受信したすべてのSMSをHMAC-SHA256署名付きでそのURLにPOSTします。受信側はペイロードがSMS8から来たもので改ざんされていないことを検証できます。
AIツールからは、MCPのcreate_webhookツール経由でWebhookを登録します。保存前にSSRFブロックリストに対してURLを検証します。
デバイス & SIMルーティング
すべての送信エンドポイントは同じルーティング制御を取ります。組み合わせて電話とSIMで負荷分散できます。
| option | 動作 |
|---|---|
| 0 | devicesのIDだけを正確に使用。SIMスロットは"2|0"(端末2、SIM 0)形式。 |
| 1 | すべての有効な端末、各デフォルトSIMを使用。バッチはそれらに分散。 |
| 2 | すべての有効な端末とすべてのSIMを使用。デュアルSIM電話で最大スループット。 |
選択肢からランダムに1つの送信元を選ぶにはuseRandomDevice=1を設定します。OTPに便利です。
スケジューリング
送信を遅延させるにはscheduleをunixタイムスタンプとして渡します。同じメッセージを多くの番号にスケジュールしたり、未来の日付にバッチを送信したりできます。どちらも動作します。
残高
/services/send.phpをkeyフィールドのみで呼び出します。レスポンスのcreditsフィールドは残りクレジットまたは"Unlimited"を返します。
Claude Code、Cursor & Windsurfから使う
SMS8はmcp.sms8.ioにMCPサーバーを提供しており、上記のすべてのRESTエンドポイントをJSON-RPCツールでラップします。同じAPIキー、別アカウント不要です。
// ~/.config/claude/mcp-servers.json (Claude Code) // ~/.cursor/mcp.json (Cursor) // ~/.codeium/windsurf/mcp_config.json (Windsurf) { "mcpServers": { "sms8": { "url": "https://mcp.sms8.io", "transport": "http", "headers": { "Authorization": "Bearer YOUR_SMS8_API_KEY" } } } }
| MCPツール | ラップ対象 |
|---|---|
| send_sms | /services/send.php |
| send_otp | OTPストア + /services/send.php |
| verify_otp | OTPストア、定数時間比較 |
| get_messages | /services/read-messages.php |
| list_devices | /services/get-devices.php |
| create_webhook | ユーザーWebhook URL(SSRFチェック済み) |
| setup_sms8 | アカウント + 端末ハンドシェイク |
PHP SDK
ダッシュボードのapp.sms8.io/api.phpでは、APIキーが事前入力された完全なPHPクラスがレンダリングされます。sendSingleMessage、sendMessages、sendMessageToContactsList、getMessageByID、getMessagesByStatus、resendMessageByID、addContact、unsubscribeContact、getBalance、sendUssdRequest、getDevicesを含みます。
$msg = sendSingleMessage("+81901234567", "SMS8からこんにちは"); $msg = sendSingleMessage("+81901234567", "デバイス1から", 1); $msg = sendSingleMessage("+81901234567", "SIM 0から", "1|0"); $msg = sendSingleMessage("+81901234567", "2分後", null, strtotime("+2 minutes"));
C# SDK
完全なC#のAPIクラスもダッシュボードに事前入力されています。PHP SDKと同じ機能で、.NET / Unity / Xamarinプロジェクトですぐに使えます。
SMS.API.SendSingleMessage("+81901234567", "SMS8からこんにちは"); var msg = SMS.API.SendSingleMessage("+81901234567", "デバイス1から", "1"); var msgs = SMS.API.SendMessages(messages, SMS.API.Option.USE_ALL_SIMS);
curlレシピ
# OTPスタイルのメッセージを優先送信 curl https://app.sms8.io/services/send.php \ -d "key=YOUR_SMS8_API_KEY" \ -d "number=+81901234567" \ -d "message=認証コード: 482910" \ -d "prioritize=1" \ -d "devices=1" # メッセージクレジットを取得 curl https://app.sms8.io/services/send.php \ -d "key=YOUR_SMS8_API_KEY" # 連絡先を追加、存在すれば再購読 curl https://app.sms8.io/services/manage-contacts.php \ -d "key=YOUR_SMS8_API_KEY" \ -d "listID=1" \ -d "number=+81901234567" \ -d "name=山田" \ -d "resubscribe=1"
FAQ
SMS8のSMSゲートウェイAPIとは何ですか?
SMSとMMSの送信、連絡先管理、USSD実行、受信箱読み取りを行うHTTP APIです。すべてのエンドポイントはhttps://app.sms8.io/services/配下のPOSTで、keyパラメータで認証します。メッセージはペアリングされたAndroid端末経由でルーティングされるため、A2P 10DLCもメッセージごとの料金もありません。
Claude Code、Cursor、WindsurfからこれをどうやってAIで使いますか?
AIツールにmcp.sms8.ioのMCPサーバーを追加し、SMS8 APIキーをBearerトークンとして指定します。MCPはsend_sms、send_otp、verify_otpといった同じRESTエンドポイントをJSON-RPCツールでラップします。AIツールセクションを参照してください。
Twilio番号なしで送信できますか?
はい。SMS8はご自身のAndroid端末とSIMカードをゲートウェイとして使用します。Twilio番号も、A2P 10DLC登録も、メッセージごとのキャリア料金も不要です。
受信SMSはどうやって受け取りますか?
ダッシュボードのAPIページでWebhook URLを設定してください。SMS8は受信したすべてのSMSをHMAC署名付きでそのURLにPOSTするので、ペイロードを検証できます。
どのようなレート制限がありますか?
SMSスループットはペアリングされた端末の速度とプランの月間ボリュームで制限されます。OTPフローでは番号あたり24時間で5コードのハードな上限と、設定可能な再送クールダウンが追加されます。
APIキーはどうやってローテーションしますか?
ダッシュボードのapp.sms8.io/api.phpから再生成してください。古いキーは即座に無効化されます。