Open
Description
Describe the Bug
When attempting to recover a password via the admin panel and using @payloadcms/email-resend
, the process appears to complete successfully in the UI, but a 400 validation_error is logged in the backend.
Payload log:
GET /admin/forgot 200 in 29ms
[12:07:18] ERROR: Error sending email: 400 validation_error - Something went wrong
err: {
"type": "APIError",
"message": "Error sending email: 400 validation_error - Something went wrong",
"stack":
APIError: Error sending email: 400 validation_error - Something went wrong
at Object.sendEmail (file:///private/tmp/payload-test/node_modules/.pnpm/@payloadcms+email-resend@3.40.0_payload@3.40.0_graphql@16.11.0_typescript@5.7.3_/node_modules/@payloadcms/email-resend/dist/index.js:30:27)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async forgotPasswordOperation (file:///private/tmp/payload-test/node_modules/.pnpm/payload@3.40.0_graphql@16.11.0_typescript@5.7.3/node_modules/payload/dist/auth/operations/forgotPassword.js:113:13)
at async forgotPasswordHandler (file:///private/tmp/payload-test/node_modules/.pnpm/payload@3.40.0_graphql@16.11.0_typescript@5.7.3/node_modules/payload/dist/auth/endpoints/forgotPassword.js:15:5)
at async handleEndpoints (file:///private/tmp/payload-test/node_modules/.pnpm/payload@3.40.0_graphql@16.11.0_typescript@5.7.3/node_modules/payload/dist/utilities/handleEndpoints.js:169:26)
at async eval (webpack-internal:///(rsc)/./node_modules/.pnpm/@payloadcms+next@3.40.0_@types+react@19.1.0_graphql@16.11.0_monaco-editor@0.52.2_next@1_8fa20fde2834961feb1a02740cbc6e5c/node_modules/@payloadcms/next/dist/routes/rest/index.js:30:20)
at async AppRouteRouteModule.do (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:26:34112)
at async AppRouteRouteModule.handle (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:26:41338)
at async doRender (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/base-server.js:1513:42)
at async DevServer.renderToResponseWithComponentsImpl (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/base-server.js:1915:28)
at async DevServer.renderPageComponent (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/base-server.js:2403:24)
at async DevServer.renderToResponseImpl (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/base-server.js:2440:32)
at async DevServer.pipeImpl (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/base-server.js:1007:25)
at async NextNodeServer.handleCatchallRenderRequest (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/next-server.js:305:17)
at async DevServer.handleRequestImpl (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/base-server.js:899:17)
at async /private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/dev/next-dev-server.js:371:20
at async Span.traceAsyncFn (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/trace/trace.js:157:20)
at async DevServer.handleRequest (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/dev/next-dev-server.js:368:24)
at async invokeRender (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:237:21)
at async handleRequest (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:428:24)
at async requestHandlerImpl (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:452:13)
at async Server.requestListener (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/lib/start-server.js:158:13)
"data": null,
"isOperational": true,
"isPublic": false,
"status": 400,
"name": "APIError"
}
POST /api/users/forgot-password 400 in 718ms
Resend log:
{
"name": "validation_error",
"message": "Something went wrong",
"statusCode": 400
}
Link to the code that reproduces this issue
https://github.com/amatosc/payload
Reproduction Steps
- Create a new Payload project.
- Install @payloadcms/email-resend
- Configure the email adapter in your Payload config.
- Start the Payload server.
- Open the admin panel and go to the login screen.
- Click on “Forgot password” and enter a valid user email.
- Check the server logs – observe the 400 validation_error and error stack, despite the UI showing a successful response.
Which area(s) are affected? (Select all that apply)
email-nodemailer
Environment Info
Binaries:
Node: 22.15.1
npm: 10.9.2
Yarn: N/A
pnpm: 10.11.0
Relevant Packages:
payload: 3.40.0
next: 15.3.0
@payloadcms/db-mongodb: 3.40.0
@payloadcms/email-nodemailer: 3.40.0
@payloadcms/email-resend: 3.40.0
@payloadcms/graphql: 3.40.0
@payloadcms/next/utilities: 3.40.0
@payloadcms/payload-cloud: 3.40.0
@payloadcms/richtext-lexical: 3.40.0
@payloadcms/translations: 3.40.0
@payloadcms/ui/shared: 3.40.0
react: 19.1.0
react-dom: 19.1.0
Operating System:
Platform: darwin
Arch: arm64
Version: Darwin Kernel Version 24.5.0: Tue Apr 22 19:54:49 PDT 2025; root:xnu-11417.121.6~2/RELEASE_ARM64_T6000
Available memory (MB): 65536
Available CPU cores: 10