Transactions represent a variable list of activities pertaining to the Customer (e.g., orders, hotel stays). As mentioned in the Auto-linking, Basic Search, and Detailed Lookup guide, transactions are an Array of transaction objects to be sent back in response to a Detailed Lookup request. These are presented as cards on the left side of the Customer Profile.
This guide gives detailed information on transactions and their use.
Overview #
Implement multiple types of Transaction Cards to ingest and display Customer data. This also allows you to implement as many Transaction Cards as you need. Suppose you have five Shopify stores; you can display Customer transaction data from each Shopify store in their own unique Transaction ORDER Card.
You can also have different Transaction Cards. For example, a hotel business can have an ORDER card for their merchandise Shopify store and a STAY card to display hotel reservations.
Choose a Transaction type #
The choice of transaction type dictates how Gladly displays the data.
Supported Transaction Types #
- ORDER: Orders
- FLIGHT: Flights
- STAY: Hotel stays
- SUBSCRIPTION: Subscriptions
- GENERIC: All other transactions
Transaction Card label #
Each Transaction Type has a default card label displayed to the Agent on Gladly:
- ORDER: Orders
- FLIGHT: Reservations
- STAY: Stays
- SUBSCRIPTION: Subscriptions
- GENERIC: Transaction
By default, the label for each card reflects the number of records associated with each type. For example, if a Customer has eight orders, the ORDER card label will say 8 Orders. If the Customer has one three-night reservation, the STAY card label will say 1 Stay.Â
You may change the card label to something that makes sense to your business (e.g., the name of your e-store brand). If you choose to customize the card label, it will no longer show the number of records for the card.
Availability #
ORDER cards will appear automatically in the Customer Profile without Professional Services assistance when e-commerce apps like Shopify or BigCommerce are added through the Apps page. Other Transaction Types require Professional Services assistance for configuration before the card can appear in Gladly. Any additional customization beyond the first ORDER card also requires Professional Services assistance.
Visibility #
Transaction Cards are not visible in the Customer Profile unless there’s transaction data. For example, the ORDER Transaction Card will not be visible on a Customer’s Profile if the Customer has no orders.
Use of custom Lookup Adaptors with Transaction Cards #
Apps added through Gladly have default values to look up Customer data to display in Gladly. If you build a custom Lookup Adaptor to allow you to pull additional Customer data to Gladly not readily available with our integrated apps, make sure your Lookup Adaptor is passing the correct attributes to Gladly. Only then can our Professional Services team configure which card the attribute appears.
Multiple Transaction Cards #
There’s no additional action required if you only use one Transaction Type. For example, just one ORDER card for a single Shopify instance. To have multiple cards requires additional review:
- If using a custom Lookup Adaptor, you must make sure the Lookup Adaptor is passing the correct attributes back to Gladly. You’ll need to pass a transaction attribute that helps distinguish what data should be displayed on each card (e.g., brand name, geography, etc.). Work with Gladly Professional Services to add additional cards beyond the first. They can ensure the cards pull data from the correct instance and show it in the correct card.
- If you already have an out-of-the-box app in Gladly (e.g., Shopify) and you add another out-of-the-box app (e.g., another Shopify store), the transactions from both apps will be displayed on the same transaction card. If it makes sense for your business, work with Gladly Professional Services to add another Transaction Card for the newest app you’ve added to Gladly.
Transaction Attributes #
Each transaction is an object within an array and can be extended to have its own set of single-level key-value pairs.
An exception is made for ORDER type transactions that support an Array of product objects as documented below.
ORDER Transactions #
Each ORDER type transaction object uses the following default structure and template.
Agent View #
When first displayed, orders are collapsed. Agents can manually expand each Order by clicking on it.
This is how the reserved keys map to the layout:

Customer View (WISMO on Sidekick) #
If you’ve enabled WISMO on Sidekick, Customers will see the following in Sidekick for their latest order when interacting with it:

Hover over clipped text #
Hover over to view clipped text.

Order Object Structure #
If any of the reserved fields below are not sent as part of your Detailed Lookup response, the spaces for them will be left blank.
Text
{
"type": "ORDER",
"createdAt": "2020-08-01T12:00:00.000Z",
"orderNumber": "1832",
"itemCount": 5,
"customerOrderUrl": "https://retail.com/edit/order/1832",
"orderLink": "https://retail.com/admin/orders/1832",
"orderTotal": "$50",
"note": "This order is a gift purchase with an extended returns window.",
"orderStatus": "Completed",
"fulfillments": [
{
"productIds": ["12345", "54321"],
"estimatedDeliveryDate": "2020-08-10T12:00:00.000Z",
"trackingUrl": "http://track.dhl-usa.com/TrackByNbr.asp?ShipmentNumber=00064735172",
"trackingNumber": "00064735172",
"status": "delivered"
}
],
"products": [
{
"id": "12345",
"name": "Socks",
"status": "fulfilled",
"productId": "alphanumeric values",
"sku": "alphanumeric values",
"imageUrl": "https://www.image.com/1"
},
{
"id": "54321",
"name": "Scarf",
"status": "fulfilled",
"sku": "alphanumeric values",
"imageUrl": "https://www.image.com/2"
}
]
}
Attribute Name | Type | Gladly Hero Required | Gladly Sidekick Required | Gladly Sidekick Notes |
type | string | Yes | Yes | Must be ORDER. |
createdAt | date | Yes | The date order was created. Used in filtering orders the consumer is inquiring about. Used for enforcing SLA policies. Important for time sensitive actions dependent on order creation, like cancellation. | |
orderNumber | string | Yes for WISMO | Yes | The order number and a unique identifier for the order. Important for finding the order the consumer is inquiring about. Important for matching data between different business systems our customer/brand may be using. |
orderStatus | string/enum | Yes | Our status definitions for pending, reviewing, complete, and canceled are listed below. Conforming to these definitions allows for the use of pre-built actions. Pending: The order is being processed and awaiting payment, packaging, or shipment. Partial fulfillment, such as split shipments, should be marked pending. Reviewing: The order is undergoing additional fraud checks or is awaiting manual review. It may be slightly delayed or canceled. Complete: The order was completely fulfilled. All packages were shipped. Canceled: (by company) The order was canceled by the company, such as when the order failed to pass a fraud review. (by buyer) The order was canceled by the buyer at their request. | |
orderLink | url | No | No | URL for the order in your OMS for Agents to view/edit. |
orderTotal | string | Yes | Amount formatted with the currency symbol. Important for write actions involving refunds. Used as decision point for different CS policies. eg, a $1000 order could be handled differently than $10 order by Sidekick. | |
currencyCode | enum | No | No, but nice to have | The default assumption for orderTotal in Sidekick will be USD. Currency code for the order total. If this is not present, currency type will be inferred from the symbol provided in orderTotal. |
itemCount | number | No | No | Number of items in the order. This is the only field that should be sent over as an integer vs. a string. |
customerOrderUrl | url | No | No, but it’s nice to have if your business has a self-service ecosystem. | Customer-facing URL displayed in Sidekick when WISMO is enabled. Sending Customer to a self-service page. Encourage self-service prior to engaging Heroes. |
note | string | No | No | Order note |
products | []Product | Yes | List of products in the order. Customer/Brand will get the most value out of Threads if we have visibility into the order details. Used in filtering and for Thread based decisions. Information in these areas will inform customer experience and dictate what’s possible for automation. | |
fulfillments | []Fulfillment | Yes | List of fulfillments associated with the order. Order Status inquiries often require us to track the order. Limited value without being able to gain visibility into order fulfillments. Fulfillment status affects the journey through the Thread. Fulfillment status is important for the cancelability of orders. | |
billingAddress | Address | Not Implemented | No, but recommended. | Used in order verification. |
Product Structure (nested within order) #
The more Gladly Sidekick knows about the products in an order, the more nuanced we can be when interacting with a Customer.
The products Array is optional:
- For Agents, products will display underneath order information if the Array is included as part of the DETAILED lookup response
- For Customers, the first product’s imageUrl of the latest order (sorted by createdAt descending) will be displayed on Sidekick if WISMO is enabled. However, please note that the imageUrl and products Array are not required for WISMO to function!
Any additional attributes you send in each product object in the products
array will display under the product status so long as Gladly has allowed them to be displayed.
Attribute Name | Type | Gladly Hero Required | Gladly Sidekick Required | Gladly Sidekick Notes |
name | string | Yes | Important for filtering and communicating product and order details to the Customer. | |
id | string | Yes | Yes | Critical for product identification and communication to Customers about order status. Useful for analytics and tracking. |
status | string | No | No, but encouraged. | Useful for communicating logistic critical information such as backorder or preorder status. |
sku | string | Yes | Critical for product identification and communication to Customers about order status. Useful for analytics and tracking. | |
imageUrl | url | No | No, but encouraged for optimal UX. | Image URL of product to be displayed. Must be in HTTPS format. Display product images to Customers when appropriate. |
Fulfillment Structure (nested within order) #
- For Agents, Gladly will display all fulfillment objects connected to orders returned underneath each order
- For Customers, Gladly will display the first three fulfillment objects connected to the latest order only if WISMO is enabled on Sidekick and the Customer interacts with WISMO. Although fulfillments is not required for WISMO to function, it is highly recommended to include at least the trackingNumber and trackingUrl to provide customers with helpful information. An order will still display (e.g., orderNumber, orderTotal) on Sidekick so long as it’s the latest order, even without fulfillments[] information.
- Having access to fulfillments is critical to unlocking maximum value with Threads in Sidekick for all WISMO-related inquiries. With the carrier and trackingNumber, Sidekick can leverage its many carrier integrations to get real-time shipping updates that can inform the flow of the Conversation. By having access to this data, we can enforce SLA-based rules and automate nuanced communication to the Customer about their order.
The fulfillments array does not currently allow for any additional custom attributes to be displayed to either the Agent or Customer.
Attribute Name | Type | Gladly Hero Required | Gladly Sidekick Required | Gladly Sidekick Notes |
estimatedDeliveryDate | date | No | No, but nice to have for optimal UX. | Estimated delivery date of shipment. Used for SLA based policies. Unlocks more nuanced responses to the consumer regarding their order status. |
productIds | array of Strings | Yes | List of product IDs in this shipment. Product IDs must correspond to the id in the products Array for this order object. Be able to convey which products are in which fulfillments and their shipment status. | |
trackingUrl | url | Yes | Shipment tracking URL (e.g., to DHL). | |
trackingNumber | string | Yes, if it exists | Important for tracking in carrier integrations. | |
status | string | No | No | Current status of fulfillment shipment. Threads can detect status when checking carrier directly. |
carrier | string/enum | Not Implemented | Yes | Important for tracking in carrier integrations. |
shippingSpeed | string/enum | Not Implemented | Yes | Enforcing location-based policies. Confirming a correct shipping address. Updating the shipping address. Issuing reshipments to the correct address. |
shippingAddress | Address | Not Implemented | Yes | Estimated delivery date of shipment. Used for SLA-based policies. Unlocks more nuanced responses to the consumer regarding their order status. |
Address #
Providing structure to addresses will enable more advanced behaviors in Threads and permit more precise communications to Customers.
Attribute Name | Type | Gladly Hero Required | Gladly Sidekick Required | Notes |
name | string | Not Implemented | No | The name of the recipient. |
phone | string | Not Implemented | No | The phone number of the recipient in E.164 format. |
street1 | string | Not Implemented | Yes | |
street2 | string | Not Implemented | Yes, if it exists | |
city | string | Not Implemented | Yes | |
state | string | Not Implemented | Yes | |
country | string | Not Implemented | Yes | |
zip | string | Not Implemented | Yes |
FLIGHT Transactions #
When first displayed, flights are collapsed.

Each flight can be manually expanded by an Agent.

To accomplish this, each FLIGHT type transaction object uses the following structure. You can extend each transaction object further with more attributes, though you will need to engage with Professional Services to configure them to display in the Gladly Customer Profile.
If any of the below-reserved fields are not sent as part of your Detailed Lookup response, the spaces for them will be left blank.
Text
{
"departureTime": "2017-04-01T08:00:00",
"destination": "SFO",
"flightNumber": "12345",
"origin": "SEA",
"pnrCode": "A12345",
"status": "ON TIME",
"type": "FLIGHT"
}
This is how the above reserved keys map to the layout:

STAY Transactions #
When first displayed, stays are collapsed.

Any stay that is current or in the future is grouped in the Current & Future panel.

An Agent can manually expand each stay. Agents can also hover over each stay to view their image address and neighborhood
Current Stay #

Other stays are in the Previous panel.

Tooltip #
View clipped stay details.

To accomplish this, each STAY type transaction object uses the following structure. You can extend each product or transaction object further with more attributes, though you will need to engage with Professional Services to configure them to display in the Gladly Customer Profile.
If any of the below reserved fields are not sent as part of your Detailed Lookup response, the spaces for them will be left blank.
Text
{
"type": "STAY",
"checkInTime": "2021-01-01T00:00:00.000Z",
"checkOutTime": "2021-10-01T00:00:00.000Z",
"timezone": "Pacific Standard Time",
"url": "https://www.gladly.com",
"title": "Reservation 1",
"address": "San Francisco",
"neighborhood": "Financial District"
}
This is how the above reserved keys map to the layout:

SUBSCRIPTION Transactions #
When first displayed, subscription transactions are collapsed:

Agents can expand each transaction to see details such as Status, Billing Frequency, Product, and more. The most recent canceled transaction will be at the top of the list if there are multiple canceled transactions.

Agents are also now empowered to update Customer subscriptions. When they hover over Product, they can see an associated image. Agents can also cancel active subscriptions and reactivate canceled subscriptions.

To accomplish this, each SUBSCRIPTION type transaction object uses the following structure. You may extend each product or transaction object further with more attributes, though you will need to engage with Professional Services to configure them to display in the Gladly Customer Profile.
If any of the below reserved fields are not sent as part of your Detailed Lookup response, the spaces for them will be left blank.
Text
{
"type": "SUBSCRIPTION",
"subscriptionId": "1234567",
"status": "Active",
"createdAt": "2020-08-01T12:00:00.000Z",
"updatedAt": "2020-08-01T12:00:00.000Z",
"billingIntervalUnit": "day", //one of: day, week, month, quarter, or year
"billingIntervalNumber": "4",
"nextBillingAt": "2020-08-01T12:00:00.000Z",
"cancellationDate": "2020-08-01T12:00:00.000Z",
"cancellationReason": "text for cancellation reason",
"quantity": "5",
"price": "$10",
"products": [
{
"name": "Shoes",
"productId": "12345",
"sku": "54321",
"imageUrl": "https://www.image.com/1"
}
]
}
This is how the above reserved keys map to the layout:
Attribute Name | Type | Required |
---|---|---|
type | Set this to static String “SUBSCRIPTION” | Yes |
subscriptionId | String | Yes |
status | One of String: Active Cancelled Expired Future In Trial Non-Renewing Paused | Yes |
createdAt | Date | No |
updatedAt | Date | No |
billingIntervalUnit | One of String: day week month quarter year | No – if you’d like to display this information, you must also send billingIntervalNumber Once you populate this information, you’ll also need to ask the Gladly Support team to display an attribute called billingFrequency (with label name Billing Frequency) in your Subscriptions transactions panel. |
billingIntervalNumber | String containing an integer (e..g: “4” and NOT 4) | No – if you’d like to display this information, you must also send billignIntervalUnit |
nextBillingAt | Date | No |
cancellationDate | Date | No |
cancellationReason | String | No |
quantity | String containing an integer | No |
price | String | No |
products | Array | No |
Product (nested within Subscription)
Attribute Name | Type | Required |
---|---|---|
name | string | No |
productId | string | No |
sku | string | No |
imageUrl | image URL for product in subscription | No |
GENERIC Transactions #
Generic transactions display as boxes that cannot be expanded or collapsed, like such:

To accomplish this, each GENERIC type transaction object uses the following structure. You may extend each product or transaction object further with more attributes, though you will need to engage with Professional Services to configure them to display in the Gladly Customer Profile. If any of the below reserved fields are not sent as part of your Detailed Lookup response, the spaces for them will be left blank.
Text
{
"type": "GENERIC"
....
}
Any additional attributes you send in each GENERIC type object will display in the box so long as Gladly has allowed them to be displayed. For example, in the screenshot above, the transactions array looks like this:
Text
[{
"type": "GENERIC"
"name": "RES 1"
}, {
"type": "GENERIC"
"name": "RES 2"
}]