import { z } from 'zod';
//
// Request schemas
//
/**
* Tag schema for email metadata tracking
*/
const TagSchema = z.object({
name: z.string().describe('Tag name (max 256 chars)'),
value: z.string().describe('Tag value (max 256 chars)'),
});
/**
* Send a single email via Resend
*/
export const SendEmailRequestSchema = z
.object({
to: z
.union([z.string().email(), z.array(z.string().email()).max(50)])
.describe('Recipient email address(es). Max 50 addresses.'),
subject: z.string().describe('Email subject line'),
html: z.string().optional().describe('HTML version of the email body'),
text: z
.string()
.optional()
.describe('Plain text version. Auto-generated from HTML if omitted.'),
cc: z
.union([z.string().email(), z.array(z.string().email())])
.optional()
.describe('CC recipient(s)'),
bcc: z
.union([z.string().email(), z.array(z.string().email())])
.optional()
.describe('BCC recipient(s)'),
reply_to: z
.union([z.string().email(), z.array(z.string().email())])
.optional()
.describe('Reply-to email address(es)'),
tags: z
.array(TagSchema)
.max(50)
.optional()
.describe('Custom metadata tags for tracking (max 50)'),
})
.refine((data) => data.html || data.text, {
message: 'Either html or text must be provided',
path: ['html', 'text'],
});
/**
* Single email in a batch
*/
const BatchEmailSchema = z.object({
to: z
.union([z.string().email(), z.array(z.string().email()).max(50)])
.describe('Recipient email address(es)'),
subject: z.string().describe('Email subject line'),
html: z.string().optional().describe('HTML version of the email body'),
text: z.string().optional().describe('Plain text version'),
cc: z
.union([z.string().email(), z.array(z.string().email())])
.optional()
.describe('CC recipient(s)'),
bcc: z
.union([z.string().email(), z.array(z.string().email())])
.optional()
.describe('BCC recipient(s)'),
reply_to: z
.union([z.string().email(), z.array(z.string().email())])
.optional()
.describe('Reply-to email address(es)'),
tags: z
.array(TagSchema)
.max(50)
.optional()
.describe('Custom metadata tags for tracking'),
});
/**
* Send multiple emails in a single API call
*/
export const SendBatchEmailsRequestSchema = z.object({
emails: z
.array(BatchEmailSchema)
.min(1)
.max(100)
.describe('Array of emails to send (max 100)'),
});
//
// Response schemas
//
export const SendEmailResponseSchema = z.object({
id: z.string().describe('The ID of the sent email'),
});
export const SendBatchEmailsResponseSchema = z.object({
data: z.array(
z.object({
id: z.string().describe('The ID of the sent email'),
})
),
});