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ダッシュボード から取得できます。
Pick a workspace
サイドバーのワークスペース切り替えで、キーがアクセスするデータのワークスペースを選びます。キーはこのワークスペースのみに限定されます。
Create a key
Create New API Key をクリックし、名前を付けてから、ドットを含むfull key をコピーします — abc123.xR7mK9pL2qW4...。
Store it
環境変数として保存します。secretは一度だけ表示され、ダイアログを閉じると復元できません。
API keyは安全に保管し、クライアントサイドのコードに公開しないでください。API keyは
サーバーサイドのアプリケーションでのみ使用してください。
API key形式
Tiro APIのkeyは次の形式に従います。
例: abc123.xR7mK9pL2qW4...
Part Example Description Key ID ({id})abc123Platformダッシュボードに表示されます。どのkeyがリクエストを行っているかを識別するために使用します。 Secret ({secret})xR7mK9pL2qW4...作成時に一度だけ表示されます。サーバーはhashのみを保存するため、復元できません。 Full API Key abc123.xR7mK9pL2qW4...ドットを含む文字列全体 です。これをBearer tokenとして使用します。
よくある間違い: Key ID(abc123)だけをBearer tokenとして使用しないでください。full key (abc123.xR7mK9pL2qW4...)、つまりkey作成時に表示された完全な文字列を使用する必要があります。
認証付きリクエストを行う
すべてのリクエストのAuthorizationヘッダーにAPI keyを含めます。
cURL
Node.js
Python
Go
Kotlin + Spring
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 ステップで移行する
Create a workspace key
ダッシュボード で、連携が使用するノートを含むワークスペースを選択し、キーを作成します。
Swap the secret
TIRO_API_KEY環境変数の値を新しいキーに置き換えます。ほかのコード変更は必要ありません。
Revoke the legacy key
新しいキーでトラフィックが流れることを確認したら、ダッシュボードのLegacy personal keys セクションからレガシーキーを削除します。
レガシーキーはアカウント上のすべてのノートに到達しましたが、ワークスペースキーは 1 つのワークスペースにのみ到達します。データが複数のワークスペースにまたがる場合は、ワークスペースごとにキーを 1 つずつ作成してください。
セキュリティのベストプラクティス
環境変数
環境変数を使用して、API keyを安全に保管します。
.env
Node.js
Python
Go
Kotlin + Spring
# .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のみを使用する : 常に安全な接続でリクエストを行います