Overview
Inform facilitates a unified messaging infrastructure across multiple channels with a single API for building and managing transactional alerts.
Transactional Alerts can be sent in the following scenarios:
- Order/Booking/Purchase confirmations
- Shipping/Delivery confirmations and updates
- Security and account alerts
- Password resets
- OTP (one-time password)
- User invitations and shares
- User inaction related to previous transactions
- Fraud prevention/security alerts
The Inform API sends notifications to all the channels simultaneously for a specified Live Alert. You can use the Inform API to do the following:
- Send a transactional message on a single channel like SMS or Email or Push
- Send transactional messages on multiple channels
Glossary
We’ve put together a list of terminology that you will encounter when using the Inform Service API.
Alert ID
This is the unique identifier for an Alert. This field will be used to identify the Alert configured in the MoEngage Dashboard that contains the template for the notifications to be sent to the user.
Test Alert ID
When creating an Alert, you can test it on an external console and MoEngage provides a unique identifier called Test Alert ID for this purpose.
Live and Test Alerts
Live Alerts | Test Alerts |
---|---|
The unique Identifier for a published Alert is called the Alert ID. |
The unique identifier for a test Alert is called the Test Alert ID. |
The Alert Logs are available in the Alert Info Section. |
The Test Alert Logs are available in the third step of Alert creation. |
API Endpoint
For Live Alerts
POST https://inform-api-0X.moengage.com/v1/send
For Test Alerts
POST https://sandbox-inform-api-0X.moengage.com/v1/send
The 'X' in the API Endpoint URL refers to the MoEngage Data Center (DC). MoEngage hosts each customer in a different DC. You can find your DC number (value of X) and replace the value of 'X' in the URL by referring to the DC and API endpoint mapping here.
Authentication
All Inform requests will be authenticated through Basic Authentication. Do the following to generate the Basic Authentication header:
- Navigate to Settings > APIs > INFORM Settings
- Copy the APP ID and API SECRET
- Generate the Authentication string using base64 concatenation of APP ID and API SECRET
Basic Authentication encodes a 'username:password' using base64 and prepends it with the string 'Basic '. Do the following to generate the Auth header:
- Add a colon after the user name (APP key) and concatenate it with the password (API SECRET).
- Encode the concatenated string using base64 encoding.
- Pass the encoded string in the HTTP authorization header as follows: {"Authorization":" Basic bmF2ZWVua3VtYXI6bW9lbmdhZ2U=="}
Regenerate API SECRET
The API SECRET can be regenerated on the MoEngage Dashboard in the INFORM API Settings section discussed above.
Please DO NOT regenerate the key unless there is a security breach. Once you generate a different API SECRET KEY and save it, API calls using the older SECRET KEY won't work.
Request Headers
Key | Sample Values | Description |
---|---|---|
MOE-APPKEY |
{"MOE-APPKEY": "APP ID"} |
This is the APP ID of your MoEngage account and needs to be passed along with the request. You can find your MoEngage APP ID in the MoEngage Dashboard API Settings. Navigation: Settings -> API -> General Settings -> Inform section. For more information, refer to Authentication. |
Authorization |
{"Authorization": "Basic bmF2ZWVua3VtYXI6bW9lbmdhZ2U=="} |
This is the authentication parameter for access control and needs to be passed along with the request. The APPKEY and API SECRET need to be picked up from the Inform API Settings in MoEngage Dashboard and a Basic Authorization header needs to be created and set in the header. For more information, refer to Authentication. |
Content-Type |
application/JSON |
Set the Content-Type header to application/JSON for using the Inform API. |
Request Body
Key | Type | Value | Description |
---|---|---|---|
alert_id |
Mandatory |
String |
This field uniquely identifies the Alert to be sent to the user. For the staging endpoint, use the test alert id and for the live endpoint, use the alert id. For more information, refer to Live and Test Alerts. |
user_id |
Optional |
String |
This is the unique user identifier information maintained by you. This information should be passed in the request to facilitate the mapping of the channel events back to the user profile to which this user_id is associated in MoEngage. MoEngage stores this unique identifier as the Client ID in the user profile. |
transaction_id |
Mandatory |
String |
This is the unique identifier denoting the transaction for which the Alert is being sent to the user. This information is maintained by the brand and is passed in the request. The maximum length allowed for this field is 50 characters. The Inform API supports idempotency using this parameter. If a request contains a transaction_id and is successful and another request with the same transaction id is received within 5 minutes of the successful request, the new request would be deemed a duplicate one. |
payloads |
Mandatory |
JSON Object |
[payloadobject, payloadobject..] Payload object - <medium>: { “recipient”:<recipient value>, “peronsalized_attributes”:<json object of personalized key-value parameters> } ] The payload contains the following channel-level information for all the configured channels:
Note:
|
Sample Requests for a Live Alert Without Personalization
Case 1: One channel is configured for the Alert
Only SMS Channel
curl --location --request POST 'https://inform-api-0X.moengage.com/v1/send' \
--header 'MOE-APPKEY: YOUR_APP_KEY_HERE' \
--header 'Authorization: Basic Base64_ENCODED_APPKEY_APIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"SMS": {
"recipient": "123456789"
}
}
}'
import fetch from 'node-fetch';
fetch('https://inform-api-0X.moengage.com/v1/send', {
method: 'POST',
headers: {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type': 'application/json'
},
//body: "{\n \"alert_id\": \"636b77e6e2cf83277195fb60\",\n \"user_id\": \"USER_ID\",\n \"transaction_id\": \"YOUR_TRANSACTION_ID_VAL_HERE\",\n \"payloads\": {\n \"SMS\": {\n \"recipient\": \"123456789\"\n }\n }\n}",
body: JSON.stringify({
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"SMS": {
"recipient": "123456789"
}
}
})
});
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"SMS": {
"recipient": "123456789"
}
}
}`)
req, err := http.NewRequest("POST", "https://inform-api-0X.moengage.com/v1/send", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("MOE-APPKEY", "YOUR_APP_KEY_HERE")
req.Header.Set("Authorization", "Basic Base64_ENCODED_APPKEY_APIKEY")
req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s
", bodyText)
}
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://inform-api-0X.moengage.com/v1/send');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'MOE-APPKEY' =-> 'YOUR_APP_KEY_HERE',
'Authorization' => 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type' => 'application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"alert_id":"636b77e6e2cf83277195fb60","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"SMS":{"recipient":"123456789"}}}');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import requests
headers = {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
# Already added when you pass json= but not when you pass data=
# 'Content-Type': 'application/json',
}
json_data = {
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"SMS": {
"recipient": "123456789"
}
}
}
response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, json=json_data)
# Note: json_data will not be serialized by requests
# exactly as it was in the original request.
#data = '{"alert_id":"636b77e6e2cf83277195fb60","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"SMS":{"recipient":"123456789"}}}'
#response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, data=data)
require 'net/http'
require 'json'
uri = URI('https://inform-api-0X.moengage.com/v1/send')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/json'
req['MOE-APPKEY'] = 'YOUR_APP_KEY_HERE'
req['Authorization'] = 'Basic Base64_ENCODED_APPKEY_APIKEY'
# The object won't be serialized exactly like this
# req.body = "{"alert_id":"636b77e6e2cf83277195fb60","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"SMS":{"recipient":"123456789"}}}"
req.body = {
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"SMS": {
"recipient": "123456789"
}
}
}.to_json
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://inform-api-0X.moengage.com/v1/send");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod(“POST”);
httpConn.setRequestProperty(“MOE-APPKEY”, “YOUR_APP_KEY_HERE”);
httpConn.setRequestProperty(“Authorization”, “Basic Base64_ENCODED_APPKEY_APIKEY”);
httpConn.setRequestProperty(“Content-Type”, “application/json”);
httpConn.setDoOutput(true);
String payload = "{
\"alert_id\": \"636bc615e2cf83285495055f\",
\"user_id\": \"USER_ID\",
\"transaction_id\": \"YOUR_TRANSACTION_ID_VAL_HERE\",
\"payloads\": {
\"SMS\": {
\"recipient\": \"123456789\"
}
}
}";
httpConn.setDoOutput(true);
OutputStream os = httpConn.getOutputStream();
os.write(payload.getBytes());
os.flush();
InputStream responseStream = httpConn.getResponseCode() == HttpURLConnection.HTTP_OK
? httpConn.getInputStream()
: httpConn.getErrorStream();
BufferedReader br = new BufferedReader(new InputStreamReader(
(responseStream)));
String output;
while ((output = br.readLine()) != null) {
System.out.println(output);
}
httpConn.disconnect();
}
}
Only Email Channel
curl --location --request POST 'https://inform-api-0X.moengage.com/v1/send' \
--header 'MOE-APPKEY: YOUR_APP_KEY_HERE' \
--header 'Authorization: Basic Base64_ENCODED_APPKEY_APIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"EMAIL": {
"recipient": "john.doe@moengage.com"
}
}
}'
import fetch from 'node-fetch';
fetch('https://inform-api-0X.moengage.com/v1/send', {
method: 'POST',
headers: {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type': 'application/json'
},
// body: "{\n \"alert_id\": \"636b77e6e2cf83277195fb60\",\n \"user_id\": \"USER_ID\",\n \"transaction_id\": \"YOUR_TRANSACTION_ID_VAL_HERE\",\n \"payloads\": {\n \"EMAIL\": {\n \"recipient\": \"john.doe@moengage.com\"\n }\n }\n}",
body: JSON.stringify({
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"EMAIL": {
"recipient": "john.doe@moengage.com"
}
}
})
});
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"EMAIL": {
"recipient": "john.doe@moengage.com"
}
}
}`)
req, err := http.NewRequest("POST", "https://inform-api-0X.moengage.com/v1/send", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("MOE-APPKEY", "YOUR_APP_KEY_HERE")
req.Header.Set("Authorization", "Basic Base64_ENCODED_APPKEY_APIKEY")
req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s
", bodyText)
}
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://inform-api-0X.moengage.com/v1/send');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'MOE-APPKEY' => 'YOUR_APP_KEY_HERE',
'Authorization' => 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type' => 'application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"alert_id":"636b77e6e2cf83277195fb60","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"EMAIL":{"recipient":"john.doe@moengage.com"}}}');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import requests
headers = {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
# Already added when you pass json= but not when you pass data=
# 'Content-Type': 'application/json',
}
json_data = {
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"EMAIL": {
"recipient": "john.doe@moengage.com"
}
}
}
response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, json=json_data)
# Note: json_data will not be serialized by requests
# exactly as it was in the original request.
#data = '{"alert_id":"636b77e6e2cf83277195fb60","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"EMAIL":{"recipient":"john.doe@moengage.com"}}}'
#response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, data=data)
require 'net/http'
require 'json'
uri = URI('https://inform-api-0X.moengage.com/v1/send')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/json'
req['MOE-APPKEY'] = 'YOUR_APP_KEY_HERE'
req['Authorization'] = 'Basic Base64_ENCODED_APPKEY_APIKEY'
# The object won't be serialized exactly like this
# req.body = "{"alert_id":"636b77e6e2cf83277195fb60","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"EMAIL":{"recipient":"john.doe@moengage.com"}}}"
req.body = {
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"EMAIL": {
"recipient": "john.doe@moengage.com"
}
}
}.to_json
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://i-inform-api-00.moengage.com/v1/send");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod(“POST”);
httpConn.setRequestProperty(“MOE-APPKEY”, “YOUR_APP_KEY_HERE”);
httpConn.setRequestProperty(“Authorization”, “Basic Base64_ENCODED_APPKEY_APIKEY”);
httpConn.setRequestProperty(“Content-Type”, “application/json”);
httpConn.setDoOutput(true);
String payload = "{
\"alert_id\": \"636bc615e2cf83285495055f\",
\"user_id\": \"USER_ID\",
\"transaction_id\": \"YOUR_TRANSACTION_ID_VAL_HERE\",
\"payloads\": {
\"EMAIL\": {
\"recipient\": \"john.doe@moengage.com\"
}
}
}";
httpConn.setDoOutput(true);
OutputStream os = httpConn.getOutputStream();
os.write(payload.getBytes());
os.flush();
InputStream responseStream = httpConn.getResponseCode() == HttpURLConnection.HTTP_OK
? httpConn.getInputStream()
: httpConn.getErrorStream();
BufferedReader br = new BufferedReader(new InputStreamReader(
(responseStream)));
String output;
while ((output = br.readLine()) != null) {
System.out.println(output);
}
httpConn.disconnect();
}
}
Only Push Channel
curl --location --request POST 'https://inform-api-0X.moengage.com/v1/send' \
--header 'MOE-APPKEY: YOUR_APP_KEY_HERE' \
--header 'Authorization: Basic Base64_ENCODED_APPKEY_APIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>"
}
}
}'
import fetch from 'node-fetch';
fetch('https://inform-api-0X.moengage.com/v1/send', {
method: 'POST',
headers: {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type': 'application/json'
},
//body: "{\n \"alert_id\": \"636b77e6e2cf83277195fb60\",\n \"user_id\": \"USER_ID\",\n \"transaction_id\": \"YOUR_TRANSACTION_ID_VAL_HERE\",\n \"payloads\": {\n \"PUSH\": {\n \"recipient\": \"<push-token>\"\n }\n }\n}",
body: JSON.stringify({
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>"
}
}
})
});
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>"
}
}
}`)
req, err := http.NewRequest("POST", "https://inform-api-0X.moengage.com/v1/send", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("MOE-APPKEY", "YOUR_APP_KEY_HERE")
req.Header.Set("Authorization", "Basic Base64_ENCODED_APPKEY_APIKEY")
req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s
", bodyText)
}
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://inform-api-0X.moengage.com/v1/send');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'MOE-APPKEY' =-> 'YOUR_APP_KEY_HERE',
'Authorization' => 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type' => 'application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"alert_id":"636b77e6e2cf83277195fb60","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"PUSH":{"recipient":"<push-token>"}}}');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import requests
headers = {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
# Already added when you pass json= but not when you pass data=
# 'Content-Type': 'application/json',
}
json_data = {
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>"
}
}
}
response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, json=json_data)
# Note: json_data will not be serialized by requests
# exactly as it was in the original request.
#data = '{"alert_id":"636b77e6e2cf83277195fb60","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"PUSH":{"recipient":"<push-token>"}}}'
#response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, data=data)
require 'net/http'
require 'json'
uri = URI('https://inform-api-0X.moengage.com/v1/send')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/json'
req['MOE-APPKEY'] = 'YOUR_APP_KEY_HERE'
req['Authorization'] = 'Basic Base64_ENCODED_APPKEY_APIKEY'
# The object won't be serialized exactly like this
# req.body = "{"alert_id":"636b77e6e2cf83277195fb60","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"PUSH":{"recipient":"<push-token>"}}}"
req.body = {
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>"
}
}
}.to_json
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://inform-api-0X.moengage.com/v1/send");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod(“POST”);
httpConn.setRequestProperty(“MOE-APPKEY”, “YOUR_APP_KEY_HERE”);
httpConn.setRequestProperty(“Authorization”, “Basic Base64_ENCODED_APPKEY_APIKEY”);
httpConn.setRequestProperty(“Content-Type”, “application/json”);
httpConn.setDoOutput(true);
String payload = "{
\"alert_id\": \"636bc615e2cf83285495055f\",
\"user_id\": \"USER_ID\",
\"transaction_id\": \"YOUR_TRANSACTION_ID_VAL_HERE\",
\"payloads\": {
\"PUSH\": {
\"recipient\": \"<push-token>\"
}
}
}";
httpConn.setDoOutput(true);
OutputStream os = httpConn.getOutputStream();
os.write(payload.getBytes());
os.flush();
InputStream responseStream = httpConn.getResponseCode() == HttpURLConnection.HTTP_OK
? httpConn.getInputStream()
: httpConn.getErrorStream();
BufferedReader br = new BufferedReader(new InputStreamReader(
(responseStream)));
String output;
while ((output = br.readLine()) != null) {
System.out.println(output);
}
httpConn.disconnect();
}
}
Case 2: Multiple channels are configured for the Alert
curl --location --request POST 'https://inform-api-0X.moengage.com/v1/send' \
--header 'MOE-APPKEY: YOUR_APP_KEY_HERE' \
--header 'Authorization: Basic Base64_ENCODED_APPKEY_APIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>"
},
"EMAIL": {
"recipient": "john.doe@moengage.com"
}
}
}'
import fetch from 'node-fetch';
fetch('https://inform-api-0X.moengage.com/v1/send', {
method: 'POST',
headers: {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type': 'application/json'
},
// body: "{\n \"alert_id\": \"636b77e6e2cf83277195fb60\",\n \"user_id\": \"USER_ID\",\n \"transaction_id\": \"YOUR_TRANSACTION_ID_VAL_HERE\",\n \"payloads\": {\n \"PUSH\": {\n \"recipient\": \"<push-token>\"\n },\n \"EMAIL\": {\n \"recipient\": \"john.doe@moengage.com\"\n }\n }\n}",
body: JSON.stringify({
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>"
},
"EMAIL": {
"recipient": "john.doe@moengage.com"
}
}
})
});
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>"
},
"EMAIL": {
"recipient": "john.doe@moengage.com"
}
}
}`)
req, err := http.NewRequest("POST", "https://inform-api-0X.moengage.com/v1/send", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("MOE-APPKEY", "YOUR_APP_KEY_HERE")
req.Header.Set("Authorization", "Basic Base64_ENCODED_APPKEY_APIKEY")
req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s
", bodyText)
}
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://inform-api-0X.moengage.com/v1/send');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'MOE-APPKEY' => 'YOUR_APP_KEY_HERE',
'Authorization' => 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type' => 'application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"alert_id":"636b77e6e2cf83277195fb60","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"PUSH":{"recipient":"<push-token>"},"EMAIL":{"recipient":"john.doe@moengage.com"}}}');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import requests
headers = {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
# Already added when you pass json= but not when you pass data=
# 'Content-Type': 'application/json',
}
json_data = {
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>"
},
"EMAIL": {
"recipient": "john.doe@moengage.com"
}
}
}
response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, json=json_data)
# Note: json_data will not be serialized by requests
# exactly as it was in the original request.
#data = '{"alert_id":"636b77e6e2cf83277195fb60","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"PUSH":{"recipient":"<push-token>"},"EMAIL":{"recipient":"john.doe@moengage.com"}}}'
#response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, data=data)
require 'net/http'
require 'json'
uri = URI('https://inform-api-0X.moengage.com/v1/send')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/json'
req['MOE-APPKEY'] = 'YOUR_APP_KEY_HERE'
req['Authorization'] = 'Basic Base64_ENCODED_APPKEY_APIKEY'
# The object won't be serialized exactly like this
# req.body = "{"alert_id":"636b77e6e2cf83277195fb60","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"PUSH":{"recipient":"<push-token>"},"EMAIL":{"recipient":"john.doe@moengage.com"}}}"
req.body = {
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>"
},
"EMAIL": {
"recipient": "john.doe@moengage.com"
}
}
}.to_json
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://inform-api-0X.moengage.com/v1/send");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod(“POST”);
httpConn.setRequestProperty(“MOE-APPKEY”, “YOUR_APP_KEY_HERE”);
httpConn.setRequestProperty(“Authorization”, “Basic Base64_ENCODED_APPKEY_APIKEY”);
httpConn.setRequestProperty(“Content-Type”, “application/json”);
httpConn.setDoOutput(true);
String payload = "{
\"alert_id\": \"636bc615e2cf83285495055f\",
\"user_id\": \"USER_ID\",
\"transaction_id\": \"YOUR_TRANSACTION_ID_VAL_HERE\",
\"payloads\": {
\"PUSH\": {
\"recipient\": \"<push-token>\"
},
\"EMAIL\": {
\"recipient\": \"john.doe@moengage.com\"
}
}
}";
httpConn.setDoOutput(true);
OutputStream os = httpConn.getOutputStream();
os.write(payload.getBytes());
os.flush();
InputStream responseStream = httpConn.getResponseCode() == HttpURLConnection.HTTP_OK
? httpConn.getInputStream()
: httpConn.getErrorStream();
BufferedReader br = new BufferedReader(new InputStreamReader(
(responseStream)));
String output;
while ((output = br.readLine()) != null) {
System.out.println(output);
}
httpConn.disconnect();
}
}
Sample Request for a Live Alert with Personalization
Case 1: One channel is configured for the Alert
Only SMS Channel
curl --location --request POST 'https://inform-api-0X.moengage.com/v1/send' \
--header 'MOE-APPKEY: YOUR_APP_KEY_HERE' \
--header 'Authorization: Basic Base64_ENCODED_APPKEY_APIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"SMS": {
"recipient": "123456789",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}'
import fetch from 'node-fetch';
fetch('https://inform-api-0X.moengage.com/v1/send', {
method: 'POST',
headers: {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type': 'application/json'
},
// body: "{\n \"alert_id\": \"636b9d5de2cf8328549503b9\",\n \"user_id\": \"USER_ID\",\n \"transaction_id\": \"YOUR_TRANSACTION_ID_VAL_HERE\",\n \"payloads\": {\n \"SMS\": {\n \"recipient\": \"123456789\",\n \"personalized_attributes\": {\n \"firstname\": \"YOUR_firstname_ATTRIBUTE_VAL_HERE\",\n \"orderid\": \"YOUR_orderid_ATTRIBUTE_VAL_HERE\",\n \"deliverydate\": \"YOUR_deliverydate_ATTRIBUTE_VAL_HERE\",\n \"deliveryslot_starttime\": \"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE\",\n \"deliveryslot_endtime\": \"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE\"\n }\n }\n }\n}",
body: JSON.stringify({
"alert_id": "636b9d5de2cf8328549503b9",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"SMS": {
"recipient": "123456789",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
})
});
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"alert_id": "636b9d5de2cf8328549503b9",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"SMS": {
"recipient": "123456789",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}`)
req, err := http.NewRequest("POST", "https://inform-api-0X.moengage.com/v1/send", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("MOE-APPKEY", "YOUR_APP_KEY_HERE")
req.Header.Set("Authorization", "Basic Base64_ENCODED_APPKEY_APIKEY")
req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s
", bodyText)
}
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://inform-api-0X.moengage.com/v1/send');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'MOE-APPKEY' => 'YOUR_APP_KEY_HERE',
'Authorization' => 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type' => 'application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"alert_id":"636b9d5de2cf8328549503b9","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"SMS":{"recipient":"123456789","personalized_attributes":{"firstname":"YOUR_firstname_ATTRIBUTE_VAL_HERE","orderid":"YOUR_orderid_ATTRIBUTE_VAL_HERE","deliverydate":"YOUR_deliverydate_ATTRIBUTE_VAL_HERE","deliveryslot_starttime":"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE","deliveryslot_endtime":"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"}}}}');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import requests
headers = {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
# Already added when you pass json= but not when you pass data=
# 'Content-Type': 'application/json',
}
json_data = {
"alert_id": "636b9d5de2cf8328549503b9",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"SMS": {
"recipient": "123456789",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}
response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, json=json_data)
# Note: json_data will not be serialized by requests
# exactly as it was in the original request.
#data = '{"alert_id":"636b9d5de2cf8328549503b9","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"SMS":{"recipient":"123456789","personalized_attributes":{"firstname":"YOUR_firstname_ATTRIBUTE_VAL_HERE","orderid":"YOUR_orderid_ATTRIBUTE_VAL_HERE","deliverydate":"YOUR_deliverydate_ATTRIBUTE_VAL_HERE","deliveryslot_starttime":"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE","deliveryslot_endtime":"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"}}}}'
#response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, data=data)
require 'net/http'
require 'json'
uri = URI('https://inform-api-0X.moengage.com/v1/send')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/json'
req['MOE-APPKEY'] = 'YOUR_APP_KEY_HERE'
req['Authorization'] = 'Basic Base64_ENCODED_APPKEY_APIKEY'
# The object won't be serialized exactly like this
# req.body = "{"alert_id":"636b9d5de2cf8328549503b9","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"SMS":{"recipient":"123456789","personalized_attributes":{"firstname":"YOUR_firstname_ATTRIBUTE_VAL_HERE","orderid":"YOUR_orderid_ATTRIBUTE_VAL_HERE","deliverydate":"YOUR_deliverydate_ATTRIBUTE_VAL_HERE","deliveryslot_starttime":"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE","deliveryslot_endtime":"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"}}}}"
req.body = {
"alert_id": "636b9d5de2cf8328549503b9",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"SMS": {
"recipient": "123456789",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}.to_json
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://inform-api-0X.moengage.com/v1/send");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod(“POST”);
httpConn.setRequestProperty(“MOE-APPKEY”, “YOUR_APP_KEY_HERE”);
httpConn.setRequestProperty(“Authorization”, “Basic Base64_ENCODED_APPKEY_APIKEY”);
httpConn.setRequestProperty(“Content-Type”, “application/json”);
httpConn.setDoOutput(true);
String payload = "{
\"alert_id\": \"636bc615e2cf83285495055f\",
\"user_id\": \"USER_ID\",
\"transaction_id\": \"YOUR_TRANSACTION_ID_VAL_HERE\",
\"payloads\": {
\"SMS\": {
\"recipient\": \"123456789\",
\"personalized_attributes\": {
\"firstname\": \"YOUR_firstname_ATTRIBUTE_VAL_HERE\",
\"userid\": \"YOUR_userid_ATTRIBUTE_VAL_HERE\",
\"deliverydate\": \"YOUR_deliverydate_ATTRIBUTE_VAL_HERE\",
\"deliveryslot_starttime\": \"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE\"
}
}
}
}";
httpConn.setDoOutput(true);
OutputStream os = httpConn.getOutputStream();
os.write(payload.getBytes());
os.flush();
InputStream responseStream = httpConn.getResponseCode() == HttpURLConnection.HTTP_OK
? httpConn.getInputStream()
: httpConn.getErrorStream();
BufferedReader br = new BufferedReader(new InputStreamReader(
(responseStream)));
String output;
while ((output = br.readLine()) != null) {
System.out.println(output);
}
httpConn.disconnect();
}
}
Only Email Channel
curl --location --request POST 'https://inform-api-0X.moengage.com/v1/send' \
--header 'MOE-APPKEY: YOUR_APP_KEY_HERE' \
--header 'Authorization: Basic Base64_ENCODED_APPKEY_APIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"alert_id": "636b9d5de2cf8328549503b9",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"EMAIL": {
"recipient": "john.doe@moengage.com",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}'
import fetch from 'node-fetch';
fetch('https://inform-api-0X.moengage.com/v1/send', {
method: 'POST',
headers: {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type': 'application/json'
},
// body: "{\n \"alert_id\": \"636b9d5de2cf8328549503b9\",\n \"user_id\": \"USER_ID\",\n \"transaction_id\": \"YOUR_TRANSACTION_ID_VAL_HERE\",\n \"payloads\": {\n \"EMAIL\": {\n \"recipient\": \"john.doe@moengage.com\",\n \"personalized_attributes\": {\n \"firstname\": \"YOUR_firstname_ATTRIBUTE_VAL_HERE\",\n \"orderid\": \"YOUR_orderid_ATTRIBUTE_VAL_HERE\",\n \"deliverydate\": \"YOUR_deliverydate_ATTRIBUTE_VAL_HERE\",\n \"deliveryslot_starttime\": \"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE\",\n \"deliveryslot_endtime\": \"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE\"\n }\n }\n }\n}",
body: JSON.stringify({
"alert_id": "636b9d5de2cf8328549503b9",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"EMAIL": {
"recipient": "john.doe@moengage.com",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
})
});
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"alert_id": "636b9d5de2cf8328549503b9",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"EMAIL": {
"recipient": "john.doe@moengage.com",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}`)
req, err := http.NewRequest("POST", "https://inform-api-0X.moengage.com/v1/send", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("MOE-APPKEY", "YOUR_APP_KEY_HERE")
req.Header.Set("Authorization", "Basic Base64_ENCODED_APPKEY_APIKEY")
req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s
", bodyText)
}
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://inform-api-0X.moengage.com/v1/send');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'MOE-APPKEY' => 'YOUR_APP_KEY_HERE',
'Authorization' => 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type' => 'application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"alert_id":"636b9d5de2cf8328549503b9","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"EMAIL":{"recipient":"john.doe@moengage.com","personalized_attributes":{"firstname":"YOUR_firstname_ATTRIBUTE_VAL_HERE","orderid":"YOUR_orderid_ATTRIBUTE_VAL_HERE","deliverydate":"YOUR_deliverydate_ATTRIBUTE_VAL_HERE","deliveryslot_starttime":"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE","deliveryslot_endtime":"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"}}}}');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import requests
headers = {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
# Already added when you pass json= but not when you pass data=
# 'Content-Type': 'application/json',
}
json_data = {
"alert_id": "636b9d5de2cf8328549503b9",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"EMAIL": {
"recipient": "john.doe@moengage.com",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}
response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, json=json_data)
# Note: json_data will not be serialized by requests
# exactly as it was in the original request.
#data = '{"alert_id":"636b9d5de2cf8328549503b9","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"EMAIL":{"recipient":"john.doe@moengage.com","personalized_attributes":{"firstname":"YOUR_firstname_ATTRIBUTE_VAL_HERE","orderid":"YOUR_orderid_ATTRIBUTE_VAL_HERE","deliverydate":"YOUR_deliverydate_ATTRIBUTE_VAL_HERE","deliveryslot_starttime":"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE","deliveryslot_endtime":"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"}}}}'
#response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, data=data)
require 'net/http'
require 'json'
uri = URI('https://inform-api-0X.moengage.com/v1/send')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/json'
req['MOE-APPKEY'] = 'YOUR_APP_KEY_HERE'
req['Authorization'] = 'Basic Base64_ENCODED_APPKEY_APIKEY'
# The object won't be serialized exactly like this
# req.body = "{"alert_id":"636b9d5de2cf8328549503b9","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"EMAIL":{"recipient":"john.doe@moengage.com","personalized_attributes":{"firstname":"YOUR_firstname_ATTRIBUTE_VAL_HERE","orderid":"YOUR_orderid_ATTRIBUTE_VAL_HERE","deliverydate":"YOUR_deliverydate_ATTRIBUTE_VAL_HERE","deliveryslot_starttime":"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE","deliveryslot_endtime":"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"}}}}"
req.body = {
"alert_id": "636b9d5de2cf8328549503b9",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"EMAIL": {
"recipient": "john.doe@moengage.com",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}.to_json
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://inform-api-0X.moengage.com/v1/send");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod(“POST”);
httpConn.setRequestProperty(“MOE-APPKEY”, “YOUR_APP_KEY_HERE”);
httpConn.setRequestProperty(“Authorization”, “Basic Base64_ENCODED_APPKEY_APIKEY”);
httpConn.setRequestProperty(“Content-Type”, “application/json”);
httpConn.setDoOutput(true);
String payload = "{
\"alert_id\": \"636bc615e2cf83285495055f\",
\"user_id\": \"USER_ID\",
\"transaction_id\": \"YOUR_TRANSACTION_ID_VAL_HERE\",
\"payloads\": {
\"EMAIL\": {
\"recipient\": \"john.doe@moengage.com\",
\"personalized_attributes\": {
\"firstname\": \"YOUR_firstname_ATTRIBUTE_VAL_HERE\",
\"userid\": \"YOUR_userid_ATTRIBUTE_VAL_HERE\",
\"deliverydate\": \"YOUR_deliverydate_ATTRIBUTE_VAL_HERE\",
\"deliveryslot_starttime\": \"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE\"
}
}
}
}";
httpConn.setDoOutput(true);
OutputStream os = httpConn.getOutputStream();
os.write(payload.getBytes());
os.flush();
InputStream responseStream = httpConn.getResponseCode() == HttpURLConnection.HTTP_OK
? httpConn.getInputStream()
: httpConn.getErrorStream();
BufferedReader br = new BufferedReader(new InputStreamReader(
(responseStream)));
String output;
while ((output = br.readLine()) != null) {
System.out.println(output);
}
httpConn.disconnect();
}
}
Only Push Channel
curl --location --request POST 'https://inform-api-0X.moengage.com/v1/send' \
--header 'MOE-APPKEY: YOUR_APP_KEY_HERE' \
--header 'Authorization: Basic Base64_ENCODED_APPKEY_APIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}'
import fetch from 'node-fetch';
fetch('https://inform-api-0X.moengage.com/v1/send', {
method: 'POST',
headers: {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"alert_id": "636b9d5de2cf8328549503b9",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
})
});
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"alert_id": "636b9d5de2cf8328549503b9",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}`)
req, err := http.NewRequest("POST", "https://inform-api-0X.moengage.com/v1/send", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("MOE-APPKEY", "YOUR_APP_KEY_HERE")
req.Header.Set("Authorization", "Basic Base64_ENCODED_APPKEY_APIKEY")
req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s
", bodyText)
}
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://inform-api-0X.moengage.com/v1/send');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'MOE-APPKEY' => 'YOUR_APP_KEY_HERE',
'Authorization' => 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type' => 'application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"alert_id":"636b9d5de2cf8328549503b9","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"PUSH":{"recipient":"<push-token>","personalized_attributes":{"firstname":"YOUR_firstname_ATTRIBUTE_VAL_HERE","orderid":"YOUR_orderid_ATTRIBUTE_VAL_HERE","deliverydate":"YOUR_deliverydate_ATTRIBUTE_VAL_HERE","deliveryslot_starttime":"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE","deliveryslot_endtime":"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"}}}}');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import requests
headers = {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
# Already added when you pass json= but not when you pass data=
# 'Content-Type': 'application/json',
}
json_data = {
"alert_id": "636b9d5de2cf8328549503b9",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}
response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, json=json_data)
# Note: json_data will not be serialized by requests
# exactly as it was in the original request.
#data = '{"alert_id":"636b9d5de2cf8328549503b9","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"PUSH":{"recipient":"<push-token>","personalized_attributes":{"firstname":"YOUR_firstname_ATTRIBUTE_VAL_HERE","orderid":"YOUR_orderid_ATTRIBUTE_VAL_HERE","deliverydate":"YOUR_deliverydate_ATTRIBUTE_VAL_HERE","deliveryslot_starttime":"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE","deliveryslot_endtime":"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"}}}}'
#response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, data=data)
require 'net/http'
require 'json'
uri = URI('https://inform-api-0X.moengage.com/v1/send')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/json'
req['MOE-APPKEY'] = 'YOUR_APP_KEY_HERE'
req['Authorization'] = 'Basic Base64_ENCODED_APPKEY_APIKEY'
# The object won't be serialized exactly like this
# req.body = "{"alert_id":"636b9d5de2cf8328549503b9","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"PUSH":{"recipient":"<push-token>","personalized_attributes":{"firstname":"YOUR_firstname_ATTRIBUTE_VAL_HERE","orderid":"YOUR_orderid_ATTRIBUTE_VAL_HERE","deliverydate":"YOUR_deliverydate_ATTRIBUTE_VAL_HERE","deliveryslot_starttime":"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE","deliveryslot_endtime":"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"}}}}"
req.body = {
"alert_id": "636b9d5de2cf8328549503b9",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}.to_json
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://inform-api-0X.moengage.com/v1/send");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod(“POST”);
httpConn.setRequestProperty(“MOE-APPKEY”, “YOUR_APP_KEY_HERE”);
httpConn.setRequestProperty(“Authorization”, “Basic Base64_ENCODED_APPKEY_APIKEY”);
httpConn.setRequestProperty(“Content-Type”, “application/json”);
httpConn.setDoOutput(true);
String payload = "{
\"alert_id\": \"636bc615e2cf83285495055f\",
\"user_id\": \"USER_ID\",
\"transaction_id\": \"YOUR_TRANSACTION_ID_VAL_HERE\",
\"payloads\": {
\"PUSH\": {
\"recipient\": \"<push-token>\",
\"personalized_attributes\": {
\"firstname\": \"YOUR_firstname_ATTRIBUTE_VAL_HERE\",
\"userid\": \"YOUR_userid_ATTRIBUTE_VAL_HERE\",
\"deliverydate\": \"YOUR_deliverydate_ATTRIBUTE_VAL_HERE\",
\"deliveryslot_starttime\": \"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE\"
}
}
}
}";
httpConn.setDoOutput(true);
OutputStream os = httpConn.getOutputStream();
os.write(payload.getBytes());
os.flush();
InputStream responseStream = httpConn.getResponseCode() == HttpURLConnection.HTTP_OK
? httpConn.getInputStream()
: httpConn.getErrorStream();
BufferedReader br = new BufferedReader(new InputStreamReader(
(responseStream)));
String output;
while ((output = br.readLine()) != null) {
System.out.println(output);
}
httpConn.disconnect();
}
}
Case 2: Multiple channels are configured for the Alert
curl --location --request POST 'https://inform-api-0X.moengage.com/v1/send' \
--header 'MOE-APPKEY: YOUR_APP_KEY_HERE' \
--header 'Authorization: Basic Base64_ENCODED_APPKEY_APIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
},
"EMAIL": {
"recipient": "john.doe@moengage.com",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}'
import fetch from 'node-fetch';
fetch('https://inform-api-0X.moengage.com/v1/send', {
method: 'POST',
headers: {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type': 'application/json'
},
// body: "{\n \"alert_id\": \"636b77e6e2cf83277195fb60\",\n \"user_id\": \"USER_ID\",\n \"transaction_id\": \"YOUR_TRANSACTION_ID_VAL_HERE\",\n \"payloads\": {\n \"PUSH\": {\n \"recipient\": \"<push-token>\",\n \"personalized_attributes\": {\n \"firstname\": \"YOUR_firstname_ATTRIBUTE_VAL_HERE\",\n \"orderid\": \"YOUR_orderid_ATTRIBUTE_VAL_HERE\",\n \"deliverydate\": \"YOUR_deliverydate_ATTRIBUTE_VAL_HERE\",\n \"deliveryslot_starttime\": \"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE\",\n \"deliveryslot_endtime\": \"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE\"\n }\n },\n \"EMAIL\": {\n \"recipient\": \"john.doe@moengage.com\",\n \"personalized_attributes\": {\n \"firstname\": \"YOUR_firstname_ATTRIBUTE_VAL_HERE\",\n \"orderid\": \"YOUR_orderid_ATTRIBUTE_VAL_HERE\",\n \"deliverydate\": \"YOUR_deliverydate_ATTRIBUTE_VAL_HERE\",\n \"deliveryslot_starttime\": \"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE\",\n \"deliveryslot_endtime\": \"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE\"\n }\n }\n }\n}",
body: JSON.stringify({
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
},
"EMAIL": {
"recipient": "john.doe@moengage.com",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
})
});
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
},
"EMAIL": {
"recipient": "john.doe@moengage.com",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}`)
req, err := http.NewRequest("POST", "https://inform-api-0X.moengage.com/v1/send", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("MOE-APPKEY", "YOUR_APP_KEY_HERE")
req.Header.Set("Authorization", "Basic Base64_ENCODED_APPKEY_APIKEY")
req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s
", bodyText)
}
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://inform-api-0X.moengage.com/v1/send');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'MOE-APPKEY' => 'YOUR_APP_KEY_HERE',
'Authorization' => 'Basic Base64_ENCODED_APPKEY_APIKEY',
'Content-Type' => 'application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"alert_id":"636b77e6e2cf83277195fb60","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"PUSH":{"recipient":"<push-token>","personalized_attributes":{"firstname":"YOUR_firstname_ATTRIBUTE_VAL_HERE","orderid":"YOUR_orderid_ATTRIBUTE_VAL_HERE","deliverydate":"YOUR_deliverydate_ATTRIBUTE_VAL_HERE","deliveryslot_starttime":"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE","deliveryslot_endtime":"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"}},"EMAIL":{"recipient":"john.doe@moengage.com","personalized_attributes":{"firstname":"YOUR_firstname_ATTRIBUTE_VAL_HERE","orderid":"YOUR_orderid_ATTRIBUTE_VAL_HERE","deliverydate":"YOUR_deliverydate_ATTRIBUTE_VAL_HERE","deliveryslot_starttime":"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE","deliveryslot_endtime":"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"}}}}');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import requests
headers = {
'MOE-APPKEY': 'YOUR_APP_KEY_HERE',
'Authorization': 'Basic Base64_ENCODED_APPKEY_APIKEY',
# Already added when you pass json= but not when you pass data=
# 'Content-Type': 'application/json',
}
json_data = {
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
},
"EMAIL": {
"recipient": "john.doe@moengage.com",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}
response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, json=json_data)
# Note: json_data will not be serialized by requests
# exactly as it was in the original request.
#data = '{"alert_id":"636b77e6e2cf83277195fb60","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"PUSH":{"recipient":"<push-token>","personalized_attributes":{"firstname":"YOUR_firstname_ATTRIBUTE_VAL_HERE","orderid":"YOUR_orderid_ATTRIBUTE_VAL_HERE","deliverydate":"YOUR_deliverydate_ATTRIBUTE_VAL_HERE","deliveryslot_starttime":"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE","deliveryslot_endtime":"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"}},"EMAIL":{"recipient":"john.doe@moengage.com","personalized_attributes":{"firstname":"YOUR_firstname_ATTRIBUTE_VAL_HERE","orderid":"YOUR_orderid_ATTRIBUTE_VAL_HERE","deliverydate":"YOUR_deliverydate_ATTRIBUTE_VAL_HERE","deliveryslot_starttime":"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE","deliveryslot_endtime":"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"}}}}'
#response = requests.post('https://inform-api-0X.moengage.com/v1/send', headers=headers, data=data)
require 'net/http'
require 'json'
uri = URI('https://inform-api-0X.moengage.com/v1/send')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/json'
req['MOE-APPKEY'] = 'YOUR_APP_KEY_HERE'
req['Authorization'] = 'Basic Base64_ENCODED_APPKEY_APIKEY'
# The object won't be serialized exactly like this
# req.body = "{"alert_id":"636b77e6e2cf83277195fb60","user_id":"USER_ID","transaction_id":"YOUR_TRANSACTION_ID_VAL_HERE","payloads":{"PUSH":{"recipient":"<push-token>","personalized_attributes":{"firstname":"YOUR_firstname_ATTRIBUTE_VAL_HERE","orderid":"YOUR_orderid_ATTRIBUTE_VAL_HERE","deliverydate":"YOUR_deliverydate_ATTRIBUTE_VAL_HERE","deliveryslot_starttime":"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE","deliveryslot_endtime":"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"}},"EMAIL":{"recipient":"john.doe@moengage.com","personalized_attributes":{"firstname":"YOUR_firstname_ATTRIBUTE_VAL_HERE","orderid":"YOUR_orderid_ATTRIBUTE_VAL_HERE","deliverydate":"YOUR_deliverydate_ATTRIBUTE_VAL_HERE","deliveryslot_starttime":"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE","deliveryslot_endtime":"YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"}}}}"
req.body = {
"alert_id": "636b77e6e2cf83277195fb60",
"user_id": "USER_ID",
"transaction_id": "YOUR_TRANSACTION_ID_VAL_HERE",
"payloads": {
"PUSH": {
"recipient": "<push-token>",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
},
"EMAIL": {
"recipient": "john.doe@moengage.com",
"personalized_attributes": {
"firstname": "YOUR_firstname_ATTRIBUTE_VAL_HERE",
"orderid": "YOUR_orderid_ATTRIBUTE_VAL_HERE",
"deliverydate": "YOUR_deliverydate_ATTRIBUTE_VAL_HERE",
"deliveryslot_starttime": "YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE",
"deliveryslot_endtime": "YOUR_deliveryslot_endtime_ATTRIBUTE_VAL_HERE"
}
}
}
}.to_json
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://inform-api-0X.moengage.com/v1/send");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod(“POST”);
httpConn.setRequestProperty(“MOE-APPKEY”, “YOUR_APP_KEY_HERE”);
httpConn.setRequestProperty(“Authorization”, “Basic Base64_ENCODED_APPKEY_APIKEY”);
httpConn.setRequestProperty(“Content-Type”, “application/json”);
httpConn.setDoOutput(true);
String payload = "{
\"alert_id\": \"636bc615e2cf83285495055f\",
\"user_id\": \"USER_ID\",
\"transaction_id\": \"YOUR_TRANSACTION_ID_VAL_HERE\",
\"payloads\": {
\"PUSH\": {
\"recipient\": \"<push-token>\",
\"personalized_attributes\": {
\"firstname\": \"YOUR_firstname_ATTRIBUTE_VAL_HERE\",
\"userid\": \"YOUR_userid_ATTRIBUTE_VAL_HERE\",
\"deliverydate\": \"YOUR_deliverydate_ATTRIBUTE_VAL_HERE\",
\"deliveryslot_starttime\": \"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE\"
}
},
\"EMAIL\": {
\"recipient\": \"john.doe@moengage.com\",
\"personalized_attributes\": {
\"firstname\": \"YOUR_firstname_ATTRIBUTE_VAL_HERE\",
\"userid\": \"YOUR_userid_ATTRIBUTE_VAL_HERE\",
\"deliverydate\": \"YOUR_deliverydate_ATTRIBUTE_VAL_HERE\",
\"deliveryslot_starttime\": \"YOUR_deliveryslot_starttime_ATTRIBUTE_VAL_HERE\"
}
}
}
}";
httpConn.setDoOutput(true);
OutputStream os = httpConn.getOutputStream();
os.write(payload.getBytes());
os.flush();
InputStream responseStream = httpConn.getResponseCode() == HttpURLConnection.HTTP_OK
? httpConn.getInputStream()
: httpConn.getErrorStream();
BufferedReader br = new BufferedReader(new InputStreamReader(
(responseStream)));
String output;
while ((output = br.readLine()) != null) {
System.out.println(output);
}
httpConn.disconnect();
}
}
Response Parameters
Key | Description |
---|---|
message |
This field contains a brief description of the request status. |
request_id |
This field contains the unique identifier for the request and is present in the response body only for the following cases:
|
err_code |
This field is present in the response body only when the request is unsuccessful and contains the error code. |
Response Codes
Status Code | Request State | Description |
---|---|---|
200 |
Success |
This response is returned when the request is submitted to MoEngage. Note: For errors in the channel-level payload, the error information is present in the logs on the dashboard. |
400 |
Bad Request |
This response is returned in the following cases:
|
401 |
Authorization Failed |
This response is returned when the authorization fails due to incorrect values for the APP KEY/ HTTP Auth Header. |
409 |
Duplicate Request |
This response is returned when a request is sent with the same transaction_id value as a previously successful or in-progress request. For more information, refer to Duplicate requests. |
429 |
Rate Limit Reached |
This response is returned when the number of requests per minute has exceeded the rate limit. |
500 |
Internal Server error |
This response is returned when the system runs into an unexpected error. You can try for a maximum of 3 times with exponential backoff. |
Sample Response
Success Response
{
"message": "Alert request Submitted",
"request_id": "df757a58-971a-464c-803f-e8ecf9110943"
}
Sample Response for Invalid Alert ID
{
"message": "Invalid Alert ID",
"err_code": "BAD_REQUEST"
}
Sample response when a mandatory field is missing in the request
{
"message": "recipient - Field is required but value is None : None",
"err_code": "BAD_REQUEST"
}
Sample Response when the payload field is empty for all the channels
{
"message”: "Channel Payload Missing : None",
“err_code": "BAD_REQUEST"
}
Sample Response when the payload field is not present in the request
{
"message”: "payloads - Field is required but value is None : None",
“err_code": "BAD_REQUEST"
}
Sample Response for incorrect channel payload (when the Alert has been configured for the SMS channel alone and the payload has details about the EMAIL channel)
{
"message": "Invalid Payloads : {'EMAIL': {\"recipient\": \"\", \"personalized_attributes\": {}}}",
"err_code": "BAD_REQUEST"
}
Sample Response when the payload is not present in the request
{
"message”: "payloads - Field is required but value is None : None",
“err_code": "BAD_REQUEST"
}
Sample Response when an additional channel that has not been configured in the Alert is present in the payload (Only SMS is configured but SMS and Email are sent in the payload)
{
"message”: "Request payloadis different from the expected payload of this Alert. Excpeted Channels : ['SMS']",
“err_code": "BAD_REQUEST"
}
Sample Response when an invalid channel name is passed in the payload
{
"message": "Value must be one of the permitted values: ['SMS'] : 'EMAIL'",
"err_code": "BAD_REQUEST"
}
Sample Response for invalid transaction_id
{
"message": "transaction_id - String value too long, max length: 50 : '23432dfasfsad23csdewdwrxe2r433333324234234234234234442323424'",
"err_code": "BAD_REQUEST"
}
Sample Response for a paused/archived/stopped Alert
{
"message": "Inactive Alert",
"err_code": "BAD_REQUEST"
}
Sample Response for a Test Alert Request received on Live Environment API endpoint
Test Alert Request received on Live Environment API endpoint
{
"message": "Test Alert Request received on Live API endpoint",
"err_code": "BAD_REQUEST"
}
Sample Response for a Live Alert Request received on Test Environment API endpoint
{
"message": "Live Alert Request received on Sandbox API endpoint",
"err_code": "BAD_REQUEST"
}
Sample Response for MOE-APPKEY Header Missing
{
"message": "MOE-APPKEY Missing in Headers",
"err_code": "UNAUTHORIZED"
}
Sample Response for Authorization Key missing
{
"message": "Authorization Missing in Headers",
"err_code": "UNAUTHORIZED"
}
Sample Response for Autorization Failed
{
"message": "Authorization Failed",
"err_code": "UNAUTHORIZED"
}
Sample Response for Duplicate Requests
{
"message": "Duplicate Request",
"err_code": "DUPLICATE_REQUEST_RECEIVED",
"request_id": "c65a9d86-3966-47f0-985f-f0b194843088"
}
Sample Response for Rate Limit Breach
{
"message": "Rate-Limit Reached",
"err_code": "RATE_LIMIT_REACHED"
}
Sample Response for Unknown Errors
{
"message": "Exception occurred, Please contact MoEngage",
"err_code": "INTERNAL_SERVER_ERROR"
}
Postman Collection
We have made it easy for you to test the APIs.Click here to view it in Postman.
FAQs
-
What is the Rate Limit?
The default rate limit is 10K RPM. -
How are Duplicate Requests handled?
A request is deemed duplicate in the case following cases:
-
- It is received within 5 minutes of a previously successful request containing the same transaction_id
- It is received within 5 minutes of a previous request which is ‘In Progress’ (being processed) and contains the same transaction_id
Duplicate requests are dropped and not reprocessed.
-
What happens when a vendor does not accept requests from MoEngage?
When the vendor does not accept requests from MoEngage, MoEngage retries every request a maximum of five times with 200ms exponential backoff. -
Are Alert Logs stored in MoEngage?
Alert logs are stored for up to 30 days for every Alert in MoEngage.