NAV

Notifications

Welcome to Notifications! Notifications is a software as a service (SaaS) solution that works as a relay for your notifications to your desired destination(s). Notifications offers speed, concurrency, content flexibility.

Start using Notifications by connecting with the first section in this doc after you get familiar with our data models.

The only supported channels for now are:

Models

Admin_Dashboard

This is the response of the get admin dashboard API call.

{
  "project_creation_monthly_info": {
    "2022-07-06": 0,
    "2022-07-05": [
      {
        "package": "free",
        "count": 3
      },
      {
        "total": 3
      }
    ],
    "2022-07-04": [
      {
        "package": "free",
        "count": 1
      },
      {
        "total": 1
      }
    ],
    "2022-07-03": 0,
    "2022-07-02": 0,
    "2022-07-01": [
      {
        "package": "corporate",
        "count": 2
      },
      {
        "package": "standard",
        "count": 2
      },
      {
        "total": 4
      }
    ],
    "2022-06-30": [
      {
        "package": "free",
        "count": 12
      },
      {
        "total": 12
      }
    ],
    "2022-06-29": [
      {
        "package": "free",
        "count": 4
      },
      {
        "total": 4
      }
    ],
    "2022-06-28": [
      {
        "package": "free",
        "count": 2
      },
      {
        "total": 2
      }
    ],
    "2022-06-27": [
      {
        "package": "corporate",
        "count": 1
      },
      {
        "package": "free",
        "count": 1
      },
      {
        "total": 2
      }
    ],
    "2022-06-26": 0,
    "2022-06-25": 0,
    "2022-06-24": [
      {
        "package": "free",
        "count": 6
      },
      {
        "total": 6
      }
    ],
    "2022-06-23": [
      {
        "package": "free",
        "count": 2
      },
      {
        "total": 2
      }
    ],
    "2022-06-22": [
      {
        "package": "free",
        "count": 2
      },
      {
        "total": 2
      }
    ],
    "2022-06-21": 0,
    "2022-06-20": 0,
    "2022-06-19": 0,
    "2022-06-18": 0,
    "2022-06-17": [
      {
        "package": "free",
        "count": 6
      },
      {
        "total": 6
      }
    ],
    "2022-06-16": [
      {
        "package": "free",
        "count": 8
      },
      {
        "total": 8
      }
    ],
    "2022-06-15": [
      {
        "package": "free",
        "count": 3
      },
      {
        "total": 3
      }
    ],
    "2022-06-14": 0,
    "2022-06-13": [
      {
        "package": "free",
        "count": 2
      },
      {
        "total": 2
      }
    ],
    "2022-06-12": 0,
    "2022-06-11": 0,
    "2022-06-10": 0,
    "2022-06-09": 0,
    "2022-06-08": 0,
    "2022-06-07": 0,
    "2022-06-06": 0
  },
  "number_of_queues": 7,
  "notifications_monthly_info": [
    {
      "total": 20,
      "per_queue": [
        {
          "total": 19,
          "queue": "email"
        },
        {
          "total": 1,
          "queue": "sms"
        }
      ],
      "date": "2022-07-04"
    }
  ],
  "maximum_in_parallel": 700,
  "current_queue": 112
}
Property Description Type Required
current_queue Currently pending notification jobs that will be executed some point in the future (available,executing,retryable,scheduled) integer false
maximmum_in_parallel Maximum amount of notifications that can be executed in parallel (sum of all queues) integer false
monthly_information Monthly statistics of notifications: Per day successfully delivered total + per queue count array(any) false
number_of_queues Available amount of notification queues integer false
project_creation_monthly_information Elixir map with the past 30 days as keys, with the value being a list of per package project created count, and an additional list element with the total of all projects created on this day. map false

Channels

Channels, referred to as relay systems as well, are configured by the project owner using a list of variables specific for each type of channel, to then be used by Notifications to send notifications to the project owner's clients, if this is not setup, Notifications will not deliver your notifications. Each channel (i.e. E-mail, sms, etc..) can have multiple configuration that you can use to relay your notifications with. You can also set each channel to have a list of configuration by default. The webhook here is the channel used by the project owner to send notifications to his own clients. Every channel here is allowed to be set as a backup channel to be attempted when all channels specified in a send notification request fail.

{
  "webhook": {},
  "sms": {
    "sendinblue_server": {
      "sender": "sender name, could be your company name.",
      "provider": "sendinblue",
      "backup": true,
      "api_key": "YOUR_API_KEY"
    }
  },
  "push": {
    "push_config_name_0": {
      "title": "Your Default Notification Title",
      "logo": "www.default_logo_link.com",
      "backup": true
    }
  },
  "mattermost": {
    "mattermost_server_1": {
      "server_url": "https://yourServerURL.com/hooks/asxaa1",
      "channel": "off-topic",
      "backup": true
    }
  },
  "fcm": {
    "fcm_config1": {
      "fcm_key": "your_fcm_key",
      "backup": true
    }
  },
  "email": {
    "mailgun": {
      "relay": "mailgun",
      "domain": "sandboxf0****.mailgun.org",
      "base_uri": "https://api.mailgun.net/v3",
      "backup": true,
      "api_key": "key-654805cea4ad987*******"
    }
  },
  "apns": {
    "apns_config1": {
      "team_id": "your_apple_account_team_id",
      "mode": "your_app_state (prod or test)",
      "key_identifier": "your_apple_account_key_id",
      "key": "your_apple_account_key",
      "bundle_id": "your_app_bundle_id",
      "backup": true
    }
  }
}
Property Description Type Required
apns Apple Push Notification Service configuration map false
email Email configuration map false
fb_messenger Facebook messenger configuration (not supported yet) map false
fcm Firebase Cloud Messaging configuration map false
mattermost Mattermost configuration map false
push Web Push Notifications configuration map false
slack Slack messenger configuration (not supported yet) map false
sms SMS messenger configuration (no tsupported yet) map false
webhook Webhook configuration map false

Error

Errors returned by Notifications. Notifications treats error as a first class citizens to have clear responses for the user so he can't take actions accordingly. We have the following type of errors:

{
  "error": "Unauthorized Request"
}
Property Description Type Required
error Description of the error string false

Package

A package is the subscription of your project in Notifications. It represents what the project is offered in term of resources.

{
  "name": "standard",
  "limits": [
    {
      "value": 5,
      "name": "number_of_pages",
      "label": "Max number of pages"
    },
    {
      "value": 3,
      "name": "variation_per_page",
      "label": "Max number of variation per page"
    },
    {
      "value": 20,
      "name": "static_sections",
      "label": "Max number of static section types that can be declared"
    },
    {
      "value": 10,
      "name": "sections_total",
      "label": "Max number of sections per page"
    },
    {
      "value": 100,
      "name": "hosted_files",
      "label": "Max number of files hosted"
    },
    {
      "value": 1000000,
      "name": "size_per_file",
      "label": "Maximum Size Per File (in bytes)"
    },
    {
      "value": -1,
      "name": "api_limit_sec",
      "label": "API rate limit per sec"
    },
    {
      "value": -1,
      "name": "api_limit_minute",
      "label": "API rate limit per minute"
    },
    {
      "value": 500,
      "name": "api_limit_hour",
      "label": "API rate limit per hour"
    },
    {
      "value": 1000,
      "name": "api_limit_day",
      "label": "API rate limit per day"
    }
  ],
  "label": "Standard"
}
Property Description Type Required
currency The currency of the price string false
id Unique identifier string true
label The title of the package string false
limits A list of limits, it shows up to how much resources can your project consume array(any) false
name Unique name of the package string false
price The price of the package integer false
type The type of the package could be private or a public one. string false

Pending_Invitation

This is the response of the get pending_invitation API call.

{
  "users": [
    {
      "role": "admin",
      "invited_at": 1652524584,
      "email": "[email protected]"
    }
  ],
  "total": 1
}
Property Description Type Required
total Total of pending invitations integer false
users List of pending invitations array(any) false

Project

The project holds your project configuration to communicate with Notifications

{
  "webhook_url": "yourprojectwebhookurl.com",
  "webhook_tls_handshake": false,
  "type": "private",
  "project_url": "https://yourprojecturl.com",
  "package": "Free",
  "id": 3
}
Property Description Type Required
active Flags if the project is active or not boolean false
package The package to which the project is subscribed string false
private_key Private Key of the project. string false
project_url The project base URL ex: https://.com. You can also use either localhost with HTTP/HTTPS or Private Network IP Addresses with HTTP as long as you specify the port. string false
reason The reason why the website might be deactivated string false
user_id Unique identifier string false
webhook_tls_handshake Specify if TLS Handshake should be used when sending webhooks to webhook_url boolean false
webhook_url The webhook uri that the project owner uses to receive webhooks from the Notifications SaaS. This is different than the webhook relay that the user configures to send webhooks to his own clients. string false

Project_Dashboard

This is the response of the get project dashboard API call.

{
  "success_rate": 98,
  "notifications_monthly_info": [
    {
      "total": 19,
      "per_queue": [
        {
          "total": 19,
          "queue": "email"
        }
      ],
      "date": "2022-07-04"
    }
  ],
  "current_queue": 58
}
Property Description Type Required
current_queue Currently pending notification jobs that will be executed some point in the future (available,executing,retryable,scheduled) integer false
monthly_information Monthly statistics of notifications: Per day successfully delivered total + per queue count array(any) false
success_rate Percentage of the delivery rate of finished notifications. integer false

Token

Certain API calls are secured with an access token, read below about authentication to know how to get an access token for your application

{
  "token": "A really long string"
}
Property Description Type Required
token token to authenticate the user string false

User

A user is an owner of a project registered to Notifications.

{
  "user_id": "Mr. Bean",
  "saas_project_id": [
    {
      "saas_project_id": "1",
      "role": "owner"
    }
  ],
  "email": "[email protected]"
}
Property Description Type Required
email The email of the user string false
saas_project_id Information of the roles the user has in projects the user has access to. array(any) false
user_id Unique identifier of the user string false

Valid_job

This is what the user will get in return in case the notification is valid. The purpose of this is that the user would know the final result of the notification that was sent and additional information to track it.

{
  "unique_id": "X0DBPR",
  "result": {
    "type": "email",
    "id": 814,
    "args": {
      "relay": "mailgun",
      "recipients": [
        "[email protected]"
      ],
      "project_id": 1,
      "from": "[email protected]",
      "content": {
        "text_body": "",
        "subject": "welcome email",
        "html_body": "<h1> Hello world </h1>"
      }
    }
  }
}
Property Description Type Required
config configuration related to the notification map true
content The content of the notification depending on the notification's type map false
recipients List of of recipients array(any) false
result contains the reason why the notification was not relayed map false
template Data to cover content templating map false
type The notification's type string false
unique_id Unique identifier to track the notification string false

invalid_notification

This is what the user will get in return in case the notification is not valid. The purpose of this is that the user would know exactly why his notification is not being relay.

{
  "unique_id": "6NPNR1",
  "type": "email",
  "template": {
    "tokens": {
      "name": "Hello world"
    },
    "templateId": 1
  },
  "result": {
    "error": "Please make sure the senders' email is valid."
  },
  "recipients": [
    "[email protected]"
  ],
  "content": {
    "text_body": "",
    "subject": "welcome email",
    "html_body": "<h1> hi </h1>"
  },
  "config": {
    "relays": {
      "weight": 0,
      "relay": "mailgun"
    },
    "from": "some1mail.com"
  }
}
Property Description Type Required
config configuration related to the notification map true
content The content of the notification depending on the notification's type map false
recipients List of of recipients array(any) false
result contains the reason why the notification was not relayed map false
template Data to cover content templating map false
type The notification's type string false
unique_id Unique identifier to track the notification string false

1. Connect to Notifications

This section will guide you to register your website to Notifications and do all the necessary configurations to start relaying notifications.

Register

Register to Notifications and update configuration

POST /api/v1/register
origin: https://test-origin.com
content-type: multipart/mixed; boundary=plug_conn_test
{
  "user": {
    "terms_conditions": true,
    "password": "6724e0a5-eee5-4db1-a75e-ff769cb3e5da",
    "full_name": "Your Full Name",
    "email": "[email protected]"
  },
  "project": {
    "webhook_url": "https://www.your_project_url_here.com/notifications/webhook",
    "project_url": "https://www.your_project_url_here_0ec29205-7d7f-4122-8fbb-0b108deee936.com"
  }
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ12hK6PXvaTOQAAeuh
{
  "user": {
    "terms_conditions": true,
    "status": "pending",
    "saas_project_id": [
      {
        "saas_project_title": null,
        "saas_project_id": "12748",
        "role": "owner"
      }
    ],
    "project_id": "5fabc4303938e100014c1ff3",
    "password": "6724e0a5-eee5-4db1-a75e-ff769cb3e5da",
    "id": "afb8847d-902d-4851-bf02-4b04b0e5ddb4",
    "full_name": "Your Full Name",
    "email": "[email protected]"
  },
  "token": "SFMyNTY.g2gDdAAAAAdtAAAABWVtYWlsbQAAABl5b3VyX2VtYWlsX2hlcmVAZXdlZXYuY29tbQAAAAlmdWxsX25hbWVtAAAADllvdXIgRnVsbCBOYW1lbQAAAAhwYXNzd29yZG0AAAAkNjcyNGUwYTUtZWVlNS00ZGIxLWE3NWUtZmY3NjljYjNlNWRhbQAAAApwcm9qZWN0X2lkbQAAABg1ZmFiYzQzMDM5MzhlMTAwMDE0YzFmZjNtAAAAD3NhYXNfcHJvamVjdF9pZGwAAAABdAAAAAJtAAAABHJvbGVtAAAABW93bmVybQAAAA9zYWFzX3Byb2plY3RfaWRtAAAABTEyNzQ4am0AAAAQdGVybXNfY29uZGl0aW9uc3cEdHJ1ZW0AAAAHdXNlcl9pZG0AAAAJMTIzYWJjMTIzbgYAGfU2XpkBYgABUYA.TfIW2dOEr8RML3eJaq8bo7QA9UBDd9gw5fKEOCgwIYM",
  "project": {
    "webhook_url": "https://www.your_project_url_here.com/notifications/webhook",
    "webhook_tls_handshake": false,
    "type": "private",
    "title": null,
    "project_url": "https://www.your_project_url_here_0ec29205-7d7f-4122-8fbb-0b108deee936.com",
    "private_key": "$2b$12$E5SRpIaHI.ytbNIg6w5pD.zRtT8rK8I0ruGhgC.7Irwk.FkeNHkXi",
    "package": "free",
    "inserted_at": "2025-09-18T19:04:44",
    "id": 12748
  }
}

Registration is responsible to create your project in Notifications and create an admin for it.

Request

POST /api/v1/register

Parameters

Parameter Description In Type Required Default Example
user A map containing your email and pass body map true {user: {email: '@gmail.com', password: 'YOUR_PASS'} }
project A project containing all the project info body map true

Responses

Status Description Schema
200 Project Resource Project
400 Error Resource Error

Invite a user to join your project

Invitation tests Invite user to project success - user exists

POST /api/v1/project/12937/invite_user
origin: https://test-origin.com
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAAEbQAAAAVlbWFpbHcDbmlsbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVhZG1pbm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjkzN2ptAAAABnN0YXR1c20AAAAIdmVyaWZpZWRtAAAAB3VzZXJfaWRtAAAAIDk5MDlmMGQxOWM4ODRkOGQ5YTMwMWM0Y2MwNjA2OTVhbQAAAAZzdGF0dXNtAAAAB3N1Y2Nlc3NuBgCFGThemQFiAAFRgA.-CXjo9nwSZb2aif6PAMOYb39xJTh9pl8I1g6WYqP15M
content-type: multipart/mixed; boundary=plug_conn_test
{
  "invitation_user_email": [
    "[email protected]"
  ],
  "invitation_role": "admin"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ164N4tORqAJUAAfvh
{
  "invited": [
    "[email protected]"
  ],
  "invalid_format": [],
  "demotion": []
}

Used to send an invitation to (existing or non existing) user emails to join your project with a specific role.

Request

POST api/v1/project/:project_id/invite_user

Parameters

Parameter Description In Type Required Default Example
project_id Your project id in Notifications query_string string true
invitation_role The role to invite the users as body string true one of:admin
invitation_emails List of emails to invite to the project body array true ['[email protected]','[email protected]']

Responses

Status Description Schema
200 Invitation Resource Invitation
401 Error Resource Error

Accept an invitation to join a project.

Invitation tests Accept invitation to project success - user exists

POST /api/v1/accept_invitation
origin: https://test-origin.com
content-type: multipart/mixed; boundary=plug_conn_test
{
  "invitation_token": "SFMyNTY.g2gDdAAAAANtAAAACnByb2plY3RfaWRiAAAye20AAAAEcm9sZW0AAAAFYWRtaW5tAAAACnVzZXJfZW1haWxtAAAAEGVtYWlsMUBlbWFpbC5jb21uBgAo5TdemQFiAAFRgA.fLsfHTjdbqM9kD7sqTcYVJ_2hvCVm9MBQsxyAfglnoo"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ16GRrf9vWzmoAAihD
{
  "token": null,
  "status": "pending",
  "saas_project_id": [
    {
      "saas_project_id": "12923",
      "role": "admin"
    }
  ],
  "roles": null,
  "project_id": null,
  "id": "123",
  "full_name": "Full name",
  "email": "[email protected]"
}

Used to accept an invitation to join a project with a specific role.

You are expected to add the token received in the email as the token authorization header.

Request

POST /api/v1/invitation

Parameters

Parameter Description In Type Required Default Example
token Notifications Token used to authenticate certain requests header string true
origin Notifications Project (or BO) URL used to only let your project domain passes the CORS check header string true

Responses

Status Description Schema
200 User Resource User
401 Error Resource Error

Cancel an invitation

Invitation tests Accept invitation to project failure - invitation cancelled

DELETE /api/v1/project/12933/cancel_invitation
origin: https://test-origin.com
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAAEbQAAAAVlbWFpbHcDbmlsbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVhZG1pbm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjkzM2ptAAAABnN0YXR1c20AAAAIdmVyaWZpZWRtAAAAB3VzZXJfaWRtAAAAIGFkNTc2N2Y4NWY4MzRjNWY4ODMzMzRmNDhkODQyNzQ3bQAAAAZzdGF0dXNtAAAAB3N1Y2Nlc3NuBgDUDjhemQFiAAFRgA.p6cl3AGh0ZVOarWnO6VfyVsViI3olmuTaDp2aTQki_4
content-type: multipart/mixed; boundary=plug_conn_test
{
  "invitation_user_email": "[email protected]"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ16vEiAq8sOeIAAirj
{
  "message": "Invitation cancelled successfuly"
}

Used to cancel invitations sent to specific emails.

Request

DELETE api/v1/project/:project_id/cancel_invitation

Parameters

Parameter Description In Type Required Default Example
project_id Your project id in Notifications query_string string true
invitation_email Email to cancel invitation to the project body string true '[email protected]','[email protected]'

Responses

Status Description Schema
200 Message Resource Message
401 Error Resource Error

Remove a user from your project

Remove user remove user success

DELETE /api/v1/project/12925/remove_user/exists
origin: https://test-origin.com
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAAEbQAAAAVlbWFpbHcDbmlsbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVhZG1pbm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjkyNWptAAAABnN0YXR1c20AAAAIdmVyaWZpZWRtAAAAB3VzZXJfaWRtAAAAIDMyMjUyOTFmODE3ZDQ0N2FiZWFjOGE1YWIyMjY4MGRmbQAAAAZzdGF0dXNtAAAAB3N1Y2Nlc3NuBgA07zdemQFiAAFRgA.C0VedErwtSXeBrlsZigU3pG1hiVm1cwYqF0flgpFZgA

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ16P3EC9W9PUQAAcSk
{
  "message": "User with id exists has been successfully removed from your project"
}

Used to remove users from your project. You cannot removce the owner of the project.

Request

DELETE api/v1/project/:project_id/remove_user/:user_id

Parameters

Parameter Description In Type Required Default Example
project_id Your project id in Notifications query_string string true
user_id The Notifications user id. query_string string true

Responses

Status Description Schema
200 Message Resource Message
401 Error Resource Error

Get the pending invitations to a project.

Invitation tests Invite user to project success - user exists

GET /api/v1/project/12937/pending_invitations
origin: https://test-origin.com
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAAEbQAAAAVlbWFpbHcDbmlsbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVhZG1pbm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjkzN2ptAAAABnN0YXR1c20AAAAIdmVyaWZpZWRtAAAAB3VzZXJfaWRtAAAAIDk5MDlmMGQxOWM4ODRkOGQ5YTMwMWM0Y2MwNjA2OTVhbQAAAAZzdGF0dXNtAAAAB3N1Y2Nlc3NuBgCFGThemQFiAAFRgA.-CXjo9nwSZb2aif6PAMOYb39xJTh9pl8I1g6WYqP15M

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ1648XOo1qAJUAAiwD
{
  "users": [
    {
      "role": "admin",
      "invited_at": "2025-09-18T19:05:59",
      "email": "[email protected]"
    }
  ],
  "total": 1,
  "count": 1
}

Used to fetch pending invitation to (existing or non existing) user emails to join your project with a specific role.

Request

GET api/v1/project/:project_id/pending_invitations

Parameters

Parameter Description In Type Required Default Example
project_id Your project id in Notifications query_string string true

Responses

Status Description Schema
200 Pending Invitation Resource Pending_Invitation
401 Error Resource Error

Logout

Register to Notifications and update configuration

POST /api/v1/logout
origin: https://test-origin.com
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAAFbQAAAAVlbWFpbG0AAAAZeW91cl9lbWFpbF9oZXJlQGV3ZWV2LmNvbW0AAAAIcGFzc3dvcmRtAAAAJDY3MjRlMGE1LWVlZTUtNGRiMS1hNzVlLWZmNzY5Y2IzZTVkYW0AAAAKcHJvamVjdF9pZG0AAAAYNWZhYmM0MzAzOTM4ZTEwMDAxNGMxZmYzbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVvd25lcm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjc0OGptAAAAB3VzZXJfaWRtAAAACTEyM2FiYzEyM20AAAAGc3RhdHVzbQAAAAdzdWNjZXNzbgYAS_c2XpkBYgABUYA.lzO24yJpH9XJ8smzWTADEXFU5BmXKZQ7LBmdP_8vkfo

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ12jmh87vaTOQAAhVD
{
  "status": "success",
  "data": {
    "message": "Token has been revoked"
  }
}

Logout from notifications.

Request

POST /api/v1/logout

Parameters

Parameter Description In Type Required Default Example
token Notifications Token used to authenticate certain requests header string true
origin Notifications Project (or BO) URL used to only let your project domain passes the CORS check header string true

Responses

Status Description Schema
200 Message Resource Message
400 Error Resource Error

Get Project Users.

Get users Get users success

GET /api/v1/project/12922/project_users
origin: https://test-origin.com
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAAEbQAAAAVlbWFpbHcDbmlsbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVhZG1pbm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjkyMmptAAAABnN0YXR1c20AAAAIdmVyaWZpZWRtAAAAB3VzZXJfaWRtAAAAIDE0MDliMTNmZmI5OTQwODM4YmEzNTRmYTMzNDZiYmNibQAAAAZzdGF0dXNtAAAAB3N1Y2Nlc3NuBgAj3TdemQFiAAFRgA.ukZkcHsJnmjZoShCy-apjP_qQS6KInL6uLM2Qr9hvnc

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ15-oXX22Dbj0AAifj
{
  "data": [
    {
      "role": "admin",
      "last_login": 1758222343,
      "id": null,
      "full_name": "Someone",
      "email": "[email protected]",
      "accepted_on": null
    }
  ]
}

Used to fetch an existing project's users.

Request

GET api/v1/project/:project_id/project_users

Parameters

Parameter Description In Type Required Default Example
project_id Your project id in Notifications query_string string true
token Notifications Token used to authenticate certain requests header string true
origin Notifications Project (or BO) URL used to only let your project domain passes the CORS check header string true

Responses

Status Description Schema
200 Array of User Resource User
401 Error Resource Error

Get Notifications Project Admin Dashboard

Send Notifications

GET /api/v1/project/12885/dashboard
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAADbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVvd25lcm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjg4NWptAAAABnN0YXR1c20AAAAIdmVyaWZpZWRtAAAAB3VzZXJfaWRtAAAACTEyM2FiYzEyM20AAAAGc3RhdHVzbQAAAAdzdWNjZXNzbgYAFHw3XpkBYgABUYA.XEdbk1k67pHaoK8D8s2swelkCHmZoMHTT8SSLbYlpq4
origin: https://test.com

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ14otfs6ux4w4AAfjh
{
  "success_rate": 100,
  "notifications_monthly_info": [
    {
      "total": 1,
      "per_queue": [
        {
          "total": 1,
          "queue": "email"
        }
      ],
      "date": "2025-09-18"
    }
  ],
  "current_queue": 0
}

This call allows you to retrieve the dashboard for a Notifications Project Admin, for the response description, kindly check Project_Dashboard model

Request

GET /api/v1/project/{project_id}/dashboard

Parameters

Parameter Description In Type Required Default Example
token Notifications Token used to authenticate certain requests header string true
origin Notifications Project (or BO) URL used to only let your project domain passes the CORS check header string true
project_id Your project id in Notifications query_string string true

Responses

Status Description Schema
200 Project Dashboard Resource Project_Dashboard
401 Error Resource Error

Get Token User

Register to Notifications and update configuration

GET /api/v1/user
origin: https://test-origin.com
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAAFbQAAAAVlbWFpbG0AAAAZeW91cl9lbWFpbF9oZXJlQGV3ZWV2LmNvbW0AAAAIcGFzc3dvcmRtAAAAJDY3MjRlMGE1LWVlZTUtNGRiMS1hNzVlLWZmNzY5Y2IzZTVkYW0AAAAKcHJvamVjdF9pZG0AAAAYNWZhYmM0MzAzOTM4ZTEwMDAxNGMxZmYzbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVvd25lcm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjc0OGptAAAAB3VzZXJfaWRtAAAACTEyM2FiYzEyM20AAAAGc3RhdHVzbQAAAAdzdWNjZXNzbgYAS_c2XpkBYgABUYA.lzO24yJpH9XJ8smzWTADEXFU5BmXKZQ7LBmdP_8vkfo

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ12jiqoQfaTOQAAhUD
{
  "user": {
    "user_id": "123abc123",
    "status": "pending",
    "saas_project_id": [
      {
        "saas_project_title": null,
        "saas_project_id": "12748",
        "role": "owner"
      }
    ],
    "project_id": "5fabc4303938e100014c1ff3",
    "password": "6724e0a5-eee5-4db1-a75e-ff769cb3e5da",
    "email": "[email protected]"
  }
}

Get user information using the authorization token.

Request

GET /api/v1/user

Parameters

Parameter Description In Type Required Default Example
token Notifications Token used to authenticate certain requests header string true
origin Notifications Project (or BO) URL used to only let your project domain passes the CORS check header string true

Responses

Status Description Schema
200 User Resource User
400 Error Resource Error

Login

Register to Notifications and update configuration

POST /api/v1/login
origin: https://test-origin.com
content-type: multipart/mixed; boundary=plug_conn_test
{
  "saas_project_id": [
    {
      "saas_project_id": "12748",
      "role": "owner"
    }
  ],
  "password": "6724e0a5-eee5-4db1-a75e-ff769cb3e5da",
  "email": "[email protected]"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ12jbAT_HaTOQAAcKk
{
  "user": {
    "status": "pending",
    "saas_project_id": [
      {
        "saas_project_title": null,
        "saas_project_id": "12748",
        "role": "owner"
      }
    ],
    "project_id": "5fabc4303938e100014c1ff3",
    "password": "6724e0a5-eee5-4db1-a75e-ff769cb3e5da",
    "id": "2b23ce9a-6157-4512-bd66-601e510b99b1",
    "full_name": "Some Full Name",
    "email": "[email protected]"
  },
  "token": "SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAAFbQAAAAVlbWFpbG0AAAAZeW91cl9lbWFpbF9oZXJlQGV3ZWV2LmNvbW0AAAAIcGFzc3dvcmRtAAAAJDY3MjRlMGE1LWVlZTUtNGRiMS1hNzVlLWZmNzY5Y2IzZTVkYW0AAAAKcHJvamVjdF9pZG0AAAAYNWZhYmM0MzAzOTM4ZTEwMDAxNGMxZmYzbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVvd25lcm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjc0OGptAAAAB3VzZXJfaWRtAAAACTEyM2FiYzEyM20AAAAGc3RhdHVzbQAAAAdzdWNjZXNzbgYAS_c2XpkBYgABUYA.lzO24yJpH9XJ8smzWTADEXFU5BmXKZQ7LBmdP_8vkfo"
}

Login to notifications using your credentials that you used when registring.

Request

POST /api/v1/login

Parameters

Parameter Description In Type Required Default Example
user A map containing your email and pass body map true {user: {email: '@gmail.com', password: 'YOUR_PASS'} }

Responses

Status Description Schema
200 User Resource User
400 Error Resource Error

Retrieve a Project information as the Project Admin

get project get project information as project owner

GET /api/v1/project/12939
origin: https://test-origin.com
pkey: $2b$12$AwWvZANHHJNmonvqfJP/VONV3fce0/BrJ5RShfIxQwmbc8VMABWba

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ17D8h__hpMy4AAfwh
{
  "webhook_url": "https://www.your_project_url0d60b77e-59d0-4753-94e9-4f89fffa4eb8.com/webhook",
  "webhook_tls_handshake": false,
  "type": "private",
  "title": "some title",
  "project_url": "https://www.your_project_urlb5120342-0dc2-4a08-9460-925936195230.com",
  "private_key": "$2b$12$NefXpubsa5jNF2ssYnsaLuN.GUK.svUU.ecS8ZEsUIige0/8uNQA2",
  "package": "free",
  "inserted_at": "2025-09-18T19:06:01",
  "id": 12939
}

This call allows you to retrieve your project information, with the right identification parameters.

You can either use the private key of the project, or both the login token, and the project URL as the origin.

Request

GET /api/v1/project/{project_id}/

Parameters

Parameter Description In Type Required Default Example
token Notifications Token used to authenticate certain requests header string true
origin Notifications Project (or BO) URL used to only let your project domain passes the CORS check header string true
project_id Your project id in Notifications query_string string true

Responses

Status Description Schema
200 Project Resource Project
404 Error Resource Error

Update project's channels

Register to Notifications and update configuration

PUT /api/v1/project/12748/channels
origin: https://www.your_project_url_here_0ec29205-7d7f-4122-8fbb-0b108deee936.com
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAACbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVvd25lcm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjc0OGptAAAAB3VzZXJfaWRtAAAACTEyM2FiYzEyM20AAAAGc3RhdHVzbQAAAAdzdWNjZXNzbgYAgfc2XpkBYgABUYA.hgXNvRvmxp_z-pDTFPNuyrdC5x99Esx10vFhNwTmVDI
content-type: multipart/mixed; boundary=plug_conn_test
{
  "channels": {
    "webhook": {
      "webhook_name": {
        "url": "https://www.your_webhook_url.com/webhook",
        "method": "post",
        "description": "description on the webhook"
      }
    },
    "telegram": {
      "bot_1": {
        "bot_token": "bot123456:Xysiuf897oKXoiu"
      }
    },
    "sms": {
      "sendinblue_provider": {
        "sender": "Name",
        "provider": "sendinblue",
        "api_key": "YOUR_API_KEY"
      },
      "clickatel_provider": {
        "provider": "clickatell",
        "api_key": "YOUR_API_KEY"
      }
    },
    "push": {
      "push_server_name": {
        "title": "Your Default Notification Title",
        "logo": "https://www.your_logo_link.com"
      }
    },
    "mattermost": {
      "mattermost_server_1": {
        "server_url": "https://www.your-mattermost-server.com/hooks/1xas123",
        "channel": "default_channel",
        "[OPTIONAL] extra-settings": {
          "username": "Your desired bot username",
          "icon_url": "Link to your desired bot icon"
        }
      }
    },
    "fcm": {
      "fcm_name": {
        "fcm_key": "your_fcm_server_key"
      }
    },
    "email": {
      "mailgun_1": {
        "relay": "mailgun",
        "domain": "sandboxf1****.mailgun.org",
        "base_uri": "https://api.mailgun.net/v3",
        "backup": true,
        "api_key": "key-123805cea4ad987*******"
      },
      "mailgun_0": {
        "relay": "mailgun",
        "domain": "sandboxf2****.mailgun.org",
        "base_uri": "https://api.mailgun.net/v3",
        "backup": true,
        "api_key": "key-777805cea4ad987*******"
      },
      "mailgun": {
        "relay": "mailgun",
        "domain": "sandboxf0****.mailgun.org",
        "base_uri": "https://api.mailgun.net/v3",
        "api_key": "key-654805cea4ad987*******"
      }
    },
    "apns": {
      "apns_name": {
        "team_id": "0123456789",
        "mode": "dev",
        "key_identifier": "your_authkey_id",
        "key": "your_authkey",
        "bundle_id": "your.application.bundle.id"
      }
    }
  }
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ12joiqhLaTOQAAhWj
{
  "webhook": {
    "webhook_name": {
      "url": "https://www.your_webhook_url.com/webhook",
      "method": "post",
      "description": "description on the webhook"
    }
  },
  "telegram": {
    "bot_1": {
      "bot_token": "bot123456:Xysiuf897oKXoiu"
    }
  },
  "sms": {
    "sendinblue_provider": {
      "sender": "Name",
      "provider": "sendinblue",
      "api_key": "YOUR_API_KEY"
    },
    "clickatel_provider": {
      "provider": "clickatell",
      "api_key": "YOUR_API_KEY"
    }
  },
  "slack": null,
  "push": {
    "push_server_name": {
      "title": "Your Default Notification Title",
      "logo": "https://www.your_logo_link.com"
    }
  },
  "project_id": 12748,
  "mattermost": {
    "mattermost_server_1": {
      "server_url": "https://www.your-mattermost-server.com/hooks/1xas123",
      "channel": "default_channel",
      "[OPTIONAL] extra-settings": {
        "username": "Your desired bot username",
        "icon_url": "Link to your desired bot icon"
      }
    }
  },
  "fcm": {
    "fcm_name": {
      "fcm_key": "your_fcm_server_key"
    }
  },
  "fb_messenger": null,
  "email": {
    "mailgun_1": {
      "relay": "mailgun",
      "domain": "sandboxf1****.mailgun.org",
      "base_uri": "https://api.mailgun.net/v3",
      "backup": true,
      "api_key": "key-123805cea4ad987*******"
    },
    "mailgun_0": {
      "relay": "mailgun",
      "domain": "sandboxf2****.mailgun.org",
      "base_uri": "https://api.mailgun.net/v3",
      "backup": true,
      "api_key": "key-777805cea4ad987*******"
    },
    "mailgun": {
      "relay": "mailgun",
      "domain": "sandboxf0****.mailgun.org",
      "base_uri": "https://api.mailgun.net/v3",
      "api_key": "key-654805cea4ad987*******"
    }
  },
  "apns": {
    "apns_name": {
      "team_id": "0123456789",
      "mode": "dev",
      "key_identifier": "your_authkey_id",
      "key": "your_authkey",
      "bundle_id": "your.application.bundle.id"
    }
  }
}

This call will configure your channels to start sending you notifications. A channel is a platform like Email, SMS, Slack and so on. A channel configuration should hold the credentials to your account so you'll be able to use it when relaying your notification for this particular platform. As we mentioned before each platform/channel can have multiple configuration at once.

Important notices

- Refer to the payload at the right to know how to configure each channel.

- For all the channels configuration, the key that holds a configuration will be used later to send the notifications with (for example: In the payload, webhook_name or mattermost_server_1, mailgun_1, mailgun_0 and mailgun). These keys is what notification will be searching for when sending notifications depending on the channel type.

- For Mattermost, the channel inside the configuration is the default channel that will be used when you send a Mattermost notification. When sending a notification, If a channel is specified the default channel will be ignored and the message will be relayed to the specified channel. The server_url is your Mattermost incoming webhook URL. To collect this url, please follow these steps here.

Optionally, you can specify the mattermost bot username and icon by adding the extra-settings map to the mattermost channel config.

You can also specify the TLS Handshake mode by setting tls_handshake: true or false in the config.

- For Webhook, you can specify the TLS Handshake mode by setting tls_handshake: true or false in the config.

- For APNS, your key, key_identifier, team_id can be obtained from your apple developer account. The bundle_id is your app's bundle id. The mode is your application's environment (either prod or dev)

Regarding the key, we accept the text content of the .p8 file, make sure that the contents are a single line separated by a \n(the token should be separated as well).

Regarding the team_id, it is a 10-character string.

- For Push, you will need to set the service worker's application server key to BAYqATkkzjlualGtsJDbfv7e23c-WSXxA367c_HPNxRqbf-s6THJq0BKjEWUvPkzshm544JQZx-CeIvgSwFZglI to validate the push notification sent from our servers.

- For Telegram, you need to store the bot token you get from Telegram's BotFather, prefixed by bot (ie bot11223344:hfhdoiu8979dckj) inside your channel's bot_token field.

Request

PUT /api/v1/project/{project_id}/update

Parameters

Parameter Description In Type Required Default Example
token Notifications Token used to authenticate certain requests header string true
origin Notifications Project (or BO) URL used to only let your project domain passes the CORS check header string true
channels A channels configuration map body map true
project_id Your project id in Notifications query_string string true

Responses

Status Description Schema
200 Channels Resource Channels
400 Error Resource Error

Retrieve project's channels

get channels configuration

GET /api/v1/project/12845/channels
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAADbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVvd25lcm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjg0NWptAAAABnN0YXR1c20AAAAIdmVyaWZpZWRtAAAAB3VzZXJfaWRtAAAACTEyM2FiYzEyM20AAAAGc3RhdHVzbQAAAAdzdWNjZXNzbgYA6B83XpkBYgABUYA.M1TpRTJKl7iF3lYQVsMR5H_CqvSmZ7RJUjkG36c_l30
project_id: https://test-origin.com
origin: https://test.com

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ13KKojC46EJAAAdvl
{
  "webhook": null,
  "telegram": null,
  "sms": null,
  "slack": null,
  "push": null,
  "project_id": 12845,
  "mattermost": null,
  "fcm": null,
  "fb_messenger": null,
  "email": {
    "mailgun": {
      "relay": "mailgun",
      "domain": "sandboxf094ee0f815c409c8412ca666f1d1ff7.mailgun.org",
      "base_uri": "https://api.mailgun.net/v3",
      "api_key": "key-654805cea4ad9871aeca247b5745913c"
    }
  },
  "apns": null
}

This call will retrieve your project's channels configurations.

Request

GET /api/v1/project/:project_id/channels

Parameters

Parameter Description In Type Required Default Example
token Notifications Token used to authenticate certain requests header string true
origin Notifications Project (or BO) URL used to only let your project domain passes the CORS check header string true
project_id Your project id in Notifications query_string string true

Responses

Status Description Schema
200 Channels Resource Channels
401 Error Resource Error

Forgot Password

Post api/v1/forgot_password

POST /api/v1/forgot_password
origin: https://test-origin.com
content-type: multipart/mixed; boundary=plug_conn_test
{
  "email": "[email protected]"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ167Z0-fPvkTwAAfQm
{
  "message": "We have sent you a password recovery instruction to [email protected]."
}

Used to request access to reset password, token receveid in an email.

Request

POST /api/v1/forgot_password

Parameters

Parameter Description In Type Required Default Example
email The email in question. body string true '@gmail.com'

Responses

Status Description Schema
200 Message Resource Message
400 Error Resource Error

Reset Password

Post api/v1/reset_password

POST /api/v1/reset_password
origin: https://test-origin.com
content-type: multipart/mixed; boundary=plug_conn_test
{
  "token": "this is a valid token",
  "password": "my new password"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ16CRU2MMu0GQAAigj
{
  "message": "Your password has been reset, please login with the new password."
}

Used to reset password using a token.

Request

POST /api/v1/reset_password

Parameters

Parameter Description In Type Required Default Example
password Your password body string true
token Notifications Token used to authenticate certain requests header string true
origin Notifications Project (or BO) URL used to only let your project domain passes the CORS check header string true

Responses

Status Description Schema
200 Message Resource Message
400 Error Resource Error

Verify your Notifications account

Verify user

POST /api/v1/verify_user
origin: https://test-origin.com
content-type: multipart/mixed; boundary=plug_conn_test
{
  "token": "this is the token"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ160kxXu5BNL0AAiuj
{
  "message": "Your email has been successfully verified."
}

Used to verify your Notifications account.

You are expected to use the token received in the verification email as the token authorization header.

Request

POST api/v1/verify_user

Parameters

Parameter Description In Type Required Default Example
token Notifications Token used to authenticate certain requests header string true
origin Notifications Project (or BO) URL used to only let your project domain passes the CORS check header string true

Responses

Status Description Schema
200 Message resource Message
410 Error Resource Error

Request verification for your Notifications account

Request verification

POST /api/v1/request_verification
origin: https://test-origin.com
content-type: multipart/mixed; boundary=plug_conn_test
{
  "token": "this is the token"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ16tNZWthVgGUAAdyl
{
  "message": "An email has been sent to [email protected]."
}

Used to request verification email for your Notifications Account. You will receive an email with the token in it to use it in the Verify User request.

Request

POST api/v1/request_verification

Parameters

Parameter Description In Type Required Default Example
email The email in question. body string true '@gmail.com'

Responses

Status Description Schema
200 Message resource Message
410 Error Resource Error

2. Sending notifications

This section will show you how to send notifications and use the available features. When sending a notification you can choose the relays you want to send your notification with. You can see in the payload of the request below a relays list. Each object will contain a weight that defines the priority (0 having the biggest priority), and the relay which is the name of the confiugred relay on your project. If none of the relays you chose are able to deliver your notification, Notifications will fallback to the unused backup channels to attempt to deliver the notification.

Sends a list of notifications

Test Valid Templating

POST /api/v1/project/12791/send_notification
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAADbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVvd25lcm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjc5MWptAAAABnN0YXR1c20AAAAIdmVyaWZpZWRtAAAAB3VzZXJfaWRtAAAACTEyM2FiYzEyM20AAAAGc3RhdHVzbQAAAAdzdWNjZXNzbgYA2wo3XpkBYgABUYA.qWCq3QyLPTxnCRfn6AagLgf-PuW__TNTFf1SpK5DKwo
project_id: https://test-origin.com
origin: https://test.com
content-type: multipart/mixed; boundary=plug_conn_test
{
  "templates": [
    {
      "templateId": 1,
      "templateContent": "{{name}}"
    },
    {
      "templateId": 2,
      "templateContent": "{{name}}-{{surname}}"
    }
  ],
  "channels": [
    {
      "type": "email",
      "template": {
        "tokens": {
          "name": "Cristiano"
        },
        "templateId": 1
      },
      "recipients": [
        "[email protected]"
      ],
      "content": {
        "text_body": "Hello World",
        "subject": "welcome email",
        "html_body": " Hello world!</h1>"
      },
      "config": {
        "relays": [
          {
            "weight": 0,
            "relay": "mailgun"
          }
        ],
        "from": "[email protected]"
      }
    },
    {
      "type": "email",
      "template": {
        "tokens": {
          "surname": "Ronaldo",
          "name": "Cristiano"
        },
        "templateId": 2
      },
      "recipients": [
        "[email protected]"
      ],
      "content": {
        "text_body": "Hello World",
        "subject": "welcome email",
        "html_body": ""
      },
      "config": {
        "relays": [
          {
            "weight": 0,
            "relay": "mailgun"
          }
        ],
        "from": "[email protected]"
      }
    },
    {
      "type": "email",
      "recipients": [
        "[email protected]"
      ],
      "content": {
        "text_body": "",
        "subject": "welcome email",
        "html_body": "Nothing should change"
      },
      "config": {
        "relays": [
          {
            "weight": 0,
            "relay": "mailgun"
          }
        ],
        "from": "[email protected]"
      }
    }
  ]
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ122FvMATix_IAAh2j
{
  "valid_jobs": [
    {
      "unique_id": "H8O6IQ",
      "result": {
        "type": "email",
        "id": 1907,
        "args": {
          "relays": [
            {
              "weight": 0,
              "relay": "mailgun"
            }
          ],
          "recipients": [
            "[email protected]"
          ],
          "project_id": 12791,
          "from": "[email protected]",
          "content": {
            "text_body": "Hello World",
            "subject": "welcome email",
            "html_body": "Cristiano"
          },
          "backup_channels": []
        }
      }
    },
    {
      "unique_id": "67S7O5",
      "result": {
        "type": "email",
        "id": 1908,
        "args": {
          "relays": [
            {
              "weight": 0,
              "relay": "mailgun"
            }
          ],
          "recipients": [
            "[email protected]"
          ],
          "project_id": 12791,
          "from": "[email protected]",
          "content": {
            "text_body": "Hello World",
            "subject": "welcome email",
            "html_body": "Cristiano-Ronaldo"
          },
          "backup_channels": []
        }
      }
    },
    {
      "unique_id": "38HR72",
      "result": {
        "type": "email",
        "id": 1909,
        "args": {
          "relays": [
            {
              "weight": 0,
              "relay": "mailgun"
            }
          ],
          "recipients": [
            "[email protected]"
          ],
          "project_id": 12791,
          "from": "[email protected]",
          "content": {
            "text_body": "",
            "subject": "welcome email",
            "html_body": "Nothing should change"
          },
          "backup_channels": []
        }
      }
    }
  ],
  "invalid_notifications": []
}

To send a notification you have to provide an entry in the channels list.

You are able to send different types of notifications in one go (ie email, sms, webhook etc..). For each notification you can explicitly provide the relay to use inside the config.relays list.

If you do not provide any relay information, your project's backup relay will be used for the type of notification you are sending If no backup is configured and no relay is provided, your notification will fail to be delivered.

Fallback mechanism

You can leverage Notifcations ability to uses multiple relays and avoid deliverability issues. To do that you can provide a list of relays in your notification config field with a weight for each to indicate the order of priority. In case of failure, only the last relay's error will be added to the logs.

To gain insights about the intermediary failures, you need to configure a webhook on your project and you'll receive errors there.

N.B: Sending a notification with relay like this {"relay": "mailgun"} is deprecated. Instead use relays that support a list of relays with weights that indicates the priority, ex: {"relays": [{"relay": "mailgun_1", weight: 0}, {"relay": "mailgun_2", weight: 1}]}.

Templating

Notifications supports templating. The advantage here is that you can have one template for a bunch of notifications with dynamic content for each.

Webhooks

{
    "channels": [
        {
            "type": "webhook",
            "name": "webhook_1", // name of your configured webhook
            "payload": {"status": "success"} // the payload to send to the url configured for this webhook
            "headers": { // this one is optional
              "custom-header1": "custom-value1",
              "custom-header2": "custom-value2",
              "content-type": "application/json"} // if you define custom headers you HAVE TO put the content-type
        }
    ]
}

Notifications also supports sending webhook. This webhook is used by the owner of the project to send notifications to his clients, different from the webhook_url used in project configuration (Refer to Models -> Project -> webhook_uri for a better understanding of the project webhook uri)

In order to send a webhook proceed with the following:

Mattermost

Notifications now supports sending Mattermost messages too, in order to send a Mattermost message proceed with the following:

{
    "channels": [
        {
            "type": "mattermost",
            "config": {"server": "mattermost_1", "channel": "destination_channel"},
            "content": {"text": "Hello, Town Square"}
        }
    ]
}

Notes:

APNS

{
    "channels": [
        {
            "type": "apns",
            "name": "apns_config1", // your apns configuration name
            "content": "Hello world!", // or "content": {"title": "Your notification title", "body": "Your notification
            body"}
            "device_token": "device_token" // your users app by communicating with APNS generate one token per device
            which is unique.
        }
    ]
}

Notifications now supports sending APNS push notifications. In order to push a notification to apple devices using APNS proceed with the following:

Notes:

FCM

{
    "channels": [
        {
            "type": "fcm",
            "name": "fcm_config1", // your fcm configuration name
            "content": {"title": "Your notification title", "body": "Your notification body"}
            "device_registration_id": "id" // your users app by communicating with FCM generate one id per device which
            is unique.
        }
    ]
}

Notifications now supports sending FCM push notifications. In order to push a notification to android devices using FCM proceed with the following:

Notes:

SMS

{
    "channels": [
        {
            "type": "sms",
            "recipient": "+961111111",
            "config": {
                "relays": [
                    {
                        "provider": "sendinblue_provider", "weight": 0
                    },
                    {
                        "provider": "clickatell_2", "weight": 1
                    }
                ]
            },
            "content": {
                "text": "Hello World!"
            }
        }
    ]
}

Notifications now supports sending SMS too, in order to send an SMS proceed with the following:

Notes:

Web Push Notification

{
    "channels": [
        {
            "type": "push",
            "name": "push_config_name_0", // your Push configuration name
            "content": {"title": "Your notification title", "logo": "your_logo_link", "body": "Your notification body"}
            "subscription": " {"endpoint":"user_generated_endpoint",","keys":{"p256dh":"p256dh_generated_key ",
            "auth":"auth_generated_key"}}" // your users by subscribing and allowing your web app to send notifications
            will generate these 3 fields that are unique per user.
        }
    ]
}

Notifications now supports sending Web Push Notifications to your user's browser. In order to push a notification to browsers using Web Push Notifications proceed with the following:

Notes:

Telegram bot

{
    "channels": [
        {
            "type": "telegram",
            "config": {"bot": "bot_1"}, // your telegram configuration name
            "payload": {"chat_id": "your user telegram id", "text": "your message"} // you can add any other field supported by `sendMessage` Telegram's API to customize the display of your message.
        }
    ]
}

Notifications supports sending message through Telegram bots created using Telegram's BotFather. To send messages to your Telegram users:

Notes:

Request

POST api/v1/project/{project_id}/send_notification

Parameters

Parameter Description In Type Required Default Example
token Notifications Token used to authenticate certain requests header string true
origin Notifications Project (or BO) URL used to only let your project domain passes the CORS check header string true
project_id Your project id in Notifications query_string string true
templates A list of templates body map false
channels A list of notifications each one with its own caracteristics body map true

Responses

Status Description Schema
200 Jobs Resource Valid_job
401 Error Resource Error
413 Error Resource Error
429 Error Resource Error
509 Error Resource Error

GET notification

Get a notification

GET /api/v1/project/12779/notification/LJM6OR
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAADbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVvd25lcm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjc3OWptAAAABnN0YXR1c20AAAAIdmVyaWZpZWRtAAAAB3VzZXJfaWRtAAAACTEyM2FiYzEyM20AAAAGc3RhdHVzbQAAAAdzdWNjZXNzbgYANQY3XpkBYgABUYA.p3PbkArPA82DCNSGkfn5nAYdJ4SWaMDzbahT0B72eWs
project_id: https://test-origin.com
origin: https://test.com

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ12yC2VpM5aMAAAhxD
{
  "tags": [],
  "state": "available",
  "scheduled_at": "2025-09-18T19:04:48.300935Z",
  "queue": "email",
  "priority": 0,
  "meta": {
    "unique_id": "LJM6OR",
    "status": "pending",
    "project_id": 12779
  },
  "max_attempts": 20,
  "id": 1904,
  "errors": [],
  "discarded_at": null,
  "completed_at": null,
  "cancelled_at": null,
  "attempted_at": null,
  "attempt": 0,
  "args": {
    "relays": [
      {
        "weight": 0,
        "relay": "mailgun"
      }
    ],
    "recipients": [
      "[email protected]"
    ],
    "project_id": 12779,
    "from": "[email protected]",
    "content": {
      "text_body": "Hello World",
      "subject": "welcome email",
      "html_body": " Hello world!</h1>"
    },
    "backup_channels": []
  }
}

Gets a notification by the unique id returned when a successfull call for the send_notification API call.

Request

GET /api/v1/project/{project_id}/notification/{unique_id}

Parameters

Parameter Description In Type Required Default Example
token Notifications Token used to authenticate certain requests header string true
origin Notifications Project (or BO) URL used to only let your project domain passes the CORS check header string true
project_id Your project id in Notifications query_string string true
unique_id The notification unique ID path string true

Responses

Status Description Schema
200 Notification Resource Valid_job
404 Error Resource Error

Get Project Notifications Logs

Get a notification

POST /api/v1/project/12779/notifications
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAADbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVvd25lcm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjc3OWptAAAABnN0YXR1c20AAAAIdmVyaWZpZWRtAAAAB3VzZXJfaWRtAAAACTEyM2FiYzEyM20AAAAGc3RhdHVzbQAAAAdzdWNjZXNzbgYANQY3XpkBYgABUYA.p3PbkArPA82DCNSGkfn5nAYdJ4SWaMDzbahT0B72eWs
project_id: https://test-origin.com
origin: https://test.com

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ12yjL_io5aMAAAhyj
{
  "total": 1,
  "notifications": [
    {
      "type": "email",
      "total_attempts": 0,
      "succeeded_on": null,
      "status": "available",
      "recipients": [
        [
          "[email protected]"
        ]
      ],
      "payload": {
        "text_body": "Hello World",
        "subject": "welcome email",
        "html_body": " Hello world!</h1>"
      },
      "next_retry_on": "2025-09-18T19:04:48.300935Z",
      "max_attempts": 20,
      "last_retry_on": null,
      "id": "LJM6OR",
      "errors": []
    }
  ],
  "count": 1
}

Gets a project's notifications logs, supports filtering and pagination.

Supported filters:

Supported paginations:

Request

POST /api/v1/project/{project_id}/notifications

Parameters

Parameter Description In Type Required Default Example
token Notifications Token used to authenticate certain requests header string true
origin Notifications Project (or BO) URL used to only let your project domain passes the CORS check header string true
project_id Your project id in Notifications query_string string true

Responses

Status Description Schema
200 Array of Notification Resource Valid_job
400 Error Resource Error

3. Packages and API limits

To ensure a faire usage from all users and provide a stable quality of service we have two layers of limitations, the first one is based on the resources your project can use, the bigger the package the more resources you are allowed to use (i.e number of pages, number of static sections types etc...). Once you reach a limit, any tentative to cross this limit will return an error with code 402. The only way for you to overcome this is to free up some resources or to upgrade your package.

Then we also are capping the number of requests you can issue on a project, here again the package you are on will define your cap. The bigger the package the more API requests you will be authorized to submit. If you reach your limit, any further requests will error with code 429. These limits gets reset per time cycle, you can either wait for the cycle to reset your limit or you can upgrade your package to overcome this limit.

Read below to retrieve your project package with the details of the limits applying to it

Gets the current package of the project

GET active package/

GET /api/v1/project/12719/active_package
origin: http://203463ab-ec58-4626-b888-f80507a52db8.com
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAACbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVvd25lcm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjcxOWptAAAAB3VzZXJfaWRtAAAACTEyM2FiYzEyM20AAAAGc3RhdHVzbQAAAAdzdWNjZXNzbgYAhOw2XpkBYgABUYA.hgnrvGh9We16AKvyPuLkdSUNcG4zLc9c0J_75ZBoaTo

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ12ZJ6vj0ocdgAAcGk
{
  "name": "free1",
  "limits": [
    {
      "value": 3,
      "name": "number_of_channels",
      "label": "Max number of channels"
    },
    {
      "value": 10,
      "name": "notification_per_day",
      "label": "Max number of notifications per day"
    },
    {
      "value": 100,
      "name": "notification_per_request",
      "label": "Maximum number of notifications included in one request."
    },
    {
      "value": 10000000,
      "name": "size_per_request",
      "label": "Maximum size of a request (in Bytes)"
    },
    {
      "value": 10,
      "name": "api_limit_sec",
      "label": "API rate limit per second"
    },
    {
      "value": 5,
      "name": "api_limit_minute",
      "label": "API rate limit per minute"
    },
    {
      "value": 5,
      "name": "api_limit_hour",
      "label": "API rate limit per minute"
    },
    {
      "value": 10,
      "name": "api_limit_day",
      "label": "API rate limit per day"
    }
  ],
  "label": "Free",
  "id": 1204
}

This call will return the package name and associated limits for your project

Request

GET /api/v1/project/{project_id}/active_package

Parameters

Parameter Description In Type Required Default Example
token Notifications Token used to authenticate certain requests header string true
project_id Your project id in Notifications query_string string true

Responses

Status Description Schema
200 Package Resource Package

Get available packages

Get available packages

GET /api/v1/project/12726/packages
origin: http://8a615bea-30e7-43c8-a43c-53a5bec55181.com
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAACbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVvd25lcm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjcyNmptAAAAB3VzZXJfaWRtAAAACTEyM2FiYzEyM20AAAAGc3RhdHVzbQAAAAdzdWNjZXNzbgYAD-82XpkBYgABUYA.ovGOZ4JOltY20dD51L3IHH5CiIcA3LIIf1Mg4xgzpuc

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ12blI8HuiJjEAAcHk
{
  "data": [
    {
      "name": "free",
      "limits": [
        {
          "value": 2,
          "name": "number_of_channels",
          "label": "Max number of channels"
        },
        {
          "value": 150,
          "name": "notification_per_day",
          "label": "Max number of notifications per day"
        },
        {
          "value": 100,
          "name": "notification_per_request",
          "label": "Max number of notifications per request"
        },
        {
          "value": 600000,
          "name": "size_per_request",
          "label": "Maximum size of a request (in Bytes)"
        },
        {
          "value": 10,
          "name": "api_limit_sec",
          "label": "API rate limit per second"
        },
        {
          "value": 100,
          "name": "api_limit_minute",
          "label": "API rate limit per minute"
        },
        {
          "value": -1,
          "name": "api_limit_hour",
          "label": "API rate limit per minute"
        },
        {
          "value": 500,
          "name": "api_limit_day",
          "label": "API rate limit per day"
        }
      ],
      "label": "Free",
      "id": 1
    },
    {
      "name": "standard",
      "limits": [
        {
          "value": 5,
          "name": "number_of_channels",
          "label": "Max number of channels"
        },
        {
          "value": 1000,
          "name": "notification_per_request",
          "label": "Max number of notifications per request"
        },
        {
          "value": 3000000,
          "name": "size_per_request",
          "label": "Maximum size of a request (in Bytes)"
        },
        {
          "value": 500,
          "name": "notification_per_day",
          "label": "Max number of notifications per day"
        },
        {
          "value": 100,
          "name": "api_limit_sec",
          "label": "API rate limit per second"
        },
        {
          "value": -1,
          "name": "api_limit_minute",
          "label": "API rate limit per second"
        },
        {
          "value": 400,
          "name": "api_limit_hour",
          "label": "API rate limit per hour"
        },
        {
          "value": 1500,
          "name": "api_limit_day",
          "label": "API rate limit per day"
        }
      ],
      "label": "Standard",
      "id": 2
    },
    {
      "name": "corporate",
      "limits": [
        {
          "value": 10,
          "name": "number_of_channels",
          "label": "Max number of channels"
        },
        {
          "value": 10000,
          "name": "notification_per_request",
          "label": "Max number of notifications per request"
        },
        {
          "value": 15000000,
          "name": "size_per_request",
          "label": "Maximum size of a request (in Bytes)"
        },
        {
          "value": 5000,
          "name": "notification_per_day",
          "label": "Max number of notifications per day"
        },
        {
          "value": 1000,
          "name": "api_limit_sec",
          "label": "API rate limit per second"
        },
        {
          "value": -1,
          "name": "api_limit_minute",
          "label": "API rate limit per second"
        },
        {
          "value": 4000,
          "name": "api_limit_hour",
          "label": "API rate limit per hour"
        },
        {
          "value": 150000,
          "name": "api_limit_day",
          "label": "API rate limit per day"
        }
      ],
      "label": "Corporate",
      "id": 3
    },
    {
      "name": "free1",
      "limits": [
        {
          "value": 3,
          "name": "number_of_channels",
          "label": "Max number of channels"
        },
        {
          "value": 10,
          "name": "notification_per_day",
          "label": "Max number of notifications per day"
        },
        {
          "value": 100,
          "name": "notification_per_request",
          "label": "Maximum number of notifications included in one request."
        },
        {
          "value": 10000000,
          "name": "size_per_request",
          "label": "Maximum size of a request (in Bytes)"
        },
        {
          "value": 10,
          "name": "api_limit_sec",
          "label": "API rate limit per second"
        },
        {
          "value": 5,
          "name": "api_limit_minute",
          "label": "API rate limit per minute"
        },
        {
          "value": 5,
          "name": "api_limit_hour",
          "label": "API rate limit per minute"
        },
        {
          "value": 10,
          "name": "api_limit_day",
          "label": "API rate limit per day"
        }
      ],
      "label": "Free",
      "id": 1209
    }
  ]
}

This call will return the available packages that your project can subscribe to.

Request

GET /api/v1/project/{project_id}/packages

Parameters

Parameter Description In Type Required Default Example
token Notifications Token used to authenticate certain requests header string true
project_id Your project id in Notifications query_string string true

Responses

Status Description Schema
200 Package Resource Package

4. Notifications Admins Section

This section will guide you to consume resources accessible by Notifications Admins only.

Get projects as Notifications Admin

Get api/v1/auth/projects paginated

POST /api/v1/auth/projects
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAACbQAAAAxyb2xlc19vYmplY3RsAAAAAXQAAAABbQAAAAV0aXRsZW0AAAALc3VwZXJfYWRtaW5qbQAAAAd1c2VyX2lkbQAAAAkxMjNhYmMxMjNtAAAABnN0YXR1c20AAAAHc3VjY2Vzc24GADsLN16ZAWIAAVGA.7bVrKCYSwGObQMKDlEE7O7Y9BAJRrINq7Pu9J-x7Av8
origin: https://test-origin.com
content-type: multipart/mixed; boundary=plug_conn_test
{
  "start": 1,
  "limit": 1
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ122crsE-WLJQAAfHh
{
  "total": 3,
  "data": [
    {
      "webhook_url": null,
      "webhook_tls_handshake": false,
      "type": "private",
      "title": null,
      "project_url": "http://b80f3782-5a0f-470d-a627-23b3778f35ac.com",
      "private_key": "$2b$12$uOsLbJVp3BXan7TQjjYXHejXL/n25ClLKr.c8zHJMpOcKVnpIHgkO",
      "package": "free",
      "last_request_user": null,
      "inserted_at": "2025-09-18T19:04:49",
      "id": 12793
    }
  ],
  "count": 1
}

This call allows you to retrieve a list of projects with filters and pagination.

The current supported filters are:

The current supported pagination are:

Request

POST /api/v1/auth/projects

Parameters

Parameter Description In Type Required Default Example
token Notifications Token used to authenticate certain requests header string true
origin Notifications Project (or BO) URL used to only let your project domain passes the CORS check header string true

Responses

Status Description Schema
200 Array of Project Resource Project
404 Error Resource Error

Get Notifications Admin Dashboard

Send Notifications

GET /api/v1/auth/dashboard
token: SFMyNTY.g2gDdAAAAAJtAAAABGRhdGF0AAAAAW0AAAAEdXNlcnQAAAADbQAAAA9zYWFzX3Byb2plY3RfaWRsAAAAAXQAAAACbQAAAARyb2xlbQAAAAVvd25lcm0AAAAPc2Fhc19wcm9qZWN0X2lkbQAAAAUxMjg4NWptAAAABnN0YXR1c20AAAAIdmVyaWZpZWRtAAAAB3VzZXJfaWRtAAAACTEyM2FiYzEyM20AAAAGc3RhdHVzbQAAAAdzdWNjZXNzbgYAFHw3XpkBYgABUYA.XEdbk1k67pHaoK8D8s2swelkCHmZoMHTT8SSLbYlpq4
origin: https://test.com

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: GGZ14pWKNKSx4w4AAflh
{
  "project_creation_monthly_info": {
    "2025-09-18": [
      {
        "package": "free",
        "count": 2
      },
      {
        "total": 2
      }
    ],
    "2025-09-17": 0,
    "2025-09-16": 0,
    "2025-09-15": 0,
    "2025-09-14": 0,
    "2025-09-13": 0,
    "2025-09-12": 0,
    "2025-09-11": 0,
    "2025-09-10": 0,
    "2025-09-09": 0,
    "2025-09-08": 0,
    "2025-09-07": 0,
    "2025-09-06": 0,
    "2025-09-05": 0,
    "2025-09-04": 0,
    "2025-09-03": 0,
    "2025-09-02": 0,
    "2025-09-01": 0,
    "2025-08-31": 0,
    "2025-08-30": 0,
    "2025-08-29": 0,
    "2025-08-28": 0,
    "2025-08-27": 0,
    "2025-08-26": 0,
    "2025-08-25": 0,
    "2025-08-24": 0,
    "2025-08-23": 0,
    "2025-08-22": 0,
    "2025-08-21": 0,
    "2025-08-20": 0,
    "2025-08-19": 0
  },
  "number_of_queues": 8,
  "notifications_monthly_info": [
    {
      "total": 1,
      "per_queue": [
        {
          "total": 1,
          "queue": "email"
        }
      ],
      "date": "2025-09-18"
    }
  ],
  "maximum_in_parallel": 800,
  "current_queue": 0
}

This call allows you to retrieve the dashboard for a Notifications admin, for the response description, kindly check Admin_Dashboard model

Request

GET /api/v1/auth/dashboard

Parameters

Parameter Description In Type Required Default Example
token Notifications Token used to authenticate certain requests header string true
origin Notifications Project (or BO) URL used to only let your project domain passes the CORS check header string true

Responses

Status Description Schema
200 Admin Dashboard Resource Admin_Dashboard
401 Error Resource Error