--- title: "Injection of Transactional Data into Mapp Engage" slug: "injection-of-transactional-data-into-mapp-engage" description: "Inject order data into Mapp Engage as system transactions via Mapp Connect, imports, or the REST API, with or without a transactional email." status: "update" updated: 2026-11-06T10:09:45Z published: 2026-11-06T10:09:45Z canonical: "docs.mapp.com/injection-of-transactional-data-into-mapp-engage" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.mapp.com/llms.txt > Use this file to discover all available pages before exploring further. # Injection of Transactional Data into Mapp Engage ## Overview Injection of transactional data allows you to store order and purchase information in Mapp Engage. The injected data is saved as [System Transactions](/v1/docs/system-transactions) and can be used for segmentation, automations, and personalization. Transactional data can be stored independently or stored and sent together with a transactional email, for example, for order confirmations or shipping notifications. --- ## Navigation Path *Administration > E-commerce > System Transactions* --- ## Injection Behavior - **Multiple injection methods**: transactional data can be injected via Mapp Connect integrations, automated imports, manual uploads, or REST API calls. - **Optional email sendout**: data can be stored without sending a message or stored and sent together with a transactional email. - **Contact-based storage**: transactions are stored only for existing contacts, unless using Mapp Connect, which can automatically create contacts. - **Whiteboard event**: transactions added by an automated or manual import do not trigger the [Transaction Registered](/v1/docs/transaction-registered) event in Whiteboard. Transactions from all other sources trigger it. - **Reusable data**: stored transactions remain available for segmentation, automations, and message personalization. --- ## Injection Methods ### Mapp Connect Integration Mapp Connect supports automatic injection of transactional data from connected e-commerce platforms, including: - Magento (Adobe Commerce) - Shopware - Shopify - WooCommerce (via Zapier) - Other platforms are integrated via Zapier using an order event When transactional data is injected via Mapp Connect, contacts that do not yet exist in the system are created automatically. For details, see [Mapp Connect Basics](/v1/docs/mapp-connect-basics). --- ### Automated Imports Transactional data can be imported using scheduled automated jobs. These jobs are configured in the Whiteboard interface and allow recurring imports without manual intervention. For details, see [Import/Export](/v1/docs/importexport). --- ### Manual Import Transactional data can also be imported manually. 1. Navigate to *Administration > E-commerce > System Transactions*. 2. Use the provided sample file to upload transaction records. For details, see [Manual Import & Search of eCommerce Data](/v1/docs/manual-import-search-of-ecommerce-data). --- ### API-Based Data Injection Transactional data can be injected via the REST API. Two different scenarios are supported. --- #### Storing Transactional Data Without Email Sendout Transactional data can be stored without sending a message. The following applies: - The contact is identified by its email address in the query parameter `userEmail`. - The request body contains a `transactionItems` array with one entry per product. Send all values as strings. - Each item requires the fields `orderId`, `timestamp`, `productSKU`, `productName`, `productPrice`, and `productQuantity`. You can add optional fields, such as `currency`, and up to five custom fields, `customDetail1` to `customDetail5`. For all fields, see [System Transactions](/v1/docs/system-transactions). Endpoint: `POST /ecommerce/registerTransaction` Example request: ```json POST /ecommerce/registerTransaction?userEmail=user@example.com { "transactionItems": [ { "orderId": "1234567890", "timestamp": "2026-01-01T12:00:00", "productSKU": "XXX-123-ABC", "productName": "Bicycle", "productPrice": "150.00", "productQuantity": "1", "currency": "EUR" } ] } ``` This method is typically used when transactional data is required for segmentation or later automation, but no immediate message should be sent. --- #### Storing Transactional Data With Email Sendout The request sends a prepared message to one contact and passes the order data to the message. Optionally, the same request stores the order data as system transactions. Endpoint: `POST /message/sendTransactionalWithEventDetails`. For details, see this endpoint in the [API documentation](https://docs.mapp.com/apidocs/messagesendtransactionalwitheventdetails). The request uses the following query parameters: - `messageId`: ID of the prepared message - `recipientId`: ID of the contact - `externalTransactionFormula`: optional. Your transactional message ID (TMID), if your system creates it. Whether you pass a TMID depends on the **Transactional Message Mode** of the group. For details, see [Sending Transactional Messages (API)](/v1/docs/send-transactional-messages-api). In the request body, `parameters` contains order-level data, such as the order total. `eventDetails` contains one entry per product, each with a list of `itemDetails`. Use the same structure for every product. Names are case-sensitive, for example `eventDetails`, not `eventdetails`. By default, the request only sends the message. To also store the products as system transactions, add `"transaction": true` to the request body. Each `itemDetails` entry must then use the field names of [System Transactions](/v1/docs/system-transactions), for example `orderId`, `timestamp`, `productSKU`, `productName`, `productPrice`, and `productQuantity`. Without `"transaction": true`, you can use any names. Example request that only sends the message and matches the template below: ```json POST /message/sendTransactionalWithEventDetails?messageId=12345&recipientId=67890&externalTransactionFormula=ORDER-1234567890 { "parameters": [ { "name": "billingAddress", "value": "Jane Miller, Main Street 1, 10115 Berlin" }, { "name": "shippingAddress", "value": "Jane Miller, Main Street 1, 10115 Berlin" }, { "name": "orderTotal", "value": "210.00" }, { "name": "currency", "value": "EUR" } ], "eventDetails": [ { "itemDetails": [ { "name": "productName", "value": "Chair C1" }, { "name": "brand", "value": "Brand A" }, { "name": "productPrice", "value": "60.00" }, { "name": "productQuantity", "value": "1" }, { "name": "productURL", "value": "https://www.example.com/chair-c1" }, { "name": "imageURL", "value": "https://www.example.com/images/chair-c1.png" } ] }, { "itemDetails": [ { "name": "productName", "value": "Table T1" }, { "name": "brand", "value": "Brand B" }, { "name": "productPrice", "value": "150.00" }, { "name": "productQuantity", "value": "1" }, { "name": "productURL", "value": "https://www.example.com/table-t1" }, { "name": "imageURL", "value": "https://www.example.com/images/table-t1.png" } ] } ] } ``` > [!WARNING] > Warning > > This request adds the contact to the group of the prepared message if the contact is not a member yet. This can subscribe or re-subscribe contacts unexpectedly. For details, see [Contact unexpectedly added to the group after being sent a prepared or transactional message](/v1/docs/contact-unexpectedly-added-to-group-after-being-sent-a-prepared-or-transactional-message). This approach is commonly used for order confirmations, shipping notifications, or payment confirmations. --- ## Transactional Email Usage When transactional data is injected alongside an email sendout, it becomes available in the email template. - Order-level data is accessed via parameters, such as `parameter.orderTotal`. - Product-level data is accessed with a `ForEach` loop over `${eventDetails}`. Inside the loop, you access each value by its name, for example `${product['productName']}`. The name of the loop variable (`product` in the template below) is up to you. - The `max` attribute limits the number of products shown. If the request contains more products, the first ones up to the limit are shown and the rest are ignored. --- ## Example Transactional Email Template ```xml
Dear <%user.firstname%> <%user.lastname%>,
Thank you for shopping with us! Please find your order details below:
Billing Information<%parameter.billingAddress%> |
Shipping Information<%parameter.shippingAddress%> |
|
<%${product['brand']}%> <%${product['productName']}%> Quantity: <%${product['productQuantity']}%>, Price: <%${product['productPrice']}%> |
Best regards,
The [Your Company Name] Team