curl --request POST \
--url https://api-{dc}.moengage.com/v5/business-events/triggers \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"event_name": "price_drop",
"triggered_by": "[email protected]",
"event_attributes": {
"product_id": "SKU-99321",
"new_price": 349.5,
"dropped_at": "2026-08-03T09:12:00Z"
},
"moe_request_id": "550e8400-e29b-41d4-a716-446655440000"
}
'{
"response_id": "550e8400-e29b-41d4-a716-446655440000",
"type": "business-event",
"data": {
"triggered_status": "SUCCESS",
"message": "The business event has been triggered",
"summary": {
"total": 4,
"triggered": 4,
"failed": 0
},
"triggered_campaign_ids": [
"64a1b2c3d4e5f6a7b8c9d0e1",
"64a1b2c3d4e5f6a7b8c9d0e2",
"64a1b2c3d4e5f6a7b8c9d0e3"
],
"failed_campaign_ids": [],
"triggered_flow_ids": [
"64a1b2c3d4e5f6a7b8c9d0f1"
],
"failed_flow_ids": []
}
}Trigger Business Event (V5)
Fires a registered business event, enqueueing all attached active campaigns and flows for delivery, subject to per-workspace daily and hourly quotas.
- An unknown event name returns a
400 Bad Request. - Attribute types are validated against the registered event schema.
- Delivery is asynchronous.
- The response reports how many attached campaigns and flows were triggered compared to how many were skipped due to quota (
failed), and returns the triggered campaign and flow IDs.
curl --request POST \
--url https://api-{dc}.moengage.com/v5/business-events/triggers \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"event_name": "price_drop",
"triggered_by": "[email protected]",
"event_attributes": {
"product_id": "SKU-99321",
"new_price": 349.5,
"dropped_at": "2026-08-03T09:12:00Z"
},
"moe_request_id": "550e8400-e29b-41d4-a716-446655440000"
}
'{
"response_id": "550e8400-e29b-41d4-a716-446655440000",
"type": "business-event",
"data": {
"triggered_status": "SUCCESS",
"message": "The business event has been triggered",
"summary": {
"total": 4,
"triggered": 4,
"failed": 0
},
"triggered_campaign_ids": [
"64a1b2c3d4e5f6a7b8c9d0e1",
"64a1b2c3d4e5f6a7b8c9d0e2",
"64a1b2c3d4e5f6a7b8c9d0e3"
],
"failed_campaign_ids": [],
"triggered_flow_ids": [
"64a1b2c3d4e5f6a7b8c9d0f1"
],
"failed_flow_ids": []
}
}Rate Limits
For campaigns:- You can send a maximum of 10 triggers per 5 minutes.
- You can send a maximum of 50 triggers per hour.
- You can send a maximum of 200 triggers per day.
- You can trigger a maximum of 3 business trigger flows per hour.
- You can trigger a maximum of 10 business trigger flows per day.
Example Request
curl --request POST \
--url 'https://api-01.moengage.com/v5/business-events/triggers' \
--header 'Authorization: Basic <base64(workspaceId:apiKey)>' \
--header 'Content-Type: application/json' \
--header 'X-MOE-Request-Id: 550e8400-e29b-41d4-a716-446655440000' \
--data '{
"event_name": "price_drop",
"triggered_by": "[email protected]",
"event_attributes": {
"product_id": "SKU-99321",
"new_price": 349.5,
"dropped_at": "2026-08-03T09:12:00Z"
},
"moe_request_id": "550e8400-e29b-41d4-a716-446655440000"
}'
Authorizations
Authentication is done via Basic Auth. This requires a base64-encoded string of your credentials in the format username:password.
- Username: Use your MoEngage Workspace ID (also known as the App ID). Find it in the MoEngage dashboard at Settings > Account > API keys.
- Password: Use an API key from Settings > Account > API keys.
Refer to API Key Dashboard for details on creating and managing API keys.
Headers
Client-supplied trace ID (UUID v4). Echoed back in the X-MOE-Request-Id response header and returned unchanged as response_id in the body. When you omit this header, MoEngage generates a 12-character hexadecimal identifier instead. Quote it when contacting MoEngage Support.
On Trigger Business Event (V5), the body field moe_request_id takes precedence: when you send both, response_id echoes moe_request_id, and this header is returned only in the X-MOE-Request-Id response header.
Body
Event to trigger.
Attribute values are validated against the registered attribute schema (types, presence). Unknown attributes are rejected with a 400.
Name of a business event registered in this workspace.
"price_drop"
Email of the user/service firing the event. Required.
Attribute values for this firing, keyed by attribute name. Types must match the registered schema (string, number, boolean, datetime).
{
"product_id": "SKU-99321",
"new_price": 349.5,
"dropped_at": "2026-08-03T09:12:00Z"
}
Optional request id, returned unchanged as response_id and used for tracing. This field takes precedence over the X-MOE-Request-Id header — when you send both, response_id echoes this value, and the header value is returned only in the X-MOE-Request-Id response header.
"550e8400-e29b-41d4-a716-446655440000"
Response
This response is returned when the trigger request is processed successfully, whether the result is full success, partial success, or complete failure to reserve the attached campaigns/flows.
Echo of the caller-supplied moe_request_id, returned unchanged. When you omit moe_request_id, it echoes the X-MOE-Request-Id header instead; when you send neither, MoEngage generates a 12-character hexadecimal identifier.
"5f3e2a1b9c8d"
business-event "business-event"
Show child attributes
Show child attributes