POST
/notifySend notification
Unified notification endpoint. Mode is determined by channel and body fields:
| Mode | Required fields |
|---|---|
| Legacy SMS | channel: SMS, to, message |
| DLT SMS | channel: SMS, to, templateKey, variables (appId identifies the business) |
| Email HTML | channel: EMAIL, to, subject, html |
| Email template | channel: EMAIL, to, subject, template, optional data |
Mixed message + templateKey returns 400.
OTP templates — use OTP API, not notify:
| Template | Endpoint |
|---|---|
LOGIN_OTP | POST /otp/send · POST /otp/verify · POST /otp/resend |
LOGIN_OTP_WITH_ID | Same OTP endpoints (+ optional loginId on send/resend) |
Sending LOGIN_OTP or LOGIN_OTP_WITH_ID via /notify returns 400
otp_template_not_supported. ELVA generates and verifies OTP codes; clients must not pass otp in /notify.
Transactional templates on /notify: ORDER_PLACED, ORDER_DELIVERED, OUT_FOR_DELIVERY.
See /docs/api/notify and /docs/businesses/enandi.
operationId: notifySend
Related documentation
Request
Requires appId and apiKey in the JSON body.
Schemas: Legacy SMS, DLT template SMS — ORDER_PLACED, LOGIN_OTP via notify (rejected — use OTP API), Email HTML
Legacy SMS
json
{
"appId": "enandi-app",
"apiKey": "your-secret-key",
"channel": "SMS",
"to": [
"919876543210"
],
"message": "Your refund of Rs. 500 has been processed."
}DLT template SMS — ORDER_PLACED
json
{
"appId": "eNandi",
"apiKey": "your-secret-key",
"channel": "SMS",
"to": [
"918660397320"
],
"templateKey": "ORDER_PLACED",
"variables": {
"customerName": "Arun",
"businessName": "eNandi",
"orderId": "ORD-2026-001"
}
}LOGIN_OTP via notify (rejected — use OTP API)
json
{
"appId": "eNandi",
"apiKey": "your-secret-key",
"channel": "SMS",
"to": [
"918660397320"
],
"templateKey": "LOGIN_OTP",
"variables": {
"businessName": "eNandi",
"otp": "482910"
}
}Email HTML
json
{
"appId": "enandi-app",
"apiKey": "your-secret-key",
"channel": "EMAIL",
"to": [
"user@example.com"
],
"subject": "Welcome to eNandi",
"html": "<h1>Welcome!</h1>"
}Responses
200Notification sent
400Validation, channel, or template errors
401Unauthorized
403Forbidden
429Global rate limit
500Provider or server failure