Admin Portal リンクを作成
POST /v1/admin-portal-links · 権限 admin-portal-links:write
顧客組織の IT 管理者が、サポートチームを介さずに、ホステッド Admin Portal で SSO、ディレクトリ同期、ドメイン確認などを設定できるリンクを作成します。管理者がお使いのアプリケーションで「SSO を設定」をクリックするたびに新しいリンクを作成し、直ちに url へリダイレクトしてください。リンクの有効期間は 5 分で、ポータルセッションを 1 回だけ開けます。url はこのレスポンスでのみ 1 回返され、それ以降はどのエンドポイントでも返されません。レスポンスには Cache-Control: no-store が付き、同じ Idempotency-Key で再生されたレスポンスには url が含まれず、secret_redacted: true が付きます。ポータルセッションはアイドル 60 分、最長 8 時間です。DELETE /v1/admin-portal-links/{link_id} で取り消せます。作成は admin_portal_link.created として監査されます(URL が監査ログに記録されることはありません)。
audit_logs には Business プランが、log_streams には Enterprise プランが必要です。そのほかのインテントはすべてのプランで利用できます。delivery: email の場合は代わりに招待を送信します。招待は 7 日間有効で、recipient_email にメールで届きます。レスポンスには url もアドレスも含まれません。受信者が招待を開くと、同じアドレスに 6 桁のコード(有効期間 10 分)が送られ、検証済みのコードだけがポータルセッションを開きます。招待メールを送信できない場合、呼び出しは 503 service_unavailable と Retry-After で応答し、何も作成されません。招待は DELETE /v1/admin-portal-links/{link_id} で取り消せます。受信者のアドレスは、レスポンス、一覧、監査ログ、いかなるログにも現れません。
リクエスト
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
organization_id |
string | はい | 組織 ID(org_…)。この環境に存在している必要があります。 |
intents |
string[] | はい | sso、dsync、domain_verification、certificate_renewal、audit_logs(Business)、log_streams(Enterprise)のうち 1〜6 個。同じ値の重複は不可。 |
return_url |
string | はい | 2048 バイト以内の絶対 https URL。ユーザー情報とフラグメントを含まないこと。そのオリジンは、この環境に登録された有効なアプリケーションの redirect_uri のオリジンと一致する必要があります。 |
delivery |
string | いいえ | link(既定値。レスポンスに 5 分間有効なワンタイム url を含む)または email(recipient_email にメールで送られる 7 日間有効の招待。url は含まない)。 |
recipient_email |
string | いいえ | delivery: email の場合のみ指定でき、その場合は必須です。320 文字以内。未指定の場合: 422 の /recipient_email required。delivery: link の場合: not_allowed。アドレスが不正な場合: invalid_value。 |
レスポンス
リンクと、そのワンタイム url を含む 201 Created。
{
"id": "apl_01j9xv2c4d6e8f0g2h4j6k8m0n",
"organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
"intents": [
"dsync",
"sso"
],
"delivery": "link",
"return_url": "https://app.example.com/settings/sso",
"expires_at": "2026-10-12T09:36:00.123456Z",
"consumed_at": null,
"revoked_at": null,
"created_at": "2026-10-12T09:31:00.123456Z",
"url": "https://acme.eu.keenauth.app/portal/l/<token>"
}
エラー
| HTTP | code | 発生条件 |
|---|---|---|
| 403 | plan_feature_unavailable |
インテントにより上位プランが必要です。feature と required_plan がそれを示します。 |
| 404 | not_found |
組織がこの環境に存在しません。 |
| 409 | organization_disabled |
組織がアクティブではありません(無効化されています)。リンクは作成されません。 |
| 409 | organization_pending_deletion |
組織は削除予定です。リンクは作成されません。 |
| 422 | validation_failed |
フィールドが欠けているか不正です。/return_url の origin_not_registered は、オリジンが登録済みアプリケーションのものでない場合です。/recipient_email の required、not_allowed、invalid_value。 |
| 401 | unauthenticated |
資格情報が欠けているか、不正か、取り消されています。 |
| 403 | insufficient_permissions |
資格情報に必要な権限がありません。 |
| 429 | rate_limited |
レート制限を超えました。Retry-After の時間が経過してから再試行してください。 |
| 503 | service_unavailable |
依存先が一時的に利用できないか、(delivery: email の場合)招待メールを送信できません。何も作成されません。Retry-After の時間が経過してから再試行してください。 |
例
curl -i -X POST "https://api.eu.keenauth.com/v1/admin-portal-links" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"organization_id":"org_01j9xk3m7q8r2s4t6v8w0y2z4a","intents":["sso","dsync"],"return_url":"https://app.example.com/settings/sso"}'
メールで招待を送信する
curl -i -X POST "https://api.eu.keenauth.com/v1/admin-portal-links" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"organization_id":"org_01j9xk3m7q8r2s4t6v8w0y2z4a","intents":["sso"],"return_url":"https://app.example.com/settings/sso","delivery":"email","recipient_email":"it@customer.example"}'
201 Created。レスポンスには url もアドレスも含まれません。
{
"id": "apl_01j9xv2c4d6e8f0g2h4j6k8m0n",
"organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
"intents": [
"sso"
],
"delivery": "email",
"return_url": "https://app.example.com/settings/sso",
"expires_at": "2026-10-19T09:31:00.123456Z",
"consumed_at": null,
"revoked_at": null,
"created_at": "2026-10-12T09:31:00.123456Z"
}
CLI の場合: keenauth admin-portal-links create --organization-id org_01j9xk3m7q8r2s4t6v8w0y2z4a --intents sso --return-url https://app.example.com/settings/sso --delivery email --recipient-email it@customer.example。