ELVA Notify Platform v2 — Documentation Portal
- Purpose
- Entry point for the ELVA Notify Platform v2 documentation. Describes what the platform is, what it can do today, and how to navigate the core documentation set.
- Intended Audience
- New developers, future maintainers, DevOps engineers, ELVA team members, and future business integrators.
- Last Updated
- 2026-06-05
What is ELVA Notify?
ELVA Notify (elva-otp-service) is a Node.js + Express microservice that provides:
- OTP generation and verification — 6-digit codes stored as salted hashes in Redis, scoped per
appIdand recipient. - SMS delivery — via Fast2SMS (legacy free-text route
q, and DLT-compliant templated routedlt). - Email delivery — via SendGrid.
- Unified notification API —
POST /notifyfor SMS and EMAIL in one contract. - Template groups — shared DLT template catalogs (currently ApnaKart) with metadata and variable validation.
- Structured logging — JSON logs with
requestId,provider,templateId, and category-based events.
The service uses ELVA-issued platform credentials (appId + apiKey) plus per-brand identity (brandId). OTP storage keys are namespaced as otp:{brandId}:{recipient} in Redis.
High-Level Architecture
ELVA Notify is deployed as the backend package (backend/). A separate frontend (frontend/) serves this documentation portal from docs/. External systems call REST endpoints on the backend; the service orchestrates Redis, Fast2SMS, and SendGrid.
elva-notify-platform/
├── backend/ # Express API
├── frontend/ # Documentation portal (Next.js)
├── docs/ # Markdown source (this folder)
└── package.json # Root orchestrator scripts| Capability | Endpoint / Path | Provider | Notes |
|---|---|---|---|
| OTP Send | POST /otp/send | Fast2SMS / SendGrid | Not DLT-templated; uses free-text OTP message |
| OTP Resend | POST /otp/resend | Fast2SMS / SendGrid | Revokes prior OTP, then re-sends |
| OTP Verify | POST /otp/verify | Redis only | Consumes OTP on success |
| Legacy SMS | POST /notify + message | Fast2SMS route q | Free-text SMS |
| DLT SMS | POST /notify + templateKey + variables | Fast2SMS route dlt | ApnaKart templates (per approved brand) |
POST /notify + subject + html/template | SendGrid | HTML or simple template | |
| Health | GET /health | — | No authentication |
Platform Evolution Timeline
| Phase | Focus | Status |
|---|---|---|
| Phase 1 | Template registry + ApnaKart group | Complete |
| Phase 2 | Template validation layer on /notify | Complete |
| Phase 3 | DLT SMS delivery via Fast2SMS | Complete |
| Phase 4 | Centralized structured logging (businessLogger) | Complete |
| Phase 5A | Core documentation portal (this set) | In progress |
| Future | Full doc portal UI, OTP→DLT migration, multi-business, WhatsApp | Planned |
Documentation Map
Getting Started
| Document | Description |
|---|---|
| End-to-End Integration Guide | Portal onboarding → credentials → playground → app integration |
Architecture
| Document | Description |
|---|---|
| Architecture Overview | Components, folder structure, request processing |
| Request Lifecycle | Sequence diagrams for OTP, SMS, DLT, and email flows |
| DLT Layer | DLT concepts, ApnaKart IDs, payload transformation |
API Reference
| Document | Description |
|---|---|
| Authentication | ELVA-issued appId / apiKey + brandId |
| OTP API | Send, resend, verify — LOGIN_OTP, LOGIN_OTP_WITH_ID |
| Notify API | Legacy SMS, DLT template SMS, email — order templates only |
| Error Codes | All API error codes with HTTP status |
| OpenAPI Specification | OpenAPI 3.1 contract overview |
| API Reference Intro | Interactive endpoint explorer guide |
| Interactive API Reference | Searchable endpoint catalog (portal) |
API testing (Phase 10D)
| Document | Description |
|---|---|
| Postman / curl collection | Copy-paste requests for OTP + notify flows |
| API validation checklist | Pre-integration test checklist |
Businesses
| Document | Description |
|---|---|
| ApnaKart Templates | Template catalog, DLT IDs, integration guide |
Phase reports
Implementation audits and migration reports live under docs/reports/. Filenames are preserved from each phase.
| Document | Description |
|---|---|
| ELVA Notify Architecture | Full-stack architecture audit (pre-v2) |
| DLT Migration | DLT migration analysis |
| Phase 8E Report | eNandi template exposure + playground validation |
| Phase 9A Report | Frontend metadata API refactor |
| Phase 9C Report | DLT delivery validation |
| Phase 9C Message ID Report | Fast2SMS Message ID fix |
Quick Start for Integrators
New to ELVA Notify? Start with the End-to-End Integration Guide — from landing on notify.elvatech.in through onboarding, testing, and production API integration.
- Submit your brand and templates at /onboard.
- Track approval on the status link emailed to you.
- After ELVA approves, use the
appIdandapiKeyissued to your team (approval email) plus yourbrandIdon API calls. - Read Authentication — credentials go in the JSON body, not headers.
- For OTP flows, start with OTP API.
- For transactional SMS, use Notify API + ApnaKart Templates.
- On errors, consult Error Codes.
Troubleshooting Notes
| Symptom | Likely cause | See |
|---|---|---|
403 forbidden on all requests | Wrong appId/apiKey or missing APP_CREDENTIALS_JSON | Authentication |
502 sms_failed on OTP send | FAST2SMS_API_KEY missing or provider error | OTP API |
400 unsupported_business | Unknown business field on /notify | ApnaKart Templates |
500 notification_failed on DLT | Provider rejection or missing DLT metadata | DLT Layer |
429 rate_limited | Global or OTP per-phone limits exceeded | OTP API |
Warnings
OTP DLT delivery (Phase 8B+): When
OTP_DLT_ENABLED=trueand per-appdltEnabled: true, OTP SMS uses Fast2SMSroute=dlt. Otherwise OTP falls back toroute=q. See OTP DLT Migration and Observability. Operations dashboard: /platform/otp.
Credentials in body.
appIdandapiKeyare sent in the request JSON body. Use HTTPS in production.
India SMS compliance. DLT template SMS via
/notifyuses approved ApnaKart template IDs. Each brand supplies its ownbrandNamein variables or viabrandId.