HTTP streams are sockets and not repositionable. You can be lucky if the seek is inside the current buffer. Possibly peek_string/3 can solve your problem?
I think peek_string/3 could work, but it can’t be used to peek until the end, that is the length must be supplied/known beforehand. Right now I am working around this by using read_string/3 to read the raw response, then reopening it with open_string/2 and passing that stream to json parser.