{"id":14830,"date":"2026-11-11T08:15:58","date_gmt":"2026-11-11T08:15:58","guid":{"rendered":"https:\/\/globalnigerianews.com\/index.php\/2026\/11\/11\/what-opay-and-moniepoints-numbers-reveal-about-fintech-economics\/"},"modified":"2026-11-11T08:15:58","modified_gmt":"2026-11-11T08:15:58","slug":"what-opay-and-moniepoints-numbers-reveal-about-fintech-economics","status":"publish","type":"post","link":"https:\/\/globalnigerianews.com\/index.php\/2026\/11\/11\/what-opay-and-moniepoints-numbers-reveal-about-fintech-economics\/","title":{"rendered":"What OPay and Moniepoint\u2019s numbers reveal about fintech economics"},"content":{"rendered":"<div>\n<p class=\"wp-block-paragraph\">A Bolt driver in Nigeria will likely ask you to pay via OPay at the end of a trip, while a local store is more likely to have a Moniepoint terminal at its checkout. Both fintechs, which hold microfinance banking licences, have become synonymous with scale in Nigeria\u2019s payments market, carving out niches in consumer payments and merchant processing.<\/p>\n<p class=\"wp-block-paragraph\">In 2025, Nigeria processed more than <a href=\"https:\/\/www.cbn.gov.ng\/Out\/2026\/CCD\/Nigeria%20Payments%20System%20Vision%202028.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">\u20a61.2 quadrillion<\/a> ($880.51 billion) worth of electronic transactions. Moniepoint and OPay accounted for a significant share of this activity, processing a combined $644.85 billion.<\/p>\n<p class=\"wp-block-paragraph\">Moniepoint said it processed <a href=\"https:\/\/techcabal.com\/2026\/01\/29\/moniepoint-triples-transaction-volume-in-two-years\/\" target=\"_blank\" rel=\"noreferrer noopener\">14 billion<\/a> transactions worth \u20a6412 trillion ($286.85 billion at <a href=\"https:\/\/www.cbn.gov.ng\/rates\/ExchRateByCurrency.html\" target=\"_blank\" rel=\"noreferrer noopener\">\u20a61,436.31\/$<\/a> as of December 31, 2025) in 2025. OPay processed <a href=\"https:\/\/www.sec.gov\/Archives\/edgar\/data\/2103076\/000119312526430437\/d56487df1a.htm\" target=\"_blank\" rel=\"noreferrer noopener\">62.3 billion<\/a> transactions worth $358 billion. OPay processed 4.45 times as many transactions as Moniepoint, but Moniepoint\u2019s average transaction value was $20.49, approximately 3.56 times OPay\u2019s $5.75.<\/p>\n<p class=\"wp-block-paragraph\">Moniepoint said it serves more than <a href=\"https:\/\/moniepoint.com\/blog\/moniepoint-publishes-impact-report-62-of-women-entrepreneurs-received-their-first-formal-loan-as-inclusive-lending-drives-business-growth\" target=\"_blank\" rel=\"noreferrer noopener\">20 million<\/a> businesses and individuals, while OPay reported <a href=\"https:\/\/www.sec.gov\/Archives\/edgar\/data\/2103076\/000119312526430437\/d56487df1a.htm\" target=\"_blank\" rel=\"noreferrer noopener\">50.1 million<\/a> monthly active users.<\/p>\n<p class=\"wp-block-paragraph\">These numbers offer a window into the operating economics of both companies: who moves more money, who makes more money from moving it, and who keeps more of what they make?<\/p>\n<p class=\"wp-block-paragraph\">It is important to note that Moniepoint operates largely in Nigeria, with a recent <a href=\"https:\/\/techcabal.com\/2026\/03\/26\/nigerias-moniepoint-enters-kenya-with-78-stake-in-sumac-microfinance\/\" target=\"_blank\" rel=\"noreferrer noopener\">expansion into Kenya<\/a>. OPay operates in Indonesia, Egypt, and Pakistan, but derives most of its scale from Nigeria. It generated 88.1% of its revenue from the country in 2025.<\/p>\n<h2 class=\"wp-block-heading\"><strong>What the average numbers show<\/strong><\/h2>\n<p class=\"wp-block-paragraph\">Moniepoint\u2019s average transaction value of $20.49 is approximately 3.56 times OPay\u2019s $5.75.<\/p>\n<p class=\"wp-block-paragraph\">This difference could reflect Moniepoint\u2019s greater concentration of merchant payments, business transactions, or other relatively large payments. OPay\u2019s lower average could reflect more frequent, lower-value consumer transactions.<\/p>\n<p class=\"wp-block-paragraph\">These are hypotheses rather than confirmed explanations. The companies\u2019 transaction disclosures do not provide enough detail to establish exactly what drives the difference.<\/p>\n<p class=\"wp-block-paragraph\">There are other indicators of how frequently their customers use their platforms. OPay says its digital wallets were used an average of 209 times per user per month. Moniepoint said its cards were used <a href=\"https:\/\/techcabal.com\/2026\/01\/29\/moniepoint-triples-transaction-volume-in-two-years\/\" target=\"_blank\" rel=\"noreferrer noopener\">1.7 million<\/a> times daily.<\/p>\n<p class=\"wp-block-paragraph\">However, the total value passing through a payment platform is not the same as the revenue it earns. Their revenue depends on fees, commissions, lending, merchant services, and other income sources.<\/p>\n<p class=\"wp-block-paragraph\">OPay disclosed $536.25 million in revenue in 2025. Moniepoint does not publicly disclose revenue figures.<\/p>\n<p class=\"wp-block-paragraph\">One way to illustrate Moniepoint\u2019s revenue potential is to examine OPay\u2019s revenue relative to the value it processed. Its $536.25 million in revenue represented about 0.15% of its $358 billion in transaction value.<\/p>\n<p class=\"wp-block-paragraph\">If Moniepoint generated revenue at the same rate, its $286.85 billion in transaction value would translate to approximately $430.28 million in revenue.<\/p>\n<p class=\"wp-block-paragraph\">This is an illustrative scenario, not an estimate of Moniepoint\u2019s actual revenue. The two companies have different transaction mixes, fee structures, and revenue sources.<\/p>\n<p><!-- TechCabal Premium Explainer: The Financial X-Ray (Mobile-Adaptive) --><\/p>\n<div id=\"tc-xray-premium\" style=\"font-family: 'Open Sans', system-ui, -apple-system, sans-serif; background: #FFFFFF; color: #151515; border: 1px solid #E5E7EB; border-radius: 8px; max-width: 760px; margin: 32px auto; overflow: hidden; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05); box-sizing: border-box; line-height: 1.6;\">\n<style>\n    \/* Scoped Reset *\/\n    #tc-xray-premium * { box-sizing: border-box; margin: 0; padding: 0; }<\/p>\n<p>    \/* Typography & Brand *\/\n    #tc-xray-premium .tc-header { background: #FFFFFF; padding: 32px; border-bottom: 1px solid #151515; }\n    #tc-xray-premium .tc-badge { display: inline-block; background: #EA2D2E; color: #FFFFFF; font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; padding: 4px 8px; border-radius: 2px; margin-bottom: 12px; }\n    #tc-xray-premium .tc-title { font-size: 2rem; font-weight: 700; color: #151515; line-height: 1.1; margin-bottom: 8px; letter-spacing: -0.02em; }\n    #tc-xray-premium .tc-subtitle { font-size: 1.05rem; color: #4B5563; }<\/p>\n<p>    \/* Navigation *\/\n    #tc-xray-premium .tc-nav { display: flex; background: #F9FAFB; border-bottom: 1px solid #E5E7EB; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; }\n    #tc-xray-premium .tc-nav::-webkit-scrollbar { display: none; }\n    #tc-xray-premium .tc-nav-btn { flex: 0 0 auto; min-width: 33.33%; text-align: center; padding: 16px; font-size: 0.85rem; font-weight: 700; color: #6B7280; text-transform: uppercase; letter-spacing: 0.05em; cursor: pointer; transition: all 0.3s ease; border: none; background: transparent; border-bottom: 3px solid transparent; white-space: nowrap; }\n    #tc-xray-premium .tc-nav-btn:hover { color: #151515; }\n    #tc-xray-premium .tc-nav-btn.active { color: #151515; border-bottom-color: #EA2D2E; }<\/p>\n<p>    \/* Panels *\/\n    #tc-xray-premium .tc-panel { display: none; padding: 32px; animation: tc-fade-in 0.5s ease; }\n    #tc-xray-premium .tc-panel.active { display: block; }\n    @keyframes tc-fade-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }<\/p>\n<p>    \/* Editorial Notes *\/\n    #tc-xray-premium .tc-editorial-note { font-size: 0.9rem; color: #151515; background: #F9FAFB; border-left: 4px solid #EA2D2E; padding: 16px 20px; margin-top: 32px; font-style: italic; font-weight: 600; line-height: 1.5; }\n    #tc-xray-premium .tc-footnote { font-size: 0.75rem; color: #6B7280; margin-top: 24px; border-top: 1px solid #E5E7EB; padding-top: 12px; }<\/p>\n<p>    \/* --- SECTION 1: SCALE --- *\/\n    #tc-xray-premium .tc-toggle-wrap { display: flex; justify-content: center; margin-bottom: 40px; width: 100%; }\n    #tc-xray-premium .tc-toggle { display: flex; background: #F3F4F6; border-radius: 30px; padding: 4px; width: auto; }\n    #tc-xray-premium .tc-toggle-btn { padding: 10px 24px; font-size: 0.85rem; font-weight: 700; border-radius: 30px; border: none; background: transparent; color: #4B5563; cursor: pointer; transition: 0.3s; flex: 1; text-align: center; white-space: nowrap; }\n    #tc-xray-premium .tc-toggle-btn.active { background: #151515; color: #FFFFFF; }<\/p>\n<p>    #tc-xray-premium .tc-scale-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; align-items: end; text-align: center; }\n    #tc-xray-premium .tc-stat-label { font-size: 0.75rem; font-weight: 700; text-transform: uppercase; color: #6B7280; margin-bottom: 12px; letter-spacing: 0.05em; }\n    #tc-xray-premium .tc-stat-val { font-size: 2.5rem; font-weight: 700; line-height: 1; margin-bottom: 8px; transition: opacity 0.3s; }\n    #tc-xray-premium .tc-stat-sub { font-size: 0.85rem; color: #4B5563; }<\/p>\n<p>    #tc-xray-premium .tc-svg-circle { transition: r 0.8s cubic-bezier(0.16, 1, 0.3, 1), fill 0.5s; }<\/p>\n<p>    \/* --- SECTION 2: REVENUE FLOW --- *\/\n    #tc-xray-premium .tc-sankey-container { width: 100%; overflow: hidden; margin-top: 24px; }\n    #tc-xray-premium .tc-sankey-path { stroke-dasharray: 8; animation: tc-flow-anim 1.5s linear infinite; }\n    @keyframes tc-flow-anim { to { stroke-dashoffset: -16; } }<\/p>\n<p>    \/* --- SECTION 3: LENDING & RISK --- *\/\n    #tc-xray-premium .tc-risk-grid { display: grid; grid-template-columns: 1fr; gap: 40px; }<\/p>\n<p>    #tc-xray-premium .tc-risk-bar-container { background: #FAFAFA; border: 1px solid #E5E7EB; padding: 24px; border-radius: 4px; }\n    #tc-xray-premium .tc-risk-bar-wrap { width: 100%; height: 32px; display: flex; border-radius: 4px; overflow: hidden; margin: 16px 0; }\n    #tc-xray-premium .tc-risk-bar-segment { display: flex; align-items: center; padding: 0 12px; font-size: 0.75rem; font-weight: 700; color: #FFFFFF; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }<\/p>\n<p>    #tc-xray-premium .tc-flow-wrap { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; }\n    #tc-xray-premium .tc-flow-diagram { display: flex; flex-direction: column; gap: 8px; position: relative; padding-left: 20px; }\n    #tc-xray-premium .tc-flow-line { position: absolute; left: 6px; top: 10px; bottom: 10px; width: 2px; background: #E5E7EB; z-index: 1; }\n    #tc-xray-premium .tc-flow-node { position: relative; z-index: 2; padding: 12px 16px; background: #FFFFFF; border: 1px solid #E5E7EB; border-radius: 4px; display: flex; align-items: center; gap: 12px; }\n    #tc-xray-premium .tc-flow-dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }<\/p>\n<p>    #tc-xray-premium .tc-reg-box { background: #FFF7ED; border: 1px solid #FED7AA; padding: 24px; border-radius: 4px; }\n    #tc-xray-premium .tc-reg-flex { display: flex; gap: 12px; align-items: center; background: #FFFFFF; padding: 16px; border: 1px solid #FED7AA; border-radius: 4px; }<\/p>\n<p>    \/* Colors *\/\n    .tc-color-opay { color: #10B981; } .tc-bg-opay { background: #10B981; }\n    .tc-color-monie { color: #3B82F6; } .tc-bg-monie { background: #3B82F6; }\n    .tc-color-alert { color: #EA2D2E; } .tc-bg-alert { background: #EA2D2E; }<\/p>\n<p>    \/* --- MOBILE ADAPTABILITY FIXES --- *\/\n    @media (max-width: 600px) {\n      #tc-xray-premium .tc-header { padding: 24px 20px; }\n      #tc-xray-premium .tc-title { font-size: 1.5rem; }\n      #tc-xray-premium .tc-panel { padding: 24px 20px; }<\/p>\n<p>      \/* Fix 1: Stack Toggles to prevent squishing *\/\n      #tc-xray-premium .tc-toggle-wrap { margin-bottom: 32px; }\n      #tc-xray-premium .tc-toggle { flex-direction: column; width: 100%; border-radius: 8px; }\n      #tc-xray-premium .tc-toggle-btn { border-radius: 6px; padding: 12px; font-size: 0.9rem; white-space: normal; }<\/p>\n<p>      \/* Fix 2: Add visual separation to the Scale Grid *\/\n      #tc-xray-premium .tc-scale-grid { grid-template-columns: 1fr; gap: 32px; align-items: center; }\n      #tc-xray-premium .tc-scale-grid > div:first-child { border-bottom: 1px dashed #E5E7EB; padding-bottom: 32px; }<\/p>\n<p>      \/* Fix 3: Stack Flow Diagrams *\/\n      #tc-xray-premium .tc-flow-wrap { grid-template-columns: 1fr; gap: 40px; }<\/p>\n<p>      \/* Fix 4: Stack Regulatory Boxes gracefully *\/\n      #tc-xray-premium .tc-reg-flex { flex-direction: column; text-align: center; gap: 16px; }\n      #tc-xray-premium .tc-reg-arrow { transform: rotate(90deg); }\n    }\n  <\/style>\n<p>  <!-- HEADER --><\/p>\n<div class=\"tc-header\">\n<div class=\"tc-badge\">Interactive Data Explainer<\/div>\n<h2 class=\"tc-title\">The Fintech Financial X-Ray<\/h2>\n<p class=\"tc-subtitle\">Inside the unit economics of OPay and Moniepoint.<\/p>\n<\/p><\/div>\n<p>  <!-- NAVIGATION --><\/p>\n<div class=\"tc-nav\" role=\"tablist\">\n    <button class=\"tc-nav-btn active\" role=\"tab\" onclick=\"tcXray.switchTab(0)\">1. Scale &amp; Velocity<\/button><br \/>\n    <button class=\"tc-nav-btn\" role=\"tab\" onclick=\"tcXray.switchTab(1)\">2. Revenue Conversion<\/button><br \/>\n    <button class=\"tc-nav-btn\" role=\"tab\" onclick=\"tcXray.switchTab(2)\">3. Risk &amp; Lending<\/button>\n  <\/div>\n<p>  <!-- PANEL 1: SCALE & VELOCITY --><\/p>\n<div class=\"tc-panel active\" id=\"tc-panel-0\" role=\"tabpanel\">\n<div class=\"tc-toggle-wrap\">\n<div class=\"tc-toggle\">\n        <button class=\"tc-toggle-btn active\" id=\"btn-volume\" onclick=\"tcXray.toggleScale('volume')\">Transaction Volume<\/button><br \/>\n        <button class=\"tc-toggle-btn\" id=\"btn-value\" onclick=\"tcXray.toggleScale('value')\">Average Ticket Size<\/button>\n      <\/div>\n<\/p><\/div>\n<div class=\"tc-scale-grid\">\n      <!-- OPay --><\/p>\n<div>\n<div class=\"tc-stat-label\">OPay (Consumer Focus)<\/div>\n<p>        <svg width=\"160\" height=\"160\" viewbox=\"0 0 160 160\" style=\"margin: 0 auto 16px auto; display: block; overflow: visible;\">\n          <circle id=\"svg-opay-circle\" cx=\"80\" cy=\"80\" r=\"70\" fill=\"#10B981\" fill-opacity=\"0.1\" stroke=\"#10B981\" stroke-width=\"2\" class=\"tc-svg-circle\"><\/circle>\n          <circle id=\"svg-opay-inner\" cx=\"80\" cy=\"80\" r=\"70\" fill=\"#10B981\" class=\"tc-svg-circle\" fill-opacity=\"0.8\"><\/circle>\n        <\/svg><\/p>\n<div class=\"tc-stat-val tc-color-opay\" id=\"stat-opay-val\">62.3B<\/div>\n<div class=\"tc-stat-sub\" id=\"stat-opay-sub\">Transactions Processed<\/div>\n<\/p><\/div>\n<p>      <!-- Moniepoint --><\/p>\n<div>\n<div class=\"tc-stat-label\">Moniepoint (Merchant Focus)<\/div>\n<p>        <svg width=\"160\" height=\"160\" viewbox=\"0 0 160 160\" style=\"margin: 0 auto 16px auto; display: block; overflow: visible;\">\n          <circle id=\"svg-monie-circle\" cx=\"80\" cy=\"80\" r=\"25\" fill=\"#3B82F6\" fill-opacity=\"0.1\" stroke=\"#3B82F6\" stroke-width=\"2\" class=\"tc-svg-circle\"><\/circle>\n          <circle id=\"svg-monie-inner\" cx=\"80\" cy=\"80\" r=\"25\" fill=\"#3B82F6\" class=\"tc-svg-circle\" fill-opacity=\"0.8\"><\/circle>\n        <\/svg><\/p>\n<div class=\"tc-stat-val tc-color-monie\" id=\"stat-monie-val\">14.0B<\/div>\n<div class=\"tc-stat-sub\" id=\"stat-monie-sub\">Transactions Processed<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tc-editorial-note\" id=\"scale-insight\">\n      OPay processes 4.45 times as many transactions as Moniepoint, capturing the high-frequency velocity of everyday consumer spending.\n    <\/div>\n<\/p><\/div>\n<p>  <!-- PANEL 2: REVENUE CONVERSION --><\/p>\n<div class=\"tc-panel\" id=\"tc-panel-1\" role=\"tabpanel\">\n<div style=\"margin-bottom: 24px;\">\n<h3 style=\"font-size: 1.25rem; font-weight: 700; margin-bottom: 8px;\">The Revenue Information Gap<\/h3>\n<p style=\"font-size: 0.95rem; color: #4B5563;\">Visualising how $358 billion in volume converts into actual revenue for OPay, compared to Moniepoint\u2019s undisclosed financials.<\/p>\n<\/p><\/div>\n<div class=\"tc-sankey-container\">\n      <svg viewbox=\"0 0 700 320\" width=\"100%\" height=\"100%\" preserveaspectratio=\"xMidYMid meet\">\n        <!-- OPAY REPORTED -->\n        <text x=\"0\" y=\"20\" font-family=\"'Open Sans', sans-serif\" font-size=\"14\" font-weight=\"700\" fill=\"#151515\">OPAY (Reported Financials)<\/text><\/p>\n<p>        <!-- GTV Block -->\n        <rect x=\"0\" y=\"40\" width=\"120\" height=\"80\" fill=\"#F3F4F6\" rx=\"4\"><\/rect>\n        <text x=\"60\" y=\"75\" font-family=\"'Open Sans', sans-serif\" font-size=\"12\" font-weight=\"600\" fill=\"#6B7280\" text-anchor=\"middle\">Gross Volume<\/text>\n        <text x=\"60\" y=\"95\" font-family=\"'Open Sans', sans-serif\" font-size=\"16\" font-weight=\"700\" fill=\"#151515\" text-anchor=\"middle\">$358B<\/text><\/p>\n<p>        <!-- Paths -->\n        <path d=\"M 120 60 C 220 60, 250 40, 350 40\" fill=\"none\" stroke=\"#10B981\" stroke-width=\"20\" opacity=\"0.6\" class=\"tc-sankey-path\"><\/path>\n        <path d=\"M 120 100 C 220 100, 250 120, 350 120\" fill=\"none\" stroke=\"#059669\" stroke-width=\"20\" opacity=\"0.4\" class=\"tc-sankey-path\"><\/path>\n<p>        <!-- Revenue Streams -->\n        <rect x=\"350\" y=\"25\" width=\"140\" height=\"30\" fill=\"#10B981\" rx=\"2\"><\/rect>\n        <text x=\"420\" y=\"45\" font-family=\"'Open Sans', sans-serif\" font-size=\"11\" font-weight=\"700\" fill=\"#FFFFFF\" text-anchor=\"middle\">Loan Rev: $260.3M<\/text><\/p>\n<p>        <rect x=\"350\" y=\"105\" width=\"140\" height=\"30\" fill=\"#059669\" rx=\"2\"><\/rect>\n        <text x=\"420\" y=\"125\" font-family=\"'Open Sans', sans-serif\" font-size=\"11\" font-weight=\"700\" fill=\"#FFFFFF\" text-anchor=\"middle\">Other Rev: $275.9M<\/text><\/p>\n<p>        <!-- Total Revenue -->\n        <path d=\"M 490 40 C 530 40, 530 80, 560 80\" fill=\"none\" stroke=\"#10B981\" stroke-width=\"30\" opacity=\"0.8\"><\/path>\n        <path d=\"M 490 120 C 530 120, 530 80, 560 80\" fill=\"none\" stroke=\"#059669\" stroke-width=\"30\" opacity=\"0.8\"><\/path>\n<p>        <rect x=\"560\" y=\"50\" width=\"140\" height=\"60\" fill=\"#151515\" rx=\"4\"><\/rect>\n        <text x=\"630\" y=\"75\" font-family=\"'Open Sans', sans-serif\" font-size=\"11\" font-weight=\"700\" fill=\"#9CA3AF\" text-anchor=\"middle\">Total Revenue (0.15%)<\/text>\n        <text x=\"630\" y=\"95\" font-family=\"'Open Sans', sans-serif\" font-size=\"16\" font-weight=\"700\" fill=\"#FFFFFF\" text-anchor=\"middle\">$536.25M<\/text><\/p>\n<p>        <!-- SEPARATOR -->\n        <line x1=\"0\" y1=\"180\" x2=\"700\" y2=\"180\" stroke=\"#E5E7EB\" stroke-dasharray=\"4\"><\/line>\n<p>        <!-- MONIEPOINT UNDISCLOSED -->\n        <text x=\"0\" y=\"215\" font-family=\"'Open Sans', sans-serif\" font-size=\"14\" font-weight=\"700\" fill=\"#151515\">MONIEPOINT (Undisclosed Financials)<\/text><\/p>\n<p>        <rect x=\"0\" y=\"235\" width=\"120\" height=\"80\" fill=\"#F3F4F6\" rx=\"4\"><\/rect>\n        <text x=\"60\" y=\"270\" font-family=\"'Open Sans', sans-serif\" font-size=\"12\" font-weight=\"600\" fill=\"#6B7280\" text-anchor=\"middle\">Gross Volume<\/text>\n        <text x=\"60\" y=\"290\" font-family=\"'Open Sans', sans-serif\" font-size=\"16\" font-weight=\"700\" fill=\"#151515\" text-anchor=\"middle\">$286.85B<\/text><\/p>\n<p>        <!-- Dashed Unknown Path -->\n        <path d=\"M 120 275 L 560 275\" fill=\"none\" stroke=\"#3B82F6\" stroke-width=\"20\" stroke-dasharray=\"10\" opacity=\"0.3\"><\/path>\n<p>        <!-- Unknown Box -->\n        <rect x=\"560\" y=\"245\" width=\"140\" height=\"60\" fill=\"none\" stroke=\"#6B7280\" stroke-dasharray=\"4\" stroke-width=\"2\" rx=\"4\"><\/rect>\n        <text x=\"630\" y=\"275\" font-family=\"'Open Sans', sans-serif\" font-size=\"12\" font-weight=\"700\" fill=\"#6B7280\" text-anchor=\"middle\">Revenue<\/text>\n        <text x=\"630\" y=\"295\" font-family=\"'Open Sans', sans-serif\" font-size=\"12\" font-weight=\"700\" fill=\"#6B7280\" text-anchor=\"middle\">Not Disclosed<\/text>\n      <\/svg>\n    <\/div>\n<div class=\"tc-editorial-note\">\n      Moving money is not the same as making money. OPay converts its massive transaction volume into revenue at a rate of 0.15%, heavily subsidised by lending. Moniepoint\u2019s revenue cannot be established from transaction value alone.\n    <\/div>\n<\/p><\/div>\n<p>  <!-- PANEL 3: RISK & LENDING --><\/p>\n<div class=\"tc-panel\" id=\"tc-panel-2\" role=\"tabpanel\">\n<div class=\"tc-risk-grid\">\n<p>      <!-- OPay Risk Section --><\/p>\n<div class=\"tc-risk-bar-container\">\n<h3 style=\"font-size: 1.1rem; font-weight: 700; margin-bottom: 4px;\">OPay\u2019s Soaring Credit Risk<\/h3>\n<p style=\"font-size: 0.85rem; color: #4B5563;\">Expected credit loss provisions relative to loan financing revenue.<\/p>\n<p>        <!-- 2024 --><\/p>\n<div style=\"font-size: 0.75rem; font-weight: 700; color: #6B7280; margin-top: 20px; text-transform: uppercase;\">2024 ($71.5M Loan Rev)<\/div>\n<div class=\"tc-risk-bar-wrap\" style=\"height: 24px;\">\n<div class=\"tc-risk-bar-segment tc-bg-alert\" style=\"width: 34.6%;\" title=\"Provision: $24.8M\">Prov: $24.8M<\/div>\n<div class=\"tc-risk-bar-segment tc-bg-opay\" style=\"width: 65.4%; opacity: 0.5;\"><\/div>\n<\/p><\/div>\n<p>        <!-- 2025 --><\/p>\n<div style=\"font-size: 0.75rem; font-weight: 700; color: #151515; margin-top: 12px; text-transform: uppercase;\">2025 ($260.3M Loan Rev)<\/div>\n<div class=\"tc-risk-bar-wrap\">\n<div class=\"tc-risk-bar-segment tc-bg-alert\" style=\"width: 46.6%;\" title=\"Provision: $121.3M\">Loss Provision: $121.3M (46.6%)<\/div>\n<div class=\"tc-risk-bar-segment tc-bg-opay\" style=\"width: 53.4%;\">Retained Rev<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>      <!-- Ecosystem Models (Stacked correctly on mobile via CSS) --><\/p>\n<div class=\"tc-flow-wrap\">\n        <!-- OPay Pipeline --><\/p>\n<div>\n<div class=\"tc-stat-label tc-color-opay\">Consumer Pipeline<\/div>\n<div class=\"tc-flow-diagram\">\n<div class=\"tc-flow-line\"><\/div>\n<div class=\"tc-flow-node\">\n<div class=\"tc-flow-dot tc-bg-opay\"><\/div>\n<p><span style=\"font-size: 0.85rem; font-weight: 600;\">Digital Wallet<\/span><\/div>\n<div class=\"tc-flow-node\">\n<div class=\"tc-flow-dot tc-bg-opay\"><\/div>\n<p><span style=\"font-size: 0.85rem; font-weight: 600;\">Consumer Txns<\/span><\/div>\n<div class=\"tc-flow-node\">\n<div class=\"tc-flow-dot tc-bg-opay\"><\/div>\n<p><span style=\"font-size: 0.85rem; font-weight: 600;\">Credit Assessment<\/span><\/div>\n<div class=\"tc-flow-node\" style=\"border-color: #10B981; background: #ECFDF5;\">\n<div class=\"tc-flow-dot tc-bg-opay\"><\/div>\n<p><span style=\"font-size: 0.85rem; font-weight: 700; color: #065F46;\">Consumer Loans<\/span><\/div>\n<\/p><\/div>\n<div style=\"font-size: 0.75rem; color: #4B5563; margin-top: 12px; line-height: 1.4;\">Originated <strong>$938.3M<\/strong> to 4.6M unique borrowers.<\/div>\n<\/p><\/div>\n<p>        <!-- Moniepoint Pipeline --><\/p>\n<div>\n<div class=\"tc-stat-label tc-color-monie\">Merchant Pipeline<\/div>\n<div class=\"tc-flow-diagram\">\n<div class=\"tc-flow-line\"><\/div>\n<div class=\"tc-flow-node\">\n<div class=\"tc-flow-dot tc-bg-monie\"><\/div>\n<p><span style=\"font-size: 0.85rem; font-weight: 600;\">POS Terminals<\/span><\/div>\n<div class=\"tc-flow-node\">\n<div class=\"tc-flow-dot tc-bg-monie\"><\/div>\n<p><span style=\"font-size: 0.85rem; font-weight: 600;\">Merchant Txns<\/span><\/div>\n<div class=\"tc-flow-node\">\n<div class=\"tc-flow-dot tc-bg-monie\"><\/div>\n<p><span style=\"font-size: 0.85rem; font-weight: 600;\">Cash-flow Data<\/span><\/div>\n<div class=\"tc-flow-node\" style=\"border-color: #3B82F6; background: #EFF6FF;\">\n<div class=\"tc-flow-dot tc-bg-monie\"><\/div>\n<p><span style=\"font-size: 0.85rem; font-weight: 700; color: #1E3A8A;\">Working Capital<\/span><\/div>\n<\/p><\/div>\n<div style=\"font-size: 0.75rem; color: #4B5563; margin-top: 12px; line-height: 1.4;\">Disbursed <strong>\u20a61 Trillion+<\/strong> in business loans.<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>      <!-- Regulation Box --><\/p>\n<div class=\"tc-reg-box\">\n<h3 style=\"font-size: 1.1rem; font-weight: 700; color: #9A3412; margin-bottom: 8px;\">The CBN Regulatory Ceiling<\/h3>\n<p style=\"font-size: 0.9rem; color: #7C2D12; margin-bottom: 16px;\">In June 2026, the CBN introduced new market-structure requirements targeting ecosystem dominance.<\/p>\n<p>        <!-- Layout uses tc-reg-flex to switch to column on mobile --><\/p>\n<div class=\"tc-reg-flex\">\n<div style=\"flex: 1; text-align: center; width: 100%;\">\n<div style=\"font-size: 1.25rem; font-weight: 700; color: #C2410C;\">&gt;25%<\/div>\n<div style=\"font-size: 0.7rem; text-transform: uppercase; font-weight: 700; color: #9A3412;\">Consumer Issuing<\/div>\n<\/p><\/div>\n<div class=\"tc-reg-arrow\" style=\"font-size: 1.5rem; color: #F97316; font-weight: bold;\">\u2192<\/div>\n<div style=\"flex: 1; text-align: center; width: 100%;\">\n<div style=\"font-size: 1.25rem; font-weight: 700; color: #C2410C;\">Max 15%<\/div>\n<div style=\"font-size: 0.7rem; text-transform: uppercase; font-weight: 700; color: #9A3412;\">Merchant Acquiring<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tc-footnote\">\n      *Note: Expected credit loss provisions are accounting estimates of potential future losses, not realised cash defaults. OPay\u2019s 20.66% metric represents its pre-tax profit margin, not net profit. The CBN thresholds indicate regulatory limits, not verified breaches by either company.\n    <\/div>\n<\/p><\/div>\n<p>  <script>\n    const tcXray = {\n      switchTab: function(index) {\n        const tabs = document.querySelectorAll('#tc-xray-premium .tc-nav-btn');\n        const panels = document.querySelectorAll('#tc-xray-premium .tc-panel');<\/p>\n<p>        tabs.forEach((tab, i) => {\n          tab.classList.toggle('active', i === index);\n          tab.setAttribute('aria-selected', i === index);\n        });<\/p>\n<p>        panels.forEach((panel, i) => {\n          panel.classList.toggle('active', i === index);\n        });\n      },<\/p>\n<p>      toggleScale: function(view) {\n        const btnVol = document.getElementById('btn-volume');\n        const btnVal = document.getElementById('btn-value');<\/p>\n<p>        const cOpayOuter = document.getElementById('svg-opay-circle');\n        const cOpayInner = document.getElementById('svg-opay-inner');\n        const vOpay = document.getElementById('stat-opay-val');\n        const sOpay = document.getElementById('stat-opay-sub');<\/p>\n<p>        const cMonieOuter = document.getElementById('svg-monie-circle');\n        const cMonieInner = document.getElementById('svg-monie-inner');\n        const vMonie = document.getElementById('stat-monie-val');\n        const sMonie = document.getElementById('stat-monie-sub');<\/p>\n<p>        const insight = document.getElementById('scale-insight');<\/p>\n<p>        if (view === 'volume') {\n          btnVol.classList.add('active');\n          btnVal.classList.remove('active');<\/p>\n<p>          cOpayOuter.setAttribute('r', '70');\n          cOpayInner.setAttribute('r', '70');\n          vOpay.innerText = '62.3B';\n          sOpay.innerText = 'Transactions Processed';<\/p>\n<p>          cMonieOuter.setAttribute('r', '25');\n          cMonieInner.setAttribute('r', '25');\n          vMonie.innerText = '14.0B';\n          sMonie.innerText = 'Transactions Processed';<\/p>\n<p>          insight.innerHTML = 'OPay processes <strong>4.45 times as many transactions as Moniepoint, capturing the high-frequency velocity of everyday consumer spending.';\n        } else {\n          btnVal.classList.add('active');\n          btnVol.classList.remove('active');<\/p>\n<p>          cOpayOuter.setAttribute('r', '20');\n          cOpayInner.setAttribute('r', '20');\n          vOpay.innerText = '$5.75';\n          sOpay.innerText = 'Average Transaction Value';<\/p>\n<p>          cMonieOuter.setAttribute('r', '70');\n          cMonieInner.setAttribute('r', '70');\n          vMonie.innerText = '$20.49';\n          sMonie.innerText = 'Average Transaction Value';<\/p>\n<p>          insight.innerHTML = 'Moniepoint\u2019s average transaction value is <strong>3.56 times larger than OPay's, reflecting its deep integration into dense merchant checkout counters.';\n        }\n      }\n    };\n  <\/script>\n<\/div>\n<h2 class=\"wp-block-heading\"><strong>Loans are becoming another revenue engine<\/strong><\/h2>\n<p class=\"wp-block-paragraph\">Both OPay and Moniepoint increased their lending activity in 2025, using the financial activity passing through their platforms to extend credit.<\/p>\n<p class=\"wp-block-paragraph\">OPay originated $938.3 million in new loans in Nigeria, up 284.71% in one year.<\/p>\n<p class=\"wp-block-paragraph\">Moniepoint, meanwhile, said it disbursed more than \u20a61 trillion ($696.23 million) in loans to small businesses in 2025. In 2023, it disbursed $71 million in working capital loans.<\/p>\n<p class=\"wp-block-paragraph\">Moniepoint uses its merchant relationships to extend business credit. Its terminals give it visibility into how much a business processes, how frequently it receives payments, and how its transaction activity changes over time.<\/p>\n<p class=\"wp-block-paragraph\">This provides an alternative source of information for assessing a business that may not have conventional financial statements or sufficient collateral.<\/p>\n<p class=\"wp-block-paragraph\">The company\u2019s lending portfolio targets merchants, including provision stores, supermarkets, restaurants, and wholesale distributors. It says businesses that received its loans recorded an average 36% increase in transaction value after accessing credit.<\/p>\n<p class=\"wp-block-paragraph\">OPay\u2019s lending operation has a broader consumer-facing distribution advantage. Its wallet gives it access to millions of users who already transact frequently on the platform. In 2025, its quarterly unique borrowers in Nigeria reached 4.6 million, more than twice the 2.1 million recorded a year earlier.<\/p>\n<p class=\"wp-block-paragraph\">While OPay has built much of its credit product around consumers, it is also looking to expand merchant lending, which it recently introduced. The company says merchant loans typically feature higher limits, lower rates, and longer tenors aligned with business cash flow cycles.<\/p>\n<p class=\"wp-block-paragraph\">Both companies are effectively turning payment histories into credit intelligence, but they are applying that information to different customer segments.<\/p>\n<p class=\"wp-block-paragraph\">For OPay, lending is already a significant contributor to revenue. In 2025, it generated $260.3 million in loan financing revenue, up from $71.5 million in 2024. This represented growth of approximately 264.1% and accounted for 48.5% of its total revenue.<\/p>\n<p class=\"wp-block-paragraph\">But lending also carries risks. OPay\u2019s provision for expected credit losses increased from $24.8 million in 2024 to $121.3 million in 2025, nearly five times the previous year\u2019s figure.<\/p>\n<p class=\"wp-block-paragraph\">The provision was approximately 46.6% of its loan-financing revenue. This is not the same as realised loan losses, but it shows the growing credit risk exposure accompanying the expansion of its lending business.<\/p>\n<p class=\"wp-block-paragraph\">Moniepoint\u2019s lending economics are not public, making it difficult to establish how much revenue its credit business generates or how much it spends managing defaults. The company claims that its non-performing loans (NPLs), loans for which principal or interest payments are overdue by 90 days or more, are small.<\/p>\n<p class=\"wp-block-paragraph\">According to the Central Bank of Nigeria (CBN), <a href=\"https:\/\/www.cbn.gov.ng\/Out\/2025\/CCD\/CBN%20Macroeconomic%20Outlook%20for%20Nigeria%20Report_28_122025_DG.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">NPLs rose to 7% in 2025<\/a>.<\/p>\n<h2 class=\"wp-block-heading\"><strong>Profits<\/strong><\/h2>\n<p class=\"wp-block-paragraph\">Processing billions of transactions and generating hundreds of millions of dollars in revenue is one thing. Turning that activity into profit is another.<\/p>\n<p class=\"wp-block-paragraph\">For payment companies, scale comes with considerable costs: technology infrastructure, transaction processing, customer acquisition, regulatory compliance, fraud management, staff costs, and, increasingly, the cost of extending credit.<\/p>\n<p class=\"wp-block-paragraph\">OPay generated $536.25 million in revenue in 2025 and ultimately made $110.79 million in income before taxes. That translates to a net profit margin of approximately 20.66%. In other words, it retained about 21 cents in profit per dollar of revenue.<\/p>\n<p class=\"wp-block-paragraph\">Moniepoint does not disclose its revenue or profit figures. However, applying OPay\u2019s revenue-to-transaction-value ratio and net profit margin to Moniepoint\u2019s transaction value produces an estimated profit of $88.89 million. This is an indicative estimate, not a reported financial result, and assumes both companies have comparable revenue yields and cost structures.<\/p>\n<p class=\"wp-block-paragraph\">The numbers show how OPay has built a high-frequency payments business and is increasingly extracting revenue from lending. Nearly half of its 2025 revenue came from loan financing, although rising complaints about high interest rates to cover credit-loss provisions indicate that this growth carries additional risk.<\/p>\n<p class=\"wp-block-paragraph\">Moniepoint, on the other hand, has built a merchant-focused payments network that gives it access to business transaction data and opportunities to extend working capital. Its higher average transaction value and growing lending portfolio point to a different monetisation strategy: building deeper financial relationships with merchants rather than relying primarily on the frequency of everyday consumer payments.<\/p>\n<p><!-- TechCabal Interactive Documentary: The \u20a61,000 Journey --><\/p>\n<div id=\"tc-journey-1k\" style=\"font-family: 'Open Sans', system-ui, -apple-system, sans-serif; background: #151515; color: #FFFFFF; border-radius: 12px; width: 100%; max-width: 800px; margin: 32px auto; overflow: hidden; box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2); box-sizing: border-box; line-height: 1.6; border: 1px solid #333333;\">\n<style>\n    \/* Scoped CSS *\/\n    #tc-journey-1k * { box-sizing: border-box; margin: 0; padding: 0; }<\/p>\n<p>    \/* Header *\/\n    #tc-journey-1k .tc-header { padding: 40px 32px 24px 32px; text-align: center; background: linear-gradient(180deg, #1A1A1A 0%, #151515 100%); border-bottom: 1px solid #262626; }\n    #tc-journey-1k .tc-badge { display: inline-block; background: #EA2D2E; color: #FFFFFF; font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; padding: 6px 12px; border-radius: 4px; margin-bottom: 16px; }\n    #tc-journey-1k .tc-title { font-size: 2.25rem; font-weight: 700; line-height: 1.2; margin-bottom: 12px; color: #FFFFFF; }\n    #tc-journey-1k .tc-subtitle { font-size: 1.05rem; color: #9CA3AF; max-width: 600px; margin: 0 auto; }<\/p>\n<p>    \/* Timeline Navigation *\/\n    #tc-journey-1k .tc-timeline-nav { display: flex; width: 100%; background: #0A0A0A; border-bottom: 1px solid #262626; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }\n    #tc-journey-1k .tc-timeline-nav::-webkit-scrollbar { display: none; }\n    #tc-journey-1k .tc-step-btn { flex: 0 0 auto; min-width: 120px; padding: 16px 12px; text-align: center; font-size: 0.8rem; font-weight: 700; color: #6B7280; text-transform: uppercase; letter-spacing: 0.05em; background: transparent; border: none; border-bottom: 3px solid transparent; cursor: pointer; transition: all 0.3s; white-space: nowrap; }\n    #tc-journey-1k .tc-step-btn:hover { color: #D1D5DB; }\n    #tc-journey-1k .tc-step-btn.active { color: #FFFFFF; border-bottom-color: #EA2D2E; background: rgba(234, 45, 46, 0.05); }<\/p>\n<p>    \/* Scene Panels *\/\n    #tc-journey-1k .tc-scene { display: none; padding: 40px 32px; animation: tcFadeIn 0.5s ease; min-height: 480px; position: relative; width: 100%; }\n    #tc-journey-1k .tc-scene.active { display: block; }\n    @keyframes tcFadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }<\/p>\n<p>    #tc-journey-1k .tc-scene-title { font-size: 1.5rem; font-weight: 700; margin-bottom: 8px; color: #FFFFFF; }\n    #tc-journey-1k .tc-scene-desc { font-size: 1rem; color: #9CA3AF; margin-bottom: 32px; max-width: 600px; }<\/p>\n<p>    \/* Scene 1: The Payment *\/\n    #tc-journey-1k .tc-payment-stage { background: #0A0A0A; border: 1px solid #262626; border-radius: 8px; height: 200px; display: flex; align-items: center; justify-content: space-between; padding: 0 40px; position: relative; overflow: hidden; margin-bottom: 24px; width: 100%; }\n    #tc-journey-1k .tc-device { width: 70px; height: 100px; background: #262626; border: 2px solid #404040; border-radius: 12px; display: flex; flex-direction: column; align-items: center; justify-content: center; position: relative; z-index: 2; flex-shrink: 0; }\n    #tc-journey-1k .tc-device-label { font-size: 0.7rem; font-weight: 700; color: #9CA3AF; margin-top: 12px; text-transform: uppercase; letter-spacing: 0.05em; position: absolute; bottom: -25px; white-space: nowrap; }\n    #tc-journey-1k .tc-track { position: absolute; top: 50%; left: 110px; right: 110px; height: 2px; background: #333333; transform: translateY(-50%); z-index: 1; }<\/p>\n<p>    \/* Animated Coin *\/\n    #tc-journey-1k .tc-coin { width: 36px; height: 36px; background: #10B981; border-radius: 50%; position: absolute; top: 50%; left: 110px; transform: translateY(-50%) scale(0); display: flex; align-items: center; justify-content: center; font-size: 0.75rem; font-weight: 700; color: #FFFFFF; z-index: 3; box-shadow: 0 0 15px rgba(16, 185, 129, 0.5); opacity: 0; }\n    #tc-journey-1k .tc-coin.animating { animation: tcMoveCoin 1.5s cubic-bezier(0.4, 0, 0.2, 1) forwards; }\n    @keyframes tcMoveCoin { \n      0% { left: 110px; transform: translateY(-50%) scale(0); opacity: 0; } \n      15% { left: 110px; transform: translateY(-50%) scale(1); opacity: 1; }\n      85% { left: calc(100% - 146px); transform: translateY(-50%) scale(1); opacity: 1; } \n      100% { left: calc(100% - 146px); transform: translateY(-50%) scale(0); opacity: 0; } \n    }<\/p>\n<p>    #tc-journey-1k .tc-pay-btn { display: block; margin: 0 auto; background: #EA2D2E; color: #FFFFFF; border: none; padding: 16px 32px; font-size: 1.1rem; font-weight: 700; border-radius: 30px; cursor: pointer; transition: all 0.3s; box-shadow: 0 4px 12px rgba(234, 45, 46, 0.3); width: 100%; max-width: 250px; }\n    #tc-journey-1k .tc-pay-btn:hover { background: #B91C1C; transform: translateY(-2px); }<\/p>\n<p>    \/* Scene 2: Behind the Payment *\/\n    #tc-journey-1k .tc-infra-grid { display: grid; grid-template-columns: 2fr 1fr; gap: 24px; }\n    #tc-journey-1k .tc-infra-map { background: #0A0A0A; border: 1px solid #262626; border-radius: 8px; padding: 24px; display: flex; flex-direction: column; gap: 16px; position: relative; }\n    #tc-journey-1k .tc-infra-node { background: #1A1A1A; border: 1px solid #333333; padding: 12px 16px; border-radius: 6px; font-size: 0.9rem; font-weight: 600; cursor: pointer; transition: all 0.2s; display: flex; justify-content: space-between; align-items: center; position: relative; z-index: 2; color: #FFFFFF; }\n    #tc-journey-1k .tc-infra-node:hover, #tc-journey-1k .tc-infra-node.active { border-color: #EA2D2E; background: #262626; transform: translateX(4px); }\n    #tc-journey-1k .tc-infra-path { position: absolute; left: 32px; top: 30px; bottom: 30px; width: 2px; background: #333333; z-index: 1; }\n    #tc-journey-1k .tc-infra-panel { background: #1A1A1A; border: 1px solid #333333; border-radius: 8px; padding: 24px; transition: opacity 0.3s; }<\/p>\n<p>    \/* Scene 3: The Relationship *\/\n    #tc-journey-1k .tc-split-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }\n    #tc-journey-1k .tc-split-card { background: #1A1A1A; border: 1px solid #333333; border-radius: 8px; padding: 24px; text-align: center; }\n    #tc-journey-1k .tc-split-card-opay { border-top: 4px solid #10B981; }\n    #tc-journey-1k .tc-split-card-monie { border-top: 4px solid #3B82F6; }\n    #tc-journey-1k .tc-split-icon { width: 56px; height: 56px; border-radius: 50%; background: #262626; margin: 0 auto 16px auto; display: flex; align-items: center; justify-content: center; }<\/p>\n<p>    \/* Scene 4: The Business *\/\n    #tc-journey-1k .tc-rev-box { background: #0A0A0A; border: 1px solid #262626; border-radius: 8px; padding: 24px; text-align: center; margin-bottom: 24px; }\n    #tc-journey-1k .tc-rev-bar-wrap { width: 100%; height: 40px; display: flex; border-radius: 6px; overflow: hidden; margin: 24px 0; border: 1px solid #333333; }\n    #tc-journey-1k .tc-rev-segment { display: flex; align-items: center; justify-content: center; font-size: 0.75rem; font-weight: 700; color: #FFFFFF; text-align: center; line-height: 1.2; }<\/p>\n<p>    \/* Scene 5: Data Funnel *\/\n    #tc-journey-1k .tc-funnel-grid { display: grid; grid-template-columns: 1fr 40px 1fr; gap: 16px; align-items: center; }\n    #tc-journey-1k .tc-funnel-box { background: #1A1A1A; border: 1px solid #333333; padding: 24px; border-radius: 8px; text-align: center; }\n    #tc-journey-1k .tc-arrow-right { color: #6B7280; font-size: 2rem; font-weight: 300; text-align: center; }<\/p>\n<p>    \/* Editorial Note *\/\n    #tc-journey-1k .tc-editorial-note { font-size: 0.85rem; color: #9CA3AF; background: #0A0A0A; border-left: 3px solid #6B7280; padding: 16px; margin-top: 24px; font-style: italic; border-radius: 0 4px 4px 0; }<\/p>\n<p>    \/* MOBILE RESPONSIVENESS OVERRIDES *\/\n    @media (max-width: 650px) {\n      #tc-journey-1k .tc-header { padding: 32px 20px; }\n      #tc-journey-1k .tc-title { font-size: 1.75rem; }\n      #tc-journey-1k .tc-scene { padding: 24px 16px; min-height: 400px; }<\/p>\n<p>      \/* Grid Stacking *\/\n      #tc-journey-1k .tc-infra-grid, \n      #tc-journey-1k .tc-split-grid, \n      #tc-journey-1k .tc-funnel-grid { grid-template-columns: 1fr; gap: 16px; }<\/p>\n<p>      #tc-journey-1k .tc-arrow-right { transform: rotate(90deg); margin: 0; height: 30px; line-height: 30px; }<\/p>\n<p>      \/* Payment Animation Mobile Scaling *\/\n      #tc-journey-1k .tc-payment-stage { padding: 0 16px; height: 160px; }\n      #tc-journey-1k .tc-device { width: 50px; height: 80px; }\n      #tc-journey-1k .tc-device-label { font-size: 0.6rem; bottom: -20px; }\n      #tc-journey-1k .tc-track { left: 66px; right: 66px; }\n      #tc-journey-1k .tc-coin { width: 30px; height: 30px; font-size: 0.65rem; }<\/p>\n<p>      \/* Re-calculate animation coordinates for smaller width *\/\n      #tc-journey-1k @keyframes tcMoveCoin { \n        0% { left: 66px; transform: translateY(-50%) scale(0); opacity: 0; } \n        15% { left: 66px; transform: translateY(-50%) scale(1); opacity: 1; }\n        85% { left: calc(100% - 96px); transform: translateY(-50%) scale(1); opacity: 1; } \n        100% { left: calc(100% - 96px); transform: translateY(-50%) scale(0); opacity: 0; } \n      }<\/p>\n<p>      \/* Timeline buttons fit *\/\n      #tc-journey-1k .tc-step-btn { padding: 14px 16px; font-size: 0.75rem; }\n    }\n  <\/style>\n<p>  <!-- HEADER --><\/p>\n<div class=\"tc-header\">\n<div class=\"tc-badge\">Interactive Explainer<\/div>\n<h1 class=\"tc-title\">The \u20a61,000 Journey<\/h1>\n<p class=\"tc-subtitle\">Explore the hidden infrastructure, commercial relationships, and data pipelines behind an everyday digital payment in Nigeria.<\/p>\n<\/p><\/div>\n<p>  <!-- NAVIGATION --><\/p>\n<div class=\"tc-timeline-nav\" role=\"tablist\">\n    <button class=\"tc-step-btn active\" role=\"tab\" onclick=\"tcJourney.switch(0)\">1. The Payment<\/button><br \/>\n    <button class=\"tc-step-btn\" role=\"tab\" onclick=\"tcJourney.switch(1)\">2. Infrastructure<\/button><br \/>\n    <button class=\"tc-step-btn\" role=\"tab\" onclick=\"tcJourney.switch(2)\">3. Relationships<\/button><br \/>\n    <button class=\"tc-step-btn\" role=\"tab\" onclick=\"tcJourney.switch(3)\">4. The Business<\/button><br \/>\n    <button class=\"tc-step-btn\" role=\"tab\" onclick=\"tcJourney.switch(4)\">5. The Data<\/button>\n  <\/div>\n<p>  <!-- SCENE 1: THE PAYMENT --><\/p>\n<div class=\"tc-scene active\" id=\"scene-0\" role=\"tabpanel\">\n<div class=\"tc-scene-title\">The Initiation<\/div>\n<div class=\"tc-scene-desc\">A customer walks into a retail shop and purchases an item. They open their digital wallet to transfer the funds. Click the button to initiate the payment.<\/div>\n<div class=\"tc-payment-stage\">\n<div class=\"tc-device\">\n        <svg width=\"24\" height=\"24\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"#6B7280\" stroke-width=\"2\"><rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\" ry=\"2\"><\/rect><line x1=\"12\" y1=\"18\" x2=\"12.01\" y2=\"18\"><\/line><\/svg><\/p>\n<div class=\"tc-device-label\">Consumer<\/div>\n<\/p><\/div>\n<div class=\"tc-track\"><\/div>\n<div class=\"tc-coin\" id=\"tc-animated-coin\">\u20a61k<\/div>\n<div class=\"tc-device\" style=\"border-color: #3B82F6;\">\n        <svg width=\"24\" height=\"24\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"#3B82F6\" stroke-width=\"2\"><rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\" ry=\"2\"><\/rect><rect x=\"9\" y=\"9\" width=\"6\" height=\"6\"><\/rect><line x1=\"9\" y1=\"1\" x2=\"9\" y2=\"4\"><\/line><line x1=\"15\" y1=\"1\" x2=\"15\" y2=\"4\"><\/line><line x1=\"9\" y1=\"20\" x2=\"9\" y2=\"23\"><\/line><line x1=\"15\" y1=\"20\" x2=\"15\" y2=\"23\"><\/line><line x1=\"20\" y1=\"9\" x2=\"23\" y2=\"9\"><\/line><line x1=\"20\" y1=\"14\" x2=\"23\" y2=\"14\"><\/line><line x1=\"1\" y1=\"9\" x2=\"4\" y2=\"9\"><\/line><line x1=\"1\" y1=\"14\" x2=\"4\" y2=\"14\"><\/line><\/svg><\/p>\n<div class=\"tc-device-label\">Merchant<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>    <button class=\"tc-pay-btn\" id=\"tc-pay-btn\" onclick=\"tcJourney.triggerPayment()\">PAY \u20a61,000<\/button>\n  <\/div>\n<p>  <!-- SCENE 2: BEHIND THE PAYMENT --><\/p>\n<div class=\"tc-scene\" id=\"scene-1\" role=\"tabpanel\">\n<div class=\"tc-scene-title\">Behind the Screen<\/div>\n<div class=\"tc-scene-desc\">That instant transfer traveled through a multi-layered digital architecture. Click the nodes below to expose the route.<\/div>\n<div class=\"tc-infra-grid\">\n<div class=\"tc-infra-map\">\n<div class=\"tc-infra-path\"><\/div>\n<div class=\"tc-infra-node active\" onclick=\"tcJourney.showInfra(0)\">\n          <span>1. Customer\u2019s Wallet<\/span><br \/>\n          <span style=\"color:#10B981;\">\u2022<\/span>\n        <\/div>\n<div class=\"tc-infra-node\" onclick=\"tcJourney.showInfra(1)\">\n          <span>2. Payment Switch (NIBSS)<\/span><br \/>\n          <span style=\"color:#6B7280;\">\u2022<\/span>\n        <\/div>\n<div class=\"tc-infra-node\" onclick=\"tcJourney.showInfra(2)\">\n          <span>3. Merchant Acquirer<\/span><br \/>\n          <span style=\"color:#3B82F6;\">\u2022<\/span>\n        <\/div>\n<div class=\"tc-infra-node\" onclick=\"tcJourney.showInfra(3)\">\n          <span>4. Settlement Account<\/span><br \/>\n          <span style=\"color:#F59E0B;\">\u2022<\/span>\n        <\/div>\n<\/p><\/div>\n<div class=\"tc-infra-panel\" id=\"tc-infra-detail\">\n<div style=\"font-size: 0.75rem; font-weight: 700; color: #10B981; text-transform: uppercase; margin-bottom: 8px;\">Step 1<\/div>\n<div style=\"font-size: 1.15rem; font-weight: 700; color: #FFFFFF; margin-bottom: 8px;\">Customer\u2019s Issuing Institution<\/div>\n<div style=\"font-size: 0.9rem; color: #9CA3AF;\">The customer initiates the transaction via their bank app or a mobile money wallet (like OPay). The issuer verifies the balance, debits the \u20a61,000, and packages the data to send into the wider network.<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tc-editorial-note\">\n      <strong>Note:<\/strong> If a customer uses an OPay wallet to scan an OPay POS, the transaction might settle entirely within OPay\u2019s internal ledger, bypassing the national switch entirely.\n    <\/div>\n<\/p><\/div>\n<p>  <!-- SCENE 3: THE RELATIONSHIP --><\/p>\n<div class=\"tc-scene\" id=\"scene-2\" role=\"tabpanel\">\n<div class=\"tc-scene-title\">The Battle for the Transaction<\/div>\n<div class=\"tc-scene-desc\">Different fintechs compete for different ends of the same payment. The lines between who owns the consumer and who owns the merchant are blurring.<\/div>\n<div class=\"tc-split-grid\">\n      <!-- OPay --><\/p>\n<div class=\"tc-split-card tc-split-card-opay\">\n<div class=\"tc-split-icon\">\n          <svg width=\"28\" height=\"28\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"#10B981\" stroke-width=\"2\"><path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"><\/path><circle cx=\"12\" cy=\"7\" r=\"4\"><\/circle><\/svg>\n        <\/div>\n<h3 style=\"font-size: 1.15rem; font-weight: 700; color: #FFFFFF; margin-bottom: 8px;\">Consumer &amp; Merchant Play<\/h3>\n<div style=\"font-size: 0.85rem; color: #9CA3AF; margin-bottom: 16px;\"><strong>OPay<\/strong> built a massive base focusing on the sender\u2019s consumer wallet, but they are also aggressively deploying POS terminals to capture the receiver.<\/div>\n<div style=\"background: rgba(16, 185, 129, 0.1); padding: 12px; border-radius: 4px; font-size: 0.75rem; color: #10B981; font-weight: 600;\">\n          Upsell: Consumer loans, savings, and merchant settlement.\n        <\/div>\n<\/p><\/div>\n<p>      <!-- Moniepoint --><\/p>\n<div class=\"tc-split-card tc-split-card-monie\">\n<div class=\"tc-split-icon\">\n          <svg width=\"28\" height=\"28\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"#3B82F6\" stroke-width=\"2\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"><\/rect><line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"><\/line><line x1=\"9\" y1=\"21\" x2=\"9\" y2=\"9\"><\/line><\/svg>\n        <\/div>\n<h3 style=\"font-size: 1.15rem; font-weight: 700; color: #FFFFFF; margin-bottom: 8px;\">Merchant &amp; Consumer Play<\/h3>\n<div style=\"font-size: 0.85rem; color: #9CA3AF; margin-bottom: 16px;\"><strong>Moniepoint<\/strong> became a giant by focusing on the receiver as an acquirer. Now, they are pushing personal banking apps to capture the consumer side too.<\/div>\n<div style=\"background: rgba(59, 130, 246, 0.1); padding: 12px; border-radius: 4px; font-size: 0.75rem; color: #3B82F6; font-weight: 600;\">\n          Upsell: Working capital, expense cards, and personal banking.\n        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>  <!-- SCENE 4: THE BUSINESS --><\/p>\n<div class=\"tc-scene\" id=\"scene-3\" role=\"tabpanel\">\n<div class=\"tc-scene-title\">Value \u2260 Revenue<\/div>\n<div class=\"tc-scene-desc\">When the customer pays \u20a61,000, no single payment company claims it as revenue. It is sliced into microscopic fees.<\/div>\n<div class=\"tc-rev-box\">\n<div style=\"font-size: 0.85rem; font-weight: 700; color: #9CA3AF; text-transform: uppercase;\">Total Transaction<\/div>\n<div style=\"font-size: 2.5rem; font-weight: 700; color: #FFFFFF; line-height: 1;\">\u20a61,000<\/div>\n<div class=\"tc-rev-bar-wrap\">\n<div class=\"tc-rev-segment\" style=\"width: 85%; background: #1A1A1A; border-right: 1px solid #333;\" title=\"Merchant Settlement\">\n          Merchant Settles Majority\n        <\/div>\n<div class=\"tc-rev-segment\" style=\"width: 15%; background: #EA2D2E; padding: 0 4px; font-size: 0.65rem;\" title=\"Fees\">\n          % in Fees\n        <\/div>\n<\/p><\/div>\n<div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 12px; text-align: left; margin-top: 24px;\">\n<div style=\"background: #1A1A1A; padding: 12px; border-radius: 6px; border: 1px solid #333;\">\n<div style=\"font-size: 0.7rem; font-weight: 700; color: #EA2D2E; text-transform: uppercase; margin-bottom: 4px;\">Merchant Charge<\/div>\n<div style=\"font-size: 0.8rem; color: #9CA3AF;\">The acquirer charges a capped fee (or flat rate) to process the transfer.<\/div>\n<\/p><\/div>\n<div style=\"background: #1A1A1A; padding: 12px; border-radius: 6px; border: 1px solid #333;\">\n<div style=\"font-size: 0.7rem; font-weight: 700; color: #3B82F6; text-transform: uppercase; margin-bottom: 4px;\">Switch Fees<\/div>\n<div style=\"font-size: 0.8rem; color: #9CA3AF;\">The acquirer splits that tiny fee with the central routing network.<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>  <!-- SCENE 5: THE DATA --><\/p>\n<div class=\"tc-scene\" id=\"scene-4\" role=\"tabpanel\">\n<div class=\"tc-scene-title\">Payment as Intelligence<\/div>\n<div class=\"tc-scene-desc\">One \u20a61,000 payment generates a few kobo. But millions of payments generate a dataset capable of underwriting massive loan portfolios.<\/div>\n<div class=\"tc-funnel-grid\" style=\"margin-top: 24px;\">\n      <!-- Input --><\/p>\n<div class=\"tc-funnel-box\">\n        <svg width=\"32\" height=\"32\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"#FFFFFF\" stroke-width=\"1.5\" style=\"margin-bottom: 12px;\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"><\/rect><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"><\/line><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"><\/line><\/svg><\/p>\n<div style=\"font-size: 1rem; font-weight: 700; color: #FFFFFF; margin-bottom: 8px;\">Raw Data<\/div>\n<ul style=\"text-align: left; font-size: 0.8rem; color: #9CA3AF; list-style: none; padding: 0;\">\n<li style=\"margin-bottom: 4px;\"><span style=\"color:#10B981;\">\u2192<\/span> Purchase frequency<\/li>\n<li style=\"margin-bottom: 4px;\"><span style=\"color:#10B981;\">\u2192<\/span> Average basket size<\/li>\n<li><span style=\"color:#10B981;\">\u2192<\/span> Cash flow consistency<\/li>\n<\/ul><\/div>\n<div class=\"tc-arrow-right\">\u2192<\/div>\n<p>      <!-- Output --><\/p>\n<div class=\"tc-funnel-box\" style=\"border-color: #EA2D2E;\">\n        <svg width=\"32\" height=\"32\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"#EA2D2E\" stroke-width=\"1.5\" style=\"margin-bottom: 12px;\"><path d=\"M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\"><\/path><\/svg><\/p>\n<div style=\"font-size: 1rem; font-weight: 700; color: #FFFFFF; margin-bottom: 8px;\">Credit Intelligence<\/div>\n<div style=\"font-size: 0.8rem; color: #9CA3AF; text-align: left;\">Fintechs use the relentless stream of incoming payments as proof of income, allowing them to instantly disburse loans.<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>  <!-- Application Logic --><br \/>\n  <script>\n    const tcJourney = {\n      infraData: [\n        {step: \"Step 1\", color: \"#10B981\", title: \"Customer's Issuing Institution\", desc: \"The customer initiates the transaction via their bank app or a mobile money wallet (like OPay). The issuer verifies the balance, debits the \u20a61,000, and packages the data to send into the wider network.\"},\n        {step: \"Step 2\", color: \"#6B7280\", title: \"The Payment Switch\", desc: \"Unless the sender and receiver use the exact same app, the payment must be routed through a central switch (like NIBSS in Nigeria). The switch acts as the national traffic cop, ensuring the funds are securely directed to the correct receiving institution.\"},\n        {step: \"Step 3\", color: \"#3B82F6\", title: \"Merchant Acquirer\", desc: \"The acquiring institution (e.g., OPay or Moniepoint) receives the signal from the switch. They are responsible for processing the payment on behalf of the merchant and confirming to the POS terminal that the transaction was successful.\"},\n        {step: \"Step 4\", color: \"#F59E0B\", title: \"Merchant Settlement Account\", desc: \"The terminal prints the receipt, but the actual cash settles into the merchant's bank account later (often instantly for intra-network, or at the end of the day\/T+1 for card processing), minus the Merchant Service Charge (MSC).\"}\n      ],<\/p>\n<p>      switch: function(index) {\n        document.querySelectorAll('#tc-journey-1k .tc-step-btn').forEach((btn, i) => {\n          btn.classList.toggle('active', i === index);\n          btn.setAttribute('aria-selected', i === index);\n        });<\/p>\n<p>        document.querySelectorAll('#tc-journey-1k .tc-scene').forEach((scene, i) => {\n          scene.classList.toggle('active', i === index);\n        });<\/p>\n<p>        const nav = document.querySelector('#tc-journey-1k .tc-timeline-nav');\n        const activeBtn = document.querySelectorAll('#tc-journey-1k .tc-step-btn')[index];\n        if (activeBtn && nav) {\n          const scrollLeft = activeBtn.offsetLeft - (nav.offsetWidth \/ 2) + (activeBtn.offsetWidth \/ 2);\n          nav.scrollTo({ left: scrollLeft, behavior: 'smooth' });\n        }\n      },<\/p>\n<p>      triggerPayment: function() {\n        const coin = document.getElementById('tc-animated-coin');\n        const btn = document.getElementById('tc-pay-btn');<\/p>\n<p>        btn.style.pointerEvents = 'none';\n        btn.style.opacity = '0.5';\n        btn.innerText = 'PROCESSING...';<\/p>\n<p>        coin.classList.remove('animating');\n        void coin.offsetWidth; \n        coin.classList.add('animating');<\/p>\n<p>        setTimeout(() => {\n          this.switch(1);\n          btn.style.pointerEvents = 'auto';\n          btn.style.opacity = '1';\n          btn.innerText = 'PAY \u20a61,000';\n        }, 1600); \n      },<\/p>\n<p>      showInfra: function(index) {\n        document.querySelectorAll('#tc-journey-1k .tc-infra-node').forEach((node, i) => {\n          node.classList.toggle('active', i === index);\n        });<\/p>\n<p>        const panel = document.getElementById('tc-infra-detail');\n        const data = this.infraData[index];<\/p>\n<p>        panel.style.opacity = 0;\n        setTimeout(() => {\n          panel.innerHTML = `<\/p>\n<div style=\"font-size: 0.75rem; font-weight: 700; color: ${data.color}; text-transform: uppercase; margin-bottom: 8px;\">${data.step}<\/script><\/div>\n<div style=\"font-size: 1.15rem; font-weight: 700; color: #FFFFFF; margin-bottom: 8px;\">${data.title}<\/div>\n<div style=\"font-size: 0.9rem; color: #9CA3AF;\">${data.desc}<\/div>\n<p>          `;<br \/>\n          panel.style.opacity = 1;<br \/>\n        }, 150);<br \/>\n      }<br \/>\n    };<\/p>\n<\/div>\n<p>Source: <\/p>\n<div class=\"nSourse\">TechCabal<\/div>\n","protected":false},"excerpt":{"rendered":"<p>A Bolt driver in Nigeria will likely ask you to pay via OPay at the end of a trip, while a local store is more likely to have a Moniepoint&hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-14830","post","type-post","status-publish","format-standard","hentry","category-technology"],"_links":{"self":[{"href":"https:\/\/globalnigerianews.com\/index.php\/wp-json\/wp\/v2\/posts\/14830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/globalnigerianews.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/globalnigerianews.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/globalnigerianews.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/globalnigerianews.com\/index.php\/wp-json\/wp\/v2\/comments?post=14830"}],"version-history":[{"count":0,"href":"https:\/\/globalnigerianews.com\/index.php\/wp-json\/wp\/v2\/posts\/14830\/revisions"}],"wp:attachment":[{"href":"https:\/\/globalnigerianews.com\/index.php\/wp-json\/wp\/v2\/media?parent=14830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/globalnigerianews.com\/index.php\/wp-json\/wp\/v2\/categories?post=14830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/globalnigerianews.com\/index.php\/wp-json\/wp\/v2\/tags?post=14830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}