VoteGateError: {
    code: "vote_required";
    message: string;
    premiumUrl: string;
    voteUrl: string;
}

The error a test route answers with when the caller owes a vote.

Six methods can return it: sendTestNotification, sendTestKickBotNotification, sendGreetOrBirthdayMessage, sendTestDropNotification, testNotification (games) and testClipForward. All of them answer 403.

Match on code, never on message. The sentence is copy and will be edited; the code is the contract. message exists as the fallback for a consumer that has not been taught about the gate.

voteUrl is already attributed - it routes through /ref and carries the key that tells votes this gate earned apart from voluntary ones. Render it exactly as served; a hand-built top.gg link works, converts, and records as unattributed forever. premiumUrl carries ?from=lock:skipVoting for the same reason on the purchase side.