Getting Your API Keys
Every integration below is optional and degrades gracefully — leave a section empty and that feature reports “not configured” instead of crashing or faking data. Set up only what you need, when you need it.
All values go in your .env file (copy from .env.example if you haven’t already).
Email — Resend
Create an account
Sign up at resend.com.
Verify a sending domain
In the Resend dashboard, add and verify the domain you’ll send from (DNS records — SPF/DKIM — Resend provides the exact records to add).
Create an API key
Dashboard → API Keys → Create API Key. Copy it immediately; it’s shown once.
Set the env vars
RESEND_API_KEY=re_your_key_here
RESEND_FROM=notifications@yourschool.comRESEND_FROM must be an address on the domain you verified in step 2.
SMS — Termii
Create an account
Sign up at termii.com (Nigerian SMS/WhatsApp/voice aggregator).
Register a Sender ID
Termii requires an approved alphanumeric Sender ID (e.g. your school’s short name) before you can send — this takes manual approval on their side, so do it early.
Get your API key
Dashboard → API Keys.
Set the env vars
SMS_PROVIDER=termii
TERMII_API_KEY=your_key_here
TERMII_SENDER_ID=YourSchoolAfrica’s Talking is also supported (SMS_PROVIDER=africastalking, AT_API_KEY/AT_USERNAME/AT_SHORT_CODE) if you already have an account there.
WhatsApp — Meta Cloud API
This is Meta’s direct Cloud API, not a third-party BSP.
Create a Meta App
At developers.facebook.com, create a new app, type “Business,” and add the “WhatsApp” product to it.
Get a phone number
Meta provides a free test number for development. For production, add and verify your own business phone number under WhatsApp → API Setup.
Get your access token and phone number ID
Both are shown on the WhatsApp → API Setup page. The access token from this page is temporary (24h) — generate a permanent one under App Settings → Business Settings → System Users for production use.
Set up the inbound webhook
Under WhatsApp → Configuration, set the webhook URL to https://your-api-domain.com/communication/whatsapp/webhook and the verify token to anything you choose — then set the same value as WHATSAPP_VERIFY_TOKEN below. Also copy your app’s App Secret (App Settings → Basic) for webhook signature verification.
Set the env vars
WHATSAPP_API_TOKEN=your_access_token
WHATSAPP_PHONE_NUMBER_ID=your_phone_number_id
WHATSAPP_WEBHOOK_SECRET=your_app_secret
WHATSAPP_VERIFY_TOKEN=whatever_you_chose_aboveLLM — DeepSeek & GLM
Powers the AI assistant and agent automation. Pick one as your primary — the other, plus Gemini/OpenAI/Anthropic, stay available as fallbacks.
DeepSeek (default)
Sign up at platform.deepseek.com, create an API key under API Keys, then:
DEEPSEEK_API_KEY=sk-your-key-hereGLM / Zhipu (alternative)
Sign up at open.bigmodel.cn (Zhipu AI), create an API key, then:
GLM_API_KEY=your-key-hereIf both are set, DeepSeek is tried first. Leave AI_NL_PROVIDER empty to use this auto-detection, or set it explicitly (deepseek, glm, gemini, openai, anthropic) to force one.
Vision
Powers scoresheet scanning and admissions document OCR. Defaults to GLM’s vision model and reuses your GLM_API_KEY above if VISION_API_KEY is left empty — one account covers both text and vision.
VISION_PROVIDER=glm
VISION_API_KEY=
VISION_MODEL=Set VISION_PROVIDER=gemini to use Gemini’s vision model instead (reuses GEMINI_API_KEY the same way).
Payments — Paystack
Powers platform-level billing — Brainers Labs billing a school, not a school billing its own students (that’s a separate, in-app Paystack integration under Finance).
Create a Paystack account
Sign up at paystack.com.
Get your API keys
Settings → API Keys & Webhooks. Use the test keys while developing, live keys only in production.
Configure the webhook
Set the webhook URL to https://your-api-domain.com/platform-admin/paystack/webhook. Paystack signs every webhook with HMAC-SHA512 using your secret key — the API verifies this automatically, no extra setup needed beyond having PAYSTACK_SECRET_KEY set.
Set the env vars
PAYSTACK_SECRET_KEY=sk_live_or_test_your_key
PAYSTACK_PUBLIC_KEY=pk_live_or_test_your_keyNever commit real API keys. .env is gitignored — keep it that way.