APIトークン ガイド

KID連携サービスのAPIをトークン認証で安全に利用するための手引きです。

目次
  1. 概要
  2. トークンの作成と使い方
  3. APIリファレンス
  4. スコープ
  5. 制限事項
  6. セキュリティ
  7. トークン管理
  8. エラーコード
  9. FAQ

概要

APIトークンは、KID連携サービス(FormOK 等)のAPIをプログラムから利用するための認証キーです。

KIDが発行・検証・管理を一元的に行うため、各サービス個別のAPI認証を設定する必要はありません。1つのトークンで対象サービスのAPIに安全にアクセスできます。

仕組み

APIトークンによる認証は、以下の流れで行われます。

あなたのアプリ                  連携サービス                KID
      |                           |                      |
      | --- APIリクエスト --------> |                      |
      |    (Bearer kid_xxxx...)    |                      |
      |                           | --- トークン検証 ----> |
      |                           |    (verify API)       |
      |                           | <-- 検証結果 --------- |
      |                           |    (有効/無効/スコープ)  |
      | <-- レスポンス ----------- |                      |
      |                           |                      |
APIトークンはKIDアカウントに紐づいています。KIDにログインしてトークン管理画面から発行します。

トークンの作成と使い方

1
KIDにログイン
id.kodama.com にアクセスしてKIDアカウントでログインします。
2
トークン管理画面を開く
連携サービスの「APIトークン管理」リンクをクリックするか、/token/{api_key} に直接アクセスします。発行済みトークンの一覧は /token からも確認できます。
3
トークンを作成
「新規作成」から対象アプリ、トークン名、スコープ、有効期限を選んで発行します。
4
トークンを安全に保存
生成されたトークンが表示されます。この画面でのみ確認可能です。必ずコピーして安全な場所に保管してください。
5
APIリクエストにトークンを付与
HTTPリクエストのヘッダーにトークンとAPIキーを設定して、対象サービスのAPIを呼び出します。
重要: トークンは作成直後に1回だけ表示されます。紛失した場合は再発行が必要です。

リクエスト例

以下のように 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)

APIリファレンス

連携サービスのサーバーがKIDにトークンの有効性を問い合わせるためのAPIです。

トークン検証

GET https://id.kodama.com/api/token/verify

トークンが有効かどうかを検証します。連携サービスのバックエンドから呼び出してください。

リクエストヘッダー

ヘッダー必須説明
Authorization必須Bearer kid_xxxx... 形式でトークンを指定
X-Api-Key必須対象アプリのAPIキー。トークンとアプリの一致を確認
成功レスポンス(200)
{
  "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オーナが定義し、ユーザーがトークン発行時に設定します。未設定の場合は {} が返ります。

アカウント情報取得

GET https://id.kodama.com/api/token/me

トークン所有者のKIDアカウント情報を取得します。read スコープが必要です。

リクエストヘッダー

ヘッダー必須説明
Authorization必須Bearer kid_xxxx... 形式でトークンを指定
X-Api-Key必須対象アプリのAPIキー
成功レスポンス(200)
{
  "result_code": 0,
  "account_id":  "xxxxxxxxxxxxxxxx",
  "email":       "user@example.com",
  "full_name":   "山田 太郎",
  "locale":      "ja_JP",
  "status":      "A"
}

スコープ

スコープはトークンの操作権限を定義します。必要最小限のスコープを選択してください。

スコープ説明用途例
read データの読み取り フォーム回答の取得、一覧表示
write データの作成・更新 フォーム作成、設定変更
delete データの削除 フォーム削除、回答データ削除
admin 全操作(上記すべてを含む) 管理操作全般
スコープの具体的な権限は連携サービスごとに異なります。KIDはトークンにどのスコープが付与されているかを返却し、実際のアクセス制御は各サービスが行います。
スコープは作成後に変更できません。変更が必要な場合は、既存トークンを失効して新しいトークンを発行してください。

カスタムスコープ

アプリのオーナーが独自のスコープを定義できます。例えば、アクセスを許可するリソース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高頻度アクセス
レート制限を超えた場合、HTTPステータス 429 Too Many Requests が返されます。しばらく待ってから再試行してください。

セキュリティ

トークンの安全な取り扱い

トークンの保存方式

KIDはトークンの生データを保持しません。サーバーにはSHA-512ハッシュのみが保存されるため、万が一データベースが漏洩してもトークンの悪用はできません。

3層レート制限

不正アクセスを多層的に防御しています。

トークンが漏洩した可能性がある場合は、直ちにトークン管理画面から失効してください。失効したトークンは即座に無効化されます。

トークン管理

管理画面

KIDにログイン後、以下の方法でトークン管理画面にアクセスできます。

変更可能な項目

項目変更備考
トークン名英数字・アンダースコア・ハイフンのみ
説明最大160文字
ステータス有効/無効の切り替え
レート制限
対象アプリ不可再発行が必要
スコープ不可再発行が必要
有効期限不可再発行が必要

ステータス

ステータス説明APIリクエスト
有効正常に利用可能許可
無効一時的に停止(再び有効に戻せる)拒否
失効永久に無効化(元に戻せない)拒否

エラーコード

トークン検証時に返される主なエラーです。

HTTPステータスエラーコード原因
400api_key_requiredX-Api-Key ヘッダーが未指定
401bearer_token_requiredAuthorization: Bearer ヘッダーが未指定
401invalid_tokenトークンが存在しないか不正
403token_inactiveトークンが無効化されている
403token_revokedトークンが失効済み
403token_expiredトークンの有効期限切れ
403api_key_mismatchトークンと指定されたアプリが不一致
403ip_not_allowedIP制限に該当
403insufficient_scope必要なスコープが不足
429rate_limit_exceededレート制限超過
429too_many_failures不正検証の試行回数が超過
エラーレスポンス例
{
  "result_code": 1,
  "error":       "token_expired"
}

FAQ

トークンを紛失しました。再表示できますか?

いいえ。セキュリティ上、トークンは作成時の1回のみ表示されます。紛失した場合は、既存トークンを失効して新しいトークンを発行してください。

トークンのスコープや有効期限を変更したい

スコープ・有効期限・対象アプリは作成後に変更できません。既存トークンを失効し、新しい設定で再発行してください。

トークンを一時的に停止したい

トークン管理画面の編集からステータスを「無効」に変更してください。無効化中はAPIリクエストが拒否されます。再び「有効」に戻すことも可能です。

「失効」と「無効」の違いは?

無効は一時的な停止で、再度有効に戻せます。失効は永久的な無効化で、元に戻すことはできません。

1つのトークンで複数のアプリを利用できますか?

いいえ。1つのトークンは1つのアプリに紐づきます。複数のアプリを利用する場合は、アプリごとにトークンを発行してください。

レート制限に達した場合はどうすれば?

しばらく待ってから再試行してください。レート制限は1分間のリクエスト数で計算されるため、1分後にはリセットされます。必要に応じてトークン管理画面からレート制限値を引き上げることもできます。

X-Api-Key は何のために必要ですか?

トークンが対象アプリ用に発行されたものかを確認するために必要です。これにより、あるアプリ用のトークンで別のアプリのAPIにアクセスすることを防ぎます。