# Welcome to Poplar

Welcome to **Poplar**, your tech-enabled direct mail partner.\
We make it easy to launch **personalized, data-driven campaigns** that print, ship, and land in homes fast.

This guide will help you set up your account, create your first campaign, and start tracking results in just a few steps. Whether you’re a marketer or developer, you’ll find everything you need to get your mail moving.

## Getting Started

{% embed url="<https://drive.google.com/file/d/1gOEAJopJCTGJ6YFuF4oQse0PvOrTf8hn/view?usp=sharing>" %}

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Build Your First Campaign</strong></td><td>A guide through campaign settings, capabilities, and how to set up in minutes.</td><td><a href="/files/9a5iW4GwUGR1Tx7YwGod">/files/9a5iW4GwUGR1Tx7YwGod</a></td><td></td><td><a href="/pages/kmkwDLVjWXErNIRFoqid">/pages/kmkwDLVjWXErNIRFoqid</a></td></tr><tr><td><strong>Creative Templates</strong></td><td>Download a full suite of Adobe, HTML, &#x26; PNG/JPG Templates - complete with best practice suggestions.</td><td><a href="/files/KlhhJLuaKiiKyig8uEIF">/files/KlhhJLuaKiiKyig8uEIF</a></td><td></td><td><a href="/pages/FkV9UXelsxNK420lzv4X">/pages/FkV9UXelsxNK420lzv4X</a></td></tr><tr><td><strong>Send Samples</strong></td><td>Send yourself a physical sample of your mail piece pre-launch.</td><td><a href="/files/dF3pbPzoMYMwsR4U7quv">/files/dF3pbPzoMYMwsR4U7quv</a></td><td></td><td><a href="/pages/hfJGfNTjOas2DF7F8Kt4">/pages/hfJGfNTjOas2DF7F8Kt4</a></td></tr></tbody></table>

## How Poplar Works

Whether you’re a **marketing manager**, **CRM specialist**, or **agency onboarding client accounts**, the Poplar platform provides an easy and seamless way to introduce Direct Mail into your marketing stack.

### One Time Sends vs. Triggered Campaigns

A **One Time Send** or **batched mailing** is launched to a single static audience list; great for sales events, product launches, seasonal promos, or prospecting lists. Simply upload a CSV of recipients to your Audiences, create a campaign and upload creative, then head to the One Time Sends tab of your campaign to select your audience to launch in minutes.

**Triggered** sends are **programmatic** - launched automatically when customers take specific actions in your CRM or ESP (just like an email trigger).\
Common examples:

* Abandoned cart reminders
* Post-purchase thank-yous
* Win-back or re-engagement campaigns

[Integrate](https://docs.heypoplar.com/integrations/) Poplar with your CRM/ESP to start sending automatically. All flows and dynamic segmentation is managed outside of Poplar, from within your CRM or ESP.

### In-home Timeline

A campaign can be created, and creative artwork uploaded in under 5 minutes. To then launch, you want to either initiate a One Time Send (also takes a matter of minutes) or set your triggered integration live. Once launched, your mailers will move from processing to production before being handed off to USPS for shipping. Poplar offers two shipping speeds: **First Class** and **Standard**.

<figure><img src="/files/MRdJw4iwNIVLf4EKkQcK" alt=""><figcaption></figcaption></figure>

Poplar is optimized for speed, so mailers are sent to production almost immediately and begin printing within 24 hours. From your campaign's **History** section, you can click into individual mailers and scroll down to the **Event Log** to see a live timeline of the production and mailing process.

{% hint style="warning" %}
**We receive our mailing status scan data directly from USPS.** It is important to note that because of the nature of USPS data collection and tracking, a small percentage of mailers may not receive **Delivery** scans - this is normal and we still assume successful delivery. \
\
*For additional info or questions, please reach out to **<support@heypoplar.com>**.*
{% endhint %}

### Attribution & Reporting

Poplar uses **last-touch order matching** to calculate attribution. When you share transactional data with the platform (via Shopify, Orders API, or CSV upload), Poplar matches mail recipients to resulting orders so you can measure campaign impact and ROI.

For incremental metrics, make sure you always set a **Holdout** percentage when creating your campaign.

{% hint style="warning" %}
**Poplar does not track promo code redemptions or QR code scans,** we consider order matching to paint a more accurate picture of campaign success. Most code redemptions and QR code scans can be tracked using the platform that generated them.
{% endhint %}

## Account & Team Management

When creating your Organization, you'll be lead through a number of steps prompting you to enter info such as address and phone number, team member invites, payment plan selection, and more. Once you've completed onboarding, you can later access all of these settings by clicking your account icon in the bottom left:

<figure><img src="/files/mO2GgGBqyTOhonvkHve6" alt="" width="232"><figcaption></figcaption></figure>

Multiple organizations can be created and navigated between via **Switch Organization** - our agency clients will find this particularly useful.

## Data Privacy Compliance

Poplar has built in features to make data privacy compliance easy for our clients. Poplar is set up to process both right to delete and right to access request types. This is separate from an opt out which is handled more as a default audience.&#x20;

1. **Data Subject Request API**
   1. We have 2 endpoints, an [opt-out/do not mail endpoint](https://developers.heypoplar.com/endpoints/do-not-mail) that will add submissions directly to a global opt out list for your account as well as a [data subject request (DSR) endpoint](https://developers.heypoplar.com/endpoints/data-subject-requests) that can process the right to delete and right to access requests programmatically. [View API Documentation](https://developers.heypoplar.com/)
2. **In Platform CSV Upload**
   1. You can upload a CSV of deletion or access requests as well as review historical requests directly from the UI: <https://app.heypoplar.com/account/data_subject_requests>
   2. Formatting the CSV should be a single type of request per submission and use the standard audience fields. I.e. email, address\_1, address\_2, city, state, postal\_code.&#x20;

### Share Local Media & Poplar Joint Clients

If you work across SLM, Poplar opt outs will apply to all of your client data across our business lines.&#x20;

#### Additional Notes:

1. Data deletions submitted should generally occur within 24 hours.&#x20;
2. Please submit all types of PII that you have when submitting opt outs or running a data deletion we do not have any type of global user profiles so if you submit an email it will only run a deletion on any records containing that email (we don’t automatically associate an email with addresses on an order for example)

Data deletions and opt outs only apply to an individual client's data, if you found this article as a consumer wishing to opt out of mailings please contact the Brand directly via their website. To opt out of Share Local Media Shared Envelopes you can go to <https://opt-out.sharelocalmedia.com/>


# Creative Templates

Poplar offers five mail formats: Bi-folds (long and short), Tri-fold, three different sized Postcards, and Letters available in Black & White or Color.

<figure><img src="/files/yQvJxWpNNySJGSOJ6Hfm" alt=""><figcaption></figcaption></figure>

## Template Downloads

The .zip files below contain **InDesign, Illustrator, HTML, PDF,** and **PNG/JPG** templates. The templates are pre-formatted to include 0.125in bleed (*except for letters*) on all four sides along with trim, safe zone, and address block indicators.&#x20;

{% hint style="info" %}
**Our address block is applied to the creative after uploading so please remove the placeholder beforehand.**
{% endhint %}

**Designers** :sparkles:\
For additional guidance on export instructions, print best practices, and troubleshooting please review our **Creative Guides** section!

### **Postcards**

{% file src="/files/b71wUJxJTSxW1Ye1cm0U" %}

{% file src="/files/StBeuebDybOhlfcfp2F3" %}

{% file src="/files/L2hvPj3HelaReXNnVGdU" %}

### Bi-folds & Tri-fold

The majority of Bi-fold and Tri-folds will be folded and held together with a tabbed clasp by default. However, when mailing high volume batches adhesive may be used to optimize production time.

{% file src="/files/oMD9aRDInxJfAceKLCZ5" %}

{% file src="/files/3o3Mdsjpd3QbLnAUqGVO" %}

{% file src="/files/BlCQRlyZRZmDBMrKg1z6" %}

### Letter

Our letter format is an excellent option if you'd like to target recipients with a longer or move private message. They're also preferable when mailing to commercial addresses, as other formats could be subject to a lower delivery rate if the commercial address is not accepting promotional mail.

{% file src="/files/ElRaVKrEIWUcCmLVTioF" %}

{% file src="/files/8bdJLgD4pfsZDoQmc6il" %}

## Template Specs

**Static** template files should be used for creative designs that do not utilize personalization or variable content:

* Adobe InDesign
* Adobe Illustrator
* **PDF/X-4 or PDF/X1-a**
* PNG/JPG

For guidance on exporting and print best practices, please see our [**Static: PDF & PNG/JGP**](/creative-guides/static-pdf-and-png-jpg) Guide.

**Dynamic** HTML template files must be used for creative designs that utilize personalization or variable content such as first name, rolling expiration date, unique promo code, etc. If no one on your team has sufficient knowledge of HTML /CSS, our team is happy to help! Just follow the instructions on this form to submit your design to be translated into HTML:

{% embed url="<https://heypoplar.com/creative-translations>" %}

For guidance on coding, merge tags and print best practices, please see our [**Dynamic: HTML/CSS**](/creative-guides/dynamic-html-css) Guide.

### Dimensions, Bleed & Safe Zone

Postcards, Bi-folds & Tri-folds are always printed at larger dimensions, then trimmed down to final size to ensure no gaps or unprinted areas appear on the final product. Before uploading to the platform, **your files must include a 0.125" bleed on all four sides.**

<figure><img src="/files/h5v3ZMtFapK2UOcFyVfz" alt=""><figcaption></figcaption></figure>

Bi-folds are available in two different formats, **Short 17 x 5.5 (folds left to right)** and **Long 8.5 x 11 (folds top to bottom)**, each panel on both formats are the same size - just folded in a different direction. Both templates are pre-formatted to include a 0.125" at each edge.

**Letters** are printed straight on to 8.5 x 11 standard print paper and do **NOT** need a bleed, as they are not trimmed down after print.

A **Safe Zone** is also specified to prevent any text or important copy from running too close to the edge of the mail piece. **Mail pieces should always be designed edge-to-edge (no white bleed) at and contain high-resolution images at 300ppi/dpi for best possible print quality.**

{% hint style="info" %}
***Example***\
If you're designing a 4" x 6" postcard, add an extra 0.125" to all four sides to bring the total file dimensions to 4.25" x 6.25". The safe zone should be *inset* from the 4"x 6" trim by 0.125" on all four sides so all text, logos, terms & conditions, etc. should appear within 3.75" x 5.75".
{% endhint %}

<table><thead><tr><th width="291.69140625">Postcard Dimensions at Upload</th><th width="205.765625">After Trim</th><th>Safe Zone</th></tr></thead><tbody><tr><td><strong>4.25" x 6.25"</strong> or 1275 x 1875px</td><td>4" x 6"</td><td>3.75" x 5.75"</td></tr><tr><td><strong>6.25" x 9.25"</strong> or 1875 x 2775px</td><td>6" x 9"</td><td>5.75" x 8.75"</td></tr><tr><td><strong>6.25" x 11.25"</strong> or 1875 x 3375px</td><td>6" x 11"</td><td>5.75" x 10.75"</td></tr></tbody></table>

<table><thead><tr><th width="292.28515625">Bi-fold Dimensions at Upload</th><th width="206.37890625">After Trim</th><th>Safe Zone</th></tr></thead><tbody><tr><td><strong>17.25" x 5.75"</strong> or 5175 x 1725px</td><td>17" x 5.5"</td><td>16.75" x 5.25"</td></tr><tr><td><strong>8.75" x 11.25"</strong> or 2625 x 3375px</td><td>8.5" x 11"</td><td>8.25" x 10.75"</td></tr></tbody></table>

<table><thead><tr><th width="292.28515625">Tri-fold Dimensions at Upload</th><th width="206.37890625">After Trim</th><th>Safe Zone</th></tr></thead><tbody><tr><td><strong>16.625" x 8.75"</strong> or 4988 x 2625px</td><td>16.375" x 8.5"</td><td>16.75" x 5.25"</td></tr></tbody></table>

{% hint style="danger" %}
Our address block is **auto-applied** during upload to the platform, please **delete the placeholder** before upload and **DO NOT include a white block in your back artwork.** We take care of that for you.
{% endhint %}

### Address Block

The highlighted orange address block placeholder in the template files indicate where the platform will auto-apply the address block upon upload. **It is very important to delete this placeholder entirely - do not leave a white box in its place.** For best results, provide creative with background or design that runs fully behind this block.

<figure><img src="/files/wsnwM4s9QzmkRuBtXF8V" alt=""><figcaption></figcaption></figure>

Make sure to never place critical text in this area, as the address block will be layered on top prior to printing the piece. The printed color of the address block is white/paper color with text and postage indicia rendered in black - this area is not customizable.

{% hint style="warning" %}
The address block is not consistently proportionate across postcard formats, so it is very important to follow the template for the corresponding postcard size.

**Example**\
The address block for the 4x6 postcard takes up significantly more space on the back than it does on a 6x9 postcard, so if you're sizing down a design the back will have to be redesigned.
{% endhint %}


# Design Best Practices

Best practice recommendations for content placement and attention-grabbing designs. For guidance on exporting, print settings and troubleshooting please see our Creative Guides!

## Print Standards

For the crispest, most vibrant and complete imagery, ensure the following:

* **Crop & Bleed:** All artwork should include minimum .125" bleed (all sides), **with no crop and bleed marks present** on the final artwork.
* **Color:** All brand colors should be CMYK. RGB colors will be more muted/dull when converted.
* **Sizing & Format:** Ensure sizing is accurate to format, saved as an Adobe \[PDF/X-4:2008]. \
  *See* [*Static: PDF & PNG/JPG*](/creative-guides/static-pdf-and-png-jpg)
* **Vector Logos:** All logos should be SVG vector format for best results. Type should be live or **outlined.**
* **Mailing Elements:** Remove Address Box placeholder prior to upload.
* **High-res Images:** High-res images, minimum 300dpi. CMYK color mode.

<figure><img src="/files/0T5HxkzwHwyheBfufV4v" alt=""><figcaption></figcaption></figure>

## Design Principles

Great direct mail design doesn’t just look good - it drives action.\
Use these five design principles to create mailers that are clear, consistent, and conversion-ready:

### Hierarchy

**Guide the reader’s eye.**\
Use size, weight, color, and visual treatment to make your most important information, like the offer or CTA, stand out first. Secondary details should support, not compete, for attention.

### Contrast

**Create visual energy.**\
Strong contrast between colors, fonts, and elements makes your piece easier to read and more engaging. Contrast directs attention where it matters most and ensures every detail is legible at a glance.

<figure><img src="/files/dXc5qq42e0hBFFofoACY" alt=""><figcaption></figcaption></figure>

### Balance

**Design with harmony in mind.**\
Distribute imagery, copy, and whitespace evenly so the layout feels intentional and uncluttered. A well-balanced composition draws attention to your hero message without overwhelming the recipient.

### **Repetition**

**Tell one cohesive story.**\
Keep your brand elements (color palette, typography, logo placement) consistent across the front and back of your mailer. Repetition builds familiarity, reinforces your offer, and helps the design feel unified.

### **Alignment**

**Polish the details.**\
Ensure all text, images, and icons line up cleanly. Consistent alignment adds a professional finish and prevents small visual errors from distracting from your message.

***

## Common Elements

Each element of your mailer plays a role in capturing attention and driving action.\
Use the following guidelines to make sure your creative feels cohesive, trustworthy, and conversion-focused.

<figure><img src="/files/QrBGDPKMB11I45YkPncd" alt=""><figcaption></figcaption></figure>

### <i class="fa-camera-polaroid">:camera-polaroid:</i> Imagery

Choose imagery that instantly communicates your value. Opt for bright, eye-catching visuals that support your offer and avoid overly dark or muted tones. When showcasing multiple products, use a clean grid layout to maintain balance and clarity.

### <i class="fa-hundred-points">:hundred-points:</i> CTA/Offer Copy

Your call-to-action is the heartbeat of the piece. Ensure your offer appears **clearly on both sides** of the mailer and use visual emphasis (such as bold type, colored strips, or badges) to make it pop. Keep it simple, action-oriented, and unmistakable.

### <i class="fa-calendar-circle-exclamation">:calendar-circle-exclamation:</i> Expiration Date

While we understand the need to create urgency - it's important to stay realistic about your expiration date. Because of the nature of Direct Mail, we recommend **at least** a 30 day expiration date from launch. This is because many people do not check their mailboxes everyday and once they do, they likely don't go through it and convert for another couple days.

### <i class="fa-comment">:comment:</i> Testimonials

Social proof builds instant trust. Incorporate authentic customer testimonials to validate your brand promise. If available, add recognizable media features or awards - they lend credibility with new audiences and reinforce confidence among returning customers.

### <i class="fa-qrcode">:qrcode:</i> QR Code/URL

Make it effortless to take the next step. Include a short, trackable URL or a **QR code** placed prominently on the front and back. When possible, remove any white background around the QR code so it blends seamlessly into your design while staying scannable.

### <i class="fa-copyright">:copyright:</i> Brand Prominence

Your brand should be unmistakable at a glance. Include **vector logos** on both sides of the mailer for clarity and consistency. Maintain enough whitespace around your logo to ensure it stands out and reinforces recognition over time.

### <i class="fa-icons">:icons:</i> Copy & Icons

Keep copy concise and conversational - never dense or intimidating.\
Highlight your core value proposition in clear, digestible language, and use **icons or visual cues** to break up longer text sections. Icons add rhythm and visual interest, making your message more approachable and scannable.


# Campaign Setup

Most of your ongoing work in Poplar happens on the Campaigns page. This is where you create, edit, launch, and monitor all of your direct mail campaigns.

The **Campaigns** page is your command center in Poplar. From here, you can create, edit, and track every direct mail campaign. At the top of the page, you’ll find an overview of your total mailed volume, total spend, and a date filter to explore performance by timeframe. You can also sort campaigns by in-home date, recent updates, or budget, and export a CSV for reporting.

<figure><img src="/files/pF82LWfVXlDtIU58Mc2i" alt=""><figcaption></figcaption></figure>

Click the **New Campaign** button in the top right to create a new campaign, or click into an existing campaign to see the **Overview, Results, Creative, One Time Sends, and Suppressions**.

## Campaign Settings

If your Poplar account is brand new, the only thing you'll see on the Campaign's page is the option to **Create New Campaign.**

### Name, Description & Purpose <a href="#name-description-purpose" id="name-description-purpose"></a>

The campaign name should be unique and reflect your use case - adding the date of creation is recommended, if you plan on having multiple campaigns of the same nature.

The description should contain any key information such as trigger filters, notes on audience suppression, or anything relevant worth communicating to team members.

Setting a campaign purpose helps communicate even more context across team members. It also gives the Poplar team insight into campaign goals and use cases so we can better assist with strategy and results analysis.

<figure><img src="/files/6GJLpL0Iy5ME4ivj7mnG" alt=""><figcaption></figcaption></figure>

## Additional Settings

### Address Enrichment (Email Retargeting) <a href="#address-enrichment" id="address-enrichment"></a>

Poplar's Address Enrichment feature matches *email addresses to physical addresses*. If you plan on passing only email addresses via trigger or when uploading a CSV list to be matched, ***Enable Address Enrichment*** when your campaign is created, or click the **Settings** tab in an existing campaign to adjust the settings. If you already have full address data for your target audience, leave this setting **Disabled.**

<figure><img src="/files/McsFGmJCrDyJFc1RTZho" alt=""><figcaption></figcaption></figure>

**Running the match process costs an extra $0.07 per piece.** You will only be charged if an append is successful, and will not be charged if a match can't be found. Under the campaign's History tab, the system will return `append failed` if it is unable to identify an address to match. If it's successful it'll change the status to `mailing_queued`.

Matched address data is **not** available for download and will be redacted from CSV mailing records downloaded from the History. The email addresses that found a match will be visible for tracking and attribution reports.

### Holdout <a href="#holdout" id="holdout"></a>

**Enable** a specified holdout percentage to compare conversions between mailed and unmailed groups and easily analyze **incremental lift.** Given that mailings are triggered or launched individually and in real time, the holdout percentage is approximate. The holdout percentage you set is just the odds that any individual mailing will move to the holdout group.

<figure><img src="/files/an7DUw00vvzmbOMFz0As" alt=""><figcaption></figcaption></figure>

We strongly recommend taking a holdout for campaigns sending at least \~5,000 pieces per month. If you're mailing at lower volumes, the holdout size is generally too small to get a high level of confidence in it, in which case this setting can be left **Disabled.**

**We do not recommend manually taking a holdout from your audience segment, outside of the platform.** It is best practice to set a holdout inside the platform to ensure the highest level of randomization, and allow for in-platform reporting of lift metrics.

**Holdouts are taken after Address Enrichment so matched addresses can be checked against your opt out list.** Any holdout requests are still charged for address enrichment, but the base print and mail fee is not charged when the mailing is in the holdout group.

### Budget

For triggered campaigns, you have the option to specify a daily and/or weekly budget cap. Budget caps are approximate and your actual costs may end up lower or higher.

<figure><img src="/files/ncJRcY1AJ8CHon8RKb7R" alt=""><figcaption></figcaption></figure>

The reason for this is because you are only charged after specific events occur in the mailing stream. This means if more data appends succeed than expected, or if more mailing addresses you've provided fail to validate, you may see the actual costs come in above or below your budget.

{% hint style="warning" %}
**Budget settings are ignored for One Time Sends.** The cost of the send will be charged to your account credits, and the card on file if the balance exceeds your account credits.
{% endhint %}

## Advanced Settings

### Address Strictness <a href="#address-strictness" id="address-strictness"></a>

Address Strictness can be set on a campaign-level, which will override the global strictness set under Account Settings - this is what determines the [**Address Validation**](/getting-started/audiences/address-validation) process. Varying rules are applied when uploading address data and when sending mailings to gauge the highest possible deliverability.

<figure><img src="/files/UQjjPUS0lgIy31Pq74oF" alt=""><figcaption></figcaption></figure>

### Attribution Window <a href="#reporting" id="reporting"></a>

You can set a custom attribution window when you create a new campaign. By default, Poplar uses a 90-day attribution window. This is the period of time for which you wish to credit a customer's transaction to the mailing. **We recommend a minimum of 30 days** to see the full scope of your results.

<figure><img src="/files/8QslKOXOWqNty5Yxa60G" alt=""><figcaption></figcaption></figure>

If you're sharing transactional data with Poplar, you **may** begin to see some results before your attribution window has fully passed. Since these number are considered incomplete, we suggest waiting until the attribution window has fully passed before evaluating the performance of your campaign.

### National Change of Address Forwarding (NCOA) <a href="#ncoa" id="ncoa"></a>

NCOA is a dataset of change-of-addresses filed by individuals and/or businesses with the USPS. The database is maintained by the USPS and we are required by the USPS run a check for every mail piece we send. [Learn more](https://postalpro.usps.com/mailing-and-shipping-services/NCOALink)

<figure><img src="/files/n49DmiHbJVXVWkwgoUWj" alt="" width="563"><figcaption></figcaption></figure>

**How is NCOA accounted for when using Geolocations, Geofences, and Zip & State suppressions?**

Our location and area-based checks are performed on the *original* address that you provide. These checks are run **prior** to NCOA, meaning if your recipient has moved, we do not account for the move in our checks.

However, if you are concerned about potentially mailing someone who has moved outside your delivery area(s), you can append the phrase " **or Current Resident"** to your recipient name field. This allows you to skip NCOA, meaning your mailer ultimately lands at the original address.

### Return Address (Optional) <a href="#return-address" id="return-address"></a>

Some campaign use cases require or would benefit from the option to show a unique return address from the one listed for your Organization. Return addresses only appear on **Letter** creatives.

<figure><img src="/files/8G41kliNO6ZgX1VrSESH" alt="" width="563"><figcaption></figcaption></figure>

## Suppression Settings

From the Suppressions tab you can control all campaign-level suppressions such as:

* **Audience Suppressions:** Select existing audiences to suppress.
* **Zip Code Allowlist:** Enter specific zip codes you want to mail to from your existing audience data.
* **State Allowlist:** Select specific states to allow or suppress (based on shipping or serviced areas).
* **Saved Location Options:** Apply saved location settings for brick & mortar locations.
* **Geofence Suppressions:** For even more custom Geolocation suppressions, set up an inclusion or exclusion geofenced area for an existing audience list.

{% hint style="warning" %}
Poplar **cannot** generate address data for custom locations based on the Geolocation or Geofence settings - you must already have mailing data for these to apply. \
\
For custom mailing lists reach out to **<hello@heypoplar.com>** with the details of your campaign and target demographic, and an account manager will assist you with next steps.
{% endhint %}


# Overview

Inside each campaign, the Overview tab shows a summary of performance: mailed counts, spend, and delivery status breakdowns with an adjustable date filter.

Click into a campaign to see its **Overview** page. At the very top you'll see other tabs for **Results, Creative, One Time Sends, Exceptions** (if you have any stalled mailers due to budget caps or insufficient funds), and **Settings.**&#x20;

<figure><img src="/files/y3kVeqE7jJd4KGmlKcoe" alt=""><figcaption></figcaption></figure>

Right below have the **Mailed** number which includes all requests that have or will likely move to production within the selected date range, total **Spend** which includes any requests that have or will incur a cost as it moves through the system (i.e. production and/or data appends), and **Last Mailed** date.&#x20;

<figure><img src="/files/Wytc46au763bYcAENzQ6" alt=""><figcaption></figcaption></figure>

For easy visuals there is also a bar graph logging Mailings Created and a pie chart of Mailing Statuses - this is especially useful for detecting a high number of suppressions or delayed mailings.

All data and graphs are controlled by the adjustable calendar. Click the three dots to the right of the calendar to **Pause** and **Archive** a campaign.

{% hint style="success" %}
**Campaign Active** indicates a campaign is *available* for launch. **A campaign will not start mailing unless it is hooked up to a live trigger or specifically launched via One Time Send.**
{% endhint %}

## Campaign Details

Below the graphs you'll find the Campaign details which includes your **Campaign ID** (for third-party integrations) along with a summary of the current campaign settings such as Address Enrichment, Holdouts, daily and weekly budgets.&#x20;

<figure><img src="/files/Ahu4Koq9MiLBSYQn3SSD" alt="" width="563"><figcaption></figcaption></figure>

To make adjustments to any of these, head to the **Settings** tab at the top.

## History

Keep scrolling down to find your campaign **History.** Here you will see all mailers, their status, and you can click into individual mailers to see creative on an individual level, as well as an **Event Log** to track the mailer through the mail stream in real time. These updates we receive directly from USPS scan data.

<figure><img src="/files/dCSWGjBjg0jXtVZbq8fH" alt=""><figcaption></figcaption></figure>

You can filter mailers by status and download a CSV of the History. Us the date picker at the top of the page to apply specific dates.&#x20;

When testing third-party integrations for triggered campaigns, you should see successful test requests come through the History section as well. You can click into each request to see the creative populate with the data sent over in your Request Details. This is how you confirm a successful integration before setting your campaign live to production.

## Exceptions

If you see an Exceptions tab appear at the top, this indicates there are mailers that did not process due to insufficient funds, daily/weekly budget exceeded, or insufficient [Promotion](/advanced-features/promotions) codes.&#x20;

Once funds or codes have been added, mailers can be retried.

<figure><img src="/files/aN0mdN00cHLATsSriaqz" alt=""><figcaption></figcaption></figure>


# Results

Share transactional data with Poplar for real-time attribution reports.

If you're sharing transactional data with the platform, the Results page will show a detailed attribution analysis divided by each creative mailed. See our [Transactions](/platform-basics/transactional-data) documentation on how to share Order data with the platform and read your attribution reports.

If the campaign has been in-home for the 30-90 day attribution window, this section breaks down campaign's success and is especially useful if comparing against a holdout group or A/B testing different creatives.

<figure><img src="/files/MkeMT1osIQ5OBR88yzwW" alt=""><figcaption></figcaption></figure>

Visible attribution metrics can be adjusted using the columns filter to the right. Descriptions of each metric appear when hovering your mouse over the information circle. Use the **Matchback View** to adjust the dashboard to **First Time Orders.**

{% hint style="info" %}
Metrics for First Time Orders can only be calculated if you're passing "new\_buyer" as true/false under your order "metadata." If you have the [Poplar Shopify App](/integrations/supported-platforms/shopify) installed, this data is passed automatically.
{% endhint %}

## **Download Raw Matches**

A record of raw matches can be downloaded can be downloaded on a campaign and account-wide level. Poplar reporting follows a last-touch attribution model across campaigns, so it could be that the mail piece was not the last one that the specific customer received. Use the **order\_id** column to trace an attribution back to a specific order.

### **Data Key**

Below is a guide to the columns you will receive in your CSV download:

| **match\_id**                                | ID unique to that match                                                                                 |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| **campaign\_id**                             | ID of the campaign                                                                                      |
| **campaign\_name**                           | Name of campaign                                                                                        |
| **campaign\_type**                           | Type of Campaign (Poplar, Shared, Solo, etc.)                                                           |
| **creative\_id**                             | Unique ID for the creative that matched                                                                 |
| **mh\_id**                                   | Unique ID of the mailing/holdout record that matched                                                    |
| **external\_order\_id**                      | External order ID for the match                                                                         |
| **customer\_id**                             | External Customer ID for the match/order                                                                |
| **order\_date**                              | Date the order was placed                                                                               |
| **order\_total**                             | Total amount of the order                                                                               |
| **cost\_per\_piece**                         | Cost of the individual mailer                                                                           |
| **status**                                   | Mailed or holdout                                                                                       |
| **send\_date**                               | Date the mailer was launched                                                                            |
| **attribution\_start\_date**                 | Date the first mailing was delivered, used as the in-home date for attribution                          |
| **envelope\_type**                           | Type of envelope, applicable to shared mail campaigns only                                              |
| **test\_cell**                               | Grouping of mailings, only used in certain cases                                                        |
| **customer\_first\_order\_within\_campaign** | True/False based on if it is this customer IDs first order attributed to this campaign                  |
| **is\_first\_time\_order**                   | True/False based on if this order is considered a New Buyer                                             |
| **id\_match**                                | True/False based on if this order matched on Customer ID between mailing list and transaction file      |
| **email\_match**                             | True/False based on if this order matched on email between mailing list and transaction file            |
| **bill\_match**                              | True/False based on if this order matched on billing address between mailing list and transaction file  |
| **ship\_match**                              | True/False based on if this order matched on shipping address between mailing list and transaction file |
| **manual\_send\_id**                         | ID of the manual send in Poplar                                                                         |
| **manual\_send\_name**                       | Name of the manual send in Poplar                                                                       |
| **metadata**                                 | Any metadata from that order                                                                            |


# Creative

Upload, Edit and manage A/B Tests from within the Creative tab.

After setting up your campaign, it's time to upload your creative files. These are essential for activating your campaign and testing integrations.

<figure><img src="/files/DwvPkJWG8d0NOrjDqN1F" alt="" width="563"><figcaption></figcaption></figure>

## **Accepted Formats**

Poplar accepts a wide variety of file types for upload. Please download our [Creative Templates](/getting-started/creative-templates) prior to designing, and make sure to reference our **Creative Guides** to avoid any last-minute issues or errors.

* **Static:** PDF, PNG/JPEG (Not suitable for personalization)
* **Dynamic:** HTML/CSS (Required for 1:1 personalization - recipient first name, unique promo or QR codes, etc.)

### **Before Uploading**

* [ ] Ensure files are separated into **Front** and **Back**. The "Back" should be the side where the address block will be applied.
* [ ] Designs are full coverage without white edges, crop marks, or address placeholders.
* [ ] Incorporate a 0.125in bleed on all sides. This means dimensions should be 4.25 x 6.25, 6.25 x 9.25, or 6.25 x 11.25 for postcards.
* [ ] Use high-quality images at 300 DPI/PPI and ensure static creatives are in **PDF/x-1a** or **PDF/X-4** format.

For more detailed guidelines and export instructions, check our [Static](/creative-guides/static-pdf-and-png-jpg) and [Dynamic](/creative-guides/dynamic-html-css) creative guides. If you're not familiar with HTML/CSS but wish to use dynamic merge tags, Poplar provides complimentary translation services to convert static designs to dynamic HTML. Learn more and submit your request here:

{% embed url="<https://heypoplar.com/creative-translations>" %}

## Upload Creative

Start by clicking into your campaign and navigating to the **Creative** tab, then click **New Creative** in the top right to begin:

{% stepper %}
{% step %}

### Creative Selection

First you'll select your format and give your creative a unique name, followed by Postage Type (shipping speed) and Paper Type.
{% endstep %}

{% step %}

### Upload Creative

Drag and drop your separate front & back files (single file for letter creatives) into the uploader. Each file must be one of the listed supportive formats and under 7MB. If you receive an error, please reference our [Print Troubleshooting](/creative-guides/print-troubleshooting) and **Creative Guides.**
{% endstep %}

{% step %}

### Set Merge Tags (HTML Only)

If you are uploading a dynamic creative that contains custom or promotion merge tags, you will be prompted to set a **Default** value (appears in the event of blank data) or select a Promotion list to link to the creative.

{% hint style="warning" %}
Name, city, and state are **NOT** considered custom merge tags and you will not be prompted to set a default value, because this data is pulled directly from the required mailing data.&#x20;

Reach out to **<support@heypoplar.com>** with any questions or concerns.
{% endhint %}
{% endstep %}

{% step %}

### Review & Finalize: View PDF

The final step in the upload process is reviewing the PDF proof of the final product after trim, with the address block and default merge tag data applied. **ALWAYS** closely review your proof by downloading it and opening the file outside of the browser, here are a few key things to look for:

* **Spelling errors, typos, blurry images or text, missing promo codes or QR codes**
* **Make sure the address block is on the correct side and not covering any important text or images**
* **Double check expiration dates are&#x20;*****at least*****&#x20;30 days from the launch date**
* **No text is being cut off or running too close to the edge**

<figure><img src="/files/Yhfh972kmD8qR1fm8iYE" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

## Creative Overview

Click into your creative to see an overview featuring a flippable **Creative Preview** and to access functions such as **Edit Creative, Set as Default,** and **Deactivate. Below those options you'll see:**

* **Download Proofs:** Download separate front & back, or a complete PDF proof.
* **Uploaded Artwork:** Download the files that were originally uploaded to make edits or adjustments.
* **Send a Sample:** Send a sample of this creative to a requested address and quantity.

<figure><img src="/files/SBitT9blsgzVpgLECfqv" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Edit Creative** only allows you to **rename** the creative or **change the shipping speed** pre-launch. To make edits to the creative design, you'll have to **Deactivate** the old creative and upload a new one.
{% endhint %}

### Creative Details

Towards the bottom of the page you'll see a list of all merge tags present in the creative, any promotions the creative is connected to, and a summary of the creative settings along with the date created.

<figure><img src="/files/IpmJK7R6c0yyE8VIReoi" alt=""><figcaption></figcaption></figure>

### Data Guides

These are useful downloads for CSV audience file templates and JSON templates for integrations and API requests as they contain all the required column headers and data points for your campaign and creative.

<figure><img src="/files/eJgO7DDXinDEmVdQK6kf" alt=""><figcaption></figcaption></figure>

## A/B Testing

A/B Tests can be set up and run between any number of creatives within a campaign. Based on your goals, you can choose to optimize on overall conversion, CAC, or ROAS. Common test variables include:

* **Size or Format**: 4 x 6 vs. 6 x 9 Postcard
* **Promotional Offer**: "Free Shipping" vs "$10 OFF" vs "20% OFF"
* **Call to Action**: Website URL vs. QR Code

*... and so much more!*

To reach statistical significance truly get a "good read" between multiple creative designs we recommend upwards of **\~10k&#x20;*****per design*** to see an effectively measurable difference between the creatives.

### Test Setup <a href="#test-setup" id="test-setup"></a>

**Upload all your creatives to the same campaign**. If you upload 2 creatives to test, each creative will have a 50% chance in the rotation and if you upload 3 creatives, each one will will have a 33.33% chance, and so on. You'll be able to track the performance of each creative from the [Results](/getting-started/campaign-setup/results) page after launch.

<figure><img src="/files/mCleYBOesPnub5Yke6Ek" alt=""><figcaption></figcaption></figure>

#### One Time Sends

For [One Time Sends](/platform-basics/one-time-sends) you'll want to manually select all creatives you'd like to include in the test when prompted during launch.

#### Triggered Campaigns

When setting up a Poplar Mail trigger via platform integration, you have the option to specify a creative\_id along with campaign\_id in the JSON payload. If creative\_id is **NOT** specified in your webhook trigger, the platform will automatically randomize all active creatives under the campaign - this is how to A/B test when activating your trigger.

{% hint style="warning" %}
If creative\_id isn't specified and one of your creatives is set as the **Default**, then only the default creative will trigger.
{% endhint %}


# Billing

During the account onboarding process, credit card details are requested to keep on file. If your account is being funded via invoice prepayment, this step may be skipped.

## Payment Methods <a href="#payment-methods" id="payment-methods"></a>

A credit card is the primary means of payment for Poplar, but please reach out to your account manager if you plan to mail large volumes consistently and wish to prepay via ACH, wire, or check.

<figure><img src="/files/hFKJipcyTxKhRWe4SXgG" alt=""><figcaption></figcaption></figure>

### Adding Credits via Credit Card <a href="#adding-credits" id="adding-credits"></a>

On the billing page, you can top up your credit balance. As you mail, we will deduct it from this credit balance. We will email a notification if your balance drops to $20 and again a $0. If your balance is insufficient when generating a mailing, it will be paused. You have up to 30 days to top up your account and manually mail the piece.

If your balance is insufficient when creating a **One Time Send** with an uploaded list, you will be prompted to pay for the cost of the send via your card on file. If you have enabled invoicing, we will not be able to charge the card automatically, and you will need to add the credits manually if there is not enough credit balance.

### Auto Recharge <a href="#auto-recharge" id="auto-recharge"></a>

When Auto Recharge is **enabled**, the card on file will automatically be charged an amount of your choosing when the account balance drops below the set balance threshold.

Changes to the balance threshold and recharge amount will affect the next time a mailing is triggered or once the account balance exceeds the threshold amount. If you need to refill your account balance immediately, you may do so manually by clicking Add Credit via Card.

{% hint style="warning" %}
To avoid multiple small charges to the card on file (this risks a fraud alert from your bank), set a **low** balance threshold and a **high** recharge amount if you are mailing high triggered volume.
{% endhint %}

### Invoicing <a href="#invoicing" id="invoicing"></a>

If you have opted into Invoicing, we will never charge your credit card on file. To add credits, you can request an invoice and pay via wire/ACH. Alternatively, you can add credits manually via card on the billing page. For invoice clients, there is no way to utilize the auto-refill feature.

***

## Pricing & Minimums <a href="#pricing-minimums" id="pricing-minimums"></a>

The [Pricing](https://app.heypoplar.com/billing/pricing) tab under **Billing** shows a price-per-piece breakdown of every format and shipping option Poplar offers, including the additional rate for **Address Enrichment** and **Lookalike Prospecting**. Poplar has **no minimums**. If you are using appends, the data fee and printing/mailing cost are calculated separately.&#x20;

Use our [Price Calculator](https://poplar-price-calc.lovable.app/) to calculate the price of your campaign depending on our circulation, shipping speed, plan, and options data costs.


# Audiences

Store your mailing and/or suppression lists easily in one place.

The Audiences page provides an easy way to store addresses for mailing and suppression. This is especially helpful if you want to suppress a list for an individual campaign, separate from the global Do Not Mail List. Upload a CSV file comprised of either mailing addresses, or email addresses if you opt to use the address enrichment feature.

<figure><img src="/files/uiHAtQ8ngcPY47qKsfge" alt=""><figcaption></figcaption></figure>

## Required Fields <a href="#required-fields" id="required-fields"></a>

Below is an example of the required and optional fields for full address data, and emails for address enrichment. The column headers don't need to match perfectly as you'll be prompted to map the required headers upon upload, and ignore any irrelevant columns that may be present in your file.

{% hint style="info" %}
**Suppressions** are matched against either address OR email, so if you are running campaigns using [Address Enrichment](/getting-started/audiences/address-enrichment), a list of emails can be used for suppression.
{% endhint %}

### **Mailing Address Data**

Custom **merge tag** columns can be stored for creative, we recommend downloading your creative's CSV [Data Guide](/getting-started/campaign-setup/creative#data-guides) for a quick, easy and accurate file template.

| full\_name   | <p><strong>required</strong> <br><em>max character count: 40</em></p> |
| ------------ | --------------------------------------------------------------------- |
| company      | *optional*                                                            |
| address\_1   | **required**                                                          |
| address\_2   | *optional*                                                            |
| city         | **required**                                                          |
| state        | **required**                                                          |
| postal\_code | **required**                                                          |
| email        | *optional*                                                            |
| identifier   | *optional*                                                            |

### **Emails for Address Enrichment**

| email      | **required** |
| ---------- | ------------ |
| full\_name | *optional*   |
| identifier | *optional*   |

### Merge Tag Columns

When uploading an audience file that contains extra columns with merge tag data, map any and all of those columns as **Merge Tag**:<br>

<figure><img src="/files/pRU9IGgYL469jcZH96sU" alt="" width="563"><figcaption></figcaption></figure>

In the [One Time Send](/platform-basics/one-time-sends) flow during launch, you'll have the option to map these values to their respective merge tags.

## Do Not Mail List <a href="#do-not-mail" id="do-not-mail"></a>

Maintain your Do Not Mail list by manually uploading a CSV list or integrating with our [Do Not Mail API](/api/endpoints/do-not-mail). Members of this list are **automatically suppressed across all campaigns.**

<figure><img src="/files/y1OIc8RGIUtdElFmWVXV" alt=""><figcaption></figcaption></figure>

## Customers (Orders API) <a href="#customers" id="customers"></a>

If you're sharing transactional data with Poplar via [Shopify](https://apps.shopify.com/poplar-1) or integration with our [Orders API](/api/endpoints/orders)**,** a list of all your customers will automatically populate this audience which can be optionally selected if you'd like to suppress customers who've already purchased.&#x20;

<figure><img src="/files/eK7M5qBiljaRrCkVNz4v" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
If you notice duplicate addresses in the list, this is because both **shipping** and **billing** address are captured through Shopify.
{% endhint %}

## File Upload

The platform is built to handle file sizes up to **250MB** for both Audiences and Transactional uploads. After mapping and submitting your file, depending on the size you could see it queued or processing and upon completion you'll receive a success email. If there are any formatting errors you'll see the option to download an Error Report (also arrives via email):&#x20;

{% tabs %}
{% tab title="Uploaded" %}

<figure><img src="/files/DNz2fJkuG0SolOnVwL6l" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Queued" %}

<figure><img src="/files/3NUK6C0WFFB76WqTLBWB" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Processing" %}

<figure><img src="/files/v80oXvEvmC9HA3Ti1s1Q" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Error Report" %}

<figure><img src="/files/ZyxNWWH6Jh3nwz9XxrRA" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

### Error Report

This file will contain the reason the row was rejected with the corresponding line in your file so it is easy to find.

<figure><img src="/files/xGE1ueiraXSmwuFLG74k" alt="" width="563"><figcaption></figcaption></figure>

### Invalid Addresses

Even if you don't have any formatting errors and you receive an email saying 100% of your records uploaded successfully, your audience could still contain Invalid Addresses flagged by USPS. Invalid Addresses would include invalid city/zip code combination, missing secondary information such as Apartment or Unit number, USPS has marked the address inactive, etc.

<figure><img src="/files/iQzg98Slau22GsEznE6o" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
We do NOT recommend Google Maps as a valid source to verify invalid addresses, as their data is not linked to the USPS database.
{% endhint %}


# Address Validation

Before launch, the platform will scan the validity of your address data (based on USPS flags) and return the number of mailable addresses, along with a CSV file listing all the invalid addresses.

Common reasons an address may be labeled invalid include:

* The address has been flagged as vacant or inactive by USPS
* The address has an invalid primary number
* The address has missing or invalid secondary information (*ie: apt. or suite #*)
* The city/state/postal code combination is invalid
* The address belongs to a commercial mail receiving agency

## Address Strictness

Address Strictness can be set on an account-wide level from your Account Settings and a campaign level when creating a new campaign. **This setting controls the level of address validation required to mail**. To assure the highest likelihood of deliverability to we recommend the **Normal** setting. When mailing to commercial addresses, you may want to try adjusting to **Relaxed** depending on the confidence in your data.

<table data-header-hidden><thead><tr><th width="160.02734375"></th><th></th></tr></thead><tbody><tr><td><strong>Normal</strong></td><td>Checks the existence of an address but ignore other data such as the USPS "in-service" flag.</td></tr><tr><td><strong>Relaxed</strong></td><td>Skips most address validation checks and should only be used for thoroughly vetted data or transactional mailings, where there is a high degree of confidence in the dataset.</td></tr></tbody></table>

After uploading your Audience File, Poplar performs a set of validations to ensure complete and deliverable addresses. The platform will assess the Total Records which is the number of correctly formatting fields in the file.&#x20;

<figure><img src="/files/cE6R6D6eJTJ0ERnekQyz" alt="" width="539"><figcaption></figcaption></figure>

Any problematic addresses related to validation and delivery will show an alert you can mouse over to see the reason for the alert.

When launching to your Audience via [One Time Send](/platform-basics/one-time-sends), you'll be shown the total mailable number based on your selected strictness:

<figure><img src="/files/KhVP4mivKXo3Y3ceYUgB" alt=""><figcaption></figcaption></figure>

## National Change of Address (NCOA) Forwarding

NCOA is a dataset of change-of-addresses filed by individuals and/or businesses with the USPS. The database is maintained by the USPS and we are required by the USPS run a check for every mail piece we send. [Learn more](https://postalpro.usps.com/mailing-and-shipping-services/NCOALink)

<figure><img src="/files/n49DmiHbJVXVWkwgoUWj" alt="" width="563"><figcaption></figcaption></figure>

**How is NCOA accounted for when using Geolocations, Geofences, and Zip & State suppressions?**

Our location and area-based checks are performed on the *original* address that you provide. These checks are run **prior** to NCOA, meaning if your recipient has moved, we do not account for the move in our checks.

However, if you are concerned about potentially mailing someone who has moved outside your delivery area(s), you can append the phrase " **or Current Resident"** to your recipient name field. This allows you to skip NCOA, meaning your mailer ultimately lands at the original address.


# Address Enrichment

Use our Address Enrichment feature to match a list of emails to mailing addresses for Email Retargeting.

**A Hybrid Approach to Omni-channel Marketing -** Email retargeting integrates digital touchpoints with physical outreach, optimizing the customer journey through a combination of online behaviors and offline engagements. Customer email data can be leveraged in a number of ways through online interactions; Poplar enables you to incorporate Direct Mail into your email marketing flows for enhanced and seamless targeted offline campaigns.

## Use Cases

* **Abandoned Cart:** Target customers earlier in the checkout process, where only email is collected before mailing address is entered.
* **Subscribers and Unsubscribers:** Send a promotional mail piece to welcome new subscribers, or retain unsubscribers with a physical mail offer - chances are they're still interested in your product, just not interested in receiving emails.
* **Leads:** Any instance where you're able to collect email leads (site views, sign-ups, etc.) Direct Mail can also be utilized to boost engagement.

### How it Works

Poplar's Address Enrichment feature is able to match emails to physical mailing address at a 50-80%+ success rate. Our internal tests have generally found that older demographics tend to yield a higher match rate than younger ones. Thanks to the strict accuracy filters we've put in place, there should be a high yield of accurately matched addresses. If applicable,  **Enable** Address Enrichment when your campaign is created, or Edit an existing campaign to adjust the setting.

<figure><img src="/files/kSeQH54lGrgeD0rRalf0" alt=""><figcaption></figcaption></figure>

When making an API request or prepping an audience file, only the **email** field is required; Poplar will initiate an address search as described in the image below. You will only be charged if an append is successful and will not be charged if a match can't be found.&#x20;

Holdout groups are included in the data charge since an email has to find a match in order to be eligible for the holdout group, but the cost of production will not be applied. The system will return  `append failed` if it is unable to identify an address to match. If it's successful, it'll change the status to `mailing_queued`.

<figure><img src="/files/6wM9Essfv731mZBi0LhX" alt=""><figcaption></figcaption></figure>

Your account will be charged the full amount (100% match rate) and will be automatically refunded the remainder after the email appends process is complete. The refund will be credited to your Poplar account (or the original payment method upon request).

**Example**

> *If you have $100 in your account and push through three $50 One Time Sends quickly, Poplar will think there is enough there is enough money for all three. By the time the first two are done processing, the third mailing will be suppressed due to lack of funds.*

#### Rules and Limitations

* You must agree to the Share Local Media [Supplemental Terms of Use](https://heypoplar.com/legal/terms-of-use-email-append) and reach out via our chat portal to request access to the Address Enrichment feature (for new accounts only).
* Emails submitted must be customer emails; you should **NOT** submit emails you have obtained in other ways.
* Emails must belong to US residents only, Poplar does not ship outside the US.
* Recipient addresses for append will always be addressed to "Current Resident." Any personalization of the mail piece should not include any PII (personally identifiable information) for that specific customer.
* When downloading mailing history for Address Enrichment campaigns, address data will be redacted from the file.
* **The use of name merge tags is restricted for recipient privacy purposes.**


# Static: PDF & PNG/JPG

Welcome to the Static Creative Guide! Here you can find export instructions, print best practices, and much more

## Adobe Creative Suite

(*InDesign, Illustrator, Photoshop*)

If you’re using a professional Adobe tool, we strongly recommend exporting your creative as a **Print-Ready PDF** using the correct **\[PDF/X-4:2008]** standard.&#x20;

Download design files from [Templates & Specs](https://docs.heypoplar.com/creative-design/templates-and-specs).

### File Requirements

* **File type**: PDF/X-1a:2003 or PDF/X-4:2008 (***Required***)
* **Color mode**: CMYK (*PDF/X-4 supports ICC profiles for broader color control*)
* **Resolution**: 300 PPI
* **Font embedding**: All fonts must be embedded or outlined
* &#x20;**Size limit**: Under 5MB (*per side*)
* **Trim Size + Bleed**:
  * 4" x 6" → **4.25" x 6.25"**
  * 6" x 9" → **6.25" x 9.25"**
  * 6" x 11" → **6.25" x 11.25"**

{% hint style="warning" %}
Bleed must be included in the final export; do not add white borders or crop marks. Our address block is auto-applied, so **do not include one** in the back artwork.
{% endhint %}

<figure><img src="/files/ql8KXR7PPjVrtUR0sEQe" alt=""><figcaption></figcaption></figure>

### About PDF/X Standards

* **PDF/X-1a**: Requires flattened transparencies and CMYK-only color
* **PDF/X-4** (*Recommended*): Supports ICC color profiles and native transparency for better print quality

## Adobe InDesign Setup

1. Create a new document with **0.125” bleed** on all sides
2. File → Export → Format: Adobe PDF (Print)
3. Preset: **PDF/X-4:2008**
4. Marks & Bleeds → **✓ Use Document Bleed Settings**
5. Export

{% hint style="warning" %}
If you skip the bleed settings, your export will default to the artboard/canvas size and trigger an upload error.
{% endhint %}

## Adobe Illustrator Setup

1. Create your document with 0.125” bleed
2. File → Save As → Adobe PDF (Print)
3. Preset: **PDF/X-4:2008**
4. Bleeds → **✓ Use Document Bleed Settings**
5. Make sure **no printer marks** are checked
6. Delete (not just hide) trim/safe zone layers
7. Save PDF

<figure><img src="/files/r4m0jA9YRNk7ogJ5o5S3" alt=""><figcaption></figcaption></figure>

## Canva, Figma, or Other Tools

If you're using Canva, Figma, or another non-Adobe tool, we recommend exporting your artwork as **high-resolution PNGs** with built-in bleed.

{% hint style="warning" %}
Creative **MUST** be exported in pixels — **NOT** inches
{% endhint %}

### File Requirements

* **File type**: PNG or JPG
* **Resolution**: 300 PPI
* **Color mode**: RGB accepted, but may shift during CMYK printing
* **Bleed**: Must be added manually in the overall pixel dimensions *(see final dimensions below)*
* **Size limit**: Under 5MB
* **Front and Back creatives must be exported separately**

### Dimensions with Bleed (in Pixels) <a href="#dimensions-with-bleed-in-pixels" id="dimensions-with-bleed-in-pixels"></a>

| 4” x 6”           | 1275 × 1875 |
| ----------------- | ----------- |
| 6” x 9”           | 1875 × 2775 |
| 6” x 11”          | 1875 × 3375 |
| Bifold Short-Fold | 1725 × 5175 |
| Bifold Long-Fold  | 3375 × 2625 |
| Trifold           | 2625 × 4987 |
| 8.5” x 11” Letter | 3300 × 2550 |

### Canva Export Instructions

1. Set document dimensions using the **pixel values** above
2. Share → Download
3. File type: **PNG**
4. Download **Front** and **Back** separately

<figure><img src="/files/vJ7kxVQ0RYCLqtP4N89D" alt=""><figcaption></figcaption></figure>

## QR Code Best Practices

* **Minimum size**: 0.75" wide
* **Test your QR Code**: Always scan the PDF export to ensure the QR works
* **Adobe InDesign** has a built-in vector QR generator
* **All caps** in QR code content results in a **smaller QR code**

<figure><img src="/files/YTe9yfEnhT0zreYKDaEs" alt="" width="375"><figcaption></figcaption></figure>

## ✅ Final Checklist (All Tools)

* [ ] Includes proper **bleed and safe area**
* [ ] File is **under 5MB**
* [ ] **CMYK-compatible** color or ICC profile (Adobe)
* [ ] Fonts **outlined or embedded**
* [ ] File dimensions match one of the standard formats (see [Templates & Specs](/getting-started/campaign-setup/creative))
* [ ] **No crop marks** or printer marks included


# Dynamic: HTML/CSS

Leverage customer data in your CRM/ESP for a 1:1 personalized creative design.

**Dynamic** HTML template files must be used for creative designs that utilize personalization or variable content such as first name, rolling expiration date, unique promo code, etc. If no one on your team has sufficient knowledge of HTML /CSS, our team is happy to help! Just follow the instructions on this form to submit your design to be translated into HTML:

{% embed url="<https://heypoplar.com/creative-translations>" %}

## Merge Tags & Personalization

One unique feature of the Poplar platform is the capability to print dynamic mailers. You can **personalize** your postcards or letters just like you can in an email with any information you have on your customers like **first name**, **past products purchased**, and **unique promo codes**. This personalization allows you to create designs that are statistically more likely to get the recipient’s attention since they’re tailored to each individual.

<figure><img src="/files/zK1TR5BPx9a27XZIzKYk" alt=""><figcaption></figcaption></figure>

If no one on your team has sufficient knowledge of HTML /CSS, our team is happy to help! Just follow the instructions on this form to submit your design to be translated into HTML:

{% embed url="<https://heypoplar.com/creative-translations>" %}

Poplar offers a variety of *flexible* and **creative** ways to **customize mailers** based on different types of collected audience data.

Personalizations can be broken down into four merge tag categories: **Default, Promotion, Location-based, and Custom** - all of which can be dynamically optimized by the use of Shopify’s [**Liquid Template**](https://shopify.github.io/liquid/) language.&#x20;

{% hint style="warning" %}
The address block is not considered variable or personalized, since it is always auto-applied by the platform during the upload process.
{% endhint %}

## **Default Merge Tags (Recipient)**

Poplar will automatically populate default merge tags based on recipient data received via CSV upload or trigger integration. In your HTML creative, default merge tags are always preceded by `recipient.` to access the core recipient data in your mail file or API request.

The platform will **NOT** prompt you to set default values for `recipient.` merge tags. This means that in the event of a blank value or mismatched data, your creative will print with a blank.&#x20;

{% hint style="info" %}
Double check all column headers and Test all triggers before launch to ensure there are no merge tag data discrepancies.
{% endhint %}

Missing first name data will populate as **Current Resident** and will appear on your creative as such - if you are using the `{{recipient.first_name}}` merge tag, make sure first name is provided for every recipient.

| *Column Header or Key* | *Merge Tag*                    |
| ---------------------- | ------------------------------ |
| **full\_name**         | {{recipient.**full\_name**}}   |
| **first\_name**        | {{recipient.**first\_name**}}  |
| **last\_name**         | {{recipient.**last\_name**}}   |
| **address\_1**         | {{recipient.**address\_1**}}   |
| **address\_2**         | {{recipient.**address\_2**}}   |
| **city**               | {{recipient.**city**}}         |
| **state**              | {{recipient.**state**}}        |
| **postal\_code**       | {{recipient.**postal\_code**}} |
| **email**              | {{recipient.**email**}}        |
| **identifier**         | {{recipient.**identifier**}}   |

## Promotions Merge Tag <a href="#promotion-merge-tag" id="promotion-merge-tag"></a>

If you've created a Promotion and uploaded a list of unique codes, use a `{{promotion.promo-code}}` merge tag to pull in each code. Upon uploading creative, the platform will detect promotion. and prompt you to select your Promotion from a dropdown.

<figure><img src="/files/5wkWeEdEhYD63LhQmhLk" alt=""><figcaption></figcaption></figure>

### Unique QR Codes

**Promotions** can also be helpful for featuring unique QR codes. Poplar has the ability to render a unique QR code image (containing a URL or code), but it does **not** generate them or track scans.

A third party tool should be used to generate list of unique URLs or UTM codes - these programs typically also track scans for additional conversion metrics. The static part of the URL can be coded into the creative with a promotions merge tag where the unique UTM will appear:

`https://www.heypoplar.com/?utm_source=qr&utm_content={{promotion.qr_utms}}`

Next you'll want to upload the list of your unique UTMs as a Promotion list so they can be pulled into the QR code URL to generate the image:

<figure><img src="/files/BRk8YCC5Q6TTsh4XOKt2" alt="" width="325"><figcaption></figcaption></figure>

{% hint style="warning" %}
**The length of your URL affects the density of the QR code**, therefore we recommend using a **shortened version of your URL** to avoid scanning issues when printed.
{% endhint %}

**Background Image Example**

```
<style>
.qr-code {
 width: 200px;
 height: 200px;
 position: absolute;
 bottom: 100px;
 right: 100px;
 background-color: #fff;
 background-image: url({% qrcode text: 'https://site.com/{{promotion.promo_code}}' %});
 background-size: 100%;
}
</style>

...

<div class="qr-code"></div>
```

**Image Source Example**

```
<img src="{% qrcode text: 'https://site.com/{{custom.field-name}}' %}" class="qr-code" height="200" width="200" />
```

## Location Based Merge Tags <a href="#location-based-merge-tags" id="location-based-merge-tags"></a>

Location based merge tags populate with data pulled from Saved Locations within your Poplar account. They are considered default merge tags, meaning the platform will **NOT** prompt you to set a default value to appear in the event of missing data. Location based merge tags provide a flexible and easy way to customize creative based on Geolocation settings.

| *Saved Location Field* | *Merge Tag*                                            |
| ---------------------- | ------------------------------------------------------ |
| **Location Name**      | {{location.**name**}}                                  |
| **Address 1**          | {{location.**address\_1**}}                            |
| **Address 2**          | {{location.**address\_2**}}                            |
| **City**               | {{location.**city**}}                                  |
| **State**              | {{location.**state**}} or {{location.**state\_name**}} |
| **Postal Code**        | {{location.**postal\_code**}}                          |
| **Merge field 1**      | {{location.**merge\_field\_1**}}                       |
| **Merge field 2**      | {{location.**merge\_field\_2**}}                       |
| **Merge field 3**      | {{location.**merge\_field\_3**}}                       |

There must be at least one (1) saved location under the geo-locations tab & the saved locations suppression must be **toggled on** under the campaign Suppressions tab **before** you upload an HTML creative including {{location.merge\_tag}}. Click [Saved Locations](https://docs.heypoplar.com/creative-guides/docs.heypoplar.com/article/243-saved-locations) to learn more.

Dynamic creatives (*designs featuring variable or personalized data*) using Merge Tags or Liquid Template logic, must be uploaded in HTML file format.

This article mentions common and general merge tag use cases used within our Poplar platform. If you want to learn **how to add merge tags** to your creative please check out [**How to Convert a Static Design HTML**](https://heypoplar.com/articles/how-to-convert-a-static-design-to-html).&#x20;

***

## HTML/CSS Best Practices <a href="#html-css-best-practices" id="html-css-best-practices"></a>

Translating a static PDF design may sound intimidating, especially if you have little to no prior coding knowledge. Fortunately the process is usually as simple as:

1. Pulling certain aspects of your static design together
2. Re-saving them as one element
3. Embedding the URL within an `.html` file.&#x20;

There are a few key tools and elements to have in place before you begin:

* Your original InDesign or Illustrator files
* All image assets and fonts
* Poplar’s HTML template files *(*[*found here*](/getting-started/creative-templates)*)*
* A text editor such as [Sublime](https://www.sublimetext.com/) or [Visual Studio Code](https://code.visualstudio.com/)
* A tool to preview your design as you code such as a browser window or [Codepen.io](https://codepen.io/)

{% hint style="warning" %}
Since Poplar is converting an HTML file to PDF, the capabilities and best practices differ slightly from a web page which uses a multitude of behind-the-scenes tools and software to render in a browser.&#x20;
{% endhint %}

A browser can be used to preview your code design, but keep in mind certain elements, such as merge tags, may appear differently in the browser than they do when converted to PDF in the platform - this is why viewing the PDF proof generated by the platform is the best, most accurate way to check your work.

When formatting your HTML design, all CSS styling should appear within the `<style>` tag located inside the `<head>` tag. Additionally we recommend using [absolute](https://css-tricks.com/almanac/properties/p/position/#absolute) positioning for all elements.

**Inches** and **Pixels** are the only recommended units of measurement - relative lengths such as em, rem, vw, etc. may not render properly upon upload.

{% hint style="info" %}
If dynamic content is only used on one side of a postcard or letter, only one file needs to be an HTML file and the other side can be uploaded as a PDF.
{% endhint %}

### URLs and File Paths <a href="#urls-file-paths" id="urls-file-paths"></a>

A file path describes the location of a file. There are two types of file paths: **Absolute** and **Relative**.

A relative path file points to a local file *relative* to the current page, an absolute file path uses a URL to an internet or Bucket file.&#x20;

The platform is only able to render files with an absolute path and will NOT render files sourced relatively.

<table data-header-hidden><thead><tr><th width="171.75"></th><th></th></tr></thead><tbody><tr><td><em>Path Type</em></td><td><em>Example</em></td></tr><tr><td>Absolute</td><td><code>&#x3C;img src="https://www.app.heypoplar.com/logo.png"></code>  <em><strong>Correct</strong></em></td></tr><tr><td>Relative</td><td><code>&#x3C;img src="/images/logo.png"></code>  <em>Incorrect</em></td></tr></tbody></table>

When uploading HTML creatives, it's **essential** to ensure that all URLs within the creative are functional and visible to the public.&#x20;

The best way to test the functionality of your src URL is to copy and paste it in your browser. If it's functional it will appear and if not, you may receive an HTTP Error Code.

**Supported Content Types**

| *File Type* | *Accepted Format*                                                           |
| ----------- | --------------------------------------------------------------------------- |
| font        | .otf, .ttf, .woff, .woff2                                                   |
| image       | .bmp, .gif, .jpg, .jpeg, .png, .svg, .tiff, vnd.microsoft.icon, .webp, .xml |
| text        | CSS                                                                         |

### Webfonts <a href="#webfonts" id="webfonts"></a>

Dynamic content must use a [GoogleFont](https://fonts.google.com/) or a font with a purchased license.&#x20;

{% hint style="info" %}
**Typekit & Adobe Fonts are not accepted in HTML creatives**, but are welcome to be used in static ones.
{% endhint %}

**Linking Fonts**

The simplest option is to link your asset in the `<head>` of the HTML document rather than in the in the CSS. Using this method, the platform is able to accept a maximum of 2 different font weights.

```
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700&display=swap" rel="stylesheet" type="text/css">
```

#### @font-face <a href="#font-face" id="font-face"></a>

This rule allows custom fonts to be loaded to the creative. Once added to the CSS in the rule instructs the printer to download the font from the URL where it is hosted. The @font-face rule should be added to the top of the CSS before any other styles.

```
@font-face {
        font-family: "MyWebFont";
        src: url("http://template-assets.sharelocalmedia.com.s3.amazonaws.com/MyWebFont.ttf")
        format("truetype");
      }
```

## Liquid Logic

**Tags** Let you add conditional logic (using [**operators**](https://shopify.github.io/liquid/basics/operators/)) to your messages. The most basic form is an `if...else` statement.

**Filters** Allow you to reformat and set consistent formatting ( *ie uppercase, lowercase, or proper-case*)

There's no limit on the number of ways you can get creative with Liquid Templates; below are some sample use cases and code snippets to get you started. We highly recommend testing all your Liquid templates thoroughly in order to ensure they are error free!

[Test your code in a Liquid Sandbox](https://jumpseller.com/support/liquid-sandbox/)

### **Rolling Expiration Date**

Add an expiration date to your creative that will always show 90 days from the time of print. The Liquid filter below creates a Unix timestamp, adds the number of seconds in 90 days and then reformats the date.

```
<!-- Example -->
If the postcard is printed on January 1, 2020 the output will automatically calculate and show 90 days in the future. 

<!-- Code -->
<div class="terms">
  <p>
	Offer valid before {{ "now" | date: "%s" | plus: 7776000 | date: "%b %e, %Y" }}. Visit heypoplar.com/legal for additional terms.
  </p>
</div>

<!-- Output -->

Offer valid before Mar 31, 2020. Visit heypoplar.com/legal for additional terms.
```

### **Character Casing**

If your audience data contains some values that appear in all caps, lowercase, or a mix of both, Liquid can be used to ensure they appear consistently formatted in your creative design. Below is an example for how to make sure all first\_name data appears in proper case, with the first letter uppercase and the rest lowercase.

```
<!-- Example -->
If audience data contains first_name "jane" or "JANE" you want to make sure it always appears as "Jane"

<!-- Code -->

<div class="dynamic-greeting">
  <p>
	Hey {{ recipient.first_name | capitalize }}! Check out our new summer styles...
  </p>
</div>

<!-- Output -->

	Hey Jane! Check out our new summer styles...
```

### **Variable Discount**

Offer a variable discount based on a customer’s purchase history, average order value, lifetime value, etc. The Liquid tag below will use a custom merge tag to display a different message based on the `purchase_history` value listed in your audience data.

```
<!-- Example -->
A value greater than or equal to $200 for purchase_history would should read: 
"In celebration of your birthday, please take 20% off your next purchase..."

A value below $200 should read:
"In celebration of your special day, take $10 off your next purchase..."

<!-- Code -->

<h1>
	We want to say thank you for your loyalty -
</h1>

{% if custom.purchase_history >= "200.00" %}
<p>
	Enjoy 20% off your next purchase!

{% else %}

	Here's $10 off your next purchase of $100 or more! 
</p>
{% endif %}


<!-- Output for purchase_history >= $200 -->

	We want to say thank you for your loyalty -
	Enjoy 20% off your next purchase!

<!-- Output for purchase_history < $200 -->

	We want to say thank you for your loyalty -
	Here's $10 off your next purchase of $100 or more!
```

**Terms & Conditions**&#x20;

Dynamically alter legal text based on the recipient's `city` or `state` .

```
<!-- Example -->
Adjusting the legal text only on mailers sent to California to be CCPA compliant

<!-- Code -->

<p>
	Offer valid for first purchase.
</p>
<p>
{% if recipient.state == “CA” or recipient.state == "California" %}

	Under the California Consumer Privacy Act (CCPA)...

{% else %}

	Read our privacy policy at heypoplar.com/legal.

{% endif %}
</p>

<!-- Output for California residents -->

	Offer valid for first purchase. Under the California Consumer Privacy Act (CCPA)...

<!-- Output for everywhere else -->

	Offer valid for first purchase. Read our privacy policy at heypoplar.com/legal.
```

### **Behavior Dependent Images**

Show a different product image based on characteristics related to the recipient’s most frequently purchased item. Below we have a custom merge tag called `item-color`, and the image shown in the creative features items of a similar color to those most frequently purchased.

```
<!-- Example -->
If a customer frequently buys red sunglasses, we want to show an image containing mostly red sunglasses.

If a customer frequently buys blue sunglasses, we want to show an image containing mostly blue sunglasses.

<!-- Code -->

<img 
{% if custom.item-color == "red" %}

	src="https://amazons3.com/my_images/red_sunglasses.png"

{% elsif custom.item-color == "blue" %}

	src="https://amazons3.com/my_images/blue_sunglasses.png"

{% else %}

	src="https://amazons3.com/my_images/mixed_sunglasses.png"

{% endif %} 
>
					 
<!-- Output for Red -->

<img src="https://amazons3.com/my_images/red_sunglasses.png">

<!-- Output for Blue -->

<img src="https://amazons3.com/my_images/blue_sunglasses.png">

<!-- Output for N/A -->

<img src="https://amazons3.com/my_images/mixed_sunglasses.png">
```


# Print Troubleshooting

Use the guide below to troubleshoot creative-related platform errors and reference more advanced print requirements.

## Upload Errors

The most common errors occur because of incorrect dimensions, or incorrect export format - luckily both are an easy fix! Don't get discouraged ✨

### Invalid File Dimensions

<figure><img src="/files/wk17cziGl0mMXd7fEG6X" alt="" width="563"><figcaption></figcaption></figure>

If you're seeing this error, it indicates that your creative does not have the correct dimensions for upload. These are the key things to double check:

* Extra bleed wasn't added or subtracted during export - please review our specs for the [creative dimensions at upload](/getting-started/creative-templates#dimensions-bleed-and-safe-zone) and our [export instructions](/creative-guides/static-pdf-and-png-jpg#adobe-indesign-setup).
* You selected the correct format on the previous screen.

### Not A Valid PDFx1a or PDFx4 File

<figure><img src="/files/o6nmuB2Vk9orlJoieiL6" alt="" width="563"><figcaption></figcaption></figure>

This one looks scary, but it can also be quickly fixed by re-exporting under the correct Adobe preset, or by using Adobe Preflight. These are the steps to take:

* Review the [Static: PDF export requirements](/creative-guides/static-pdf-and-png-jpg#about-pdf-x-standards) to make sure you're exporting under either **\[PDF/X1a: 2001]** or **\[PDF/X4: 2008]**<br>

  <figure><img src="/files/XssT2zJtLW04gs250Gpb" alt="" width="549"><figcaption></figcaption></figure>
* Alternatively, you should open the files in Adobe Acrobat and head to All Tools > Use print production > Preflight > **Convert to PDF/X-1a (Coated GRACoL 2006)** > Analyze and fix

<figure><img src="/files/MTNWpd1l6zZWKs1SzKZw" alt="" width="375"><figcaption></figcaption></figure>

### File Must Be Smaller Than 6MB

<figure><img src="/files/SlAdwsb84Wfl4krSYb8I" alt="" width="563"><figcaption></figcaption></figure>

Unfortunately this error can be a bit more time consuming to correct as it is likely related to the size or quality of the images that are embedded in your creative artwork. The likely culprit:

* The images in your design files are large and high resolution (well above 300DPI).
* Your files were not exported as either **\[PDF/X1a: 2001]** or **\[PDF/X4: 2008]** and therefore didn't undergo the necessary layer and transparency flattening (see steps above to correct).

{% hint style="warning" %}
Do not use a PDF compression tool in Acrobat or otherwise - this will compromise the image quality too much so it will not print as desired.
{% endhint %}

## **InDesign: How to Lower DPI When Exporting**

1. Open the file in Indesign.&#x20;
2. Go to File  →  Export  →  Format: **Adobe PDF (pdf)**  →  **Save**
3. Go to **Compression**.&#x20;
4. For the **Downsampling** entries, you can alter the input to **downsample to 300 pixels per inch for images above 300 pixels per inch**.&#x20;
5. Alternatively you could change the **Image Quality** to High instead of Maximum.

{% hint style="warning" %}
If your image's DPI is too *low,* we recommend using a different image. Do not attempt to increase the DPI of any images.
{% endhint %}

## **Photoshop: How to Collapse Images**

1. Select all the images you wish to collapse.&#x20;
2. Go to **Layer > Flatten Image**.
3. Go to **Save As**  and when you reach the options box, select a quality of 8 (High).

<figure><img src="/files/bA2OXxaJ1uE2ROEt0MPK" alt=""><figcaption></figcaption></figure>

## Assets Under 300 DPI/PPI

If you got this error message, it means we found one or more image assets in your artwork that are below 300 DPI (dots per inch), which is our minimum standard for printing a crisp image.  We recommend you replace these with a higher DPI image. &#x20;

### Checking Image DPI (Adobe)

You can check the DPI for all your images inside a PDF using [Adobe Print Production](https://helpx.adobe.com/acrobat/using/print-production-tools-overview-acrobat.html?trackingid=KRRVU\&trackingid=QYL4P47F\&DTProd=ProSubRet\&DTServLvl=AcroProSub\&DTBizSource=CCC_TEAM).&#x20;

1. Open your file in Adobe, and go to the **Print Production Tool > Preflight**.
2. Under the **Profiles > PDF Analysis**, select **List page objects, grouped by type of object**.
3. Click **Analyze** to run an analysis.
4. The tool will break out your images into ranges of DPI. Open these to get a list of images that fall into the range for the DPI.

## Registration Black

Registration black is a black that is 100% of cyan, yellow, magenta and black (C=100, M=100, Y=100, K=100). This black should be avoided for your artwork, as this much ink will saturate the paper it’s printed on, bleed into the paper, take too long to dry, and will likely smudge. Registration black should only ever be used in registration marks to reference the alignment of the different inks or plates used.&#x20;

When in Indesign, you can typically avoid this problem by not using the \[Registration] swatch.&#x20;

<figure><img src="/files/PeTZqF5Z3pGNAOmzuUYF" alt="" width="563"><figcaption></figcaption></figure>

### **InDesign: How to Locate & Change Registration Blacks**

1. Go to **Edit** > **Find/Change**.
2. Select **Custom** from the top dropdown and click to the **Color** tab.
3. Select **Registration** under the **Find Color** dropdown.
4. Click **Find Next**. This should help identify the areas in the artwork where you're using Registration Black, and allow you to change them to a different black.
5. Click **Change** to make the change, or **Change All** to apply the selected black to all instances where you're using Registration Black.

## Detected Spot Colors

In printing, a spot color is a color that's produced by a special ink (pure or mixed) that's printed by a *single run*. [Pantone](https://www.pantone.com/) is one example of a spot color system, but there are many other systems used worldwide.&#x20;

Poplar does not fully support printing in spot colors, meaning if you use a spot color, our printer will have to convert it to the closest CMYK (process) color. If you must use a spot color, we recommend you do the conversion to CMYK ([GRACoL](https://idealliance.org/specifications/gracol/) Coated 2006) yourself,  because our printer's conversion may not be to your liking.  Please keep in mind that the printer's final conversion also does not appear in our previews.

### **How to Find Spot Colors in Your Artwork**

You can use a tool like [Adobe Print Production](https://helpx.adobe.com/acrobat/using/print-production-tools-overview-acrobat.html?trackingid=KRRVU\&trackingid=QYL4P47F\&DTProd=ProSubRet\&DTServLvl=AcroProSub\&DTBizSource=CCC_TEAM) to detect the spot colors in your artwork.&#x20;

1. Open your file in Adobe, and go to the **Print Production Tool**.
2. Open the **Output Preview** tool (right hand panel).&#x20;
3. You should only see the four process colors. If there are any spot colors in your file, they will be displayed in the Output Preview tool.&#x20;

<figure><img src="/files/9sDn8fhIi6tr6vfdY41j" alt="" width="341"><figcaption></figcaption></figure>

### **InDesign: How to Replace Spot Colors**

Use **Ink Manager** to replace the spot colors. Note - this method is the quickest and fastest way to replace the spot colors - not the most 1:1. If you are  looking for the fullest level of control over color conversion, you can instead [refer to resources like this one](https://texascreative.com/blog/converting-spot-color-process-color-illustrator-or-indesign-youre-probably-doing-it-wrong) on how to do a more manual conversion.&#x20;

1. Open the InDesign file. Go to **Swatches**.&#x20;
2. Click the menu icon in **Swatches**. At the bottom, you'll see **Ink Manager**.&#x20;
3. You will see a list of all the inks you are using in your artwork:  the regular CMYK colors (process colors), followed by spot colors if you used any.
4. Convert each single spot color to a process color by clicking on the little icon to the left of the spot color name. The icon will change and match the icons of the process colors. &#x20;
5. Note that the color change may not be visible until you export your InDesign file. You should inspect all your files upon export.

<figure><img src="/files/SLtxfXfyRVWvkPXXql52" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Converting spot colors in Ink Manager doesn't change the color swatch itself. It's just a setting telling InDesign that the color should be converted to process when you print or export to a CMYK format.
{% endhint %}

### **Illustrator: How to Replace Spot Colors**

1. Open the **Color** palette if it isn't already displayed. You can find it under the Window tab up top.
2. Click the menu (hamburger) icon on the right.
3. Click **CMYK** to switch the spot color to CMYK.
4. Note that the color change may not be visible until you export your Illustrator file. You should inspect all your files upon export.

## **Detected Transparencies in Artwork**

Transparencies in artwork, if they are not flattened prior to printing, can look different when printed. For one example (out of many), instead of seeing a transparent layer, you might see a black layer that blocks everything underneath that layer.&#x20;

If you get this error, it means your file is not a PDF/X-1a file. To correct this issue, you just need to export the file as a PDF/X-1a file.

## Exceeded Maximum Ink Density

We recommend you keep your total ink density below **360** (aka 360% in coverage). For example a color with C=50, M=50, Y=50, K=100 would total **250** (aka 250% in coverage) and be acceptable. Too much ink can saturate your paper and cause ink drying problems or alter the color characteristics of your artwork.

### How to Identify Ink Over-Saturation

You can use a tool like [Adobe Print Production](https://helpx.adobe.com/acrobat/using/print-production-tools-overview-acrobat.html?trackingid=KRRVU\&trackingid=QYL4P47F\&DTProd=ProSubRet\&DTServLvl=AcroProSub\&DTBizSource=CCC_TEAM) to find the areas where your total ink coverage exceeds 360, and then use that to inform your color fixes in your design tool.&#x20;

1. Open your file in Adobe, and go to the **Print Production Tool**.
2. Open the **Output Preview** tool (right hand panel).&#x20;
3. Select the **Total Area Coverage** checkbox.&#x20;
4. Change the input value to 360 (which is the max ink coverage allowed).
5. Adobe will then highlight the areas in your artwork that exceed the value you inputted.

## Common Questions

### **Why should I design in CMYK instead of RGB?**&#x20;

Typically, files designed for print are designed in CMYK. These four letters refer to the four colors typically used in printing: cyan, magenta, yellow, and black. This is a **subtractive** system, because every layer of ink reduces the brightness of the originally white sheet of paper.&#x20;

The RGB system, standing for red, green, blue - is the system typically used in digital formats: your computer screen, televisions, and cameras. This is an **additive** system, because red, green, or blue light is added to create the pigment from blackness (absence of light).&#x20;

The color spectrum that is available in RGB is not 1:1 with what is available in CMYK. This means if you design in RGB, you could be using colors that are not available in CMYK - resulting in a print that looks different from the intended result. Therefore, we highly recommend designing in CMYK.&#x20;

### **Do my images have to be at least 300 DPI? What about 200 DPI?**

While we highly recommend 300 DPI or above, everyone has a different standard of what's "crisp" enough for them. You can use images below 300 DPI, but at your own risk.&#x20;

### What should I do if I don't have the tools to export or run these checks?

If you don't have the right tools to run these checks or make these edits, please reach out to <support@heypoplar.com> so we can assist!

### **What is PDF/X?**

"The PDF/X standard is a widely used standard, defined by the International Organization for Standardization (ISO), for a printing workflows."

"The PDF/X-4 format is reliable for live transparency and color management. This format is optimal for RIP processing, digital printers that use the Adobe PDF Print Engine, and any PDF file to be printed in Acrobat".

*Use Adobe PDF Options to Export to PDF in InDesign,* [*helpx.adobe.com/nz/indesign/using/pdf-options.html#about\_pdf\_x\_standards.*](https://helpx.adobe.com/nz/indesign/using/pdf-options.html#about_pdf_x_standards)


# One Time Sends

Launch to an Audience list or to a segment in a connected app - in minutes!

Once your campaign has been created, creative files uploaded and a credit card is on file for your account, you can launch your mailing via One Time Send. At any point in the flow, you'll see the option to  Save the send as a draft if you need to revisit the launch process. One Time Sends can also be scheduled for a future date. Before initiating, make sure your campaign is **Active** - if your campaign is Paused you will not be able to launch.

{% hint style="info" %}
Multiple One Time Sends can be launched under a single campaign, this is important to keep in mind so as not to overcrowd your account with duplicate or similar campaigns unnecessarily.
{% endhint %}

## New One Time Send <a href="#new-one-time-send" id="new-one-time-send"></a>

Click into the **Campaign** you'd like to launch, navigate to **One Time Sends** tab and click **New One Time Send**.

<figure><img src="/files/TyImCMA9rJNK1xoCTJZg" alt=""><figcaption></figcaption></figure>

{% stepper %}
{% step %}

### Choose Recipients

Name your One Time Send (*optional*) something reflective of the use case for easy record keeping. The select if you'd like send to:

* **Existing Audience:** Select an existing audience or upload a new one.
* **Build a Model:** Build a [Lookalike Prospecting](/platform-basics/lookalike-prospecting) list based on a list of existing customers.
* **Build a Mail Plan:** Select an audience containing test cell identifiers.
* **External Audience:** Choose a list or segment from an Integration such as [Klaviyo](/integrations/supported-platforms/klaviyo).

<figure><img src="/files/Y6uOqwHx5FiCXaMgQDdy" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
The following steps continue through the **Existing Audience** flow. For instructions on Build a Model please see [Lookalike Prospecting.](broken://pages/xkYVo50vhNdXwCCWIRjl)
{% endhint %}
{% endstep %}

{% step %}

### Audience Setup

In this step you'll see a breakdown of the number of mailable records based on the selected [Address Strictness](/getting-started/audiences/address-validation#address-strictness) setting, and options for [NCOA](/getting-started/audiences/address-validation#national-change-of-address-ncoa-forwarding) address forwarding.

<figure><img src="/files/oEeK8ReEEi3ZPWhhCUvB" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Select Creative

Choose which creative you'd like to send to your list. If [A/B testing](/getting-started/campaign-setup/creative#a-b-testing), make sure to select **multiple** creatives.

<figure><img src="/files/8qNoMw9ZG9qXl9UPvLch" alt="" width="375"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Options

Here you can set budget limitations, schedule the date of your send, and choose whether to enable a [Holdout](/getting-started/campaign-setup#holdout).

<figure><img src="/files/cz96i6rfwEwNjl6ouTgr" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="warning" %}
A **Holdout** group is required to calculate **incremental lift** and other lift metrics for the campaign. We recommend that at least 1,000 recipients fall in the holdout to get an accurate read on numbers.
{% endhint %}
{% endstep %}

{% step %}

### Creative Proofs

Make sure your creative files looks good:

* No important text is being hidden by the address block.
* Use the flip and rotate buttons to ensure everything is aligned as expected.
* All merge tags are mapping without errors.

<figure><img src="/files/YZftdkLSXSgDQO1B8QQU" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Review & Launch!

Review all selections including Audience selected, send settings, Estimated Timeline, Mailing Cost, and creative settings before hitting **Submit.**

<figure><img src="/files/ZcwoYCiSd6FmV5Y6j295" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

## Overview

The One Time Sends tab also shows a list of sends launched, or in draft mode, under the selected campaign.

<figure><img src="/files/OLkDGu3TfNknLXJtkULW" alt=""><figcaption></figcaption></figure>

Click into a send to see a breakdown of all mailing statuses as well as total submitted, total cost, and date submitted.

<figure><img src="/files/LQ41Sf2vXeh4S9Zshv4R" alt=""><figcaption></figcaption></figure>


# Sending Samples

Quickly sends samples to a single address, or seed multiple addresses.

All samples sent through the platform go to our printers and through the mail stream, same as they would for your recipients. **Samples should arrive between 3-7 business days** - if you need expedited samples, please reach out to <support@heypoplar.com> for more options.

{% hint style="info" %}
For best chances of successful delivery, we recommend entering a **residential address** for samples. Many office building mailrooms discard promotional mail.
{% endhint %}

## Sending to a Single Address <a href="#sending-to-a-single-address" id="sending-to-a-single-address"></a>

{% stepper %}
{% step %}

### Select a Creative

Navigate to the Campaign containing your desired Creative. Click into the creative tab:

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/65e9b2332411c5087b6841df/file-vxstR1qsDE.png" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Send a Sample <a href="#send-a-sample" id="send-a-sample"></a>

Then click into the creative and select "Send a Sample" on the right:

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/65e9b357a7c9e24f3b1c051b/file-H64nFz1mho.png" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Enter Address Details <a href="#enter-address-details" id="enter-address-details"></a>

Finally, enter your address details and the number of copies you'd like to receive then hit send!

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/65e9b51efac9297916a43c7c/file-DyzDs4VLAp.png" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

## Sending to Multiple Addresses <a href="#sending-to-multiple-addresses" id="sending-to-multiple-addresses"></a>

To send to multiple addresses and test merge tag data, follow the steps below:

{% stepper %}
{% step %}

### Upload Addresses

Create a new One-Time-Send and select the creative you wish to use. When prompted, pick **Upload Addresses** to drag & drop your address file.
{% endstep %}

{% step %}

### Map File Columns

You'll be prompted to map your file columns to the required data for mailing, as well as any custom merge tags (if applicable). *If any required data columns are missing, you will not be allowed to proceed to the next step.* If any of the values in your data column are empty or improperly formatted, you'll see a warning but will be allowed to move forward.<br>

<figure><img src="/files/KaZy8qfRBoOEX4Ulyc4P" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Launch A One Time Send

Head back to your campaign and navigate to the One Time Sends tab to launch a new send.
{% endstep %}

{% step %}

### Select Existing Audience

Select the audience containing your addresses, and continue through the flow to launch!

<figure><img src="/files/7nGeRizG6PrnxrfkrfPT" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Track Your Samples

Check on where your samples are in the mail stream from your campaign's overview. Click into one of the mailers and scroll down to the Event Log:

<figure><img src="/files/CrhOEdIx67ZBigklvAwd" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Samples sent through the One Time Send flow should arrive between 5-7 business days. If your samples haven't arrived within the quoted timeframe, please reach out to <support@heypoplar.com>.
{% endhint %}


# Abandoned Cart

Your official guide to running an abandon cart or checkout campaign

## Why run an Abandon Cart Campaign? <a href="#why-run-an-abandon-cart-campaign" id="why-run-an-abandon-cart-campaign"></a>

Direct Mail Abandon Cart retargeting campaigns are one of the highest ROI use-cases for DM. Cart abandoners have shown significant intent by going that deep into the funnel, and they may just need the push or reminder from a well-timed marketing message to get them over the line.

In a marketing environment that’s over-saturated with email, SMS, and push notifications, programmatic Direct Mail retargeting offers a unique and tangible edge in the arena. With Poplar, an abandon cart mail piece can reach homes in as little as 5-7 business days.

***

## Best Practices <a href="#best-practices" id="best-practices"></a>

There are a number of different considerations that go into planning your abandon cart campaign. Depending on whether or not you’re already running an abandon cart flow, you’ll also want to consider at which point you’re collecting email or address data, when to trigger a mailer, and how to track their success:

### Format <a href="#format" id="format"></a>

Poplar’s 4 x 6 or 6 x 9 postcard sizes are most popular for this use case, as first-class shipping is included in the base price per piece, allowing you to get your mailer in-home as quickly as possible while still maintaining a low cost-per-piece.

### Address vs. Email Data <a href="#address-vs.-email-data" id="address-vs.-email-data"></a>

Depending on the flow of your checkout system, abandonment may be triggered once email address is captured OR when full address details are captured.

### Timing <a href="#timing" id="timing"></a>

We recommend delays of at least 12-24 hours post cart abandonment in order to give time for natural conversion to occur first.. With this delay, customers will still have a chance to convert via email first, and if they do, they’ll be removed from the direct mail campaign. Even though your email series may continue for longer, the incremental lift Direct Mail provides at this point is tangible.

### Holdouts <a href="#holdouts" id="holdouts"></a>

Taking a holdout group allows for the platform to calculate lift metrics when sharing transactional data for in-platform reporting. Depending on the volume of abandon carts, we recommend taking at least a 10% holdout to measure the true success of the campaign against a control group. Holdouts can be set during campaign setup and adjusted in your campaign’s settings by clicking Edit Campaign.

***

## Shopify: Abandoned Cart Playbook <a href="#poplar-for-shopify-abandoned-cart-playbook" id="poplar-for-shopify-abandoned-cart-playbook"></a>

Before setting up your Abandoned Cart Playbook, make sure your campaign has been created in Poplar and creative files have been uploaded. **Do not pause your campaign after creating it, it needs to be Active for trigger selection.** Your campaign will not start mailing until you've connected it to you playbook and turned it **ON** under the production environment.

When downloading the [Poplar for Shopify App](/integrations/supported-platforms/shopify), you'll notice it comes with a template Abandoned Cart playbook:

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/625488ff0ecc5b19245369a0/file-Qk0CZcEYb2.png" alt=""><figcaption></figcaption></figure>

To connect the playbook to your Poplar campaign, click **Edit** and select **Advanced Settings**. Here you will see the option to name your playbook, select the event trigger, campaign, desired filters, mailing delay, and whether you want to go live in a Test or Production environment. Only customer mailing address is captured, once it is entered and the checkout process is abandoned. Because of this, Address Enrichment does **not** need to be enabled for Shopify abandoned cart triggers, as no email data will come through the platform.

Select your Poplar campaign from the dropdown, and a preview of your creative will appear underneath. Under Final Touches, we recommend selecting the Test environment first so you can confirm the setup is successful without actually mailing or being charged.

## **Mailing Delay** <a href="#mailing-delay" id="mailing-delay"></a>

The Abandoned Cart event trigger has an automatic 24hr delay that cannot be adjusted. This means if a customer converts within 24hrs of abandoning their cart, they will not receive a mailer. The Mailing Delay simply controls when the mailer will send. If your Mailing Delay is set to 3, and a customer abandons cart on Monday but converts on Wednesday, they will still receive a mailer which will move to production on Friday. Save your playbook and turn it on to let the test triggers roll in.&#x20;

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6255a3b9ffcff713a5aa948f/file-SVeLxfEhmU.png" alt=""><figcaption></figcaption></figure>

Head to the **History** section of your Poplar campaign to see each individual mailer and confirm the data is coming in successfully. Once confirmed, head back to Shopify and Edit your playbook to use the Production Environment, then turn the playbook **ON** to go live!

***

## Klaviyo Webhook <a href="#klaviyo-webhook" id="klaviyo-webhook"></a>

Before testing your [Klaviyo](/integrations/supported-platforms/klaviyo) webhook integration, make sure your campaign has been created in Poplar and creative files have been uploaded. **Do not pause your campaign after creating it, it needs to be Active for trigger selection.** Your campaign will not start mailing until you've connected it to you playbook and turned it **ON** under the production environment.&#x20;

If you're sending email data to the platform for address matching, make sure **Address Enrichment** is **Enabled** under your campaign settings - if it is not enabled, you will see a failed mailing status under your campaign History. Whether you have an existing abandoned cart flow or are creating one from scratch, you'll want to select the **Webhook** action and drag it into your flow when you want to trigger a mailer:

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6255cf33fe22234cc7b34bee/file-aIRgnaSJ0L.png" alt="" width="375"><figcaption></figcaption></figure>

Follow the steps to set up the [Klaviyo // Poplar](/integrations/supported-platforms/klaviyo) mail trigger, first using your Test access token to confirm the connection is successful. When timing the trigger, it's important to consider time in transit, when a customer could potentially end up converting shortly before receiving the mailer.

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6255d405fc54e76aac36c642/file-nXh3hPGKgA.png" alt="" width="375"><figcaption></figcaption></figure>

Save your webhook configuration and turn it on to let the test triggers roll in. Head to the **History** section of your Poplar campaign to see each individual mailer and confirm the data is coming in successfully. Once confirmed, head back to Klaviyo and Edit your Webhook to swap in your Production token where your Test one was, then switch your Webhook to Live!


# Lookalike Prospecting

Use a seed list of your existing customers to build a Lookalike prospecting list of recipients with similar interests and shopping habits

Lookalike models are special, custom prospecting lists created from traits and/or behaviors identified within your existing customers. These can encompass purchasing behavior, interests, affinities, and additional predictive traits you wouldn’t initially think of.

## What's so great about Poplar's lookalike models? <a href="#whats-so-great-about-poplars-lookalike-models" id="whats-so-great-about-poplars-lookalike-models"></a>

In Poplar, we've built a streamlined lookalike model development process that allows you to build a lookalike model within 2-3 business days.

* On-demand models
* Minimums start at just 5,000 circulation
* No requirement to contribute to any data share
* *Complimentary* 10% or 20% Holdout group (optional but highly recommended to calculate lift metrics)

By using this feature you accept the [Poplar Terms of Use for Prospecting Data](https://heypoplar.com/legal/terms-of-use-prospecting-data).

#### Requirements <a href="#requirements" id="requirements"></a>

Lookalike lists are built as part of a **One Time Send** launch flow. This means creative files must be uploaded to your campaign beforehand, so they can be selected during the first step in the flow. After submission, the list can take up to 3 business days to build, and the campaign will immediately move to production once audience sourcing is complete.

* You need at least 1,000 customers to build a lookalike model. Your file should contain full name and address data only, emails are not accepted.
* Do NOT cull the customer list on your end. Even if you have more than 1,000 customer records, you should upload the ENTIRE file for best results
* Your uploaded customer list will double as a suppression list for the campaign, but any additional state, zip code, or Audience list suppressions should be set under the campaign's Suppressions tab.
* Ensure you have enough funds in your credit balance for the mailing. Your estimated cost: quantity of mailings \* ($0.07 + cost of your creative)

Although circulation *starts* at only 5,000 we recommend at least 10,000 prospects to get a better grasp on your target audience and analyze the results which would carry more statistical weight.

***

{% stepper %}
{% step %}

### Customer Seed List

Start by either uploading a list of your customers to Audiences or, if you're sharing Order Data via the Shopify App, you can use your Customers (API) list. These lists will also automatically act as suppression lists so you don't end up mailing any existing customers.

{% hint style="info" %}
Your customer list must contain at least 1,000 people. Additionally, we don't recommend culling your customer list - the more data there is to build the model off of, the better the results will be.
{% endhint %}
{% endstep %}

{% step %}

### One Time Send → Build a Model

Create a new One Time Send and give it a unique name, then select **Build a Model** as the Send Type and select your customer seed list, or click Add a New Audience if you haven't uploaded one yet:

<figure><img src="/files/rBrz6jR3Ius44dANU1b0" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Quantity, Attributes & Suppressions

Enter your desired circulation (excluding holdout) and any required attributes for your model. We highly suggest avoiding using the attributes unless they are absolutely key to your product or if your product doesn't serve a certain group. For example:

* You sell only women's clothing
* You're a real estate firm and you're mainly marketing to homeowners who want to sell
* You're selling children's toys (and thus want to market only to households with children)

#### Why?

* The lookalike model automatically reflects the demographic patterns discovered amongst your customers.
* Letting the model run naturally will allow you to get the highest-ranking names from the largest universe of prospects.

<figure><img src="/files/MMYY1SIsn46CM531GAng" alt=""><figcaption></figcaption></figure>

To give a concrete example, let's say, Sally, David, Bob, Linda, and Annie were your top 5 prospects based on their purchasing behavior.

If you deselected "Male", we would remove David and Bob, who were actually ranked 2nd and 3rd in terms of likeliness to convert - and replace them with Amanda and Jane (ranked 6 and 7 in your list).

<figure><img src="/files/sRKGnIurZ5AoboXpftsc" alt=""><figcaption></figcaption></figure>

During the modeling process we collect some additional details, including a list of 5-10 competitors and your product category. We highly recommend sharing all these details as they help inform the model of the types of purchases it should give more weight.
{% endstep %}

{% step %}

### Creatives

Select which creative(s) you'd like to use:

<figure><img src="/files/jluFk3Ijh7uzwbu6ceSi" alt="" width="375"><figcaption></figcaption></figure>

{% endstep %}

{% step %}

### Holdouts

Here you can choose whether you want to enable or disable a holdout group. For Prospecting campaigns specifically, holdout groups are value to calculate lift metrics. This determines who converted because they received a mailer vs. who would've converted anyway without receiving one.
{% endstep %}

{% step %}

### Review Proofs & Launch!

Review your creative proofs to make sure the address block is in the right place and not covering any key text, and that any offer expiration dates are at least 30 days in advance.

The final page before launch will show a breakdown of cost, timeline to expected in-home date, all settings and creative details.

<figure><img src="/files/KPnx6RdYCPW4nT2NcZpj" alt=""><figcaption></figcaption></figure>

Click **Submit** and sit back while the new customers roll in!
{% endstep %}
{% endstepper %}

## Processing & Tracking <a href="#process-mailing" id="process-mailing"></a>

Once you hit "Submit", we begin our modeling process, which occurs in the span of 2-3 business days. The steps involved in sourcing an audience are:

1. Your customers (first-party data) are matched against a co-op database that contains your customers' purchasing behavior from parties other than yourself (third-party data).
2. The prospects in the database are then scored according to their similarity in purchasing behavior to your customers.
3. Next, all potential customers that don't comply with your overlays are removed, suppressions are removed, and the top viable prospects are finalized for mailing.

Once the top prospects are sourced, your mailing automatically goes into printing & production, without further action needed from you.

Production & mailing will occur, just like any other mailing in Poplar where you uploaded a CSV of addresses or emails. These steps follow the normal timelines of First Class or Standard postage depending on your selection. Refer to the History section of your campaign to track progress through the mail stream!


# Transactional Data

Upload or share transactional data via integration for real-time attribution metrics

## Attribution Reports

To generate attribution reports in Poplar, transactional (order) data must be shared with the platform by one of three ways:

* [**Manual CSV Upload**](/platform-basics/transactional-data/csv-upload)
* [**Poplar's Shopify App**](/platform-basics/transactional-data/shopify-order-data)
* [**Orders API Integration**](/api/endpoints/orders)

If you haven't shared transactional data using one of these methods, Poplar will not be able to calculate attribution metrics. **If you did not set a Holdout group for your campaign upon mailing, the platform will not be able to calculate Lift metrics.**&#x20;

<figure><img src="/files/EV4o0dqY2eZzifvjqLBu" alt=""><figcaption></figcaption></figure>

Attribution reports are updated with a roughly **24 hour delay** as data flows into our system. If you change your attribution window at any point after setting up your campaign, it will take time to refresh and reload your new attribution data.

Poplar measures customer response to mailings using the **last-touch attribution model.** This means that we attribute orders to the most recent mail piece (within the attribution window).

### Attribution Window <a href="#attribution-window" id="attribution-window"></a>

The attribution window is the length of time after customers have received your mailing for which you want orders to count towards your campaign. You can set a custom attribution window when you create a new campaign, and adjust the window by editing an existing campaign. This is the period of time for which you wish to credit a customer's transaction to the mailing. **By default, Poplar uses the recommended 90-day attribution window.**

{% hint style="info" %}
If you would like to adjust your attribution window, please reach out to your dedicated Account Manager or <hello@heypopler.com>
{% endhint %}

Before your attribution window has fully passed you *may* begin to see results populate, but because these are incomplete, we suggest waiting until the attribution window has fully passed before evaluating the performance of the mailings.

Typically 60-70% of conversions will occur in the first 30 days, 20-30% in the 30 days following that, and around 10% in the final 30 days. **The 90-day window is a Direct Mail industry standard, and is the best option to see the full scope of the numbers.**

Adjusting this setting after reports have been generated will result in a wait time for re-calculation. Your attribution reports are updated roughly on a 24 hour delay. If you change your attribution window at any point after your set up your campaign, it will take some time to refresh and reload your new metrics.

### **In-home Dates**

In-home dates start when the first mailing of the creative is in home. To provide a direct comparison across postage types and holdouts, there is a slight nuance to this rule.

Let's say you sent two mailings on January 1:

**Mailing A** used Standard postage **Mailing B** used First Class postage

And let's say **Mailing B** was in-home on Jan 5 (e.g. Jan 5 was the Delivery Scan Date):

For *all* mail pieces from A and B, including any holdouts in A and B, we would consider **January 5** as the in-home date. This allows you to directly compare the results from all mailings on January 1.

***

## Reporting Window

You may select a different date range to see mailings In Home during that time period. The reporting window refers to the dates mailings were in home, but the matchback will always include all transaction data we have available. Please keep in mind that this is different from the **attribution window**. To view reports by day instead of by week, simply adjust the Reporting Window to only show the past seven days:

<figure><img src="/files/U6hioA2Tqy5cSISHO6Ep" alt=""><figcaption></figcaption></figure>

## New Buyers

The [Orders API](https://developers.heypoplar.com/endpoints/orders) allows you to specify whether transactions came from a new buyer (customer) or not. If you're sharing order data via the [Shopify App](/integrations/supported-platforms/shopify), this metric will be passed automatically. If you are using Poplar in any customer acquisition campaigns, or if you just want to filter your attribution reports by new customers, we recommend including this metadata through the Orders API.

## Holdouts <a href="#holdouts" id="holdouts"></a>

The holdout metrics allow you to compare activity amongst the mailed group vs. customers who did **not** receive a mailer but converted anyway. If you opted for a holdout group when setting up or launching your campaign, the holdout group performance will appear right below the mailed group's metrics for easy comparison. If you did not enable a holdout for your campaign, the platform will not be able to calculate lift metrics.


# CSV Upload

Upload a CSV file of your transaction data for in-platform attribution reports

Measuring the impact of your direct mail campaigns can easily be done from inside the platform. We recommend waiting 30-90 days after your campaign's in-home date to see the full scope of success accurately reflected in the numbers.

<figure><img src="/files/WqTvsLHP6MNU2LaR52oJ" alt="" width="563"><figcaption></figcaption></figure>

A CSV record of your order data can be uploaded to the [Transactions](https://app.heypoplar.com/transaction) page of your account. Records can be uploaded more than once, without having duplicates - the platform will ignore duplicates and update any changes to existing orders by **order\_id.**

## **Required Data**

To run attribution reports the platform requires (at minimum) **order\_id, order\_date, shipping address OR billing address and order\_amount** to calculate revenue related metrics. For campaigns that mailed using emails for Address Enrichment, we accept **email OR hashed\_email** to match against as well.

<table><thead><tr><th width="233.203125">Column Header</th><th width="142.62890625">Required</th><th>Description</th></tr></thead><tbody><tr><td><strong>order_id</strong></td><td>Y</td><td>A unique identifier for each order</td></tr><tr><td><strong>order_date</strong></td><td>Y</td><td><p><strong>YYYY-MM-DD</strong></p><p><br>Must be an <strong>ISO8601</strong> formatted date representing the date and/or time of purchase</p></td></tr><tr><td><strong>order_amount</strong></td><td>Y/N</td><td><p><strong>Required</strong> to calculate Revenue and related metrics (CPO, ROAS, etc.), must represent the total order value in <strong>decima</strong>l form</p><p><br><em>Optional for use cases that don't require revenue tracking (site sign-ups, app downloads, etc.)</em></p></td></tr><tr><td><strong>customer_id</strong></td><td>N</td><td>A unique identifier for the transacting customer in your e-commerce system</td></tr><tr><td><strong>billing_name</strong><br><strong>billing_address_1</strong><br><strong>billing_address_2</strong> <br><strong>billing_city</strong><br><strong>billing_state</strong><br><strong>billing_postal_code</strong></td><td>Y/N</td><td><p><strong>Required</strong> if Shipping Address data is not provided</p><p><br><em>Optional to include with Shipping Address data</em></p></td></tr><tr><td><strong>shipping_name</strong><br><strong>shipping_address_1</strong><br><strong>shipping_address_2</strong><br><strong>shipping_city</strong><br><strong>shipping_state</strong><br><strong>shipping_postal_code</strong></td><td>Y/N</td><td><p><strong>Required</strong> if Billing Address data is not provided</p><p><br><em>Optional to include with Billing Address data</em></p></td></tr><tr><td><strong>email</strong></td><td>N</td><td><p>Can be used to match against campaigns that mailed using emails for <strong>Address Enrichment</strong></p><p><br><em>This data is not stored by Poplar, it is used to compute a hash and then discarded</em></p></td></tr><tr><td><strong>hashed_email</strong></td><td>N</td><td><p>The SHA256 has of the customer's email address as a 64 character string</p><p><br><em>Please convert the value of the email address to lowercase prior to hashing</em></p></td></tr><tr><td><strong>metadata</strong></td><td>N</td><td>Additional order details such as items purchased or <strong>New Buyer</strong> tags</td></tr><tr><td><strong>currency_code</strong></td><td>N</td><td>Three character ISO country-code - if not provided will default to <strong>USD</strong></td></tr></tbody></table>

## File Upload

The platform is built to handle file sizes up to **250MB** for both Audiences and Transactional uploads. After mapping and submitting your file, depending on the size you could see it queued or processing and upon completion you'll receive a success email.

<figure><img src="/files/m7Pa3PHZ4nnnC9QzeYws" alt=""><figcaption></figcaption></figure>

### Error Report

If your file contains any formatting errors, you'll see the option to download an Error Report. This file will contain the reason the row was rejected with the corresponding line in your file so it is easy to find.

<figure><img src="/files/xGE1ueiraXSmwuFLG74k" alt="" width="563"><figcaption></figcaption></figure>


# Shopify Order Data

Download the Poplar Shopify App to instantly start sharing Order data with the platform.

## Poplar Shopify App

Download the [Poplar Shopify App](https://apps.shopify.com/poplar-1) to instantly start sharing order data in the platform. You can confirm the connection is successful if you head to your Poplar **Audiences** and click into **Customers (Orders API)**, you should see a list of customer shipping and billing addresses start to populate as orders roll in. Eventually, you'll see data start to populate the **Transactions** page as well.

{% hint style="warning" %}
If you enable Transactional Reporting after your initial in-home date, you'll have to backfill the order data by exporting from Shopify and **manually uploading** a CSV to the Transactional Data tab in your Poplar account.
{% endhint %}

## Exporting Orders from Shopify

If you enable data sharing via Shopify after a campaign has reached homes, you'll need to back-fill the order data manually by exporting a CSV from Shopify and uploading it to Poplar to generate the correct metrics.

### **How to Export**

When exporting order data, you'll want to follow the steps detailed in Shopify's documentation linked below:

It is important to filter your orders to include only the relevant data, otherwise you will likely run into issues when uploading your CSV to Poplar, or end up with incorrect metrics.

* **Delivery Method:** ship to customer
* **Payment status:** authorized, paid, partially paid
* **Date:** first campaign launch - present/date when transactional data sharing was turned on

Next you'll want to click Export in the top right, specify the date range if necessary, select Plain CSV file then Export orders:

<figure><img src="/files/LgmXfJ8jthoNaEk0KvZf" alt="" width="563"><figcaption></figcaption></figure>

### **How to Upload**

Minor formatting adjustments will need to be made to your CSV before it can be successfully uploaded to Poplar. We recommend making these updates in Excel (if you're proficient), or copy and pasting the required columns into Google Sheets to make adjustments.

| Shopify Column                                                                                                       | Poplar Required Field                                                                                                    | Format                                                                                                                                                                                                        |
| -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Name                                                                                                                 | order\_id                                                                                                                | <p>Integer (Not scientific notation)<br><em>10004</em></p>                                                                                                                                                    |
| Created at                                                                                                           | order\_date                                                                                                              | <p>ISO8601 Date<br><em>YYYY-MM-DD</em></p>                                                                                                                                                                    |
| Total                                                                                                                | total                                                                                                                    | <p>Number<br><em>0.00</em></p>                                                                                                                                                                                |
| <p>Billing Name<br>Billing Address1<br>Billing Address2<br>Billing City<br>Billing Province<br>Billing Zip</p>       | <p>billing\_name<br>billing\_address\_1 billing\_address\_2<br>billing\_city<br>billing\_state billing\_postal\_code</p> | *Optional to include with Shipping Address data*                                                                                                                                                              |
| <p>Shipping Name<br>Shipping Address1<br>Shipping Address2<br>Shipping City<br>Shipping Province<br>Shipping Zip</p> | <p>shipping\_name shipping\_address\_1 shipping\_address\_2 shipping\_city<br>shipping\_state shipping\_postal\_code</p> | *Optional to include with Billing Address data*                                                                                                                                                               |
| Email                                                                                                                | email                                                                                                                    | <p>Can be used to match against campaigns that mailed using emails for <strong>Address Enrichment</strong><br><em>This data is not stored by Poplar, it is used to compute a hash and then discarded</em></p> |

The platform will automatically dedupe records by Order ID. Shopify will export individual items in an order under the same Order ID, but the total for the order will only be present on one record, which is why you'll see a number of blank rows in the total column - this is expected and will not skew attribution results.

Once you've double checked your column headers and formatting, head to the [Transactions](https://app.heypoplar.com/transaction) page in Poplar and click **Upload Transactional Data** to upload your CSV. Map the headers accordingly

<figure><img src="/files/LW6nrMoU4G3TzLVOa2rv" alt="" width="419"><figcaption></figcaption></figure>


# Metrics Glossary

A guide to Poplar's Attribution Metrics

### Average Order Value (AOV) <a href="#average-order-value-aov" id="average-order-value-aov"></a>

The average order value of all orders attributed to the campaign or mailing.

### Conversions <a href="#conversions" id="conversions"></a>

The total number of conversions or orders that were attributed to the campaign or mailing.

### Cost Per Order (CPO) <a href="#cost-per-order-cpo" id="cost-per-order-cpo"></a>

Total spend divided by number of conversions.

### Mailed <a href="#mailed" id="mailed"></a>

The number of mailings sent. This excludes suppressions, exceptions, and holdouts.

### New Buyer (NB) <a href="#new-buyer-nb" id="new-buyer-nb"></a>

The number of orders attributed to these mailings that came from new buyers. In order to report New Buyers, you must specify whether each order is associated with a New Buyer or not, through the Metadata Object when using the Orders API.

### Return on Ad Spend (ROAS) <a href="#return-on-a-d-spend-roas" id="return-on-a-d-spend-roas"></a>

Revenue from the attributed conversions divided by spend.

### Response Rate (RR) <a href="#response-rate-rr" id="response-rate-rr"></a>

The percentage of mailings (in the selected reporting window) that converted within the attribution window. Please keep in mind that you might have set different attribution windows across various campaigns.

### Revenue <a href="#revenue" id="revenue"></a>

The total revenue from conversions (orders) attributed to the campaign or mailing.

### Spend <a href="#spend" id="spend"></a>

The total billable for the mailings sent. This includes the costs for the postcards and any additional data. All spend is reported as part of the mailed group.

### Unique <a href="#unique" id="unique"></a>

The number of unique customers (mailing recipients) with 1 or more orders.

### Incremental Metrics <a href="#incremental-metrics" id="incremental-metrics"></a>

The metrics below are only available if you enabled holdouts for the campaign.

### Incremental Cost Per Order (Inc. CPO) <a href="#incremental-cost-per-order-inc.-cpo" id="incremental-cost-per-order-inc.-cpo"></a>

The incremental cost per acquisition for the mailed group vs. the holdout group. It indicates the costs of the entire campaign spread over solely incremental orders (Orders Lift), or conversions beyond what was generated in absence of the campaign (holdout).

### Incremental Return on Ad Spend (Inc. ROAS) <a href="#incremental-return-on-a-d-spend-inc.-roas" id="incremental-return-on-a-d-spend-inc.-roas"></a>

The incremental ROAS for the mailed group vs. the holdout group. It indicates the return that was generated from this campaign beyond what was generated in absence of the campaign (holdout).

### Orders Lift <a href="#orders-lift" id="orders-lift"></a>

The incremental lift (difference) in the number of conversions in the mailed group vs. holdout group.

### Response Rate Lift (RR Lift) <a href="#response-rate-lift-rr-lift" id="response-rate-lift-rr-lift"></a>

The incremental lift (difference) in Response Rate in the mailed group vs. holdout group.

### Revenue Lift <a href="#revenue-lift" id="revenue-lift"></a>

The difference in Revenue between the mailed vs. holdout group.


# Mailing Data

How to read and obtain a record of your campaigns' mailing history - as well as what's included

## Mailing History

The campaign overview's **History** section is going to be your greatest asset for tracking the status of individual mailers, testing integrations, and viewing incoming Request Details. Once a One Time Send has launched and processed or a trigger is set live and is sending requests, a list of individual mailers will start to appear.

<figure><img src="/files/Th6eAAUIRrkojypkvmlD" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**If testing a trigger integration,** the History section is where you'll want to look to confirm the requests are successful, merge tags are populating correctly, and all the necessary mailing data is coming through as expected.
{% endhint %}

## Mailing States & Environment

In the top right you'll see a tool for filtering by Mailing State and/or API Environment, the option to Download a CSV record, and a calendar tool for filtering by date. In the top left you'll see a mailing count which reflects the filter settings.

<table><thead><tr><th width="237.16796875">Status</th><th>Description</th></tr></thead><tbody><tr><td>processing</td><td>Confirming all details of the mailing and production.</td></tr><tr><td>production</td><td>The mailer has passed data and suppression checks and is in print production.</td></tr><tr><td>holdout</td><td>Not mailed as part of the control group.</td></tr><tr><td>suppressed</td><td>The mailer recipient was found on your Do Not Mail list, or suppressed due to another setting such as regional, domain, or recently mailed.</td></tr><tr><td>delivered</td><td>Scanned and processed for delivery by USPS.</td></tr><tr><td>in_transit</td><td>The mailer has received one or more USPS mail scans and is on its way to the recipient. The <strong>Mailed</strong> state also falls under in-transit.</td></tr><tr><td>exception</td><td>An exception occurred while processing. This includes invalid addresses, unmatched emails for Address Enrichment, campaign budget exceeded, or insufficient account credit.</td></tr><tr><td>production_key</td><td>Successful trigger requests using your Production API Key.</td></tr><tr><td>test_key</td><td>Incoming trigger requests using your Test API Key.</td></tr></tbody></table>

**Numbers and mailing status are most accurately reflected under the History tab.** While the graphs shown on the overview page are a useful visual aid, always refer to the campaign History for the most detailed account.

Once a mailer is **In Transit** or **Mailed**, status updates are based on incoming scans from USPS. If you notice a slight lag in delivery updates, we recommend checking back in later or the following day in case USPS hasn't updated their data yet.

***

## Download History

The Mailing State, Environment and Calendar filter setting will be applied when downloading a CSV record. Shortly after clicking Download CSV, you'll receive an email from <no-reply@heypoplar.com> with a download link - this email can take up to 15 minutes to arrive depending on the amount of data requested.

### Single Campaign

Click into a campaign and scroll to the bottom to arrive at the History section. Filter dates and states as needed, then click the download button to receive an email containing the CSV file.

<figure><img src="/files/BF3DqYi3HKHHRWniMFu3" alt="" width="563"><figcaption></figcaption></figure>

### All Campaigns (Mailing Data)

To download the Mailing History for all campaigns across your account, head to the [Mailing Data](https://app.heypoplar.com/integrations/mailing) page under Integrations - this also appears as the Exports tab:

<figure><img src="/files/MVy9FwbWXHTw2aoJVxEV" alt="" width="563"><figcaption></figcaption></figure>

### Data Columns

Both downloads will contain the following data columns:

| Column                   | Description                                                                                                                                                         |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| campaign\_id             | The ID of the parent campaign.                                                                                                                                      |
| campaign\_name           | The name of the parent campaign.                                                                                                                                    |
| mailing\_id              | The ID of the individual mailing.                                                                                                                                   |
| current\_state           | The current state of the mailing.                                                                                                                                   |
| mailing\_time            | The timestamp when the mailing was created. This is in UTC.                                                                                                         |
| scheduled\_for           | The scheduled mailing time (if set).                                                                                                                                |
| postage\_type            | The type of postage applied to the mailing (usually either first class or standard mail).                                                                           |
| format                   | The format of the mailing (e.g. "6x9 postcard")                                                                                                                     |
| creative\_id             | <p>The ID of the creative used for the mailing.<br>If you are running an A/B test of multiple creative then this will be different per creative.</p>                |
| creative\_name           | The name of the creative used for the mailing.                                                                                                                      |
| email                    | The email address submitted with the mailing.                                                                                                                       |
| external\_id             | The external\_id provided when creating the mailing.                                                                                                                |
| name                     | The name printed on the mailing.                                                                                                                                    |
| address\_1               | <p>Address line 1<br><em>When using the address append functionality, as per our terms of use, this information is redacted and not provided for download.</em></p> |
| address\_2               | <p>Address line 2<br><em>When using the address append functionality, as per our terms of use, this information is redacted and not provided for download.</em></p> |
| city                     |                                                                                                                                                                     |
| state                    |                                                                                                                                                                     |
| postal\_code             | 5 digit postal code                                                                                                                                                 |
| postal\_code\_ext        | 4 digit postal code extension                                                                                                                                       |
| expected\_delivery\_date | <p>The expected delivery date of the mailing.<br>This is an estimate calculated based on submission time and historical mailing data.</p>                           |
| actual\_delivery\_date   | The date of the USPS delivery scan. Typically this occurs at the local post office, within 0-48 hours of the mailing arriving at the recipients mailbox.            |
| estimated\_cost          | The estimated cost of the send based on the postage and format of the mailing.                                                                                      |
| send\_type               | The type of send. Valid values are `API` and `MANUAL`. This indicates if the mailing was triggered by our API or if it was created as a one-time send.              |
| manual\_send\_id         | This allows you to group mailings that are part of a one-time send.                                                                                                 |
| merge\_tags              | The merge tags used for the mailing.                                                                                                                                |
| environment              | This indicates if a test API key was used for the mailing. Valid values are `test` and production.                                                                  |

***

## Indvidual Mailers

Each individual mailer, along with a unique mailing ID will appear listed under the History section. Click into a mailer to see a summary of the **Mailing Details, Event Log, and Request Details.** If the mailer is or was in print production, you'll see an image preview with address and merge tag (if applicable) data applied and the option to download a PDF proof:

<figure><img src="/files/OaZ1ATFwkn4DFr4yW8Wl" alt=""><figcaption></figcaption></figure>

### Mailing Details <a href="#mailing-details" id="mailing-details"></a>

Under the **Mailing Details** you see the Recipient Address, Campaign name, Creative name, Postage Type, Trigger Source (API Request or Manual Send), Creative Type, send\_at trigger setting, Estimated Cost (price per piece), and a list of any custom merge tags used showing their name and value as populated based on mailing data.

<figure><img src="/files/2vgxoxGKB5SqIV6CIwfW" alt=""><figcaption></figcaption></figure>

### Event Log & Request Details

The Event Log shows a Timestamped record of how long the mailer spent in each step of the mail cycle from **Created** to **Delivered.**

If the mailer was launched via trigger or integration with our Mailing API, the individual webhook data will be shown in the **Request Details.**

<figure><img src="/files/I5PI6HnkgOUaipxLt9wC" alt=""><figcaption></figcaption></figure>


# Account Settings

To access your Organization Settings, Plan, Team, Privacy Requests, Organizations (if your email is tied to more than one), and to edit your Profile click the icon with your name in the bottom left:

<figure><img src="/files/2zsPa6zdAAxXvQ2KnUO6" alt="" width="247"><figcaption></figcaption></figure>

## Organization Settings <a href="#account-suppressions" id="account-suppressions"></a>

From Organization Settings you're able to access and edit your Organization details, Suppression Settings, Authentication Settings, and Organization Attributes:

<figure><img src="/files/anfe1cCVynDHb0iLNhMZ" alt=""><figcaption></figcaption></figure>

### Minimum Days Between Mailings <a href="#minimum-days-between-mailings" id="minimum-days-between-mailings"></a>

The delay acts as a frequency cap with which you can suppress multiple mailings to the same address within a given timeframe.

When mailing multiple samples to the same address, we recommend setting **Minimum Days Between Mailings** to 0 to avoid unwanted suppressions. Once you've received your samples, approved the mailings, and are ready to go live, we recommend changing this setting to any number of your preference that's larger than 0.

### SLM Global Opt-out List <a href="#slm-opt-out" id="slm-opt-out"></a>

This list includes households who are not interested in receiving promotional mailings. **Only adjust this setting to off if using the platform in a non-promotional nature.**

### Suppression Email Domain <a href="#suppression-email-domain" id="suppression-email-domain"></a>

You can suppress mailings to individuals within your own organization by specifying an email domain. Please note that this will only apply if you use the address enrichment feature or supply a customer's email address when triggering your mailings.

### Address Strictness (Organization Default) <a href="#address-strictness" id="address-strictness"></a>

These settings control the [Address Validation](/getting-started/audiences/address-validation) rules when **Organization Default** selects strictness on a campaign level. Varying rules are applied when uploading address data and when sending mailings to gauge the highest possible deliverability.

### Profile <a href="#profile" id="profile"></a>

You can view and adjust your personal information and email notification settings from the profile tab. Your User Profile stores the full name and email address attached to your account. It can be updated as needed.

<figure><img src="/files/mNYNChSXAKw1SKYaK8jG" alt="" width="563"><figcaption></figcaption></figure>

For your Security, Poplar uses **two-factor authentication.** We highly recommend enabling this feature as an additional layer of protection for your account.

**The Communication Settings** control email notification preferences for product updates, reports & data exports, etc., and product analysis.

***

## Team <a href="#team" id="team"></a>

Here you can view and manage your team members for your organization. To add a new user, click **Add Team Member** and enter their email. When a new team member is added, they'll receive an email invitation to log into the platform. Invite emails expire in 2 weeks. If a user has not accepted their invite, you can re-trigger the invite by clicking on the resend icon 🔁 .

## Privacy Requests <a href="#privacy-requests" id="privacy-requests"></a>

In compliance with CPRA, a CSV record can be uploaded to this page for Access or Deletion:

<figure><img src="/files/8CHnsCetNglhWAdtQMRR" alt="" width="563"><figcaption></figcaption></figure>

## Multi-Org <a href="#multi-org" id="multi-org"></a>

If you're an agency managing more than one client or have multiple product lines you'd like to create separate organizations for, Poplar supports multiple Organizations under a single login so you can easily navigate between accounts.

<figure><img src="/files/rjZNLHzGITeXBRjIfOQT" alt="" width="563"><figcaption></figcaption></figure>

Billing and reporting operate independently for each account, and accounts are only visible to users who belong to them. For example, if you're managing multiple client accounts and invite a client to have access to their account, they will not be able to see the list of other organizations associated with your user/email.


# Promotions

Store a list of unique promo codes for dynamic creatives

A high-level preview of what you'll need to get started:

1. **Export:** Generate a list of single-use codes in your CMS and export to a CSV file.
2. **Upload**: Add the list of promotion codes to a Promotion you create into Poplar.
3. **Send**: Associate a promotion with an HTML creative you're using for your one-time send or triggered mailing. Poplar will dynamically insert one code per message wherever you insert the promotion tag.

When sending a single, shared code to many customers, you can:

* display the code as part of your image
* use a variable to show the same code to all recipients of a given campaign using merge tags

If the creative includes **multiple** promotions the generated codes must be uploaded to **separate promotion lists with unique names**.

{% hint style="warning" %}
You **must** complete these steps prior to uploading creative, so a promotion list can be selected to map to a merge tag.&#x20;
{% endhint %}

## **Export Discount Codes from Your Commerce System**

In your commerce platform, create a set of unique, single-use discount codes for your promotion. You will need to export those codes to a file and then import them into Poplar. The import file must be a CSV with your codes under a header. We recommend "code".

If you are using [Shopify](https://help.shopify.com/manual/apps/apps-by-shopify/bulk-discounts), your exported CSV file will already be in a valid format and can be directly uploaded.

## Create a Promotion <a href="#create-a-promotion" id="create-a-promotion"></a>

To use promotion codes, you will need to create a promotion to hold codes that you create in your external commerce system. You'll then specify the promotion in your template for triggered sends or one-time send.

1. In the left-hand navigation, select **Promotions**.
2. Add a **Promotion Name**. You will use this name to reference the promotion in your templates.
3. Click **Upload File** and select your CSV file.
4. Map the column you wish to import. Click **Continue.**
5. Once the codes have been imported, Review & Confirm and click **Finish Import**.

### Mapping Promotions to Creative <a href="#adding-promotions-to-creative" id="adding-promotions-to-creative"></a>

When uploading an HTML creative, insert a merge tag. We recommend adding `{{promotion.promo_code}}` to your creative, which will populate a promo code.

1. Import your creative to your campaign as your normally would.
2. You can choose the promotion (or promotions) you would like to associate with the campaign during import.

<figure><img src="/files/die5VpI5kjPNreV5IiDp" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
If your Promotion has < 100 available codes, we will send you an email to remind you to refill the promotions. If you run out of codes, mailers will stop sending an accumulate in the Exceptions tab.
{% endhint %}


# Geolocation

Geolocation customization can be applied to your existing audience list.

## Geofences

Geofence perimeters can be established by tracing an area on a map, or from uploading a KML file containing coordinates of a target area. You can choose between only mailing in or not mailing to the selected area. A physical address and custom fields can be added and dynamically referenced in creative artwork. Each individual fence can be selected for use on a campaign level from the campaign's Suppressions tab.

{% hint style="info" %}
These features do **NOT** allow you to source new address data to target specific locations through the platform. Poplar offers custom list sourcing separate from the platform - reach out to your Account Manager or **<hello@heypoplar.com>** with the details of your campaign to get started.
{% endhint %}

**Should I use a Geofence or Saved Location?**

Saved Locations are best suited for storing a brick & mortar address and encompassing a set mile radius around that location for targeting or creative personalization. Geofences are slightly more custom, use adjustable perimeters, and are best suited for either targeting or suppressing certain areas and utilizing location-specific creative personalization.

* **Geofences:** Define any custom area for mailing or suppression.
* **Saved Locations:** Define a radius (aka circular area) around an address with the option to suppress mailings outside this radius.

Geofences must be turned on under the campaign's Suppressions tab. They are not automatically applied across all campaigns.

### **Draw A Map**

To draw your geofence, zoom in or expand the map to the area you need, and click **Draw**. Click a starting point on the map, then continue clicking multiple points to pin down the desired boundaries of your geofence.

<figure><img src="/files/fcodACnk486Nv9UqvUXL" alt="" width="563"><figcaption></figcaption></figure>

You can adjust or clear the polygon at any point. **Non-polygons, broken shapes, and lines won't be accepted.** You'll know your geofence is valid and complete when the polygon turns green.

### **Upload a KML File**

Using an application such as [Google Maps "My Maps"](https://www.google.com/maps/d/u/0/) you can draw multiple geofences, export as a KML file, and upload directly to the platform. Layers can be exported together or individually by clicking the three dots to the right of the map's name and selecting **Export to KML/KMZ:**

<figure><img src="/files/9b6fK3MTonVPeBQnSnaU" alt=""><figcaption></figcaption></figure>

When uploading to Poplar, if your KML file contains multiple polygons, you'll see the option to flip through each one and specify the settings.

### **Add Details**

Give the area a descriptive name then choose if you want to suppress mailers inside OR outside this area:

<figure><img src="/files/R0BZaCn9DzSYUnkWUU7f" alt="" width="563"><figcaption></figcaption></figure>

**Add an Address (Optional)**

Adding a physical address allows you to dynamically pull this information into creative artwork by using [Location Based Merge Tags](about:/article/203-merge-tags#location-based-merge-tags). This is a useful feature if you'd like to point customers to a nearby retailer, information center, or any other relevant destination.

**Add Merge Fields (Optional)**

Merge Fields are custom values you can add into creative artwork via merge tag. They're helpful if you need to list location-specific contact info or want to feature location-specific promotional offers.

* `{{geofence.merge_field_1}}`
* `{{geofence.merge_field_2}}`
* `{{geofence.merge_field_3}}`

### **Finish Geofence**

Once you hit Finish you'll return to the Geofences tab, where you'll see a list of your geofences. We show the **Name**, **Status** (*Active* or *Inactive*) and **Type** (*Included* or *Excluded*) in each geofence, along with a map.

* **Inclusive** geofences are green and will only mail to addresses that fall within the area.
* **Exclusive** geofences are grey and will not mail to addresses that fall within the area.

If an inclusive geofence overlaps with an exclusive geofence, **the exclusive geofence will be honored.**

<figure><img src="/files/e0pr0qvs6kIIGMluTQn0" alt=""><figcaption></figcaption></figure>

When you click into an individual geofence, you can download a CSV of all the zip codes that fall into that geofence and the percentage of each zip code that does. You can also download a copy of the uploaded KML file, if you originally uploaded one.

You can also **Edit, Deactivate,** or **Delete** the Geofence under the *Actions* section on the right. If you click into **Edit**, you can also change a geofence from Inclusive to Exclusive or vice versa.

### **Applying Geofence Suppressions**

Finally, you'll want to enable your geofence from within your campaign's Suppressions tab. Click **Edit Geofence Suppressions** to select your inclusive or exclusive fences then hit **Save Changes.** Our location and area-based checks are performed on the *original* address that you provide. These checks are run **prior** to NCOA, meaning if your recipient has moved, we do not account for the move in our suppression checks.

***

## Saved Locations

Locations may be stores, offices, or any placeholder **address** relevant to campaign targeting. For each location, you have the ability to include a custom *mile radius* and *location-specific* default merge tag values. When enabled this provides the ability to block mailings outside the range of a saved location, or alternatively adjust the creative based on the location.

### Add a Location <a href="#add-a-location" id="add-a-location"></a>

Access the [Locations](https://app.heypoplar.com/geotargeting/locations) page from the Geolocation tab. Here, you can view current saved locations and view their status. Click the green **Add Location** button in the top right corner. Fill out the address form with the store or location you wish to target around.

<figure><img src="/files/Jrx4OShJx7GrhZwczho2" alt=""><figcaption></figcaption></figure>

#### Merge Fields <a href="#merge-fields" id="merge-fields"></a>

Merge fields are any custom personalization you wish to add to your creative based on the saved location targeting. The value set for each merge field can be populated in a creative design by using the following [Location Based Merge Tags](about:/article/203-merge-tags#location-based-merge-tag):

<figure><img src="/files/UVGNVpnmlc6T9s5TFIvn" alt=""><figcaption></figcaption></figure>

* `{{location.merge_field_1}}`
* `{{location.merge_field_1}}`
* `{{location.merge_field_1}}`

{% hint style="warning" %}
Saved Locations must be turned on under each campaign's Suppressions tab. They are not automatically applied across all campaigns.
{% endhint %}

### Apply Location Suppressions <a href="#apply-location-suppressions" id="apply-location-suppressions"></a>

Once you've saved your location, head to the Suppressions tab within your campaign to apply the location targeting as desired:

<figure><img src="/files/B3MDYPBgnb4208efoIV5" alt=""><figcaption></figcaption></figure>

You have the option to suppress any mailer that fall outside the set radius, or mail outside the radius but only populate the merge fields when in rage.

## State & Zip Code Allowlist

You can restrict mailings to specific states or zip codes. For any lists that are submitted, the state and zip code whitelists will suppress any addresses that fall *outside* the set parameters.

Geolocation targeting or suppression are created on an **account wide level**. You can toggle suppressions on/off under the "Suppressions" tab in your campaign overview menu.

### Zip Codes <a href="#zip-code-whitelist" id="zip-code-whitelist"></a>

From the **Geolocation** page, navigate to the **Zip Codes** tab. Click "Add", then, type or paste zip codes in the space provided below. One per line, or separated using commas.

<figure><img src="/files/c0Em8AePILTUyigrH2CE" alt=""><figcaption></figcaption></figure>

### States <a href="#state-whitelist" id="state-whitelist"></a>

From the **Geolocation** page, navigate to the **States** tab. Select *only* the states you wish to mail.

<figure><img src="/files/yfFMGCHRUyFmg06NhzTR" alt=""><figcaption></figcaption></figure>


# Poplar Integrations

Add Direct Mail to your Marketing Automation Stack!

Already sending email, SMS, or push messages through your marketing automation platform? Poplar lets you effortlessly expand into the physical world by activating direct mail as a new channel in your existing workflows. Trigger a mailer the moment your customers take action,  just like any other marketing message - **little to no coding required.**

## Jump right in

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Klaviyo</strong></td><td>Configure a custom webhook in a new or existing Klaviyo Flow.</td><td><a href="/files/sIxPtOkcNLP4k57w0sXX">/files/sIxPtOkcNLP4k57w0sXX</a></td><td></td><td><a href="/pages/pNbPrpEmiUboWzznb8A7">/pages/pNbPrpEmiUboWzznb8A7</a></td></tr><tr><td><strong>Shopify</strong></td><td>Set up Playbooks based on customer activities, or track order data for real-time reporting.</td><td><a href="/files/gCncFBkbyLU0A2bdm4nX">/files/gCncFBkbyLU0A2bdm4nX</a></td><td></td><td><a href="/pages/XIpACcOYa83XxENwnb2G">/pages/XIpACcOYa83XxENwnb2G</a></td></tr><tr><td><strong>Salesforce Marketing Cloud</strong></td><td>Use our Custom Activity in Journey Builder to target recipients in a Data Extension.</td><td><a href="/files/NWNt6tuP43f1d21vKtKW">/files/NWNt6tuP43f1d21vKtKW</a></td><td></td><td><a href="/pages/Y94xa8w0Pvr9jZKbAogE">/pages/Y94xa8w0Pvr9jZKbAogE</a></td></tr><tr><td><strong>Iterable</strong></td><td>push email or full address data to Poplar's <strong>Mailing, Audiences, or Do Not Mail</strong> endpoints via Journey Webhooks.</td><td><a href="/files/CpmNrTdZhVAzesCGCd5b">/files/CpmNrTdZhVAzesCGCd5b</a></td><td></td><td><a href="/pages/RE2BsJd7Nio02r3BZUCy">/pages/RE2BsJd7Nio02r3BZUCy</a></td></tr><tr><td><strong>Customer.io</strong></td><td>Send mailing data from Customer.io to Poplar via webhook in a new or existing Campaign flow.</td><td data-object-fit="cover"><a href="/files/utbatJ7pC43UnwiOBTXF">/files/utbatJ7pC43UnwiOBTXF</a></td><td></td><td><a href="/pages/BG1uxXnbpkGfYmgr8IIo">/pages/BG1uxXnbpkGfYmgr8IIo</a></td></tr><tr><td><strong>Zapier</strong></td><td>If your platform can't integrate directly, use Zapier as a connector between your CRM/ESP and Poplar.</td><td data-object-fit="fill"><a href="/files/6Cvj5uagXkSOI4ZsVcWy">/files/6Cvj5uagXkSOI4ZsVcWy</a></td><td></td><td><a href="/pages/uXtzkxseIKPPaKWWHjJH">/pages/uXtzkxseIKPPaKWWHjJH</a></td></tr></tbody></table>

Don’t see your platform listed anywhere? Reach out to **<support@heypoplar.com>** and we’ll help you get connected.

## Testing vs. Production

Under the [API](https://app.heypoplar.com/integrations/api_keys) section of your **Integrations** page you will find two API Keys: <mark style="color:$success;">Production</mark> and <mark style="color:$warning;">Test</mark>.

<figure><img src="/files/qVJaSl8sOf2fRn1VpxmR" alt=""><figcaption></figcaption></figure>

When setting up your Poplar integration, it is **important** to always use your **Test** access token when configuring your authentication headers. This will allow you to send mailing data to a Poplar campaign without actually mailing pieces or being charged. From your Campaign's Overview, you should be able to see requests populating towards the bottom of the page. You can click into each request to see the mailing data and (optionally) merge tag data.

Once you've confirmed the connection is successfully, and all the necessary data is flowing correctly, you can swap your **Production** token in where your Test one is to **go live** and start mailing.

## Custom Integrations

For more custom integration options, visit our [Developer Docs](https://developers.heypoplar.com) for a full suite of **POST,** **GET** and **DELETE** endpoints available for use.&#x20;


# Klaviyo

Add Direct Mail as a step in your marketing Flows or push your Lists & Segments for use in a One Time Send (see the Poplar App page).

## Overview

Getting started with the Klaviyo + Poplar integration is quick and straightforward, with minimal coding and no engineers required. In the steps below, we’ll walk you through how to connect your accounts, add  direct mail as a step in your Klaviyo flow, and start sending automated postcards! 🚀

With this integration, you can:

* Create a flow from scratch, or add the Poplar Direct Mail webhook to an existing flow to automatically trigger a mailer - the same way you would for email or SMS.
* Send customer/user data to an existing Audience in Poplar, which can be used for suppression or a One Time Send.
* Utilize customer data (*anything stored on a user-level as an **attribute***) to personalize creative artwork (first name, unique promo code, city, last purchase, etc.).
* Use your existing customer segments to delivery timely, targeted messages.

Whether you're re-engaging inactive customers or rewarding your best ones, this integration makes it easy to add direct mail to your marketing mix—no technical skills required.

### Prerequisites&#x20;

Before integrating and sending tests with Klaviyo, make sure you've completed the following:

* [ ] Create a Campaign in Poplar and upload creative (can be a placeholder creative if official designs aren't ready yet).
* [ ] Locate your campaign\_id, Test and Production API tokens in Poplar so you have them ready when creating the webhook.
* [ ] Create a new or select an existing dynamic segment in Klaviyo to use as your trigger action/entry point (we recommend using dynamic segments instead of lists for use cases such as Abandoned Cart, so users can enter and exit the segment if they return to make a purchase before the mailer is triggered).
* [ ] Determine whether you'll be targeting users with full address data, only email data, or both. If you plan on utilizing our [Address Enrichment](#emails-for-address-enrichment) feature to match physical addresses to email addresses, make sure that setting is enabled for your campaign. &#x20;

{% hint style="warning" %}
If creative isn't uploaded to your campaign, you will receive a 400 error in Klaviyo when testing the webhook. The campaign must be **Active** with creative uploaded in order to test the integration.
{% endhint %}

***

## Step 1: Flows

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/65e621776ba1d916ec46742a/file-4sOAiT5G10.png)

From your Klaviyo Dashboard, navigate to your **Flows** page and use the **Create Flow** button, or select an existing one by clicking **Edit Flow**.

## Step 2: Actions

If you're creating a flow from scratch, select your Trigger event, set any necessary filters, and click **Save,** then **Done** to access the Actions step.

Drag and drop the **Webhook** action into your flow:

<img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/65e61e520f2a4c04f24da060/file-J5t9yyEiuh.gif" alt="" width="563">

## Step 3: Conditional Splits

If some of your customers in the flow only have email stored (no mailing address captured), you'll have to add a conditional split and set up 2 separate webhooks: one for users with full address data, and one for users with only email data.

{% hint style="info" %}
If you plan on only mailing to existing customers (users with full address data) or only mailing to users with email data (subscribers/unsubscribers), you can skip the conditional split and move on to step 4.
{% endhint %}

<img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/65e6208ee1b8450992792403/file-qnFZxci9Ee.png" alt="" width="563">

Without the conditional split, any users with only email that try to pass through a full address webhook will fail due to missing address\_1, city, or postal\_code data.

<img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/65e620a1eeacc5315bb868fa/file-D2HXeXcjA7.png" alt="" width="563">

## Step 4: Webhook Configuration

Under the configuration settings on the left, you'll want to enter the following values so that you can trigger a mailing, add a user to an existing audience or Do Not Mail list:

{% tabs %}
{% tab title="Mailing API" %}
To set up the webhook to send a mailer, enter the following credentials:

<img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/65e61f29eeacc5315bb868f8/file-tTUyYDmYkA.png" alt="" width="375">

Destination URL: `https://api.heypoplar.com/v1/mailing/`&#x20;

Key: `Authorization`

Value: `Bearer PasteYourTestAPITokenHere`

{% hint style="info" %}
We strongly recommend using the **Test Access Token** provided in the [API ](https://app.heypoplar.com/credentials)section of your Poplar account, to ensure your trigger is set up successfully.&#x20;

After confirming the requests are successfully coming through to the **History** tab of your campaign for a period of time, swap in the Production token to go live.
{% endhint %}

### JSON Body

Your JSON payload should contain all the data you'd like to share with the platform. This includes recipient info such as name, address, customer ID, and/or email, along with any custom merge tags that may be present if you're using dynamic creative.

#### Emails (Address Enrichment)

```
{
  "recipient": {
    "email": "{{ person.email|default:'' }}"
  },
  "campaign_id": "REPLACE-WITH-YOUR-CAMPAIGN-ID"
}
```

#### Address Data

```
{
  "recipient": {
      "email": "{{ person.email|default:'' }}",
      "first_name": "{{ person.first_name|default:'' }}",
      "last_name": "{{ person.last_name|default:'' }}",
      "address_1": "{{ person|lookup:'$address1'|default:'' }}",
      "address_2": "{{ person|lookup:'$address2'|default:'' }}",
      "city": "{{ person|lookup:'$city'|default:'' }}",
      "state": "{{ person|lookup:'$region'|default:'' }}",
      "postal_code": "{{ person|lookup:'$zip'|default:'' }}"
  },
  "campaign_id": "REPLACE-WITH-YOUR-CAMPAIGN-ID"
}
	
```

#### OPTIONAL: Creative ID

If you have multiple active creatives under one campaign and want the webhook to point to a specific one, you will have to include a line for creative\_id.&#x20;

If `creative_id` is not specified, the platform will automatically launch the only active creative, or randomize between all active creatives in the campaign (ideal setup for A/B testing).

```
},
  "campaign_id": "REPLACE-WITH-YOUR-CAMPAIGN-ID",
  "creative_id": "REPLACE-WITH-YOUR-CREATIVE-ID"
}
```

Custom Merge Tags

If you have custom data stored in Klaviyo on a user-level that you are planning to utilize in your creative, a **merge\_tags object** can be added to pass that data through the webhook:

```
{
"recipient": {
...
},
"merge_tags": {
  "company": "{{ person|lookup:'$organization'|default:'' }}"
},
  "campaign_id": "REPLACE-WITH-YOUR-CAMPAIGN-ID",
  "creative_id": "REPLACE-WITH-YOUR-CREATIVE-ID"
}
```

{% endtab %}

{% tab title="Audiences API" %}
{% hint style="info" %}
This endpoint is only able to **add members to an existing list** in your Poplar account. You must first create an Audience within the Poplar platform to generate an `audience_id` which should be pasted in place of **:id** in the destination URL below.

Your **Production** token must be used to hit this endpoint (only the Mailing API is able to accept Test tokens) .
{% endhint %}

Destination URL:  `https://api.heypoplar.com/v1/audience/:id`

Key: `Authorization`

Value: `Bearer PasteYourProductionTokenHere`

### JSON Body

If using this list for suppression, don't for get to select it under your campaign's Suppression tab. Either `email` or `address` is **required** to match against the send data for suppression.

```
{
    "address": {
        "name": "{{ person.first_name|default:'' }} {{ person.last_name|default:'' }}",
        "email" : "{{ person.email|default:'' }}",
        "address_1": "{{ person|lookup:'$address1'|default:'' }}",
        "address_2": "{{ person|lookup:'$address2'|default:'' }}",
        "city": "{{ person|lookup:'$city'|default:'' }}",
        "state": "{{ person|lookup:'$region'|default:'' }}",
        "postal_code": "{{ person|lookup:'$zip'|default:'' }}"
    }
}
```

{% endtab %}

{% tab title="Do Not Mail API" %}
{% hint style="info" %}
Your **Production** token must be used to hit this endpoint (only the Mailing API is able to accept Test tokens) .
{% endhint %}

Destination URL:  `https://api.heypoplar.com/v1/do-not-mail`

Key: `Authorization`

Value: `Bearer PasteYourProductionTokenHere`

### JSON Body

```
{
    "address": {
        "name": "{{ person.first_name|default:'' }} {{ person.last_name|default:'' }}",
        "email": "{{ person.email|default:'' }}",
        "address_1": "{{ person|lookup:'$address1'|default:'' }}",
        "address_2": "{{ person|lookup:'$address2'|default:'' }}",
        "city": "{{ person|lookup:'$city'|default:'' }}",
        "state": "{{ person|lookup:'$region'|default:'' }}",
        "postal_code": "{{ person|lookup:'$zip'|default:'' }}"
    },
    "identifier": "{{ person.id|default:'' }}"
}
```

Either `email`, `email_sha256`, `identifier`, or `address` is **required**. For suppression to work, the same identifier must be sent when triggering a mailing.
{% endtab %}
{% endtabs %}

## Step 5: Preview Webhook & Test Trigger

After entering your JSON Body code, click **Preview Webhook** to view a sample customer profile and ensure all the desired data is being pulled into each field.

<img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308f10090c29a3d732c222c/file-mdXvV0zwQx.png" alt="Example of an email only webhook" width="375">

The **Profile Properties** will show all the data for the sample customer, and the **Payload Preview** will show what data is being pulled into the webhook to be passed to the platform.

Data that appears under Profile Properties isn't guaranteed to be passed to the platform, always make sure the desired data is present in the Payload Preview as well.

**Send Test Request** to push the webhook preview to Poplar to confirm the connection is successful. If the trigger goes through **successfully**, you'll see a green **"Successfully sent webhook"** in Klaviyo:

<img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63b48e91bfe3f971fb0939e9/file-f5VKHg7GVJ.png" alt="A 201 status code indicates a successful trigger" width="563">

If you receive anything but a green success or if you receive a 400 error, consult the Troubleshooting section below or reach out to **<support@heypoplar.com>** for assistance.

## Step 6: View Successful Requests

Head to your **Campaign Overview** in Poplar and scroll down to the **History** section to see successful tests come through.

Click into one of the mailers to see a PDF proof with the user data applied. Scroll down to the **Request Details** to confirm the data coming through the platform matches your Klaviyo JSON payload:

<figure><img src="/files/SXRTmc5rjysavyzlBwvy" alt=""><figcaption></figcaption></figure>

## Go Live!

Once you've confirmed the connection is successful and customer data is coming through to Poplar as desired, swap your **Production Access Token** in place of your Test token under the Headers section. Make sure to Save your updates, then set your Webhook action to Live!

<img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308f20a037bc877147b36da/file-k4M6yxN30u.png" alt="klaviyo-golive" width="563">

### Manual

The manual setting will accumulate customers when they reach this step in the flow, and will only get passed onto Poplar if they are triggered manually.

***

## Troubleshooting

### 403 Error (Cloned Webhook)

If you cloned an existing Poplar webhook and are now receiving a 403 (Authorization) error during testing - don't worry! It is a quick fix.

For security purposes, when cloning a webhook the API token you entered under Headers will transfer with hashes at the end, instead of the unique number value:&#x20;

<img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308f38b4cde766bbe13f766/file-WX3oR8YV4i.png" alt="klaviyo-hashed" width="375">

To fix this, simply copy and paste the access token directly from Poplar again. After pasting you will notice the hashes appear again, but this time they are actually hiding the true value of the token.

#### 403 Error on an Original Webhook?

Double check there aren't any typos under the Headers key/value inputs, and that value includes **Bearer** followed by a space and your full pasted access token.

### 400 Error (Missing or Incorrect Fields)

The most common causes of a 400 error are:

* Missing required address data (address\_1, city, postal\_code): If you are attempting to test your webhook using a user that only has email data saved or has incomplete address data.
  * Spotcheck the user data in your list to make sure all the required fields are present and match the variables you have listed in your webhook.
* Inactive/Paused Campaign or Missing Creative: If your webhook is pointing to a campaign in Poplar that is Inactive/Paused, missing creative artwork, or a creative\_id is specified and is pointing to an old creative that had been deactivated.
  * Head to your Poplar account to make sure your campaign is Active and using the intended creative - double check the campaign\_id and creative\_id are correct.
* JSON Syntax Typos: If everything else checks out and you're still running into an error, you might have a typo in one of the values or a missing/added comma or curly brace.
  * Look over each line very closely, or get a second pair of eyes to help out. When listing out webhook data each value should be followed by a comma unless it is the last item in the list. Double check there are quotes where there should be quotes, and double curly braces where there should be double.

### "Failed" Status in Poplar Campaign History

If data successfully made it to Poplar, and you can see the test request in your History tab but it has a "Failed" status - you just tried to pass email data without enabling Address Enrichment in your campaign settings.

Head to Edit Campaign and make sure Address Enrichment is Enabled. It won't retroactively correct the existing request, but if you send a new one through you should now see *Queued for Address Enrichment*.

*Still stuck? Reach out to **<support@heypoplar.com>** for assistance.*


# Poplar App (Lists & Segments)

Our brand-new Klaviyo app will provide direct access to your Lists & Segments, allowing you to now  execute One Time Sends with external audiences.

## What You'll Need

* Existing Poplar account and Klaviyo account
* Manager, Admin, or Owner role on your Klaviyo

## Installing the App

On your Poplar account, click Integrations. Then click on the Klaviyo sub-tab to **Install.**

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67b75fc3cad0076200d43d5a/file-6LO7fzdQDL.png)

{% hint style="info" %}
You will see the below notice letting you know that the app is pre-release, but you can still **continue**.&#x20;
{% endhint %}

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67b7603fcad0076200d43d5e/file-0tLst4BUMZ.png)

Select the Klaviyo account you'd like to connect.&#x20;

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67b76063090d437ef6b18df4/file-uB5UTjfYUC.png)

Confirm permissions and click Allow. We will only ask for permissions that are absolutely needed.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67b760707503b621ba96f81e/file-gQV5g7g0x3.png)

You're done! You can now access Lists & Segments when launching One Time Sends in Poplar.


# Shopify

Install Poplar's Shopify App to configure Playbook triggers, push lists for One Time Sends, and share transactional data for real-time reporting.

If you use Shopify, the **easiest way** to integrate with Poplar is with the Poplar Mail Shopify application.

Poplar for Shopify supports **Abandoned Cart**, **New Order**, **New Customer**, and **Cancelled Order** trigger events along with a number of highly specified filter options. If your use case requires another trigger event not listed, please check the Zapier section for an alternative approach.

## Install App

Head to the [**Poplar Shopify App**](https://apps.shopify.com/poplar-1) store page and click **Add app** to install.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/672115cb91230b767524ba95/file-55Swx2fQOB.png)

Sign in to your Poplar account and choose the organization you want to connect with. Your Shopify account and your Poplar account will be automatically linked.

## Link Poplar Account

If you do not already have an account with Poplar, select the `Create Account` button. Otherwise, click the green `Connect My Account` button.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/672117643a0b506883e52dd6/file-2CG4ytVPXQ.png)

Once your Poplar account is made or you are signed in, navigate to the [Shopify Integration](https://app.heypoplar.com/credentials/shopify) page in Poplar. Copy your `Production` and `Test` API tokens and past them into the "Connect your Poplar Account" page within the Shopify app.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6721190a4d8d375180ed153b/file-x7gbRYOSXG.png)

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/672119c5c8770a0e6b6587cd/file-CBIOaDTNdY.png)

## Playbooks

The first time you open the Shopify app, you'll see two playbooks we've pre-built for you. *Note: The playbooks have created corresponding campaigns in Poplar.*

**If this is your first time mailing with us, make sure the following tasks are completed in your Poplar account before continuing:**

* Creative artwork has been uploaded to the campaign in Poplar and is set to **Active**
* Your account is properly funded under [**Billing**](https://app.heypoplar.com/billing).

### Create a Playbook

Under **Campaigns** click **Create a Playbook**

Name your playbook and select the type of event you would like to target. You can choose between 4 event triggers:

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6721265eca07c36a6a17155a/file-JTZP8Q5GEF.png)

1. **Abandoned Cart**: Send mail to potential customers who abandon the checkout process in your Shopify store and get them back on track to convert.
2. **New Order**: Send mail to customers to request a review or cross-sell/up-sell complementary products after a purchase.
3. **New Customer**: Send postcards introducing your brand to a new customer after their first purchase.
4. **Canceled Order**: Bring customers who cancel an order back to your site with an offer code.

***

Once your Trigger is selected, choose a **Campaign** and **Creative** you’d like this segment to be mailed.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67212606ca07c36a6a171559/file-yCfKpSsS7J.png)

1. *Only one creative can be selected per campaign. To target multiple creatives with the same use case or event trigger, create separate Poplar campaigns for each Playbook.*
2. *Optional:* Set a Mailing Delay. This setting is defaulted to 0 which triggers the mailing to go into production immediately.&#x20;
3. IMPORTANT: Select your **Environment Type**. Choosing `Production` will trigger the mailers and send them into the mail stream. Choosing `Test` will flag each triggered customer as “test”, and the mailings will not go out.
4.

```
![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67212251ca07c36a6a171555/file-GHHV3hAUY2.png)
```

5. 💡 Tip: The test environment allows you to gauge volume of a segment without having to use any allocated budget.
6. Once you choose your event trigger, you can optionally add filters to send to a more targeted audience. Choose **Add Filter** and select any filters you want to apply to the playbook trigger.
7.

```
![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/672124d2c8770a0e6b6587d8/file-3W1OYbDGmf.png)
```

8. **Each event trigger comes with its own set of filter options.** See the **Filter Engine** section below for a guide to available filters and their functions.
9. When selecting filter rules, you have two main options: you can either allow the event to mail if all filters are true or allow the event to mail if any of the filters are true. If you choose not to configure any filters, every event will mail, provided there is enough customer information to do so.
10.

```
![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/630f9eb74cde766bbe140e3d/file-VIwIkeoMmL.png)
```

## Test & Go Live!

In the Final Touches section, you'll see the option to choose a **Test** or **Production** environment. The Test environment will behave *as if* in production, so you can gauge volume and confirm filter success, only no mail will send and you won't be charged.

We recommend first enabling your playbook under the Test environment, to ensure the connection is successful and requests are coming through to your campaign's History tab in Poplar.&#x20;

To go live and start mailing, change this setting to **Production** and click **Save Playbook** and switch the status to **ON!**

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/672294f2f539bb6e3c7c7121/file-haOkbr4NqD.jpg)

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/672294b93a0b506883e52f04/file-uv8V6HHSPV.jpg)

Playbooks that are toggled **OFF** do not send requests to Poplar regardless of the deployment environment.

***

## Transactional Reporting

Transactional reporting is enabled by default. Order data will be shared with your Poplar account and used to generate in-platform reporting metrics. It will also auto-populate the **Customers (Orders API)** audience with billing and shipping addresses which can then be selected for suppression from other campaigns. Please refer to the Orders API documentation for details on what information is being passed in the call.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/672294ca4d8d375180ed1665/file-e4s8cKgNqe.jpg)

***

## Filter Engine

Below is a brief description of each filter and applicable events.

| **Event**       | **Key** |
| --------------- | ------- |
| New Order       | NO      |
| Cancelled Order | CO      |
| Abandoned Cart  | AC      |
| New Customer    | NC      |

| **Filter Name**   | **Event Triggers** | **Description**                                                                          |
| ----------------- | ------------------ | ---------------------------------------------------------------------------------------- |
| Total Price       | NO, CO, AC         | The total price of the order                                                             |
| Accepts Marketing | NO, CO, AC, NC     | Whether the customer agreed to receive marketing                                         |
| Order Count       | NO, CO, AC         | How many orders the customer has placed in the past                                      |
| Line Item SKUs    | NO, CO, AC         | Whether an order contains an item with the specified SKU ( *case insensitive*)           |
| Product Title     | NO, CO, AC         | Whether an order contains an item with the specified product title ( *case insensitive*) |
| Variant Title     | NO, CO, AC         | Whether an order contains an item with the specified product title ( *case insensitive*) |
| Total Spend       | NO, CO, AC, NC     | The total amount spent by the customer                                                   |
| Verified Email    | NO, CO AC, NC      | Whether the customer has verified their email                                            |


# Batch Mailings

Send mailings to a list of recipients all at once, versus triggered via Playbooks.

With the Poplar app on Shopify, you can target any of your existing segments without needing to upload a CSV into your Poplar account.&#x20;

## What You'll Need

* Existing Poplar account, connected to your Shopify Poplar app
* Campaign created with a creative uploaded
* Segment of customers you'd like to mail

## Creating a Batch Mailing

On the Campaigns tab, click **New Batch Mailing**

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67a1400f4b8b6e30c1eef747/file-2FUhHY3PUW.png)

Give your mailing a name and select the corresponding Poplar campaign. If you need to create a new one, [click here](https://app.heypoplar.com/campaigns/new).&#x20;

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67a140c9938cde4b6cf4f26e/file-hHzlROSHGg.png)

Select the Creative(s) you'd like to use for your mailing. If you select **multiple creatives**, we will apply an even A/B split across your selected artworks.&#x20;

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67a14146831e4f7cb3cb5920/file-2GTvwgqSBc.jpg)

Select the segment of customers you'd like to mail. If you need help creating a new segment, [click here](https://help.shopify.com/en/manual/customers/customer-segmentation) to learn more.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67a141b7938cde4b6cf4f272/file-B154WT5rH0.jpg)

Select your settings for Address Strictness and Forwarding.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67a1428d09506c7b3a9178f1/file-tz8AeFEVqm.jpg)

Review your estimated (maximum) cost and complete your send.

{% hint style="info" %}
**Note:** These totals are based on the total number of segment members. After Poplar imports your segment, we will charge the credit card on file for the number of valid, mailable addresses.&#x20;
{% endhint %}

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67a1435009506c7b3a9178f2/file-XTJFRSIafI.jpg)

## After Your Send

Once processed, we will create mailings and send them off to our print partners. You can click the "View in Poplar" button on the campaigns page to view updates on delivery and attribution results.&#x20;

{% hint style="info" %}
**Pro tip:** Make sure you've enabled Transactional Reporting in the Orders tab which will allow us to automatically calculate attribution metrics for your campaigns. Be sure to check in 30 days after your send to see results!
{% endhint %}


# Salesforce Marketing Cloud

Requirements:

* You must have Salesforce Marketing Cloud (SFMC).
* You must have organization access to Salesforce Journey Builder.
* You must be a Salesforce administrator to be able to install the Custom Activity for your organization.
* You will need a Custom Activity URL (obtained in Poplar) to perform the installation in Salesforce.

The Poplar Custom Activity was built with **Data Extensions** as the main intended entry source

***

## Part I: Setting Up Your Custom Activity <a href="#part-i-setting-up-your-custom-activity" id="part-i-setting-up-your-custom-activity"></a>

Poplar’s Custom Activity lets you pass a contact from Salesforce Journey Builder to Poplar as part of your Salesforce Journey, and send that customer a postcard or letter.

### Generate Custom Activity URL in Poplar <a href="#generate-custom-activity-url-in-poplar" id="generate-custom-activity-url-in-poplar"></a>

Navigate to the API page of your Poplar account and click **Get Custom Activity URL** under the [Salesforce](https://app.heypoplar.com/credentials/salesforce) tab:

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63111f7f7164226be0c8278e/file-d1JJ7dRF8T.png)

This URL is unique to your Poplar organization and is essentially your "key". Do not share this URL with anyone outside the organization.

### Install Custom Activity in Salesforce <a href="#install-custom-activity-in-salesforce" id="install-custom-activity-in-salesforce"></a>

Log into Salesforce Marketing Cloud and hover over your profile icon to access **Settings > Setup.** Under the left-hand navigation, click into **Platform** **> Apps >** **Installed Packages:**

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63111fd97164226be0c82796/file-O52ykyzpe6.png)

Click the **New** button in the top right corner and give the new package a recognizable name, then hit **Save:**

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/631120094cde766bbe141668/file-PAuyAR8aT1.png)

Next click **Add Component** and you'll want to select the **Journey Builder Activity** component type:

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/631120307164226be0c82798/file-394dJ1jIoA.png)

Set your Journey Builder Activity Properties with a recognizable name and **Messages** as the Category. Then head back to Poplar to copy your **Activity URL** and paste it into the Endpoint URL field:

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6311204e7164226be0c8279a/file-S50IHVhz5j.png)

Hit **Save** then copy your **JWT Signing Secret** (NOT the "Unique Key") and paste it into Poplar under Step 3 and hit **Save:**

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63112069c713d51da3edaec9/file-vSW6QvLl5r.png)

***

## Part II: Data Extension Setup <a href="#part-ii-data-extension-setup" id="part-ii-data-extension-setup"></a>

Data Extensions hold your audience member attributes, which will be mapped to corresponding values in Poplar during the trigger request (i.e full name, address 1, address 2, city, etc.).

If you already have a Data Extension set up, **skip to Part III.** Otherwise follow the setup instructions linked below:

[Data Extensions](https://docs.heypoplar.com/article/299-data-extension-setup)

If you are new to using Data Extensions in Salesforce, the [Salesforce Trailhead module](https://trailhead.salesforce.com/en/content/learn/modules/marketing-cloud-contact-management/learn-about-data-extensions?trail_id=develop-for-marketing-cloud) can be used as an additional reference.

***

## Part III: Journey Setup with the Poplar Custom Activity <a href="#part-iii-journey-setup-with-the-poplar-custom-activity" id="part-iii-journey-setup-with-the-poplar-custom-activity"></a>

Now that you've installed the Poplar Custom Activity, it's time to use it in a journey! While building your Journey, you'll see the option to switch between **Test** and **Production** in Step 5 - we highly recommend starting in a Test environment so you can fire the trigger without actually sending any mailers.

### Create a New Journey <a href="#create-a-new-journey" id="create-a-new-journey"></a>

From your SFMC dashboard, navigate to Journey Builder and click **Create New Journey**.

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6311224b037bc877147b55ee/file-ve1qf2keoZ.png)

For this type of flow, select **Multi-Step Journey**.

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/631125b74cde766bbe141688/file-Muz8APjJWN.png)

### Add Your Data Extension <a href="#add-your-data-extension" id="add-your-data-extension"></a>

The Poplar Custom Activity was built with [Data Extensions](about:/triggered-mailing-api/integrations-1/salesforce#what-is-a-salesforce-data-extension) as the main intended entry source. Drag and drop Data Extension into the Entry Source step, then click on the grey icon to select your Data Extension.

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/631125dc037bc877147b5602/file-Rwm9Naqr11.gif)

For demonstration purposes, we'll be selecting the **Poplar\_DM** extension from the Data Extension Setup tutorial.

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/631125f690c29a3d732c40d6/file-8sbXZAd11v.png)

Make sure your Data Extension contains record that can be used to test the integration connection.

### Configure Fields to Pass to Poplar <a href="#configure-fields-to-pass-to-poplar" id="configure-fields-to-pass-to-poplar"></a>

Under Activities, select the Poplar Custom Activity from the **Messages** section and drag it into your Journey to reflect when you'd like to trigger a mailer.

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/660edf49ef6cd1080a2ea7bb/file-PQlgGVqjXq.gif)

As mentioned, we recommend selecting a **Test** environment so no real postcards are sent when testing the trigger. Once you've confirmed the connection is successful, you'll come back and switch to the **Production** environment to go live.

In each of the fields in the Poplar Custom Activity config, you need to reference the data columns from your selected Data Extension using the following syntax:

`{{Contact.Attribute.<data-extension-name>.<SFMC-attribute-name>}}`

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/660ee2c5dac5c26585fc5de3/file-tmJc7QGYkj.gif)![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/660ee2224db6eb7a51d93079/file-QEq950Ze3R.png)

Once you've mapped all the fields and selected your campaign, hit **Done**.

### Custom Merge Tags <a href="#custom-merge-tags" id="custom-merge-tags"></a>

If your creative contains custom merge tags, you'll want to make sure that data is also stored in your Data Extension. Expanding on the example above, say the Data Extension also contains LTV and code attributes.

To map the SFMC code attribute data to the `{{custom.promo-code}}` merge tag in your Poplar creative, you'd want to set the Merge Tag Key to **promo-code** and the Merge Tag Value to `{{Contact.Attribute.Poplar_DM.code}}` as pictured below:

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63112826c713d51da3edaeed/file-0ioLQlHH3Y.png)

### Schedule, Save & Validate <a href="#schedule-save-and-validate" id="schedule-save-and-validate"></a>

Before activating, you must set your Schedule settings. Click **Schedule** and select the **Run Once** option:

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6311284f4cde766bbe141697/file-KR4JGo86Jd.png)

On the next screen, click **Edit** to select the Entry mode. For demonstration purposes, we'll be selecting On activation:

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/631128667164226be0c827c6/file-vaol2HOVKD.png)

Click Done to close out the Schedule settings. Next, click **Validate** in the top right to **Edit** the **Settings** for your Entry Mode values:

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6311287dc713d51da3edaef0/file-CiKkTLWRHO.png)

The key here is to specify whether or not a contact can re-enter a Journey. When testing, we recommend selecting **Re-entry anytime**. Click **Done** to return to the Validation Results screen, the click **Revalidate** and **Save**.

***

## Part IV: Activate Journey <a href="#part-iv-activate-journey" id="part-iv-activate-journey"></a>

If your Journey is in Test mode, you can safely activate without actually sending any mailers. After confirming the triggers are successfully coming through to your Poplar campaign's History tab, you can switch to Production mode and Activate your trigger to go live!

Hitting the Test button that brings you to the "Choose Contacts" page does not test the trigger connection, it only checks your data within SFMC.

### Activate & Test <a href="#activate-and-test" id="activate-and-test"></a>

Once you've completed your setup and returned to the Journey dashboard, you're ready to test the trigger connection by clicking Activate!

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/631129007164226be0c827cb/file-duptCWSPJ1.png" alt=""><figcaption></figcaption></figure>

Head to Poplar, click into your campaign and scroll down to the **History** section to see the successful test triggers come through.

Click into one of the Test mailers and scroll down to the **Request Details** to make sure all your data is coming through and mapping correctly.

### Switch to Production <a href="#switch-to-production" id="switch-to-production"></a>

Once data is flowing through correctly and to your specifications, head back to the Journey, Pause it, and click the Poplar Custom Activity to switch to your Production environment (create a new Version of the Journey if necessary).

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63112946037bc877147b5619/file-OZEvdgVUkI.png)

Finally, Activate your Journey again to go live in Production!

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6311295cc713d51da3edaef5/file-18WzO7YXps.png)

***

## Other Entry Sources <a href="#other-entry-sources" id="other-entry-sources"></a>

Other entry sources into journeys using the Poplar Custom Activity remain untested. If you are interested in leveraging other entry sources, let us know at <support@heypoplar.com>. You can also contact your Salesforce Account Executive for help on finding out how to reference your specific dataset in the journey.

***

## Common Questions <a href="#common-questions" id="common-questions"></a>

**What is the Salesforce JWT signing secret?**

This is a secret generated by Salesforce pertaining to the Custom Activity that you've just installed. Salesforce sends over this secret every time it sends information to the Custom Activity, in our case, sending recipient information to trigger a mailing in Poplar.

Because you've shared the secret with Poplar, we can use that to check against what Salesforce sends us, in order to confirm that it's really Salesforce and not a bad actor attempting to overtake your Poplar account & funds.

**Why don't my teammates have access to the Custom Activity?**

You must " **license**" the Custom Activity to everyone in your org in order for them to be able to use it. You can do so underneath the settings for the Installed Package:

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/631129d890c29a3d732c40e5/file-oM7NKiKGoC.png)

**How do I specify which creative to use?**

You don't need to specify a creative in your Salesforce config. Rather, you will manage all creative rules in Poplar. The Poplar Custom Activity will randomly use an active creative in your selected campaign according to the following rules:

* If there is a default creative, we will use the default creative.
* **If you have NOT set a default creative** for the campaign, we will randomize amongst all the active creatives in the campaign.

To set a creative as the default, click **Set As Default** when you click into the creative.

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63112a1d4cde766bbe14169f/file-qimMyV7Enc.png)

**What is a Salesforce Data Extension?**

A Salesforce Data Extension is a relational database table used to store additional Subscriber-related data in Salesforce. It contains custom columns defined by you or your organization. It can be used as the data entry source in an SFMC Journey Builder journey.

**Why is there no data passing through to Poplar?**

The way your Data Extension is set up may affect whether or not you can pass data through the journey using the syntax `{{Contact.Attribute.<data-extension-name>.<attribute-name>}}`.

You must **bind your Data Extension to the Salesforce contact** in order to be able to access the data extension's columns in your journey. Learn more about a successful Data Extension setup.

If your Data Extension name or attributes have any spaces, for example "My Data Extension" or "First Name", you need to wrap it in quotation marks:

`{{Contact.Attribute."My Data Extension"."First Name"}}`

**Accessing Data Extensions from the Journey Event**

If you don't have the ability to change the Data Extension setup, you can also try this alternative way of accessing the attributes that are passed from the Data Extension into a journey.

In each of the fields in the Poplar Custom Activity config, you can reference the columns (aka attributes) from your selected Data Extension using the following syntax:

`{{Event.<insert event-id-here>.<my-data-extension-column-name>}}`

Here's an example to illustrate. Say your Data Extension looked like the table below. You'd use `{{Event.<insert-event-id-here>.promo-code}}` to pass the promo code with a value of **WELCOMEBACK20** for Jane Doe and **WELCOMEBACK25** for James Bond to Poplar.

To grab the `event-id` , right click to inspect the page code after setting up your Data Extension in Journey Builder and search for `"DEAudience"`. Copy and paste the id into your Poplar configuration entry field.

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63121a9dc713d51da3edb1c8/file-8nRHgj5VP7.png)

The code typically looks like this when you inspect it:

`<li data-value="{{Event.DEAudience-ab1c2de3-456f-7ghi-8901-etc."Email"}} ...`

`DEAudience-ab1c2de3-456f-7ghi-8901-etc` would be your `event-id`.

Note: If you change the Data Extension you are using for this journey, you need to inspect the code again and grab the new `event-id` related to the new Data Extension.

**Do you charge additional costs for using the Custom Activity?**

In short, no. The Poplar Custom Activity is currently provided free of any SaaS fee. You only pay the flat rate for each piece you mail.


# Data Extension Setup

If you are new to using Data Extensions in Salesforce, be sure to reference the [Salesforce Trailhead module](https://trailhead.salesforce.com/en/content/learn/modules/marketing-cloud-contact-management/learn-about-data-extensions?trail_id=develop-for-marketing-cloud) when you're getting started.

After creating a data extension, you must remember to **bind your data extension to the Salesforce Contact** in order to be able to access the data extension data in your journey using the syntax `{{Contact.Attribute.<Data-Extention-Name>.<attribute-name>}}`.

Below is just one example of a successful setup for a Data Extension. If your setup looks different and you are encountering trouble passing through data, please reach out to **<support@heypoplar.com>**. You can also contact your **Salesforce Account Executive** for help on finding out how to reference your specific dataset in the journey.

### Create a New Data Extension <a href="#create-a-new-data-extension" id="create-a-new-data-extension"></a>

If you already have a Data Extension set up, skip to Step 3.

From your dashboard, navigate to **Audience Builder > Contact Builder > Data Extensions** and click **Create:**

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63122a8e90c29a3d732c440f/file-ppIRe1NRXJ.png)

Give your data extension a unique and relevant name, then check **Is Sendable?** AND **Is Testable?** Leave Creation Method set to "Create from New" and External Key blank - Description is optional.

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63123119037bc877147b5957/file-wzRzQHo45d.png)

All **Sendable** data extensions map to a subscriber whereas **non-sendable** data extensions are meant for reference data(e.g. product tables) that does not map to a subscriber, but that you may want to pull into an email.

Next, you'd typically set your data retention policy - for a test you can just leave the default, and continue on.

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63123144037bc877147b5959/file-n5gNootrsR.png)

Then create your fields. Make sure you include an **identifier** field and set it as the primary key (identifier can be any kind of customer ID, email, etc.). This is what you'll use to link the data extension to your **Contact.** Ensure you set the **Send Relationship** as "identifier relates to Subscriber Key" (see bottom left corner in image below).

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/631231604cde766bbe141a2b/file-Tw85SHQv3P.png)

It is best practice to make sure the Subscriber Key is stored as text.

Click **Complete** to finish setting up your data extension.

***

### Add Records <a href="#add-records" id="add-records"></a>

Click into your new Data Extension, and navigate to the **Records** tab.Bulk import by clicking **Import** or manually add 2-3 records for test purposes by clicking **Add Record.**

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/631231b34cde766bbe141a2c/file-s2BQnZWis2.png)

### Create an Attribute Group <a href="#create-an-attribute-group" id="create-an-attribute-group"></a>

Once you've created your Data Extension, navigate back to **Data Designer** to create an **Attribute Group** and link them together.

Click **Create Attribute Group**. Give it a different name from your Data Extension and pick whichever icon you'd want to represent it with.

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/631231e64cde766bbe141a2e/file-0dzHYaJl1Q.png)

### Link Attribute Group to Data Extension <a href="#link-attribute-group-to-data-extension" id="link-attribute-group-to-data-extension"></a>

Select Link Data Extensions and map the **Contact Key** from the Salesforce Contact to the **identifier** in your Data Extension.

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/631232187164226be0c82b21/file-4P7RgMOovp.gif)

Hit **Save**, and you can now use this Data Extension in your journey!

To access the data extension data in your journey using the syntax: `{{Contact.Attribute.<Data-Extention-Name>.<attribute-name>}}`

***

### Important Things to Note <a href="#important-things-to-note" id="important-things-to-note"></a>

#### **Data Extension Updates** <a href="#data-extension-updates" id="data-extension-updates"></a>

Make sure you don't modify data extensions that are being used in an active journey. Modifications to data extensions used in active journeys are ignored by those active journeys. [Learn more](https://help.salesforce.com/articleView?id=sf.mc_jb_edit_an_entry_source.htm\&type=5) about the steps you should take if you wish to modify your data extension.

Need help? Reach out at **<support@heypoplar.com>** for assistance.


# Iterable

Send personalized Direct Mail just like you would with emails or SMS - triggered by customer behavior and automated through journey logic.

## Overview

Whether you're re-engaging inactive customers or rewarding loyal ones, this integration makes it easy to incorporate direct mail into your marketing strategy—no technical skills required.

The Poplar + Iterable integration allows you to:

* Trigger direct mail pieces within your Iterable journeys using webhooks.
* Send customer data to Poplar's Mailing, Audiences, or Do Not Mail endpoints.
* Utilize customer data (e.g., name, address, email) to personalize creative artwork.
* Leverage existing customer segments for timely, targeted messages.

### Prerequisites

Before integrating and sending tests with Iterable, ensure you've completed the following:

* [ ] Create a campaign in Poplar and upload creative (can be a placeholder for testing).
* [ ] Ensure the campaign is set to Active.
* [ ] Locate your Production and Test Access Tokens in your Poplar account.
* [ ] Make sure you have the proper account permissions to create webhooks and edit journeys within Iterable.
* [ ] Determine whether you'll be targeting users with full address data, only email data, or both. If sending mailing address data with Poplar, double check the users in your list have **complete** address data in their profile (address\_1, city, postal\_code).

{% hint style="warning" %}
If creative isn't uploaded to your campaign, you will receive a 400 error in Iterable when testing the webhook. The campaign must be Active with creative uploaded to test the integration.
{% endhint %}

***

## Step 1: Create a Webhook in Iterable

* Log into Iterable and navigate to **Integrations > Journey Webhooks**.
* Click the green **New Webhook** button.
* Enter a recognizable name for your webhook.

![iterable-2](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308dfbf90c29a3d732c21c3/file-BZni5H8IwK.png)

## Step 2: Configure the Webhook

* **Destination URL**: `https://api.heypoplar.com/v1/mailing/`&#x20;
* **HTTP Method**: POST
* **Authentication**:
  * Click **Add Header**.
  * **Key**: `Authorization`
  * **Value**: `Bearer YOUR_TEST_OR_PRODUCTION_API_ACCESS_TOKEN`
* **Body**: Set to **URL-encoded form**.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308e02c4cde766bbe13f6e9/file-wWRHn21Nit.png)

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308e0c090c29a3d732c21ce/file-3iaxoSxzXk.png)

### Add Form Fields

Add the necessary form fields to construct the data sent to Poplar. The keys on the left represent the values Poplar expects, and the values on the right (the variables within the curly braces) should correspond to to the labels within your user profiles in Iterable.

{% hint style="info" %}
If you're unsure of what the variables should be, pull up a user profile in Iterable in a separate screen for reference.
{% endhint %}

**Address Data**

If you have customer shipping or billing addresses stored in Iterable and want to use them for mailing:

* **recipient\[full\_name]**: `{{firstName}} {{lastName}}`
* **recipient\[address\_1]**: `{{address.street}}`
* **recipient\[address\_2]**: `{{address.unit}}`
* **recipient\[city]**: `{{address.city}}`
* **recipient\[state]**: `{{address.state}}`
* **recipient\[postal\_code]**: `{{address.zip}}`&#x20;
* **campaign\_id:** `your-poplar-campaign-id-here`

![Full Address Data Webhook](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308e2cec713d51da3ed8fad/file-4Mc52hZfDq.png)

**Emails for Address Enrichment**

If you're using Poplar's address enrichment feature:

* **recipient\[email]**: `{{email}}`&#x20;
* **campaign\_id:** `your-poplar-campaign-id-here`

![Address Enrichment Webhook](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308e3064cde766bbe13f6fe/file-FzYRMF5xid.png)

**Custom Merge Tags**

If your creative includes custom merge tags:

* **merge\_tags\[promo\_code]**: `{{promoCode}}`
* **merge\_tags\[last\_purchase]**: `{{lastPurchaseDate}}`

![Merge Tags Webhook](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308e4cac713d51da3ed8fc0/file-HTGPqVTxPy.png)

*Ensure that the values inside the `merge_tags` object match the merge tags used in your creative.*

## Step 3: Add the Webhook to a Journey

* Navigate to **Messaging > Journeys** in Iterable.
* Select an existing journey or click **Create New Journey**.

![Iterable Journey](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308e6584cde766bbe13f721/file-jjQjBLINrz.png)

* In the journey canvas, drag and drop the **Call Webhook** action into your flow.
* Double-click the webhook node to configure it.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308e73b90c29a3d732c21fb/file-2fJMnMwIOj.png)

* Toggle **Use preset journey webhook** to **ON**.
* Select the Poplar webhook you created from the dropdown.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308e7674cde766bbe13f72b/file-BSx1iKukf8.png)

* Click **Update** to save the configuration.

## Step 4: Test the Integration

* Click **Save Journey** to access the **Test Journey** option.
* Enter an email address that corresponds to a user profile in Iterable containing all the necessary data fields.
* Click **Test Journey** to send a test trigger.

*Ensure the test user profile includes all required data fields; otherwise, the test will not be successful.*

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308e7a14cde766bbe13f72c/file-M90jLR4X3p.png)

## Step 5: Verify in Poplar

* Log into your Poplar account and navigate to the **Campaign Overview** and scroll down to the **History** section to see successful requests listed.
* Locate the test mailer to confirm it was received.
* Click on the mailer to view the PDF proof with user data applied.
* Scroll down to **Request Details** to verify the data received from Iterable matches your expectations.

## Step 6: Go Live!

Once you've confirmed the integration is working as intended:

* Replace the Test Access Token in your webhook configuration with your Production Access Token.
* Save all updates in Iterable.
* Ensure your journey is **Enabled** to start sending live mailers.

![Enable Iterable Journey](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308e8d7037bc877147b3697/file-wBFd9KJ2WM.png)


# Customer.io

Configure a webhook trigger within a Customer.io campaign.

Before integrating and sending tests with Customer.io, make sure you've completed the following:

1. Create a campaign in Poplar
2. Upload creative (can be a placeholder creative for testing purposes - [Poplar Creative Templates](https://docs.heypoplar.com/integrations/supported-platforms/docs.heypoplar.com/triggered-mailing-api/using-the-tool/creative/templates))
3. Locate both your **Production Access Token** and **Test Access Token** on the [**API**](https://app.heypoplar.com/integrations/api_keys) page of your Poplar Account

For the webhook request to hit our API and be accepted, there must be an **active campaign with creative uploaded** - otherwise a `400 error` will be sent back.

***

## Step 1: Campaigns

Log in to Customer.io and **click the Campaign tab** on the left. If creating a new campaign, give your campaign a name, then click **Create Campaign.**

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/669a7c6aea04c55712556537/file-tQZQi8IO4d.png)

## Step 2: Trigger & Workflow

Select the criteria for a customer to enter the campaign flow, then when ready click **Next.**

On the Workflow Step, **drag and drop the Send and Receive Data** action into the flow where you'd like to send your Poplar Mailer.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/669a7d6bee46f05d48ed03cf/file-FvzfrskYNn.png)

## Step 3: Webhook

Click the webhook, name it, and select the **Add Request**.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/669a7da6641a5b210cd26296/file-qvHb5ylfT3.png)

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/669a7db7ee46f05d48ed03d0/file-bjrrnv9rzM.png)

Set the URL to: `https://api.heypoplar.com/v1/mailing/`

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/669a7f31641a5b210cd26297/file-iNZ9GmxRn1.png)

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/669a7f3c641a5b210cd26298/file-iIrut9ipHa.png)

Add an HTTP Header and configure an `Authorization` key and set the `Bearer <Your API Key>` (*make sure to also delete the <>*)

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/669a7f9b38e94c7683947011/file-Pt0sw3mFx7.png)

Log into Poplar and setup a new test API Key for Customer.io. You can get the key at <https://app.heypoplar.com/integrations/api_keys>. Copy the test API token and head back to the webhook configuration in customer.io

{% hint style="info" %}
We strongly recommend you **use a test API key** to start. Once your workflow is set up successfully and running in test mode, go back into the webhook and swap it out for a production API key to begin mailing.
{% endhint %}

## Step 4: Webhook Contents

If you're doing address enrichment you just need to pass the email in the recipient block, the campaign\_id, and any other variable data (Merge Tags). If mailing existing customer addresses, you'll pass in the full address. Note the double brackets surrounding the variable data being passed.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/669a817e38e94c7683947014/file-7HnjAUYAg0.png)

**For an email append:** *the customer attribute names you have in your account may differ and need to be modified.*

```
{
  "recipient": {
    "email": "{{ customer.email }}"
  },
  "campaign_id": "REPLACE-WITH-YOUR-CAMPAIGN-ID"
}
```

**For a full address mailing:**

```
{
  "recipient": {
    "first_name": "{{ customer.first_name }}",
    "last_name": "{{ customer.last_name }}",
    "address_1": "{{ customer.address_1 }}",
    "address_2": "{{ customer.address_2 | default: "" }}",
    "city": "{{ customer.city }}",
    "state": "{{ customer.state }}",
    "postal_code": "{{ customer.postal_code }}"
  },
  "campaign_id": "REPLACE-WITH-YOUR-CAMPAIGN-ID"
}
	
```

| **Key**      | **Value**                                                                                                          |
| ------------ | ------------------------------------------------------------------------------------------------------------------ |
| campaign\_id | copy from the right side of the campaign page on Poplar                                                            |
| full\_name   | Optional, you can also replace with a fixed string like 'Current Resident' for use on the address block            |
| first\_name  | When using **first & last name** instead of **full name** in your webhook, you must use BOTH or it will error out. |
| last\_name   |                                                                                                                    |
| address\_1   |                                                                                                                    |
| address\_2   |                                                                                                                    |
| city         |                                                                                                                    |
| state        |                                                                                                                    |
| postal\_code |                                                                                                                    |
| email        |                                                                                                                    |

You can also add merge tags with your own variable data at the end. When using first & last name options instead of full name you need to include both or it will error.

## Step 5: Test & Go Live!

Test your webhook by sending a test, then head to your **Campaign Overview** in Poplar and scroll down to the **History** section to see successful tests come through.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/669a81e25beb1700e035e2ba/file-zJVgBUURjU.png)

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/669a82127f20d506b173071c/file-u36OeYUdFe.png)

{% hint style="info" %}
We recommend leaving the webhook live with your test key for a period of time to get a sense for your volume. Once it looks like it's working well, go back in and replace the API key with a production key to begin mailing.
{% endhint %}

### **Troubleshooting**

You may see an exception when you don't have a `name` or `address_2` or other metadata you are referencing on every recipient record. It's easy to solve this using an if statement in the webhook.

{% if customer.address\_2 != blank %}

&#x20;   {{ customer.address\_2 }}

{% else %}

{% endif %}


# Emarsys

Poplar's Emarsys integration allows you to create a webhook set up in your automations.

## Enable Emarsys on Poplar

Navigate to the [Integrations > Emarsys](https://app.heypoplar.com/credentials/emarsys) page on your Poplar account and click **Enable Emarsys.** This will generate your secret key and webhook URL. &#x20;

## Create the Emarsys Webhook Node

1. Open your Emarsys console and navigate to Automation > Webhook Node Presets

![emarsys-1](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6307df534cde766bbe13f2b3/file-nffsSipUlJ.png)

2. Name your node preset on Emarsys and select “JWT Authentication” for the Authentication choice. Enter the API endpoint URL and Secret Key from Poplar.

![emarsys-2](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6307df867164226be0c803a4/file-JZmf7vxmQp.png)

3. Add a key-value pair for each of these Poplar data fields. Map the appropriate Emarsys contact data field using the drop downs on the right.

![emarsys-3](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6307dfc0037bc877147b3283/file-Gir7vROo9o.png)

4. Add **Additional Data** fields for campaign\_id and merge\_tags.&#x20;

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6307dfdec713d51da3ed8b9c/file-g7LPiQbL5C.png)

5. Test the connection with the **Start Testing** button, then save.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6307e0087164226be0c803a8/file-XE3mOLwIKW.png)

## Use the Poplar Webhook Node

1. In Emarsys, open any **Automation** program that you’d like to add a Poplar campaign.
2. In the **Nodes** window, find the webhook node in the **Channels** category and place it in your automation.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6307e07ac713d51da3ed8b9d/file-7TsIXGGYta.png)

3. Double-click on the Webhook node you just placed. Select your new Poplar node from the dropdown.
4. Scroll down in this window and add the campaign\_id you’d like to send, along with any required merge\_tags.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6307dfdec713d51da3ed8b9c/file-g7LPiQbL5C.png)

5. That’s it! We recommend testing your automation with before activating it for your customers.
   1. Head to your **Campaign Overview** in Poplar and scroll down to the **History** section to see successful tests come through.


# Simon Data

Before setting up your Simon > Poplar Integration you must reach out to Simon to have their customer success team add the webhook option to your Flows and have our Poplar API URLs whitelisted.

Refer to our SLM Webhooks documentation for configuration settings. If you have any questions please reach out to your Simon or Poplar account manager for details.

1. Log into Simon and **create a segment.**
2. From the segment overview, select " **Create Flow**" at the top right.
3. Name the flow and make sure the select " **Triggered**" option.
4. Simon will only send over once a day, so we recommend setting it to 1:30pm Eastern Time in order to hit our print cut-off.
5. Follow the below instructions to populate the corresponding header values, and Payload. We recommend using a **test api key** for the webhook to start so you can confirm mailings are being created successfully *prior* to using a **production api key.**
6. Send a test webhook at the bottom and you should see it show up in the history tab of your campaign.
7. Any new users in the audience segment will be pushed to our platform once a day at the time you set.
8. Our API URL: `https://api.heypoplar.com/v1/mailing/`
9. Add headers: When pasting in the API key make sure that there is one space before the key and to include the word "Bearer" before it.

<figure><img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63123d574cde766bbe141a71/file-GstesQnsvB.png" alt="" width="563"><figcaption></figcaption></figure>

***

### **Email Address Append**

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63123de490c29a3d732c448b/file-HqK5eVbBzJ.png)

### **Recipient Address configuration:**

<figure><img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63123df090c29a3d732c448d/file-CpwwBG8sUd.png" alt=""><figcaption></figcaption></figure>

You can lookup your `campaign_id` on the campaign detail page on Poplar.

Pull in the recipient data (either email and/or address data, as well as any variable data for the piece by leveraging recipient values you have stored in Simon)

Your Simon Data variables may be different than the above, it's best to click edit for each value and populate it from the Simon window.

If you want to use the full address instead of using the email append you'd use: `recipient.address_1`, `recipient.address_2`, `recipient.city`, `recipient.state`, `recipient.postal_code` with the corresponding values in your Simon setup.

Note: you can also add merge tags into the payload as `merge_tags.merge-tag-name` paired with a value. Replace `merge-tag-name` with the name of your merge tag. ex: `merge_tags.category`

**Preventing Null Values:**

When setting up the `address_2` field or other fields that you may not have data for every recipient make sure to add `or ""` within the variable which will send a blank string instead of a null value and prevent the request from erroring out.&#x20;

Example if your Simon data field is:&#x20;

`{{ contact.address_2 }}` update it to: {{ contact.address\_ or '' }}


# Segment

Use Segment to **trigger a mailing, share order data, or add an audience member to a list** in Poplar with custom [Destination Functions](https://segment.com/docs/connections/functions/destination-functions/). There are two primary ways to send a destination function to Poplar within Segment:

***

## Connections

Start by navigating to the **Connections** tab within your Segment account:&#x20;

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6312344290c29a3d732c4451/file-bZf1hQU27F.png)

On the left you'll see a list of your data **Sources** and the option to **+ Add Source**, and on the right you'll see a list of your **Destinations** and the option to **+ Add Destination.**

If it's not already listed, add the Source from where you'll be pulling mailing data and make sure it's **Enabled** for use.

***

## Destination

Once your Source is established, click **Add Destination** to view the Destination options under the **Catalog section**. To integrate with Poplar, you'll need to build a custom function that triggers a mailing when an event occurs.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63123591c713d51da3edb261/file-yqIhSryYdw.png)

Navigate to the **Functions** tab and click **+ New Function** to begin:

Select **Destination** as the Function Type, then **Build**:

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/631235cd90c29a3d732c445b/file-n3RlL5ERg9.png)

***

## Build

Before editing code, you'll need to configure the behavior of your function by adding **Settings.** Settings are used for encrypting your **Authorization** credentials ( [API Access Tokens](about:/triggered-mailing-api/using-the-tool/platform-overview/api#credentials-and-access-tokens)) and they allow you to pass variables such as `campaign_id`, `creative_id`, and `audience_id` to your function.

There are a number of ways Segment can integrate with Poplar's APIs:

* **Trigger a mailing**
* **Share order data for in-platform reporting**
* **Update an existing audience list**
* **Update your Do Not Mail list**

### Settings

Head to the Settings tab and click **+ Add Setting.** Each use case listed above requires different Setting which should be defined in the following ways:

***

## Mailing

### **Authorization**

First you'll want to configure the variable for your **Test** or **Production Access Token.**

Make sure both **Required** and **Encrypted** are enabled, the encryption setting will ensure your access token stays secret.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6318abe8c713d51da3edc3e2/file-437XT0bxMv.png)

### **Campaign ID**

Create another Setting for your `campaign_id`. Campaign ID can be found in your Poplar account under your campaign's Overview tab. This value does **not** need to be Encrypted.

**Creative ID&#x20;*****(Optional)***

<figure><img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6318ac0f90c29a3d732c5569/file-ID8XOfjmCR.png" alt=""><figcaption></figcaption></figure>

<figure><img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6318ac0f90c29a3d732c5569/file-ID8XOfjmCR.png" alt=""><figcaption></figcaption></figure>

Creative ID can be specified if more than one creative is active under the campaign, and you want to specifically point to one. Click into a creative to find the `creative_id`.

If creative\_id is not specified, the trigger will point to the Default active creative. If no creative is set as the default, it equally rotate between mailing all active creatives under the campaign to A/B Test.

## Orders

<figure><img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6318ac54037bc877147b6abd/file-ADI2Mejun0.png" alt=""><figcaption></figcaption></figure>

<figure><img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6318ac54037bc877147b6abd/file-ADI2Mejun0.png" alt=""><figcaption></figcaption></figure>

### **Authorization**

First you'll want to configure the variable for your **ProductionAccess Token.** Make sure both **Required** and **Encrypted** are enabled, the encryption setting will ensure your access token stays secret.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6318abe8c713d51da3edc3e2/file-437XT0bxMv.png)

***

## Audiences

### **Authorization**

First you'll want to configure the variable for your **ProductionAccess Token.** Make sure both **Required** and **Encrypted** are enabled, the encryption setting will ensure your access token stays secret.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6318abe8c713d51da3edc3e2/file-437XT0bxMv.png)

### **Audience ID**

To add an audience member to a list, the audience must first be created in Poplar. Click into an existing Audience to find the `audience_id`.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6318ad0590c29a3d732c5572/file-Y7CA8Z3kv7.png)

***

## Do Not Mail

### **Authorization**

First you'll want to configure the variable for your **ProductionAccess Token.** Make sure both **Required** and **Encrypted** are enabled, the encryption setting will ensure your access token stays secret.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6318abe8c713d51da3edc3e2/file-437XT0bxMv.png)

***

## Source Code

Now that you've established Settings, you can begin coding your function. [Segment invokes a separate part of the function (called a “handler”) for each event type](https://segment.com/docs/connections/functions/destination-functions/#code-the-destination-function). Destination functions can define handlers for each message type in the [Segment spec](https://segment.com/docs/connections/spec/):

* `onIdentify`
* `onTrack`
* `onPage`
* `onScreen`
* `onGroup`
* `onAlias`
* `onDelete`
* `onBatch`

Each of the functions above accepts two arguments:

* **event** - Segment event object, where fields and values depend on the event type. For example, in “Identify” events, Segment formats the object to match the [Identify spec](https://segment.com/docs/connections/spec/identify/).
* **settings** - List of [settings](https://segment.com/docs/connections/functions/destination-functions/#create-settings-and-secrets) for this function.

Just like Settings, different source code is required based on use case. Below are code templates that can be copy & pasted **in place of** any existing source code:

Our examples show a destination function that listens for “Track” events, and sends certain data to Poplar by using the **`event.properties`** prefix. **This prefix will likely differ by case depending on how your data is structured.**

***

## Mailing

To create a mailing, you'll want to send a **`POST`** request to `https://api.heypoplar.com/v1/mailing`

Your headers should contain ``Authorization: `Bearer ${settings.apiKey}`,`` and `'Content-Type': 'application/json'`

**Address and/or Email Data**

This function can be used for both full address data or emails for [**Address Enrichment.**](about:/triggered-mailing-api/using-the-tool/audiences#address-enrichment)

```
/**
 * @param {SpecTrack} event The track event
 * @param {Object.<string, any>} settings Custom settings
 * @return any
 */
async function onTrack(event, settings) {
	const body = {
		campaign_id: `${settings.campaignId}`,
		recipient: {
			full_name: event.properties.full_name,
			address_1: event.properties.address_1,
			address_2: event.properties.address_2,
			city: event.properties.city,
			state: event.properties.state,
			postal_code: event.properties.postal_code,
			email: event.properties.email
		}
	};

	const response = await fetch('https://api.heypoplar.com/v1/mailing', {
		method: 'POST',
		headers: {
			Authorization: `Bearer ${settings.apiKey}`,
			'Content-Type': 'application/json'
		},
		body: JSON.stringify(body)
	});

	return response.json();
}
	
```

## **Custom Merge Tags**

If your creative uses [custom merge tags](about:/triggered-mailing-api/using-the-tool/creative/dynamic-creatives/merge-tags#custom-merge-tags), be sure to include the `merge_tags` object.

```
/**
 * @param {SpecTrack} event The track event
 * @param {Object.<string, any>} settings Custom settings
 * @return any
 */
async function onTrack(event, settings) {
	const body = {
		campaign_id: `${settings.campaignId}`,
		recipient: {
			full_name: event.properties.full_name,
			address_1: event.properties.address_1,
			address_2: event.properties.address_2,
			city: event.properties.city,
			state: event.properties.state,
			postal_code: event.properties.postal_code,
			email: event.properties.email
		},
    merge_tags: {
      promo-code: event.properties.code
    }
	};

	const response = await fetch('https://api.heypoplar.com/v1/mailing', {
		method: 'POST',
		headers: {
			Authorization: `Bearer ${settings.apiKey}`,
			'Content-Type': 'application/json'
		},
		body: JSON.stringify(body)
	});

	return response.json();
}
	
```

***

## **Orders**

To share order data, you'll want to send a **`POST`** request to `https://api.heypoplar.com/v1/order`&#x20;

Your headers should contain ``Authorization: `Bearer ${settings.apiKey}`,`` and `'Content-Type': 'application/json'`

```
/**
 * @param {SpecTrack} event The track event
 * @param {Object.<string, any>} settings Custom settings
 * @return any
 */
async function onTrack(event, settings) {
	const body = {
		email: event.properties.email,
		identifier: event.properties.identifier,
		shipping_address: {
			name: event.properties.full_name,
			address_1: event.properties.address_1,
			address_2: event.properties.address_2,
			city: event.properties.city,
			state: event.properties.state,
			postal_code: event.properties.postal_code
		},
		order_id: event.properties.order_id,
		total: event.properties.order_total,
		order_date: event.receivedAt
	};

	const response = await fetch('https://api.heypoplar.com/v1/order', {
		method: 'POST',
		headers: {
			Authorization: `Bearer ${settings.poplarApiKey}`,
			'Content-Type': 'application/json'
		},
		body: JSON.stringify(body)
	});

	return response.json();
}
	
```

`shipping_address` and/or `billing_address` may be used when passing order data. For more details on **required** and **optional** values, see our Orders API.

***

## Audiences

To add an audience member to a list, you'll want to send a **`POST`** request to `https://api.heypoplar.com/v1/audiences/${settings.audienceID}`&#x20;

Your headers should contain ``Authorization: `Bearer ${settings.apiKey}`,`` and `'Content-Type': 'application/json'`

```
/**
 * @param {SpecTrack} event The track event
 * @param {Object.<string, any>} settings Custom settings
 * @return any
 */
async function onTrack(event, settings) {
	const body = {
		address: {
			name: event.properties.full_name,
			address_1: event.properties.address_1,
			address_2: event.properties.address_2,
			city: event.properties.city,
			state: event.properties.state,
			postal_code: event.properties.postal_code
		},
		email: event.properties.email,
		identifier: event.properties.identifier
	};

	const response = await fetch(
		`https://api.heypoplar.com/v1/audience/${settings.audienceId}`,
		{
			method: 'POST',
			headers: {
				Authorization: `Bearer ${settings.apiKey}`,
				'Content-Type': 'application/json'
			},
			body: JSON.stringify(body)
		}
	);

	return response.json();
}
	
```

For more details on **required** & **optional** values, see our **Audiences API**.

***

## Do Not Mail

To add a member to your Do Not Mail list, you'll want to send a **`POST`** request to `https://api.heypoplar.com/v1/do-not-mail`

Your headers should contain ``Authorization: `Bearer ${settings.apiKey}`,`` and `'Content-Type': 'application/json'`

***

## Run

To run your function, you'll need to select a sample event from your Source. Make sure the sample event contains all the necessary data for mailing.


# Optimizely

If you are an Optimizely or Zaius user, you can add the **Poplar Direct Mail** channel App to your new or existing campaigns. Before integrating and sending tests, make sure you've completed the following:

* Create a campaign in Poplar
* Upload creative (*this can be a placeholder creative for testing purposes*)
* Locate both your **Production Access Token** and **Test Access Token** on the [**API**](https://app.heypoplar.com/credentials) page of your Poplar Account

## Install Poplar Direct Mail Channel

From your Optimizely Dashboard, navigate to the **App Directory** in the top right and search for **Poplar** to install the App:

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63176b5f4cde766bbe14255a/file-ehgnT9xfox.png)

<img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63176b7b4cde766bbe14255c/file-YMkoGyfPd4.png" alt="" width="563">

***

## Set Your API Key

Navigate to the **Settings** tab of the Poplar App in Optimizely to enter either your [Test or Production API Key.](https://app.heypoplar.com/credentials)

{% hint style="info" %}
**We strongly recommend starting with the Test API token.** It will behave like the Production token and show successful triggers under the campaign's **History** tab, only nothing will actually mail and you wont be charged.&#x20;
{% endhint %}

Once you've confirmed the connection is successful, the **Production API Key** can be swapped in its place.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63176c12c713d51da3edbdeb/file-AY1kqGIWsg.png)

***

## Add Poplar Channel to Your Campaign

Navigate to your Optimizely **Campaigns** to create or update an existing campaign.&#x20;

Establish your audience segment criteria in the Enrollment tab, then move on to the **Touchpoints** tab to add **Direct Mail (Poplar)** as a channel:

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63176c707164226be0c83652/file-cBJQdbAEin.png)

If you already have an existing Touchpoint such as Email set up, click the **+ ADD CHANNEL** tab at the top to add Direct Mail (Poplar).

***

## Target Your Poplar Campaign

From inside the **Target** tab, select your Poplar campaign from the dropdown list.

If your campaign isn't listed in the drop down, make sure creative has been uploaded and the campaign is labeled Active for mailing.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63176cccc713d51da3edbdee/file-bfkGAQJEy2.png)

If **Use addresses when available** AND **Use email when available** are both enabled, make sure [**Address Enrichment**](about:/triggered-mailing-api/using-the-tool/audiences#address-enrichment) is also enabled for your Poplar campaign. Otherwise emails will not be accepted or matched to physical addresses for mailing.

### Custom Merge Tags

If your Poplar creative uses [custom merge tag](about:/triggered-mailing-api/using-the-tool/creative/dynamic-creatives/merge-tags#custom-merge-tags)[s](about:/triggered-mailing-api/using-the-tool/creative/dynamic-creatives/merge-tags#custom-merge-tags), enable the merge tag option and select the number of custom merge tags present in your creative:

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63176d687164226be0c8365c/file-tWgdEBGbz1.png)

**MERGE TAG 1** should contain the value in your Poplar creative (if you have {{custom.**promo-code**}} in your creative, you'll want to simply enter **promo-code**), and **MERGE TAG 1 VALUE** should pull in the data from Optimizely to map to the custom merge tag.

Click the blue Test button in the top right to make sure the data is being pulled into the request correctly. This Test button will **not** send a test to Poplar, it will only help you preview the data that will be sent in the request.

***

## Go Live (Test)

**Save** your Poplar channel and campaign settings, the click the green **Go Live** button:

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63176dbe90c29a3d732c4f93/file-KhMy9qxQjw.png)

Since you entered your **Test API key** under your Poplar App Settings, nothing will actually mail and you wont be charged for incoming requests.

To test the trigger, you can either manually push audience members through the flow or leave the campaign live for a day or two and let the test requests come through organically.

Successful triggers will be visible under your campaign's **History** section at the bottom of the **Campaign Overview** page. Once you've confirmed the connection is successful and all the necessary data is coming through and mapping properly, you can go live to Production.

***

## Go Live (Production)

To switch to Production, navigate to the **API** page in your Poplar account and copy your **Production Access Token.**

Then head to the **App Directory** in Optimizely to bring up the Poplar App. In the **Settings** tab, paste your Production token where your Test token was under Authorization:

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/63176e5c037bc877147b64c5/file-r3I5BVwaV3.png)

Hit **Authorize**, then head back to your campaign no make sure it's set live to production!


# Cordial

To integrate Cordial with Poplar you can refer to the [Automated Messages](https://support.cordial.com/hc/en-us/articles/115005364287-Automated-Messages) section of their documentation while following the step-by-step guide below.

1. Login to Cordial, click the Message Automation dropdown on the left and select the **Rest Automations** page at the bottom.&#x20;
2. Create a new message automation by clicking the green **+ New** button. Give the message automation a unique name based on use case, select any applicable tags, leave the Channels section set to "Rest" and Continue.

![cordial-1](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6307c1cac713d51da3ed8a91/file-so7uLqVwcm.png)

3. You'll be brought to the automation settings where you'll see a list of **REST Parameters** and REST Post Processing scripts.
4. Click the **Edit** button to the far right of REST Parameters and enter the following settings:

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6307c22f7164226be0c802b8/file-VdZygMvP3I.png)

<table><thead><tr><th>Parameter</th><th>Value</th></tr></thead><tbody><tr><td><strong>HTTP endpoint</strong></td><td><pre><code>https://api.heypoplar.com/v1/mailing/

</code></pre></td></tr><tr><td><strong>HTTP request method</strong></td><td>POST</td></tr><tr><td><strong>HTTP request header</strong></td><td>Authorization : Bearer < <em>Test or Production API Token</em>></td></tr><tr><td><strong>Content type</strong></td><td>application/json<br></td></tr></tbody></table>

{% hint style="info" %}
We strongly recommend you use a [**Test API**](https://app.heypoplar.com/credentials) key to start. Once your workflow is set up successfully and running in test mode, go back into the REST Parameter settings and swap it out for a Production API key to begin mailing.
{% endhint %}

5. The **Script** section at the top is where you'll enter logic for the recipient data being passed to Poplar. If your Poplar campaign has address enrichment enabled, only email and any other custom merge tag data needs to be passed. If mailing to existing customer addresses, you'll pass in the full address. Examples of each can be copy, pasted, and adjusted as needed:

**Mailing Address**

```
{
"recipient": {
"full_name": "{$contact.first} {$contact.last}",
"address_1": "{$contact.geo_mailing.street_address}",
"address_2": "{$contact.geo_mailing.street_address2}",
"city": "{$contact.geo_mailing.city}",
"state": "{$contact.geo_mailing.state}",
"postal_code": "{$contact.geo_mailing.postal_code}"
},
"campaign_id": "REPLACE-WITH-YOUR-CAMPAIGN-ID",
"creative_id": "REPLACE-WITH-YOUR-CREATIVE-ID"
}
```

{% hint style="info" %}
The creative\_id is completely optional. Poplar will automatically split mailings between all active creative if none are specified.&#x20;
{% endhint %}

**Address Enrichment**

```
{
"recipient": {
"email": "{$contact.channels.email.address}"
},
"campaign_id": "REPLACE-WITH-YOUR-CAMPAIGN-ID",
"creative_id": "REPLACE-WITH-YOUR-CREATIVE-ID"
}
```

{% hint style="info" %}
The creative\_id is completely optional. Poplar will automatically split mailings between all active creative if none are specified.&#x20;
{% endhint %}

6. Click the **Preview** button in the top right to see a preview of the request, and make sure all of the data maps properly. If everything looks correct, hit the Back button in the top right then **Save** the settings.
7. Once your settings have been saved, click the **Send Test** button in the top right to test the integration. If the connection is successful, you'll see a mailer appear under the campaign's History tab:
8. If the connection is successful, **Publish** and move on to the **Event Trigger** settings on the left under **Sending Methods**.
9. Click the **Edit** button to the far right of Trigger Events to set the desired trigger conditions. **Audience Filters** can also be added to refind your target audience if needed.
10. Be sure to **Save** then **Enable** the trigger to set it live.&#x20;

{% hint style="info" %}
This integration was built with daily automated workflows in mind and cannot support a data push exceeding 15,000-20,000 in one batch due to API rate limiting. For large batched mailings, export the audience segment from Cordial, and mail via a One Time Send in Poplar.&#x20;
{% endhint %}

***

**Merge Tags & Variable Data**

Coupon codes, loyalty status, and even browsed items are among many examples of variable data stored in Cordial that can be passed to Poplar, and utilized in Creative design via custom merge tags.

To pull variable data into your creative, it must be uploaded to the platform as an HTML file.

When setting up your Rest Automation, you'll need to include the merge tags and their dynamic values as an object in the Script section of your REST Parameters. Here's one example:

![cordial-4](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6307c520037bc877147b31c2/file-3mq8vS8u5H.png)

You'll know the request is successful and the merge tags are mapping accordingly if a test mailer appears in the campaigns **History** section under the **Campaign Overview** page, same as above. Click into the mailer and scroll down to see the request details:

![cordial-request-details](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6307c54c4cde766bbe13f1e8/file-qa8dixXDPC.png)


# Sailthru

We've provided the Poplar-specific webhook directions below. [**Sailthru's documentation**](https://getstarted.sailthru.com/lo/webhooks-lo/) is also available.

***

Create a new or select an existing Lifecycle Optimizer Flow under the Messaging tab in Sailthru.

Add an Action step to the flow\.3Select **Send Webhook** in the dropdown.

Add our URL: `https://api.heypoplar.com/v1/mailing/`

Set the method to **POST**.

Set the content type to **Other**.

Add your formatted payload - this will change depending on the data structure of your Sailthru configuration, and what you want to pass into Poplar.<br>

### **Email Append:**

<figure><img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308ece590c29a3d732c220c/file-xHWxizcl08.png" alt=""><figcaption></figcaption></figure>

3. Select **Send Webhook** in the dropdown.
4. Add our URL: `https://api.heypoplar.com/v1/mailing/`
5. Set the method to **POST**.
6. Set the content type to **Other**.
7. Add your formatted payload - this will change depending on the data structure of your Sailthru configuration, and what you want to pass into Poplar.

\
**Email Append**

<figure><img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6308ece590c29a3d732c220c/file-xHWxizcl08.png" alt=""><figcaption></figcaption></figure>

```
campaign_id=XXXXX&creative_id=XXXXX&recipient[email]={email}
```

### **Mailing Address:**

```
campaign_id=XXXXX&creative_id=XXXXX&recipient[full_name]={profile.vars.full_name}&recipient[address_1]={profile.vars.address_1}&recipient[address_2]={profile.vars.address_2}&recipient[city]={profile.vars.city}&recipient[state]={profile.vars.state}&recipient[postal_code]={profile.vars.postal_code}
```

#### "Profile" Object Syntax

When formatting your Mailing Address payload, use `&` to separate parameters. Be careful not to include any breaks or spaces because they will prevent the data from passing to Poplar in the right format. Nested parameters live inside square brackets `[...]` and continue to nest within those brackets. For example, payload `campaign_id=XXXXX&recipient[full_name]=Poplar&recipient[postal_code]=10004` would appear:

```
{
    "campaign_id":"XXXXX",
    "recipient": {
        "full_name":"Poplar",
        "postal_code:"10004"
    }
}
```

When pulling data, it is important to know when to use `profile.` vs `profile.vars`. Sailthru's [Profile Object](https://getstarted.sailthru.com/developers/zephyr-syntax/profile-object/) model is a useful reference.

* \- Use `profile.{insert-field-name}` to pull from Sailthru's core data.\
  \- Use `profile.vars.{your-custom-variable-name}` to pull any custom variables you created that were not originally fields specified by Sailthru.\
  \- **Note:** The customer email is an exception to the above. It is specifically referenced as `{email}`.
* *See the* [*Sailthru Profile Object* ](https://getstarted.sailthru.com/developers/zephyr-syntax/profile-object/)*for complete details.*

| **key**       | **value**                                                                                                |
| ------------- | -------------------------------------------------------------------------------------------------------- |
| `campaign_id` | Copy from the right side of the Campaign > Overview                                                      |
| `creative_id` | (optional) Copy from the individual creative page under Campaign > Creative                              |
| `full_name`   | (optional) You can also replace with a fixed string like `Current Resident` for use on the address block |
| `first_name`  | When using first & last name instead of full name in your webhook you must use BOTH or it will error out |
| `last_name`   |                                                                                                          |
| `address_1`   |                                                                                                          |
| `address_2`   |                                                                                                          |
| `city`        |                                                                                                          |
| `state`       |                                                                                                          |
| `postal_code` |                                                                                                          |
|               |                                                                                                          |

You can also add merge tags with your own variable data at the end. When using first & last name options instead of full name you need to include both or it will error.

***

You can also add merge tags with your own variable data at the end. <br>

8. Add a HTTP **Header** and configure an `Authorization` key and set the `*Bearer Your API Key*` (make sure to also replace the asterisks\*)

{% hint style="info" %}
We strongly recommend you use a **Test API Key** to start. Once your workflow is set up successfully and running in test mode, go back into the webhook and swap it out for a **Production API Key** to begin mailing.
{% endhint %}

9. Underneath Headers, you must also specify your Content-Type to be text/plain.
10. Test your webhook by sending a test through the flow, and then checking the **History Tab** of the campaign in Poplar to confirm that the data looks as you intended.
11. We recommend leaving the webhook live with your test key for a period of time to get a sense of your volume. Once it looks like it's working well, go back in and **replace** the **API Key** with a **Production Key** to begin mailing.<br>

<figure><img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/630cd3727164226be0c8100d/file-td7qev28lt.jpg" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/630cd3f04cde766bbe13fef1/file-U0GQopXxRq.png" alt="" width="563"><figcaption></figcaption></figure>

Add a HTTP **Header** and configure an `Authorization` key and set the `*Bearer Your API Key*` (make sure to also replace the asterisks\*)

We strongly recommend you use a **Test API Key** to start. Once your workflow is set up successfully and running in test mode, go back into the webhook and swap it out for a **Production API Key** to begin mailing.

Underneath Headers, you must also specify your Content-Type to be text/plain.

<figure><img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/630cd3f04cde766bbe13fef1/file-U0GQopXxRq.png" alt=""><figcaption></figcaption></figure>

Test your webhook by sending a test through the flow, and then checking the **History** section of the **Campaign Overview** in Poplar to confirm that the data looks as you intended.

<figure><img src="//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/630cd3727164226be0c8100d/file-td7qev28lt.jpg" alt=""><figcaption></figcaption></figure>

We recommend leaving the webhook live with your test key for a period of time to get a sense of your volume. Once it looks like it's working well, go back in and **replace** the **API Key** with a **Production Key** to begin mailing.


# Braze

We've provided detailed Poplar specific integration docs below, you can alternatively reference the [Braze Webhook Documentation](https://www.braze.com/docs/user_guide/message_building_by_channel/webhooks/creating_a_webhook/).

### Creating a Poplar Webhook Template in Braze

1. Log into Braze, in the left navigation select **Templates ->** **Webhook Templates**
2. Select **Create Webhook Template**
3. Give your new template a name like: `Poplar Mail Trigger` and select "**Compose Webhook: Start from scratch**"
4. Under the configuration set the **Webhook URL** to: `https://api.heypoplar.com/v1/mailing/`
5. Switch the **Request Body** in the dropdown to **Raw Text**
6. You can then set up either an email append or an addressed API request template. You'll need to copy the campaign ID from **Poplar -> Campaign -> Campaign Overview**.

![braze - 1](/files/HWcgj3Lt33fMO635uih8)

#### Email Append

```
{
  "recipient": {
    "email": "{{${email_address}}}"
  },
  "campaign_id": "REPLACE-WITH-YOUR-CAMPAIGN-ID"
}
```

#### Addressed User

```
{
  "recipient": {
    "full_name": "{{${first_name}}} {{${last_name}}}",
    "address_1": "{{custom_attribute.${address_1}}}",
    "address_2": "{{custom_attribute.${address_2}}}",
    "city": "{{${city}}}",
    "state": "{{custom_attribute.${state}}}",
    "postal_code": "{{custom_attribute.${postal_code}}}"
  },
  "campaign_id": "REPLACE-WITH-YOUR-CAMPAIGN-ID"
}
```

Depending on your custom attribute configuration you'll need to modify the names of the attributes from what is in the code above.

7. Select **Add New Header**. You'll want to configure an `Authorization` key and set the `Bearer <Your API Key>` (make sure to also remove the <>)

Head over to Poplar to get a **Test API Key:** [**https://app.heypoplar.com/integrations/api\_keys**](https://app.heypoplar.com/integrations/api_keys) We highly recommend setting things up using a Test API Key first because it will let you create digital proofs and check them before switching to a Production API key.&#x20;

![braze- 1 copy](/files/7klXSp7jBOIbuhL9fLUK)

8. Back in Braze, select the **Test** tab to test your template. Either select an existing user, or if you don't have user data select custom and send a test to Poplar. You can then head over to Poplar -> Campaigns -> Click into your **Campaign** and scroll down to the **History** to view the test you sent.
9. Once your template is successful, you can then go to Campaigns and add a new campaign or edit an existing campaign to add a webhook. Then select the template you just created to use it.
10. After selecting the template you can select your targeting and delivery settings as you would normally for any other Braze campaign.

{% hint style="info" %}
We recommend leaving the campaign live with a test API key for a period of time to make sure it's working correctly and the segmentation and delivery is correct. Then swap out the key for a production key to begin mailing.&#x20;
{% endhint %}


# Blueshift

### Before You Start <a href="#before-you-start" id="before-you-start"></a>

Make sure you’ve completed the following in Poplar:

* Create a **Campaign** in Poplar.
* Upload at least one **Creative** (a placeholder is fine for testing).
* Locate your **Test Access Token** and **Production Access Token** on the **API** page of your Poplar account.

For webhook requests to successfully create or test mailers, the `campaign_id` you send must reference an **Active** Poplar campaign that has creative artwork uploaded.

***

### App Hub (Custom App) <a href="#app-hub-custom-app" id="app-hub-custom-app"></a>

1. In Blueshift, go to **App Hub → My Apps → +ADD CUSTOM APP**.
2. Name it (e.g., **Poplar Mail**).
3. Authentication: choose **Basic HTTP** and add the **HTTP Headers** as shown below.
4. (Optional) Upload a logo and save.

<figure><img src="https://docs.heypoplar.com/~gitbook/image?url=https%3A%2F%2F882964084-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FQQrKGAkEKUx55lzOfxs1%252Fuploads%252FIS466wc0Ci1vhPaQLINZ%252Fimage.png%3Falt%3Dmedia%26token%3D4c713391-b126-4f45-ac63-f93ed2f5fd81&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=e9a72b94&#x26;sv=2" alt="" width="563"><figcaption></figcaption></figure>

### Add an Adapter <a href="#add-an-adapter" id="add-an-adapter"></a>

1. Open your new **Poplar Mail** app → click **+ADAPTER**.
2. Enter the HTTP Headers exactly as pictured below. Copy and paste your Test API key from Poplar in the API Key section after "Bearer" (later the production API key will be used when you want to set the campaign live).
3. **Save** the adapter.

<figure><img src="https://docs.heypoplar.com/~gitbook/image?url=https%3A%2F%2F882964084-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FQQrKGAkEKUx55lzOfxs1%252Fuploads%252F76WuR7j6NBff27SBLuui%252Fimage.png%3Falt%3Dmedia%26token%3Da9056052-96b5-455b-ac1b-01cd5bd0dccf&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=68d1baa&#x26;sv=2" alt=""><figcaption></figcaption></figure>

You’ll select this adapter later in your Cloud App template and journey trigger.

### Cloud App Template (Payload) <a href="#cloud-app-template-payload" id="cloud-app-template-payload"></a>

1. Go to **Templates → Cloud App → +TEMPLATE** and choose your **Poplar Webhook** app.
2. **Properties → Settings**: select your **Adapter** and set **API Endpoint** to: `https://api.heypoplar.com/v1/mailing/`
3. **Advanced settings**:
   * **HTTP method**: `POST`
   * **HTTP headers**: add `Authorization: Bearer YOUR_TEST_OR_PRODUCTION_ACCESS_TOKEN`
   * Leave default `Content-Type: application/json`
   * (Optional) **Unique Sent Identifier** → choose `email` or `customer_id` to prevent duplicates.
4. Click the eye in the top right to pull up your user attributes for reference

   <figure><img src="https://docs.heypoplar.com/~gitbook/image?url=https%3A%2F%2F882964084-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FQQrKGAkEKUx55lzOfxs1%252Fuploads%252FNu0lSBn9dH0krjYqIGV6%252Fimage.png%3Falt%3Dmedia%26token%3Da6f91414-eee7-40da-bc28-8667232e2254&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=3bedb979&#x26;sv=2" alt=""><figcaption></figcaption></figure>
5. **Content**: set the **Payload** to JSON and paste one of the templates below.

Address DataEmails (for Address Enrichment)Copy

```
{
  "recipient": {
    "full_name": "{{user.firstname}} {{user.lastname}}", 
    "address_1": "{{user.address_line1}}",
    "address_2": "{{user.address_line2}}",
    "city": "{{user.address_city}}",
    "state": "{{user.address_state}}",
    "postal_code": "{{user.address_postal_code}}"
  },
  "campaign_id": "REPLACE-WITH-YOUR-CAMPAIGN-ID",
  "creative_id": "REPLACE-WITH-YOUR-CREATIVE-ID"
}
```

* Use Liquid to reference Blueshift **user** attributes (e.g., `{{user.firstname}}`).
* Replace `campaign_id` and `creative_id` with your Poplar values. If `creative_id` is omitted, Poplar will select the only active creative in the campaign, and if there are multiple active creatives they will all fire as an A/B test.

**Merge-tags (Optional):** If using custom merge tags for a dynamic creative, they should be listed within a merge\_tags object like so:

```
{
"recipient": {
    "email": "{{user.email}}"
},
"merge_tags": {
    "promo-code": "{{user.code}}"
},
"campaign_id": "REPLACE-WITH-YOUR-CAMPAIGN-ID",
"creative_id": "REPLACE-WITH-YOUR-CREATIVE-ID"
}
```

***

### Journey (Trigger) <a href="#journey-trigger" id="journey-trigger"></a>

1. Create or open a **Campaign** in Blueshift.
2. In **Journey** builder, choose the trigger type you need (e.g., **Event-triggered** for cart abandonment, **Segment-triggered** for lifecycle).
3. Add a **Cloud App** node. Select:
   * **Channel/App**: your **Poplar Webhook** app
   * **Adapter**: the adapter you created
   * **Template**: the Cloud App template you just built
4. Connect it in the flow where the mailer should be sent.
5. Validate and launch your Journey!

<figure><img src="https://docs.heypoplar.com/~gitbook/image?url=https%3A%2F%2F882964084-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FQQrKGAkEKUx55lzOfxs1%252Fuploads%252F8F9vd8avpqx1hMz2Udcf%252Fimage.png%3Falt%3Dmedia%26token%3Dcc56ddfa-5b20-4f94-a5e6-6a5b97cfb399&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=13304077&#x26;sv=2" alt=""><figcaption></figcaption></figure>

### Conditional / Decision Splits (optional) <a href="#conditional-decision-splits-optional" id="conditional-decision-splits-optional"></a>

If some customers have only email while others have full address data, branch your journey:

* Add a **Decision Split** that checks for presence of address fields (e.g., `user.address_1` and `user.postal_code`).
* **Path A** → Use **Template A (Email-only)** for Address Enrichment.
* **Path B** → Use **Template B (Address Data)** for direct mail.

Without a split, address-required calls may 400 if any required address attributes are missing.

### Test & Preview <a href="#test-and-preview" id="test-and-preview"></a>

There are two reliable ways to test in Blueshift:

**1) Test from the Cloud App Template**

* Open your template → **Test Send**.
* Pick a **Preview User** and send.
* Confirm a **201** response is returned
  * 400 indicates an error in the payload setup, or missing required data from the user's profile (address 1, city, postal code).

**2) Test from the Journey**

* In your campaign’s **Journey** tab, use **Test send message** on the Cloud App node.
* This method uses the **actual adapter + campaign context**, which is handy if you rely on campaign parameters.

### Validate the Connection in Poplar <a href="#validate-the-connection-in-poplar" id="validate-the-connection-in-poplar"></a>

* In your Poplar **Campaign**, scroll to the **History** section to see the test mailers.
* Click into a mailer to view the **PDF proof** and **Request Details**; verify the request matches the payload you built in Blueshift.
* If everything looks good, Edit your Adapter and enter your Poplar production API key to start sending mailers


# Marketo

We've provided detailed Poplar specific integration docs below, you can alternatively reference the [Marketo Webhook Docs](https://developers.marketo.com/webhooks/) on Creating, Calling, and using it in a [Smart Campaign](https://experienceleague.adobe.com/docs/marketo/using/product-docs/core-marketo-concepts/smart-campaigns/flow-actions/use-a-webhook-in-a-smart-campaign.html).

***

### Creating a Custom Webhook

Click **New Webhook**

Name & Configure Webhook

1. Log into Marketo, Go to Admin and click Webhooks.
2. Click **New Webhook**
3. Name & Configure Webhook

It may be helpful to include Poplar, and the name of the campaign you're linking to. i.e. "Poplar-Abandoned-Cart"

Set the type to **POST**

Set the Template as follows:

**For an email append:** *the customer attribute names you have in your account may differ and need to be modified.*

4. Set the **URL** to: `https://api.heypoplar.com/v1/mailing/`
5. Set the type to **POST**
6. Set the Template as follows:

**For an email append:** *the customer attribute names you have in your account may differ and need to be modified.*

```
{
  "recipient": {
    "email": {{customer.email}}
  },
  "campaign_id": "REPLACE-WITH-YOUR-CAMPAIGN-ID"
}<br>
	
```

**For a full address mailing:**

```
{
  "recipient": {
    "full_name" : {{customer.full_name}},
    "address_1": {{customer.address_1}},
    "address_2": {{customer.address_2}},
    "city": {{customer.city}},
    "state": {{customer.state}},
    "postal_code": {{customer.postal_code}}
  },
  "campaign_id": "REPLACE-WITH-YOUR-CAMPAIGN-ID"
}
	
```

| **key**       | **value**                                                                                                |
| ------------- | -------------------------------------------------------------------------------------------------------- |
| `campaign_id` | Found on the right hand side of your campaign's overview page                                            |
| `full_name`   | (optional) You can also replace with a fixed string like Current Resident for use on the address block   |
| `first_name`  | When using first & last name instead of full name in your webhook you must use BOTH or it will error out |
| `last_name`   |                                                                                                          |
| `address_1`   | *Required*                                                                                               |
| `address_2`   |                                                                                                          |
| `city`        |                                                                                                          |
| `state`       | *Required*                                                                                               |
| `postal_code` | *Required*                                                                                               |
| `email`       |                                                                                                          |

You can also add merge tags with your own variable data at the end. When using first & last name options instead of full name you need to include both or it will error.7

8. Set the token & response types to **JSON**
9. Click **Create**&#x20;

**Custom Headers** – Accessed through Webhooks Actions -> Set Custom Header, this menu allows the addition of any number of custom Key-Value pairs as HTTP Headers.

You'll want to configure an `Authorization` key and set the `Bearer <Your API Key>` (make sure to also replace the <>)

Create another header and use `Content-type` for the key, then `application/json` for the value.

10. Add this new webhook as a node in any of your Smart Campaigns.

***

### Smart Campaign: Trigger a Poplar Mailer

1. Create a Smart Campaign
2. Go to the Flow tab and drag in the Call webhook flow action
3. Select the webhook (among the dropdown list of webhooks you've created)


# Hightouch

Before integrating and sending tests with Hightouch, make sure you've completed the following:

1. Create a campaign in Poplar - sign up for free [here](https://heypoplar.com/).
2. Upload creative (*can be a placeholder creative for testing purposes* - [Poplar Creative Templates](https://docs.heypoplar.com/integrations/supported-platforms/docs.heypoplar.com/triggered-mailing-api/using-the-tool/creative/templates))
3. Locate both your Production Access Token and Test Access Token on the [API](https://app.heypoplar.com/credentials) page of your Poplar Account

***

## Destinations

Log into your Hightouch account

Navigate to Destinations -> " **Add destination**"

Select Destination: Type " **Poplar**" and connect.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67081bd91198281bd8609ce1/file-20Yd1G6E37.png)

## Authenticate

Copy/Paste the **Test API** token from the [Integrations](https://app.heypoplar.com/credentials) page in your Poplar account.

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6708156b8af27b34842bffae/file-AKVwzumvgd.png)

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6708159b15d0b82233065348/file-iiMdUmDdaZ.png)

## Configure Sync

Choose the model you would like to sync

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67081a0844628317ef905143/file-Xt2zlQuF5M.png)

Select Poplar as destination

Select "Campaign Trigger"

Select your Poplar campaign

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/6708137b6d43ca7b17b2bbc0/file-LS05XPfjDp.png)

Select your creative *(optional) - if left blank, Poplar will automatically a/b split between all active creatives in the specified campaign*

## Map Fields

Map fields from your source to the equivalent fields in Poplar

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/670813e81198281bd8609cd6/file-RU5qIcw1vx.png)

## Merge Tags

*If using a dynamic creative, include any additional fields to map the the merge tag fields*

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67081429811a2434cb6d4ed7/file-hkwkm7N0lM.png)

## Test Connection

Choose a profile that has all the necessary attributes and click "Sync as added row"

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67081c5e15d0b8223306534f/file-pWGjkF164Q.png)

Look for `200 OK`: Success Response

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67081cf16d43ca7b17b2bbc3/file-oaj1TUPpDE.png)

Check the **History** section in Poplar to confirm integration success.

Once connection is verified, click "Continue"

## Production Token

In Hightouch, navigate back to Destinations -> Poplar Destination -> Configuration -> Edit

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67081dea6d43ca7b17b2bbc5/file-999kgR1T0f.png)

Copy/Paste **Production API** token from Poplar [Integrations](https://app.heypoplar.com/credentials) page

Save & Exit

## Run Sync

Navigate to Syncs -> Run Sync

![](//d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/67081e026d43ca7b17b2bbc6/file-r2rEGLSbCG.png)


# Zapier

Connect your Marketing Automation/CRM platform to Poplar via Zapie

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/630cdf734cde766bbe13ff3f/file-L96eoMUfDA.jpg" alt=""><figcaption></figcaption></figure>

## Supported Platforms <a href="#supported-platforms" id="supported-platforms"></a>

Zapier allows you to link hundreds of different web services with the Poplar API through the [**Poplar Zapier App**](https://zapier.com/apps/poplar/integrations). They support easy access to hundreds of CRMs, marketing tools and even Google Forms and Spreadsheets.

| ActiveCampaign | Hubspot    | Infusionsoft | Magento   |
| -------------- | ---------- | ------------ | --------- |
| Attentive      | ConvertKit | Highrise     | Mixpanel  |
| BigCommerce    | Drip.io    | Mailchimp    | Lytics    |
| ReCharge       | Salesforce | Zoho         | Hightouch |

*& hundreds* [more...](https://zapier.com/developer/public-invite/19115/02eea18be71cab21b688d1a6a05c9d52/)

***

## Step 1: Make a Zap <a href="#step-1-make-a-zap" id="step-1-make-a-zap"></a>

Log into your Zapier account and from your dashboard, click **MAKE A ZAP** to begin the new trigger setup.

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/630e2beb4cde766bbe14067b/file-JTkmTDQiw1.png" alt=""><figcaption></figcaption></figure>

***

## Step 2: App & Trigger Event <a href="#step-2-app-and-trigger-event" id="step-2-app-and-trigger-event"></a>

Give your Zap a name related to its use case, then select the marketing automation or cloud platform that has the audience or segmentation data you'd like to send to Poplar.

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/630e2c1a7164226be0c8179d/file-sS5hZS3a0U.png" alt=""><figcaption></figcaption></figure>

Next you'll be prompted to choose the trigger event you'd like to use to send data to Poplar. Connect to your chosen account to access your data and set up the trigger. **Test your trigger to make sure your account is connected and all the necessary data can be pulled.**

***

## Step 3: Action <a href="#step-3-action" id="step-3-action"></a>

Search for and select the [**Poplar (BETA) App**](https://zapier.com/apps/poplar/integrations) to use as your action; the destination where you'll be sending your data.

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/630d196c037bc877147b4070/file-1w9Hlp2qnF.png" alt=""><figcaption></figcaption></figure>

As pictured above, there are a number of different actions to choose from in addition to creating a mailing. Choose the action that best suits your needs, then click Continue to connect your Poplar account.

***

## Step 4: Connect Your Poplar Account <a href="#step-4-connect-your-poplar-account" id="step-4-connect-your-poplar-account"></a>

To connect your account, you'll be prompted to enter an **Access Token** which can be found on the [**API**](https://app.heypoplar.com/credentials) page of your Poplar account.

**We recommend first entering your Test key, this will allow you to test the trigger connection without actually mailing. Successful trigger requests will be visible from the History tab of the connected campaign.**

Click **+ Connect a new account** again to enter your **Production** key. We recommend only selecting this account when you're ready to go live.

If using your Production account, clicking **Test Trigger** during will trigger a live mailer.

***

## Step 5: Set Up Action <a href="#step-5-set-up-action" id="step-5-set-up-action"></a>

With your Poplar account connected, you'll be prompted to select the required criteria for your trigger, and map the data you'd like to send to the required fields.

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/630e2e93c713d51da3ed9f58/file-udPy7BgHPg.png" alt=""><figcaption></figcaption></figure>

Next, you'll want to either **Test & Review** or **Test & Continue**. Submitting this test should successfully pass your data to Poplar. If you're triggering a mailing, the successful request will appear in the **History** section of your connected campaign.

***

## Step 6: Turn On Zap! <a href="#step-6-turn-on-zap" id="step-6-turn-on-zap"></a>

If tests are successful, it's time to turn on your Zap! If you want to let the trigger run naturally under the Test environment for a day or two, feel free to leave your Test Account from Step 4 selected. If you feel ready to go live, head back to **Choose Account** and select the one connected to your **Production** key before turning on your Zap!

***

## Helpers <a href="#helpers" id="helpers"></a>

Add branching logic to Zaps

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/630e2edd7164226be0c817b5/file-rx2bCH6QfE.jpg" alt=""><figcaption></figcaption></figure>

### Paths <a href="#paths" id="paths"></a>

Paths help you build advanced workflows to run different actions based on varying conditions. With each path, you set rules to decide which actions should occur when those rules are met.

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/630e2f27c713d51da3ed9f5b/file-LGA7ybP9o7.png" alt=""><figcaption></figcaption></figure>

### Filters <a href="#filters" id="filters"></a>

Filters can be added to any Zap to restrict it to run only when certain conditions are met. Filters are an optional part of setting up a Zap, but they're a great way to make sure Zaps only continue for certain items.

You can add a filter at any point after the trigger, and can even have multiple filters in a single Zap

<figure><img src="https://d33v4339jhl8k0.cloudfront.net/docs/assets/5f340c51042863444aa03abf/images/630e2f5ac713d51da3ed9f5d/file-kJTVDEAcRL.png" alt=""><figcaption></figcaption></figure>

### **Delays** <a href="#delays" id="delays"></a>

Delays allow you to put your Zap on hold for a specified amount of time before your actions are run. You can use delays to set up scheduled mailings, send automatic follow-ups, and automate other tasks in your workflow.

### Formatter <a href="#formatter" id="formatter"></a>

Formatter is Zapier’s built-in utility tool for transforming text, numbers, and other data into the format you need. Use Formatter when you need data in a different format than the format it’s coming in from your trigger or another step.


# Status Errors

A guide to status errors you may encounter when testing integrations.

### 400: Bad Request <a href="#id-400-bad-request" id="id-400-bad-request"></a>

*Client Error*

A 400 error indicates a client error somewhere in the webhook. We recommend checking the following:

* Your Poplar campaign is **Active** and has creative uploaded.
* The variables in your webhook match the values in the user profile.
* The required address\_1, city, state, and postal\_code data is present.
* The user you are testing with has all the data above saved on their profile.
* Double check the JSON syntax is correct and you dont have any extra commas or curly braces.

### 403: Forbidden <a href="#id-403-forbidden" id="id-403-forbidden"></a>

*Client Error*

A 403 error indicates a client error related to Authentication. We recommend checking the following:

* The key to your Authorization header has "Bearer *testorproductiontoken*".
* Your API access token was copy and pasted completely.
  * (Klaviyo Only) If a webhook has been duplicated, make sure you copy and paste your access token directly from Poplar otherwise the hashes ### will be copied over instead of the full access token.
* If you have multiple organizations, make sure you're using the correct corresponding token for the account.
* If you are connecting to an endpoint other than the Mailing API (Audiences, Orders, Do Not Mail, etc.), make sure you are using your Production token. **Only the Mailing API is built to accept the Test token.**

### 429: Too Many Requests <a href="#id-429-too-many-requests" id="id-429-too-many-requests"></a>

*Client Error*

A 429 error indicates too many requests are being sent through at once and a rate limit is being hit - either on the side of your CRM/ESP or on the Poplar end.

To prevent misuse, our API endpoints implement rate limiting. If your application exceeds this limit then a HTTP **429 "Too Many Requests"** response code will be returned.

HTTP headers are returned on all endpoints which contain how many more requests your application is allowed.

If you require a rate limit increase, please reach out to **<support@heypoplar.com>**

### 500: Internal Server Error <a href="#id-500-internal-server-error" id="id-500-internal-server-error"></a>

*Server Error*

A 500 error indicates a server error on the Poplar side, meaning our servers could be down. This is extremely rare, and we recommend double checking all of the points above to be safe. If you're still experiencing a 500, reach out to **<support@heypoplar.com>** for assistance.


# Quick Start

A guide to access Shared Mail campaign information & results in our direct mail platform, Poplar

Poplar is our direct mail platform, and it is now your home for Shared Mail campaign information and results. Instead of waiting for a matchback report to land in your inbox, you can log in any time to see how your Shared Mail campaigns are performing, all in one place.

<figure><img src="/files/sGihiubGdiztnzScDngL" alt=""><figcaption></figcaption></figure>

This guide shows you how to get into your account, where to find your campaigns and results, and how to read your Shared Mail reports. If you have used Poplar before for solo or standard direct mail, a short section near the end explains what reads differently for Shared Mail.

**In this article** we'll walk you through everything you need to see your Shared Mail results in Poplar. There are just three steps:

1. **Set up and access your Poplar account:** get logged in and invite team members.
2. **Get your order data into Poplar:** connect Shopify or upload a file, so we can match your mail to your sales.
3. **View your reporting:** find and read your campaign results.

We'll cover each step below, no technical experience needed. If you ever get stuck, your Account Manager is available for support.

## Account Setup

Sign in to Poplar at [app.heypoplar.com](https://app.heypoplar.com/users/sign_in). If you do not yet have an account, you can create one at [app.heypoplar.com/users/sign\_up](https://app.heypoplar.com/users/sign_up). If you are not sure whether your account is set up, your Account Manager will confirm and get you access.

You can reach your account settings any time using the account icon in the bottom left of the screen. If you work across more than one brand or account, use **Switch Organization** to move between them. This is especially useful for agencies and teams managing multiple accounts.

## Campaigns and Results

{% embed url="<https://drive.google.com/file/d/1qEuoYmae-U1fxTYwfa5H8XdkjQcKmT-b/view?usp=sharing>" %}

The **Campaigns** page is your starting point. At the top you will see your total mailed volume, total spend, and a date filter to view performance by timeframe. You can sort campaigns by in-home date, most recent updates, or budget, and export a CSV for your own records.

{% hint style="info" %}
Shared Mail Campaigns will show in platform starting **\~3 weeks** before their scheduled in-home date
{% endhint %}

<figure><img src="/files/PLm1vHgYe2FtKqbSD73f" alt=""><figcaption></figcaption></figure>

Open any campaign to see its tabs. For Shared Mail, the two you will use most are Overview and Results:

* **Overview:** a summary of the campaign, including mailed counts, spend, and delivery status, with an adjustable date filter.
* **Results:** your attribution reporting, broken down by each creative mailed. This is where you read campaign performance, covered in detail in the next article.

<figure><img src="/files/JVrMSteP4TFndSWDXbVO" alt=""><figcaption></figcaption></figure>

The Creative, One Time Sends, and Suppressions tabs are only visible for self-managed & solo campaigns, so for Shared Mail campaigns you will only see Overview and Results tabs.

## Sharing Order Data

Poplar measures results by matching your mail recipients to the orders that follow. For that to work, your transactional (order) data needs to be shared with the platform. There are three ways to do this, and the right one depends on how your store is set up:

1. **Poplar's Shopify App:** the easiest option if you are on Shopify. Shares order data automatically and on an ongoing basis.
2. **Manual conversion file upload:** upload a CSV of your order data directly in the platform.
3. **Orders API integration:** share order data programmatically through the API. Best handled by a developer on your team.

The two most common options are covered step by step below so you have everything in one place. If you are not sure which applies to you, ask your Account Manager.

### Option 1: Connecting Shopify

{% embed url="<https://drive.google.com/file/d/114Mikn04iQMtHteInrgY66qIo2_RlDmL/view?usp=sharing>" %}

If your store runs on Shopify, the Poplar Shopify App is the simplest way to share order data. Install the [Poplar Shopify App](https://apps.shopify.com/poplar-1) from the Shopify App Store to start sharing order data automatically. It also passes new buyer information, which powers first-time order reporting in your results.

<figure><img src="/files/9cJMk5VdNN49G6YTGWIm" alt="" width="375"><figcaption></figcaption></figure>

To confirm the connection is working, go to **Audiences** in Poplar and click into **Customers (Orders API)**. As orders come in, you should see customer shipping and billing addresses begin to populate, and the Transactions page will start to fill in as well.

{% hint style="info" %}
**Backfilling past orders:** If you connect Shopify after your campaign has already reached homes, the app only shares orders going forward. To capture earlier orders, export them from Shopify and upload them as a conversion file (Option 2). When exporting, filter to delivery method **ship to customer**; payment status **authorized, paid, or partially paid**; and a date range from your first campaign launch through today.
{% endhint %}

### Option 2: Uploading a CSV

{% embed url="<https://drive.google.com/file/d/1P7zafklc_A0XwvmV8h1dFYL0jBx8_gCl/view?usp=sharing>" %}

If you are not on Shopify, or you need to backfill past orders, you can upload a CSV of your order data. We recommend waiting 30 to 90 days after a campaign's in-home date before relying on the numbers, so the full picture has time to come through.

At a minimum, your file needs these columns:

| Column         | What it is                                                                                                                                                                                                                   |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `order_id`     | A unique identifier for each order. **Required.**                                                                                                                                                                            |
| `order_date`   | The purchase date in YYYY-MM-DD (ISO 8601) format. **Required.**                                                                                                                                                             |
| `order_amount` | Total order value in decimal form, for example 49.00. Required to calculate revenue, CPO, ROAS, and related metrics.                                                                                                         |
| Address fields | A full shipping address and billing address are both ideal. At a minimum, one complete address (name, address 1 and 2, city, state, postal code) is required so the order can be matched. Sending both improves match rates. |
| `email`        | Optional. Used to match campaigns that mailed using Address Enrichment. Not stored; it is hashed and then discarded.                                                                                                         |
| `metadata`     | Optional. Extra order detail, such as a New Buyer tag for first-time order reporting.                                                                                                                                        |

Once your columns are named and formatted correctly, go to the **Transactions** page in Poplar, click **Upload Transactional Data**, choose your CSV, and map the headers when prompted. You can upload more than once without creating duplicates; the platform dedupes by `order_id` and updates any changed orders. The maximum file size is 20MB, so split large files and upload them separately.

<figure><img src="/files/I2UOyxen1mYXELRZFTmT" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Exporting from Shopify for a backfill:** Export a Plain CSV from Shopify, then rename the columns to match Poplar's fields, for example Name becomes `order_id`, Created at becomes `order_date`, and Total becomes `order_amount`. Shopify lists each item in an order on its own row but only puts the order total on one row, so blank rows in the total column are expected and will not skew your results.&#x20;
{% endhint %}

{% hint style="warning" %}
**Important:** If order data is not shared using one of these methods, Poplar cannot calculate attribution metrics. Your Account Manager can help confirm which method is set up for your account.&#x20;
{% endhint %}


# Reporting

Poplar uses a last-touch attribution model. Once your order data is shared, the platform matches mail recipients to the orders that follow and credits each order to the most recent mail piece that recipient received within the attribution window. This order matching is how your Shared Mail impact is measured, and it replaces the manual matchback file you may have received in the past.

Reports update on roughly a 24 hour delay as data flows in. If a setting such as the attribution window changes after a campaign is live, the report takes some time to refresh.

<figure><img src="/files/ypi2usYKdEBQ6UJqEDwu" alt=""><figcaption></figcaption></figure>

### The Attribution Window

The attribution window is the length of time after a mailing lands in home during which an order can be credited to the campaign. Poplar uses a 90-day window by default, which is the direct mail industry standard, with a minimum of 30 days recommended.

As a rule of thumb, roughly 60% to 70% of orders happen in the first 30 days, 20 to 30 percent in the next 30 days, and around 10% in the final 30 days. Results may begin to populate before the window closes, but because those numbers are incomplete, it is best to wait until the window has fully passed before judging performance. To adjust your attribution window, contact your Account Manager.

<figure><img src="/files/OtLQYGTiVGrSqMXFAyHM" alt=""><figcaption></figcaption></figure>

### In-home Dates & The Reporting Window

In-home dates are based on when the first mailing of a creative is delivered. The reporting window is separate from the attribution window: it lets you choose a date range to view mailings that were in home during that period, while the matchback always includes all available transaction data.

## Reading the Results Tab

Open a campaign and select **Results**. If your order data is being shared, this page shows a detailed attribution analysis broken down by each audience and creative mailed. You can hover over the information icon next to a metric to see its description. Use the **Matchback View** to switch the dashboard to first-time orders.

<figure><img src="/files/0nV60LFKwijQNaYHe6Es" alt="" width="375"><figcaption></figcaption></figure>

You can download a record of raw matches at both the campaign and account level. Because reporting follows a last-touch model across campaigns, the matched mail piece may not always be the last one a customer received. The `order_id` column lets you trace any attribution back to a specific order. For Shared Mail campaigns, the raw match file also includes an envelope type field, which identifies the shared envelope your offer was mailed in.

### Metrics Glossary

These are the core attributed metrics in your Shared Mail Results reporting:

| Metric            | What it means                                                                                               |
| ----------------- | ----------------------------------------------------------------------------------------------------------- |
| **Mailed**        | The number of mailings sent. Excludes suppressions, exceptions, and holdouts.                               |
| **Spend**         | The total billable for the mailings sent. Reported as part of the mailed group.                             |
| **Orders**        | The total number of orders attributed to the campaign or mailing.                                           |
| **Revenue**       | Total revenue from orders attributed to the campaign or mailing.                                            |
| **AOV**           | Average Order Value - The average value of all orders attributed to the campaign or mailing.                |
| **CPO**           | Cost Per Order - Total spend divided by number of orders.                                                   |
| **ROAS**          | Return on Ad Spend - Revenue from attributed orders divided by spend                                        |
| **Response Rate** | The percentage of mailings in the reporting window that resulted in an order within the attribution window. |

First-time order metrics are available through the separate **Matchback View** described above.

{% hint style="info" %}
**A note on delivery scans:** Mailing status comes directly from USPS. Because of how USPS collects scan data, a small percentage of mailers may never receive a delivery scan. This is normal, and Poplar still assumes successful delivery.
{% endhint %}

## What's Different for Shared Mail

If you have used standalone/batched direct mail, the way you read results is largely the same. A few things read differently for Shared Mail, summarized below and explained underneath.

<table><thead><tr><th width="229.72265625">Topic</th><th>Stand Alone/Batched</th><th>Shared Mail</th></tr></thead><tbody><tr><td>Your mail piece</td><td>Your own dedicated mail piece</td><td>Your offer shares an envelope with other advertisers; reports label the campaign type as Shared and include an envelope type</td></tr><tr><td>Where results come from</td><td>Viewed in the platform</td><td>Now viewed in the platform, replacing the matchback report you received by email or spreadsheet</td></tr><tr><td>Order matching</td><td>Last-touch order matching</td><td>Same last-touch order matching</td></tr><tr><td>Holdouts and lift</td><td>Optional holdout to measure incremental lift</td><td>Reporting centers on attributed results; lift metrics appear only when a holdout is in place</td></tr></tbody></table>

*Standalone/batched results appear in Poplar only once you include your own order data; last-touch matching applies after that data is added. Your Shared Mail results, by contrast, are already in Poplar for you to view.*

### Your Offer Shares an Envelope

Shared Mail means your offer is mailed alongside other advertisers in a shared envelope, rather than in your own dedicated piece. In your raw match download, the campaign type shows as Shared and an envelope type field identifies which shared envelope your offer was part of. This does not change how your orders, revenue, or ROAS are calculated. It is simply additional context about how the mail went out.

### From Matchback Emails to In-platform Results

Previously, your Shared Mail results were delivered as a matchback report, often by email or spreadsheet, and walked through with your Account Manager. Those same numbers now live in Poplar, so you can log in and read them whenever you want. Your Account Manager is still there to talk through the results with you, but you no longer have to wait for a file to be sent over.

### Holdouts, Incremental Lift & Projections

The core metrics you read for Shared Mail, including conversions, revenue, ROAS, CPO, and response rate, are calculated the same way as for any Poplar campaign. The difference is in incremental measurement. Incremental lift metrics, such as Orders Lift and Incremental ROAS, depend on a holdout group, and they appear in a report only when a holdout was in place. Shared Mail reporting focuses on attributed results, and incrementality projections are not provided for Shared Mail campaigns.&#x20;

<figure><img src="/files/LHOLZxtrwm9MBxHThjLM" alt=""><figcaption></figcaption></figure>

It can be challenging to accurately project holdout orders/final incremental results, as these results can change due to external factors that do not have anything to do with the mailing itself (i.e. increase in marketing on other channels, emails, sales, etc.). Given this, SLM recommends partners to look at projected pure results and incremental results at the time of the analysis. If you have questions about lift or holdouts for your account, your Account Manager can walk through what applies to you.

## Support

Your Account Manager is your first point of contact for questions about your Shared Mail campaigns, results, or account settings. For general platform support you can also reach the Poplar team by email.

* **Account questions and results review:** your dedicated Account Manager
* **Platform support:** <support@heypoplar.com>


# Authentication

To access the Poplar API you'll need to use either a **Test** or **Production** Access Token. These can be found and generated on the [**API**](https://app.heypoplar.com/credentials) page of your account:

<div><figure><img src="/files/4JluD8NVjrw57c7xAwJf" alt="" width="123"><figcaption></figcaption></figure> <figure><img src="/files/1yLX96XzzAQpzNq9ouUx" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="danger" %}
**Never give your Access Token to a third party**

Your Access Token can give access to your private Poplar data and should be treated like a password. If you believe your Access Token has been compromised then it can be **Revoked.**
{% endhint %}

## How to use your Access Token

To use your Token, simply provide it as part of the authorization header when you make a request. Tokens use the bearer authorization header when you make a request.

```bash
curl \ 
-s https://api.heypoplar.com/v1/me \ 
-H 'Authorization: Bearer <access token>' \
-H 'Accept: application/json'
```

If you are using any of our client SDK's then this process is automated during initialization. This means that you do not need to specify this header explicitly.

### Testing

When creating a new access token, you have the option to create a *production* or *test* access token.&#x20;

{% hint style="warning" %}
Test tokens **ONLY** work for the **mailings** endpoin&#x74;**.** To test other endpoints use a production token.
{% endhint %}

Test access tokens are intended to support the testing of API integrations and can be identified by the `test` prefix. When using a test token, mailings will be generated in your account however they will not be mailed.&#x20;

From your campaigns **History** section, you can easily filter between test and production mailings:

<figure><img src="/files/wrlpbqIfUJ8vV6l3klHg" alt=""><figcaption></figcaption></figure>


# HTTP Errors

Our APIs use HTTP response codes to indicate the success or failure of an API request.

## Status Codes

| Code    | Type           | Description           |
| ------- | -------------- | --------------------- |
| **200** | `Success`      | OK                    |
| **201** | `Success`      | Created               |
| **204** | `Success`      | No Content            |
| **304** | `Redirection`  | Not Modified          |
| **400** | `Client Error` | Bad Request           |
| **401** | `Client Error` | Unauthorized          |
| **403** | `Client Error` | Forbidden             |
| **404** | `Client Error` | Not Found             |
| **409** | `Client Error` | Conflict              |
| **429** | `Client Error` | Too Many Requests     |
| **500** | `Server Error` | Internal Server Error |

In the case of an error code, the response body will indicate further details to help troubleshoot the error.

```json
{
    "error": {
        "title": "ValidationError",
        "message": "campaign_id parameter is required" 
    }
}
```

## Rate Limiting

To prevent misuse, our API endpoints implement rate limiting.  If your application exceeds this limit then a HTTP **429 "Too Many Requests"** response code will be returned.

HTTP headers are returned on all endpoints which contain how many more requests your application is allowed.

| Header                   | Description                             |
| ------------------------ | --------------------------------------- |
| `x-rate-limit-limit`     | The rate limit for a given endpoint     |
| `x-rate-limit-remaining` | The number of requests remaining        |
| `x-rate-limit-reset`     | The time at which the rate limit resets |

{% hint style="info" %}
If you require a rate limit increase, please reach out to **<support@heypoplar.com>**
{% endhint %}


# Mailing

Poplar Mailing endpoints enable you to easily target individual customers with timely 1-1 event driven mailings. Each API request you make is associated with a recipient, campaign & creative.

## Create Mailer

<mark style="color:green;">`POST`</mark> `https://api.heypoplar.com/v1/mailing`

`https://api.heypoplar.com/v1/mailing`

This endpoint allows you to trigger a mailer for a given campaign. Mailings can only be triggered for active campaigns containing creative artwork. The API will return an error if the campaign is not active, or if creative has not been uploaded.<br>

#### Headers

| Name                                            | Type   | Description                                                       |
| ----------------------------------------------- | ------ | ----------------------------------------------------------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Bearer <mark style="color:blue;">\<Test/Prod Access Token></mark> |
| Content-Type<mark style="color:red;">\*</mark>  | string | application/json                                                  |

#### Request Body

| Name                                           | Type   | Description                                                                                                                                                                                                                                                    |
| ---------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| campaign\_id<mark style="color:red;">\*</mark> | string | An ID corresponding to a campaign.                                                                                                                                                                                                                             |
| creative\_id                                   | string | <p>An ID corresponding to the creative to use for the mailing. <br><br><em>If not provided, the default creative will launch. If no default is set, the platform will randomly alternate between all active creatives under the campaign to A/B test.</em></p> |
| merge\_tags                                    | object | An object containing a custom set of key/value pairs that map to any custom merge tags used in dynamic HTML creative                                                                                                                                           |
| send\_at                                       | string | <p>An ISO8601 formatted date indicating when the mailing should be sent. This must be a future date.<br><br>If a date is not provided, the mailing will be triggered immediately. </p>                                                                         |
| recipient<mark style="color:red;">\*</mark>    | object | An object containing the mailing address and/or email of the recipient *(see example below)*                                                                                                                                                                   |

{% tabs %}
{% tab title="201: Created Mailer has successfully been created" %}

```json
{
    "id": "xxxxx-xxxxx-xxxxx-xxxxx",
    "campaign_id": "xxxxx-xxxxx-xxxxx-xxxxx",
    "creative_id": "xxxxx-xxxxx-xxxxx-xxxxx",
    "merge_tags": null,
    "state": "processing",
    "front_url": "https://app.heypoplar.com/preview/xxxxx-xxxxx-xxxxx-xxxxx",
    "back_url": "https://app.heypoplar.com/preview/xxxxx-xxxxx-xxxxx-xxxxx",
    "pdf_url": "https://app.heypoplar.com/preview/xxxxx-xxxxx-xxxxx-xxxxx",
    "total_cost": "0.00",
    "address": null,
    "send_at": null,
    "created_at": "YYYY-MM-DDThh:mm:ssZ"
}
```

{% endtab %}

{% tab title="400: Bad Request Incorrect values are being passed in the body" %}

```javascript
{
    "error": {
        "name": "ValidationError",
        "message": "recipient[postal_code] must 3 or more characters long"
    }
}
```

{% endtab %}

{% tab title="403: Forbidden Incorrect or missing auth hearers" %}

```javascript
{
    "error": "Unauthorized"
}
```

{% endtab %}
{% endtabs %}

### Recipient Object

When creating a mailing you are required to provide a `recipient` object. A custom **Data Guide** can be found at the bottom of each creative's page:

<figure><img src="/files/nanZFv8j3Tm0nK1YHZ2i" alt=""><figcaption></figcaption></figure>

This should include the keys listed below. If you are unable to provide mailing addresses, we offer the ability to append an address based on email address. This must be enabled for your account and in your campaign settings. Including additional fields will *not* increase the match rate. If we are not able to find a match, you will not be billed.

| Key                                                                                                  | Value Type | Desc.                                                                                              |
| ---------------------------------------------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------- |
| <p><code>full\_name</code><br><em>or</em><br><code>first\_name</code><br><code>last\_name</code></p> | string     | <p>Optional<br><br><em>If not provided, "Current Resident" will appear on address block</em></p>   |
| `company`                                                                                            | string     | Optional                                                                                           |
| `email`                                                                                              | string     | Optional                                                                                           |
| `address_1`                                                                                          | string     | Required                                                                                           |
| `address_2`                                                                                          | string     | <p>Optional<br><br><em>Apt/Suite/Unit number can be included with address\_1 if necessary</em></p> |
| `city`                                                                                               | string     | Required                                                                                           |
| `state`                                                                                              | string     | Required                                                                                           |
| `postal_code`                                                                                        | string     | Required                                                                                           |
| `identifier`                                                                                         | string     | <p>Optional<br><br><em>A unique identifier used for tracking purposes</em> </p>                    |

## Fetch Mailing

<mark style="color:blue;">`GET`</mark> `https://api.heypoplar.com/v1/mailing/:id`

`https://api.heypoplar.com/v1/mailing/:id`

This endpoint allows you to query the status of a triggered mailing.&#x20;

#### Path Parameters

| Name                                          | Type   | Description        |
| --------------------------------------------- | ------ | ------------------ |
| mailing\_id<mark style="color:red;">\*</mark> | string | ID of the mailing. |

#### Headers

| Name                                            | Type   | Description                                                          |
| ----------------------------------------------- | ------ | -------------------------------------------------------------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Bearer *<mark style="color:blue;">\<Production Access Token></mark>* |

{% tabs %}
{% tab title="200: OK Returns mailer details" %}

```json
{
    "id": "xxxxx-xxxxx-xxxxx-xxxxx",
    "campaign_id": "xxxxx-xxxxx-xxxxx-xxxxx",
    "creative_id": "xxxxx-xxxxx-xxxxx-xxxxx",
    "merge_tags": null,
    "state": "production",
    "front_url": "https://app.heypoplar.com/preview/xxxxx-xxxxx-xxxxx-xxxxx",
    "back_url": "https://app.heypoplar.com/preview/xxxxx-xxxxx-xxxxx-xxxxx",
    "pdf_url": "https://app.heypoplar.com/preview/xxxxx-xxxxx-xxxxx-xxxxx",
    "total_cost": "0.00",
    "address": {
        "name": "Jim Halpert",
        "company": null,
        "address_1": "13831 Calvert St",
        "address_2": "# 1A",
        "city": "Van Nuys",
        "state_name": "CA",
        "postal_code": "91401"
    },
    "send_at": null,
    "created_at": "YYYY-MM-DDThh:mm:ssZ"
}
```

{% endtab %}

{% tab title="404: Not Found mailing\_id is incorrect or does not exist" %}

```json
{
    "error": {
        "name": "NotFound",
        "message": "Mailing not found"
    }
}
```

{% endtab %}

{% tab title="403: Forbidden Incorrect or missing auth header" %}

```javascript
{
    "error": "Unauthorized"
}
```

{% endtab %}
{% endtabs %}

### Creative Previews

When you create or fetch a mailing, the response will include URLs linking to the image and PDF previews. After initial creation of the mailing, you can access the images or PDFs directly through the URLs. Authentication is not required, but URLs expire 30 days after creation.&#x20;

{% hint style="warning" %}
URLs may be available before the images are available. If that is the case, you will get **202: Accepted** when you attempt to access the image. The 'Retry After' HTTP header will indicate when you should retry fetching.

If a mailing is invalid, suppressed, part of a holdout, etc. you will always get a 202, because a preview is not generated.

Image and PDF previews may not be available at the same time.
{% endhint %}

All preview images are 600px wide PNG files with variable height (based on the creative format used).&#x20;

| Mailer Format | Front Image           | Back Image | PDF |
| ------------- | --------------------- | ---------- | --- |
| Postcard      | Yes                   | Yes        | Yes |
| Letter        | Yes (first page only) | No         | Yes |


# US Address Standardization

## Overview

{% hint style="warning" %}
Our other endpoints ex: Mailing, automatically standardize your address data upon ingestion, utilizing the US Address Standardization API is a separately provided service if you want to standardize and retain the cleaned data internally.

One other key difference to note the Address Standardization API also leverages address.\* instead of api.\* for all the API calls.&#x20;
{% endhint %}

The US Address Standardization API allows you to standardize single or multiple addresses. It provides two main endpoints for address standardization.

## Endpoints

### 1. Standardize a Single Address

* **URL**: `address.heypoplar.com/v1/standardize`
* **Method**: GET
* **Description**: Standardizes a single address.
* **Query Parameters**: Address details (see Input Format section)

### 2. Standardize Multiple Addresses

* **URL**: `address.heypoplar.com/v1/standardize`
* **Method**: POST
* **Description**: Standardizes multiple addresses in a single request.
* **Request Body**: JSON array of address objects (see Input Format section)

## Input Format

You can provide address information in one of the following formats:

1. Full address string
2. Address line 1 + City/State/ZIP
3. Address line 1 + ZIP Code
4. Address line 1 + City + State

### Input Fields

| Field           | Type   | Description                                                                                                                       |
| --------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------- |
| `full_address`  | string | Full input address, used as an alternative to providing individual address components.                                            |
| `address_line1` | string | First line of the street address (e.g., house number and street name).                                                            |
| `address_line2` | string | Second line of the street address (e.g., apartment or suite number). Optional in all combinations.                                |
| `city`          | string | City name. When used without state and zip\_code, this should contain the entire last line of the address (City, State ZIP Code). |
| `state`         | string | State abbreviation (e.g., "CA" for California).                                                                                   |
| `zip_code`      | string | ZIP Code (5-digit or ZIP+4).                                                                                                      |

### Important Note on the 'city' Field

When using the "Address line 1 + City/State/ZIP" format, the `city` field should contain the entire last line of the address, including the city name, state, and ZIP code. For example:

```json
{
  "address_line1": "123 Main St",
  "city": "San Francisco, CA 94105"
}
```

This format allows for more flexible input, especially when the full address is available but not parsed into separate components.

**Response Examples**

{% tabs %}
{% tab title="200" %}

```json
[
    {
        "query_index": 0,
        "address_line1": "123 MAIN ST",
        "city": "SAN FRANCISCO",
        "state": "CA",
        "zip_code": "94105",
        "address_components": {
            "del_point": "233",
            "post_office_city": "SAN FRANCISCO",
            "primary_name": "MAIN",
            "primary_num": "123",
            "suffix": "ST",
            "zip_addon": "1804"
        },
        "usps_analysis": {
            "ame_footnotes": "N#V#",
            "dpv_cmra": "N",
            "dpv_footnotes": "AABB",
            "dpv_no_stat": "Y",
            "dpv_return_code": "Y",
            "dpv_vacant": "N"
        },
        "metadata": {
            "carrier_rte": "C010",
            "cong_district": "11",
            "county_name": "SAN FRANCISCO",
            "county_num": "075",
            "elot_code": "D",
            "elot_num": "0270",
            "latitude": 37.79157,
            "longitude": -122.3946,
            "precision": "Street",
            "rdi": "Residential",
            "record_type": "S",
            "zip_class_code": "Standard"
        }
    }
]
```

{% endtab %}

{% tab title="400" %}

```json
{
    "error": {
        "status": 400
    }
}
```

{% endtab %}
{% endtabs %}

## Output Format

The API returns a JSON array of standardized address results. Each result includes standardized address components, USPS analysis information, and additional metadata.

### Output Fields

#### Main Result Fields

| Field           | Type    | Description                                                                |
| --------------- | ------- | -------------------------------------------------------------------------- |
| `query_index`   | integer | Index of the query for batch processing.                                   |
| `address_line1` | string  | Standardized first line of the street address.                             |
| `address_line2` | string  | Standardized second line of the street address (e.g., apartment or suite). |
| `city`          | string  | Standardized city name.                                                    |
| `state`         | string  | Standardized state abbreviation.                                           |
| `zip_code`      | string  | Standardized ZIP Code (5-digit or ZIP+4).                                  |

#### Address Components

| Field              | Type   | Description                                         |
| ------------------ | ------ | --------------------------------------------------- |
| `del_point`        | string | Delivery point code (last 2 digits of the ZIP+4).   |
| `pmb_des`          | string | Private Mailbox (PMB) designator.                   |
| `pmb_num`          | string | Private Mailbox (PMB) number.                       |
| `post_dir`         | string | Post-directional suffix (e.g., "NW" for northwest). |
| `post_office_city` | string | City name of the Post Office.                       |
| `pre_dir`          | string | Pre-directional prefix (e.g., "N" for north).       |
| `primary_name`     | string | Primary street name.                                |
| `primary_num`      | string | Primary number (house or building number).          |
| `secndry_num`      | string | Secondary address number (e.g., apartment number).  |
| `secndry_num2`     | string | Second secondary number if applicable.              |
| `suffix`           | string | Street suffix (e.g., "St", "Ave").                  |
| `unit_des`         | string | Unit designator (e.g., "Apt" for apartment).        |
| `unit_des2`        | string | Second unit designator if applicable.               |
| `zip_addon`        | string | ZIP+4 add-on code (last 4 digits of the ZIP Code).  |

#### USPS Analysis

| Field             | Type   | Description                                                                                |
| ----------------- | ------ | ------------------------------------------------------------------------------------------ |
| `ame_footnotes`   | string | Address Matching Engine footnotes indicating specific address issues.                      |
| `dpv_cmra`        | string | DPV® footnote indicating whether the address is a Commercial Mail Receiving Agency (CMRA). |
| `dpv_footnotes`   | string | DPV® footnotes, providing information on address validation results.                       |
| `dpv_no_stat`     | string | Indicates if the address is a "No-Stat" (an address that does not receive mail).           |
| `dpv_return_code` | string | Standard DPV® return code showing validation results.                                      |
| `dpv_vacant`      | string | Indicates if the address is marked as vacant.                                              |
| `llk_ind`         | string | LACSLink® indicator, showing if the address has been converted.                            |
| `llk_return_code` | string | LACSLink® return code providing more details on the address conversion.                    |
| `slk_footnotes`   | string | SuiteLink footnotes showing additional address processing details.                         |

#### Metadata

| Field            | Type   | Description                                                                             |
| ---------------- | ------ | --------------------------------------------------------------------------------------- |
| `carrier_rte`    | string | Carrier route code used by USPS for delivery.                                           |
| `cong_district`  | string | Congressional district for the address.                                                 |
| `county_name`    | string | Name of the county for the address.                                                     |
| `county_num`     | string | County number.                                                                          |
| `default_flag`   | string | Indicates if the address is a default record.                                           |
| `elot_code`      | string | Enhanced Line-of-Travel (eLOT®) code.                                                   |
| `elot_num`       | string | eLOT® number.                                                                           |
| `latitude`       | number | Latitude of the address.                                                                |
| `longitude`      | number | Longitude of the address.                                                               |
| `precision`      | string | Precision of the geocoding.                                                             |
| `rdi`            | string | Residential Delivery Indicator, indicating if the address is residential or commercial. |
| `record_type`    | string | Type of address record (e.g., Firm, PO Box, Street).                                    |
| `zip_class_code` | string | ZIP classification code indicating the type of ZIP (e.g., Unique, PO Box only).         |

## Error Responses

The API may return the following error responses:

* 400: Bad Request
* 413: Payload Too Large
* 422: Unprocessable Entity
* 500: Internal Server Error
* 503: Service Unavailable

Each error response includes an error message in the response body.

## Usage Notes

* For batch processing, use the POST method to standardize multiple addresses efficiently.
* The API provides detailed USPS® analysis, including DPV® and LACSLink®  results.
* Geocoding information is included when available.


# US Standardization Output Key

General notes on our output:

We provide address\_line1 that is a combination of primary and secondary address as per USPS guidelines. If you would prefer primary & secondary to be split out you can reconstitute it based on the address components.

### DPV Return Codes&#x20;

Potential outputs:&#x20;

Y Address was DPV confirmed for primary and secondary numbers necessary to determine a valid delivery point.&#x20;

D Address was DPV confirmed for the primary number only. Secondary information was missing.&#x20;

S Address was DPV confirmed for the primary number only, the secondary number information was present but not confirmed or a single trailing alpha on a primary number was dropped to make a DPV match and secondary information required.&#x20;

N Primary number failed to DPV confirm.&#x20;

R Address confirmed but assigned to phantom route R777 and R779 and USPS delivery is not provided. Blank Address not presented to DPV.

### DPV Footnotes:&#x20;

DPV Footnotes present potential address issues. They can be a combo of multiple 2 digit codes.

Example: “AABB” (combined entry with AA & BB)

Potential outputs:&#x20;

AA Input address matched to the ZIP + 4 product A1 Input address not matched to the ZIP + 4 product BB Input address matched to DPV to both primary and secondary numbers necessary to determine a valid delivery point&#x20;

CC Input address primary number matched, secondary number not matched; secondary number not required&#x20;

C1 Input address primary number matched, secondary number not matched; secondary number required F1 Input address matched to a military address&#x20;

G1 Input address matched to a general delivery address IA Informed address identified&#x20;

N1 Input address primary number matched to DPV but address missing required secondary number&#x20;

M1 Input address primary number missing&#x20;

M3 Input address primary number invalid&#x20;

PB Identified PO Box Street Address&#x20;

P1 Input address PO, RR, or HC box number missing&#x20;

P3 Input address PO, RR, or HC box number invalid&#x20;

RR Input address matched to CMRA but PMB designator present (PMB 123 or # 123)&#x20;

R1 Input address matched to CMRA but PMB designator not present (PMB 123 or # 123)&#x20;

R7 Addresses that are assigned to a phantom route of R777 or R779&#x20;

TA Input address primary number matched by dropping trailing alpha&#x20;

U1 Input address matched to a unique ZIP Code

### DPV Error Codes&#x20;

Potential outputs: DB Business DC CMRA DD Drop DE Educational DF False Positive DK Drop Count DL LACS DN NoStat DO Confirmation DP PBSA DS Seasonal DT Delivery Type DV Vacant DW Throwback FT Footnote Code SL No Secure Location (NSL) ND Non-Delivery Days (NDD) NA Door Not Accessible (DNA)

### DPV\_CMRA&#x20;

Potential Values: Y/N CMRA Stands for: Commercial Mailing Receiving Agency.

### DPV No Stat&#x20;

Potential outputs: Y/N/Blank Yes means Addresses have been provisioned but not deliverable yet, i.e. new development. Addresses to this address are getting delivered to a new drop site.

### DPV Vacant&#x20;

Potential options: Y/N/Blank based on USPS having a record of an address being vacant or not.

Y = Address was found in the table&#x20;

N = Address was not found in the table&#x20;

Blank = Address was not presented to hash table

### Carrier Route:&#x20;

Example: "carrier\_rte": "C010",

### Congressional District&#x20;

Example: "cong\_district": "11"

### County Name:&#x20;

Example: "county\_name": "SAN FRANCISCO"

### County Number:&#x20;

Example: "county\_num": "075"

### eLOT® Code:&#x20;

Example: "elot\_code": "D" Enhanced Line of Travel (eLOT®) Potential outputs: A/D (Descending or Ascending)

### eLOT® Number:&#x20;

Example: "elot\_num": "0270"&#x20;

Enhanced Line of Travel (eLOT®) Used to sort mail by delivery sequence

### Latitude & Longitude:&#x20;

Example:&#x20;

"latitude": 37.79157,&#x20;

"longitude": -122.3946,&#x20;

"precision": "Street",

Precision output provides the level of accuracy of our response, i.e. based on the street address or zip level. For most addresses we can provide highly accurate rooftop/street level accuracy (when returning "Street"). In rare instances we may return "Unknown". &#x20;

### RDI™ Example:&#x20;

"rdi": "Residential", Potential Outputs: : Residential/Commercial/Blank

### Record Type

Example Output: "record\_type": "S",

Potential outputs:

F - FIRM This is a match to a Firm Record, which is the finest level of match available for an address.&#x20;

G - GENERAL DELIVERY This is a match to a General Delivery record.&#x20;

H - BUILDING / APARTMENT This is a match to a Building or Apartment record.&#x20;

P - POST OFFICE BOX This is a match to a Post Office Box.&#x20;

R - RURAL ROUTE or HIGHWAY CONTRACT This is a match to either a Rural Route or a Highway Contract record, both of which may have associated Box Number ranges.&#x20;

S - STREET RECORD This is a match to a Street record containing a valid primary number range.

### Zip Class Code:&#x20;

Example: "zip\_class\_code": "Standard"

Potential outputs:&#x20;

“Standard” - \[blank] - Non-unique ZIP Code

“Military” - 'M' - APO/FPO military ZIP Code

“POBox” - 'P' - PO Box ZIP Code

“Unique” - 'U' - Unique ZIP Code

<br>

### AME Footnotes:

A# ZIP CODE CORRECTED&#x20;

The address was found to have a different 5-digit ZIP Code than given in the submitted list. The correct ZIP Code is shown in the output address.&#x20;

B# CITY / STATE SPELLING CORRECTED&#x20;

The spelling of the city name and/or state abbreviation in the submitted address was found to be different than the standard spelling. The standard spelling of the city name and state abbreviation are shown in the output address.&#x20;

C# INVALID CITY / STATE / ZIP&#x20;

The ZIP Code in the submitted address could not be found because neither a valid city, state, nor valid 5- digit ZIP Code was present. It is also recommended that the requestor check the submitted address for accuracy.&#x20;

D# NO ZIP+4 ASSIGNED&#x20;

This is a record listed by the United States Postal Service on the national ZIP+4 file as a non-deliverable location. It is recommended that the requestor verify the accuracy of the submitted address.&#x20;

E# ZIP CODE ASSIGNED FOR MULTIPLE RESPONSE

Multiple records were returned, but each shares the same 5-digit ZIP Code.&#x20;

F# ADDRESS COULD NOT BE FOUND IN THE NATIONAL DIRECTORY FILE DATABASE

The address, exactly as submitted, could not be found in the city, state, or ZIP Code provided. It is also recommended that the requestor check the submitted address for accuracy. For example, the street address line may be abbreviated excessively and may not be fully recognizable.&#x20;

G# INFORMATION IN FIRM LINE USED FOR MATCHING&#x20;

Information in the firm line was determined to be a part of the address. It was moved out of the firm line and incorporated into the address line.&#x20;

H# MISSING SECONDARY NUMBER ZIP+4 information indicates this address is a building. The address as submitted does not contain an apartment/suite number. It is recommended that the requestor check the submitted address and add the missing apartment or suite number to ensure the correct Delivery Point Barcode (DPBC).&#x20;

I# INSUFFICIENT / INCORRECT ADDRESS DATA&#x20;

More than one ZIP+4 Code was found to satisfy the address as submitted. The submitted address did not contain sufficiently complete or correct data to determine a single ZIP+4 Code. It is recommended that the requestor check the address for accuracy and completeness. For example, firm name, or institution name, doctor’s name, suite number, apartment number, box number, floor number, etc. may be missing or incorrect. Also pre-directional or post-directional indicators (North = N, South = S, East = E, West = W, etc.) and/or street suffixes (Street = ST, Avenue = AVE, Road = RD, Circle = CIR, etc.) may be missing or incorrect.

J# DUAL ADDRESS&#x20;

The input contained two addresses. For example: 123 MAIN ST PO BOX 99.&#x20;

K# MULTIPLE RESPONSE DUE TO CARDINAL RULE&#x20;

CASS rule does not allow a match when the cardinal point of a directional changes more than 90%.&#x20;

L# ADDRESS COMPONENT CHANGED&#x20;

An address component (i.e., directional or suffix only) was added, changed, or deleted in order to achieve a match.&#x20;

LI# MATCH HAS LACS INDICATOR PRESENT ON RECORD&#x20;

The input address matched to a record that was LACS indicated and submitted to LACSLink® for processing.&#x20;

M# STREET NAME CHANGED&#x20;

The spelling of the street name was changed in order to achieve a match.&#x20;

N# ADDRESS STANDARDIZED

The delivery address was standardized. For example, if STREET was in the delivery address, the system will return ST as its standard spelling.&#x20;

O# LOWEST +4 TIE-BREAKER&#x20;

More than one ZIP+4 Code was found to satisfy the address as submitted. The lowest ZIP +4 addon may be used to break the tie between the records.&#x20;

P# BETTER ADDRESS EXISTS

The delivery address is matchable but is known by another (preferred) name. For example, in New York, NY, AVENUE OF THE AMERICAS is also known as 6TH AVE. An inquiry using a delivery address of 55 AVE OF THE AMERICAS would be flagged with a Footnote Flag P.&#x20;

Q# UNIQUE ZIP CODE MATCH&#x20;

Match to an address with a unique ZIP Code.&#x20;

R# NO MATCH DUE TO EWS

The delivery address is matchable, but the EWS file indicates that an exact match will be available soon.&#x20;

S# INCORRECT SECONDARY ADDRESS

The secondary information (i.e., floor, suite, apartment, or box number) does not match that on the national ZIP+4 file. This secondary information, although present on the input address, was not valid in the range found on the national ZIP+4 file.&#x20;

T# MULTIPLE RESPONSE DUE TO MAGNET STREET SYNDROME

The search resulted in a single response; however, the record matched was flagged as having magnet street syndrome. “Whenever an input address has a single suffix word or a single directional word as the street name, or whenever the ZIP+4 File records being matched to have a single suffix word or a single directional word as the street name field, an exact match between the street, suffix and/or post- directional and the same components on the ZIP+4 File must occur before a match can be made. Adding, changing or deleting a component from the input address to obtain a match to a ZIP+4 record will be considered incorrect.” Instead of returning a “no match” in this situation a multiple response is returned to allow access the candidate record.&#x20;

U# UNOFFICIAL POST OFFICE NAME&#x20;

The city or post office name in the submitted address is not recognized by the United States Postal Service as an official last line name (preferred city name) and is not acceptable as an alternate name. This does denote an error and the preferred city name will be provided as output.&#x20;

V# UNVERIFIABLE CITY / STATE

The city and state in the submitted address could not be verified as corresponding to the given 5-digit ZIP Code. This comment does not necessarily denote an error; however, it is recommended that the requestor check the city and state in the submitted address for accuracy.&#x20;

W# NO MATCH DUE TO OUT-OF-RANGE ALIAS

A match was made to an alias street but the primary number wasn’t in the range of an alias. This is done to avoid matching to other streets when an exact match would normally have been made to an alias but the primary number presented was not in the range for which the alias was defined.&#x20;

X# UNIQUE ZIP CODE DEFAULT&#x20;

No match was found in the ZIP + 4 file, but a “fake” match was applied in the unique ZIP Code.&#x20;

Y# MILITARY MATCH

Match made to a record with a military ZIP Code.&#x20;

Z# MATCH MADE USING THE ZIPMOVE PRODUCT DATA

The ZIPMOVE product shows which ZIP + 4 records have moved from one ZIP Code to another. If an input address matches to a ZIP + 4 record which the ZIPMOVE product indicates as having moved, the search is performed again in the new ZIP Code.


# Orders

Orders endpoints may be used to report customer transactions as they happen. These are used within Poplar for attribution reporting and to enable existing customers to be easily suppressed within your campaigns.

You can monitor this API integration from the [Transactions Page](https://app.heypoplar.com/transaction) of the dashboard. We provide basic diagnostic information and the ability to purge any transactional data stored within your account.

## Submit Order

<mark style="color:green;">`POST`</mark> `https://api.heypoplar.com/v1/order`

`https://api.heypoplar.com/v1/order`

Use this endpoint to report a new transaction or order\
\
In addition to the required fields, at least one of the following must be provided: `shipping_address`, `billing_address`, `customer_email_sha256`, or `customer_email`&#x20;

#### Headers

| Name                                            | Type   | Description                                                     |
| ----------------------------------------------- | ------ | --------------------------------------------------------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Bearer *<mark style="color:blue;">ProductionAccessToken</mark>* |

#### Request Body

| Name                                          | Type   | Description                                                                                                                                                                                         |
| --------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| metadata                                      | object | A set of key/value pairs specifying additional information about an order.                                                                                                                          |
| shipping\_address                             | object | The customers shipping address.                                                                                                                                                                     |
| billing\_address                              | object | The customers billing address.                                                                                                                                                                      |
| order\_items                                  | array  | An array of item details.                                                                                                                                                                           |
| currency                                      | string | The three-character ISO country code. If this is not provided, we will assume `USD`.                                                                                                                |
| total                                         | number | <p>The total order value represented as a decimal. <br><br>Since this is used to calculate campaign metrics such as CPA and ROAS, then you may wish to exclude taxes and additional surcharges.</p> |
| customer\_email\_sha256                       | string | <p>The SHA256 hash of the customers email addresses, as a 64 character string.<br><br>Note that the value of the email address should be converted to lowercase prior to hashing.</p>               |
| customer\_email                               | string | <p>The customers email address.<br><br>This value is not stored by Poplar. It is used to compute a hash and is discarded.</p>                                                                       |
| customer\_id                                  | string | The ID for the transacting customer in your system. This is typically unique for this customer.                                                                                                     |
| order\_date<mark style="color:red;">\*</mark> | string | YYYY-MM-DD (ISO8601) formatted date representing the time the purchase was made by the customer.                                                                                                    |
| order\_id<mark style="color:red;">\*</mark>   | string | The unique identifier for this order.                                                                                                                                                               |

{% tabs %}
{% tab title="201 Created" %}

```
{
  "id": "d32f3be1-b376-4802-99cb-6fa1fc529aca",
  "order_id": "9ca6e9ab-9de6-4491-82c3-8730e2aedfbb",
  "currency": "USD",
  "total": "126.0",
  "customer": {
    "id": "27876",
    "email_sha256": "b043f7b1894189c3591ed2514fcf901ec0de715e8c0c981b893e7d3778d318d4"
  },
  "metadata": {
    "firstTimeOrder": "true"
  },
  "order_items": [
    {
      "category": [
        "Grocery",
        "Fruit"
      ],
      "description": "Handcrafted Wooden Pants",
      "identifier": "88fcae48-b6f3-41d5-826d-1f7ec2a108ba",
      "metadata": {
        "productMaterial": "Cotton"
      },
      "price": "0.0",
      "quantity": 1,
      "total": "504.0"
    },
    {
      "category": [
        "Health",
        "Sports",
        "Toys"
      ],
      "description": "Tasty Plastic Bike",
      "identifier": "94820c46-644e-408f-8f61-4e057a148c5e",
      "metadata": {},
      "price": "483.0",
      "quantity": 1,
      "total": "297.0"
    }
  ],
  "shipping_address": {
    "company": null,
    "address_1": "03055 Williamson Gardens",
    "address_2": "Suite 249",
    "city": "South Maritzaville",
    "state_name": "TN",
    "postal_code": "10843"
  },
  "billing_address": {
    "company": null,
    "address_1": "59184 Henri Canyon",
    "address_2": null,
    "city": null,
    "state_name": "",
    "postal_code": "36670-7309"
  },
  "order_date": "2019-09-05T14:06:42Z"
}
```

{% endtab %}

{% tab title="400: Bad Request Incorrectly formatted or missing data" %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="403: Forbidden Incorrect or missing auth header" %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

### Shipping & Billing Address

Shipping and billing address objects should contain the following fields:

| Key           | Value Type | Desc.                                                                                                              |
| ------------- | ---------- | ------------------------------------------------------------------------------------------------------------------ |
| `name`        | string     | Optional                                                                                                           |
| `address_1`   | string     | <p><strong>Required</strong><br><br><em>Address number and street name</em></p>                                    |
| `address_2`   | string     | <p>Optional<br><br><em>Apt/Suite/Unit/etc.</em></p>                                                                |
| `city`        | string     | Optional                                                                                                           |
| `state`       | string     | Optional                                                                                                           |
| `postal_code` | string     | **Required**                                                                                                       |
| `country`     | string     | <p>Optional<br><br><em>Three-character country code. If not provided will default to <strong>USA</strong></em></p> |

### Order Items

You may provide order item details with an order. This is optional, however this data is used to add additional dimensions to our reporting.

| Key         | Value Type | Desc.                                                                                                                             |
| ----------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------- |
| identifier  | string     | <p><strong>Required</strong><br><br>U<em>nique identifier for the item purchased. This may be a UPC or SKU</em></p>               |
| description | string     | <p>Optional<br><br><em>Name/Description of the item</em></p>                                                                      |
| quantity    | integer    | <p>Optional<br><br><em>Number of unique units represented by this order item</em></p>                                             |
| total       | number     | <p><strong>Required</strong><br><br><em>Total price of unique units purchased of this order item (e.g. price x quantity)</em></p> |
| price       | number     | <p>Optional<br><br><em>Unit price of this order item</em></p>                                                                     |
| category    | array      | <p>Optional<br><br><em>An ordered array of strings,</em> <em>starting with the top most category</em></p>                         |
| metadata    | object     | <p>Optional<br><br><em>A set of key/value pairs containing additional information about this item</em></p>                        |

### Metadata

Optional metadata may be provided with Orders and Order Items. This data is used to enhance reporting. For example, you may wish to include a flag which indicates a customer's first time order or segment.

* The metadata object should consist of `key : value` pairs.&#x20;
* You are permitted up to 10 different keys.&#x20;
* Each key should be a string, up to 40 characters in length.&#x20;
* Values should string, number or boolean types, limited to a maximum length of 200 characters.

We've pre-defined the following keys for advanced reporting.

| Key          | Value Type           |
| ------------ | -------------------- |
| `new_buyer`  | boolean (true/false) |
| `promo_code` | string               |

{% hint style="warning" %}
If you'd like to have this data in your reports, you must name them **exactly** as they appear above. For example, if you name the key `nb` instead of `new_buyer`your reports will NOT show the information.
{% endhint %}

### Customers (Orders API)

When you submit transactions to the Orders API we will also automatically create an audience called "Customers (Orders API)" that will include customers of the orders. The audience will contain two records for each order submitted one with the shipping address, and one with the billing address.

This list is useful when you are mailing prospecting campaigns and want to suppress existing customers that have been submitted to the Orders API. (note unless you have submitted all historical orders it will not be a complete customer list) You cannot mail this audience as a one time send.

## Delete Order

<mark style="color:red;">`DELETE`</mark> `https://api.heypoplar.com/v1/order/:order_id`

`https://api.heypoplar.com/v1/order/:order_id`

Deletes the specified order by ID.

#### Path Parameters

| Name                                        | Type   | Description                        |
| ------------------------------------------- | ------ | ---------------------------------- |
| order\_id<mark style="color:red;">\*</mark> | string | The ID of the order to be deleted. |

#### Headers

| Name                                            | Type   | Description                                                     |
| ----------------------------------------------- | ------ | --------------------------------------------------------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Bearer *<mark style="color:blue;">ProductionAccessToken</mark>* |

{% tabs %}
{% tab title="200: OK Order Deleted" %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="404: Not Found Order does not exist or ID is incorrect" %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

## Edit Order

<mark style="color:green;">`POST`</mark> `https://api.heypoplar.com/v1/order/:order_id`

`https://api.heypoplar.com/v1/order/:order_id`

Allows updates to be made to the specified order.  This method accepts the same parameters as order submission, with the exception of `order_id` - this cannot be changed.&#x20;

#### Path Parameters

| Name                                        | Type   | Description                       |
| ------------------------------------------- | ------ | --------------------------------- |
| order\_id<mark style="color:red;">\*</mark> | string | The ID of the order to be edited. |

#### Headers

| Name                                            | Type   | Description                                                     |
| ----------------------------------------------- | ------ | --------------------------------------------------------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Bearer *<mark style="color:blue;">ProductionAccessToken</mark>* |

{% tabs %}
{% tab title="200: OK Order successfully updated" %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="404: Not Found Order does not exist or ID is incorrect" %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}


# Do Not Mail

Managing your do not mail list is just as important for direct mail as it is for email. We offer two ways to suppress mailings, either via an API or manually via a `.csv` list upload. The API is the easiest way to integrate an opt out form with our triggered mail service.&#x20;

You can also set up rules for[ audience suppression](https://docs.heypoplar.com/article/204-suppression-settings#audience-suppressions) to suppress by geographic area, and repeat frequency.

Recipient suppression can be made via any of the following four data types:

* Email (plaintext or hashed)
* Address
* Customer ID (for known customers)

When you send an address we will run it through our CASS Standardization and base the opt out on the updated version as oppose to the original provided.

## Do Not Mail

<mark style="color:green;">`POST`</mark> `https://api.heypoplar.com/v1/do-not-mail`

Either `email`, `email_sha256`, `identifier`, or `address` is required. For suppression to work, the same identifier must be sent when triggering a mailing.

#### Headers

| Name                                            | Type   | Description                                                     |
| ----------------------------------------------- | ------ | --------------------------------------------------------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Bearer *<mark style="color:blue;">ProductionAccessToken</mark>* |

#### Request Body

| Name                                      | Type   | Description                                                                                                                                             |
| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| address<mark style="color:red;">\*</mark> | object | Customer mailing address.                                                                                                                               |
| identifier                                | string | A unique identifier for the customer within your system. This could be a database ID or derivative, however it must be unique to the specific customer. |
| email\_sha256                             | string | The SHA-256 hash of the customers *lowercased* email address, as a 64-character text string.                                                            |
| email<mark style="color:red;">\*</mark>   | string | Customer email email address.                                                                                                                           |

{% tabs %}
{% tab title="201: Created Do Not Mail list member added" %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="400: Bad Request Incorrectly formatted or missing data" %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

### Address Object

The `address` object is structured as follows:

| Field          | Type   | Description                                                                                                         |
| -------------- | ------ | ------------------------------------------------------------------------------------------------------------------- |
| `address_1`    | String | **Required**                                                                                                        |
| `address_2`    | String | Optional                                                                                                            |
| `city`         | String | Optional                                                                                                            |
| `state`        | String | Optional                                                                                                            |
| `postal_code`  | String | **Required**                                                                                                        |
| `country_code` | String | <p>Optional<br></p><p>An ISO Alpha-2 formatted country code. By default we assume that this is <code>US</code>.</p> |


# Attribution Report

{% hint style="info" %}
The Attribution API is currently a beta feature. For early access, please reach out to <support@heypoplar.com>
{% endhint %}

The Attribution Report endpoint enables you to generate an [Attribution Report](https://docs.heypoplar.com/article/240-understanding-attribution-reports) for up to 6 months of data. The resulting report will be delivered in batches to a webhook URL of your choosing ([see below](#webhook-setup)).

## Generate attribution report

<mark style="color:green;">`POST`</mark> `https://api.heypoplar.com/v1/reports/attribution`

This endpoint allows you to generate an attribution report from a specified [reporting window](https://docs.heypoplar.com/article/240-understanding-attribution-reports#reporting-window) that will be delivered through a [webhook](#webhook-setup).

#### Request Body

| Name                                          | Type   | Description                                                                                                                    |
| --------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| start\_date<mark style="color:red;">\*</mark> | string | YYYY-MM-DD (ISO8601) formatted date for the start of the reporting window.                                                     |
| campaign\_id                                  | string | <p>The ID of the campaign for the report.</p><p></p><p>If not set, the report will contain all campaigns</p>                   |
| end\_date<mark style="color:red;">\*</mark>   | string | <p>YYYY-MM-DD (ISO8601) for the end of the reporting window. </p><p></p><p>Must be no more than 180 days after start\_date</p> |

{% tabs %}
{% tab title="201: Created New report created" %}

```json
{
  start_date: "YYYY-MM-DD",
  end_date: "YYYY-MM-DD",
  status: "created",
  campaign_scope: "b01cdd5e-5b83-4345-826a-094c823f894b",
  campaign_name: "Campaign Name 1",
  response_webhooks: ["api.yourwebhook.com/attribution_report"]
}

```

{% endtab %}

{% tab title="202: Accepted Processing - report was previously created but has not finished sending." %}

```json
{
  start_date: "YYYY-MM-DD",
  end_date: "YYYY-MM-DD",
  status: "processing",
  campaign_scope: "b01cdd5e-5b83-4345-826a-094c823f894b",
  campaign_name: "Campaign Name 1",
  response_webhooks: ["api.yourwebhook.com/attribution_report"]
}
```

{% endtab %}

{% tab title="200: OK Resending report - same report was created on that day. Will not recalculate report. " %}

```json
{
  start_date: "YYYY-MM-DD",
  end_date: "YYYY-MM-DD",
  status: "resending_report",
  campaign_scope: "b01cdd5e-5b83-4345-826a-094c823f894b",
  campaign_name: "Campaign Name 1",
  response_webhooks: ["api.yourwebhook.com/attribution_report"]
}
```

{% endtab %}

{% tab title="422: Unprocessable Entity Attribution report response webhook needs to be setup (see below)" %}

{% endtab %}

{% tab title="200: OK No attribution data available for the specified campaign" %}

{% endtab %}

{% tab title="200: OK No attribution data available for the organization. Transaction data upload required" %}

{% endtab %}

{% tab title="400: Bad Request Date range cannot exceed 180 days" %}

{% endtab %}
{% endtabs %}

### Webhook Setup

<figure><img src="/files/3rZJ39JrnVxb6h6kZKal" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
This page will only appear if the Attribution API has been enabled for your account
{% endhint %}

To setup your Attribution API webhook, navigate to **Integrations > Attribution Report** and click the button to create a new webhoo&#x6B;**.** From here, enter a webhook destination URL of your choosing. To verify the webhook has been setup correctly, use the "Send Test" link and ensure that a `200` response is returned.

### Webhook Payload

When the report has finished generating, it will be sent through the webhook that was previously setup.

<table><thead><tr><th width="236">Field</th><th>Description</th></tr></thead><tbody><tr><td><code>campaign_id</code></td><td>The ID of the campaign for the report (if provided)</td></tr><tr><td><code>start_date</code></td><td>The starting date for the report window</td></tr><tr><td><code>end_date</code></td><td>The end date for the report window</td></tr><tr><td><code>batch_index</code></td><td>The index of the current batch of results</td></tr><tr><td><code>total_batches</code></td><td>The total number of batches contained in the report</td></tr><tr><td><code>attribution_data</code></td><td>An array of up to 100 attribution match objects.<br><br>For more details about match objects, see our <a href="https://docs.heypoplar.com/article/241-download-raw-matches">raw matches documentation</a>.</td></tr></tbody></table>

#### Example Payload

This sample response shows one complete set of data for a "match." Payloads will hold up to 100 matches per batch. The keys found in `attribution_data` are the same keys used in [Download Raw Matches](https://docs.heypoplar.com/article/241-download-raw-matches) on the transactions page <https://app.heypoplar.com/transaction>.

```json
{ 
  campaign_id: "b01cdd5e-5b83-4345-826a-094c823f894b",
  start_date: "YYYY-MM-DD",
  end_date: "YYYY-MM-DD",
  batch_index: 0,
  total_batches: 5
  attribution_data: [
    {
      match_id: "b01cdd5e-5b83-4345-826a-094c823f894b",
      campaign_id: "b01cdd5e-5b83-4345-826a-094c823f894b",
      campaign_name: "Campaign Name 1",
      creative_id: "b01cdd5e-5b83-4345-826a-094c823f894b",
      mailing_id: "b01cdd5e-5b83-4345-826a-094c823f894b",
      order_id: "b01cdd5e-5b83-4345-826a-094c823f894b",
      customer_id: "b01cdd5e-5b83-4345-826a-094c823f894b",
      order_date: "2021-12-19 00:00:00 UTC",
      order_total: "283.0",
      order_currency: "USD",
      mailing_cost: 0.46,
      mailing_state: "delivered",
      send_date: "2021-12-16",
      in_home_date: "2021-12-23",
      match_type: "M",
      unique: "false",
      new_buyer: "false",
      email_match: "true",
      billing_address_match: "false",
      shipping_address_match: "true",
      manual_send_id: "b01cdd5e-5b83-4345-826a-094c823f894b",
      manual_send_name: "first send",
      metadata: "{\"new_buyer\"=>false}"
    },
    {
      ...
    }
  ]
}
```

<details>

<summary><mark style="color:blue;">(Optional)</mark> Webhook HMAC Verification</summary>

HTTP `POST` payloads contain an `X-SLM-Signature` HTTP header. This is the HMAC hex digest of the response body. It is generated using the SHA1 hash function with the secret displayed on **Integrations > Attribution Report** as the HMAC key. You can use this in order to verify the authenticity and integrity of a payload.&#x20;

Here is an example of verifying authenticity and integrity of a request body using the Ruby library [OpenSSL::HMAC](https://ruby-doc.org/stdlib-2.4.0/libdoc/openssl/rdoc/OpenSSL/HMAC.html).

```ruby
require 'openssl'
require 'json'

SHARED_SECRET = '591f827adf2f1e348ec3dc2a07e61e59' # found on heypoplar.com Integrations > Attribution Report

request = {
  headers: {
    'X-SLM-Signature': '8b3f7dad2f29e5921d3b36487b16eeaa52c8448e'
  },
  body: {
    'start_date': 'YYYY-MM-DD',
    'end_date': 'YYYY-MM-DD',
    'batch_index': 0,
    'total_batches': 1,
    'attribution_data': []
  }
}

expected_signature = OpenSSL::HMAC.hexdigest(
  OpenSSL::Digest.new('sha1'),
  SHARED_SECRET,
  request[:body].to_json
)
# => '8b3f7dad2f29e5921d3b36487b16eeaa52c8448e'

if request[:headers][:'X-SLM-Signature'] == expected_signature
  # Request verified
end
  
```

</details>


# Audience

In addition to the **Do Not Mail** audience, you can create additional audiences for suppression or mailing. This is done by uploading a CSV in the [**Audiences**](https://app.heypoplar.com/audiences) section or by calling the API.&#x20;

{% hint style="info" %}
This endpoint is only able to **add members to an existing list** in your Poplar account. You must first create an Audience within the Poplar platform to generate an `audience_id`
{% endhint %}

## Create Audience Member

<mark style="color:green;">`POST`</mark> `https://api.heypoplar.com/v1/audience/:id`

Use this endpoint to programmatically add users to an audience. At least one of the following is **required:** `address`, `email`, `email_sha256` and `identifier`.

#### Path Parameters

| Name                                 | Type   | Description                                                                                                                                                         |
| ------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id<mark style="color:red;">\*</mark> | string | <p>This is the ID of the audience you are adding to. <br><br>You can obtain this from the audience page on the dashboard, or from the Fetch Audiences endpoint.</p> |

#### Headers

| Name                                            | Type   | Description                                                     |
| ----------------------------------------------- | ------ | --------------------------------------------------------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Bearer *<mark style="color:blue;">ProductionAccessToken</mark>* |

#### Request Body

| Name          | Type   | Description                                                                                                               |
| ------------- | ------ | ------------------------------------------------------------------------------------------------------------------------- |
| address       | object | Postal Address object (see below).                                                                                        |
| identifier    | string | A unique identifier for this user. This may be a Customer ID, database ID or other field.                                 |
| email\_sha256 | string | A SHA256 hash of the users email address. Please ensure that the email address is lowercased prior to computing the hash. |
| email         | string | Email Address                                                                                                             |

#### Address Object

| Key                                            | Type   | Description                                                                                        |
| ---------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------- |
| address\_1<mark style="color:red;">\*</mark>   | string | First line of the street address (e.g., house number and street name).                             |
| address\_2                                     | string | Second line of the street address (e.g., apartment or suite number). Optional in all combinations. |
| city                                           | string | City name.                                                                                         |
| state                                          | string | State abbreviation (e.g., "CA" for California                                                      |
| postal\_code<mark style="color:red;">\*</mark> | string | ZIP Code.                                                                                          |
| name                                           | string | Name of the addressee.                                                                             |

{% tabs %}
{% tab title="201: Created Audience member added" %}

```javascript
{
    "id": "xxxxx-xxxxx-xxxxx-xxxxx",
    "address": {
        "name": "Jim Halpert",
        "company": null,
        "address_1": "13831 Calvert St",
        "address_2": "# 1A",
        "city": "Van Nuys",
        "state_name": "CA",
        "postal_code": "91401"
    }
}
```

{% endtab %}
{% endtabs %}

## Fetch Audiences

<mark style="color:blue;">`GET`</mark> `https://api.heypoplar.com/v1/audiences`

This endpoint returns a list of audiences attached to your organization.

#### Headers

| Name                                            | Type   | Description                                                     |
| ----------------------------------------------- | ------ | --------------------------------------------------------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Bearer *<mark style="color:blue;">ProductionAccessToken</mark>* |

{% tabs %}
{% tab title="200: OK Returns a list of your audiences" %}

```javascript
[
    {
        "id": "2965b4fc-30cc-4ec6-b90a-d460fd25f90d",
        "name": "Do Not Mail List",
        "description": "Do Not Mail List for Share Local Media",
        "member_count": 1337
    },
    {
        "id": "087d0603-5b97-4656-9a2b-f739d44fe11b",
        "name": "Existing Customers",
        "description": "Customers who have made a purchase.",
        "member_count": 25181
    },
]
```

{% endtab %}
{% endtabs %}

## Upload Audience CSV

If you are uploading a CSV of audience members, you can use this template:

{% file src="/files/-M\_1ZmsMDLd3ZhJH5tjc" %}
Audience File Template
{% endfile %}

## Manually Add a Single Audience Member

When you are viewing the audience, you can also add a single audience member:&#x20;

![](/files/-M_1YwG3SQPp14x3eT3t)

## Common Questions

### Should I upload a CSV to Audiences or use the Audience API?&#x20;

* If you have a list (or batch) of addresses you want to load into Poplar, we recommend using the CSV upload.
* If you need to keep your Audience synced in real-time with your external marketing platform, we recommend setting up the API call.&#x20;


# Data Subject Requests

We currently support two data subject request types **`access`** & **`erasure` .**

&#x20;**Access** will let you determine if you have stored that data subjects identity anywhere in Poplar (&/or Share Local Media if you are also a SLM Solo, Shared or Insert client).&#x20;

**Erasure** will submit an erasure (deletion) request for a data subject's identity within your account. This will scan across mailings, orders, and audiences. Note: that erasure requests **do not** apply within your opt out list. When you submit an erasure request we will also automatically add the data subject identity to your opt out list to prevent them from being mailed by you in the future.

## Create Data Subject Request

<mark style="color:green;">`POST`</mark> `https://api.heypoplar.com/v1/dsr/request`

Use this endpoint to create a data subject request for one or more subject identities.

#### Headers

| Name                                            | Type   | Description                          |
| ----------------------------------------------- | ------ | ------------------------------------ |
| Authorization<mark style="color:red;">\*</mark> | string | Bearer [ProductionAccessToken](/api) |
| Content-Type<mark style="color:red;">\*</mark>  | string | application/json                     |

#### Request Body

| Name                                                     | Type   | Description                                                                                             |
| -------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------- |
| api\_version                                             | string | <p>The API version of the request.</p><p></p><p>Supported values are:  <code>v1</code></p>              |
| regulation<mark style="color:red;">\*</mark>             | string | <p>The regulation for the DSR request.</p><p></p><p>Supported values are: <code>cpra</code></p>         |
| subject\_request\_id<mark style="color:red;">\*</mark>   | string | The unique UUID v4 identifier for this request.                                                         |
| subject\_request\_type<mark style="color:red;">\*</mark> | string | <p>The type of request.</p><p></p><p>Supported values are: <code>access</code> <code>erasure</code></p> |
| submitted\_time<mark style="color:red;">\*</mark>        | string | ISO8601 formatted datetime representing the time the request was made by the data subject.              |
| subject\_identities<mark style="color:red;">\*</mark>    | array  | An array of [subject identity objects.](#undefined)                                                     |

{% tabs %}
{% tab title="201: Created Data Subject Request Created" %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="400: Bad Request Incorrectly formatted or missing data" %}

```json
{
  "error": {
     "name": "ValidationError"
     "message": {
       ...
     }
}
```

{% endtab %}

{% tab title="403: Forbidden Incorrect or missing auth header" %}

```json
{
  "error": "Missing or Invalid Authorization Header"
}
```

{% endtab %}
{% endtabs %}

### Subject Identity Objects

A subject data request requires an array of subject identity objects. A request can contain multiple subject identity objects but all subject identities should be for the same user. For example, a data subject request may contain a subject identity object for a user's email and one for their address.

Subject identity objects should contain the following fields:

<table><thead><tr><th width="225.33333333333331">Key</th><th width="164">Value Type</th><th>Description</th></tr></thead><tbody><tr><td><code>identity_type</code></td><td>string</td><td><strong>Required</strong><br><br>The type of identity.<br><br>Supported options are: <code>email</code> <code>address</code></td></tr><tr><td><code>identity_format</code></td><td>string</td><td><strong>Required</strong><br><br>The format of the identity value<br><br>Supported formats are: <code>raw</code></td></tr><tr><td><code>identity_value</code></td><td>string | object</td><td><strong>Required</strong><br><br>For address requests, an identity address object; For all other request types, the value string.</td></tr></tbody></table>

The `identity_value` object for address request should contain the following fields:

<table><thead><tr><th width="224">Key</th><th width="169.33333333333331">Value Type</th><th>Description</th></tr></thead><tbody><tr><td><code>full_name</code></td><td>string</td><td>Optional</td></tr><tr><td><code>first_name</code></td><td>string</td><td>Optional</td></tr><tr><td><code>last_name</code></td><td>string</td><td>Optional</td></tr><tr><td><code>address_1</code></td><td>string</td><td><strong>Required</strong> <br><br><em>Address number and street name</em></td></tr><tr><td><code>address_2</code></td><td>string</td><td>Optional <br><br><em>Apt/Suite/Unit/etc.</em></td></tr><tr><td><code>city</code></td><td>string</td><td><strong>Required</strong></td></tr><tr><td><code>state</code></td><td>string</td><td><strong>Required</strong></td></tr><tr><td><code>postal_code</code></td><td>string</td><td><strong>Required</strong></td></tr></tbody></table>

## Fetch Data Subject Request Status&#x20;

<mark style="color:blue;">`GET`</mark> `https://api.heypoplar.com/v1/dsr/request/:subject_request_id`

This endpoint allows you to query the status of a data subject request.

#### Path Parameters

| Name                                                   | Type   | Description                                    |
| ------------------------------------------------------ | ------ | ---------------------------------------------- |
| subject\_request\_id<mark style="color:red;">\*</mark> | string | The `subject_request_id` from the POST request |

{% tabs %}
{% tab title="200: OK Successful Deletion Request" %}

```json
{
  "controller_id": "87f42076-3bcc-4e93-a72a-a0703746ec98",
  "subject_request_id": "e93693d5-5d99-4c45-8993-b31684426a38",
  "request_status": "completed",
  "result": "deleted",
}
```

{% endtab %}

{% tab title="403: Forbidden Incorrect or missing auth header" %}

```json
{
  "error": "Missing or Invalid Authorization Header"
}
```

{% endtab %}

{% tab title="404: Not Found subject\_request\_id is incorrect or does not exist" %}

```javascript
{
  "error": {
    "name": "NotFound",
    "message": "Data Subject Request not found"
  }
}
```

{% endtab %}

{% tab title="200: OK Request in Progress" %}

```javascript
{
  "controller_id": "87f42076-3bcc-4e93-a72a-a0703746ec98",
  "expected_completion_time": "2022-11-19T19:48:43.514+00:00",
  "subject_request_id": "e93693d5-5d99-4c45-8993-b31684426a38",
  "request_status": "in_progress"
}
```

{% endtab %}

{% tab title="200: OK Successful Request – No Results Found" %}

```javascript
{
  "controller_id": "87f42076-3bcc-4e93-a72a-a0703746ec98",
  "subject_request_id": "e93693d5-5d99-4c45-8993-b31684426a38",
  "request_status": "completed",
  "result": "not_found",
}
```

{% endtab %}

{% tab title="200: OK Successful Access Request" %}

```javascript
{
  "controller_id": "87f42076-3bcc-4e93-a72a-a0703746ec98",
  "subject_request_id": "e93693d5-5d99-4c45-8993-b31684426a38",
  "request_status": "completed",
  "result": "found",
  "data": [
    {
      "category": "address",
      "email": "johndoe@example.com"
    },
    {
      "category": "address",
      "address_1": "1640 Riverside Drive",
      "city": "Hill Valley",
      "state": "CA",
      "postal_code": "91103"
    }
  ]
}
```

{% endtab %}
{% endtabs %}


# Stats

The Stats API provides aggregated mailing performance data across your campaigns. Use these endpoints to pull circulation and spend metrics for reporting and analytics integrations.

### Fetch Campaign Stats

<mark style="color:blue;">`GET`</mark> `https://api.heypoplar.com/v1/stats/campaigns`

Returns aggregated stats across all campaigns for your organization, including total circulation, total spend, and a paginated list of per-campaign breakdowns. Optionally filter by date range.

**Headers**

<table><thead><tr><th width="178.80859375">Name</th><th width="193.61328125">Type</th><th>Description</th></tr></thead><tbody><tr><td>Authorization<mark style="color:red;">*</mark></td><td>string</td><td><em><mark style="color:blue;">Bearer ProductionAccessToken</mark></em></td></tr></tbody></table>

**Query Parameters**

<table><thead><tr><th width="178.77734375">Name</th><th width="189.578125">Type</th><th>Description</th></tr></thead><tbody><tr><td>start_date</td><td>string</td><td><p>ISO8601 date to limit results to campaigns with activity on or after this date</p><p>Example: <code>2024-01-01</code></p></td></tr><tr><td>end_date</td><td>string</td><td><p>ISO8601 date to limit results to campaigns with activity on or before this date</p><p>Example: <code>2024-03-31</code></p></td></tr><tr><td>page</td><td>number</td><td><p>Page of results to return</p><p>default: <code>1</code> maximum: <code>10000</code></p></td></tr><tr><td>per_page</td><td>number</td><td><p>Number of campaigns to return per page</p><p>default: <code>25</code> maximum: <code>30</code></p></td></tr></tbody></table>

{% tabs %}
{% tab title="200: OK Returns aggregated stats and campaign list" %}

```json
{
    "total_circulation": 45200,
    "total_spend": 29380.00,
    "total_campaign_count": 3,
    "start_date": "2024-01-01",
    "end_date": "2024-03-31",
    "page": 1,
    "total_pages": 1,
    "campaigns": [
        {
            "campaign_id": "25358f3d-121e-4b07-b2fa-4ed8c7054ac1",
            "campaign_name": "Prospecting USA Q1 2024",
            "circulation": 20000,
            "spend": 13000.00
        },
        {
            "campaign_id": "aef13242-e4a9-4494-857f-2acc1c3337f6",
            "campaign_name": "Retargeting Spring 2024",
            "circulation": 15200,
            "spend": 9880.00
        },
        {
            "campaign_id": "c4b37e00-9163-4b4e-be3e-65fea6f5a165",
            "campaign_name": "New Movers March 2024",
            "circulation": 10000,
            "spend": 6500.00
        }
    ]
}
```

{% endtab %}

{% tab title="400: Bad Request Invalid date range" %}

```json
{
    "error": "ValidationError",
    "message": "start_date must be less than or equal to end_date"
}
```

{% endtab %}
{% endtabs %}

***

### Fetch Campaign Stats by ID

<mark style="color:blue;">`GET`</mark> `https://api.heypoplar.com/v1/stats/campaign/:id`

Returns circulation and spend stats for a single campaign.

**Headers**

<table><thead><tr><th width="173.5078125">Name</th><th width="196.8984375">Type</th><th>Description</th></tr></thead><tbody><tr><td>Authorization<mark style="color:red;">*</mark></td><td>string</td><td>Bearer <em><mark style="color:blue;">ProductionAccessToken</mark></em></td></tr></tbody></table>

**Path Parameters**

<table><thead><tr><th width="180.109375">Name</th><th width="193.85546875">Type</th><th>Description</th></tr></thead><tbody><tr><td>id<mark style="color:red;">*</mark></td><td>string</td><td>Campaign ID</td></tr></tbody></table>

**Query Parameters**

<table><thead><tr><th width="178.77734375">Name</th><th width="189.578125">Type</th><th>Description</th></tr></thead><tbody><tr><td>start_date</td><td>string</td><td><p>ISO8601 date to limit results to campaigns with activity on or after this date</p><p>Example: <code>2024-01-01</code></p></td></tr><tr><td>end_date</td><td>string</td><td><p>ISO8601 date to limit results to campaigns with activity on or before this date</p><p>Example: <code>2024-03-31</code></p></td></tr></tbody></table>

{% tabs %}
{% tab title="200: OK Returns stats for the campaign" %}

```json
{
    "campaign_id": "25358f3d-121e-4b07-b2fa-4ed8c7054ac1",
    "campaign_name": "Prospecting USA Q1 2024",
    "circulation": 20000,
    "spend": 13000.00
}
```

{% endtab %}

{% tab title="404: Not Found Campaign does not exist" %}

```json
{
    "error": "CampaignNotFound",
    "message": "Campaign does not exist"
}
```

{% endtab %}
{% endtabs %}

***

### Response Fields

#### Collection (stats/campaigns)

| Field                  | Type    | Description                                                      |
| ---------------------- | ------- | ---------------------------------------------------------------- |
| total\_circulation     | integer | Total number of pieces mailed across all campaigns in the result |
| total\_spend           | float   | Total spend in USD across all campaigns in the result            |
| total\_campaign\_count |         |                                                                  |


# Other Endpoints

For more complex 3rd party integrations or custom middleware we also expose the following additional endpoints for your use.

## Fetch Current Organization

<mark style="color:blue;">`GET`</mark> `https://api.heypoplar.com/v1/me`

This endpoint will return the Organization associated with your access token. It is intended to be used when testing connectivity and the validity of an access token.

#### Headers

| Name                                            | Type   | Description                                                     |
| ----------------------------------------------- | ------ | --------------------------------------------------------------- |
| Authorization<mark style="color:red;">\*</mark> | string | *<mark style="color:blue;">Bearer ProductionAccessToken</mark>* |

{% tabs %}
{% tab title="200: OK Returns organization name" %}

```json
{
	"id": "478086b3-bf5e-42a3-9ecc-b539f0b4f71a",
	"name": "Acme Corporation",
	"mode": "production"
}
```

{% endtab %}
{% endtabs %}

## Fetch Active Campaigns

<mark style="color:blue;">`GET`</mark> `https://api.heypoplar.com/v1/campaigns`

This endpoint will return any active campaigns.

#### Headers

| Name                                            | Type   | Description                                                     |
| ----------------------------------------------- | ------ | --------------------------------------------------------------- |
| Authorization<mark style="color:red;">\*</mark> | string | *<mark style="color:blue;">Bearer ProductionAccessToken</mark>* |

{% tabs %}
{% tab title="200: OK Returns a list of all active campaigns" %}

```json
[
    {
        "id": "25358f3d-121e-4b07-b2fa-4ed8c7054ac1",
        "name": "Prospecting USA 2023"
    }
]
```

{% endtab %}
{% endtabs %}

## Fetch Campaign

<mark style="color:blue;">`GET`</mark> `https://api.heypoplar.com/v1/campaign/:id`

This endpoint will return the details of a given campaign. \
It may be used to validate that a provided campaign ID is valid.

#### Path Parameters

| Name                                 | Type   | Description |
| ------------------------------------ | ------ | ----------- |
| id<mark style="color:red;">\*</mark> | string | Campaign ID |

#### Headers

| Name                                            | Type   | Description                                                     |
| ----------------------------------------------- | ------ | --------------------------------------------------------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Bearer *<mark style="color:blue;">ProductionAccessToken</mark>* |

{% tabs %}
{% tab title="200: OK Returns campaign details" %}

```json
{
    "id": "25358f3d-121e-4b07-b2fa-4ed8c7054ac1",
    "name": "Prospecting USA 2023"
}
```

{% endtab %}
{% endtabs %}

## Fetch Campaign Creatives

<mark style="color:blue;">`GET`</mark> `https://api.heypoplar.com/v1/campaign/:id/creatives`

This endpoint returns a list of active creatives belonging to a campaign

#### Path Parameters

| Name                                 | Type   | Description |
| ------------------------------------ | ------ | ----------- |
| ID<mark style="color:red;">\*</mark> | string | Campaign ID |

#### Headers

| Name                                            | Type   | Description                                                     |
| ----------------------------------------------- | ------ | --------------------------------------------------------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Bearer *<mark style="color:blue;">ProductionAccessToken</mark>* |

{% tabs %}
{% tab title="200: OK Returns a list of active creatives" %}

```json
[
    {
        "id": "eb822983-eb13-43a1-a192-f97e0edec138",
        "name": "Creative 1",
        "mail_type": "USPS First Class",
        "creative_type": "6x9 Postcard",
        "merge_tags": {},
        "thumbnail_url": "https://app.heypoplar.com/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCSkdrRFFRPSIsImV4cCI6bn.png",
        "default": false,
        "format": "PDF",
        "image_formats": "PDF"
    }
]
```

{% endtab %}
{% endtabs %}

## Fetch Campaign Mailings

<mark style="color:blue;">`GET`</mark> `https://api.heypoplar.com/v1/campaign/:id/mailings`

This endpoint can be used to fetch all mailings belonging to a campaign.

Since there are typically a large number of mailings associated with a campaign, this endpoint is paginated. Please refer to the following HTTP headers on the response which provide information around the number of mailings and pages, and pay attention to our rate limits when fetching mailings from the API.

**Response Headers:**

`X-Total` - the total number of mailings

`X-Total-Pages` - the total number of pages

`X-Page` - the current page

`X-Per-Page` - the number of results per page

`X-Next-Page` - the next page

`X-Prev-Page` - the previous page

#### Path Parameters

| Name                                 | Type   | Description |
| ------------------------------------ | ------ | ----------- |
| id<mark style="color:red;">\*</mark> | string | Campaign ID |

#### Query Parameters

| Name        | Type   | Description                                                                                                                                                                                                                                            |
| ----------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| page        | number | The page of mailings to be returned                                                                                                                                                                                                                    |
| per\_page   | number | <p>The number of mailings to be returned per page</p><p></p><p>default: <code>5</code>  maximum: <code>100</code></p>                                                                                                                                  |
| start\_date | string | <p>ISO8601 formatted start date time to limit mailings created after</p><p></p><p>Example <code>2021-01-16T10:30:00</code></p>                                                                                                                         |
| end\_date   | string | <p>ISO8601 formatted end date time to limit mailings created before</p><p></p><p>Example <code>2021-02-19T18:30:00</code></p>                                                                                                                          |
| date\_field | string | <p>Which timestamp start\_date and end\_date filter on – <code>created\_at</code> (default) or <code>updated\_at</code>.<br><br><em>Choose <code>updated\_at</code> to return mailings that were created or changed status within the window.</em></p> |

#### Headers

| Name                                            | Type   | Description                                                     |
| ----------------------------------------------- | ------ | --------------------------------------------------------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Bearer *<mark style="color:blue;">ProductionAccessToken</mark>* |

{% tabs %}
{% tab title="200: OK Returns a list of mailers under the campaign" %}

```json
[
    {
        "id": "a1a95b49-eb93-4bee-a3b2-f7b4ee6d87d4",
        "campaign_id": "aef13242-e4a9-4494-857f-2acc1c3337f6",
        "creative_id": "c4b37e00-9163-4b4e-be3e-65fea6f5a165",
        "merge_tags": {},
        "state": "delivered",
        "front_url": "https://assets.heypoplar.com/path/to/front.jpg",
        "back_url": "https://assets.heypoplar.com/path/to/back.jpg",
        "pdf_url": "https://assets.heypoplar.com/path/to/preview.pdf",
        "total_cost": "0.65",
        "created_at": "2021-07-26T19:02:15Z",
        "address": {
            "name": "John Doe",
            "company": "Share Local Media",
            "address_1": "123 Main Street",
            "address_2": "Suite 2",
            "city": "New York",
            "state_name": "NY",
            "postal_code": "10004"
        }
    }
]
```

{% endtab %}
{% endtabs %}


# Webhooks

Webhooks allow you subscribe to certain events relating to your mailings, such as delivery notification, exception, etc... When one of those events is triggered, we'll send a HTTP POST to the webhook's configured URL. Webhooks can be used to update an external system such as a CRM or marketing automation tool.

Webhooks can be set up at an account level, just navigate to **API > Webhooks** to get started. You can create up to 10 webhooks. Once setup, the webhook will be triggered each time an event occurs on any mailing within your account.

### Payload

Webhooks contain a `JSON` payload with the following fields.

| Field         | Description                                                                                            |
| ------------- | ------------------------------------------------------------------------------------------------------ |
| `object_id`   | The ID of the object to which the webhook relates. For mailings, this would be the mailing `id`.       |
| `object_type` | The type of the object to which the webhook relates. For mailings, this will be `Mailing`              |
| `event`       | A string describing the event which triggered the webhook. In the case of Mailing's, an event is fired |
| `timestamp`   | An ISO 8601 formatted timestamp indicating when the event occurred.                                    |

### Headers

HTTP `POST` payloads contain an `X-SLM-Signature` HTTP header. This is the HMAC hex digest of the response body. It is generated using the SHA1 hash function with the secret displayed on the **API > Webhooks** page as the HMAC key. You can use this in order to verify the authenticity and integrity of a payload.

```http
POST /endpoint HTTP/1.1
Content-Length:	131
Content-Type: application/json
User-Agent: SLM/1.2
X-SLM-Signature: 205610e3f868a33d2a9fed113bb7c79e3d56c4bc

{
  "object_id": "ffe27528-adea-496a-ba2b-23cde9d70b97",
  "object_type": "Mailing",
  "event": "mailed",
  "timestamp": "2019-02-22T15:15:39Z"
}
```

### Events

Each event corresponds to the state of a mailing:

| Event                     | Description                                                                                                                  |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `append_failed`           | Unable to append a physical address to email                                                                                 |
| `address_invalid`         | Invalid address data [*learn more*](https://docs.heypoplar.com/article/207-address-validation)                               |
| `suppressed`              | Address or email appears on a set list of [suppressions](https://docs.heypoplar.com/article/204-suppression-settings)        |
| `budget_exceeded`         |                                                                                                                              |
| `credit_balance_exceeded` |                                                                                                                              |
| `processing`              | Confirming all details of the mailing and production                                                                         |
| `mailed`                  |                                                                                                                              |
| `delivered`               | Scanned as delivered                                                                                                         |
| `delivery_exception`      | Delivery will make a second attempt                                                                                          |
| `failed`                  | Indicates a fatal issue which prevents the mailing from being processed                                                      |
| `holdout`                 | Not mailed as part of the [holdout](https://docs.heypoplar.com/article/67-what-is-a-holdout-group-how-do-i-set-one-up) group |

### Retry Policy

If the server does not return a HTTP **200** Success response code, we will retry the `POST` up to 10 times using an exponential backoff strategy.

{% hint style="warning" %}
Webhooks which continue to fail after exhausting their retry attempts will be automatically disabled and will need to be re-enabled manually from the dashboard.
{% endhint %}

### Testing

When you create a webhook, we'll send a simple `ping` event to test connectivity. You can also trigger them from the webhooks list.


