# Blocking Redis commands are not supported over Upstash REST

## What you see

HTTP 400, or an unsupported-command error, when calling BLPOP, BRPOP,
BRPOPLPUSH, BZPOPMAX, BZPOPMIN, or XREAD/XREADGROUP with BLOCK.

## Why

Blocking commands hold a connection open waiting for data. REST is
request/response per call: there is no connection to hold. The
compatibility table marks all of these unsupported.

## Fix options

1. Poll with a timeout loop. Replace BLPOP with LPOP in a loop that
   sleeps briefly between attempts. Each poll is a billed command, so
   size the sleep to your latency budget.
2. Use the native Redis protocol instead. Over RESP with a persistent
   connection, blocking commands work normally. This is the right call
   for queue consumers.
3. For streams, use non-blocking XREAD (no BLOCK argument) over REST.

## Cost note

Polling every 100ms is 864K commands a day per consumer. At pay as you
go rates that is real money. Prefer the protocol path for
blocking-style consumers, or lengthen the poll interval and accept the
latency.

## Verify

Your consumer processes a pushed item end to end: RPUSH a test item,
watch the consumer pick it up within the expected poll window.