"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Overview · Mauzo API</title>\n<link rel=\"icon\" type=\"image/x-icon\" href=\"/mauzo.ico\">\n<script>\n(function () {\n    var KEY = 'mauzo.appearance', root = document.documentElement, prefs = {};\n    try { prefs = JSON.parse(localStorage.getItem(KEY) || '{}') || {}; } catch (e) { prefs = {}; }\n    try {\n        var legacy = localStorage.getItem('tablerTheme');\n        if (!prefs.scheme && legacy) { prefs.scheme = legacy; }\n        var q = new URLSearchParams(location.search).get('theme');\n        if (q === 'dark' || q === 'light' || q === 'system') { prefs.scheme = q; localStorage.setItem(KEY, JSON.stringify(prefs)); }\n    } catch (e) {}\n    var defaults = {scheme: 'system', sidebar: 'expanded', nav: 'floating', width: 'default'};\n    var dark = window.matchMedia ? window.matchMedia('(prefers-color-scheme: dark)') : null;\n    function apply() {\n        var p = Object.assign({}, defaults, prefs);\n        if (p.scheme === 'light' || p.scheme === 'dark') { root.setAttribute('data-theme', p.scheme); } else { root.removeAttribute('data-theme'); }\n        var resolved = p.scheme === 'dark' || (p.scheme !== 'light' && dark && dark.matches) ? 'dark' : 'light';\n        root.setAttribute('data-bs-theme', resolved);\n        root.setAttribute('data-sidebar', p.sidebar);\n        root.setAttribute('data-nav', p.nav);\n        root.setAttribute('data-width', p.width);\n        if (document.body) { document.body.removeAttribute('data-bs-theme'); }\n    }\n    apply();\n    if (dark && dark.addEventListener) { dark.addEventListener('change', apply); }\n    // Charts (ApexCharts reads window.Apex): Mauzo red for the main series, then ink, green, blue,\n    // colours in a fixed order; grid and labels from the tokens. Re-read when the theme changes.\n    function chartDefaults() {\n        var css = getComputedStyle(root), v = function (n) { return css.getPropertyValue(n).trim(); };\n        window.Apex = {\n            colors: [v('--brand'), v('--ink-strong'), v('--success'), v('--info'), v('--warning'), v('--vendor-purple'), v('--vendor-teal')],\n            chart: {fontFamily: 'inherit', foreColor: v('--muted'), toolbar: {show: false}, background: 'transparent'},\n            grid: {borderColor: v('--border'), strokeDashArray: 4, xaxis: {lines: {show: false}}},\n            stroke: {width: 2, curve: 'smooth'},\n            dataLabels: {enabled: false},\n            tooltip: {theme: root.getAttribute('data-bs-theme') === 'dark' ? 'dark' : 'light'},\n            legend: {labels: {colors: v('--muted')}, markers: {radius: 2}}\n        };\n    }\n    // Read a design token in chart code: mzTok('--brand').\n    window.mzTok = function (n) { return getComputedStyle(root).getPropertyValue(n).trim(); };\n    document.addEventListener('DOMContentLoaded', function () { try { chartDefaults(); } catch (e) {} });\n    document.addEventListener('mauzo:appearance', function () { try { chartDefaults(); } catch (e) {} });\n    window.MauzoAppearance = {\n        get: function () { return Object.assign({}, defaults, prefs); },\n        set: function (key, value) {\n            prefs[key] = value;\n            try { localStorage.setItem(KEY, JSON.stringify(prefs)); localStorage.removeItem('tablerTheme'); } catch (e) {}\n            apply();\n            document.dispatchEvent(new CustomEvent('mauzo:appearance', {detail: this.get()}));\n        }\n    };\n})();\n</script>\n<link rel=\"stylesheet\" href=\"/css/mauzo-tokens.css\">\n<style>\n    * { box-sizing: border-box; }\n    html, body { margin: 0; }\n    body { font-family: var(--font-sans); font-size: 15px; line-height: 1.6; background: var(--bg); color: var(--ink); }\n    a { color: var(--ink-strong); }\n    .dx-top { position: sticky; top: 0; z-index: 50; display: flex; align-items: center; gap: 16px; padding: 0 20px; height: 56px; background: var(--surface); border-bottom: 1px solid var(--border); }\n    .dx-brand { display: flex; align-items: center; gap: 8px; text-decoration: none; color: var(--ink-strong); font-weight: 700; font-size: 17px; white-space: nowrap; }\n    .dx-brand .mz-logo { color: var(--ink-strong); }\n    .dx-brand span { font-weight: 500; color: var(--muted); }\n    .dx-nav { display: flex; gap: 2px; overflow-x: auto; scrollbar-width: none; flex: 1; }\n    .dx-nav a { padding: 6px 10px; border-radius: var(--radius-md); color: var(--ink); text-decoration: none; font-size: 14px; font-weight: 500; white-space: nowrap; }\n    .dx-nav a:hover { background: var(--surface-3); color: var(--ink-strong); }\n    .dx-nav a.active { background: var(--surface-3); color: var(--ink-strong); font-weight: 600; }\n    .dx-icon-btn { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); color: var(--ink-strong); cursor: pointer; }\n    .dx-icon-btn:hover { background: var(--surface-3); }\n    .mz-when-dark { display: none !important; }\n    html[data-bs-theme=\"dark\"] .mz-when-dark { display: inline-flex !important; }\n    html[data-bs-theme=\"dark\"] .mz-when-light { display: none !important; }\n    .dx-wrap { max-width: 1180px; margin: 0 auto; padding: 32px 20px 64px; }\n    .dx-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-xl); box-shadow: var(--shadow-card); }\n    .dx-btn { display: inline-flex; align-items: center; gap: 6px; padding: 8px 14px; border-radius: var(--radius-md); border: 1px solid var(--border-strong); background: var(--surface); color: var(--ink-strong); font-weight: 500; font-size: 14px; text-decoration: none; }\n    .dx-btn:hover { background: var(--surface-3); }\n    .dx-btn.primary { background: var(--primary); border-color: var(--primary); color: var(--primary-ink); }\n    .dx-btn.primary:hover { background: var(--primary-hover); }\n    .dx-muted { color: var(--muted); }\n    .dx-label { font-size: 11px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; color: var(--muted); }\n    .dx-foot { text-align: center; color: var(--muted); font-size: 13px; padding: 24px 0 8px; }\n    @media (max-width: 720px) { .dx-top { gap: 10px; padding: 0 12px; } .dx-brand span { display: none; } }\n</style>\n    <style>\n        .dx-hero { padding: 8px 0 28px; }\n        .dx-hero h1 { font-size: clamp(28px, 4vw, 40px); line-height: 1.1; letter-spacing: -.02em; color: var(--ink-strong); margin: 10px 0 8px; }\n        .dx-hero p { font-size: 17px; max-width: 640px; margin: 0 0 20px; }\n        .dx-pill { display: inline-flex; align-items: center; gap: 6px; padding: 3px 10px; border: 1px solid var(--border); border-radius: 999px; font-size: 12px; font-weight: 600; background: var(--surface); }\n        .dx-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--success); }\n        .dx-areas { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-bottom: 28px; }\n        .dx-area { padding: 14px 16px; }\n        .dx-area b { display: block; color: var(--ink-strong); }\n        .dx-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; }\n        .dx-guide { display: flex; gap: 14px; padding: 18px; text-decoration: none; color: inherit; transition: border-color .15s ease; }\n        .dx-guide:hover { border-color: var(--border-strong); }\n        .dx-guide .ic { flex: 0 0 38px; height: 38px; border-radius: var(--radius-lg); background: var(--surface-3); color: var(--ink-strong); display: flex; align-items: center; justify-content: center; }\n        .dx-guide h2 { font-size: 16px; margin: 0 0 4px; color: var(--ink-strong); }\n        .dx-guide p { margin: 0; font-size: 14px; color: var(--muted); }\n        .dx-dl { margin-top: 28px; padding: 20px; display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }\n        .dx-dl .t { flex: 1 1 220px; }\n        .dx-dl .t b { color: var(--ink-strong); }\n        @media (max-width: 820px) { .dx-areas { grid-template-columns: 1fr 1fr; } }\n    </style>\n</head>\n<body>\n<header class=\"dx-top\">\n    <a class=\"dx-brand\" href=\"/api/docs\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 634.44 105.04\" width=\"132.9\" height=\"22\" class=\"mz-logo \" role=\"img\" aria-label=\"Mauzo\"><title>Mauzo</title>\n<path fill=\"var(--brand, #e9473c)\" d=\"M129.5,33.65c-11.73,12.75-23.45,25.49-35.18,38.24-2.36,2.56-4.62,5.22-7.09,7.67-4.37,4.34-8.93,4.9-13.7,.46-6.78-6.31-13.64-12.54-21.42-19.68-11.06,11.2-21.97,22.28-32.92,33.31-2.04,2.05-4.04,5.21-6.42,5.59-3.74,.6-8.95,.53-11.34-1.65-1.86-1.7-1.97-8.58-.1-10.55,14.97-15.78,30.39-31.16,46.29-46,1.8-1.68,8.39-.54,11.1,1.5,7.34,5.52,13.78,12.22,21.1,18.92,13.09-14.48,25.64-28.34,39.62-43.8-7.53,0-13.17-.22-18.79,.06-6.17,.3-9.79-2.96-9.95-8.45C90.53,3.26,94.34-.08,100.8,0c12.77,.16,25.55,.21,38.32,.07,6.75-.07,9.4,3.41,9.43,9.65,.05,12.19,.21,24.38,.05,36.57-.07,5.6-2.68,9.61-8.91,9.47-5.75-.13-8.11-3.81-8.23-9.18-.09-4-.02-8.01-.02-12.02-.65-.31-1.29-.62-1.94-.94Z\"/>\n<path fill=\"currentColor\" d=\"M218.77,102.87h-16.86V27.34h14.61c.26,2.15,.56,4.58,.93,7.62,15-12.59,29.63-14.28,42.29,.4,7.16-3.41,13.47-7.84,20.43-9.45,15.25-3.54,28.19,6.64,29.03,23.16,.9,17.62,.2,35.32,.2,53.47h-17.39c0-16.18,.53-32.1-.33-47.95-.26-4.7-3.58-12.04-7.04-13.08-4.83-1.45-11.51,1.02-16.56,3.51-2.34,1.15-3.72,6.28-3.8,9.64-.39,15.67-.17,31.35-.17,47.69h-17.44c0-15.37-.1-30.94,.05-46.51,.06-6.14-.53-13.07-6.9-14.36-5.19-1.05-11.59,1.19-16.69,3.6-2.39,1.13-4.1,6.07-4.18,9.34-.42,15.9-.19,31.81-.19,48.45Z\"/>\n<path fill=\"currentColor\" d=\"M389.86,102.9c-5.16-2.31-13.45,5.54-16.55-4.52-6.41,2.06-13.25,5.49-20.39,6.3-13.73,1.56-24.7-7.04-25.97-18.78-1.72-15.92,5.77-26.1,21.45-27.84,7.7-.85,15.57-.15,23.2-.15,2.39-19.95-7.38-22.88-37.56-12.48-3.05-13.04-2.28-15.43,10.21-17.81,8.65-1.64,17.89-1.82,26.64-.79,10.74,1.26,18.21,8.91,18.73,19.8,.88,18.44,.24,36.96,.24,56.26Zm-18.11-32.73c-5.87,0-11.92-.58-17.81,.15-7.01,.87-10.41,5.35-9.62,12.72,.74,6.95,5.46,7.95,11.11,7.98,13.61,.07,18.18-5.49,16.33-20.85Z\"/>\n<path fill=\"currentColor\" d=\"M634.42,66.25c-.61,24.75-14.83,39.19-38.11,38.69-21.72-.46-36.16-16.95-35.63-40.67,.54-24.21,14.88-39.27,37.19-39.06,23.52,.21,37.18,15.55,36.56,41.04Zm-54.55-1.63c0,2.9-.29,5.83,.05,8.69,1.33,11.09,9.56,17.65,20.39,16.46,10.21-1.12,15.91-9.71,16.01-24.14,.11-15.17-5.35-24.11-15.52-25.43-14.03-1.82-21.21,6.45-20.93,24.42Z\"/>\n<path fill=\"currentColor\" d=\"M474.85,27.74V102.55h-16.04v-8.65c-8.55,8.29-17.93,12.79-29.18,10.58-11.86-2.33-19.5-9.87-20.28-22.87-1.07-17.87-.27-35.86-.27-54.16h17.26c0,15.05-.02,30.04,0,45.03,.02,12,4.02,17.13,13.39,17.23,10.32,.11,18.07-7.41,18.1-17.67,.04-14.52,.01-29.04,.01-44.31h17.01Z\"/>\n<path fill=\"currentColor\" d=\"M549.78,88.81v13.54h-57.57c-1.86-7.22-.86-13.51,4.21-19.84,10.61-13.24,20.5-27.07,31.43-41.66h-32.65v-13.07h54.33c1.64,6.34,.45,11.71-3.93,17.27-10.91,13.87-21.13,28.29-32.57,43.76h36.76Z\"/>\n</svg>\n <span>API docs</span>\n    </a>\n    <nav class=\"dx-nav\" aria-label=\"Documentation\">\n                <a href=\"/api/docs\" class=\"active\" aria-current=\"page\">Overview</a>\n                <a href=\"/api/docs/authentication\" class=\"\" >Authentication</a>\n                <a href=\"/api/docs/examples\" class=\"\" >Examples</a>\n                <a href=\"/api/docs/webhooks\" class=\"\" >Webhooks</a>\n                <a href=\"/api/docs/errors\" class=\"\" >Errors</a>\n                <a href=\"/api/docs/swagger\" class=\"\" >API reference</a>\n                <a href=\"/api/docs/redoc\" class=\"\" >ReDoc</a>\n                <a href=\"/api/docs/changelog\" class=\"\" >Changelog</a>\n            </nav>\n    <button type=\"button\" class=\"dx-icon-btn\" id=\"dx-theme\" aria-label=\"Switch light or dark\" title=\"Light or dark\">\n        <svg class=\"mz-when-light\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z\"/></svg>\n        <svg class=\"mz-when-dark\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 12m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0\"/><path d=\"M3 12h1m8 -9v1m8 8h1m-9 8v1m-6.4 -15.4l.7 .7m12.1 -.7l-.7 .7m0 11.4l.7 .7m-12.1 -.7l-.7 .7\"/></svg>\n    </button>\n</header>\n<script>\ndocument.getElementById('dx-theme').addEventListener('click', function () {\n    var dark = document.documentElement.getAttribute('data-bs-theme') === 'dark';\n    if (window.MauzoAppearance) { window.MauzoAppearance.set('scheme', dark ? 'light' : 'dark'); }\n});\n</script>\n<main class=\"dx-wrap\">\n    <section class=\"dx-hero\">\n        <span class=\"dx-pill\"><span class=\"dx-dot\"></span> v1 · operational</span>\n        <h1>The Mauzo API</h1>\n        <p class=\"dx-muted\">Take payments, send money, raise invoices and hear back about every result, from your own systems.</p>\n        <a class=\"dx-btn primary\" href=\"https://mymauzo.com/api/docs/examples\">Start with the examples</a>\n        <a class=\"dx-btn\" href=\"https://mymauzo.com/api/docs/swagger\">API reference</a>\n    </section>\n\n    <div class=\"dx-areas\">\n                <div class=\"dx-card dx-area\"><b>Invoices &amp; bills</b><span class=\"dx-muted\">Create and manage sales and purchases</span></div>\n                <div class=\"dx-card dx-area\"><b>Collections</b><span class=\"dx-muted\">Take payments with M-Pesa</span></div>\n                <div class=\"dx-card dx-area\"><b>Payouts</b><span class=\"dx-muted\">Pay suppliers and others</span></div>\n                <div class=\"dx-card dx-area\"><b>Webhooks</b><span class=\"dx-muted\">Hear about results as they happen</span></div>\n            </div>\n\n    <div class=\"dx-label\" style=\"margin-bottom: 10px;\">Guides</div>\n    <div class=\"dx-grid\">\n                <a class=\"dx-card dx-guide\" href=\"https://mymauzo.com/api/docs/authentication\">\n            <span class=\"ic\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6z\"/><path d=\"M8 11v-4a4 4 0 1 1 8 0v4\"/></svg></span>\n            <span><h2>Authentication</h2><p>Create a key pair, exchange it for a 30-minute access token, and refresh it.</p></span>\n        </a>\n                <a class=\"dx-card dx-guide\" href=\"https://mymauzo.com/api/docs/examples\">\n            <span class=\"ic\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 8l-4 4l4 4\"/><path d=\"M17 8l4 4l-4 4\"/><path d=\"M14 4l-4 16\"/></svg></span>\n            <span><h2>Examples</h2><p>Authenticate, collect money and send money: the calls in order, with cURL.</p></span>\n        </a>\n                <a class=\"dx-card dx-guide\" href=\"https://mymauzo.com/api/docs/webhooks\">\n            <span class=\"ic\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 5a2 2 0 1 1 4 0a7 7 0 0 1 4 6v3a4 4 0 0 0 2 3h-16a4 4 0 0 0 2 -3v-3a7 7 0 0 1 4 -6\"/><path d=\"M9 17v1a3 3 0 0 0 6 0v-1\"/></svg></span>\n            <span><h2>Webhooks</h2><p>What calls you back and when, signatures, which secret, and testing your endpoint.</p></span>\n        </a>\n                <a class=\"dx-card dx-guide\" href=\"https://mymauzo.com/api/docs/errors\">\n            <span class=\"ic\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 9v4\"/><path d=\"M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0z\"/><path d=\"M12 16h.01\"/></svg></span>\n            <span><h2>Errors</h2><p>Every error code, what it means and what to do about it.</p></span>\n        </a>\n                <a class=\"dx-card dx-guide\" href=\"https://mymauzo.com/api/docs/swagger\">\n            <span class=\"ic\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 4h16v16h-16z\"/><path d=\"M4 9h16\"/><path d=\"M9 4v16\"/></svg></span>\n            <span><h2>API reference</h2><p>Every endpoint, with its fields and responses. Try calls from the browser.</p></span>\n        </a>\n                <a class=\"dx-card dx-guide\" href=\"https://mymauzo.com/api/docs/redoc\">\n            <span class=\"ic\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 19a9 9 0 0 1 9 0a9 9 0 0 1 9 0\"/><path d=\"M3 6a9 9 0 0 1 9 0a9 9 0 0 1 9 0\"/><path d=\"M3 6l0 13\"/><path d=\"M12 6l0 13\"/><path d=\"M21 6l0 13\"/></svg></span>\n            <span><h2>ReDoc</h2><p>The same reference as one readable page, with search.</p></span>\n        </a>\n                <a class=\"dx-card dx-guide\" href=\"https://mymauzo.com/api/docs/changelog\">\n            <span class=\"ic\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 8l0 4l2 2\"/><path d=\"M3.05 11a9 9 0 1 1 .5 4m-.5 5v-5h5\"/></svg></span>\n            <span><h2>Changelog</h2><p>What changed for integrators, newest first.</p></span>\n        </a>\n            </div>\n\n    <div class=\"dx-card dx-dl\">\n        <div class=\"t\"><b>Downloads</b><div class=\"dx-muted\" style=\"font-size: 14px;\">The guide, and files for your API client.</div></div>\n        <a class=\"dx-btn\" href=\"https://mymauzo.com/api/docs/integration-guide\">Integration guide</a>\n        <a class=\"dx-btn\" href=\"https://mymauzo.com/api/docs/postman/download\">Postman collection</a>\n        <a class=\"dx-btn\" href=\"https://mymauzo.com/api/docs/openapi.yaml\">OpenAPI (YAML)</a>\n        <a class=\"dx-btn\" href=\"https://mymauzo.com/api/docs/openapi.json\">OpenAPI (JSON)</a>\n    </div>\n\n    <div class=\"dx-foot\">© 2026 Mauzo · Questions? <a href=\"mailto:techteam@1809ltd.co.ke\">Contact support</a></div>\n</main>\n</body>\n</html>\n"