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.
Notifications send your notifications in parallel and it delivers them as fast as possible.
Notifications offers you the possiblity to have control over the content as it supports templating so you can provide dynamic content.
Notifications offers you the ability to track your notifications with detailed feedback over each one.
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:
APNSEmailsand their relays:mailgun.FCMMattermostPushfor browser push notificationsSMSWebhooks
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 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:
400: It usually means that the user did not send the expected params or the params sent have invalid format.
401: It means you are attempting an unauthorized request error. In this case make sure that the token you are using has not expired.
429: It means that you are exceeding your API rate limiting. Either wait till you have available resource again or simply upgrade your package to gain more.
413: It means that you are exceeding your pacakge limitations. Either remove unwanted resources to make room for new ones or simply upgrade your package.
509: It means that you are exceeding your API size limitations. Either decrease your payload to make your request pass or simply upgrade your package.
{
"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:// |
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 |
|---|---|---|---|
| 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: ' |
|
| 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: ' |
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 |
|---|---|---|---|---|---|---|
| The email in question. | body | string | true | ' |
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 |
|---|---|---|---|---|---|---|
| The email in question. | body | string | true | ' |
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.
First, declare your templates. Templates is an array of objects at the root of the payload and each object should include a unique templateId and templateContent. The template content will have token that will be replaced by the values assigned to each notification. Make sure to put the tokens between double brackets ex:
{{name}}.second, in the notification object make sure to add a template object. This object will contain:
- templateId to reference the right tempalte in the root templates array.
- tokens: an object that has the key as the token and the value with the value that should be replaced with. ex: {"name": "Obama"}
Check our example below to understand how it works.
Templating is optional if you need to send static content just have to remove the templates array (root element) and template object (from the notification itself).
When using a template for emails, the templating will replace the
html_bodyfield of your content. To save on bandwidth you can remove that field from your request payload.
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:
Configure a webhook channel. (refer to update project channels call here )
When issuing a webhook, the request will be sent with the
"content-type": "application/json"header by default. If you need to redefine this header, or add other headers you can supply theheaderskey inside thechannelsobject. Because this override headers sent, make sure to re-include thecontent-typeheader in yourheaders` object.When using this check the body on the right
Mattermost
Notifications now supports sending Mattermost messages too,
in order to send a Mattermost message proceed with the following:
Configure a
mattermostchannel. (refer to update project channels call here )When sending a Mattermost message, the expected payload has the format shown on the right.
{
"channels": [
{
"type": "mattermost",
"config": {"server": "mattermost_1", "channel": "destination_channel"},
"content": {"text": "Hello, Town Square"}
}
]
}
Notes:
If no channel specified we will fallback to the default mattermost channel inside the specified server requested.
If no configuration specified we will fallback to the backup channels configured.
The channel names should be lower case and spaces must replaces with
-.
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:
Configure a
APNSchannel. (refer to update project channels call here )When sending a APNS notification, the expected payload has the format shown on the right. For the content, passing a string will default to no title however passing a json with title and body will send a notification with a title and a body
Notes:
- The channel names should be lower case and spaces must be replaced with
-.
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:
Configure a
FCMchannel. (refer to update project channels call here )When sending a FCM notification, the expected payload has the format shown on the right. For the content, passing a string will default to no title however passing a json with title and body will send a notification with a title and a body
Notes:
- The channel names should be lower case and spaces must be replaced with
-.
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:
Configure an
SMSprovider. (refer to update project channels call here )When sending an
SMS, the expected payload has the format shown on the right.
Notes:
- If no configuration specified we will fallback to the backup channels configured on the project.
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:
Configure a
Pushchannel. (refer to update project channels call here)When sending a Push notification, the expected payload has the format shown on the right. For the content, you can pass any data you want as long as it is a map, the data will be then relayed to the specific user and your app processes it. In case no title or logo are specified in your content, the values will fallback to the defaults specified in the given configuration name.
Notes:
- iOS devices do not support Web Push Notifications.
- Safari does not support this method of Web Push notifications. (VAPID)
- The requests must be done on HTTPS.
- Incognito mode blocks all web push notifications for security reasons.
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:
Configure a
Telegramchannel. (refer to update project channels call here)When sending a telegram message, the expected
payloadis the one received by the Telegram Bot APIsendMessageendpoint.
Notes:
- If no bot config name is provided Notifications will fallback to your Telegram backup channel configuration if available.
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:
State - string - supported: discarded, completed, retryable, available
Type - string - supported: email - sms - webhook - push - apns - fcm - mattermost
Destination - string - recipient that is receiving the notification.
Supported paginations:
limit
start
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:
last_request_latest_time - timestamp - Last Request Maximum timestamp
last_request_earliest_time - timestamp - Last Request Minimum timestamp
last_request_user_full_name - string - Name of the user that did the last request
last_Request_user_email - string - Email of the user that did the last request
package - string - Project Active Package Name
id - integer - project id
project_url - string - project_url of the project
The current supported pagination are:
start - integer - offset the result..
limit - integer - limit the result to a maximum.
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 |