Integrations Guide

EduNest LMS connects to third-party providers for payments, email, storage, analytics, video, and a range of premium services (SMS, WhatsApp, chat, chatbot, live chat, CAPTCHA, calendar, social login, and shipping). All integrations are configured in Admin → Integrations (/admin/settings/integrations), and every secret is stored encrypted server-side — credentials are never exposed to the browser.

Each provider ships as a built-in add-on (src/product/addons/<id>/). A small set of providers is free; everything else is a premium add-on unlocked by a license entitlement or a purchase code. This guide covers the channels, how to connect one, and the free-vs-premium model.

The Channel Catalog

Integrations are organized into channels, each holding one or more providers. The full catalog is assembled in src/core/channels/registry.ts (base channels + installed add-ons). EduNest ships these providers across channels:

Channel Free providers Premium add-on providers
Payments COD, Bank Transfer, PayPal Stripe, Razorpay, Square, Mollie, Paystack, Flutterwave, PayU, Authorize.Net, Checkout.com, Mercado Pago, Coinbase Commerce, Airwallex, dLocal, eWAY, PayTabs, Tap, Telr, Viva Wallet, Xendit, Yoco
Email SMTP SendGrid, Postmark, Amazon SES
Storage Cloudflare R2 Amazon S3, Google Cloud Storage, DigitalOcean Spaces
Analytics Google Analytics (GA4) Google Tag Manager, Meta Pixel, Microsoft Clarity, PostHog, TikTok
Video YouTube, Vimeo Mux, Cloudflare Stream, Bunny
SMS Twilio, MSG91
WhatsApp WhatsApp Cloud API, Twilio WhatsApp
Realtime Chat Pusher, Ably
AI Chatbot OpenAI, Anthropic, OpenRouter
Live Chat Crisp, Tawk, Intercom, Freshchat, Tidio, Zendesk
CAPTCHA reCAPTCHA v2, reCAPTCHA v3
Calendar Google Calendar, Calendly
Social Login Google, Facebook
Shipping NimbusPost

The base product ships only the channels that contain a free provider (email, payments, storage, analytics, video). Entirely-premium channels (SMS, WhatsApp, chat, chatbot, live chat, CAPTCHA, calendar, social, shipping) appear in the catalog once their add-on is bundled.

Free vs Premium Tiers

The free base set is defined in src/core/channels/tiers.ts:

Code
email:smtp · analytics:ga4 · payments:cod · payments:bank · payments:paypal
storage:r2 · video:youtube · video:vimeo

Every other provider is premium. At runtime premiumBlock(headers, channel, provider) (src/lib/premium.ts) decides access:

  1. Free provider → always allowed.
  2. License entitlement covers it — "*"/"all" (full unlock), the channel id (whole-channel unlock), or the exact "<channel>:<provider>" key → allowed.
  3. Purchase code for that add-on has been activated on this domain → allowed.
  4. Otherwise → blocked with an unlock prompt.

On development/localhost hosts, all providers are unlocked for testing.

Connecting a Provider

Admin → Integrations (/admin/settings/integrations)

  1. Find the channel card (e.g. Payments) and pick a provider (e.g. Stripe).
  2. Click Connect and fill in the provider's fields. Field definitions come from the provider's ProviderDef; secret-typed fields are encrypted before storage and shown masked (••••••••) thereafter.
  3. Save. The connection is recorded in the integration_connections table with an is_active flag; you can mark one connection primary per channel.
  4. For premium providers not covered by your main license, click to enter a purchase code. POST /api/v1/admin/addons/license ({ channel, provider, code }) validates the code and stores the entitlement for your domain; GET /api/v1/admin/addons/license lists active add-on licenses.

A premium integration is live only when it is entitled (license or purchase code) and connected + active.

Provider Field Reference (examples)

The exact fields each provider asks for are declared in its ProviderDef. Two representative examples:

Stripe (Payments — premium)

Field Type Notes
Mode select Live / Sandbox (Test)
Publishable Key text pk_live_… / pk_test_…
Secret Key secret sk_live_… / sk_test_…
Webhook Secret secret Endpoint signing secret

Setup steps (shown in admin): get API keys from the Stripe Dashboard → Developers → API keys, then add a webhook endpoint and copy its signing secret.

PayPal (Payments — free)

Field Type Notes
Mode select Live / Sandbox
Client ID text PayPal Developer → Apps & Credentials
Secret secret App secret
Webhook ID text Optional — for verifying PayPal webhook events

Email, storage, analytics, video, and the premium channels each present their own fields the same way — for example, Storage offers free Cloudflare R2 (r2) and premium Amazon S3, Google Cloud Storage, and DigitalOcean Spaces; uploaded images are optimized to WebP before being stored regardless of which storage provider is selected.

Where Credentials Live

  • Channel credentials entered in admin are encrypted (AES-256-GCM, key from SECRET_KEY) and stored in the database (integration_connections) — there is nothing to add to .env. They are decrypted only server-side when a driver runs, and always masked in API responses.
  • The only baseline secrets in the environment are the platform's own: DATABASE_URL, JWT_SECRET, and SECRET_KEY.

For how these integration add-ons are built and registered, see the Add-on Development Guide; for feature plugins like Certificates and Gamification, see the Plugin Development Guide.


© CreativeCape Solutions · creative-cape.com · support@creative-cape.com