メインコンテンツへスキップ

API Keys

Tiro APIは認証にAPI keyを使用します。すべてのAPIリクエストには、Bearer token形式を用いて、Authorizationヘッダーに有効なAPI keyを含める必要があります。 各キーは 1 つのワークスペースに属します。キーはそのワークスペースのリソース(ノート、トランスクリプト、サマリー、フォルダ)にのみ到達し、その外には届きません。先にワークスペースを選んでから、キーを作成してください。

キーの種類と権限

Tiro API keyは、リクエストの主体によって2種類に分かれます。
キーの種類識別方法できること
ユーザーキーキーが特定のユーザーidentityに紐づきます。読み取りと書き込みの両方に使えます。ノートドキュメントの作成や共有リンクの変更など、ワークスペースのデータを変更する操作にはユーザーキーが必要です。
ワークスペースシステムキーキーがユーザーではなく、ワークスペースのコンテナに紐づきます。ワークスペース全体に共有されたリソースを読み取る用途です。書き込み操作には使えません。
ワークスペースシステムキーでフォルダを読む場合、ワークスペースの全メンバーに共有されたフォルダだけが返されます。個人フォルダ、特定ユーザーにだけ共有されたフォルダ、または作成・更新・削除の操作が必要な場合は、ユーザーキーを作成して使用してください。
ワークスペースシステムキーがまだワークスペースに紐づいていない場合、認証は401 Unauthorizedで失敗することがあります。キー形式が正しいのに401が続く場合は、キーが接続されているワークスペースと作成画面を先に確認してください。
レガシー個人キーは間もなく利用できなくなります。 ワークスペース導入より前に作成した個人 API キーは、2026年6月30日に動作を停止します。その前にワークスペースキーを作成して差し替えてください — 下記のレガシー個人キーをご覧ください。

API keyを取得する

API keyはTiro Platformダッシュボードから取得できます。
1

Sign in

platform.tiro.ooo/dashboard/api-keysにアクセスします。
2

Pick a workspace

サイドバーのワークスペース切り替えで、キーがアクセスするデータのワークスペースを選びます。キーはこのワークスペースのみに限定されます。
3

Create a key

Create New API Key をクリックし、名前を付けてから、ドットを含むfull keyをコピーします — abc123.xR7mK9pL2qW4...
4

Store it

環境変数として保存します。secretは一度だけ表示され、ダイアログを閉じると復元できません。
API keyは安全に保管し、クライアントサイドのコードに公開しないでください。API keyは サーバーサイドのアプリケーションでのみ使用してください。

API key形式

Tiro APIのkeyは次の形式に従います。
{id}.{secret}
例: abc123.xR7mK9pL2qW4...
PartExampleDescription
Key ID ({id})abc123Platformダッシュボードに表示されます。どのkeyがリクエストを行っているかを識別するために使用します。
Secret ({secret})xR7mK9pL2qW4...作成時に一度だけ表示されます。サーバーはhashのみを保存するため、復元できません。
Full API Keyabc123.xR7mK9pL2qW4...ドットを含む文字列全体です。これをBearer tokenとして使用します。
よくある間違い: Key ID(abc123)だけをBearer tokenとして使用しないでください。full keyabc123.xR7mK9pL2qW4...)、つまりkey作成時に表示された完全な文字列を使用する必要があります。

認証付きリクエストを行う

すべてのリクエストのAuthorizationヘッダーにAPI keyを含めます。
curl -H "Authorization: Bearer $TIRO_API_KEY" \
     -H "Content-Type: application/json" \
     https://api.tiro.ooo/v1/external/notes
const response = await fetch("https://api.tiro.ooo/v1/external/notes", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.TIRO_API_KEY}`,
    "Content-Type": "application/json",
  },
});

const notes = await response.json();
import os
import requests

headers = {
    'Authorization': f'Bearer {os.getenv("TIRO_API_KEY")}',
    'Content-Type': 'application/json'
}

response = requests.get('https://api.tiro.ooo/v1/external/notes', headers=headers)
notes = response.json()
import (
    "fmt"
    "net/http"
    "os"
)

func makeAuthenticatedRequest() (*http.Response, error) {
    client := &http.Client{}
    req, err := http.NewRequest("GET", "https://api.tiro.ooo/v1/external/notes", nil)
    if err != nil {
        return nil, err
    }
    
    apiKey := os.Getenv("TIRO_API_KEY")
    req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", apiKey))
    req.Header.Set("Content-Type", "application/json")
    
    return client.Do(req)
}
@Service
class TiroApiService {
    
    @Value("\${tiro.api.key}")
    private lateinit var apiKey: String
    
    private val restTemplate = RestTemplate()
    
    fun getNotes(): ResponseEntity<String> {
        val headers = HttpHeaders()
        headers.set("Authorization", "Bearer $apiKey")
        headers.contentType = MediaType.APPLICATION_JSON
        
        val entity = HttpEntity<String>(headers)
        
        return restTemplate.exchange(
            "https://api.tiro.ooo/v1/external/notes",
            HttpMethod.GET,
            entity,
            String::class.java
        )
    }
}

認証エラー

認証に失敗すると、401 Unauthorizedレスポンスが返されます。主な原因は次のとおりです。
  • Authorizationヘッダーがない
  • keyの形式が不正({id}.{secret}である必要があります)
  • 不明なkey id
  • 無効、期限切れ、または削除されたkey
{
  "error": {
    "code": "invalid_api_key",
    "message": "The API key provided is invalid",
    "type": "authentication_error"
  }
}

レガシー個人キー(非推奨)

ワークスペース導入より前は、個人API キーはワークスペースではなくアカウントに紐づいていました。これらの個人キーは非推奨です。チームキーは現在ワークスペースキーとして渡されます — 各チームが 1 つのワークスペースに対応します。ワークスペースキーが個人キーとチームキーの両方を置き換えます。
レガシー個人キーは2026年6月30日に動作を停止します。それ以降、レガシー個人キーで送ったリクエストは401 Unauthorizedを返します。ダウンタイムを避けるため、その前に移行してください。
レガシー個人キーワークスペースキー
範囲アカウント全体ワークスペース 1 つ
新規発行無効ダッシュボード → ワークスペースを選択 → Create New API Key
既存のキー2026年6月30日まで表示と失効のみフルライフサイクル
形式{id}.{secret}{id}.{secret} — 変更なし
形式は同一なので、移行は 1 行の差し替えで済みます — コードの書き換えは不要です。

3 ステップで移行する

1

Create a workspace key

ダッシュボードで、連携が使用するノートを含むワークスペースを選択し、キーを作成します。
2

Swap the secret

TIRO_API_KEY環境変数の値を新しいキーに置き換えます。ほかのコード変更は必要ありません。
3

Revoke the legacy key

新しいキーでトラフィックが流れることを確認したら、ダッシュボードのLegacy personal keysセクションからレガシーキーを削除します。
レガシーキーはアカウント上のすべてのノートに到達しましたが、ワークスペースキーは 1 つのワークスペースにのみ到達します。データが複数のワークスペースにまたがる場合は、ワークスペースごとにキーを 1 つずつ作成してください。

セキュリティのベストプラクティス

環境変数

環境変数を使用して、API keyを安全に保管します。
# .env file (never commit this!)
TIRO_API_KEY=abc123.XYZ...
// Load from environment
const apiKey = process.env.TIRO_API_KEY;
if (!apiKey) {
  throw new Error('TIRO_API_KEY environment variable is required');
}
import os

# Load from environment with validation
api_key = os.getenv('TIRO_API_KEY')
if not api_key:
    raise ValueError('TIRO_API_KEY environment variable is required')
import (
    "fmt"
    "os"
)

func getAPIKey() (string, error) {
    apiKey := os.Getenv("TIRO_API_KEY")
    if apiKey == "" {
        return "", fmt.Errorf("TIRO_API_KEY environment variable is required")
    }
    return apiKey, nil
}
# application.properties
tiro.api.key=${TIRO_API_KEY}

# Or application.yml
tiro:
  api:
    key: ${TIRO_API_KEY}

その他のセキュリティガイドライン

  • keyを定期的にローテーションする: 使用していないkeyを削除し、新しいkeyを生成します
  • 環境ごとにkeyを分ける: 開発環境と本番環境で異なるkeyを使用します
  • 利用状況を監視する: API keyの利用状況を追跡し、異常があればローテーションします
  • API keyを絶対にログに記録しない: keyがアプリケーションのログに表示されないようにします
  • HTTPSのみを使用する: 常に安全な接続でリクエストを行います