https://docs.ipfs.io/reference/api/http/#api-v0-pubsub-pub states that payload should go in a querystring param called arg while i think this somehow works with some serialisation it should say to use the request body instead, just like the dht/put https://docs.ipfs.io/reference/api/http/#api-v0-dht-put
We are updating js-ipfs-http-client to use body instead of querystring in this PR ipfs/js-ipfs#3013.