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:

  1. Go to Account > API.
  2. Copy the Private API Key (sk_...).

Configure in Signal

  1. In the Signal management UI, open Integrations and add Postscript.
  2. Paste your Private API Key into the API Key field.
  3. Attach the Postscript integration to the pipeline that carries the events you want to trigger Flows.
  4. 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/json

A 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.

FieldSourceNotes
phonetraits.phoneE.164, matched first.
emailtraits.emailTrimmed and lowercased, matched second.
subscriber_idnot sentPostscript’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 eventVendor event / callFields
pagepage_viewpage_url, page_title, page_referrer
view_itemproduct_viewedproduct_id, product_name, price, currency, product_url
add_to_cartadd_to_cartproduct_id, product_name, price, currency, product_url, quantity, value
begin_checkoutcheckout_startedvalue, currency, coupon, checkout_url
purchaseorder_completedorder_id, value, currency, tax, shipping, coupon
sign_upsigned_upmethod

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 eventVendor event / callFields
pagepage_viewpage_url, page_title, page_referrer
view_itemproduct_viewedproduct_id, product_name, price, currency, product_url
add_to_cartadd_to_cartproduct_id, product_name, price, currency, product_url, quantity, value
begin_checkoutcheckout_startedvalue, currency, coupon, checkout_url
purchaseorder_completedorder_id, value, currency, tax, shipping, coupon
sign_upsigned_upmethod
add_to_wishlistadded_to_wishlistproduct_id, product_name, price, currency, product_url
searchsearchedsearch_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

  1. 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.
  2. In Postscript, open the subscriber’s profile or Flows activity and confirm the event appears as [Your Shop] - order_completed.
  3. Build or edit a Flow triggered by the custom event and confirm the properties values resolve in merge tags.

Troubleshooting

  • 400 Bad Request — the event had no resolvable subscriber identifier (no phone or email), or type contained characters other than letters, numbers, and underscores. Confirm identity is flowing and the event maps to a valid type.
  • 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.