組織に人を招待する
POST /v1/invitations · 権限 invitations:write
メールアドレスに対して、組織に参加するための招待を作成します。organization_id を指定しない場合、招待は環境招待になります。これは招待制サインインモードのサインアップリンクであり、メンバーシップは作成されず、ロールを含めることもできません(role_ids は 422 validation_failed を返します)。レスポンスには organization_id: null が含まれます。delivery は必須です。email を指定すると、環境の招待テンプレート(delivery_status: queued)を使って招待メールが送信されます。リンクはメールにのみ含まれ、レスポンスに accept_url は含まれません。link_only を指定するとメールは送信されず、共有用のリンクが返されます。承諾リンク(accept_url)はこのレスポンスでのみ一度返され、以降どのエンドポイントも返しません。レスポンスには Cache-Control: no-store が含まれます。同じ Idempotency-Key に対してリプレイされたレスポンスではリンクが省略され、secret_redacted: true が含まれます。招待メールがデプロイで設定されていない場合(非本番環境の設定のみ)、email の配信は 501 not_implemented を返し、何も書き込まれません。同じロールを持つ未承諾の招待が、組織とメールアドレスについてすでに存在する場合は、新しいリンクで再送され、レスポンスは 200 になります。期限切れだがまだ処理されていない未承諾の招待は、同じリクエスト内で expired とマークされ、新しい招待が書き込まれます(invitation.expired として監査されます)。同じロールを持つ未承諾の email 招待は、メールで再送されます。レスポンスは 200 で、delivery: email を含み、accept_url は含みません。書き込みは invitation.created として監査されます。
リクエスト
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
organization_id |
string | いいえ | 組織 ID(org_…)。環境招待(ロールなし)にする場合は省略してください。 |
email |
string | はい | 招待される人のメールアドレス。320 文字まで。 |
delivery |
string | はい | email(リンクはメールにのみ含まれます)または link_only(リンクはこのレスポンスにのみ含まれます)。 |
role_ids |
string[] | いいえ | 承諾時に付与されるロール(rol_…)。最大 10 件。空の場合はデフォルトのメンバーロール。 |
application_id |
string | いいえ | 招待された人が着地するアプリケーション(app_…)。この環境に存在している必要があります。 |
ttl_days |
integer | いいえ | 1〜30。デフォルトは環境の invitation_ttl_days(7)。 |
レスポンス
201 Created を、招待と承諾リンク(未承諾の招待を再送した場合は 200 OK)とともに返します。
{
"id": "inv_01j9xt9v3w4y8z0a2b4c6d8e0g",
"organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
"email": "ada@example.com",
"role_ids": [
"rol_01j9xr7s1t2w6x8y0z2a4b6c8e"
],
"application_id": null,
"delivery": "link_only",
"delivery_status": "not_sent",
"status": "pending",
"send_count": 1,
"last_sent_at": "2026-10-12T09:31:00.123456Z",
"expires_at": "2026-10-19T09:31:00.123456Z",
"accepted_user_id": null,
"accepted_at": null,
"revoked_at": null,
"created_at": "2026-10-12T09:31:00.123456Z",
"updated_at": "2026-10-12T09:31:00.123456Z",
"version": 1,
"accept_url": "https://acme.eu.keenauth.app/u/login?invitation=<token>"
}
エラー
| HTTP | code | 発生条件 |
|---|---|---|
| 404 | not_found |
組織またはアプリケーションがこの環境に存在しない。 |
| 409 | invitation_already_pending |
このメールアドレスに、異なるロールを持つ未承諾の招待が存在する。 |
| 409 | membership_already_exists |
このメールアドレスはすでにメンバーに属している。 |
| 409 | organization_disabled |
組織が無効になっている。 |
| 422 | invitation_invalid |
これらの値では招待を作成できない。 |
| 422 | validation_failed |
フィールドが不足しているか、無効である。 |
| 429 | invite_rate_limited |
招待が、10 分以内に再送されたか、すでに 5 回再送されている。 |
| 501 | not_implemented |
delivery が email で、デプロイに招待メールが設定されていない。 |
| 401 | unauthenticated |
認証情報がない、無効、または取り消されている。 |
| 403 | insufficient_permissions |
認証情報に必要な権限がない。特権(is_privileged)ロールの割り当てには roles:write も必要です。これがない場合は何も書き込まれず、required_permissions には両方の権限が一覧されます。 |
| 429 | rate_limited |
レート制限を超えた。Retry-After の期間の後に再試行してください。 |
| 503 | service_unavailable |
依存先が一時的に利用できない。Retry-After の期間の後に再試行してください。 |
例
curl -i -X POST "https://api.eu.keenauth.com/v1/invitations" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"organization_id":"org_01j9xk3m7q8r2s4t6v8w0y2z4a","email":"ada@example.com","delivery":"link_only","role_ids":["rol_01j9xr7s1t2w6x8y0z2a4b6c8e"]}'
個人データ
このエンドポイントは個人データを扱います: 組織のメンバーシップと招待。KeenAuth API における個人データでは、保存される内容、保存期間、削除方法を説明しています。いかなるフィールドにも、特別な種類の個人データ(健康、生体情報、宗教、政治的意見、性的指向)を送信しないでください。