diff --git a/src/lib/services/documenso-client.ts b/src/lib/services/documenso-client.ts index a1a3cb14..d0c553ac 100644 --- a/src/lib/services/documenso-client.ts +++ b/src/lib/services/documenso-client.ts @@ -309,7 +309,14 @@ export async function createDocument( portId?: string, meta?: CreateDocumentMeta, ): Promise { - const safeRecipients = applyRecipientRedirect(recipients); + // Documenso's API requires UPPERCASE recipient roles + // (CC | SIGNER | VIEWER | APPROVER | ASSISTANT). The CRM uses lowercase + // role strings internally ('signer' / 'approver'), so normalize here at the + // API boundary — otherwise create fails with a 400 "Invalid enum value". + const safeRecipients = applyRecipientRedirect(recipients).map((r) => ({ + ...r, + role: typeof r.role === 'string' ? r.role.toUpperCase() : r.role, + })); if (env.EMAIL_REDIRECT_TO) { logger.info( { redirected: safeRecipients.length, original: recipients.map((r) => r.email) },