← Back to blog
insights18 min read

10 Things You Probably Didn't Know About DGateway

DGateway is way more than a payment gateway. From HLS video streaming and 3D ebook previews to a full marketplace and WordPress plugin — here are 10 features that will surprise you.

10 Things You Probably Didn't Know About DGateway

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 TypeSupported FormatsCommission
EbookPDF, EPUB12%
SoftwareZIP, EXE, DMG, APK12%
AudioMP3, WAV, FLAC12%
GraphicsPNG, PSD, AI, SVG, ZIP12%
VideoMP4, MOV, ZIP12%
GenericAny file12%

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?templates

Store Customization Options

SettingWhat It Controls
Shop NameDisplayed at the top of your store page
Desktop BannerLarge banner image (1200x400px recommended)
Mobile BannerCompact banner for mobile screens (800x300px)
Text OverlayToggle text on/off over the banner image
App SlugCustom URL path for your store
Marketplace ListedOpt 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.


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.

# 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.

Every payment link automatically tracks:

MetricDescription
Total PaymentsHow many times the link has been used
Total RevenueSum of all payments received through this link
Average PaymentRevenue divided by payments
Buyer DetailsName, phone number, email for each payment
Last PaymentWhen 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:

  1. Blocks requests on the faulty line with a clear error message so API consumers can handle it gracefully
  2. Shows a banner on the member dashboard warning users about the outage
  3. 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.

ProviderCurrenciesCapabilities
IotecUGXCollect, Disburse (Uganda MTN, Airtel)
RelworxUGX, KES, TZS, RWFCollect, Disburse (East Africa)
StripeUSD, EUR, GBP, KES, UGXCollect, 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 > Activate

Plugin Features at a Glance

FeatureSupported
WooCommerce Classic CheckoutYes
WooCommerce Block CheckoutYes (v1.0.2+)
HPOS (High-Performance Order Storage)Yes
MTN Mobile MoneyYes
Airtel MoneyYes
Card Payments (Visa/MC)Yes
Subscription ProductsYes
Standalone Payment ButtonsYes (shortcodes)
Test ModeYes
Automatic WebhooksYes

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 256XXXXXXXXX or 0XXXXXXXXX formats
  • 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 256111777777 to 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

ActionEntity TypeDescription
transaction.createdTransactionNew payment initiated
transaction.status_changedTransactionStatus updated (pending → successful/failed)
withdrawal.requestedWithdrawalPayout requested by app owner
withdrawal.approvedWithdrawalPayout approved by admin
withdrawal.rejectedWithdrawalPayout rejected with reason
api_key.generatedApiKeyNew API key created
settings.updatedAppApp settings changed
enrollment.createdCourseEnrollmentStudent 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=75

MediaKit vs. Third-Party Services

FeatureMediaKit (DGateway)CloudinaryMux
Image optimizationYesYesNo
Video streaming (HLS)YesLimitedYes
Adaptive bitrateYes (480p, 720p, 1080p)NoYes
Self-hostedYesNoNo
Monthly cost$0 (your server)$99+/month$100+/month
Per-video pricingNoneN/A$0.025/min
AI chapter generationYesNoNo
Sprite hover previewsYesNoYes

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:

FeatureWhat It DoesCommissionWhere to Start
Course PlatformBuild and sell courses with HLS video15%Dashboard > Courses
Digital ProductsSell ebooks, software, audio, graphics12%Dashboard > Products
Templates MarketplaceSell templates and UI component blocks13%Dashboard > Templates
White-Label ShopsBranded storefront at your own URLDashboard > Settings > Store
Payment LinksFixed or open-amount shareable links10%Dashboard > Payment Links
Provider HealthAuto-monitoring with alerts and failoverDashboard (banner)
WordPress PluginMobile money on WooCommerce8%Plugins > DGateway
REST API + WebhooksFull API access with signed webhooks8%Dashboard > API Keys
Audit TrailEvery action logged with before/afterDashboard > Audit Logs
MediaKitImage optimization + video streamingAutomatic 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.