TikTok expands AI literacy and transparency initiatives across Sub-Saharan Africa
Listen to article
5 min listen
Audio reading is not supported on this browser.
Ready
Thanks for listening. Continue with a related story, or tap the speaker icon on the next page to listen.
Are we forgetting how to remember and loosing real connection? The hidden cost of AI
Margaret Wanjiru
·
8 hours agoRead nextOpens a fresh page.
The new measures are designed to give users greater confidence when interacting with AI-generated content while supporting creators who use AI tools responsibly.
TikTok has announced a series of new artificial intelligence (AI) initiatives aimed at improving AI literacy, increasing transparency around AI-generated content and strengthening protections against AI-generated spam across Sub-Saharan Africa, including Kenya.
The announcement was made during the AI for Good Global Summit in Geneva last week and forms part of TikTok’s broader efforts to help users understand, identify and use AI responsibly as the technology becomes increasingly integrated into online platforms.
According to the company, the new measures are designed to give users greater confidence when interacting with AI-generated content while supporting creators who use AI tools responsibly.
More To Read
- Are we forgetting how to remember and loosing real connection? The hidden cost of AI
- From NASA to the classroom: The engineer bringing AI to those left behind
- Artificial intelligence is here to stay but can Kenya balance innovation and risk?
- Meta removes controversial Instagram AI feature days after launch following backlash
- Apple sues OpenAI over alleged theft of hardware trade secrets
- OpenAI shutting down ChatGPT Atlas browser just months after launch
“We believe people should have context, confidence and control over their experiences with AI on TikTok. We continue to invest in technologies, partnerships and educational resources that help people spot AI-generated content, understand how it’s created, and use these tools creatively and responsibly,” said Tom Varghese, AI Lead for TikTok’s Global Public Policy team.
New AI literacy hub for Kenya
As part of the initiative, TikTok is launching an in-app AI Literacy Hub for users in Kenya, South Africa and Nigeria.
Latest Stories
- Ebola reaches major transport hub of Kisangani as DR Congo outbreak expands across five provinces
- US launches campaign to block ICC probes of American officials and military, citing threat to sovereignty
- Africa’s youth are finding jobs – but not the ones they imagined
- England, Argentina set to renew storied World Cup rivalry
The hub will provide educational resources to help users recognise AI-generated content, understand how AI tools work on the platform and make informed decisions when creating or consuming digital content.
The company said education remains one of the most effective ways to help users navigate the opportunities and risks presented by artificial intelligence.
TikTok has also developed an AI guide in collaboration with the National Association for Media Literacy Education (NAMLE) and AI expert Henry Ajder to promote the responsible use of AI tools.
Investing in local partnerships
TikTok also said it has committed more than US$4 <a href="https://absafricatv.com/afdb-approves-66-million-for-major-solar-project-in-egypt/” title=”AfDB Approves $66 Million for Major Solar Project in Egypt”>million (Sh 516 million) to its AI Literacy Fund since launching the programme in November 2025.
In Kenya, the company has partnered with organisations including Eveminet and Mtoto News to create locally relevant AI literacy content aimed at helping people understand how AI works and how to use it safely and critically.
Across Sub-Saharan Africa, TikTok has also worked with organisations such as Moxi Africa in South Africa and the Centre for Journalism Innovation and Development, Africa Check and Paradigm Initiative in Nigeria.
According to TikTok, these partnerships have generated more than 200 million views, reflecting growing public interest in trustworthy AI education.
Tackling AI-Generated spam
The social media platform also announced that it is testing enhanced systems to detect and remove AI-generated spam designed to flood the platform with repetitive or low-quality content.
TikTok said the new technology aims to protect authentic creators by identifying accounts that misuse
AI to mass-produce content
The company noted that during the first quarter of 2026 alone, it removed more than 86 million fake accounts globally as part of its ongoing efforts to improve platform integrity.
TikTok also highlighted progress in helping users identify AI-generated content.
The company said more than three billion videos have now been labelled using a combination of Content Credentials, creator disclosure tools and invisible watermarking technology to indicate when content has been created or significantly modified using artificial intelligence.
In addition, TikTok announced that it has joined the Coalition for Content Provenance and Authenticity (C2PA) Steering Committee, an industry group working to develop standards that improve transparency and authenticity for AI-generated content across digital platforms.
Supporting African creators
TikTok said creators across Sub-Saharan Africa are increasingly using AI to produce educational, entertainment and storytelling content.
In Kenya, creators including Tonnee Ndungu and Nyandia Gachago were recognised for using AI creatively and responsibly to engage their audiences.
The platform also pointed to AI-powered features such as Smart Split, AI Outline, and Manage Topics, which are designed to help creators develop content while giving users greater control over the type of AI-generated material they see in their feeds.
By expanding AI literacy programmes, strengthening content labelling and investing in spam detection technologies, TikTok says it aims to create a safer and more transparent environment for users while encouraging responsible innovation across its platform.
Other Topics To Read
Top Stories Today
- Fuel prices remain unchanged as EPRA retains pump rates for another month
- Ebola reaches major transport hub of Kisangani as DRC outbreak expands across five provinces
- US launches campaign to block ICC probes of American officials and military
- Africa’s youth are finding jobs – but not the ones they imagined
- Ong’ondo Were murder trial witness says he was paid Sh50,000 after shooting
- Mombasa Governor dismisses claims of medicine shortages in county hospitals
`;
}
return “;
}
function commentActionsMarkup(comment, canComment) {
const likeLabel = comment.liked_by_me ? ‘Liked’ : ‘Like’;
const likeCount = Number(comment.like_count || 0) > 0
? “
: ”;
const likeButton = canComment && comment.status === ‘approved’
? “
: “;
const replyButton = canComment && comment.status === ‘approved’
? “
: ”;
return `
`;
}
function commentMarkup(comment, canComment, isReply = false) {
const pendingBadge = comment.status && comment.status !== ‘approved’
? “
: ”;
const edited = comment.is_edited
? “
: ”;
const repliesHtml = Array.isArray(comment.replies) && comment.replies.length
? `
`
: “;
return `
`;
}
function replyFormMarkup(commentId) {
return `
`;
}
function setNotice(widget, message, type = ‘info’) {
const notice = widget.querySelector(‘[data-role=”notice”]’);
if (!notice) return;
if (!message) {
notice.hidden = true;
notice.textContent = ”;
notice.classList.remove(‘is-error’);
return;
}
notice.hidden = false;
notice.textContent = message;
notice.classList.toggle(‘is-error’, type === ‘error’);
}
function setCount(widget, total) {
const count = widget.querySelector(‘[data-role=”count”]’);
if (!count) return;
const num = Number(total || 0);
count.textContent = num === 1 ? ‘1 comment’ : `${num} comments`;
}
function openReplyBox(widget, commentId) {
widget.querySelectorAll(‘[data-role=”reply-box”]’).forEach(box => {
box.hidden = true;
box.innerHTML = ”;
});
const targetItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (!targetItem) return;
const replyBox = targetItem.querySelector(‘[data-role=”reply-box”]’);
if (!replyBox) return;
replyBox.hidden = false;
replyBox.innerHTML = replyFormMarkup(commentId);
const textarea = replyBox.querySelector(‘textarea’);
if (textarea) textarea.focus();
}
function closeReplyBox(container) {
if (!container) return;
container.hidden = true;
container.innerHTML = ”;
}
async function initCommentsWidget(widget) {
const state = {
articleId: Number(widget.dataset.articleId),
loadUrl: widget.dataset.loadUrl,
storeUrl: widget.dataset.storeUrl,
commentsBaseUrl: widget.dataset.commentsBaseUrl,
canComment: widget.dataset.canComment === ‘1’,
page: 1,
perPage: 10,
sort: ‘newest’,
total: 0,
hasMore: false,
busy: false
};
const list = widget.querySelector(‘[data-role=”list”]’);
const loading = widget.querySelector(‘[data-role=”loading”]’);
const empty = widget.querySelector(‘[data-role=”empty”]’);
const loadMoreBtn = widget.querySelector(‘[data-role=”load-more”]’);
const sortSelect = widget.querySelector(‘[data-role=”sort”]’);
const composerForm = widget.querySelector(‘[data-role=”composer-form”]’);
async function loadComments(reset = true) {
if (state.busy) return;
state.busy = true;
setNotice(widget, ”);
loading.hidden = false;
if (reset) {
state.page = 1;
list.innerHTML = ”;
empty.hidden = true;
}
try {
const url = new URL(state.loadUrl, window.location.origin);
url.searchParams.set(‘page’, state.page);
url.searchParams.set(‘per_page’, state.perPage);
url.searchParams.set(‘sort’, state.sort);
const response = await requestJson(url.toString(), {
method: ‘GET’,
headers: {
‘Accept’: ‘application/json’,
‘X-Requested-With’: ‘XMLHttpRequest’
}
});
const items = Array.isArray(response.data) ? response.data : [];
const meta = response.meta || {};
state.total = Number(meta.total || 0);
state.hasMore = !!meta.has_more;
setCount(widget, state.total);
if (reset) {
list.innerHTML = ”;
}
if (!items.length && reset) {
empty.hidden = false;
} else {
empty.hidden = true;
list.insertAdjacentHTML(
‘beforeend’,
items.map(item => commentMarkup(item, state.canComment, false)).join(”)
);
}
loadMoreBtn.hidden = !state.hasMore;
} catch (error) {
if (!list.children.length) {
empty.hidden = false;
empty.textContent = ‘Unable to load comments right now.’;
}
setNotice(widget, error.message || ‘Unable to load comments.’, ‘error’);
} finally {
loading.hidden = true;
state.busy = false;
}
}
async function submitTopLevelComment(form) {
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘[data-role=”submit-comment”]’);
if (!textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(state.storeUrl, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
textarea.value = ”;
if (response?.data) {
list.insertAdjacentHTML(
‘afterbegin’,
commentMarkup(response.data, state.canComment, false)
);
empty.hidden = true;
if ((response.data.status || ”) === ‘approved’) {
state.total += 1;
setCount(widget, state.total);
}
}
setNotice(widget, response.message || ‘Comment posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post comment.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post comment’;
}
}
}
async function submitReply(form) {
const commentId = Number(form.dataset.commentId || 0);
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘.ev-comments__reply-submit’);
if (!commentId || !textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/reply`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
if (response?.data) {
const parentItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (parentItem) {
const repliesWrap = parentItem.querySelector(‘.ev-comments__replies’);
if (repliesWrap) {
repliesWrap.insertAdjacentHTML(
‘beforeend’,
commentMarkup(response.data, state.canComment, true)
);
}
}
}
closeReplyBox(form.closest(‘[data-role=”reply-box”]’));
setNotice(widget, response.message || ‘Reply posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post reply.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post reply’;
}
}
}
async function toggleLike(button) {
const commentId = Number(button.dataset.commentId || 0);
if (!commentId) return;
const originalHtml = button.innerHTML;
try {
button.disabled = true;
button.innerHTML = ‘Working…’;
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/like`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({})
});
const liked = !!response?.data?.liked;
const likeCount = Number(response?.data?.like_count || 0);
button.classList.toggle(‘is-liked’, liked);
button.innerHTML = `${liked ? ‘Liked’ : ‘Like’} ${likeCount > 0 ? “ : ”}`;
} catch (error) {
button.innerHTML = originalHtml;
setNotice(widget, error.message || ‘Unable to update like.’, ‘error’);
} finally {
button.disabled = false;
}
}
if (composerForm) {
composerForm.addEventListener(‘submit’, function (e) {
e.preventDefault();
submitTopLevelComment(composerForm);
});
}
if (sortSelect) {
sortSelect.addEventListener(‘change’, function () {
state.sort = this.value || ‘newest’;
loadComments(true);
});
}
if (loadMoreBtn) {
loadMoreBtn.addEventListener(‘click’, function () {
if (state.busy || !state.hasMore) return;
state.page += 1;
loadComments(false);
});
}
widget.addEventListener(‘click’, function (e) {
const likeBtn = e.target.closest(‘[data-action=”toggle-like”]’);
if (likeBtn) {
e.preventDefault();
toggleLike(likeBtn);
return;
}
const replyBtn = e.target.closest(‘[data-action=”toggle-reply”]’);
if (replyBtn) {
e.preventDefault();
openReplyBox(widget, Number(replyBtn.dataset.commentId || 0));
return;
}
const cancelReplyBtn = e.target.closest(‘[data-action=”cancel-reply”]’);
if (cancelReplyBtn) {
e.preventDefault();
closeReplyBox(cancelReplyBtn.closest(‘[data-role=”reply-box”]’));
}
});
widget.addEventListener(‘submit’, function (e) {
const replyForm = e.target.closest(‘.ev-comments__reply-form’);
if (replyForm) {
e.preventDefault();
submitReply(replyForm);
}
});
loadComments(true);
}
document.addEventListener(‘DOMContentLoaded’, function () {
document.querySelectorAll(‘.ev-comments’).forEach(initCommentsWidget);
});
})();
Trending
World Cup history: A timeline of Africa’s greatest moments on the fieldSports
|The Conversation
|6 hours ago
Ol Kalou by-election: Campaigns enter final hours ahead of 6pm deadlinePolitics
|Lucy Mumbi
|1 day ago
Ex-KDF Major Peter Mugure sentenced to life for murder of wife, two childrenNews
|Carolyne Kubwa
|11 hours ago

Dry weather to dominate Kenya as selected counties brace for rainfallNews
|Lucy Mumbi
|14 hours ago
Rwanda’s tourism brand Visit Rwanda secures Aston Villa front-of-shirt dealFootball
|Bashir Mbuthia
|4 hours ago
Ruto tells Junior Starlets to aim higher ahead of FIFA U-17 World CupFootball
|Lucy Mumbi
|9 hours ago
Ebola reaches major transport hub of Kisangani as DR Congo outbreak expands across five provincesHealth
|Mwangi Maina
|10 minutes ago
President Ruto hails Junior Starlets after decisive win as Sonko rewards World Cup heroes with Sh1 millionFootball
|Rachael Mutabasi
|1 day ago

Goonism: How unemployment is driving youths into politically backed gangsNews
|Barack Oduor
|7 hours ago

IEBC: Voters risk Sh1 million fine, three-year jail term for photographing ballots in Ol Kalou by-electionNews
|Lucy Mumbi
|10 hours ago
