diff --git a/.changeset/good-cheetahs-tap.md b/.changeset/good-cheetahs-tap.md
new file mode 100644
index 0000000..c2bd73d
--- /dev/null
+++ b/.changeset/good-cheetahs-tap.md
@@ -0,0 +1,5 @@
+---
+'pliny': patch
+---
+
+Fix newsletter route handlers
diff --git a/.changeset/pre.json b/.changeset/pre.json
index 240a5c5..ec9e135 100644
--- a/.changeset/pre.json
+++ b/.changeset/pre.json
@@ -8,6 +8,7 @@
   "changesets": [
     "fuzzy-apples-judge",
     "giant-geckos-dress",
+    "good-cheetahs-tap",
     "good-knives-tan",
     "great-chairs-warn",
     "metal-coats-grab",
diff --git a/packages/pliny/CHANGELOG.md b/packages/pliny/CHANGELOG.md
index 7d4c196..afd2c69 100644
--- a/packages/pliny/CHANGELOG.md
+++ b/packages/pliny/CHANGELOG.md
@@ -1,5 +1,11 @@
 # pliny
 
+## 0.1.0-beta.6
+
+### Patch Changes
+
+- 21080de: Fix newsletter route handlers
+
 ## 0.1.0-beta.5
 
 ### Patch Changes
diff --git a/packages/pliny/package.json b/packages/pliny/package.json
index 20f96de..fe00ebc 100644
--- a/packages/pliny/package.json
+++ b/packages/pliny/package.json
@@ -2,7 +2,7 @@
   "name": "pliny",
   "description": "Main entry point for pliny components",
   "homepage": "https://github.com/timlrx/pliny",
-  "version": "0.1.0-beta.5",
+  "version": "0.1.0-beta.6",
   "type": "module",
   "exports": {
     "./*": "./*",
diff --git a/packages/pliny/src/newsletter/buttondown.ts b/packages/pliny/src/newsletter/buttondown.ts
index 5363970..320d72d 100644
--- a/packages/pliny/src/newsletter/buttondown.ts
+++ b/packages/pliny/src/newsletter/buttondown.ts
@@ -1,8 +1,4 @@
-import { NextApiRequest } from 'next'
-import { NextRequest } from 'next/server'
-
-export const buttondownHandler = async (req: NextApiRequest | NextRequest) => {
-  const { email } = req.body
+export const buttondownSubscribe = async (email: string) => {
   const API_KEY = process.env.BUTTONDOWN_API_KEY
   const API_URL = 'https://api.buttondown.email/v1/'
   const buttondownRoute = `${API_URL}subscribers`
diff --git a/packages/pliny/src/newsletter/convertkit.ts b/packages/pliny/src/newsletter/convertkit.ts
index 4557fd1..4ecf757 100644
--- a/packages/pliny/src/newsletter/convertkit.ts
+++ b/packages/pliny/src/newsletter/convertkit.ts
@@ -1,8 +1,4 @@
-import { NextApiRequest } from 'next'
-import { NextRequest } from 'next/server'
-
-export const convertkitHandler = async (req: NextApiRequest | NextRequest) => {
-  const { email } = req.body
+export const convertkitSubscribe = async (email: string) => {
   const FORM_ID = process.env.CONVERTKIT_FORM_ID
   const API_KEY = process.env.CONVERTKIT_API_KEY
   const API_URL = 'https://api.convertkit.com/v3/'
diff --git a/packages/pliny/src/newsletter/emailOctopus.ts b/packages/pliny/src/newsletter/emailOctopus.ts
index 0aa3e7a..bdc5b9f 100644
--- a/packages/pliny/src/newsletter/emailOctopus.ts
+++ b/packages/pliny/src/newsletter/emailOctopus.ts
@@ -1,8 +1,4 @@
-import { NextApiRequest } from 'next'
-import { NextRequest } from 'next/server'
-
-export const emailOctopusHandler = async (req: NextApiRequest | NextRequest) => {
-  const { email } = req.body
+export const emailOctopusSubscribe = async (email: string) => {
   const API_KEY = process.env.EMAILOCTOPUS_API_KEY
   const LIST_ID = process.env.EMAILOCTOPUS_LIST_ID
   const API_URL = 'https://emailoctopus.com/api/1.6/'
diff --git a/packages/pliny/src/newsletter/index.ts b/packages/pliny/src/newsletter/index.ts
index eee655e..952a0b5 100644
--- a/packages/pliny/src/newsletter/index.ts
+++ b/packages/pliny/src/newsletter/index.ts
@@ -1,12 +1,12 @@
 import { NextApiRequest, NextApiResponse } from 'next'
 import { NextResponse } from 'next/server'
 import type { NextRequest } from 'next/server'
-import { buttondownHandler } from './buttondown'
-import { convertkitHandler } from './convertkit'
-import { mailchimpHandler } from './mailchimp'
-import { klaviyoHandler } from './klaviyo'
-import { revueHandler } from './revue'
-import { emailOctopusHandler } from './emailOctopus'
+import { buttondownSubscribe } from './buttondown'
+import { convertkitSubscribe } from './convertkit'
+import { mailchimpSubscribe } from './mailchimp'
+import { klaviyoSubscribe } from './klaviyo'
+import { revueSubscribe } from './revue'
+import { emailOctopusSubscribe } from './emailOctopus'
 
 export interface NewsletterConfig {
   provider: 'buttondown' | 'convertkit' | 'klaviyo' | 'mailchimp' | 'revue' | 'emailoctopus'
@@ -31,22 +31,22 @@ async function NewsletterAPIHandler(
     let response: Response
     switch (options.provider) {
       case 'buttondown':
-        response = await buttondownHandler(req)
+        response = await buttondownSubscribe(email)
         break
       case 'convertkit':
-        response = await convertkitHandler(req)
+        response = await convertkitSubscribe(email)
         break
       case 'mailchimp':
-        response = await mailchimpHandler(req)
+        response = await mailchimpSubscribe(email)
         break
       case 'klaviyo':
-        response = await klaviyoHandler(req)
+        response = await klaviyoSubscribe(email)
         break
       case 'revue':
-        response = await revueHandler(req)
+        response = await revueSubscribe(email)
         break
       case 'emailoctopus':
-        response = await emailOctopusHandler(req)
+        response = await emailOctopusSubscribe(email)
         break
       default:
         res.status(500).json({ error: `${options.provider} not supported` })
@@ -61,30 +61,30 @@ async function NewsletterAPIHandler(
 }
 
 async function NewsletterRouteHandler(req: NextRequest, options: NewsletterConfig) {
-  const res = await req.json()
-  if (!res.email) {
+  const { email } = await req.json()
+  if (!email) {
     return NextResponse.json({ error: 'Email is required' }, { status: 400 })
   }
   try {
     let response: Response
     switch (options.provider) {
       case 'buttondown':
-        response = await buttondownHandler(req)
+        response = await buttondownSubscribe(email)
         break
       case 'convertkit':
-        response = await convertkitHandler(req)
+        response = await convertkitSubscribe(email)
         break
       case 'mailchimp':
-        response = await mailchimpHandler(req)
+        response = await mailchimpSubscribe(email)
         break
       case 'klaviyo':
-        response = await klaviyoHandler(req)
+        response = await klaviyoSubscribe(email)
         break
       case 'revue':
-        response = await revueHandler(req)
+        response = await revueSubscribe(email)
         break
       case 'emailoctopus':
-        response = await emailOctopusHandler(req)
+        response = await emailOctopusSubscribe(email)
         break
       default:
         return NextResponse.json({ error: `${options.provider} not supported` }, { status: 500 })
diff --git a/packages/pliny/src/newsletter/klaviyo.ts b/packages/pliny/src/newsletter/klaviyo.ts
index 7d0e2b8..65f0d6f 100644
--- a/packages/pliny/src/newsletter/klaviyo.ts
+++ b/packages/pliny/src/newsletter/klaviyo.ts
@@ -1,8 +1,4 @@
-import { NextApiRequest } from 'next'
-import { NextRequest } from 'next/server'
-
-export const klaviyoHandler = async (req: NextApiRequest | NextRequest) => {
-  const { email } = req.body
+export const klaviyoSubscribe = async (email: string) => {
   const API_KEY = process.env.KLAVIYO_API_KEY
   const LIST_ID = process.env.KLAVIYO_LIST_ID
   const response = await fetch(
diff --git a/packages/pliny/src/newsletter/mailchimp.ts b/packages/pliny/src/newsletter/mailchimp.ts
index ce9eb97..13db78f 100644
--- a/packages/pliny/src/newsletter/mailchimp.ts
+++ b/packages/pliny/src/newsletter/mailchimp.ts
@@ -1,5 +1,3 @@
-import { NextApiRequest } from 'next'
-import { NextRequest } from 'next/server'
 import mailchimp from '@mailchimp/mailchimp_marketing'
 
 mailchimp.setConfig({
@@ -7,9 +5,7 @@ mailchimp.setConfig({
   server: process.env.MAILCHIMP_API_SERVER, // E.g. us1
 })
 
-export const mailchimpHandler = async (req: NextApiRequest | NextRequest) => {
-  const { email } = req.body
-
+export const mailchimpSubscribe = async (email: string) => {
   const response = await mailchimp.lists.addListMember(process.env.MAILCHIMP_AUDIENCE_ID, {
     email_address: email,
     status: 'subscribed',
diff --git a/packages/pliny/src/newsletter/revue.ts b/packages/pliny/src/newsletter/revue.ts
index 75376d0..b6c66a4 100644
--- a/packages/pliny/src/newsletter/revue.ts
+++ b/packages/pliny/src/newsletter/revue.ts
@@ -1,9 +1,4 @@
-import { NextApiRequest } from 'next'
-import { NextRequest } from 'next/server'
-
-export const revueHandler = async (req: NextApiRequest | NextRequest) => {
-  const { email } = req.body
-
+export const revueSubscribe = async (email: string) => {
   const API_KEY = process.env.REVUE_API_KEY
   const API_URL = 'https://www.getrevue.co/api/v2/'
   const revueRoute = `${API_URL}subscribers`