# Upstash REST pub/sub and MONITOR need Server-Sent Events

## The endpoints

- Subscribe: POST /subscribe/chat with header Accept text/event-stream.
  The connection stays open and messages arrive as SSE events.
- Publish: POST /publish/chat/hello. Plain request, immediate response.
- Monitor: POST /monitor with Accept text/event-stream. Streams every
  command hitting the database.

## What goes wrong

1. Forgetting the Accept header: the request completes without
   streaming, or hangs waiting for a body that never comes.
2. Using these in serverless functions: an open SSE stream holds the
   function instance for the stream lifetime. That is one instance per
   subscriber, billed the whole time.
3. Trying MONITOR from a browser: it streams every command including
other clients traffic. It is a debugging tool, not a feature.

## Fix

Set the header explicitly in curl and in your EventSource client:

curl -X POST https://YOUR_REST_URL/subscribe/chat \
  -H "your auth header \
  -H "Accept:text/event-stream"

For production pub/sub consumers, prefer the native protocol with a
long-lived server process over SSE from serverless.

## Verify

Open the subscribe stream, then publish from another terminal. The
message event arrives on the stream within a second.