curl --request POST \
--url https://app.masivo.ai/api/storefront/v1/behavior/events \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://app.masivo.ai/api/storefront/v1/behavior/events"
payload = {}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://app.masivo.ai/api/storefront/v1/behavior/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.masivo.ai/api/storefront/v1/behavior/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.masivo.ai/api/storefront/v1/behavior/events"
payload := strings.NewReader("{}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.masivo.ai/api/storefront/v1/behavior/events")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.masivo.ai/api/storefront/v1/behavior/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "PURCHASE",
"data": {},
"fulfilled": true,
"reserve": 123,
"queue_message_id": "<string>",
"rewarding_campaigns": "<array>",
"status": "PENDING",
"result": {
"wallet": {},
"customer": {},
"gift_card": [
{
"code": "<string>",
"reward_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rewarded_at": "2023-11-07T05:31:56Z",
"description": "<string>",
"expired_at": "2023-11-07T05:31:56Z",
"redeemed_at": "2023-11-07T05:31:56Z"
}
],
"accumulations": [
{
"amount": 123,
"reward_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"brand_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"issued_at": "2023-11-07T05:31:56Z",
"expiration_date": "2023-11-07T05:31:56Z",
"reservation_expires_at": "2023-11-07T05:31:56Z"
}
],
"redemptions": [
{
"amount": 123,
"reward_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"brand_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"issued_at": "2023-11-07T05:31:56Z",
"expiration_date": "2023-11-07T05:31:56Z",
"reservation_expires_at": "2023-11-07T05:31:56Z"
}
],
"transactions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"brand_id": "<string>",
"event_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"channel_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"store_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"funded_by": "MARKETING",
"event_type": "PURCHASE",
"reward_type": "POINTS",
"reward_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"cost": 123,
"details": "<string>",
"type": "ACCUMULATION",
"receiver_id": "<string>",
"sender_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"issued_at": "2023-11-07T05:31:56Z",
"attributes": {
"line": {
"amount": 123,
"reward_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"brand_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"issued_at": "2023-11-07T05:31:56Z",
"expiration_date": "2023-11-07T05:31:56Z",
"reservation_expires_at": "2023-11-07T05:31:56Z"
},
"campaign_name": "<string>"
},
"metadata": {}
}
],
"customer_by_tier": [
{}
]
},
"issued_at": "2023-11-07T05:31:56Z",
"processing_at": "2023-11-07T05:31:56Z",
"resolved_at": "2023-11-07T05:31:56Z",
"cancelled_at": "2023-11-07T05:31:56Z",
"expired_at": "2023-11-07T05:31:56Z",
"reversed_at": "2023-11-07T05:31:56Z"
}
}{
"error": "<string>",
"details": "<string>"
}Emit event
Create a behavior event. This triggers matching campaigns to offer rewards to the customer. Store, channel, and product scope is evaluated against the event. Tier scope is evaluated using the customer’s tier at the start of event processing, before any tier transition produced by the event. null or an empty tiers array means no tier restriction.
curl --request POST \
--url https://app.masivo.ai/api/storefront/v1/behavior/events \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://app.masivo.ai/api/storefront/v1/behavior/events"
payload = {}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://app.masivo.ai/api/storefront/v1/behavior/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.masivo.ai/api/storefront/v1/behavior/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.masivo.ai/api/storefront/v1/behavior/events"
payload := strings.NewReader("{}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.masivo.ai/api/storefront/v1/behavior/events")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.masivo.ai/api/storefront/v1/behavior/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "PURCHASE",
"data": {},
"fulfilled": true,
"reserve": 123,
"queue_message_id": "<string>",
"rewarding_campaigns": "<array>",
"status": "PENDING",
"result": {
"wallet": {},
"customer": {},
"gift_card": [
{
"code": "<string>",
"reward_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rewarded_at": "2023-11-07T05:31:56Z",
"description": "<string>",
"expired_at": "2023-11-07T05:31:56Z",
"redeemed_at": "2023-11-07T05:31:56Z"
}
],
"accumulations": [
{
"amount": 123,
"reward_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"brand_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"issued_at": "2023-11-07T05:31:56Z",
"expiration_date": "2023-11-07T05:31:56Z",
"reservation_expires_at": "2023-11-07T05:31:56Z"
}
],
"redemptions": [
{
"amount": 123,
"reward_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"brand_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"issued_at": "2023-11-07T05:31:56Z",
"expiration_date": "2023-11-07T05:31:56Z",
"reservation_expires_at": "2023-11-07T05:31:56Z"
}
],
"transactions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"brand_id": "<string>",
"event_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"channel_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"store_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"funded_by": "MARKETING",
"event_type": "PURCHASE",
"reward_type": "POINTS",
"reward_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"cost": 123,
"details": "<string>",
"type": "ACCUMULATION",
"receiver_id": "<string>",
"sender_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"issued_at": "2023-11-07T05:31:56Z",
"attributes": {
"line": {
"amount": 123,
"reward_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"brand_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"issued_at": "2023-11-07T05:31:56Z",
"expiration_date": "2023-11-07T05:31:56Z",
"reservation_expires_at": "2023-11-07T05:31:56Z"
},
"campaign_name": "<string>"
},
"metadata": {}
}
],
"customer_by_tier": [
{}
]
},
"issued_at": "2023-11-07T05:31:56Z",
"processing_at": "2023-11-07T05:31:56Z",
"resolved_at": "2023-11-07T05:31:56Z",
"cancelled_at": "2023-11-07T05:31:56Z",
"expired_at": "2023-11-07T05:31:56Z",
"reversed_at": "2023-11-07T05:31:56Z"
}
}{
"error": "<string>",
"details": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The customer unique identifier in your system
The id of the brand that originate the event
The type of the event
"PURCHASE"
Platform name where the event originated
The order in case of a PURCHASE event
Show child attributes
Show child attributes
The product in case of an ADD_TO_CART event
Show child attributes
Show child attributes
If the event was fulfilled, when false, rewards to be redeemed will be reserved until fulfilled
The number of days to reserve the rewards
The rewards to redeem in the order
Show child attributes
Show child attributes
Include your conditions event tags here
(Optional) The referral code to track the event
Include any additional info here
Optional campaign and matching context captured by the caller and forwarded with the event. Include the same context on the purchase. Cookies must be captured from the client; they are not generated from UTM values.
Show child attributes
Show child attributes
Google tag/Firebase identity and session captured when the event occurred. Optional: missing identity keeps the legacy customer-ID fallback on the web stream, without reliable session attribution. Never include API secrets.
Show child attributes
Show child attributes
Optional ISO 8601 timestamp of when the event occurred. It must include timezone information: use UTC with Z (recommended) or an explicit offset such as -05:00. Do not append Z to an unconverted local time. Must be within the last 72 hours and cannot be in the future. Defaults to the current server time if not provided.
"2026-03-25T10:00:00.000Z"
Response
Event enqueued for processing
Show child attributes
Show child attributes