10 Things You Probably Didn't Know About DGateway
DGateway is a unified payment and commerce platform for Africa that lets developers and businesses accept mobile money (MTN, Airtel) and card payments through a single API. But beyond payments, it has quietly evolved into a full commerce platform with tools to sell digital products, courses, templates, and more. If you think it is just an API for collecting and disbursing money, you are in for a surprise.
Here are 10 features that most people have no idea exist.
1. A Complete Course Platform with HLS Video Streaming
DGateway has a built-in course platform — not a simple file host, but a proper learning management system. Course creators can build structured courses with modules, lessons, and multiple content types: video, text, PDF, embeds, and downloadable files.
The standout? Video lessons are powered by MediaKit, our self-hosted video streaming engine. Videos are automatically transcoded into multi-quality HLS streams (480p, 720p, 1080p) with adaptive bitrate switching. Students get Netflix-like playback quality — the player adjusts to their internet speed in real time.
Free courses can be set to fully public — anyone with the link can watch without signing up. Or creators can enable an email gate to collect leads before granting access. Paid courses accept mobile money payments directly, and students are auto-enrolled after payment confirmation.
How to Create a Course
Navigate to Dashboard > Courses > Create Course and fill in the details:
// What a course looks like in the DGateway API
{
"title": "Learn React from Scratch",
"description": "A hands-on course for beginners",
"price": 25000, // UGX 25,000
"currency": "UGX",
"additional_currencies": {
"USD": 7,
"KES": 900
},
"access_type": "paid", // "free_public", "free_email_gate", "paid"
"modules": [
{
"title": "Getting Started",
"lessons": [
{
"title": "What is React?",
"type": "video", // "video", "text", "pdf", "embed", "file"
"media_url": "https://mediakit.yourserver.com/stream/abc123.m3u8"
}
]
}
]
}The commission rate for courses is 15%. Multi-currency pricing lets you set UGX 25,000 for local students and USD 7 for international learners — the checkout page shows the right price automatically.
Try It Now
Go to your DGateway Dashboard and click Courses in the sidebar. You can publish your first course in under 30 minutes. Learn more in the Courses documentation.
2. Digital Products with 3D Ebook Flip Preview
DGateway supports selling digital products — ebooks, software, design assets, audio files, and more. But the ebook experience is something special.
When a seller lists an ebook, they can upload preview pages (either manually or by auto-extracting from the PDF). Buyers see these pages in a realistic 3D book flipper — complete with page curl animations, book spine, edge depth, and shadows. It feels like flipping through a physical book in your browser.
The seller controls exactly how many pages are free preview. After the preview ends, a "locked" page appears prompting the buyer to purchase and unlock the full book. It is the kind of polish you would expect from a dedicated ebook platform, not a payment gateway.
Listing a Digital Product via the API
# Create a digital product
curl -X POST https://api.dgateway.desispay.com/v1/products \
-H "Authorization: Bearer dgw_sk_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"title": "The Uganda Startup Playbook",
"description": "Everything you need to launch a tech startup in East Africa",
"type": "ebook",
"price": 15000,
"currency": "UGX",
"preview_pages": 5,
"file_url": "https://storage.example.com/ebook.pdf"
}'The platform auto-extracts the first N pages as images for the 3D flipper. No manual screenshot work needed — just upload the PDF, set the preview count, and the reader is ready.
| Product Type | Supported Formats | Commission |
|---|---|---|
| Ebook | PDF, EPUB | 12% |
| Software | ZIP, EXE, DMG, APK | 12% |
| Audio | MP3, WAV, FLAC | 12% |
| Graphics | PNG, PSD, AI, SVG, ZIP | 12% |
| Video | MP4, MOV, ZIP | 12% |
| Generic | Any file | 12% |
Try It Now
Go to Dashboard > Products > Create Product, select "Ebook" as the type, and upload your PDF. The 3D preview is generated automatically. See Products documentation for more options.
3. A Templates & UI Blocks Marketplace
DGateway is not just for payments and courses. It has a full templates marketplace where sellers can list:
- Website and app templates — Next.js, React, HTML/CSS, WordPress themes
- Design templates — Canva, Figma, Photoshop, Illustrator, After Effects, Premiere Pro
- Presentation templates — Google Slides, Keynote, PowerPoint
- UI component blocks — Hero sections, pricing tables, feature grids, navbars
Templates support screenshot galleries, live preview URLs, video demos, tech stack tags, and file downloads. UI blocks can include copyable code snippets — buyers can copy individual component code directly from the browser after purchase, similar to shadcn/ui or Aceternity UI.
Creating a UI Block Collection
// Template with copyable code blocks
{
"title": "SaaS Landing Page Components",
"type": "ui_blocks",
"price": 35000, // UGX 35,000
"currency": "UGX",
"tech_stack": ["nextjs", "tailwindcss", "typescript"],
"live_preview_url": "https://preview.example.com/saas-blocks",
"blocks": [
{
"name": "Hero Section",
"code": "<section className='min-h-screen flex items-center...'> ... </section>",
"preview_image": "hero-preview.png",
"language": "tsx"
},
{
"name": "Pricing Table",
"code": "<div className='grid grid-cols-3 gap-8...'> ... </div>",
"preview_image": "pricing-preview.png",
"language": "tsx"
}
]
}The commission rate for templates is 13%, and sellers can list items for free (requiring email to download) or at any price they choose.
Try It Now
Navigate to Dashboard > Templates > Create Template. Choose either "Template" (downloadable file) or "UI Block Collection" (code snippets). Browse what others are selling at the Templates Marketplace. See the Templates feature page for the full overview.
4. White-Label Shops with Custom Branding
Every DGateway user gets a customizable storefront at their own URL. You can set your shop name, upload desktop and mobile banners, choose colors, and organize your products, courses, and payment links — all without writing code.
But here is the part most people miss: you can share filtered shop links. Want to advertise only your courses on social media? Share yourshop?courses and visitors see only courses — no products, no payment links. Same for ?products or ?templates. Each filtered view has its own clean layout optimized for that content type, with a "Back to Shop" button for full browsing.
Setting Up Your Store
# Your store is automatically available at:
https://dgatewayadmin.desispay.com/store/shop/your-app-slug
# Share filtered links:
https://dgatewayadmin.desispay.com/store/shop/your-app-slug?courses
https://dgatewayadmin.desispay.com/store/shop/your-app-slug?products
https://dgatewayadmin.desispay.com/store/shop/your-app-slug?templatesStore Customization Options
| Setting | What It Controls |
|---|---|
| Shop Name | Displayed at the top of your store page |
| Desktop Banner | Large banner image (1200x400px recommended) |
| Mobile Banner | Compact banner for mobile screens (800x300px) |
| Text Overlay | Toggle text on/off over the banner image |
| App Slug | Custom URL path for your store |
| Marketplace Listed | Opt in to appear on the DGateway public marketplace |
Try It Now
Go to Dashboard > Settings > Store Settings to customize your store. Then share your store URL on social media, WhatsApp, or your website. Opt into the DGateway Marketplace to get discovered by new buyers. Read more on the Store feature page.
5. Payment Links That Accept Any Amount
Payment links are the fastest way to get paid — create a link, share it, done. But DGateway payment links go beyond fixed prices.
Sellers can create open-amount payment links where the buyer specifies how much to pay, with a minimum amount set by the seller. This is perfect for donations, tips, pay-what-you-want products, or invoices where the amount varies.
Each payment link also tracks how many times it has been used, total revenue generated, and buyer information — turning a simple link into a lightweight sales analytics tool.
Creating a Payment Link
# Create a fixed-amount payment link
curl -X POST https://api.dgateway.desispay.com/v1/payment-links \
-H "Authorization: Bearer dgw_sk_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"title": "Premium WordPress Theme",
"amount": 75000,
"currency": "UGX",
"description": "One-time purchase, lifetime updates"
}'
# Create an open-amount link (donations, tips)
curl -X POST https://api.dgateway.desispay.com/v1/payment-links \
-H "Authorization: Bearer dgw_sk_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"title": "Support Our Ministry",
"min_amount": 1000,
"currency": "UGX",
"open_amount": true,
"description": "Any amount is appreciated. God bless."
}'The commission rate for payment links is 10%. Each link gets a unique URL you can share on WhatsApp, Instagram, Twitter, email — anywhere.
Payment Link Analytics
Every payment link automatically tracks:
| Metric | Description |
|---|---|
| Total Payments | How many times the link has been used |
| Total Revenue | Sum of all payments received through this link |
| Average Payment | Revenue divided by payments |
| Buyer Details | Name, phone number, email for each payment |
| Last Payment | When the most recent payment was made |
Try It Now
Go to Dashboard > Payment Links > Create Link. Set a title, amount (or enable open amount), and click create. Your link is ready to share immediately. See the Payment Links feature page for more.
6. Smart Provider Health Monitoring with Auto-Alerts
DGateway runs automated health checks on every payment provider line — Iotec MTN, Iotec Airtel, Relworx MTN, Relworx Airtel, and Stripe. A daily cron job at 6 AM tests each line by attempting a small balance check, and the results are stored with timestamps.
When a line goes down, DGateway does three things automatically:
- Blocks requests on the faulty line with a clear error message so API consumers can handle it gracefully
- Shows a banner on the member dashboard warning users about the outage
- Sends email notifications to all affected app owners (batched into a single email covering all down lines)
When the line recovers, another notification goes out confirming restoration. The entire system health — including PostgreSQL, Redis, API server, background jobs, and email service — is visible on a single System Health dashboard in the admin panel.
Checking Provider Health Programmatically
# Check all provider line statuses
curl -X GET https://api.dgateway.desispay.com/v1/health/providers \
-H "Authorization: Bearer dgw_sk_live_your_key"
# Response:
{
"data": {
"providers": [
{ "name": "iotec_mtn", "status": "up", "last_checked": "2026-04-03T06:00:00Z" },
{ "name": "iotec_airtel", "status": "up", "last_checked": "2026-04-03T06:00:00Z" },
{ "name": "relworx_mtn", "status": "up", "last_checked": "2026-04-03T06:00:00Z" },
{ "name": "relworx_airtel", "status": "down", "last_checked": "2026-04-03T06:00:00Z",
"down_since": "2026-04-03T02:15:00Z" },
{ "name": "stripe", "status": "up", "last_checked": "2026-04-03T06:00:00Z" }
]
}
}Smart Routing and Failover
DGateway's smart router automatically selects the best provider for each transaction based on currency, direction (collect/disburse), and provider priority. When a provider line goes down, the router fails over to an alternative line if one is available. For example, if Iotec MTN is down but Relworx MTN is up, MTN Mobile Money payments automatically route through Relworx.
| Provider | Currencies | Capabilities |
|---|---|---|
| Iotec | UGX | Collect, Disburse (Uganda MTN, Airtel) |
| Relworx | UGX, KES, TZS, RWF | Collect, Disburse (East Africa) |
| Stripe | USD, EUR, GBP, KES, UGX | Collect, Disburse (Cards) |
Try It Now
Check the current status of all provider lines in your DGateway Dashboard — look for the health banner at the top. If you are an API consumer, poll the /v1/health/providers endpoint before initiating transactions.
7. A WordPress and WooCommerce Plugin
If your site runs on WordPress, DGateway has a dedicated plugin that adds mobile money payments to WooCommerce checkout. Install it, paste your API credentials, and your store accepts MTN MoMo, Airtel Money, and card payments.
The plugin supports WooCommerce Blocks (the new block-based checkout) and the classic checkout. It handles the full flow: payment initiation, phone prompt, webhook confirmation, and order status updates. No custom code required — it is a drop-in solution.
Quick Install
# Option 1: Download and install via WP-CLI
wp plugin install https://dgateway.desispay.com/downloads/dgateway-plugin-v1.0.2.zip --activate
# Option 2: From WordPress admin
# Go to Plugins > Add New > Search "DGateway" > Install > ActivatePlugin Features at a Glance
| Feature | Supported |
|---|---|
| WooCommerce Classic Checkout | Yes |
| WooCommerce Block Checkout | Yes (v1.0.2+) |
| HPOS (High-Performance Order Storage) | Yes |
| MTN Mobile Money | Yes |
| Airtel Money | Yes |
| Card Payments (Visa/MC) | Yes |
| Subscription Products | Yes |
| Standalone Payment Buttons | Yes (shortcodes) |
| Test Mode | Yes |
| Automatic Webhooks | Yes |
The plugin is versioned, downloadable from the DGateway docs page, and regularly updated. For the full setup walkthrough, read our WordPress Plugin Guide.
Try It Now
Download the plugin from the DGateway Documentation page. The entire setup takes less than 15 minutes. If you need standalone payment buttons without WooCommerce, the plugin's shortcodes work on any WordPress page.
8. API-First Architecture with Real-Time Webhooks
DGateway was built API-first. Every feature — collections, disbursements, subscriptions, store checkout — is accessible through a clean REST API with consistent response formats.
The webhook system deserves special mention. When a transaction status changes, DGateway sends a signed webhook to your configured URL with the full transaction payload. Webhooks include retry logic with exponential backoff, and every delivery attempt is logged.
Collecting a Payment via API
// TypeScript example using fetch
const response = await fetch("https://api.dgateway.desispay.com/v1/collect", {
method: "POST",
headers: {
"Authorization": "Bearer dgw_sk_live_your_secret_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
phone_number: "256770123456",
amount: 50000,
currency: "UGX",
provider: "mtn",
reason: "Invoice #1042 payment",
metadata: {
invoice_id: "INV-1042",
customer_name: "Jane Nakato",
},
}),
});
const result = await response.json();
// result.data.id => "txn_abc123def456"
// result.data.status => "pending" (waiting for USSD confirmation)Handling Webhooks
// Express.js webhook handler
app.post("/webhooks/dgateway", (req, res) => {
const { event, data } = req.body;
switch (event) {
case "transaction.completed":
console.log(`Payment of UGX ${data.amount} received from ${data.phone_number}`);
// Update your database, send confirmation email, etc.
break;
case "transaction.failed":
console.log(`Payment failed: ${data.failure_reason}`);
break;
}
res.status(200).json({ received: true });
});API Response Format
Every DGateway API response follows a consistent structure:
// Success response
{ "data": { /* resource */ }, "message": "Transaction initiated" }
// Paginated list
{ "data": [ /* items */ ], "meta": { "total": 100, "page": 1, "page_size": 20, "pages": 5 } }
// Error response
{ "error": { "code": "INVALID_PHONE_NUMBER", "message": "Phone number must be in 256XXXXXXXXX format" } }For developers building on DGateway, the API includes:
- Phone number validation — only accepts
256XXXXXXXXXor0XXXXXXXXXformats - Currency and provider validation on every endpoint
- Failure reasons — when a transaction fails, the exact reason is stored and returned so integrators can display proper error messages
- Test mode — use test API keys and the test phone number
256111777777to simulate transactions without real money (DGateway blocks test numbers on live keys to prevent accidental test transactions counting as revenue)
Try It Now
Generate your API keys at Dashboard > Settings > API Keys and make your first test collection. The full API reference is available at the Documentation page. Interactive examples are available via the built-in Scalar API docs.
9. Built-In Audit Trail for Every Action
Every significant action in DGateway is logged in a comprehensive audit trail: transactions created, completed, or failed; withdrawals requested, approved, or rejected; settings changed; API keys generated.
Each audit log captures:
- What happened (action and entity type)
- Before and after payloads (so you can see exactly what changed)
- Who did it (user, API key, or system)
- When and from where (timestamp and IP address)
The audit trail is searchable, filterable by action type and entity, and available to both app admins and the super admin. For compliance, dispute resolution, and debugging, it is invaluable.
Querying the Audit Trail
# Get recent audit logs for your app
curl -X GET "https://api.dgateway.desispay.com/api/member/apps/your-app-id/audit-logs?page=1&page_size=20" \
-H "Authorization: Bearer your_jwt_token"
# Filter by action type
curl -X GET "https://api.dgateway.desispay.com/api/member/apps/your-app-id/audit-logs?action=transaction.created" \
-H "Authorization: Bearer your_jwt_token"
# Response includes before/after snapshots:
{
"data": [
{
"id": "log_001",
"action": "transaction.status_changed",
"entity_type": "transaction",
"entity_id": "txn_abc123",
"before": { "status": "pending" },
"after": { "status": "successful" },
"actor_type": "system",
"ip_address": "41.210.xxx.xxx",
"created_at": "2026-04-03T14:30:00Z"
}
]
}Common Audit Log Actions
| Action | Entity Type | Description |
|---|---|---|
transaction.created | Transaction | New payment initiated |
transaction.status_changed | Transaction | Status updated (pending → successful/failed) |
withdrawal.requested | Withdrawal | Payout requested by app owner |
withdrawal.approved | Withdrawal | Payout approved by admin |
withdrawal.rejected | Withdrawal | Payout rejected with reason |
api_key.generated | ApiKey | New API key created |
settings.updated | App | App settings changed |
enrollment.created | CourseEnrollment | Student enrolled in a course |
Try It Now
View your audit trail at Dashboard > Audit Logs. Use the filters to search by action type, entity, or date range. Every action you take in the dashboard — and every API call — is logged here.
10. An Image-Optimized Media Pipeline
DGateway integrates with MediaKit — a self-hosted media platform that handles both video streaming and image optimization.
For images, this means every thumbnail, product photo, course cover, and banner is served through an on-demand transform API. Images are automatically resized, cropped, converted to WebP or AVIF, and cached at the edge. A 4MB PNG uploaded by a seller becomes a 50KB WebP served to buyers — without the seller doing anything.
For videos, MediaKit provides HLS adaptive streaming with multi-quality transcoding, sprite hover previews for scrubbing, and AI-powered video analysis for chapter generation. All of this runs on your own infrastructure — no Mux or Cloudinary bills.
Image Transform API
# Original upload (4MB PNG)
https://mediakit.yourserver.com/uploads/product-photo.png
# Auto-optimized WebP (50KB, 400px wide)
https://mediakit.yourserver.com/transforms/product-photo.png?w=400&format=webp&quality=80
# Thumbnail crop (square, 200x200)
https://mediakit.yourserver.com/transforms/product-photo.png?w=200&h=200&fit=cover&format=webp
# Full-size AVIF (next-gen format, ~70% smaller than PNG)
https://mediakit.yourserver.com/transforms/product-photo.png?format=avif&quality=75MediaKit vs. Third-Party Services
| Feature | MediaKit (DGateway) | Cloudinary | Mux |
|---|---|---|---|
| Image optimization | Yes | Yes | No |
| Video streaming (HLS) | Yes | Limited | Yes |
| Adaptive bitrate | Yes (480p, 720p, 1080p) | No | Yes |
| Self-hosted | Yes | No | No |
| Monthly cost | $0 (your server) | $99+/month | $100+/month |
| Per-video pricing | None | N/A | $0.025/min |
| AI chapter generation | Yes | No | No |
| Sprite hover previews | Yes | No | Yes |
Try It Now
MediaKit is automatically used when you upload images or videos to DGateway. Every product photo, course cover, and event banner you upload is automatically optimized. For video streaming, simply upload a video when creating a course lesson — MediaKit handles the transcoding and HLS stream generation. Learn more at the MediaKit GitHub repo.
More Than a Payment Gateway
DGateway started as a way to simplify mobile money payments for East African developers. It has grown into a full commerce infrastructure platform — payments, courses, digital products, templates, storefronts, subscriptions, media streaming, and developer tools, all in one.
Here is a quick summary of everything covered in this post:
| Feature | What It Does | Commission | Where to Start |
|---|---|---|---|
| Course Platform | Build and sell courses with HLS video | 15% | Dashboard > Courses |
| Digital Products | Sell ebooks, software, audio, graphics | 12% | Dashboard > Products |
| Templates Marketplace | Sell templates and UI component blocks | 13% | Dashboard > Templates |
| White-Label Shops | Branded storefront at your own URL | — | Dashboard > Settings > Store |
| Payment Links | Fixed or open-amount shareable links | 10% | Dashboard > Payment Links |
| Provider Health | Auto-monitoring with alerts and failover | — | Dashboard (banner) |
| WordPress Plugin | Mobile money on WooCommerce | 8% | Plugins > DGateway |
| REST API + Webhooks | Full API access with signed webhooks | 8% | Dashboard > API Keys |
| Audit Trail | Every action logged with before/after | — | Dashboard > Audit Logs |
| MediaKit | Image optimization + video streaming | — | Automatic on upload |
If any of these features caught your eye, create an account and explore. You might be surprised by what you have been missing.