{"_id":"@ace-ams/payload-invite","_rev":"4-a5fc02b7bbd9da75a7cdf3beb06be78b","name":"@ace-ams/payload-invite","dist-tags":{"latest":"1.1.1"},"versions":{"0.1.4":{"name":"@ace-ams/payload-invite","version":"0.1.4","license":"MIT","_id":"@ace-ams/payload-invite@0.1.4","maintainers":[{"name":"rens-born05","email":"rens@born05.com"},{"name":"tazio","email":"personal@tazio.nl"},{"name":"codename-niels","email":"nielsjlwijers@gmail.com"}],"homepage":"https://github.com/ace-ams/payload-plugin-invite#readme","bugs":{"url":"https://github.com/ace-ams/payload-plugin-invite/issues"},"dist":{"shasum":"cb4e2510219dfac7e0c421fcba04ecfebe090cdf","tarball":"https://registry.npmjs.org/@ace-ams/payload-invite/-/payload-invite-0.1.4.tgz","fileCount":38,"integrity":"sha512-v9wBculDen6HEPzT9+S3eGVX4W7ujQXQ9jkNxsvuavNqsiDaBVoKZ9PED1EFR563ok7LxcbeFEMV5WyNHYKTYA==","signatures":[{"sig":"MEUCIQDQYM72FJtsiTuuETnZroMccf8d/dZ/nbmhwSCOX3xTBAIgdDk2yhm/UCyHH4O5PQUFnsQ40iZGac0qLI1lkV/goMI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ace-ams%2fpayload-invite@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":112034},"main":"./dist/index.js","pnpm":{"onlyBuiltDependencies":["sharp","esbuild","unrs-resolver"]},"type":"module","types":"./dist/index.d.ts","engines":{"node":"^24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"gitHead":"40af7a97ab5b6132f454c3ae7a3ea55a9ba9fd3d","scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"npm test:int && npm test:e2e","build":"npm run copyfiles && npm run build:types && npm run build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"npm run dev:generate-types","dev:generate-types":"npm run dev:payload generate:types","generate:importmap":"npm run dev:generate-importmap","dev:generate-importmap":"npm run dev:payload generate:importmap"},"_npmUser":{"name":"codename-niels","email":"nielsjlwijers@gmail.com"},"registry":"https://registry.npmjs.org/","repository":{"url":"git+https://github.com/ace-ams/payload-plugin-invite.git","type":"git"},"_npmVersion":"11.11.0","description":"A blank template to get started with Payload 3.0","directories":{},"_nodeVersion":"24.14.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.2.2","open":"^10.1.0","react":"^19.2.4","sharp":"^0.34.2","eslint":"^9.23.0","qs-esm":"^8.0.1","rimraf":"^3.0.2","vitest":"^4.0.18","graphql":"^16.8.1","payload":"^3.37.0","@swc/cli":"^0.6.0","prettier":"^3.4.2","copyfiles":"^2.4.1","cross-env":"^7.0.3","react-dom":"^19.2.4","typescript":"^5.7.3","@types/node":"^22.19.9","@types/react":"^19.2.14","@payloadcms/ui":"^3.37.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"^3.37.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"^1.10.9","eslint-config-next":"^16.2.2","vite-tsconfig-paths":"^6.0.5","@payloadcms/db-sqlite":"^3.37.0","mongodb-memory-server":"^10.1.4","@payloadcms/db-mongodb":"^3.37.0","@payloadcms/db-postgres":"^3.37.0","@payloadcms/eslint-config":"^3.9.0","@payloadcms/richtext-lexical":"^3.37.0"},"peerDependencies":{"payload":"^3.37.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-invite_0.1.4_1776175713855_0.8424803929495921","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@ace-ams/payload-invite","version":"1.0.2","license":"MIT","_id":"@ace-ams/payload-invite@1.0.2","maintainers":[{"name":"rens-born05","email":"rens@born05.com"},{"name":"tazio","email":"personal@tazio.nl"},{"name":"codename-niels","email":"nielsjlwijers@gmail.com"}],"homepage":"https://github.com/ace-ams/payload-plugin-invite#readme","bugs":{"url":"https://github.com/ace-ams/payload-plugin-invite/issues"},"dist":{"shasum":"fe3cc68524b9e26660b62a7acf328b7c35ae6933","tarball":"https://registry.npmjs.org/@ace-ams/payload-invite/-/payload-invite-1.0.2.tgz","fileCount":38,"integrity":"sha512-y/KZQnIlTPOwJNu0uPssVDT+XcivujUJGPODXjB4NWewvgVyy+GurQi+cM3tDiVArypRY9B30xZpnyKKRnojFA==","signatures":[{"sig":"MEUCIBbx1sn4lj4GWlaZB8fGJ0wwtfGzlt6BqCNxXfn5aAYyAiEAosfURjF6QWv1+Y/1ZgpfI2RFo0l97S41HjquMGkfCHw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ace-ams%2fpayload-invite@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":108395},"main":"./dist/index.js","pnpm":{"onlyBuiltDependencies":["sharp","esbuild","unrs-resolver"]},"type":"module","types":"./dist/index.d.ts","engines":{"node":"^24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"gitHead":"16c55c432378f3333119bc0fe682c4b1d872f42c","scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"npm test:int && npm test:e2e","build":"npm run copyfiles && npm run build:types && npm run build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"npm run dev:generate-types","dev:generate-types":"npm run dev:payload generate:types","generate:importmap":"npm run dev:generate-importmap","dev:generate-importmap":"npm run dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feefbaa9-10f5-4b6a-a3f5-19ee5c9af06c"}},"registry":"https://registry.npmjs.org/","repository":{"url":"git+https://github.com/ace-ams/payload-plugin-invite.git","type":"git"},"_npmVersion":"11.19.0","description":"Invite users by email to your Payload CMS","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.2.2","open":"^10.1.0","react":"^19.2.4","sharp":"^0.34.2","eslint":"^9.23.0","qs-esm":"^8.0.1","rimraf":"^3.0.2","vitest":"^4.0.18","graphql":"^16.8.1","payload":"^3.37.0","@swc/cli":"^0.6.0","prettier":"^3.4.2","copyfiles":"^2.4.1","cross-env":"^7.0.3","react-dom":"^19.2.4","typescript":"^5.7.3","@types/node":"^22.19.9","@types/react":"^19.2.14","@payloadcms/ui":"^3.37.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"^3.37.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"^1.10.9","eslint-config-next":"^16.2.2","vite-tsconfig-paths":"^6.0.5","@payloadcms/db-sqlite":"^3.37.0","mongodb-memory-server":"^10.1.4","@payloadcms/db-mongodb":"^3.37.0","@payloadcms/db-postgres":"^3.37.0","@payloadcms/eslint-config":"^3.9.0","@payloadcms/richtext-lexical":"^3.37.0"},"peerDependencies":{"payload":"^3.37.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-invite_1.0.2_1788779488717_0.7871480119482688","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@ace-ams/payload-invite","version":"1.0.3","license":"MIT","_id":"@ace-ams/payload-invite@1.0.3","maintainers":[{"name":"rens-born05","email":"rens@born05.com"},{"name":"tazio","email":"personal@tazio.nl"},{"name":"codename-niels","email":"nielsjlwijers@gmail.com"}],"homepage":"https://github.com/ace-ams/payload-plugin-invite#readme","bugs":{"url":"https://github.com/ace-ams/payload-plugin-invite/issues"},"dist":{"shasum":"3a7599c95b4d062f348b4061a7c23cef381101dc","tarball":"https://registry.npmjs.org/@ace-ams/payload-invite/-/payload-invite-1.0.3.tgz","fileCount":38,"integrity":"sha512-5fe2agvtvCvR8uzOmkPINc5GY2OYvx9xuE5N/ufdtXW0NbtzMKVR94JN5/drzHnM3AQ76Aa5MMhJsk3fdJ6oMw==","signatures":[{"sig":"MEUCIAnZk02hq2cqFaY4WBBbm8Ykaylu19zC5n6Iw9u9aPIaAiEAkZuTmy8jY52lxTPpGb5sesRUeX98R/jJoyp8fN0pPX4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ace-ams%2fpayload-invite@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":108455},"main":"./dist/index.js","pnpm":{"onlyBuiltDependencies":["sharp","esbuild","unrs-resolver"]},"type":"module","types":"./dist/index.d.ts","engines":{"node":"^24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"gitHead":"c349b06825061d6596277028889e687b003accb3","scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"npm test:int && npm test:e2e","build":"npm run copyfiles && npm run build:types && npm run build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"npm run dev:generate-types","dev:generate-types":"npm run dev:payload generate:types","generate:importmap":"npm run dev:generate-importmap","dev:generate-importmap":"npm run dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feefbaa9-10f5-4b6a-a3f5-19ee5c9af06c"}},"registry":"https://registry.npmjs.org/","repository":{"url":"git+https://github.com/ace-ams/payload-plugin-invite.git","type":"git"},"_npmVersion":"11.19.0","description":"Invite users by email to your Payload CMS","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.2.2","open":"^10.1.0","react":"^19.2.4","sharp":"^0.34.2","eslint":"^9.23.0","qs-esm":"^8.0.1","rimraf":"^3.0.2","vitest":"^4.0.18","graphql":"^16.8.1","payload":"^3.37.0","@swc/cli":"^0.6.0","prettier":"^3.4.2","copyfiles":"^2.4.1","cross-env":"^7.0.3","react-dom":"^19.2.4","typescript":"^5.7.3","@types/node":"^22.19.9","@types/react":"^19.2.14","@payloadcms/ui":"^3.37.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"^3.37.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"^1.10.9","eslint-config-next":"^16.2.2","vite-tsconfig-paths":"^6.0.5","@payloadcms/db-sqlite":"^3.37.0","mongodb-memory-server":"^10.1.4","@payloadcms/db-mongodb":"^3.37.0","@payloadcms/db-postgres":"^3.37.0","@payloadcms/eslint-config":"^3.9.0","@payloadcms/richtext-lexical":"^3.37.0"},"peerDependencies":{"payload":"^3.37.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-invite_1.0.3_1788780660365_0.11984887843237879","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@ace-ams/payload-invite","version":"1.1.1","description":"Invite users by email to your Payload CMS","license":"MIT","type":"module","repository":{"type":"git","url":"git+https://github.com/ace-ams/payload-plugin-invite.git"},"bugs":{"url":"https://github.com/ace-ams/payload-plugin-invite/issues"},"homepage":"https://github.com/ace-ams/payload-plugin-invite#readme","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts","default":"./dist/index.js"},"./client":{"import":"./dist/exports/client.js","types":"./dist/exports/client.d.ts","default":"./dist/exports/client.js"},"./rsc":{"import":"./dist/exports/rsc.js","types":"./dist/exports/rsc.d.ts","default":"./dist/exports/rsc.js"}},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"build":"npm run copyfiles && npm run build:types && npm run build:swc","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","build:types":"tsc --outDir dist --rootDir ./src","clean":"rimraf {dist,*.tsbuildinfo}","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","dev":"next dev dev --turbo","dev:generate-importmap":"npm run dev:payload generate:importmap","dev:generate-types":"npm run dev:payload generate:types","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:importmap":"npm run dev:generate-importmap","generate:types":"npm run dev:generate-types","lint":"eslint","lint:fix":"eslint ./src --fix","prepublishOnly":"npm run test:int && npm run build","test":"npm run test:int && npm run test:e2e","test:e2e":"playwright test","test:int":"vitest run"},"devDependencies":{"@eslint/eslintrc":"^3.2.0","@payloadcms/db-mongodb":"^3.37.0","@payloadcms/db-postgres":"^3.37.0","@payloadcms/db-sqlite":"^3.37.0","@payloadcms/eslint-config":"^3.9.0","@payloadcms/next":"^3.37.0","@payloadcms/richtext-lexical":"^3.37.0","@payloadcms/ui":"^3.37.0","@playwright/test":"^1.58.2","@swc-node/register":"^1.10.9","@swc/cli":"^0.6.0","@types/node":"^22.19.9","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","copyfiles":"^2.4.1","cross-env":"^7.0.3","eslint":"^9.23.0","eslint-config-next":"^16.2.2","graphql":"^16.8.1","mongodb-memory-server":"^10.1.4","next":"^16.2.2","open":"^10.1.0","payload":"^3.37.0","prettier":"^3.4.2","qs-esm":"^8.0.1","react":"^19.2.4","react-dom":"^19.2.4","rimraf":"^3.0.2","sharp":"^0.34.2","sort-package-json":"^2.10.0","typescript":"^5.7.3","vite-tsconfig-paths":"^6.0.5","vitest":"^4.0.18"},"peerDependencies":{"payload":"^3.37.0"},"engines":{"node":"^24.0.0"},"publishConfig":{"access":"public"},"registry":"https://registry.npmjs.org/","gitHead":"3f49a510b16a263c6d34708697be267ab2006178","_id":"@ace-ams/payload-invite@1.1.1","_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-8YRSu20wwEXLLy307jDM1zTNIpUYkTKvBYYdbTgNGnNWDsurQJEdUpn1NiMGN4lZjae1WztZyX3TpLi/oHVWHA==","shasum":"fe5950f74908e1db80df71e5078968a2f724ca1d","tarball":"https://registry.npmjs.org/@ace-ams/payload-invite/-/payload-invite-1.1.1.tgz","fileCount":38,"unpackedSize":116907,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ace-ams%2fpayload-invite@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHvY5a+VTE5DaKWU44xsLLGBeqp/hs5DtMDQW1XdkV1wAiAx0AcSWLqd9lo+KqlepN9ixyUpWM4PAe+arUdZ5uCSmw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feefbaa9-10f5-4b6a-a3f5-19ee5c9af06c"}},"directories":{},"maintainers":[{"name":"rens-born05","email":"rens@born05.com"},{"name":"tazio","email":"personal@tazio.nl"},{"name":"codename-niels","email":"nielsjlwijers@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/payload-invite_1.1.1_1788947576461_0.9005490288068303"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-14T14:08:33.736Z","modified":"2026-09-09T09:52:58.344Z","0.1.4":"2026-04-14T14:08:33.999Z","1.0.2":"2026-09-07T11:11:28.856Z","1.0.3":"2026-09-07T11:31:00.503Z","1.1.1":"2026-09-09T09:52:56.597Z"},"bugs":{"url":"https://github.com/ace-ams/payload-plugin-invite/issues"},"license":"MIT","homepage":"https://github.com/ace-ams/payload-plugin-invite#readme","repository":{"type":"git","url":"git+https://github.com/ace-ams/payload-plugin-invite.git"},"description":"Invite users by email to your Payload CMS","maintainers":[{"name":"rens-born05","email":"rens@born05.com"},{"name":"tazio","email":"personal@tazio.nl"},{"name":"codename-niels","email":"nielsjlwijers@gmail.com"}],"readme":"# payload-invite\n\nA [Payload CMS](https://payloadcms.com) plugin that lets admins invite users by email. Instead of creating accounts with a password directly, an invitation email is sent and the user sets their own password by following a secure, time-limited link.\n\n---\n\n## How it works\n\n1. An admin clicks **Invite User** from any user collection list view and enters an email address.\n2. The plugin creates a signed invite record and sends an email with a unique link.\n3. The user visits the link (served inside the Payload admin at `/admin/invite-accept`) and sets their password.\n4. The account is created and the invite is marked as used.\n\nTokens are never stored in plain text — only a SHA-256 hash is persisted. Each token is single-use and expires after 48 hours by default.\n\n---\n\n## Installation\n\n```bash\nnpm install @ace-ams/payload-invite\n# or\npnpm add @ace-ams/payload-invite\n```\n\n---\n\n## Setup\n\nAdd the plugin to your `payload.config.ts`:\n\n```ts\nimport { buildConfig } from 'payload'\nimport { payloadInvite } from '@ace-ams/payload-invite'\n\nexport default buildConfig({\n  plugins: [\n    payloadInvite({\n      userCollections: ['users'],\n    }),\n  ],\n  // ...rest of your config\n})\n```\n\nThat's it. The plugin will:\n\n- Add an **Invite User** button to the list view of every collection you specify.\n- Register a hidden `plugin-invites` collection to store pending invites.\n- Mount the accept-invite page at `/admin/invite-accept` (no extra Next.js pages needed).\n- Send invite emails through whatever email adapter you have configured in Payload.\n\n> **Note:** Make sure `serverURL` is set in your Payload config so the invite links in emails are fully qualified (e.g. `https://example.com/admin/invite-accept?token=…`).\n\n---\n\n## Options\n\n```ts\npayloadInvite({\n  /**\n   * Which auth-enabled collections users can be invited to.\n   * Defaults to ['users'].\n   */\n  userCollections: ['users', 'admins'],\n\n  /**\n   * How long an invite link stays valid, in milliseconds.\n   * Defaults to 48 hours.\n   */\n  inviteExpiryMs: 72 * 60 * 60 * 1000, // 72 hours\n\n  /**\n   * Customise the invite email. See the Email section below.\n   */\n  email: { ... },\n\n  /**\n   * Set to true to disable all plugin behaviour while keeping\n   * the plugin-invites collection in the database schema.\n   */\n  disabled: false,\n})\n```\n\n---\n\n## Email customisation\n\nThe plugin ships with a default HTML email template. You can override the subject, HTML body, text body, or any combination of them via the `email` option.\n\n### Available placeholders\n\n| Placeholder | Replaced with                                                               |\n| ----------- | --------------------------------------------------------------------------- |\n| `{url}`     | The full invite URL, e.g. `https://example.com/admin/invite-accept?token=…` |\n| `{email}`   | The email address of the person being invited                               |\n\n### Overriding just the subject\n\n```ts\npayloadInvite({\n  email: {\n    subject: 'You have been invited to join Acme',\n  },\n})\n```\n\n### Overriding subject, HTML, and plain text\n\n```ts\npayloadInvite({\n  email: {\n    subject: 'Your invite to Acme is ready',\n    html: `\n      <p>Hi {email},</p>\n      <p>You have been invited. <a href=\"{url}\">Click here</a> to set your password.</p>\n      <p>Or copy this link: {url}</p>\n    `,\n    text: `Hi {email},\\n\\nAccept your invite here: {url}`,\n  },\n})\n```\n\nAny field you omit falls back to the built-in default. You do not need to provide all three.\n\n---\n\n## Extra fields\n\nYou can collect additional information when sending an invite — for example a name or a role. Those values are stored with the invite and written directly onto the user document when the account is created. Each field name is also available as a placeholder in your email templates.\n\n```ts\npayloadInvite({\n  userCollections: ['users'],\n  fields: [\n    {\n      name: 'name',\n      label: 'Full Name',\n      required: true,\n    },\n    {\n      name: 'role',\n      label: 'Role',\n      type: 'select',\n      options: ['editor', 'viewer'],\n    },\n  ],\n})\n```\n\nThe admin will see these inputs in the **Invite User** drawer, below the email field. On account creation the values are spread onto the user document, so `name: 'Jane'` will set the `name` field on the `users` collection document.\n\n### Field options\n\n| Option     | Type                 | Default    | Description                                                     |\n| ---------- | -------------------- | ---------- | --------------------------------------------------------------- |\n| `name`     | `string`             | —          | **Required.** Must match the field name on the user collection. |\n| `label`    | `string`             | Field name | Label shown in the invite form.                                 |\n| `type`     | `'text' \\| 'select'` | `'text'`   | Input type rendered in the form.                                |\n| `options`  | `string[]`           | —          | Required when `type` is `'select'`.                             |\n| `required` | `boolean`            | `false`    | Prevents the form from submitting if left empty.                |\n\n### Using field values in email templates\n\nEvery field name is automatically available as a placeholder alongside `{url}` and `{email}`:\n\n```ts\npayloadInvite({\n  fields: [{ name: 'name', label: 'Full Name' }],\n  email: {\n    subject: 'Hi {name}, your invitation is ready',\n    html: '<p>Hi {name},</p><p><a href=\"{url}\">Click here</a> to set your password.</p>',\n    text: 'Hi {name},\\n\\nAccept your invite here: {url}',\n  },\n})\n```\n\n---\n\n## API endpoints\n\nThe plugin registers three endpoints on the `plugin-invites` collection:\n\n| Method | Path                                   | Auth     | Description                                           |\n| ------ | -------------------------------------- | -------- | ----------------------------------------------------- |\n| `POST` | `/api/plugin-invites/create`           | Required | Creates an invite and sends the email                 |\n| `GET`  | `/api/plugin-invites/validate?token=…` | None     | Validates a token and returns the associated email    |\n| `POST` | `/api/plugin-invites/accept`           | None     | Creates the user account and marks the invite as used |\n\n---\n\n## Requirements\n\n- Payload `^3.37.0`\n- An [email adapter](https://payloadcms.com/docs/email/overview) configured in Payload (nodemailer, Resend, etc.)\n- `serverURL` set in your Payload config\n","readmeFilename":"README.md"}