== global limit 12 per minute; four users send 3 requests each GET /api/hello X-User-Id: u1 -> 200 limit=10 remaining=9 retry-after=null scope=user GET /api/hello X-User-Id: u1 -> 200 limit=10 remaining=8 retry-after=null scope=user GET /api/hello X-User-Id: u1 -> 200 limit=10 remaining=7 retry-after=null scope=user GET /api/hello X-User-Id: u2 -> 200 limit=10 remaining=9 retry-after=null scope=user GET /api/hello X-User-Id: u2 -> 200 limit=10 remaining=8 retry-after=null scope=user GET /api/hello X-User-Id: u2 -> 200 limit=10 remaining=7 retry-after=null scope=user GET /api/hello X-User-Id: u3 -> 200 limit=10 remaining=9 retry-after=null scope=user GET /api/hello X-User-Id: u3 -> 200 limit=10 remaining=8 retry-after=null scope=user GET /api/hello X-User-Id: u3 -> 200 limit=10 remaining=7 retry-after=null scope=user GET /api/hello X-User-Id: u4 -> 200 limit=10 remaining=9 retry-after=null scope=user GET /api/hello X-User-Id: u4 -> 200 limit=10 remaining=8 retry-after=null scope=user GET /api/hello X-User-Id: u4 -> 200 limit=10 remaining=7 retry-after=null scope=user == u5 has never called before, so their own bucket is full GET /api/hello X-User-Id: u5 -> 429 limit=12 remaining=0 retry-after=5 scope=global -- u5 was rejected by the global bucket, but their own bucket already paid: 9 of 10 tokens left == five seconds later (Retry-After), u5 tries again GET /api/hello X-User-Id: u5 -> 200 limit=10 remaining=8 retry-after=null scope=user