toui.io API
短縮リンクの作成、URLメタデータの取得、クリック統計の読み出しを、自分のコードから行えます。HTTPS上の小さな REST API に加えて、公式の toui-js SDK(JavaScript と TypeScript に対応)を用意しています。
入口は二つあります。自分のコードから toui を呼びたいなら下のクイックスタートへ、AIツール(Claude、ChatGPT、Cursor)の中で使いたいなら MCPサーバーの節へ。
クイックスタート
SDKをインストールすれば、1分もかからずに最初のリンクを短縮できます。生のHTTPで扱いたい場合は curl のタブへ——どのエンドポイントも、どの言語からでも呼び出せます。
npm install toui-js curl -X POST https://toui.io/api/v1/shorten \
-H "Authorization: Bearer toui_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/a-very-long-link"}' 先にAPIキーが必要です——認証をご覧ください。
AIツールの中で toui を使う
toui は https://mcp.toui.io でリモート MCP サーバーを提供しています。Claude、ChatGPT、Cursor、Cline、その他 MCP に対応したエージェントの中で、会話を離れることなく、リンクの短縮、チャネルのタグ付け、キャンペーンへの分類、クリック成果の確認ができます。APIキーは不要で、OAuthで接続します。
Cursor — ワンクリック
または ~/.cursor/mcp.json に手動で追加します:
{
"mcpServers": {
"toui": { "url": "https://mcp.toui.io" }
}
} Cline、Claude、ChatGPT などのエージェントでは、https://mcp.toui.io をカスタムMCP/コネクタとして貼り付けます。設定ガイドもあわせてご覧ください。
toui は MCP サーバーレジストリ Smithery にも登録されています。
認証
すべてのリクエストは Bearer トークンで認証します。
ダッシュボード → API
でキーを作成し、Authorization ヘッダーに入れてください:
Authorization: Bearer toui_YOUR_API_KEY キーが表示されるのは作成時の一度きりです。パスワードと同じように扱い、フロントエンドのコードには決して埋め込まないでください。すべてのエンドポイントのベースURLは https://toui.io/api/v1 です。
短縮リンクの作成
POST /api/v1/shorten
短縮リンクを1本作成します。必須は url だけです。custom_code は有料プラン限定で、Open Graph の各項目(og_title、og_description、og_image_url)はどのプランでも利用でき、SNSでの共有プレビューを制御できます。
curl -X POST https://toui.io/api/v1/shorten \
-H "Authorization: Bearer toui_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/long",
"custom_code": "promo",
"title": "Spring sale",
"og_title": "Spring sale",
"og_description": "Up to 50% off",
"og_image_url": "https://example.com/banner.png"
}' 有料プランでは、1本のリンクを訪問者のデバイスと地域で振り分けられます。ios、android(リンク先URL)と geo(ISO 3166-1 alpha-2 の国コードとURLの対応表)を追加してください。訪問者は上から順に照合され——iOS → Android → geo → 既定の url——iPhoneのユーザーは App Store へ、Android のユーザーは Google Play へ、各国の訪問者はそれぞれのページへ届きます。
デバイスと地域による振り分け · Pro+
curl -X POST https://toui.io/api/v1/shorten \
-H "Authorization: Bearer toui_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/download",
"ios": "https://apps.apple.com/app/id000000000",
"android": "https://play.google.com/store/apps/details?id=com.example",
"geo": { "US": "https://example.com/us", "JP": "https://example.com/jp" }
}' レスポンス · 201 Created
{
"short_url": "https://toui.io/aBcD3f",
"short_code": "aBcD3f",
"target_url": "https://example.com/long",
"created_at": "2026-06-04T08:00:00.000Z"
} GUIツールとの連携
デスクトップやスマートフォンのアプリの多く(Shortshare、Apple のショートカット、Raycast など)は、「custom service」の入力欄や HTTP アクションから任意の短縮URLサービスを呼び出せます。項目の対応は次のとおりです:
| 項目 | 値 |
|---|---|
| Endpoint | https://toui.io/api/v1/shorten |
| URLパラメータ | POST ボディのパラメータ url(JSON) |
| 認証パラメータ | ヘッダー——名前 Authorization、値 Bearer toui_YOUR_API_KEY |
| レスポンスの項目 | short_url(JSON) |
短縮リンクの取得
GET /api/v1/urls/:code
自分が保有する短縮コードのメタデータと累計クリック数を返します。そのコードが自分のチームのものでない場合は 404 を返します。
curl https://toui.io/api/v1/urls/aBcD3f \
-H "Authorization: Bearer toui_YOUR_API_KEY" レスポンス · 200 OK
{
"short_code": "aBcD3f",
"target_url": "https://example.com/long",
"title": "Spring sale",
"click_count": 42,
"created_at": "2026-06-04T08:00:00.000Z",
"is_active": true,
"og_title": null,
"og_description": null,
"og_image_url": null
} 統計の取得
GET /api/v1/urls/:code/stats?days=30
日別のクリック数と国別の内訳を返します。days の範囲は、プランごとのデータ保持期間が上限になります(Free 30 日、Pro 90 日、Pro+ 180 日、Business 365 日)。参照元とデバイスの内訳も同じレスポンスに含まれ、無料プランは各項目の上位3件、有料プラン(詳細分析つき)はより長い一覧を返します。
curl "https://toui.io/api/v1/urls/aBcD3f/stats?days=30" \
-H "Authorization: Bearer toui_YOUR_API_KEY" レスポンス · 200 OK
{
"short_code": "aBcD3f",
"target_url": "https://example.com/long",
"total_clicks": 128,
"daily": [
{ "date": "2026-06-01", "clicks": 5, "unique_visitors": 4 }
],
"countries": [
{ "country": "TW", "clicks": 80 }
]
} SDK (toui-js)
toui-js は公式の TypeScript SDK です——外部依存はなく、標準の fetch を使い、
Node 18+、Bun、Deno、Cloudflare Workers、そしてブラウザで動きます。
ソースは GitHub にあり、
npm で公開しています。
npm install toui-js new Toui({ apiKey, baseUrl?, fetch? }) でクライアントを作り、shorten()、get()、stats() を呼び出します。エラーは HTTP の status を持つ TouiError として投げられます:
import { Toui, TouiError } from 'toui-js';
try {
await toui.shorten({ url: 'not-a-url' });
} catch (err) {
if (err instanceof TouiError) {
console.error(err.status, err.message); // 400 …
}
} エラー
エラーは error メッセージを含むJSONと、標準的なHTTPステータスコードで返します。レート制限のレスポンスには、制限の内容を示す項目が追加されます。
| ステータス | 意味 |
|---|---|
400 | リクエストが不正——url が欠けているか無効、または無料プランで custom_code を指定した |
401 | APIキーが欠けている、形式が正しくない、または失効している |
403 | アカウントが無効化されている——キーの所属アカウントが停止されている |
404 | その短縮コードは自分のチームのものではない |
429 | レート制限またはクォータを超過(レート制限の節を参照) |
レート制限
制限は2層です。1分あたりのバースト制限と、月次・日次のクォータです。すべてのレスポンスに X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset ヘッダーが付きます。新しい無料アカウントは、最初の48時間だけ制限が強くかかります。
| プラン | バースト (req/min) | 月次クォータ | 日次クォータ |
|---|---|---|---|
| Free | 60 | 5,000 | 500 |
| Pro | 200 | 500,000 | Unlimited |
| Pro+ | 200 | 1,000,000 | Unlimited |
| Business | 600 | 2,000,000 | Unlimited |
バーストによる 429 のレスポンスには retry_after(秒)が、クォータによるものには resets_at(ISO形式のタイムスタンプ)が含まれます。