---
title: Postie
slug: postie
docTags: 
createdAt: 2026-02-04T22:58:36.715Z
---

**Postie** is a direct mail retargeting platform (powered by Letterpress) that connects online behavior to physical mail campaigns. This destination loads the Letterpress JavaScript SDK in the browser and forwards page views, email captures, and order completions to enable Postie's retargeting workflows. There is no server-side component.

# Getting Started

This is a device-mode destination. The Letterpress SDK is loaded automatically — no manual script installation is required. You will need:

- **Account ID** — your Postie account ID, found in your Postie account settings.

# Connecting to the Postie CDP Destination

:::BlockQuote
**Warning:** Before connecting destinations in the Chord CDP, please verify with all Destination owners that all **non-Chord CDP** configured destinations are **disabled**. Running external destinations alongside configured Chord CDP destinations **can result in duplicate events downstream.**
:::

1. Log into the Chord data platform.
2. Navigate to the CDP.
3. Click the **"Add"** button next to Destinations.
4. Select **Postie** from the destination catalog.
5. Enter the destination name and your **Account ID**.
6. Click **"Create"** to connect.

# Events

# Event Mapping

| Chord Event                       | Letterpress SDK Call                                                               |
| --------------------------------- | ---------------------------------------------------------------------------------- |
| `page`                            | `letterpress("trackPageView")`                                                     |
| `User Created` / `Email Captured` | `letterpress("trackUnstructEvent", { schema, data })`                              |
| `Order Completed`                 | `letterpress("addTrans")` + `letterpress("addItem")` + `letterpress("trackTrans")` |

# Page Events

Fires a Postie page view call.

**Letterpress SDK call:** `letterpress("trackPageView")`

No additional attributes are sent with page events.

# Email Capture (User Created / Email Captured)

Sends an email capture event using Postie's Iglu schema.

**Letterpress SDK call:** `letterpress("trackUnstructEvent", { schema, data })`

| Letterpress Attribute | Chord Source (Priority Order)                                  | Notes                                        |
| --------------------- | -------------------------------------------------------------- | -------------------------------------------- |
| `schema`              | *(hardcoded)* `iglu:com.getletterpress/email/jsonschema/1-0-0` |                                              |
| `data.email`          | `properties.email` > `traits.email`                            | Required; event is skipped if no email found |

# Order Completed

Sends a full ecommerce transaction to Postie. The event is skipped if `properties.products` is empty.

## Transaction Attributes

**Letterpress SDK call:** `letterpress("addTrans", orderId, affiliation, total, tax, shipping, city, state, country, currency, addressContext)`

| Letterpress Parameter | Chord Source (Priority Order)                                    | Notes                                               |
| --------------------- | ---------------------------------------------------------------- | --------------------------------------------------- |
| `orderId`             | `properties.order_id` > `properties.checkout_id`                 |                                                     |
| `affiliation`         | `properties.affiliation`                                         |                                                     |
| `total`               | `properties.total`                                               | Formatted to 2 decimal places                       |
| `tax`                 | `properties.tax`                                                 | Formatted to 2 decimal places; defaults to `"0.00"` |
| `shipping`            | `properties.shipping`                                            | Formatted to 2 decimal places; defaults to `"0.00"` |
| `city`                | `properties.shipping_city` > `context.traits.address.city`       |                                                     |
| `state`               | `properties.shipping_state` > `context.traits.address.state`     |                                                     |
| `country`             | `properties.shipping_country` > `context.traits.address.country` |                                                     |
| `currency`            | `properties.currency` > `"USD"` (default)                        |                                                     |

## Address Context

An address context object is appended to the `addTrans` call:

| Address Attribute | Chord Source (Priority Order)                                                                                               | Notes                                                                                           |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| `data.name`       | `properties.first_name` > `context.traits.first_name` concatenated with `properties.last_name` > `context.traits.last_name` | Trimmed                                                                                         |
| `data.street`     | `context.traits.address.address1`                                                                                           | `Order Completed` does not carry a street address property; only populated from identity traits |
| `data.street_2`   | `context.traits.address.address2`                                                                                           | `Order Completed` does not carry a street address property; only populated from identity traits |
| `data.zip`        | `properties.shipping_zipcode` > `context.traits.address.zipcode`                                                            |                                                                                                 |
| `data.city`       | Same as transaction `city`                                                                                                  |                                                                                                 |
| `data.state`      | Same as transaction `state`                                                                                                 |                                                                                                 |
| `data.country`    | Same as transaction `country`                                                                                               |                                                                                                 |
| `data.email`      | `properties.email` > `context.traits.email` > `traits.email`                                                                |                                                                                                 |

## Item Attributes

Each product in `properties.products[]` is sent via a separate `addItem` call.

**Letterpress SDK call:** `letterpress("addItem", orderId, sku, name, category, price, quantity, currency)`

| Letterpress Parameter | Chord Source (Priority Order)                                                                 | Notes                                               |
| --------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| `orderId`             | Same as transaction `orderId`                                                                 |                                                     |
| `sku`                 | `properties.products[].sku` > `properties.products[].product_id` > `properties.products[].id` |                                                     |
| `name`                | `properties.products[].name`                                                                  |                                                     |
| `category`            | `properties.products[].category` > `properties.products[].variant`                            |                                                     |
| `price`               | `properties.products[].price`                                                                 | Formatted to 2 decimal places; defaults to `"0.00"` |
| `quantity`            | `properties.products[].quantity`                                                              | Defaults to `"1"`                                   |
| `currency`            | Same as transaction `currency`                                                                |                                                     |

After all items are added, the transaction is finalized with `letterpress("trackTrans")`.

# Initialization

The plugin loads `https://scripts.postie.com/{accountId}/lp.1.js` on the first event received. The plugin manages SDK loading state (`fresh` → `loading` → `loaded`/`failed`) to prevent duplicate script loads. Concurrent events during loading are queued and processed after initialization completes. If the script fails to load, subsequent events are silently dropped.

# CSP Requirements

If your site uses a Content Security Policy, allow the following domains:

| Directive     | Domain                         |
| ------------- | ------------------------------ |
| `script-src`  | `https://scripts.postie.com`   |
| `connect-src` | `https://t.getletterpress.com` |

***

**Updated 6 Apr 2026**
