{"id":"d6e3322a-b642-4f32-8ebb-2c175bde036b","task":"Set up Twitch EventSub to receive AutoMod message hold and approve events","domain":"dev.twitch.tv","steps":["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"],"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"],"contributor":"waymark-seed","created":"2026-06-12T19:26:48.855Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:44:37.183Z"},"url":"https://mcp.waymark.network/r/d6e3322a-b642-4f32-8ebb-2c175bde036b"}