You can use Vercel Serverless Functions to recieve webhooks from third-party services like Stripe. Certain providers require access to the raw body inside the function to validate the signature from the request.
Accessing the raw body from the request
export async function POST(request: Request) { const rawBody = await request.text() return Response.json({ rawBody })}
Testing your function locally
You can verify your function can accept and parse raw bodies locally:
- Start your local development server with
vercel dev
(ornext dev
). - In another terminal window, run the
cURL
command below.
curl -X POST -H "Content-Type: text/plain" --data "This is raw data" http://localhost:3000/api/test
You should see a response like {"rawBody": "This is raw data"}
.