Obtain a user access token with moderator:manage:automod scope for both the broadcaster and the moderator acting on held messages
Subscribe to the channel.chat.message_held EventSub subscription type via POST to https://api.twitch.tv/helix/eventsub/subscriptions, specifying your webhook callback URL or WebSocket session ID
When your server receives an event notification for a held message, inspect the payload for the message ID, sender user ID, and the message text
To approve a held message, POST to https://api.twitch.tv/helix/moderation/automod/message with action=ALLOW and the message_id; to deny it, use action=DENY
Respond to Twitch's webhook challenge during subscription creation with the challenge string to complete verification; failure to respond within the required window causes the subscription to fail
Known gotchas
Approval or denial of a held AutoMod message must occur within the platform's hold window (typically a few minutes); messages whose hold window expires are automatically denied
The moderator_id in the approval call must match the user ID of the token used — you cannot approve messages as a different moderator than the authenticated user
EventSub webhook subscriptions require your callback URL to be publicly reachable and return a 2xx response within 10 seconds; use a queue to process payloads asynchronously if your processing takes longer
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp