APIリファレンス
概要
SNSTracker API を使用すると、監視フィードとチャネルをプログラムから管理できます。フィード(動画、投稿など)やチャネル(アカウント、プロフィール)を作成し、最新データを取得するために更新し、Webhook 経由でリアルタイム通知を受け取れます。
認証
すべての API リクエストには API キーによる認証が必要です。X-API-Key ヘッダーに API キーを含めてください。
API キーの取得方法:
- SNSTracker にログイン
- Settings → API Keys に移動
- 新しい API キーを作成するか既存のものを使用
- API キーをコピー(作成時に一度だけ表示されます)
API エンドポイント
1. フィードの作成
フィード URL(動画、投稿など)を送信して監視フィードを作成します。
POST /api/v1/feedsリクエスト
ヘッダー:
X-API-Key: あなたの API キー(必須)Content-Type:application/json
リクエストボディ:
{
"urls": [
"https://www.tiktok.com/@user/video/1234567890",
"https://www.instagram.com/p/ABC123/"
],
"collectionId": "coll_abc123xyz"
}パラメータ:
urls(必須): 監視するフィード URL の配列。1リクエストあたり最大 200 件。collectionId(任意): フィードを追加するコレクション ID。未指定の場合はチームのデフォルトコレクションが使用されます。
レスポンス
成功レスポンス(200):
{
"code": 0,
"message": "ok",
"data": {
"success": 2,
"failed": 0,
"total": 2,
"results": [
{
"index": 0,
"url": "https://www.tiktok.com/@user/video/1234567890",
"platform": "tiktok",
"feedId": "feed_abc123xyz",
"success": true
},
{
"index": 1,
"url": "https://www.instagram.com/p/ABC123/",
"platform": "instagram",
"feedId": "feed_def456uvw",
"success": true
}
],
"errors": [],
"message": "フィードを正常に作成しました。データはまもなく更新されます。"
}
}レスポンスフィールド:
success: 作成に成功したフィード数failed: 作成に失敗したフィード数total: 提供された URL の総数results: 各 URL の結果配列index: リクエスト配列の 0 始まりインデックスurl: 検証および標準化された URLplatform: 検出されたプラットフォーム(tiktok、instagram、youtube など)feedId: 作成されたフィードの一意識別子success: フィードが正常に作成されたかどうかskipped:(任意)既に存在するためスキップされたかどうかresumed:(任意)停止中のフィードが再開されたかどうかerror:(任意)作成に失敗した場合のエラーメッセージ
errors: 失敗した URL のエラー配列
リクエスト例
curl -X POST https://snstracker.com/api/v1/feeds \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://www.tiktok.com/@user/video/1234567890"
]
}'2. フィードの更新
既存のフィードを更新して最新データを即時取得します。ステータスが「Pending」または「Tracked」のフィードのみ更新できます。
POST /api/v1/feeds/refreshリクエスト
ヘッダー:
X-API-Key: あなたの API キー(必須)Content-Type:application/json
リクエストボディ:
{
"feedIds": ["feed_abc123xyz", "feed_def456uvw"]
}パラメータ:
feedIds(必須): 更新するフィード ID の配列
レスポンス
成功レスポンス(200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"feedIds": ["feed_abc123xyz", "feed_def456uvw"],
"total": 2,
"message": "2件のフィードを正常に更新しました"
}
}レスポンスフィールド:
success: 更新操作が成功したかどうかfeedIds: 更新されたフィード ID の配列total: 更新されたフィード数message: 成功メッセージ
リクエスト例
curl -X POST https://snstracker.com/api/v1/feeds/refresh \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"feedIds": ["feed_abc123xyz"]
}'3. チャネルの作成
チャネル URL(アカウントプロフィールなど)を送信して監視チャネルを作成します。
Channel pricing note: Xiaohongshu channel tasks are priced separately from the default channel task price and currently cost 10 credits per successful request.
POST /api/v1/channelsリクエスト
ヘッダー:
X-API-Key: あなたの API キー(必須)Content-Type:application/json
リクエストボディ:
{
"urls": [
"https://www.tiktok.com/@username",
"https://www.instagram.com/username/"
],
"collectionId": "coll_abc123xyz"
}パラメータ:
urls(必須): 監視するチャネル URL の配列。1リクエストあたり最大 5 件。collectionId(任意): チャネルを追加するコレクション ID。未指定の場合はチームのデフォルトコレクションが使用されます。
レスポンス
成功レスポンス(200):
{
"code": 0,
"message": "ok",
"data": {
"success": 2,
"failed": 0,
"total": 2,
"results": [
{
"index": 0,
"url": "https://www.tiktok.com/@username",
"platform": "tiktok",
"channelId": "channel_abc123xyz",
"success": true
},
{
"index": 1,
"url": "https://www.instagram.com/username/",
"platform": "instagram",
"channelId": "channel_def456uvw",
"success": true
}
],
"errors": [],
"message": "チャネルを正常に作成しました。データはまもなく更新されます。"
}
}レスポンスフィールド:
success: 作成に成功したチャネル数failed: 作成に失敗したチャネル数total: 提供された URL の総数results: 各 URL の結果配列index: リクエスト配列の 0 始まりインデックスurl: 検証および標準化された URLplatform: 検出されたプラットフォーム(tiktok、instagram、youtube など)channelId: 作成されたチャネルの一意識別子success: チャネルが正常に作成されたかどうかskipped:(任意)既に存在するためスキップされたかどうかresumed:(任意)停止中のチャネルが再開されたかどうかerror:(任意)作成に失敗した場合のエラーメッセージ
errors: 失敗した URL のエラー配列
リクエスト例
curl -X POST https://snstracker.com/api/v1/channels \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://www.tiktok.com/@username"
]
}'4. チャネルの更新
既存のチャネルを更新して最新データを即時取得します。ステータスが「Pending」または「Tracked」のチャネルのみ更新できます。
Channel pricing note: Xiaohongshu channel tasks are priced separately from the default channel task price and currently cost 10 credits per successful request.
POST /api/v1/channels/refreshリクエスト
ヘッダー:
X-API-Key: あなたの API キー(必須)Content-Type:application/json
リクエストボディ:
{
"channelIds": ["channel_abc123xyz", "channel_def456uvw"]
}パラメータ:
channelIds(必須): 更新するチャネル ID の配列
レスポンス
成功レスポンス(200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"channelIds": ["channel_abc123xyz", "channel_def456uvw"],
"total": 2,
"message": "2件のチャネルを正常に更新しました"
}
}レスポンスフィールド:
success: 更新操作が成功したかどうかchannelIds: 更新されたチャネル ID の配列total: 更新されたチャネル数message: 成功メッセージ
リクエスト例
curl -X POST https://snstracker.com/api/v1/channels/refresh \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"channelIds": ["channel_abc123xyz"]
}'5. フィードの同期
scrapy サービスからフィードデータを直接同期します。このエンドポイントは最新のフィードデータを即時取得し、同期成功時にクレジットを消費します。同じチームの全メンバー、API キー、すべての同期エンドポイントは一つの同時実行上限を共有します。共有上限はスターターまたは有効な契約なしで 1、スタンダードで 5、プレミアムで 10 リクエストです。
⚠️ 重要: この同期エンドポイントは スタンドアロン であり、Web プラットフォームとは 連携しません。同期操作は以下のようになります:
- Web ダッシュボードにフィードレコードを 作成・更新しません
- フィード一覧やコレクションに 表示されません
- Webhook や通知を トリガーしません
- API レスポンスで取得データのみ を返します
このエンドポイントは API による単発のデータ取得を目的としています。Web プラットフォームに表示される永続的な監視フィードを作成するには、代わりに フィードの作成 エンドポイントを使用してください。
POST /api/v1/feeds/syncリクエスト
ヘッダー:
X-API-Key: あなたの API キー(必須)Content-Type:application/json
リクエストボディ:
{
"url": "https://www.tiktok.com/@user/video/1234567890"
}パラメータ:
url(必須): 同期するフィード URL。有効な空でない文字列である必要があります。
レスポンス
成功レスポンス(200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"url": "https://www.tiktok.com/@user/video/1234567890",
"feedInfo": {
"feed_id": "1234567890",
"platform": 1,
"platform_name": "tiktok",
"url": "https://www.tiktok.com/@user/video/1234567890",
"views": 1000000,
"likes": 200000,
"comments": 1000,
"shares": 2000,
"bookmarks": 200,
"engagement": 512000,
"description": "動画の説明",
"hashtags": ["tag1", "tag2"],
"publish_at": 1234567890
}
}
}レスポンスフィールド:
success: 同期操作が成功したかどうかurl: 同期したフィード URLfeedInfo: 指標、説明、ハッシュタグなどを含む完全なフィード情報
エラーレスポンス:
429 Too Many Requests: チームの同時実行上限に達しています。リクエストはキューに入りません。400 Bad Request: クレジット不足または無効な URL
リクエスト例
curl -X POST https://snstracker.com/api/v1/feeds/sync \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.tiktok.com/@user/video/1234567890"
}'6. チャネルの同期
scrapy サービスからチャネルデータを直接同期します。このエンドポイントは最新のチャネルデータを即時取得し、同期成功時にクレジットを消費します。同じチームの全メンバー、API キー、すべての同期エンドポイントは一つの同時実行上限を共有します。共有上限はスターターまたは有効な契約なしで 1、スタンダードで 5、プレミアムで 10 リクエストです。
Channel pricing note: Xiaohongshu channel tasks are priced separately from the default channel task price and currently cost 10 credits per successful request.
⚠️ 重要: この同期エンドポイントは スタンドアロン であり、Web プラットフォームとは 連携しません。同期操作は以下のようになります:
- Web ダッシュボードにチャネルレコードを 作成・更新しません
- チャネル一覧やコレクションに 表示されません
- Webhook や通知を トリガーしません
- API レスポンスで取得データのみ を返します
このエンドポイントは API による単発のデータ取得を目的としています。Web プラットフォームに表示される永続的な監視チャネルを作成するには、代わりに チャネルの作成 エンドポイントを使用してください。
POST /api/v1/channels/syncリクエスト
ヘッダー:
X-API-Key: あなたの API キー(必須)Content-Type:application/json
リクエストボディ:
{
"url": "https://www.tiktok.com/@username"
}パラメータ:
url(必須): 同期するチャネル URL。有効な空でない文字列である必要があります。
レスポンス
成功レスポンス(200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"url": "https://www.tiktok.com/@username",
"channelInfo": {
"id": "1234567890",
"platform": 1,
"platform_name": "tiktok",
"username": "username",
"nickname": "ユーザー名",
"description": "チャネルの説明",
"followers": 1000000,
"followings": 2000,
"likes": 200000000,
"total_count": 1000,
"track_count": 1000,
"status": 1
}
}
}レスポンスフィールド:
success: 同期操作が成功したかどうかurl: 同期したチャネル URLchannelInfo: 指標、説明などを含む完全なチャネル情報
エラーレスポンス:
429 Too Many Requests: チームの同時実行上限に達しています。リクエストはキューに入りません。400 Bad Request: クレジット不足または無効な URL
リクエスト例
curl -X POST https://snstracker.com/api/v1/channels/sync \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.tiktok.com/@username"
}'7. チャネル投稿の同期
チャネルの投稿を1ページ返します。Instagram と Reels は1回最大12件で、自動で次ページを取得しません。instagram は画像・動画・カルーセル投稿、reels は Reels 動画を返します。
POST /api/v1/channels/feeds/sync
X-API-Key: your-api-key
Content-Type: application/jsonRequest and pagination
{
"platform": "instagram",
"channel_name": "instagram"
}countは省略可能な正の整数で、このページで取得したい件数を指定します。既定値はありません。件数の上限はプラットフォームによって異なり、Instagram と Reels は1回につき最大12件を返します。実際の件数は少ない場合があります。省略時はプラットフォームの既定ページサイズを使用します。- 最初は
cursorを省略します。次ページは前のnext_cursorをそのまま渡し、platformとchannel_nameを維持します。最終ページはhas_more=false、next_cursor=nullです。
{
"platform": "instagram",
"channel_name": "instagram",
"cursor": "previous-next-cursor"
}正常に取得したページは、空のページも含めて1ページごとに10クレジットです。失敗したリクエストのみ無料です。開始時に10クレジット以上必要です。他の同期APIとチームの同時実行枠を共有し、ダッシュボード記録は作成しません。
Response example (placeholder cursor) — reels, lunacut.edit, count=1
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"platform": "reels",
"channel_name": "lunacut.edit",
"channel_url": "https://www.instagram.com/lunacut.edit/",
"requested_count": 1,
"returned_count": 1,
"has_more": true,
"next_cursor": "cursor-from-response",
"items": [
{
"feed_id": "4009169989985582972",
"platform": 5,
"platform_name": "reels",
"type": "video",
"url": "https://www.instagram.com/reel/Dejbt1JPz98/",
"author_username": "lunacut.edit",
"publish_at": 1792150387,
"duration": 70.077,
"view_count": 310475
}
]
}
}platform and channel_name are required. channel_name is the username, not the display name; leading @ is accepted and dots are preserved. requested_count is null when count is omitted; returned_count equals items.length. Unknown metrics/timestamps are null. Posts may lack timestamps and carousel details. items uses the existing feed fields, including video_url, image_urls and cover_url; the example shows only selected fields. publish_at is Unix seconds and duration is seconds. Upstream order is preserved, without a most-popular sorting option; deduplicate across pages by feed_id. Empty pages can still have a next cursor; a carousel counts as one post.
items の再生数(view_count)、いいね数(like_count)、保存数(bookmark_count)、コメント数(comment_count)などの指標は、プラットフォームとそのチャンネル一覧APIが提供するデータに依存します。すべての指標を取得できるとは限りません。取得できない指標は null で返され、0を意味するものではありません。
一覧にない指標を追加で調べるには、対象項目の url をリクエスト本文の url に指定して、POST /api/v1/feeds/sync を別途呼び出してください。詳細取得はそのAPIの規則に従って別途課金されます。結果はプラットフォームが提供するデータに依存するため、不足するすべての指標を取得できる保証はありません。
HTTP: 400 invalid input/cursor or insufficient initial credits; 401 invalid API key; 403 disabled team or inaccessible channel; 402 insufficient credits at settlement; 429 team concurrency limit (Retry-After: 1); 502 upstream/invalid page; 503 service unavailable; 504 timeout.
8. プロフィールの追加情報を取得
POST /api/v1/channels/about/syncInstagram と Reels のみ対応。入力は /api/v1/channels/sync と同じ必須の url です。Instagram は https://www.instagram.com/lunacut.edit/、Reels は https://www.instagram.com/lunacut.edit/reels/。platform、count、cursor は不要です。投稿 URL と他のプラットフォームは対象外です。
curl -X POST https://snstracker.com/api/v1/channels/about/sync \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{"url":"https://www.instagram.com/lunacut.edit/"}'成功したリクエストごとに 80 クレジットを消費します。追加項目が null でも課金され、失敗時は課金されません。残高は事前に 80 以上必要です。他の同期 API とチーム同時実行枠を共有します(Starter/有効な契約なし:1、Standard:5、Premium:10)。ダッシュボードへの保存や webhook 送信は行いません。
レスポンス例。項目の有無はアカウントの公開情報によります。
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"url": "https://www.instagram.com/lunacut.edit/",
"channelAbout": {
"platform": 6,
"platform_name": "instagram",
"username": "lunacut.edit",
"channel_url": "https://www.instagram.com/lunacut.edit/",
"country": "Brazil",
"country_visible": true,
"date_joined": "2020-05",
"date_joined_text": "May 2020"
}
}
}country:公開された国・地域(country_visible=true の場合のみ)。リアルタイムの IP 位置ではありません。country_visible:公開状態、不明なら null。date_joined:登録年月(YYYY-MM)、取得・解析できなければ null。date_joined_text:元の登録年月テキスト、なければ null。Bio、フォロワー数、過去のユーザー名は含みません。
400 / 401 / 402 / 403 / 429 (Retry-After: 1) / 502 / 503 / 504.
Webhook 連携
SNSTracker は Webhook をサポートしており、監視対象のコンテンツが設定したしきい値に達した際にリアルタイム通知を受け取れます。以下の通知を受け取るよう Webhook を設定できます。
- フィード更新: 再生数、エンゲージメント(いいね + コメント + シェア)がしきい値以上に増加したとき
- チャネル更新: フォロワー数、フォロー数、いいね数がしきい値以上に増加したとき
Webhook の設定
- コレクション設定で Webhook の送信先を設定
- コレクション設定で 通知を有効化
- 監視したい指標の しきい値を設定
Webhook の詳細な設定手順については、Webhook 設定ガイド を参照してください。
エラーレスポンス
すべてのエンドポイントは以下のエラーレスポンスを返す場合があります。
401 Unauthorized - API キー未指定
{
"code": -1,
"message": "X-API-Key header is required"
}401 Unauthorized - 無効な API キー
{
"code": -1,
"message": "Invalid API key"
}400 Bad Request - 無効な入力
{
"code": -1,
"message": "Invalid request: urls must be an array"
}400 Bad Request - URL が多すぎる(フィード作成)
{
"code": -1,
"message": "Maximum 200 URLs allowed per request"
}400 Bad Request - URL が多すぎる(チャネル作成)
{
"code": -1,
"message": "Maximum 200 URLs allowed per request"
}400 Bad Request - クレジット不足
{
"code": -1,
"message": "Insufficient credits. Required: 10, Available: 5"
}429 Too Many Requests - チームの同期同時実行数
{
"code": -1,
"message": "Maximum concurrent sync requests (1) reached for this team. Currently active: 1. Wait for a request to complete, or contact official support to increase the limit."
}403 Forbidden - 無効なコレクション
{
"code": -1,
"message": "Collection not found or does not belong to your team"
}404 Not Found
{
"code": -1,
"message": "No feeds found"
}または
{
"code": -1,
"message": "No channels found"
}使用例
Python 例 - フィード作成
import requests
url = "https://snstracker.com/api/v1/feeds"
headers = {
"X-API-Key": "your-api-key-here",
"Content-Type": "application/json"
}
data = {
"urls": [
"https://www.tiktok.com/@user/video/1234567890",
"https://www.instagram.com/p/ABC123/"
]
}
response = requests.post(url, json=data, headers=headers)
result = response.json()
if result["code"] == 0:
print(f"Successfully created {result['data']['success']} feeds")
for feed in result["data"]["results"]:
print(f" - {feed['url']}: {feed['feedId']}")
else:
print(f"Error: {result['message']}")JavaScript 例 - フィード更新
const response = await fetch('https://snstracker.com/api/v1/feeds/refresh', {
method: 'POST',
headers: {
'X-API-Key': 'your-api-key-here',
'Content-Type': 'application/json',
},
body: JSON.stringify({
feedIds: ['feed_abc123xyz', 'feed_def456uvw'],
}),
});
const result = await response.json();
if (result.code === 0) {
console.log(`Successfully refreshed ${result.data.total} feeds`);
result.data.feedIds.forEach((feedId) => {
console.log(` - ${feedId}`);
});
} else {
console.error(`Error: ${result.message}`);
}重要な注意事項
-
URL 検証: すべての URL は作成前に自動検証されます。無効な URL は拒否されます。
-
重複アイテム: 同じ URL のアイテムがコレクション内に既に存在する場合:
- アクティブならスキップされます(
skipped: trueが付与) - 停止中なら再開されます(
resumed: trueが付与)
- アクティブならスキップされます(
-
データ収集: 作成に成功すると、アイテムはデータ収集キューに入ります。データは作成後まもなく利用可能になります。
-
更新可能なステータス: ステータスが「Pending」または「Tracked」のアイテムのみ更新できます。他のステータスのアイテムは除外されます。
-
クレジット: リクエスト前に十分なクレジットがあることを確認してください。同期操作はデータ取得成功時に即時クレジットを消費します。 Xiaohongshu channel tasks are priced separately and currently cost 10 credits per successful request.
/api/v1/channels/feeds/sync: 正常に取得したページは、空のページも含めて1ページごとに10クレジットです。失敗したリクエストのみ無料です。開始時に10クレジット以上必要です。他の同期APIとチームの同時実行枠を共有し、ダッシュボード記録は作成しません。/api/v1/channels/about/sync: 成功したリクエストごとに 80 クレジットを消費します。追加項目がnullでも課金され、失敗時は課金されません。残高は事前に 80 以上必要です。他の同期 API とチーム同時実行枠を共有します(Starter/有効な契約なし:1、Standard:5、Premium:10)。ダッシュボードへの保存や webhook 送信は行いません。 -
チームの同期同時実行数 (
/api/v1/feeds/sync+/api/v1/channels/sync+/api/v1/channels/feeds/sync+/api/v1/channels/about/sync): 同じチームの全メンバー、API キー、すべての同期エンドポイントは一つの同時実行上限を共有します。共有上限はスターターまたは有効な契約なしで 1、スタンダードで 5、プレミアムで 10 リクエストです。 現在有効なプランに自動的に従います。公式サポートによるチーム個別設定がある場合は、その設定が優先されます。 上限の引き上げは公式サポートにお問い合わせください。 -
同期と作成の違い: 同期エンドポイント(
/api/v1/feeds/syncと/api/v1/channels/sync+/api/v1/channels/feeds/sync+/api/v1/channels/about/sync)は スタンドアロン であり、Web プラットフォームとは 連携しません。API レスポンスでデータを返すだけで、ダッシュボードにレコードを作成しません。Web プラットフォームに表示される永続的な監視アイテムを作成するには、代わりに作成エンドポイント(/api/v1/feedsと/api/v1/channels)を使用してください。 -
再試行: 429 の場合は実行中のリクエストの完了を待ち、
Retry-Afterに従って間隔を延ばしながら再試行してください。503 の場合は後で再試行してください。 -
対応プラットフォーム: TikTok、Instagram、YouTube、その他主要なソーシャルメディアプラットフォーム。
トラブルシューティング
問題: "X-API-Key header is required"
解決策: リクエストに X-API-Key ヘッダーを含めてください。
問題: "Invalid API key"
解決策: API キーが正しいか確認してください。Settings → API Keys から新しいキーを作成できます。
問題: "Maximum URLs allowed per request"
解決策: URL を複数のリクエストに分割してください。フィードは最大 200 件、チャネルは最大 5 件までです。
問題: "No collection found"
解決策: まずダッシュボードでコレクションを作成するか、既存のコレクション ID を指定してください。
問題: "Insufficient credits"
解決策: クレジットを追加購入するか、サブスクリプションプランを確認してください。
問題: "No refreshable items found"
解決策: ステータスが「Pending」または「Tracked」のアイテムのみ更新可能です。アイテムのステータスを確認してください。
問題: 一部の URL が検証に失敗する
解決策: レスポンスの errors 配列で具体的なエラーメッセージを確認してください。URL が対応プラットフォームのもので、公開アクセス可能であることを確認してください。