Error Codes

Complete reference of 42 error codes across 16 categories returned by the Notification Service.

Error response formatjson
{
  "error": {
    "code": "ERR_NOTIFY_INVALID_CHANNEL",
    "message": "Invalid notification channel. Must be one of: whatsapp, sms, email, push",
    "http": 400
  }
}

Quota Errors1

CodeHTTPDescriptionResolution
ERR_NOTIFY_QUOTA_EXCEEDED402Notification quota exceeded for your subscription tierUpgrade subscription tier or wait for monthly quota reset

Validation Errors5

CodeHTTPDescriptionResolution
ERR_NOTIFY_INVALID_CHANNEL400Invalid notification channelUse: whatsapp, sms, email, or push
ERR_NOTIFY_INVALID_TEMPLATE400Invalid template format or structureCheck Handlebars syntax and required fields
ERR_NOTIFY_INVALID_CONTACT400Invalid contact informationVerify email format, phone in E.164, or valid push token
ERR_NOTIFY_MISSING_TEMPLATE_VARIABLES400Missing required template variablesProvide all variables marked as required
ERR_NOTIFY_TEMPLATE_RENDERING_FAILED400Failed to render templateCheck variable values match expected types

User Preference Errors3

CodeHTTPDescriptionResolution
ERR_NOTIFY_QUIET_HOURS400User has quiet hours enabledNotification will be rescheduled. Use priority: "critical" to bypass
ERR_NOTIFY_FREQUENCY_CAP_EXCEEDED400Too many notifications recentlyWait for cap reset. Use category transactional or system to bypass
ERR_NOTIFY_USER_OPTED_OUT400User has opted out of this channelTry a different channel or ask user to re-enable

Suppression Errors3

CodeHTTPDescriptionResolution
ERR_NOTIFY_SUPPRESSED_CONTACT400Contact is on suppression listCheck POST /suppressions/check before sending
ERR_NOTIFY_BOUNCED_CONTACT400Contact has bounced previouslyHard bounces are permanent. Verify contact info
ERR_NOTIFY_COMPLAINED_CONTACT400Contact has filed a spam complaintDo not remove without explicit user consent

Idempotency Errors2

CodeHTTPDescriptionResolution
ERR_NOTIFY_DUPLICATE_REQUEST409Request already processedOriginal response returned. Not an error
ERR_NOTIFY_IDEMPOTENCY_KEY_MISMATCH409Idempotency key mismatchUse a unique key per unique request

Rate Limiting Errors1

CodeHTTPDescriptionResolution
ERR_RATE_LIMIT_EXCEEDED429API rate limit exceededWait and retry with exponential backoff. Check Retry-After header

Delivery Errors3

CodeHTTPDescriptionResolution
ERR_NOTIFY_DELIVERY_FAILED500Notification delivery failedAuto-retries up to max_retries. Check GET /deliveries/:id
ERR_NOTIFY_PROVIDER_UNAVAILABLE500CPaaS provider temporarily unavailableSystem will attempt fallback channels
ERR_NOTIFY_PROVIDER_ERROR500CPaaS provider returned an errorCheck error_code and error_message on delivery response

Integration Errors4

CodeHTTPDescriptionResolution
ERR_INTEGRATION_HUB_UNAVAILABLE503Integration Hub service unavailableExternal provider gateway down. Retry shortly
ERR_USER_SERVICE_UNAVAILABLE503User service unavailableCannot resolve user contacts. Retry shortly
ERR_VAULT_SERVICE_UNAVAILABLE503Vault service unavailableCannot retrieve provider credentials. Retry shortly
ERR_WALLET_SERVICE_UNAVAILABLE503Wallet service unavailableCannot verify/deduct AI credits. Retry shortly

Template Errors3

CodeHTTPDescriptionResolution
ERR_NOTIFY_TEMPLATE_NOT_FOUND404Template not foundVerify template ID exists for current tenant
ERR_NOTIFY_TEMPLATE_INACTIVE400Template is inactiveActivate via POST /templates/:id/activate
ERR_NOTIFY_TEMPLATE_DUPLICATE_NAME400Template name already existsUse a unique name per channel per tenant

Rule Errors3

CodeHTTPDescriptionResolution
ERR_NOTIFY_RULE_NOT_FOUND404Notification rule not foundVerify rule ID exists and is not soft-deleted
ERR_NOTIFY_RULE_INVALID400Invalid rule configurationCheck source_event, template_id, and JSONLogic filter
ERR_NOTIFY_RULE_DUPLICATE400Rule for this source event already existsUse unique source_event + channel combo per tenant

Scheduling Errors4

CodeHTTPDescriptionResolution
ERR_NOTIFY_SCHEDULE_NOT_FOUND404Scheduled notification not foundVerify delivery ID exists in scheduled status
ERR_NOTIFY_SCHEDULE_ALREADY_SENT400Scheduled notification already sentCannot cancel or reschedule after dispatch
ERR_NOTIFY_SCHEDULE_INVALID_TIME400Scheduled time must be in the futureProvide timestamp at least 1 minute ahead
ERR_NOTIFY_CANCEL_NOT_PENDING400Only pending deliveries can be cancelledDelivery must be in pending or scheduled status

Channel Errors3

CodeHTTPDescriptionResolution
ERR_NOTIFY_CHANNEL_NOT_SUPPORTED400Channel not supportedUse: email, sms, whatsapp, or push
ERR_NOTIFY_CHANNEL_DISABLED400Channel currently disabledContact admin to re-enable
ERR_NOTIFY_CHANNEL_CONFIG_INVALID400Invalid channel configurationCheck rate_limit, priority, and enabled fields

Notification CRUD Errors5

CodeHTTPDescriptionResolution
ERR_NOTIFY_NOTIFICATION_NOT_FOUND404Notification not foundVerify notification ID for current tenant
ERR_NOTIFY_ALREADY_READ400Notification already marked as readIdempotent; no action needed
ERR_NOTIFY_RETRY_NOT_ALLOWED400Only failed deliveries can be retriedCheck delivery status via GET /deliveries/:id
ERR_NOTIFY_MAX_RETRIES_EXCEEDED400Maximum retry attempts exceededCreate a new notification instead
ERR_NOTIFY_DELIVERY_NOT_FOUND404Delivery record not foundVerify delivery ID for current tenant

Authorization Errors2

CodeHTTPDescriptionResolution
ERR_NOTIFY_INSUFFICIENT_PERMISSIONS403Insufficient permissionsVerify user has required role (user, organizer, admin)
ERR_NOTIFY_TENANT_MISMATCH403Tenant context mismatchEnsure JWT token matches the target tenant

Send / Bulk Send Errors3

CodeHTTPDescriptionResolution
ERR_NOTIFY_BULK_LIMIT_EXCEEDED400Max 1000 notifications per bulk requestSplit into batches of 1000 or fewer
ERR_NOTIFY_BULK_PARTIAL_FAILURE207Some bulk notifications failedCheck results array for individual status
ERR_NOTIFY_MISSING_RECIPIENT400Recipient user_id or contact info requiredProvide user_id or direct contact (email, phone, push_token)

Analytics Errors2

CodeHTTPDescriptionResolution
ERR_NOTIFY_ANALYTICS_INVALID_RANGE400Invalid date range for analyticsEnsure from_date < to_date, both valid ISO 8601
ERR_NOTIFY_ANALYTICS_EXPORT_FAILED500Analytics export failedRetry. Check CloudWatch logs if persistent