ホワイトラベルのSNS管理 代理店とSaaSのために
クライアントごとに、自社のロゴ、文言、テーマを入れた連携ページのリンクを送れます。 クライアントがTikTok、Instagram、YouTube、LinkedInを一度連携すれば、あとはAPI、n8n、Makeからあなたが代わりに投稿・予約投稿できます。
無料で始められ、クレジットカードは不要です。ホワイトラベルはProfessionalプランから含まれます。
import { UploadPost } from 'upload-post';
const api = new UploadPost('YOUR_API_KEY');
// クライアントごとに1プロフィール
const client = 'client-harbor';
await api.createUser(client);
// ブランド入りの連携リンク(有効期限48時間)
const { access_url } = await api.generateJwt(client, {
logoImage: 'https://youragency.com/logo.png',
connectTitle: 'アカウントを連携してください',
redirectUrl: 'https://youragency.com/done',
platforms: ['instagram', 'tiktok', 'linkedin']
});
// access_url をクライアントに送る 実際のスクリーンショット
クライアントに表示される画面
クライアントが実際に開く連携ページを、サンプルのブランドで表示したものです。Northwind Studioは架空の代理店、「Harbor Demo Cafe」は架空のクライアントですが、ページ、レイアウト、各オプションは本物です。
platformsで6つに絞ったSNS一覧。
connect_theme: "dark" を指定した同じページ。テーマを固定するとライト/ダークの切り替えが消えるので、どのクライアントにも指定したテーマで表示されます。
ui_labels で文言を書き換えた例。見出し上のラベル、セクション見出し、プライバシーの説明文、すべての連携ボタンが代理店の指定どおりになっています。
platforms を指定しないと、クライアントにはすべてのSNSが表示され、利用の少ないものは「Show 9 more networks」の中に入ります。撮影した日はRedditが利用不可と表示されていました。
そのページでクライアントができること
- TikTok、Instagram、YouTube、LinkedInなどOAuth対応のSNSを、各SNS自身のログイン画面で連携します。パスワードがあなたやUpload-Postに渡ることはありません。Bluesky、Telegram、Discordなど一部のSNSは、代わりにアプリパスワード、ボットトークン、Webhookを使います。
- 投稿先にするFacebookページ、LinkedInの企業ページ、Googleビジネスプロフィールのビジネス拠点を選びます。
- アクセスの期限が切れたアカウントを再連携したり、いつでも連携を解除したりできます。
- カレンダーを表示にしていれば、予約投稿のカレンダーを確認できます。閲覧専用オプションをオンにすると、できるのはそれだけです。
- あなたが文言を決めたボタンで、あなたのサイトに戻ります。
リンクは1つのプロフィールに紐づいています。クライアントが見たり変更したりできるのは自分のアカウントだけで、ほかのクライアントやあなたのAPIキーに触れることはありません。
代理店での使い方
新しいクライアントから最初の予約投稿まで5ステップです。どのステップもダッシュボードとAPIの両方でできます。
- 1
クライアントごとにプロフィールを作る
ダッシュボードのManage Usersでプロフィールを追加するか、
client-harborのようなユーザー名を付けてPOST /api/uploadposts/usersを呼び出します。1つのプロフィールにはSNSごとに1アカウントを連携できます。 - 2
ブランド入りの連携リンクを発行する
プロフィールの横にあるShareをクリックし、ロゴ、タイトル、説明文、言語、リダイレクトURL、ボタンの文言、表示するSNSを入力します。同じ項目を
POST /api/uploadposts/users/generate-jwtに送ってもかまいません。48時間有効なaccess_urlが返ってきます。 - 3
クライアントに送る
メール、チャット、または自社のオンボーディングの流れの中で送ります。クライアントにUpload-Postのアカウントは不要で、あなたのダッシュボードが見えることもありません。
- 4
クライアントがアカウントを連携する
TikTok、Instagram、YouTube、LinkedInにログインしてアクセスを許可します。トークンは暗号化して保存され、更新も自動で行われます。Webhookを設定しておけば、連携した瞬間に
social_account_connectedイベントが届きます。
ブランディング項目の一覧
すべて generate-jwt の呼び出しの項目で、クライアントのプロフィールに保存されます。右端の列は、ダッシュボードからも設定できるかどうかを示しています。
| 項目 | パラメーター | 内容 | 例 | ダッシュボード |
|---|---|---|---|---|
| ロゴ | logo_image | ページ上部に自社のロゴを表示します。公開されている http(s) の画像URLなら何でも使えます。 | "https://youragency.com/logo.png" | 可 |
| ページタイトル | connect_title | メインの見出しを置き換えます。初期状態では「Connect your social accounts」です。 | "Connect your accounts to Northwind Studio" | 可 |
| 説明文 | connect_description | 見出しの下にある1行の説明を置き換えます。 | "Link the channels we will manage for you." | 可 |
| 表示するSNS | platforms | 指定したSNSだけが表示されます。省略するとすべてのSNSが表示されます。 | ["instagram", "tiktok", "linkedin"] | 可 |
| リダイレクトURL | redirect_url | 連携が終わったクライアントが「戻る」ボタンを押したときの移動先です。 | "https://youragency.com/onboarding/done" | 可 |
| 戻るボタンの文言 | redirect_button_text | その「戻る」ボタンのラベルです。 | "Back to Northwind Studio" | 可 |
| 言語 | language | 英語、スペイン語、ドイツ語、フランス語、ポルトガル語、ポーランド語、トルコ語のいずれかに固定します。指定しない場合はブラウザの言語に従い、該当がなければ英語になります。 | "es" | 可 |
| ページ内の任意のテキスト | ui_labels | ボタン、セクション見出し、プライバシーの説明文など、ページの文言をキー単位で書き換えます。最大100キー、各300文字まで。 | {"connect.card.connect": "Link account"} | APIのみ |
| テーマ | connect_theme | ライトまたはダークに固定し、テーマ切り替えを非表示にします。"auto" にすると選択を閲覧者に戻します。 | "dark" | APIのみ |
| カレンダータブ | show_calendar | そのプロフィールの予約投稿を表示するカレンダータブの表示・非表示を切り替えます。初期状態は表示です。 | false | 可 |
| 閲覧専用カレンダー | readonly_calendar | クライアントはカレンダーを見ることしかできません。投稿の編集・削除や、アカウントの連携・解除はできなくなります。 | true | 可 |
全項目を1回のリクエストで
curl -X POST https://api.upload-post.com/api/uploadposts/users/generate-jwt \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"username": "client-harbor",
"logo_image": "https://youragency.com/logo.png",
"connect_title": "Connect your accounts to Northwind Studio",
"connect_description": "Link the channels we will manage for you.",
"platforms": ["instagram", "tiktok", "linkedin"],
"redirect_url": "https://youragency.com/onboarding/done",
"redirect_button_text": "Back to Northwind Studio",
"language": "en",
"connect_theme": "light",
"ui_labels": { "connect.card.connect": "Link account" },
"show_calendar": false
}' 知っておきたいこと
- リンクを発行するたびに、ブランディングをすべて送ってください。ロゴ、タイトル、説明文、ボタンの文言、リダイレクトURL、表示するSNS、言語は、省略するとプロフィールから消えます。
-
ui_labels、connect_theme、2つのカレンダー設定は、送ったときだけ変更されます。ラベルを初期状態に戻すにはnullまたは{}を送ります。 - ラベルは、ページがそのとき表示している言語のテキストを置き換えます。ラベルが英語でクライアントのブラウザがフランス語なら、それ以外の部分はフランス語のままなので、
languageも合わせて指定してください。 - ラベルのキーとパラメーターの詳細はUser Profiles APIのドキュメントにあります。
ホワイトラベルにならない部分
クライアントから指摘される前に、ここで確認しておいてください。以下の部分には、Upload-Postまたは各SNSの表示が残ります。
URL
ホスト型のページは app.upload-post.com/connect にあります。独自ドメインやCNAMEの設定はありません。自社ドメインが必要なら、Connect APIで独自のページを作ってください。その場合もOAuthコールバックで一瞬だけ app.upload-post.com を経由します。
各SNSの同意画面
クライアントがログインすると、TikTok、Meta、Google、LinkedInなどはそれぞれに登録されたアプリ、つまり審査済みのUpload-Postのアプリで自社の画面を表示します。各SNSのアプリ審査を受けずに済むのもそのためです。
プライバシーの説明欄
ページには「How your data is used」という短い説明が常に表示され、Upload-Postのプライバシーポリシーと [email protected] へのリンクが入っています。初期状態では、Upload-Postの運営会社であるTONVI TECH SLがデータ処理者として記載されます。文言は ui_labels で書き換えられますが、説明欄とリンク自体は残ります。
色、タブのタイトル、ダッシュボード
選べるのはライトかダークかで、ブランドカラーは指定できません。ボタンはUpload-Postのインディゴのままです。ブラウザのタブのタイトルとアイコンもUpload-Postのものです。チームがログインするダッシュボードもUpload-Postそのもので、ブランドを差し替えたアプリではありません。
連携を自社で開発しない理由
各SNSと直接連携するには、MetaやTikTokのアプリ審査、トークン更新の処理、APIの破壊的変更への対応を、SNSの数だけ繰り返すことになります。 APIを1つにすれば、すべてのSNSを1つのエンドポイントで扱え、その上に連携ページも付いてきます。
代理店
クライアントごとに1プロフィール。連携リンクには自社ブランド、投稿と予約は1か所から
SaaSプラットフォーム
SNSごとに連携を開発しなくても、自社製品にSNS投稿機能を追加できます
コンテンツ制作ツール
ユーザーが作ったものを、そのまま本人のSNSアカウントに投稿できます
裏側のAPI呼び出し
SaaSや代理店向けツールに組み込む開発者向けです。OAuthフローの実装も、各SNSの認証情報の管理も不要です。
クライアントまたはユーザーごとにプロフィールを作成
プロフィールは、クライアント1社(またはアプリのユーザー1人)のSNSアカウントをまとめる入れ物です。ユーザー名に自社の内部IDを使えば、対応付けが簡単になります。
curl -X POST https://api.upload-post.com/api/uploadposts/users \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"username": "your-internal-user-id-123"}' ブランド入りの連携URLを発行
ブランディングはここで指定します。ロゴ、タイトル、リダイレクトURL、表示するSNS、そのほか上の表にある項目です。レスポンスには48時間有効な access_url が含まれます。
curl -X POST https://api.upload-post.com/api/uploadposts/users/generate-jwt \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"username": "your-internal-user-id-123",
"redirect_url": "https://yourapp.com/social-connected",
"logo_image": "https://yourapp.com/logo.png",
"platforms": ["tiktok", "instagram", "youtube"]
}' クライアントがアカウントを連携
クライアントまたはユーザーを access_url に送ります。TikTok、Instagram、YouTubeなどOAuth対応のSNSでは各SNSで直接認証するため、Upload-Postがパスワードを見ることはなく、発行されたトークンは暗号化して保存されます。
Upload-Postが代わりに処理すること
OAuth 2.0フロー
トークンの更新
暗号化して保存
クライアントの代わりに投稿・予約投稿
どのアップロードリクエストにも、プロフィールのユーザー名を user として含めます。今すぐではなく後で公開するなら scheduled_date を加えます。
curl -X POST https://api.upload-post.com/api/upload \
-H "Authorization: ApiKey YOUR_API_KEY" \
-F "user=your-internal-user-id-123" \
-F "video=@/path/to/video.mp4" \
-F "title=秋の新メニュー" \
-F "platform[]=tiktok" \
-F "platform[]=instagram" \
-F "scheduled_date=2026-10-02T09:00:00Z" APIキーは1つ、プロフィールはクライアントごとに1つ
すべてのクライアントを1つのアカウントと1つのAPIキーで管理し、それぞれが自分のSNSアカウントを持つ専用のプロフィールに入ります。
プロフィールの仕組み
各プロフィールにはSNSごとに1アカウントを連携します。プランで決まるのはプロフィールの数で、SNSアカウント数の上限ではありません。Professionalなら、TikTok 25アカウント、Instagram 25アカウント、LinkedIn 25アカウントを同時に連携できます。
- 認証情報は分離:各クライアントのSNSトークンはそのプロフィールだけのものです
- クライアントごとのWebhook:連携やアップロードのイベント用に、プロフィールごとに別のURLを設定できます
- 請求は1本:1つのサブスクリプションで全クライアントをカバーします
構成例
| プラン | 含まれるプロフィール数 | 月払い | 年払い |
|---|---|---|---|
| Professional | 25 | $50/月 | $33/月(年額$400) |
| Advanced | 75 | $147/月 | $118/月(年額$1,411) |
| Business | 225(追加プロフィールは1つにつき$1/月) | $438/月 | $350/月(年額$4,205) |
2026年9月時点の米ドル価格です。ユーロ価格と、Professional・Advanced向けの追加プロフィールパックは料金セクションに掲載しており、常にそちらが最新の情報です。
ホワイトラベルのSNS連携を使っているのは
SaaSプラットフォーム
コンテンツ管理システム、マーケティングオートメーション、業務ソフトウェア。
マーケティング代理店
デジタルマーケティング代理店やSNS運用代行会社。
コンテンツプラットフォーム
ブログサービス、動画ホスティングサイト、コンテンツ制作ツール。
教育プラットフォーム
学習管理システムや教育コンテンツのプラットフォーム。
ECプラットフォーム
オンラインマーケットプレイスやECソリューション。
動画プラットフォーム
動画ホスティングや配信サービス。
技術仕様とセキュリティ
対応プラットフォーム
ほかにGoogle Business、Slack、Mastodon、WordPressなど11のプラットフォームに対応しています。全22プラットフォームを見る
セキュリティ
SNSのトークンは保存時に暗号化されます。
OAuth対応のSNSでは、クライアントは各SNS自身の画面でログインします。パスワードがあなたやUpload-Postを通ることはありません。
各連携リンクで開けるのは1つのプロフィールだけで、48時間で期限が切れます。
ホワイトラベルSNS管理のよくある質問
代理店やSaaSのチームが、最初のブランド入り連携リンクを送る前によく聞く質問です
クライアントにUpload-Postのアカウントは必要ですか?
いいえ、必要ありません。連携リンクにはそのクライアントのプロフィール専用のトークンが含まれています。クライアントはリンクを開き、各SNSにログインすれば完了です。リンクの有効期限は48時間で、切れたら新しいリンクを発行します。
連携ページを自社ドメインで公開できますか?
ホスト型のページではできません。ページは常に app.upload-post.com/connect にあり、独自ドメインには対応していません。URLにこだわる場合は、Connect API を使って自社サイト上にページを作れます。その場合でも、各SNSに登録されているOAuthコールバックが app.upload-post.com のため、クライアントは一瞬だけそこを経由します。
ホワイトラベルはどのプランで使えますか?
Professional、Advanced、Businessです。FreeとBasicには含まれません。プロフィール数はProfessionalが25、Advancedが75、Businessが225で、Businessでは追加プロフィール1つにつき月額1ドルかかります。営業との商談は不要で、料金ページからプランを選ぶだけです。
1つのプロフィールにクライアントのアカウントをいくつ入れられますか?
1つのプロフィールにはSNSごとに1アカウントを連携できます。つまり、Instagram、TikTok、LinkedIn、YouTubeを連携したクライアント1社が1プロフィールです。25プロフィールなら各SNSで最大25アカウントという意味で、合計25アカウントではありません。Instagramアカウントを2つ持つクライアントには2つのプロフィールが必要です。
リンクを作るたびにブランディングを送る必要がありますか?
はい。ロゴ、タイトル、説明文、ボタンの文言、リダイレクトURL、表示するSNS、言語については必要です。generate-jwt を呼ぶたびに送った内容がそのまま保存されるため、省略した項目はそのプロフィールから消えます。ui_labels、connect_theme、show_calendar、readonly_calendar は例外で、送ったときだけ変更されます。
クライアントは予約済みの投稿を確認できますか?
はい。カレンダータブは初期状態で表示され、そのプロフィールの予約投稿を確認できます。readonly_calendar をオンにすると、リンクは閲覧専用のコンテンツカレンダーになり、クライアントは見るだけで、編集、削除、連携の変更はできません。同じトークンで /connect/calendar に送れば、カレンダーを直接開けます。
連携ページはどの言語に対応していますか?
英語、スペイン語、ドイツ語、フランス語、ポルトガル語、ポーランド語、トルコ語です。日本語には対応していません。プロフィールごとに language パラメーターで言語を固定するか、ブラウザの言語に任せることができます。それ以外の文言は、ui_labels を使ってテキストごとに自分で書き換えられます。
クライアントがアカウントを連携したことはどうやって分かりますか?
Webhookで分かります。Upload-Postは social_account_connected、social_account_disconnected、social_account_reauth_required、upload_completed のイベントを送信します。プロフィールごとに別のWebhook URLを設定できるので、クライアントごとに自社システムの別のエンドポイントへ通知させることもできます。
クライアントごとに分析データを取得できますか?
はい。分析エンドポイントはプロフィールのユーザー名を受け取るので、クライアント1社ずつの数値を取得し、それをもとに独自のレポートを作れます。
SDKはありますか?
Python(pip install upload-post)とJavaScript/Node(npm install upload-post)の公式SDKがあります。それ以外はAPIキーで使うシンプルなREST APIなので、HTTPリクエストを送れる言語やノーコードツールなら何でも使えます。
設定にはどのくらい時間がかかりますか?
コードなしの場合は、Manage Usersでプロフィールを作り、Shareをクリックし、ブランディングを入力してリンクを送るだけです。APIの場合は、プロフィールを作る呼び出しとリンクを発行する呼び出しの2回に、投稿に必要なアップロードの呼び出しが加わるだけです。
どのようなサポートがありますか?
全エンドポイントのコードサンプル付きドキュメントと、[email protected] でのメールサポートがあります。AdvancedとBusinessには優先サポートが含まれます。
詳しくは User Profiles API、 Connect API、 Webhooks、 SDKs をご覧ください。