POST /notifications/otp/send
POST/api/v1/notifications/otp/send
Input
phonerequired string max:32internal_template_keyrequired string max:120tenant_idoptional string max:120paramsoptional object/arrayoptionsoptional object/array
{
"phone": "09120000111",
"internal_template_key": "otp_login",
"params": { "token": "1234" },
"options": { "intent": "OTP_LOGIN" }
}
Output (202)
{
"tracking_id": "uuid",
"status": "accepted"
}
POST /notifications/send
POST/api/v1/notifications/send
Input
intentrequired string max:120recipientrequired objectrecipient.phoneoptional stringrecipient.emailoptional emailrecipient.device_tokensoptional string[]recipient.user_idoptional integerrecipient.tenant_idoptional stringpayloadoptional objectoptionsoptional object
{
"intent": "OTP_LOGIN",
"recipient": { "phone": "09120000111" },
"payload": { "token": "1234" },
"options": {
"message_kind": "provider_templated",
"internal_template_key": "otp_login"
}
}
Output (202)
{
"tracking_id": "uuid",
"status": "accepted"
}
GET /notifications/{trackingId}
GET/api/v1/notifications/{trackingId}
Output (200)
{
"tracking_id": "uuid",
"status": "pending|sent|failed",
"intent": "OTP_LOGIN",
"tenant_id": "rasanex-api",
"scheduled_at": "Y-m-d H:i:s",
"created_at": "Y-m-d H:i:s",
"updated_at": "Y-m-d H:i:s",
"channel_results": {},
"attempts": []
}
POST /notifications/providers/kavenegar/setup
POST/api/v1/notifications/providers/kavenegar/setup
Input
api_keyrequired string min:8tenant_idoptionalbase_urloptional urltypeoptionaltimeoutoptional integer 1-60is_activeoptional boolean
Output (200)
{
"status": "configured",
"tenant_id": "rasanex-api",
"client_id": "client-id",
"channel": "sms",
"provider": "kavenegar"
}
POST /notifications/providers/sms/setup
POST/api/v1/notifications/providers/sms/setup
Input
providerrequired:kavenegarortwilio- For
kavenegar:api_keyrequired - For
twilio:account_sid,auth_token,fromrequired - Optional:
tenant_id,base_url,timeout,is_active,type
Output (200)
{
"status": "configured",
"tenant_id": "rasanex-api",
"client_id": "client-id",
"channel": "sms",
"provider": "twilio"
}
GET /notifications/settings/providers/sms
GET/api/v1/notifications/settings/providers/sms?tenant_id=...
Output (200)
{
"tenant_id": "rasanex-api",
"client_id": "client-id",
"channel": "sms",
"providers": [
{ "provider": "kavenegar", "configured": true, "active": true, "requires_setup": true }
]
}
PUT /notifications/settings/otp-routing
PUT/api/v1/notifications/settings/otp-routing
Input
providersrequired array min:1fallbackoptional booleanis_activeoptional booleanintentsoptional array of stringtenant_idoptional
Output (200)
{
"status": "updated",
"tenant_id": "rasanex-api",
"intents": ["OTP_LOGIN"],
"routing": {
"channels": [
{ "channel": "sms", "providers": ["kavenegar"], "fallback": true }
]
}
}
GET /notifications/settings/otp-routing
GET/api/v1/notifications/settings/otp-routing?tenant_id=...
Output (200)
{
"tenant_id": "rasanex-api",
"items": [
{ "intent": "OTP_LOGIN", "rule": {}, "is_active": true }
]
}