Your live stream just learned how the room feels.
Point Sentiment at any audio, chat, or video stream and get back how it feels: a score and labels, from one call that round-trips in about 300ms. Nothing to train, nothing to host; auth and metering settle on the WAVE plane, so you pay per use.
The moment your stream turns, you're the last to know: until now
Chat goes toxic, an audience quietly checks out, a call sours. You usually find out in the postmortem, after it already cost you. Sentiment tells you while it's still happening, when the outcome is still yours to change.
One call, no stack to run
One authenticated call, any source: audio, chat, or video, comes back as {score, labels[]}. Nothing to train, no inference to run, no moderation stack to host. Auth, entitlement, and metering federate through api.wave.online, and you pay per use, so the whole thing is a POST, not a project.
$ curl -s -X POST https://api.wave.online/v1/sentiment \
-H "Authorization: Bearer $WAVE_API_KEY" -H "Content-Type: application/json" \
-d '{"source":"this launch went great"}'
{"error":{"code":"SCOPE_INSUFFICIENT","message":"requires scope: sentiment:write",
"required_scope":"sentiment:write","doc_url":"https://gateway.wave.online/.well-known/wave-scopes.json"}}
# route is live and scope-gated: issue a key with sentiment:write to score a stream
One signal on the plane you already carry
Sentiment is one signal on the WAVE protocol plane. The same stream you already move, transcribe, or caption through WAVE can be scored and moderated on the same plane: one bearer token, one meter, one bill. Reading the room stops being a separate system and becomes another line on the wave you're already carrying.
Federated: auth, entitlement, and metering run through api.wave.online; this spoke renders the front-door and forwards the rest.