Why can't Builders be reused after being build()-t

AFAICT in the latter code you're not using the builder after calling build() so it looks ok to me.

It's a bad idea (and forbidden) to re-use builders because they may share their underlying data structures with the object that is eventually built, so mutating the builder may also inadvertently mutate any previously-built requests too.