Mailkit’s Guide to Schemas - Part 3
In order to implement schemas in your email templates, it is helpful to know which schemas exist and are supported by major Mailbox Providers (MBPs), as well as some example use cases for each. This article covers schemas for transactional mail, and part 4 will cover schemas for bulk marketing mail.
Types of Schema Markup
Inbox Actions
- In-App Actions/One-Click Action
- Go-To Actions
Schemas for orders
- Order
- ParcelDelivery
- Invoice
Schemas for Reservations
- Bus Reservation
- Event Reservation
- Flight Reservation
- Hotel Reservation
- Rental Car Reservation
- Restaurant Reservation
- Train Reservation
Inbox Actions
In-App Action
We will refer to both One-Click Actions and In-App Actions interchangeably, but they are the same thing. They are actions that are taken directly from the inbox, without navigating to a different webpage (hence, in-app), and even without having to open the campaign to interact with the content. They are also actions that can only happen once (hence, one-click).
Some example use cases for One-Click Actions could be approving an expense, confirming a signup after registering on a website (ConfirmAction) or saving a song, one-time offer, or movie to a queue (SaveAction). After One-click actions are completed, there is a small check mark next to the text of the button.


JSON-LD
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ConfirmAction",
"name": "Confirm Registration",
"handler": {
"@type": "HttpActionHandler",
"url": "https://mailkit.com"
}
},
"description": "Confirm your registration"
}
</script>
Microdata
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="potentialAction" itemscope itemtype="http://schema.org/ConfirmAction">
<meta itemprop="name" content="Confirm Registration"/>
<div itemprop="handler" itemscope itemtype="http://schema.org/HttpActionHandler">
<link itemprop="url" href="https://mailkit.com"/>
</div>
</div>
<meta itemprop="description" content="Confirm your registration"/>
</div>


JSON-LD
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "SaveAction",
"name": "Coupon code 3PLCS3AXAK",
"handler": {
"@type": "HttpActionHandler",
"url": "https://mailkit.com"
}
},
"description": "Enjoy this one-time coupon code"
}
</script>
Microdata
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="potentialAction" itemscope itemtype="http://schema.org/SaveAction">
<meta itemprop="name" content="Coupon code 3PLCS3AXAK"/>
<div itemprop="handler" itemscope itemtype="http://schema.org/HttpActionHandler">
<link itemprop="url" href="https://mailkit.com"/>
</div>
</div>
<meta itemprop="description" content="Enjoy this one-time coupon code"/>
</div>
Go-to Action
Go-To Actions are so called because these schemas will navigate the end recipient to a webpage to take additional actions. They are also actions that can be taken more than once. The two main kinds of Go-To Actions are TrackAction and ViewAction (pictured above).

ViewAction schema example
ViewAction
A ViewAction button will redirect the user to a website where they will, for example, complete a purchase, add baggage to a flight, make a change to an event, etc.
Publisher data
This is perhaps the easiest schema to add, as it adds information about the organization sending the email by including a publisher field. It is also possible to add the Organization schema to any email (including promotional mail). To illustrate an example of how this looks, check out the code snippets below, which include both ViewAction and Publisher schema, together.
JSON-LD
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"url": "https://mailkit.com",
"name": "View order"
},
"description": "Check out your Alza order"
},
"publisher": {
"@type": "Organization",
"name": "Alza.cz",
"url": "https://www.Alza.cz",
"url/googlePlus": "https://logo.jpg"
}
</script>
Microdata
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="potentialAction" itemscope itemtype="http://schema.org/ViewAction">
<link itemprop="target" href="https://mailkit.com"/>
<meta itemprop="name" content="View order"/>
</div>
<meta itemprop="description" content="Check out your Alza order"/>
<div itemprop="seller" itemscope itemtype="https://schema.org/Organization">
<meta itemprop="name" content="Alza.cz"/>
<meta itemprop="url" href="https://www.Alza.cz" content="https://www.Alza.cz" />
<img itemprop="logo" src="https://logo.jpg" alt="Alza Logo" height="0" />
</div>
</div>

Example using the TrackAction schema code below
TrackAction
This action allows you to navigate to a tracking website where you can track a package that is being delivered. In this schema, you can include information such as delivery address, expected shipping time frame, carrier information such as name and tracking link, tracking code, and information about the order itself - although it is also possible to have minimal schema like the example snippet below.
JSON-LD
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "TrackAction",
"agent": {
"@type": "Person",
"name": "John"
},
"object": {
"@type": "Product",
"name": "fitbit"
},
"deliveryMethod": {
"@type": "DeliveryMethod",
"@id": "http://fedex.com/track/1234567890"
}
}
</script>
Microdata
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="potentialAction" itemscope itemtype="http://schema.org/TrackAction">
<link itemprop="target" href="http://fedex.com/track/1234567890"/>
</div>
<div itemprop="itemShipped" itemscope itemtype="http://schema.org/Product">
<meta itemprop="name" content="fitbit"/>
</div>
<div itemprop="partOfOrder" itemscope itemtype="http://schema.org/Order">
<meta itemprop="orderNumber" content="176057"/>
</div>
</div>

Test Email Markup: Utilizing both the ParcelDelivery and TrackAction functionality to test with the AppScript method described below. Seen from Onet inbox.
Schemas for Orders
Order, ParcelDelivery, and Invoice are all related to placing an order.
Order and ParcelDelivery, a match made in heaven
An Order schema acts as a confirmation or receipt for your order. The most basic version of the Order schema shares details about the items purchased, quantities, and price. This can remain basic, or it can also include a link directly to their order on the website using the ViewAction functionality mentioned above. This is noteworthy because it is possible to combine multiple kinds of schemas in one code (efficiency!). And finally, it is also possible to include all this, as well as billing data. There are more examples of this described later in this article.
Like Order, ParcelDelivery also has a basic version as well as more elaborate schema parameters that include shipping information and a TrackAction functionality (described above in Inbox Actions). While simple schemas are completely fine (and certainly, something is better than nothing), the more data you are able to provide MBPs, the easier it is for them to parse your email and surface relevant information to your customers. Check out the image above (blue Track package button) to see a more complicated example of the ParcelDelivery schema for an order using TrackAction functionality.
JSON-LD
<script type="application/ld+json">
[{
"@context": "http://schema.org",
"@type": "ParcelDelivery",
"deliveryAddress": {
"@type": "PostalAddress",
"name": "Josephine Skinner",
"streetAddress": "420 Willie Mays Plaza",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"addressCountry": "US",
"postalCode": "94107"
},
"originAddress": {
"@type": "PostalAddress",
"name": "John Frank",
"streetAddress": "25 Willie Mays Plaza",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"addressCountry": "US",
"postalCode": "94107"
},
"expectedArrivalFrom": "2025-02-03T12:00:00-08:00",
"expectedArrivalUntil": "2025-12-010T12:00:00-08:00",
"carrier": {
"@type": "Organization",
"name": "FedEx",
"url": "http://fedex.com/"
},
"itemShipped": {
"@type": "Product",
"name": "Dress",
"url": "https://mailkit.com",
"image": "https://image.jpg",
"sku": "B123DRPDNE"
},
"trackingNumber": "1234567890",
"trackingUrl": "http://fedex.com/track/1234567890",
"potentialAction": {
"@type": "TrackAction",
"url": "http://fedex.com/track/1234567890"
},
"hasDeliveryMethod": {
"@type": "ParcelService",
"name": "http://schema.org/ParcelService"
},
"partOfOrder": {
"@type": "Order",
"orderNumber": "GE71234566789L",
"merchant": {
"@type": "Organization",
"name": "Your Favorite Store",
"sameAs": "https://mailkit.com"
},
"orderStatus": "http://schema.org/OrderInTransit"
}
}]
</script>
Microdata
<div itemscope itemtype="http://schema.org/ParcelDelivery">
<div itemprop="deliveryAddress" itemscope itemtype="http://schema.org/PostalAddress">
<meta itemprop="name" content="Josephine Skinner"/>
<meta itemprop="streetAddress" content="420 Willie Mays Plaza"/>
<meta itemprop="addressLocality" content="San Francisco"/>
<meta itemprop="addressRegion" content="CA"/>
<meta itemprop="addressCountry" content="US"/>
<meta itemprop="postalCode" content="94107"/>
</div>
<div itemprop="originAddress" itemscope itemtype="http://schema.org/PostalAddress">
<meta itemprop="name" content="John Frank"/>
<meta itemprop="streetAddress" content="25 Willie Mays Plaza"/>
<meta itemprop="addressLocality" content="San Francisco"/>
<meta itemprop="addressRegion" content="CA"/>
<meta itemprop="addressCountry" content="US"/>
<meta itemprop="postalCode" content="94107"/>
</div>
<meta itemprop="expectedArrivalFrom" content="2025-03-10T12:00:00-08:00"/>
<meta itemprop="expectedArrivalUntil" content="2027-12-010T12:00:00-08:00"/>
<div itemprop="carrier" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="FedEx"/>
<link itemprop="url" href="http://fedex.com/"/>
</div>
<div itemprop="itemShipped" itemscope itemtype="http://schema.org/Product">
<meta itemprop="name" content="Dress"/>
<link itemprop="url" href="http://mailkit.com"/>
<link itemprop="image" href="https://image.jpg"/>
<meta itemprop="sku" content="B123DRPDNE"/>
</div>
<meta itemprop="trackingNumber" content="1234567890"/>
<link itemprop="trackingUrl" href="http://fedex.com/track/1234567890"/>
<div itemprop="potentialAction" itemscope itemtype="http://schema.org/TrackAction">
<link itemprop="url" href="http://fedex.com/track/1234567890"/>
</div>
<div itemprop="hasDeliveryMethod" itemscope itemtype="http://schema.org/ParcelService">
<meta itemprop="name" content="http://schema.org/ParcelService"/>
</div>
<div itemprop="partOfOrder" itemscope itemtype="http://schema.org/Order">
<meta itemprop="orderNumber" content="GE71234566789L"/>
<div itemprop="merchant" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="Your Favorite Store"/>
<link itemprop="sameAs" href="http://mailkit.com"/>
</div>
<link itemprop="orderStatus" href="http://schema.org/OrderInTransit"/>
</div>
</div>

Invoice
Invoice is probably the most simple schema in this category. Expect to find parameters about the total payment due, due date, and associated Organization.
JSON-LD
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Invoice",
"description": "January 2015 Visa bill.",
"url": "http://acmebank.com/invoice.pdf",
"broker": {
"@type": "BankOrCreditUnion",
"name": "ACME Bank"
},
"accountId": "xxxx-xxxx-xxxx-1234",
"customer": {
"@type": "Person",
"name": "Jane Doe"
},
"paymentDueDate": "2015-01-30T12:00:00",
"minimumPaymentDue": {
"@type": "PriceSpecification",
"price": 15.00,
"priceCurrency": "USD"
},
"totalPaymentDue": {
"@type": "PriceSpecification",
"price": 200.00,
"priceCurrency": "USD"
},
"billingPeriod": "P30D",
"paymentStatus": "https://schema.org/PaymentDue"
}
</script>
Microdata
<div itemscope itemtype="https://schema.org/Invoice">
<h1 itemprop="description">January 2015 Visa</h1>
<a itemprop="url" href="http://acmebank.com/invoice.pdf">Invoice PDF</a>
<div itemprop="broker" itemscope itemtype="https://schema.org/BankOrCreditUnion">
<b itemprop="name">ACME Bank</b>
</div>
<span itemprop="accountId">xxxx-xxxx-xxxx-1234</span>
<div itemprop="customer" itemscope itemtype="https://schema.org/Person">
<b itemprop="name">Jane Doe</b>
</div>
<time itemprop="paymentDueDate">2015-01-30</time>
<div itemprop="minimumPaymentDue" itemscope itemtype="https://schema.org/PriceSpecification">
<span itemprop="price">15.00</span>
<span itemprop="priceCurrency">USD</span>
</div>
<div itemprop="totalPaymentDue" itemscope itemtype="https://schema.org/PriceSpecification">
<span itemprop="price">200.00</span>
<span itemprop="priceCurrency">USD</span>
</div>
<meta itemprop="billingPeriod" content="P30D" />starts:2014-12-21 30 days
<link itemprop="paymentStatus" href="https://schema.org/PaymentDue" />
</div>
Schemas for Reservations
Reservation schemas, depending on the type, will have information such as ticket, seat number, reservation number, date, departure and arrival locations (for a transportation reservation), status, and passenger data. These schemas can also vary in complexity, depending on how much functionality you want to build into the email.

Example schema for a flight reservation
I am not in the business of overwhelming people, and considering just how many different types of schema there are for Reservations, it is far more streamlined to link out to the code samples:
- Bus Reservation
- Event Reservation
- Flight Reservation
- Hotel Reservation
- Rental Car Reservation
- Restaurant Reservation
- Train Reservation
Who supports schemas?
Google and Yahoo
Most of the code samples in this series of articles are pulled straight from Google or schema.org documentation. However, you will be relieved to learn that Yahoo honors the Gmail schema “annotations” syntax - so there is no need to code differently for Yahoo.
That said, Yahoo (as well as Google) has strict standards for reputation and engagement in order for them to extract schemas from mail, and this is done on a sending domain basis. Furthermore, it is always a good idea for marketers to test how their content will appear in both desktop and mobile across different devices and mailbox providers.
Seznam
Seznam is also newly supporting schemas in their inboxes. The two schemas in particular to keep in mind for Seznam are Order and inTransit (ParcelDelivery). Right now, Seznam is only supporting transactional mail schemas - not promotional.

Onet
As of October 2024, Onet announced that they are supporting schemas. In my own testing, I was able to see Order tracking information, and according to their website, they will also display flight information as well. With this in mind, it is always a good idea to do your own extensive testing prior to sending campaigns.

Example of what Order tracking looks like in Onet - this button will appear at the top of an email with the TrackAction schema.

Example flight information email as seen from Onet
Web.de/GMX, Zoho, and more!
Web.de is now supporting schemas in email - specifically Order and ParcelDelivery - but only for senders who comply with their security standards and best practices for email. It is possible to ask additional questions using the form linked on this page.
The same resource linked above mentions that Zoho Mail is also supporting schema in emails, and the article here includes images about what to expect from these schemas in action.
There are other MBPs that support schemas, but they are only supporting promotional schemas at the moment. Look out for Part 4 to hear those details.
Parts 4 coming soon!
This guide is divided into multiple articles, so stay tuned for part four in the coming weeks. We'll cover:
✔ Which MBPs support promotional schemas
✔ Common use cases for specific schemas
✔ And include code snippets designed to be copied and pasted into templates