# 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.