Postscript
Postscript is an SMS marketing platform for ecommerce brands. Datafly Signal delivers your events server-side to Postscript’s Custom Events API, where they trigger Flows (automations) such as abandoned-cart, browse-abandonment, and post-purchase journeys. Because delivery is server-to-server, events reach Postscript even when a browser blocks third-party scripts.
Why route Postscript through Datafly Signal
- Profiles are updated from the server, not the browser. Events reach Postscript even when a tracker blocker or a failed page unload would have dropped a client-side call, so the profile reflects what actually happened.
- One consent decision governs every destination. Postscript is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
Prerequisites
- A Postscript account with SMS subscribers.
- A Postscript Private API Key (
sk_...). Generate it in the Postscript dashboard under Account > API (app.postscript.io/account/api). Use the Private key, never the Public key, and never expose it in client-side code. - At least one of phone, email, or a Postscript subscriber ID flowing through your Signal events so Postscript can resolve the subscriber.
Configuration
In your Postscript dashboard:
- Go to Account > API.
- Copy the Private API Key (
sk_...).
Configure in Signal
- In the Signal management UI, open Integrations and add Postscript.
- Paste your Private API Key into the API Key field.
- Attach the Postscript integration to the pipeline that carries the events you want to trigger Flows.
- Save and publish. New events on that pipeline now deliver to Postscript.
API Endpoint
Signal delivers events to Postscript’s Custom Events API:
POST https://api.postscript.io/api/v2/events
Authorization: Bearer <Private API Key>
Content-Type: application/jsonA successful request returns 202 Accepted. The event name (type) is automatically prefixed with your shop name in Postscript, so an order_completed event appears in Flows as [Your Shop] - order_completed.
Identity Signals
Server-side delivery of subscriber events to Postscript’s Custom Events API (POST /api/v2/events) to trigger SMS Flows. Matches the subscriber by phone (E.164) and/or email (trimmed, lowercased), both sent in plain text because Postscript matches on them and accepts no hash; events with neither are not sent. Event properties are flat values for Flow filters and merge tags.
| Field | Source | Notes |
|---|---|---|
phone | traits.phone | E.164, matched first. |
email | traits.email | Trimmed and lowercased, matched second. |
subscriber_id | not sent | Postscript’s own subscriber ID, not the Signal user ID. |
Event Mapping
Blueprint 0.4.0, reviewed against the vendor’s documentation on 2026-09-23. Each preset maps the events below; every other event is dropped. Events use the canonical names from the event specs (transaction_id, value, items[], search_term); the legacy order_id, revenue and flat product fields are still read as a fallback.
Default (default)
Postscript Custom Events (POST /api/v2/events) to trigger SMS Flows. Each event names the subscriber by phone (E.164) and/or email (trimmed, lowercased); both are sent in plain text because Postscript matches the subscriber on them (phone first, then email) and does not accept a hash. Events with neither are not sent. Properties are flat strings and numbers for Flow filters and merge tags; the currency is upper-cased; external_id carries the Signal message ID.
| Datafly event | Vendor event / call | Fields |
|---|---|---|
page | page_view | page_url, page_title, page_referrer |
view_item | product_viewed | product_id, product_name, price, currency, product_url |
add_to_cart | add_to_cart | product_id, product_name, price, currency, product_url, quantity, value |
begin_checkout | checkout_started | value, currency, coupon, checkout_url |
purchase | order_completed | order_id, value, currency, tax, shipping, coupon |
sign_up | signed_up | method |
Retail / E-commerce (ecommerce)
Postscript Custom Events (POST /api/v2/events) to trigger SMS Flows. Each event names the subscriber by phone (E.164) and/or email (trimmed, lowercased); both are sent in plain text because Postscript matches the subscriber on them (phone first, then email) and does not accept a hash. Events with neither are not sent. Properties are flat strings and numbers for Flow filters and merge tags; the currency is upper-cased; external_id carries the Signal message ID. The retail preset adds wishlist and search events.
| Datafly event | Vendor event / call | Fields |
|---|---|---|
page | page_view | page_url, page_title, page_referrer |
view_item | product_viewed | product_id, product_name, price, currency, product_url |
add_to_cart | add_to_cart | product_id, product_name, price, currency, product_url, quantity, value |
begin_checkout | checkout_started | value, currency, coupon, checkout_url |
purchase | order_completed | order_id, value, currency, tax, shipping, coupon |
sign_up | signed_up | method |
add_to_wishlist | added_to_wishlist | product_id, product_name, price, currency, product_url |
search | searched | search_term |
An identified purchase (preset default) is delivered as:
POST https://api.postscript.io/api/v2/events{
"email": "jane.doe@example.com",
"external_id": "3f2b8c1e-9d4a-4e7b-8f6a-2c1d0e9b7a65",
"occurred_at": "2025-09-23 04:00:00.123000",
"phone": "+447700900123",
"properties": {
"coupon": "SUMMER",
"currency": "GBP",
"order_id": "T-1001",
"shipping": 4.99,
"tax": 73.33,
"value": 439.99
},
"type": "order_completed"
}Testing
- Send a test event through your pipeline (for example, complete a test order) for a visitor whose phone or email matches an existing Postscript subscriber.
- In Postscript, open the subscriber’s profile or Flows activity and confirm the event appears as
[Your Shop] - order_completed. - Build or edit a Flow triggered by the custom event and confirm the
propertiesvalues resolve in merge tags.
Troubleshooting
- 400 Bad Request — the event had no resolvable subscriber identifier (no
phoneoremail), ortypecontained characters other than letters, numbers, and underscores. Confirm identity is flowing and the event maps to a validtype. - 401 / 403 Unauthorized — the Private API Key is wrong, revoked, or you pasted the Public key. Regenerate the Private key in Account > API and update the integration.
- Event not triggering a Flow — confirm the Flow trigger matches the prefixed event name (
[Your Shop] - <type>) and that the subscriber is opted in to SMS. Postscript only sends to subscribers who have consented; the event API does not override SMS consent state. - Subscriber not matched — verify the phone is in E.164 (
+and country code). Postscript matches on the raw value, so formatting differences can prevent a match.