diff --git a/app/jobs/sendinblue/sms_credits_warning_job.rb b/app/jobs/sendinblue/sms_credits_warning_job.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a4d75d464d47b18c0ff881c1664d97552722285c
--- /dev/null
+++ b/app/jobs/sendinblue/sms_credits_warning_job.rb
@@ -0,0 +1,13 @@
+class Sendinblue::SmsCreditsWarningJob < ApplicationJob
+  queue_as :default
+
+  def perform
+    return unless ENV['APPLICATION_ENV'] == 'production'
+    sms_service = Sendinblue::SmsService.new
+    if sms_service.low?
+      # this message is sent to server_admins only, and server_admins are duplicated between all universities.
+      # so we take the first university
+      NotificationMailer.low_sms_credits(University.first, sms_service.sms_credits).deliver_later
+    end
+  end
+end
\ No newline at end of file
diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb
index 0f4326c20c5ad6427ebbecbb9ab30e204386e643..c4c9aa3b11e0c942ef52317d3bf54b3525f615cb 100644
--- a/app/mailers/notification_mailer.rb
+++ b/app/mailers/notification_mailer.rb
@@ -29,5 +29,13 @@ class NotificationMailer < ApplicationMailer
     subject = t('mailers.notifications.website_invalid_access_token.subject', website: website)
     mail(from: user.university.mail_from[:full], to: user.email, subject: subject)
   end
+  
+  def low_sms_credits(university, credits)
+    merge_with_university_infos(university, {})
+    @credits = credits.to_i
+    mails = university.users.server_admin.pluck(:email)
+    subject = t('mailers.notifications.low_sms_credits.subject', credits: @credits)
+    mail(from: university.mail_from[:full], to: mails, subject: subject)
+  end
 
 end
diff --git a/app/services/sendinblue/sms_service.rb b/app/services/sendinblue/sms_service.rb
index 41b11efe98e0921b771b3b526540e51748df35f9..3df91bfe31029695ef3f2d6cc3dded5b2f782010 100644
--- a/app/services/sendinblue/sms_service.rb
+++ b/app/services/sendinblue/sms_service.rb
@@ -1,26 +1,35 @@
 module Sendinblue
   class SmsService
     DEFAULT_SENDER_NAME = 'Osuny'.freeze
-
+    SMS_CREDITS_LIMIT = 500
+    
     def self.send_mfa_code(user, code)
       duration =  ActiveSupport::Duration.build(Rails.application.config.devise.direct_otp_valid_for).inspect
       message = I18n.t('sms_code', code: code, context: user.registration_context, duration: duration)
       self.send_message(user, message)
     end
 
-    private
+    def sms_credits
+      @sms_credits ||= plan.detect { |plan| plan.type == 'sms' }&.credits
+    end
 
+    def low?
+      sms_credits.present? && sms_credits < SMS_CREDITS_LIMIT  
+    end
+
+    private
+    
     def self.send_message(user, message)
       sender_name = user.university.sms_sender_name
       sender_name ||= DEFAULT_SENDER_NAME
-
+      
       api_instance = SibApiV3Sdk::TransactionalSMSApi.new
       send_transac_sms = SibApiV3Sdk::SendTransacSms.new(
         sender: sender_name,
         recipient: user.mobile_phone,
         content: message
       )
-
+      
       begin
         # Send SMS message to a mobile number
         result = api_instance.send_transac_sms(send_transac_sms)
@@ -29,5 +38,13 @@ module Sendinblue
         puts "Exception when calling TransactionalSMSApi->send_transac_sms: #{e}"
       end
     end
+
+    def plan
+      @plan ||= account_api.get_account.plan
+    end
+
+    def account_api
+      @account_api ||= SibApiV3Sdk::AccountApi.new
+    end
   end
 end
diff --git a/app/views/mailers/notifications/low_sms_credits.html.erb b/app/views/mailers/notifications/low_sms_credits.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..1407e04402742964ae4c37e023a62c8265f7cc82
--- /dev/null
+++ b/app/views/mailers/notifications/low_sms_credits.html.erb
@@ -0,0 +1,3 @@
+<%= t('mailers.notifications.low_sms_credits.body_1_html', credits: @credits) %>
+<br>
+<%= t('mailers.notifications.low_sms_credits.body_2_html', link: 'https://app.sendinblue.com/billing/addon/customize/sms') %>
\ No newline at end of file
diff --git a/config/locales/en.yml b/config/locales/en.yml
index ca4e14f229a396f67bc176a9e9bf43d30002d53d..e3b18745ed26133871fd7b07ef9b356d266b12ed 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -270,6 +270,10 @@ en:
         text_line_3_html: "Number of lines in the file: %{number}."
         text_error_msg: "Line %{line}: %{error}"
         text_errors_title: "Some errors have occured:"
+      low_sms_credits: 
+        body_1_html: "Warning, your SMS credits are low: %{credits} credits remaining!"
+        body_2_html: "Click <a href=\"%{link}\" target=\"_blank\" style=\"color: #c72b43;\">here</a> to refull."
+        subject: "Osuny - Low SMS Credits (%{credits})"
       website_invalid_access_token:
         subject: "Expired access token for \"%{website}\""
         text_line_1_html: "The access token used for the website \"%{website}\" has expired and does not allow the website to be updated anymore."
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index aa61ec47d90638731970dff4ff1ce263b2442739..0b58be5c53d1c62376ee17beae0ef7bc8ba7dd9d 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -270,6 +270,10 @@ fr:
         text_line_3_html: "Nombre de lignes traitées : %{number}."
         text_error_msg: "Ligne %{line} : %{error}"
         text_errors_title: "Des erreurs sont survenues :"
+      low_sms_credits: 
+        body_1_html: "Attention, vos crédits SMS sont bas : %{credits} crédits restants !"
+        body_2_html: "Cliquez <a href=\"%{link}\" target=\"_blank\" style=\"color: #c72b43;\">ici</a> pour recharger le compte."
+        subject: "Osuny - Credits SMS bas (%{credits})"
       website_invalid_access_token:
         subject: Jeton d'accès expiré pour « %{website} »
         text_line_1_html: Le jeton d'accès utilisé pour le site « %{website} » a expiré et ne permet plus la mise à jour du site.
diff --git a/test/mailers/previews/notification_mailer_preview.rb b/test/mailers/previews/notification_mailer_preview.rb
index 33256351021ef84873e9a03b69f1c020649d1c25..d5557f836e051baa7aea245d9486f0f97b8b3848 100644
--- a/test/mailers/previews/notification_mailer_preview.rb
+++ b/test/mailers/previews/notification_mailer_preview.rb
@@ -1,14 +1,27 @@
+# Preview all emails at http://localhost:3000/rails/mailers/notification_mailer
+
 class NotificationMailerPreview < BaseMailerPreview
+
+  # Preview this email at http://localhost:3000/rails/mailers/notification_mailer/import
   def import
     NotificationMailer.import(organizations_import)
   end
-
+  
+  # Preview this email at http://localhost:3000/rails/mailers/notification_mailer/emergency_message
   def emergency_message
     NotificationMailer.emergency_message(sample_emergency_message, user, 'fr')
   end
-
+  
+  # Preview this email at http://localhost:3000/rails/mailers/notification_mailer/website_invalid_access_token
   def website_invalid_access_token
     NotificationMailer.website_invalid_access_token(website, user)
   end
 
+  # Preview this email at http://localhost:3000/rails/mailers/notification_mailer/low_sms_credits
+  def low_sms_credits
+    credits = 22.0
+    NotificationMailer.low_sms_credits(university, credits)
+  end
+
+
 end