v0 API messages returning empty assistant content and message.finished hooks failing to fire

Problem

I use v0 APIs extensively to create projects, initialize chats, and send chat messages to build my web apps. I also use v0 hooks to subscribe to message.finished events.

Current Behavior

  • Problem 1: Sending POST /v1/chats/{chatId}/messages occasionally does nothing, even though the endpoint returns 200 OK.
  • Problem 2: When messages are finished, the message.finished events are NOT firing.
  • Sending chat messages via the website (v0.app) works fine.

Observations when invoking POST /v1/chats/{chatId}/messages

  • 200 OK is returned.
  • The message I sent is returned in the response’s messages array, with the full string contents of my prompt that I sent in my HTTP request.
  • The assistant message is also returned in the response’s messages array as the last item, with an empty content string.

For example:

{
    "id": "ad7AMqvzcTgAyLzznXI3OeBhNvFBNiBe",
    "object": "message",
    "content": "",
    "createdAt": "2026-03-25T23:41:41.653Z",
    "type": "message",
    "role": "assistant",
    "apiUrl": "https://api.v0.dev/v1/chats/GgGvJQlQziP/messages/ad7AMqvzcTgAyLzznXI3OeBhNvFBNiBe",
    "authorId": null
}

These were all working fine 24 hours ago.

Can a v0/Vercel staff look into this?

Did you know there’s another category dedicated to v0 topics? A human should be here soon to help, but the answer may already be available even faster in one of these other posts.

Our docs are a great place to start.

We also have a walkthrough to help guide your workflow.

And these recordings can give you a look at v0 features and strategies in action shown by our Community:

https://community.vercel.com/tags/c/events/42/v0

Update on my end.

I updated the POST request body to use “sync” response mode, and it fixed it both problems.

The weird thing is that I’ve been using this API pattern for the past 3 months with no issues, so it was a silent behavioral change made by v0 overnight.

Previously:

{
    "responseMode": "async",
    "modelConfiguration": {
        "imageGenerations": false,
        "thinking": false
    },
    "system": "You are a senior full-stack developer ...",
    "message": "Build something ..."
}

Now:

{
    "responseMode": "sync", // CHANGED
    "modelConfiguration": {
        "imageGenerations": false,
        "thinking": false
    },
    "system": "You are a senior full-stack developer ...",
    "message": "Build something ..."
}