"Send Extension PubSub Message" -- only broadcast target?

Is this endpoint supposed to work with whispers?

Presumably yes. As noted in the link you shared, it invokes the same code as the send() mechanism in the js helper api.

According to that documentation, you should be able to set the target as whisper-<userId>.
send() documentation: https://dev.twitch.tv/docs/extensions/reference#send-functiontarget-contenttype-message

I tried whisper but couldn’t get it working. No error messages.
Can someone confirm that it definitely does work before I sink more time into it?

I can’t get it working either.

I tried sending and listening on a bunch of different variations including a given user’s opaque-id, their actual userId and both of those without the U at the start.

I found 2 things:

a) Even after an account is linked I still get the same opaque userid for a user in onAuthorized , the linking works, I see the green symbol and I can get the real userId on the server by decoding the token but I still get the opaque userId on the client. The one exception is for the channel owner which always gives ‘U[userId]’, but then again even on the server the broadcaster’s opaque id is just their userId. The docs seem to suggest I should get the normal userId for any user after I link.

b) If you decode a non channel owner’s token on the server there is a pubsub_perms field which looks like:
pubsub_perms: { listen: [ ‘broadcast’, ‘whisper-UoHxxxxxx-xxxx’ ] } }
where ‘UoHxxxxxx-xxxx’ is the user’s opaque id. I tried listening on the client and sending to that target on the server but it doesn’t work and like you I get no error.

I am still testing in the testing phase and running on localhost if that matters

I was making a dumb mistake, I got it working.

Try checking your whisper’s response status code which should be 204. For me I was getting status code 400 which doesn’t trigger an error so it was failing silently.