[PR #6783] feat(invitations): create-bulk-invitations #23779

Open
opened 2026-04-15 21:58:18 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/better-auth/better-auth/pull/6783
Author: @Ridhim-RR
Created: 12/15/2025
Status: 🔄 Open

Base: mainHead: feat/create-bulk-invitation


📝 Commits (10+)

  • a4c7e59 feat(invitations): create-bulk-invitations
  • c8301df Merge branch 'canary' into feat/create-bulk-invitation
  • 24592e0 Update docs/content/docs/plugins/organization.mdx
  • 691230b Update docs/content/docs/plugins/organization.mdx
  • 4bbb07f Merge branch 'canary' into feat/create-bulk-invitation
  • 51f0730 Update packages/better-auth/src/plugins/organization/routes/crud-invites.ts
  • 6ac1e1b Merge branch 'canary' into feat/create-bulk-invitation
  • eacde94 chore(performance): improve performance and docs updte
  • 0816115 Merge branch 'feat/create-bulk-invitation' of https://github.com/Ridhim-RR/better-auth into feat/create-bulk-invitation
  • e98851f Merge branch 'canary' into feat/create-bulk-invitation

📊 Changes

4 files changed (+882 additions, -0 deletions)

View changed files

📝 docs/content/docs/plugins/organization.mdx (+240 -0)
📝 packages/better-auth/src/plugins/organization/adapter.ts (+70 -0)
📝 packages/better-auth/src/plugins/organization/organization.ts (+18 -0)
📝 packages/better-auth/src/plugins/organization/routes/crud-invites.ts (+554 -0)

📄 Description

closes #6753

This PR adds a new bulk invitation endpoint (/organization/invite-members) that allows inviting multiple users to an organization in a single API call. The endpoint provides detailed success/failure reporting for each invitation attempt.

Changes

New Endpoint

  • Path: POST /organization/invite-members
  • Server API: auth.api.createBulkInvitation()
  • Client API: authClient.organization.inviteMembers()

Response Format

{
  success: Array<Invitation>      // Successfully created/resent invitations
  failed: Array<{                 // Failed invitations with reasons
    email: string
    reason: string
  }>
  totalProcessed: number          // Total invitations in request
  totalSuccessful: number         // Successfully processed
  totalFailed: number             // Failed invitations
}

Example

Server-Side

const result = await auth.api.createBulkInvitation({
    headers: await headers(),
    body: {
      organizationId: body.organizationId, // Optional, defaults to active org
      invitations: [
        { email: "user1@example.com", role: "member" },
        { email: "user2@example.com", role: "admin" },
        { email: "user3@example.com", role: ["member", "admin"] }, // Multiple roles
        { email: "user4@example.com", role: "member", teamId: ["team-1", "team-2"] }, // Multiple teams
      ],
    },
  });

Client-Side

const result = await authClient.organization.inviteMembers({
  invitations: [
    { email: "user1@example.com", role: "member" },
    { email: "user2@example.com", role: "admin" },
    { email: "user3@example.com", role: "member", teamId: "team-123" },
    { email: "user4@example.com", role: "member", resend: true }, // Resend if already invited
  ],
});

Summary by cubic

Add a bulk invitations endpoint to invite many users in one request with clear per-invite success/failure reporting. This streamlines org onboarding and reduces API calls.

  • New Features
    • POST /organization/invite-members with success/failed arrays and totals.
    • Server: auth.api.createBulkInvitation. Client: authClient.organization.inviteMembers.
    • Validates email format, blocks duplicates, and enforces role rules (cannot invite creator role unless creator).
    • Skips existing members; handles already-invited users with resend support and optional auto-cancel of old invites.
    • Enforces invitation limits and team member limits; validates team IDs.
    • Supports multiple roles and team IDs per invite.
    • Triggers before/after invitation hooks and sends emails.
    • Adapter additions: findMembersByEmail, updateInvitations. Docs updated (organization.mdx).

Written for commit 40b99895a1. Summary will update automatically on new commits.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/better-auth/better-auth/pull/6783 **Author:** [@Ridhim-RR](https://github.com/Ridhim-RR) **Created:** 12/15/2025 **Status:** 🔄 Open **Base:** `main` ← **Head:** `feat/create-bulk-invitation` --- ### 📝 Commits (10+) - [`a4c7e59`](https://github.com/better-auth/better-auth/commit/a4c7e59f49562a8515ff24df3a121f5bffa7b01c) feat(invitations): create-bulk-invitations - [`c8301df`](https://github.com/better-auth/better-auth/commit/c8301df15fa72a65ee1ec59de917214b892e05ee) Merge branch 'canary' into feat/create-bulk-invitation - [`24592e0`](https://github.com/better-auth/better-auth/commit/24592e00bf65deef5db83b1a345a293acfedcbc0) Update docs/content/docs/plugins/organization.mdx - [`691230b`](https://github.com/better-auth/better-auth/commit/691230b9b11d6a6188851df646830d60e900670b) Update docs/content/docs/plugins/organization.mdx - [`4bbb07f`](https://github.com/better-auth/better-auth/commit/4bbb07f00ec96bdad63b36cac9c86c3bc03bf380) Merge branch 'canary' into feat/create-bulk-invitation - [`51f0730`](https://github.com/better-auth/better-auth/commit/51f0730fce5e81c3ff7680bad2b0fd70f77df8cb) Update packages/better-auth/src/plugins/organization/routes/crud-invites.ts - [`6ac1e1b`](https://github.com/better-auth/better-auth/commit/6ac1e1b9d2ffc888fcddf40ce7d6f99135353f1a) Merge branch 'canary' into feat/create-bulk-invitation - [`eacde94`](https://github.com/better-auth/better-auth/commit/eacde944d5da18fce98a26c4dd14ecb27ae87e49) chore(performance): improve performance and docs updte - [`0816115`](https://github.com/better-auth/better-auth/commit/08161158c7d0e128b4152dae033edda38004e26a) Merge branch 'feat/create-bulk-invitation' of https://github.com/Ridhim-RR/better-auth into feat/create-bulk-invitation - [`e98851f`](https://github.com/better-auth/better-auth/commit/e98851fbc4f90ade0188cb2d99dfe703fdd4e7fa) Merge branch 'canary' into feat/create-bulk-invitation ### 📊 Changes **4 files changed** (+882 additions, -0 deletions) <details> <summary>View changed files</summary> 📝 `docs/content/docs/plugins/organization.mdx` (+240 -0) 📝 `packages/better-auth/src/plugins/organization/adapter.ts` (+70 -0) 📝 `packages/better-auth/src/plugins/organization/organization.ts` (+18 -0) 📝 `packages/better-auth/src/plugins/organization/routes/crud-invites.ts` (+554 -0) </details> ### 📄 Description closes #6753 This PR adds a new bulk invitation endpoint (`/organization/invite-members`) that allows inviting multiple users to an organization in a single API call. The endpoint provides detailed success/failure reporting for each invitation attempt. ## Changes ### New Endpoint - **Path**: `POST /organization/invite-members` - **Server API**: `auth.api.createBulkInvitation()` - **Client API**: `authClient.organization.inviteMembers()` ### Response Format ```typescript { success: Array<Invitation> // Successfully created/resent invitations failed: Array<{ // Failed invitations with reasons email: string reason: string }> totalProcessed: number // Total invitations in request totalSuccessful: number // Successfully processed totalFailed: number // Failed invitations } ``` **Example** **Server-Side** ``` const result = await auth.api.createBulkInvitation({ headers: await headers(), body: { organizationId: body.organizationId, // Optional, defaults to active org invitations: [ { email: "user1@example.com", role: "member" }, { email: "user2@example.com", role: "admin" }, { email: "user3@example.com", role: ["member", "admin"] }, // Multiple roles { email: "user4@example.com", role: "member", teamId: ["team-1", "team-2"] }, // Multiple teams ], }, }); ``` **Client-Side** ``` const result = await authClient.organization.inviteMembers({ invitations: [ { email: "user1@example.com", role: "member" }, { email: "user2@example.com", role: "admin" }, { email: "user3@example.com", role: "member", teamId: "team-123" }, { email: "user4@example.com", role: "member", resend: true }, // Resend if already invited ], }); ``` <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Add a bulk invitations endpoint to invite many users in one request with clear per-invite success/failure reporting. This streamlines org onboarding and reduces API calls. - New Features - POST /organization/invite-members with success/failed arrays and totals. - Server: auth.api.createBulkInvitation. Client: authClient.organization.inviteMembers. - Validates email format, blocks duplicates, and enforces role rules (cannot invite creator role unless creator). - Skips existing members; handles already-invited users with resend support and optional auto-cancel of old invites. - Enforces invitation limits and team member limits; validates team IDs. - Supports multiple roles and team IDs per invite. - Triggers before/after invitation hooks and sends emails. - Adapter additions: findMembersByEmail, updateInvitations. Docs updated (organization.mdx). <sup>Written for commit 40b99895a150f7fad1b24dfd02656d9b9c73ae54. Summary will update automatically on new commits.</sup> <!-- End of auto-generated description by cubic. --> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-04-15 21:58:18 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/better-auth#23779