KID連携サービスのAPIをトークン認証で安全に利用するための手引きです。
APIトークンは、KID連携サービス(FormOK 等)のAPIをプログラムから利用するための認証キーです。
KIDが発行・検証・管理を一元的に行うため、各サービス個別のAPI認証を設定する必要はありません。1つのトークンで対象サービスのAPIに安全にアクセスできます。
APIトークンによる認証は、以下の流れで行われます。
あなたのアプリ 連携サービス KID
| | |
| --- APIリクエスト --------> | |
| (Bearer kid_xxxx...) | |
| | --- トークン検証 ----> |
| | (verify API) |
| | <-- 検証結果 --------- |
| | (有効/無効/スコープ) |
| <-- レスポンス ----------- | |
| | |
/token/{api_key} に直接アクセスします。発行済みトークンの一覧は /token からも確認できます。以下のように Authorization ヘッダーと X-Api-Key ヘッダーを付与してAPIを呼び出します。
# curlでの例
curl -H "Authorization: Bearer kid_xxxxxxxxxxxx..." \
-H "X-Api-Key: your_api_key_here" \
https://example.com/api/endpoint
// JavaScriptでの例
const res = await fetch('https://example.com/api/endpoint', {
headers: {
'Authorization': 'Bearer kid_xxxxxxxxxxxx...',
'X-Api-Key': 'your_api_key_here'
}
});
# Pythonでの例
import requests
headers = {
'Authorization': 'Bearer kid_xxxxxxxxxxxx...',
'X-Api-Key': 'your_api_key_here',
}
res = requests.get('https://example.com/api/endpoint', headers=headers)
連携サービスのサーバーがKIDにトークンの有効性を問い合わせるためのAPIです。
https://id.kodama.com/api/token/verify
トークンが有効かどうかを検証します。連携サービスのバックエンドから呼び出してください。
リクエストヘッダー
| ヘッダー | 必須 | 説明 |
|---|---|---|
Authorization | 必須 | Bearer kid_xxxx... 形式でトークンを指定 |
X-Api-Key | 必須 | 対象アプリのAPIキー。トークンとアプリの一致を確認 |
{
"result_code": 0,
"valid": true,
"token_id": "a1b2c3d4e5f6g7h8",
"account_id": "xxxxxxxxxxxxxxxx",
"scopes": ["read", "write"],
"custom_scopes": {"base_id": ["my-knowledge", "team-docs"]},
"expires_at": "2027-03-10T12:00:00+09:00",
"remaining_ttl": 31536000
}
custom_scopes はアプリ固有のカスタムスコープ値です。APIオーナが定義し、ユーザーがトークン発行時に設定します。未設定の場合は {} が返ります。
https://id.kodama.com/api/token/me
トークン所有者のKIDアカウント情報を取得します。read スコープが必要です。
リクエストヘッダー
| ヘッダー | 必須 | 説明 |
|---|---|---|
Authorization | 必須 | Bearer kid_xxxx... 形式でトークンを指定 |
X-Api-Key | 必須 | 対象アプリのAPIキー |
{
"result_code": 0,
"account_id": "xxxxxxxxxxxxxxxx",
"email": "user@example.com",
"full_name": "山田 太郎",
"locale": "ja_JP",
"status": "A"
}
スコープはトークンの操作権限を定義します。必要最小限のスコープを選択してください。
| スコープ | 説明 | 用途例 |
|---|---|---|
| read | データの読み取り | フォーム回答の取得、一覧表示 |
| write | データの作成・更新 | フォーム作成、設定変更 |
| delete | データの削除 | フォーム削除、回答データ削除 |
| admin | 全操作(上記すべてを含む) | 管理操作全般 |
アプリのオーナーが独自のスコープを定義できます。例えば、アクセスを許可するリソースIDの制限などに利用します。
| 項目 | 説明 |
|---|---|
| 定義者 | APIオーナが API管理画面で定義(最大5個) |
| 設定者 | ユーザーがトークン発行時に値を入力 |
| 検証レスポンス | custom_scopes フィールドで値が返却される |
| アクセス制御 | アプリ側で custom_scopes の値を確認して制御 |
| 未設定時 | {}(空オブジェクト)が返却される |
| 変更 | トークン編集画面から変更可能 |
| 項目 | 上限 |
|---|---|
| 1アプリあたりのトークン数 | 5件 |
| 1アカウント全体のトークン数 | 20件 |
| 選択肢 | 説明 |
|---|---|
| 30日 | 短期の検証・テスト用途に |
| 90日 | 中期のプロジェクト用途に |
| 180日 | 半年単位の運用に |
| 1年 | 長期運用に(定期的な確認を推奨) |
| 無期限 | サーバー間連携や自動化用途に |
トークンごとにリクエスト数の上限を設定できます(1分あたり)。
| 設定値 | 用途の目安 |
|---|---|
| 30 req/min | 軽量な読み取り処理 |
| 60 req/min(初期値) | 一般的な利用 |
| 120 req/min | やや頻繁なアクセス |
| 300 req/min | バッチ処理・自動化 |
| 600 req/min | 高頻度アクセス |
429 Too Many Requests が返されます。しばらく待ってから再試行してください。KIDはトークンの生データを保持しません。サーバーにはSHA-512ハッシュのみが保存されるため、万が一データベースが漏洩してもトークンの悪用はできません。
不正アクセスを多層的に防御しています。
KIDにログイン後、以下の方法でトークン管理画面にアクセスできます。
/token/{api_key} で対象アプリのトークン管理/token で発行済みトークンの一覧を確認| 項目 | 変更 | 備考 |
|---|---|---|
| トークン名 | 可 | 英数字・アンダースコア・ハイフンのみ |
| 説明 | 可 | 最大160文字 |
| ステータス | 可 | 有効/無効の切り替え |
| レート制限 | 可 | |
| 対象アプリ | 不可 | 再発行が必要 |
| スコープ | 不可 | 再発行が必要 |
| 有効期限 | 不可 | 再発行が必要 |
| ステータス | 説明 | APIリクエスト |
|---|---|---|
| 有効 | 正常に利用可能 | 許可 |
| 無効 | 一時的に停止(再び有効に戻せる) | 拒否 |
| 失効 | 永久に無効化(元に戻せない) | 拒否 |
トークン検証時に返される主なエラーです。
| HTTPステータス | エラーコード | 原因 |
|---|---|---|
| 400 | api_key_required | X-Api-Key ヘッダーが未指定 |
| 401 | bearer_token_required | Authorization: Bearer ヘッダーが未指定 |
| 401 | invalid_token | トークンが存在しないか不正 |
| 403 | token_inactive | トークンが無効化されている |
| 403 | token_revoked | トークンが失効済み |
| 403 | token_expired | トークンの有効期限切れ |
| 403 | api_key_mismatch | トークンと指定されたアプリが不一致 |
| 403 | ip_not_allowed | IP制限に該当 |
| 403 | insufficient_scope | 必要なスコープが不足 |
| 429 | rate_limit_exceeded | レート制限超過 |
| 429 | too_many_failures | 不正検証の試行回数が超過 |
{
"result_code": 1,
"error": "token_expired"
}
いいえ。セキュリティ上、トークンは作成時の1回のみ表示されます。紛失した場合は、既存トークンを失効して新しいトークンを発行してください。
スコープ・有効期限・対象アプリは作成後に変更できません。既存トークンを失効し、新しい設定で再発行してください。
トークン管理画面の編集からステータスを「無効」に変更してください。無効化中はAPIリクエストが拒否されます。再び「有効」に戻すことも可能です。
無効は一時的な停止で、再度有効に戻せます。失効は永久的な無効化で、元に戻すことはできません。
いいえ。1つのトークンは1つのアプリに紐づきます。複数のアプリを利用する場合は、アプリごとにトークンを発行してください。
しばらく待ってから再試行してください。レート制限は1分間のリクエスト数で計算されるため、1分後にはリセットされます。必要に応じてトークン管理画面からレート制限値を引き上げることもできます。
トークンが対象アプリ用に発行されたものかを確認するために必要です。これにより、あるアプリ用のトークンで別のアプリのAPIにアクセスすることを防ぎます。