リセラー向け HTTP API のリファレンスです。標準的な SMM パネル API 互換のフォーマットで、発注・ステータス確認・リフィル・キャンセルを自動化できます。
https://demo.socialgoodworld.com/api/v2balance / services のみ動作確認用に GET も可)。すべてのリクエストに API キー key=smm_... を含めます。送信方法は次の 3 つに対応し、body が優先・クエリ文字列はフォールバックとして併合されます。
application/x-www-form-urlencoded の bodyapplication/json の body?key=...&action=balance)キーは ログイン後の API キーページ で発行します。形式は smm_ + ランダム文字列(約 47 文字)で、発行時に一度だけ表示 されます(サーバーにはハッシュのみ保存)。漏えい時はローテーションで即座に無効化できます。
認証に失敗すると一律で 401 { "error": "Invalid API key" } を返します(未指定・形式不正・該当なしを区別しません)。
エンドポイントは ホスト非依存 です。キーがアカウント(テナント)を一意に決めるため、自分のどのパネルドメインから呼び出しても同じアカウントに解決されます。
リクエストの送り方(3 通り・いずれも等価)
# 1) form-encoded
curl -X POST https://demo.socialgoodworld.com/api/v2 \
-d "key=smm_XXXX...&action=balance"
# 2) JSON
curl -X POST https://demo.socialgoodworld.com/api/v2 \
-H "Content-Type: application/json" \
-d '{"key":"smm_XXXX...","action":"balance"}'
# 3) query string (GET, balance/services のみ)
curl "https://demo.socialgoodworld.com/api/v2?key=smm_XXXX...&action=services"API キー単位で、1 分あたりのリクエスト数に上限があります。上限を超えると 429 { "error": "Rate limit exceeded" } を返します。
Retry-After(再試行までの秒数)と X-RateLimit-Limit / X-RateLimit-Remaining / X-RateLimit-Reset ヘッダが付きます。status / refill / cancel の orders(カンマ区切り)を使うと、1 リクエストにまとめられレート消費を抑えられます。| パラメータ | 必須 | 説明 |
|---|---|---|
action | 必須 | "balance" |
レスポンス
{
"balance": "100.8400",
"currency": "USD"
}| パラメータ | 必須 | 説明 |
|---|---|---|
action | 必須 | "services" |
レスポンス(配列)
[
{
"service": "svc_abc123", // add の service に渡す ID
"name": "Instagram Followers",
"type": "Default", // サービス種別
"rate": "5.0000", // 1000 単位あたりの価格 (USD)
"min": "10",
"max": "100000",
"category": "Instagram",
"refill": true, // リフィル対応可否
"cancel": true, // キャンセル対応可否
"dripfeed": false // ドリップフィード対応可否
}
]有効かつ提供元が稼働中のサービスのみ返します。rate は SMM パネル慣例どおり「1000 件あたりの価格」です。
| パラメータ | 必須 | 説明 |
|---|---|---|
action | 必須 | "add" |
service | 必須 | サービス ID(services の値) |
link | 必須 | 対象の URL |
quantity | 任意 | 数量。サービスの min〜max の範囲。Package 型は省略可(既定 1) |
comments | 任意 | Custom Comments 型: 1 行 1 コメント |
runs | 任意 | Drip-feed 型: 実行回数 |
interval | 任意 | Drip-feed 型: 実行間隔(分) |
username | 任意 | Subscriptions 型: 対象ユーザー名 |
posts | 任意 | Subscriptions 型: 監視する投稿数 |
min | 任意 | Subscriptions 型: 1 投稿あたり最小数 |
max | 任意 | Subscriptions 型: 1 投稿あたり最大数 |
delay | 任意 | Subscriptions 型: 遅延(秒) |
expiry | 任意 | Subscriptions 型: 期限(YYYY-MM-DD) |
リクエスト例
curl -X POST https://demo.socialgoodworld.com/api/v2 \
-d "key=smm_XXXX...&action=add&service=svc_abc123&link=https://instagram.com/p/...&quantity=1000"レスポンス(成功)
{
"order": "ord_abc123", // この注文の ID
"charge": "5.00", // 引き落とし額 (USD)
"currency": "USD"
}残高は発注時に即座に引き落とされます。上流プロバイダが発注を拒否した場合は注文が Canceled になり、引き落とし額は自動で残高へ返金されます。残高不足のときは 402 { "error": "Not enough funds" } を返します。
| パラメータ | 必須 | 説明 |
|---|---|---|
action | 必須 | "status" |
order | 任意 | 単一の注文 ID |
orders | 任意 | 複数の注文 ID(カンマ区切り)。order と orders はどちらか一方 |
レスポンス(単一: order 指定)
{
"charge": "5.0000",
"start_count": "1200", // 配信開始時点のカウント
"status": "In progress",
"remains": "300", // 残り配信数
"currency": "USD"
}レスポンス(複数: orders 指定)
{
"ord_abc123": { "charge": "5.0000", "start_count": "1200", "status": "Completed", "remains": "0", "currency": "USD" },
"ord_bad999": { "error": "Incorrect order ID" }
}単一指定で注文が見つからない場合は 404 { "error": "Incorrect order ID" }。複数指定では HTTP 200 で、見つからない ID だけ { "error": "Incorrect order ID" } を返します。返却値はローカル DB の値で、上流との同期は sync-orders cron が定期的に行います。
| パラメータ | 必須 | 説明 |
|---|---|---|
action | 必須 | "refill" |
order | 任意 | 単一の注文 ID |
orders | 任意 | 複数の注文 ID(カンマ区切り) |
レスポンス(単一)
{ "refill": "pending" }レスポンス(複数)
[
{ "order": "ord_abc123", "refill": "pending" },
{ "order": "ord_def456", "error": "Refill not supported for this service" }
]リフィルはフラグを立てるだけで、実際の上流呼び出しは sync-orders cron が非同期にディスパッチします。対象は refill 対応かつ Completed / Partial の注文に限られます。
| パラメータ | 必須 | 説明 |
|---|---|---|
action | 必須 | "refill_status" |
order | 必須 | 注文 ID |
レスポンス
{ "status": "Pending" } // "Completed" | "Pending" | "Not Found"Completed = リフィル実行済み、Pending = 要求受付済み(cron 待ち)、Not Found = リフィル要求なし。注文が見つからない場合は 404 { "error": "Incorrect order ID" }。
| パラメータ | 必須 | 説明 |
|---|---|---|
action | 必須 | "cancel" |
order | 任意 | 単一の注文 ID |
orders | 任意 | 複数の注文 ID(カンマ区切り) |
レスポンス(単一・複数とも配列)
[
{ "order": "ord_abc123", "cancel": "1" },
{ "order": "ord_def456", "error": "Order status not eligible" }
]キャンセルもフラグを立てるだけで、上流呼び出しは sync-orders cron が処理します。キャンセルが確定すると未着分は残高へ返金されます。対象は cancel 対応かつ未完了(Awaiting / Pending / Processing / In progress)の注文です。
| status | 意味 |
|---|---|
Awaiting | 発注直後。上流への送信待ち |
Pending | 上流が受理し、処理開始待ち |
Processing | 上流が処理中 |
In progress | 配信が進行中(残数が減っていく) |
Completed | 配信完了 |
Partial | 一部のみ配信。未着分は返金済み |
Canceled | キャンセル。未着分は残高へ返金済み |
| type | add で使うパラメータ |
|---|---|
Default | service, link, quantity |
Custom Comments | service, link, comments(1 行 1 コメント) |
Drip-feed | service, link, quantity, runs, interval(分) |
Subscriptions | service, username, min, max, posts, delay(秒), expiry(YYYY-MM-DD) |
Package | service, link(quantity はサービス側で固定) |
エラーは { "error": "<メッセージ>" } の形で返り、HTTP ステータスで種別を表します。
| HTTP | error | 意味 |
|---|---|---|
| 401 | Invalid API key | キー未指定 / 形式不正 / 該当キーなし(理由は区別しない) |
| 400 | Missing action | action パラメータがない |
| 400 | Unknown action | 対応していない action 名 |
| 400 | Missing service | add で service がない |
| 400 | Missing link | add で link がない |
| 400 | Invalid quantity | quantity が数値でない / 1 未満 |
| 400 | Quantity out of range (min-max) | 数量がサービスの min〜max 範囲外 |
| 400 | Service not available | サービスが無効 / 他テナント / 提供停止中 |
| 400 | Order rejected by upstream | 上流プロバイダが発注を拒否(残高は自動返金) |
| 400 | Missing order | refill_status で order がない |
| 400 | Missing order or orders param | status / refill / cancel で対象 ID がない |
| 400 | Refill not supported for this service | このサービスはリフィル非対応 |
| 400 | Cancel not supported for this service | このサービスはキャンセル非対応 |
| 400 | Order status not eligible | 現在のステータスではリフィル / キャンセル不可 |
| 400 | Already requested | すでにリフィル / キャンセルを要求済み |
| 400 | Order has no upstream id yet | 上流注文 ID 未付与(配信開始前) |
| 402 | Not enough funds | 残高不足で発注できない |
| 404 | Incorrect order ID | 注文が見つからない(単一 status / refill_status) |
| 405 | POST required for this action | GET は balance / services のみ対応 |
| 429 | Rate limit exceeded | レート制限超過。Retry-After 秒後に再試行 |
| 500 | Internal server error | 上流ネットワーク等の予期しない例外(詳細は秘匿) |