Saturday, April 4, 2026
Logo

Discord delays global age verification rollout after criticism

Discord is postponing its controversial age verification policy after users of the popular platform for gamers to communicate online expressed strong objections and privacy concerns.

BusinessBy Wire ServicesFebruary 25, 202613 min read

Last updated: April 4, 2026, 12:16 AM

Share:
Discord delays global age verification rollout after criticism

A Discord display stands at the company’s booth at the Game Developers Conference 2023, in San Francisco, March 22, 2023. (AP Photo/Jeff Chiu, File)

By KAITLYN HUAMANI Updated [hour]:[minute] [AMPM] [timezone], [monthFull] [day], [year] --> Add AP News on Google Add AP News as your preferred source to see more of our stories on Google. --> Share (function () { const counter = document.getElementById("scrollToComments"); const HEADER_OFFSET = 120; function findCommentsModule() { return document.querySelector('.vf3-comments, vf-conversations, [data-test="vf-conversations-root-element"]'); } function maybeShowCounter() { if (findCommentsModule()) { counter.style.display = "inline-flex"; } else { counter.style.display = "none"; } } // Show only when Viafoura is present maybeShowCounter(); // Watch DOM for late loads const observer = new MutationObserver(maybeShowCounter); observer.observe(document.documentElement, { childList: true, subtree: true }); // Scroll action counter.addEventListener("click", function () { const el = findCommentsModule(); if (!el) return; const top = el.getBoundingClientRect().top + window.scrollY - HEADER_OFFSET; window.scrollTo({ top, behavior: "smooth" }); }); })(); .thin-line-button { display: inline-flex; align-items: center; justify-content: center; border: 1px solid #ccc; height: 30px; padding: 0 10px; cursor: pointer; border-radius: 5px; background: none; text-align: center; font-size: 1.4rem; font-weight: 700; white-space: nowrap; flex-shrink: 0; color: inherit; transition: none; /* Remove animation effect */ } [data-featured-type="bgBlackTextWhite"] .thin-line-button { color: #000; background: white; } /* Remove hover effect */ .thin-line-button:hover { border: 1px solid #ccc; } .comment-icon { width: 20px; height: 20px; min-width: 20px; min-height: 20px; flex: 0 0 20px; object-fit: contain; display: inline-block; } .Page-actions-commentCounter .embed-caption { display: none; } .vf-comments-count.vf-is-logged-in { margin-left: 4px; }

Discord, the popular platform for gamers to communicate online, is postponing its controversial age verification policy after receiving swift backlash from users with concerns about their privacy.

The global rollout of the system is now delayed to the second half of 2026, Discord’s Chief Technology Officer and co-founder Stanislav Vishnevskiy wrote in a Tuesday blog post acknowledging that the company “missed the mark.”

“Many of you are worried that this is just another big tech company finding new ways to collect your personal data. That we’re creating a problem to justify invasive solutions,” Vishnevskiy wrote. “I get that skepticism. It’s earned, not just toward us, but toward the entire tech industry. But that’s not what we’re doing.”

Discord, which says it has more than 200 million active users, will continue to meet specific legal obligations it has for age verification of users, the company said, but the global expansion of age verification will only come after it makes changes to the initial policy it laid out in early February.

The company announced earlier this month that it would roll out an age verification policy in March that would include face scanning or requests for an ID upload for users it could not determine were adults. This drew swift ire from users. Many pointed to a recent security breach of a third-party provider Discord worked with that exposed government ID photos of up to 70,000 Discord users.

Discord postpones age verification rollout amid criticism, promises transparency 4 MIN READ Vishnevskiy referenced the security breach in the blog post, writing that he understood that incident added to users’ skepticism, but he emphasized the company no longer works with that vendor and has rigorous standards for its partners.

“Every vendor we work with goes through a security and privacy review before integration,” he wrote. “That includes contractual limits on data use, and strict retention and deletion requirements. Information submitted for age verification is stored only for the minimum time necessary, which in most cases means it’s deleted immediately. If a vendor doesn’t pass, we don’t work with them.”

One of the vendors that didn’t meet the mark was Persona, an identity verification service. Vishnevskiy said Discord ran a limited test with Persona in the United Kingdom only in January. The company was not able to meet Discord’s standard for facial age estimation, Vishnevskiy wrote, which stipulates that the estimation “must be performed entirely on-device, meaning your biometric data never leaves your phone.”

The company distanced itself from Persona after that relationship also became the subject of online criticism. Persona is backed by the venture capital firm Founders Fund, which is run by by Palantir Technologies co-founder Peter Thiel. Thiel and Palantir are often criticized for of the company’s partnerships with the government for surveillance purposes, with Palantir recently inking an agreement with U.S. Immigration and Customs Enforcement to streamline the process of identifying and deporting people the agency is targeting.

The backlash to the original policy and even the revised version came even though Vishnevskiy wrote that for “90%+ of users, nothing changes.”

Discord is able to proactively determine the ages of the vast majority of users by looking at account-level signals. Those include how long the account has existed, whether there is a payment method on file, the types of servers a user is in and general patterns of account activity, Vishnevskiy wrote. He emphasized the company does not read messages, analyze conversations or look at account content to estimate users ages.

For the minority of users whose ages Discord cannot determine, the company is now working to offer more options beyond face scanning and requesting an ID, including credit card verification. The company is going to “complete and expand” alternative options before rolling out the new system.

Users who choose not to verify their age will get to keep their account, servers, friends list, direct messages and voice chat, but will not be able to access age-restricted content or change certain default safety settings designed to protect teens, Vishnevskiy wrote.

Discord promised users it will publish a detailed post explaining how its automatic age determination systems work and will document every verification vendor and their practices on its website.

KAITLYN HUAMANI Huamani covers social media and internet culture for The Associated Press. mailto window.vfQ = window.vfQ || []; // Tags that always block comments on ANY story, regardless of section. Example ['no_comment','legal proceedings'] const COMMENT_BLOCK_TAGS = ['no_comment']; // Section name we care about (as it appears in ). // We'll normalize to lowercase, so "World News" -> "world news". const WORLD_NEWS_SECTION = 'world news'; // Tags that block comments ONLY when the story is in the World News section. const WORLD_NEWS_EXCLUSION_TAGS = ['crime','lawsuits','law enforcement','legal settlements']; window.vfQ = window.vfQ || []; // Zephr mod handling + prepublish + login failure handling setTimeout(() => { const all = document.querySelectorAll('.Zephr.Zephr-mod'); // If there's more than one of this element, delete the one with ID if (all.length > 1) { const withId = document.getElementById('viafoura-zephr-mod'); if (withId) withId.remove(); return } // prepublish → Zephr auth / walls handling window.vfQ.push(() => { if (!window.vf || typeof window.vf.$prepublish !== 'function') return; window.vf.$prepublish((channel, event, ...args) => { if (channel === 'authentication' && event === 'required') { window.vf.$publish && window.vf.$publish('tray', 'close'); window.Zephr?.openModal?.(); // window.location.href = `/login?target=${window.location.pathname}` return false; } else if (channel === 'walls' && event === 'post-attempt') { if (window.zephrQueue && typeof window.zephrQueue.enqueue === 'function') { window.zephrQueue.enqueue(async (zephr) => { if ( !zephr?.accessDetails?.authenticated || !window.Zephr?.openModal ) { return; } window.Zephr.openModal(); }); } return { channel, event, args }; } else { return { channel, event, args }; } }); }); // login failure → show ban message + tooltip window.vfQ.push(() => { if (!window.vf || typeof window.vf.$subscribe !== 'function') return; window.vf.$subscribe('login', 'failure', (errorContext) => { if (!errorContext) return; const isBanned = errorContext.error_key === 'login_banned'; if (!isBanned) return; let reasonText = 'Your account has been permanently banned from posting.'; if (errorContext.isPermanent === 0) { const date = new Date(errorContext.endDate); const formatted = date.toLocaleString('en-US', { month: 'short', day: 'numeric', year: 'numeric', hour: 'numeric', minute: '2-digit', hour12: true, }); reasonText = 'Your account has been banned from posting until ' + formatted; } waitForEditorWrapper((wrapper) => { if (wrapper && !document.querySelector('.vf-ban-container')) { const container = document.createElement('div'); container.className = 'vf-ban-container'; // Message const message = document.createElement('div'); message.className = 'vf-ban-message'; message.innerHTML = '❗' + '' + reasonText + ''; // Tooltip trigger if (errorContext.reason) { const tooltip = document.createElement('span'); tooltip.className = 'vf-ban-tooltip'; tooltip.textContent = ' — WHY WAS I BANNED?'; const tooltipContent = document.createElement('div'); tooltipContent.className = 'vf-ban-tooltip-content'; tooltipContent.textContent = errorContext.reason; tooltip.appendChild(tooltipContent); message.appendChild(tooltip); } container.appendChild(message); wrapper.parentNode.insertBefore(container, wrapper.nextSibling); } }); }); }); }, 50); function waitForEditorWrapper(callback, maxTries = 50, interval = 100) { let tries = 0; const iv = setInterval(() => { const wrapper = document.querySelector('.vf-new-content__content-editor-wrapper'); if (wrapper) { clearInterval(iv); callback(wrapper); } else if (++tries >= maxTries) { clearInterval(iv); } }, interval); } function pageHasBlockedTag(tagsToBlock = COMMENT_BLOCK_TAGS) { const metas = Array.from( document.querySelectorAll([ 'meta[property="article:tag"]', 'meta[name="article:tag"]' ].join(',')) ); const pageTags = metas .map(m => (m.getAttribute('content') || '')) .flatMap(c => c.split(',')) .map(s => s.trim().toLowerCase()) .filter(Boolean); const blockSet = new Set( (tagsToBlock || []).map(t => String(t).trim().toLowerCase()).filter(Boolean) ); return pageTags.some(t => blockSet.has(t)); } function getPageSection() { // Look for // or just in case. const meta = document.querySelector( 'meta[property="article:section"], meta[name="article:section"]' ); if (!meta) return ''; return (meta.getAttribute('content') || '').trim().toLowerCase(); } function replaceBellIconInNav(container) { if (!container) return; const bellButtons = container.querySelectorAll( '.comment-nav-right .vf-tray-trigger.comment-nav-right__icon, .vf-tray-trigger[data-test="vf-tray-trigger-bell"]' ); bellButtons.forEach((btn) => { if (btn.dataset.iconSwapped === '1') return; const bellSvg = btn.querySelector('.vf-icon_bell_icon'); if (bellSvg) bellSvg.remove(); const img = document.createElement('img'); img.src = 'https://assets.apnews.com/75/e2/83fe757647f790e4a0bf06370f10/comment-2.png'; img.alt = 'Comments'; img.style.height = '24px'; img.style.width = '24px'; img.style.verticalAlign = 'middle'; img.setAttribute('data-ap-bell', '1'); // precise selector for dark-mode tweak btn.appendChild(img); btn.dataset.iconSwapped = '1'; }); } function injectNoticeInContainer(container) { if (!container) return false; if (container.querySelector('.vf-guidelines-notice')) return true; const header = container.querySelector('.vf-comment-header'); if (!header) return false; const notice = document.createElement('div'); notice.className = 'vf-guidelines-notice'; notice.innerHTML = 'All comments are subject to our ' + 'Community Guidelines.' + 'Please note that comments are not moderated immediately — every post is reviewed before appearing publicly to ensure it meets our community guidelines. This means there may be a delay before your comment is visible.'; header.parentNode.insertBefore(notice, header.nextSibling); return true; } function hideFloatingBellButton() { document.querySelectorAll('.vf-tray-trigger--floating').forEach((btn) => { btn.style.display = 'none'; }); } function moveTrendingAboveCommentsFooter() { const trendingHost = document.getElementById('ap-trending-host'); if (!trendingHost || trendingHost.dataset.moved === '1') return; const footer = document.querySelector('#vf-conversations > div > section > div > footer'); if (footer && footer.parentNode) { footer.parentNode.insertBefore(trendingHost, footer); trendingHost.dataset.moved = '1'; } } function onCommentingLoaded() { const container = document.getElementById('ap-comments'); if (!container) return; injectNoticeInContainer(container); replaceBellIconInNav(container); moveTrendingAboveCommentsFooter(); } function wireViafoura() { if (window.vf && typeof window.vf.$subscribe === 'function') { window.vf.$subscribe('commenting', 'loaded', onCommentingLoaded); } } /* ----------------- DARK THEME HANDLING ----------------- */ function isDarkColor(rgb) { if (!rgb) return false; const m = rgb.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/i); if (!m) return false; const r = +m[1], g = +m[2], b = +m[3]; const lum = (0.2126*r + 0.7152*g + 0.0722*b) / 255; return lum { const cs = getComputedStyle(el); const bgColor = cs.backgroundColor; // Only fix ones that are effectively transparent / not already dark if ( bgColor === 'rgba(0, 0, 0, 0)' || bgColor === 'transparent' ) { el.style.setProperty('--default-color', bg); el.style.setProperty('--background-color', bg); el.style.setProperty('--light-text-on-default-color', text); el.style.setProperty('--dark-text-on-default-color', '#ffffff'); el.style.setProperty('--light-text-on-background-color', text); el.style.setProperty('--dark-text-on-background-color', '#ffffff'); el.style.backgroundColor = bg; el.style.color = text; } }); } function applyDarkThemeIfNeeded() { const container = document.getElementById('ap-comments'); if (!container) return; const useDark = shouldUseDarkTheme(); const bg = useDark ? getEffectiveDarkBg() : null; container.classList.toggle('ap-comments--dark', useDark); if (useDark) { container.style.setProperty('--apc-bg', bg); container.style.setProperty('--apc-text', '#e8e8e8'); container.style.setProperty('--apc-link', '#9ecbff'); container.setAttribute('data-theme', 'dark'); container.style.setProperty('background', 'var(--apc-bg)', 'important'); // Normalize Viafoura / AP-style variables INSIDE the comments container container.style.setProperty('--default-color', bg); container.style.setProperty('--background-color', bg); container.style.setProperty('--light-text-on-default-color', 'rgba(255, 255, 255, 0.8)'); container.style.setProperty('--dark-text-on-default-color', '#ffffff'); container.style.setProperty('--light-text-on-background-color', 'rgba(255, 255, 255, 0.8)'); container.style.setProperty('--dark-text-on-background-color', '#ffffff'); } else { container.removeAttribute('data-theme'); container.style.removeProperty('background'); [ '--apc-bg','--apc-text','--apc-link', '--default-color','--background-color', '--light-text-on-default-color','--dark-text-on-default-color', '--light-text-on-background-color','--dark-text-on-background-color' ].forEach(v => container.style.removeProperty(v)); } const elConv = document.getElementById('vf-conv'); const elTrend = document.getElementById('vf-trending'); const realConv = document.querySelector('#vf-conversations'); const realTrend = document.querySelector('#vf-trending-articles'); [elConv, elTrend].forEach(el => { if (!el) return; if (useDark) { el.setAttribute('data-vf-theme', 'dark'); el.setAttribute('vf-theme', 'dark'); el.setAttribute('theme', 'dark'); el.style.removeProperty('background'); el.style.color = 'var(--apc-text)'; } else { ['data-vf-theme','vf-theme','theme'].forEach(a => el.removeAttribute(a)); el.style.removeProperty('background'); el.style.removeProperty('color'); } }); [realConv, realTrend].forEach((root) => { if (!root) return; if (useDark) { root.classList.add('ap-vf-dark'); root.setAttribute('data-theme', 'dark'); } else { root.classList.remove('ap-vf-dark'); root.removeAttribute('data-theme'); } }); // fix dropdowns / sort menus any time theme is recalculated if (useDark) { fixDarkModeDropdowns(); } } const vfObserver = new MutationObserver(() => { applyDarkThemeIfNeeded(); }); (function bootComments() { const container = document.getElementById('ap-comments'); if (!container) return; // Initial theme & dropdown fix applyDarkThemeIfNeeded(); // --------- NEW: Global block tags (e.g. no_comment) ---------- // If the page has ANY of the COMMENT_BLOCK_TAGS, hide comments on all stories. if (pageHasBlockedTag(COMMENT_BLOCK_TAGS)) { container.innerHTML = ''; container.classList.remove('viafoura'); container.id = 'comments-hidden'; hideFloatingBellButton(); return; } // --------- NEW: Section-specific logic (World News) ---------- const section = getPageSection(); // Only apply this rule if the story is in World News. if (section === WORLD_NEWS_SECTION) { // If a World News story has any tag in WORLD_NEWS_EXCLUSION_TAGS (e.g. Israel), // hide the embed. Other sections with those tags are still allowed. if (pageHasBlockedTag(WORLD_NEWS_EXCLUSION_TAGS)) { container.innerHTML = ''; container.classList.remove('viafoura'); container.id = 'comments-hidden'; hideFloatingBellButton(); return; } } // --------- Existing Viafoura boot logic ---------- if (!window.vf && !document.querySelector('script[src*="cdn.viafoura.net/entry/index.js"]')) { const s = document.createElement('script'); s.async = true; s.src = '//cdn.viafoura.net/entry/index.js'; document.head.appendChild(s); } if (document.readyState === 'complete' || document.readyState === 'interactive') { wireViafoura(); } else { document.addEventListener('DOMContentLoaded', wireViafoura); } (function startCappedRetry() { let tries = 0; const maxTries = 120; const iv = setInterval(() => { injectNoticeInContainer(container); replaceBellIconInNav(container); hideFloatingBellButton(); moveTrendingAboveCommentsFooter(); applyDarkThemeIfNeeded(); if (++tries >= maxTries) clearInterval(iv); }, 100); })(); try { vfObserver.observe(container, { childList: true, subtree: true }); } catch (e) {} })(); .vf-guidelines-notice { font-family: var(--primary-font, 'AP', sans-serif); font-size: 1.0em; color: #666; margin: 0 0 10px 0; padding-left: 4px; opacity: 0.85; line-height: 1.4; } .vf-guidelines-notice a { text-decoration: underline; font-weight: 500; } #vf-trending-articles > div > div > h2 { font-size: 14px !important; line-height: 1.2; text-transform: uppercase; } #vf-trending-articles p.vf-trending-article__comment-count { font-size: 16px !important; line-height: 1.1; } #comments-hidden { display: none; } /* ---------- Dark theme for AP comments ---------- */ #ap-comments.ap-comments--dark { --apc-bg: #0b0b0b; --apc-text: #e8e8e8; --apc-muted: #a7a7a7; --apc-border: #2a2a2a; --apc-link: #9ecbff; background: var(--apc-bg) !important; color: var(--apc-text); color-scheme: dark; } /* DO NOT touch every descendant’s colors anymore – that was killing badges/icons */ #ap-comments.ap-comments--dark a { color: var(--apc-link); } #ap-comments.ap-comments--dark a:hover, #ap-comments.ap-comments--dark a:focus { text-decoration: underline; } #ap-comments.ap-comments--dark hr, #ap-comments.ap-comments--dark .vf-divider, #ap-comments.ap-comments--dark .vf-comment + .vf-comment, #ap-comments.ap-comments--dark .vf-card { border-color: var(--apc-border) !important; } #ap-comments.ap-comments--dark .vf-guidelines-notice { color: var(--apc-muted); } #ap-comments.ap-comments--dark #vf-trending-articles > div > div > h2, #ap-comments.ap-comments--dark p.vf-trending-article__comment-count { color: var(--apc-text) !important; } #ap-comments.ap-comments--dark #vf-conversations.ap-vf-dark, #ap-comments.ap-comments--dark #vf-trending-articles.ap-vf-dark { background: transparent !important; color: var(--apc-text) !important; color-scheme: dark; } #ap-comments.ap-comments--dark #vf-conversations, #ap-comments.ap-comments--dark #vf-trending-articles { background-color: var(--apc-bg) !important; } /* Removed “*:not(input)” background/color override so badges keep their own colors */ #ap-comments.ap-comments--dark #vf-conversations section, #ap-comments.ap-comments--dark #vf-conversations article, #ap-comments.ap-comments--dark #vf-conversations header, #ap-comments.ap-comments--dark #vf-conversations footer, #ap-comments.ap-comments--dark #vf-conversations .vf-card, #ap-comments.ap-comments--dark #vf-trending-articles section, #ap-comments.ap-comments--dark #vf-trending-articles article, #ap-comments.ap-comments--dark #vf-trending-articles header, #ap-comments.ap-comments--dark #vf-trending-articles footer, #ap-comments.ap-comments--dark #vf-trending-articles .vf-card { background-color: transparent !important; border-color: var(--apc-border) !important; } #ap-comments.ap-comments--dark .vf-content-editor-form, #ap-comments.ap-comments--dark .vf-editor-area { background-color: rgba(255,255,255,0.08) !important; border: 1px solid rgba(255,255,255,0.24) !important; border-radius: 6px !important; } #ap-comments.ap-comments--dark .vf-content-editor-input { color: var(--apc-text) !important; caret-color: var(--apc-text) !important; } #ap-comments.ap-comments--dark .vf-content-editor-input::placeholder { color: #cfcfcf !important; opacity: 1 !important; } #ap-comments.ap-comments--dark .vf-content-editor-input:focus, #ap-comments.ap-comments--dark .vf-editor-area:focus-within { outline: none !important; border-color: rgba(255,255,255,0.36) !important; box-shadow: 0 0 0 2px rgba(255,255,255,0.12) !important; } #ap-comments.ap-comments--dark .vf-dropdown-button, #ap-comments.ap-comments--dark .vf-dropdown-button__text { background-color: transparent !important; color: var(--apc-text) !important; border-color: var(--apc-border) !important; } #ap-comments.ap-comments--dark .vf-dropdown-button:hover, #ap-comments.ap-comments--dark .vf-dropdown-button:focus { background-color: rgba(255,255,255,0.06) !important; } /* Only tweak the swapped bell icon in dark mode; leave other badges alone */ #ap-comments.ap-comments--dark .vf-tray-trigger img[data-ap-bell="1"] { filter: invert(1) hue-rotate(180deg) brightness(1.1); opacity: 1; mix-blend-mode: normal; } /* Ban message styles */ .vf-ban-container { margin: 10px 0 15px; padding: 10px 12px; border-radius: 4px; background-color: #fff3cd; border: 1px solid #ffeeba; } .vf-ban-message { font-family: var(--primary-font, 'AP', sans-serif); font-size: 0.95em; color: #856404; display: flex; align-items: center; flex-wrap: wrap; } .vf-ban-icon { margin-right: 8px; } .vf-ban-tooltip { margin-left: 4px; font-weight: 600; text-decoration: underline; cursor: pointer; position: relative; } .vf-ban-tooltip-content { display: none; position: absolute; z-index: 9999; top: 120%; left: 0; width: 260px; padding: 8px 10px; background: #fff; border: 1px solid #ccc; border-radius: 4px; font-weight: 400; text-decoration: none; color: #333; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } .vf-ban-tooltip:hover .vf-ban-tooltip-content { display: block; }

WS
Wire Services

wire

Aggregated news from trusted wire services and news agencies worldwide.

Related Stories