From f148856b1dc064f2537fd0bae59730d0212f3812 Mon Sep 17 00:00:00 2001 From: Martin Porwoll Date: Sun, 1 Mar 2026 10:21:44 +0000 Subject: [PATCH] fix: use _payload JSON field for Payload CMS upload Payload CMS REST API requires document data (alt, tenant, etc.) as a JSON string in a _payload form field, not as individual form fields. Co-Authored-By: Claude Opus 4.6 --- src/payload/client.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/payload/client.ts b/src/payload/client.ts index 0f6dce9..2d2e821 100644 --- a/src/payload/client.ts +++ b/src/payload/client.ts @@ -100,9 +100,14 @@ class PayloadClient { async uploadMedia(file: Buffer, filename: string, mimeType: string, options: MediaUploadOptions): Promise { const formData = new FormData(); - formData.append('alt', options.alt); - if (options.caption) formData.append('caption', options.caption); - formData.append('tenant', String(options.tenantId)); + + // Payload CMS requires document data as JSON in the _payload field + const payloadData: Record = { + alt: options.alt, + tenant: options.tenantId, + }; + if (options.caption) payloadData.caption = options.caption; + formData.append('_payload', JSON.stringify(payloadData)); const arrayBuffer = new ArrayBuffer(file.byteLength); new Uint8Array(arrayBuffer).set(file);