Describe the Bug
If a customer clicks "Go to payment" on the checkout, then cancels and clicks it again or any flow that triggers initiatePayment twice for the same cart the second attempt fails. The user is shown an error and cannot complete checkout until the cart is cleared and rebuilt.
Expected behavior:
A customer should be able to start, cancel, and restart payment for the same cart as many times as needed. Each initiatePayment call should produce a valid transaction record without colliding with previous attempts.
Actual behavior:
The second initiatePayment call throws a unique constraint error on the transactions.id path and never reaches Stripe-side completion. From the customer's perspective, checkout is broken.
Root cause:
In packages/plugin-ecommerce/src/payments/adapters/stripe/initiatePayment.ts (L79:86), the cart items are flattened before being written into the new transaction:
const { product: _product, variant: _variant, ...customProperties } = item
return {
...customProperties,
product: productID,
quantity: item.quantity,
...(variantID ? { variant: variantID } : {}),
}
Payload auto-generates an id for every array row, including rows in cart.items. The destructure strips product and variant but leaves id in customProperties, so the cart item's id ends up on each entry in flattenedCart. That array is then passed as items to payload.create({ collection: transactionsSlug, ... }).
The Drizzle adapter honors explicit id values rather than generating new ones, so the cart item's id is reused as the id of the new transactions.items row.
First attempt: row inserted successfully with id = .
Second attempt: same cart, same item id, but a row with that id already exists from the first attempt → unique constraint violation.
The cart isn't cleared between attempts (it shouldn't be, the customer hasn't paid yet), so the ids don't change, and every retry hits the same collision.
The error in the console:
[00:14:16] ERROR: Error initiating payment with Stripe
err: {
"type": "ValidationError",
"message": "The following field is invalid: id",
"stack":
ValidationError: The following field is invalid: id
at handleUpsertError (file:///Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/@payloadcms+drizzle@3.84.1_@types+pg@8.20.0_payload@3.84.1_graphql@16.13.2_typescript@5.7.2__pg@8.20.0/node_modules/@payloadcms/drizzle/dist/upsertRow/handleUpsertError.js:48:15)
at upsertRow (file:///Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/@payloadcms+drizzle@3.84.1_@types+pg@8.20.0_payload@3.84.1_graphql@16.13.2_typescript@5.7.2__pg@8.20.0/node_modules/@payloadcms/drizzle/dist/upsertRow/index.js:623:9)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async Object.create (file:///Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/@payloadcms+drizzle@3.84.1_@types+pg@8.20.0_payload@3.84.1_graphql@16.13.2_typescript@5.7.2__pg@8.20.0/node_modules/@payloadcms/drizzle/dist/create.js:9:20)
at async createOperation (file:///Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/payload@3.84.1_graphql@16.13.2_typescript@5.7.2/node_modules/payload/dist/collections/operations/create.js:193:19)
at async Object.initiatePayment (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/ssr/0jcz_@payloadcms_plugin-ecommerce_dist_0rq_a9_..js:7927:33)
at async /Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/ssr/0jcz@payloadcms_plugin-ecommerce_dist_0rq_a9_..js:2949:37
at async handleEndpoints (file:///Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/payload@3.84.1_graphql@16.13.2_typescript@5.7.2/node_modules/payload/dist/utilities/handleEndpoints.js:198:26)
at async /Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/[root-of-the-server]__0xnv31e..js:15340:26
at async AppRouteRouteModule.do (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js:5:40115)
at async AppRouteRouteModule.handle (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js:5:47321)
at async responseGenerator (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/0glh_next_0qm9k.q..js:19968:38)
at async AppRouteRouteModule.handleResponse (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js:1:227216)
at async handleResponse (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/0glh_next_0qm9k.q..js:20031:32)
at async Module.handler (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/0glh_next_0qm9k.q..js:20085:13)
at async DevServer.renderToResponseWithComponentsImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1454:9)
at async DevServer.renderPageComponent (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1506:24)
at async DevServer.renderToResponseImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1556:32)
at async DevServer.pipeImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1043:25)
at async NextNodeServer.handleCatchallRenderRequest (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/next-server.js:338:17)
at async DevServer.handleRequestImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:934:17)
at async /Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/dev/next-dev-server.js:394:20
at async Span.traceAsyncFn (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/trace/trace.js:164:20)
at async DevServer.handleRequest (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/dev/next-dev-server.js:390:24)
at async invokeRender (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:266:21)
at async handleRequest (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:465:24)
at async requestHandlerImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:514:13)
at async Server.requestListener (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/start-server.js:225:13)
"data": {
"collection": "transactions",
"errors": [
{
"message": "Value must be unique",
"path": "id"
}
]
},
"isOperational": true,
"isPublic": true,
"status": 400,
"name": "ValidationError"
}
POST /api/payments/stripe/initiate 500 in 994ms (next.js: 218ms, application-code: 776ms)
[00:14:16] ERROR: Error initiating payment.
err: {
"type": "Error",
"message": "The following field is invalid: id",
"stack":
Error: The following field is invalid: id
at Object.initiatePayment (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/ssr/0jcz_@payloadcms_plugin-ecommerce_dist_0rq_a9_..js:7960:19)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async /Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/ssr/0jcz@payloadcms_plugin-ecommerce_dist_0rq_a9_..js:2949:37
at async handleEndpoints (file:///Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/payload@3.84.1_graphql@16.13.2_typescript@5.7.2/node_modules/payload/dist/utilities/handleEndpoints.js:198:26)
at async /Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/[root-of-the-server]__0xnv31e..js:15340:26
at async AppRouteRouteModule.do (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js:5:40115)
at async AppRouteRouteModule.handle (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js:5:47321)
at async responseGenerator (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/0glh_next_0qm9k.q..js:19968:38)
at async AppRouteRouteModule.handleResponse (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js:1:227216)
at async handleResponse (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/0glh_next_0qm9k.q..js:20031:32)
at async Module.handler (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/0glh_next_0qm9k.q..js:20085:13)
at async DevServer.renderToResponseWithComponentsImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1454:9)
at async DevServer.renderPageComponent (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1506:24)
at async DevServer.renderToResponseImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1556:32)
at async DevServer.pipeImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1043:25)
at async NextNodeServer.handleCatchallRenderRequest (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/next-server.js:338:17)
at async DevServer.handleRequestImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:934:17)
at async /Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/dev/next-dev-server.js:394:20
at async Span.traceAsyncFn (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/trace/trace.js:164:20)
at async DevServer.handleRequest (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/dev/next-dev-server.js:390:24)
at async invokeRender (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:266:21)
at async handleRequest (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:465:24)
at async requestHandlerImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:514:13)
at async Server.requestListener (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/start-server.js:225:13)
}
Link to the code that reproduces this issue
https://github.com/payloadcms/payload/blob/main/templates/ecommerce/src/components/checkout/CheckoutPage.tsx
Reproduction Steps
- Create a fresh payload project using
npx create-payload-app with the E-Commerce plugin + Postgres
- Add Stripe Credentials to .env
- Seed the database from the Admin Dashboard
- Add any of the seeded products to cart and go to checkout
- Enter mock shipping info or use session data and hit "Go to payment". The payment options provided by stripe should load properly
- Leave the checkout page
- Come back to the checkout page and hit "Go to payment" again. Should throw the error.
Which area(s) are affected?
plugin: ecommerce
Environment Info
Binaries:
Node: 22.19.0
npm: 11.12.1
Yarn: N/A
pnpm: 10.30.0
Relevant Packages:
payload: 3.84.1
next: 16.2.3
@payloadcms/db-postgres: 3.84.1
@payloadcms/drizzle: 3.84.1
@payloadcms/email-nodemailer: 3.84.1
@payloadcms/graphql: 3.84.1
@payloadcms/live-preview: 3.84.1
@payloadcms/live-preview-react: 3.84.1
@payloadcms/next/utilities: 3.84.1
@payloadcms/plugin-form-builder: 3.84.1
@payloadcms/plugin-seo: 3.84.1
@payloadcms/richtext-lexical: 3.84.1
@payloadcms/translations: 3.84.1
@payloadcms/ui/shared: 3.84.1
react: 19.2.4
react-dom: 19.2.4
Operating System:
Platform: darwin
Arch: arm64
Version: Darwin Kernel Version 25.2.0: Tue Nov 18 21:08:48 PST 2025; root:xnu-12377.61.12~1/RELEASE_ARM64_T8132
Available memory (MB): 24576
Available CPU cores: 10
Describe the Bug
If a customer clicks "Go to payment" on the checkout, then cancels and clicks it again or any flow that triggers initiatePayment twice for the same cart the second attempt fails. The user is shown an error and cannot complete checkout until the cart is cleared and rebuilt.
Expected behavior:
A customer should be able to start, cancel, and restart payment for the same cart as many times as needed. Each initiatePayment call should produce a valid transaction record without colliding with previous attempts.
Actual behavior:
The second initiatePayment call throws a unique constraint error on the transactions.id path and never reaches Stripe-side completion. From the customer's perspective, checkout is broken.
Root cause:
In packages/plugin-ecommerce/src/payments/adapters/stripe/initiatePayment.ts (L79:86), the cart items are flattened before being written into the new transaction:
Payload auto-generates an id for every array row, including rows in cart.items. The destructure strips product and variant but leaves id in customProperties, so the cart item's id ends up on each entry in flattenedCart. That array is then passed as items to payload.create({ collection: transactionsSlug, ... }).
The Drizzle adapter honors explicit id values rather than generating new ones, so the cart item's id is reused as the id of the new transactions.items row.
First attempt: row inserted successfully with id = .
Second attempt: same cart, same item id, but a row with that id already exists from the first attempt → unique constraint violation.
The cart isn't cleared between attempts (it shouldn't be, the customer hasn't paid yet), so the ids don't change, and every retry hits the same collision.
The error in the console:
[00:14:16] ERROR: Error initiating payment with Stripe
err: {
"type": "ValidationError",
"message": "The following field is invalid: id",
"stack":
ValidationError: The following field is invalid: id
at handleUpsertError (file:///Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/@payloadcms+drizzle@3.84.1_@types+pg@8.20.0_payload@3.84.1_graphql@16.13.2_typescript@5.7.2__pg@8.20.0/node_modules/@payloadcms/drizzle/dist/upsertRow/handleUpsertError.js:48:15)
at upsertRow (file:///Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/@payloadcms+drizzle@3.84.1_@types+pg@8.20.0_payload@3.84.1_graphql@16.13.2_typescript@5.7.2__pg@8.20.0/node_modules/@payloadcms/drizzle/dist/upsertRow/index.js:623:9)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async Object.create (file:///Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/@payloadcms+drizzle@3.84.1_@types+pg@8.20.0_payload@3.84.1_graphql@16.13.2_typescript@5.7.2__pg@8.20.0/node_modules/@payloadcms/drizzle/dist/create.js:9:20)
at async createOperation (file:///Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/payload@3.84.1_graphql@16.13.2_typescript@5.7.2/node_modules/payload/dist/collections/operations/create.js:193:19)
at async Object.initiatePayment (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/ssr/0jcz_@payloadcms_plugin-ecommerce_dist_0rq_a9_..js:7927:33)
at async /Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/ssr/0jcz@payloadcms_plugin-ecommerce_dist_0rq_a9_..js:2949:37
at async handleEndpoints (file:///Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/payload@3.84.1_graphql@16.13.2_typescript@5.7.2/node_modules/payload/dist/utilities/handleEndpoints.js:198:26)
at async /Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/[root-of-the-server]__0xnv31e..js:15340:26
at async AppRouteRouteModule.do (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js:5:40115)
at async AppRouteRouteModule.handle (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js:5:47321)
at async responseGenerator (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/0glh_next_0qm9k.q..js:19968:38)
at async AppRouteRouteModule.handleResponse (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js:1:227216)
at async handleResponse (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/0glh_next_0qm9k.q..js:20031:32)
at async Module.handler (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/0glh_next_0qm9k.q..js:20085:13)
at async DevServer.renderToResponseWithComponentsImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1454:9)
at async DevServer.renderPageComponent (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1506:24)
at async DevServer.renderToResponseImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1556:32)
at async DevServer.pipeImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1043:25)
at async NextNodeServer.handleCatchallRenderRequest (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/next-server.js:338:17)
at async DevServer.handleRequestImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:934:17)
at async /Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/dev/next-dev-server.js:394:20
at async Span.traceAsyncFn (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/trace/trace.js:164:20)
at async DevServer.handleRequest (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/dev/next-dev-server.js:390:24)
at async invokeRender (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:266:21)
at async handleRequest (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:465:24)
at async requestHandlerImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:514:13)
at async Server.requestListener (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/start-server.js:225:13)
"data": {
"collection": "transactions",
"errors": [
{
"message": "Value must be unique",
"path": "id"
}
]
},
"isOperational": true,
"isPublic": true,
"status": 400,
"name": "ValidationError"
}
POST /api/payments/stripe/initiate 500 in 994ms (next.js: 218ms, application-code: 776ms)
[00:14:16] ERROR: Error initiating payment.
err: {
"type": "Error",
"message": "The following field is invalid: id",
"stack":
Error: The following field is invalid: id
at Object.initiatePayment (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/ssr/0jcz_@payloadcms_plugin-ecommerce_dist_0rq_a9_..js:7960:19)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async /Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/ssr/0jcz@payloadcms_plugin-ecommerce_dist_0rq_a9_..js:2949:37
at async handleEndpoints (file:///Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/payload@3.84.1_graphql@16.13.2_typescript@5.7.2/node_modules/payload/dist/utilities/handleEndpoints.js:198:26)
at async /Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/[root-of-the-server]__0xnv31e..js:15340:26
at async AppRouteRouteModule.do (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js:5:40115)
at async AppRouteRouteModule.handle (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js:5:47321)
at async responseGenerator (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/0glh_next_0qm9k.q..js:19968:38)
at async AppRouteRouteModule.handleResponse (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js:1:227216)
at async handleResponse (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/0glh_next_0qm9k.q..js:20031:32)
at async Module.handler (/Users/emircelovic/Desktop/Development/payload-cms-test/.next/dev/server/chunks/0glh_next_0qm9k.q..js:20085:13)
at async DevServer.renderToResponseWithComponentsImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1454:9)
at async DevServer.renderPageComponent (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1506:24)
at async DevServer.renderToResponseImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1556:32)
at async DevServer.pipeImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:1043:25)
at async NextNodeServer.handleCatchallRenderRequest (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/next-server.js:338:17)
at async DevServer.handleRequestImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/base-server.js:934:17)
at async /Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/dev/next-dev-server.js:394:20
at async Span.traceAsyncFn (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/trace/trace.js:164:20)
at async DevServer.handleRequest (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/dev/next-dev-server.js:390:24)
at async invokeRender (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:266:21)
at async handleRequest (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:465:24)
at async requestHandlerImpl (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:514:13)
at async Server.requestListener (/Users/emircelovic/Desktop/Development/payload-cms-test/node_modules/.pnpm/next@16.2.3_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.77.4/node_modules/next/dist/server/lib/start-server.js:225:13)
}
Link to the code that reproduces this issue
https://github.com/payloadcms/payload/blob/main/templates/ecommerce/src/components/checkout/CheckoutPage.tsx
Reproduction Steps
npx create-payload-appwith the E-Commerce plugin + PostgresWhich area(s) are affected?
plugin: ecommerce
Environment Info