Changelog

  • Product launches

    • You can now set email address Reply-Tos from the Pocketflows dashboard. Visit the business manager and click into a business and one of its email addresses

  • Improvements and changes

    • Creating and updating customers via POST /businesses/:id/customers and POST /customers/:id no longer errors for duplicate email addresses and phone numbers because these are no longer required to be unique within Pocketflows

    • We’ve substantially improved the loading times on GET /businesses/:id/campaigns and GET /campaigns/:id

    • We’ve improved the performance of our campaign and trigger execution infrastructure

  • Bug fixes

    • Fixed issue where eliding phone_number from customer syncing endpoints caused errors

  • Product launches

    • Continuing with automated email provisioning, we can now automatically provision non-HIPAA email addresses for all your newly created businesses. Talk to the team to learn more

    • The Pocketflows dashboard now has business management. View the businesses within your projects and their associated email addresses. You can also use this to delete businesses

  • Improvements and changes

    • Now that we have our new POST /sync/* endpoints available with external_id, we have relaxed our unique constraints around email addresses and phone numbers within a business. Customers can now share email addresses and phone number within a business although external_id remains as the uniqueness identifier. Certain batch endpoints still de-duplicate on email addresses and phone number for backwards compatibility

  • Bug fixes

    • Customer batch syncing via POST /sync/businesses/:id/customers/batch now properly supports partial success. If one of the customers has an invalid phone number or email address, the rest of the customers still sync properly

  • Improvements and changes

    • Email templates, campaigns, and triggers now all support metadatametadata now returns from GET /objects/:id endpoints and can be passed to POST /businesses/:id/objects creations. Use the metadata field to add tags and other relevant filtering information to these objects

    • Rewards endpoints

      • You can now update individual tiers of rewards programs via POST /tiers/:id and GET /rewards_programs/:id/tiers returns Tiers in ascending point order

      • GET /customers/:id/rewards_profile and GET /businesses/:id/rewards_profiles to get the point totals and reward tier for an individual customers or all customers of a business!

  • Product launches

    • You can now access campaign and trigger execution information from GET /campaigns/:id/executions and GET /triggers/:id/executions. Use these to view the status of each customer associated with the campaign and see which steps they have already executed and which is next.

    • Pocketflows can now automatically provision HIPAA-compliant email addresses for your created businesses. Contact the team to learn more.

  • Product launches

    • There are new business and customer syncing endpoints available in beta! If you’re using POST /businesses or POST /businesses/:id/customers today, contact the team to learn more about the new syncing endpoints, which should vastly simplify the business and customer replication logic. General availability to follow soon!

  • Improvements and changes

    • The email editor now allows test-sending from business email addresses in addition to project email addresses

    • SMS templates

      • SMS templates also now support “one-offs”. Use this capability to create SMS templates that are only associated with a single campaign / trigger

      • SMS templates are intelligently rewritten to save on SMS segments!

      • The SMS template editor now displays SMS segment estimation as you compose your text message

  • Improvements and changes

    • When updating email blasts that have been sent/started via POST /email_blasts/:id, clients can now pass identical information for the name, email template, segment, and email address and not run into errors. It is still possible to add additional enrolled_customers. This removes the need to only pass the enrolled_customers parameter when updating email blasts that have been started

    • Improved onboarding experiences - we are rolling out improved onboarding experiences to our partners’ embeds. These include more expansive email template libraries and richer calls-to-action to drive more SMB engagement!

  • Product launches

    • Email addresses now support default warm-up schedules. When email addresses are provisioned, they enter a warm-up schedule that changes their daily sending limit depending on the number of emails they’ve sent. This protects SMBs from landing in spam while also growing their capacity to send marketing emails automatically

    • UTM parameters — Emails sent as part of campaigns, triggers, or email blasts now automatically inject query parameters onto all links contained in the email, a la ?pf_customer_id=?pf_business_id=?pf_campaign_id=. Use these parameters in tandem with your booking links to track the source of bookings and drive ROI calculations for the SMB’s marketing efforts

  • Improvements and changes

    • Serialization failures, e.g. when two different API calls attempt to modify the same object, now raise a 409 Conflict error, indicating that they are freely retryable. Before, we returned a 422 Unprocessable Entity error, which made the error appear identical to actual validation errors

  • Product launches

    • Business phone numbers are now available Fetch them via GET /businesses/:id/phone_numbers. Contact the team to provision them and learn more

  • Improvements and changes

    • We improved the speed of campaign execution

  • Bug fixes

    • We fixed a bug where certain valid phone numbers were being rejected as invalid

  • Product launches

    • We now support the creation of “one-off email templates! Create them either via:

      • POST /businesses/:id/email_templates and pass { ..., one_off: true } in the POST body

      • POST /email_templates/:id/copy_one_off to create a one-off copy of a business’s template in their template library

      • POST /project_email_templates/:id/copy_one_off to create a one-off copy of a project template One-off templates have the semantic that they belong to a business and can be attached to their campaigns, triggers, and email blasts, but they do not show up in the GET /businesses/:id/email_templates endpoint. We created one-off templates to support the use case of designing an email during campaign/trigger/email blast creation without it cluttering the business’s template library

    • Email addresses now support a Reply-To field. Marketing emails that are sent with this field set will receive replies at the address specified in the Reply-To field. Contact the team about setting this field on business or project email addresses

  • Improvements and changes

    • Stopping scheduled campaigns now restores them to draft status if they have not yet been sent

    • Triggers now also have a draft status. Once a trigger is activated, further deactivations move them to the inactive status instead

    • We improved the speed of trigger and event processing

    • Email blasts can now be deleted via DELETE /email_blasts/:id

    • The filter syntax (used in triggers and segment definitions) now supports lists. If customer metadata has array fields, you can check for membership a la "value" in customer.values_list

    • Trigger filtering (via the filter field in trigger creation/updating) now supports checking for customer segment membership via the induced field customer.segments. For example, to check if a customer is a member of segment with ID seg_123, you can now write "seg_123" in customer.segments

  • Bug fixes

    • Fixed a bug where certain email templates were not returning the proper set of variables, e.g. {{ customer.first_name }}

  • Product launches

    • Email analytics 📈

      • Campaigns now return counts for sent, delivered, opened, and bounced emails

      • Use these metrics to report on your email performance

      • Expect these analytics to soon be available on all Pocketflows marketing objects!

  • Improvements

    • You can now view “Last 30 Days” and “All Time” statistics for email and SMS sends in the Pocketflows dashboard

    • Triggers return clearer error messages when trying to edit steps after they are created

  • Bug fixes

    • Fixed incorrect campaign status computation for campaigns with attached customer segments

    • Fixed erroneous newline in SMS template previews

  • Product launches

    • We now return per-customer/per-email execution information for email blasts. Try GET /email_blasts/:id/executions to see the data!

  • Improvements and changes

    • We rewrote our email blast execution engine for faster sending and improved reliability

    • Performance improvements for estimating message segments as part of campaigns. Additionally, estimated segments are now opt-in: pass ?expand[]=estimated_message_segments to fetch them on campaigns

    • Metadata updates on businesses and customers have changed to a “full replace” semantic. This eases syncing concerns. Before, it was difficult to delete keys in metadata because API clients would need to compute the difference between the old and new metadata. Now, you can just pass the full metadata hash to update

    • Direct sends via /email_templates/:id/send now bypass daily sending limits to better support the “Test Send Email Template” use case

    • Campaigns and triggers now return created_at and updated_at timestamps

  • Product Launches

    • Custom steps

      • You can now define custom steps to be available in campaign and trigger creation

      • Custom steps behave like webhooks; define the endpoint and headers in the Pocketflows dashboard

      • We support SMS- and email-like custom steps

  • Improvements

    • Improved customer deletion handling with email blast models

  • Bug Fixes

    • Fixed a bug in the unsubscribe embed

  • Product Launches

    • You can now define and manage FilterDefinitions per business. Use these to define known values for customer metadata

  • Improvements

    • The filter language now supports .matches on strings and .exists and .map on arrays

    • API responses are now gzip compressed by default

    • Optimized the speed of updating enrolled customers on campaigns

  • Improvements

    • Email-send rescheduling due to daily email limits now more fairly distributes between all campaigns, email blasts, and triggers in the business

  • Bug Fixes

    • Events processing for triggers now supports customer being passed as an object with key id

  • Improvements

    • Triggers now support a secondary filter for additional filtering on the customer and event attributes

    • You can now copy email templates between your test and live projects

  • Bug Fixes

    • Updated SMS and email segment estimation on campaigns to account for missing email addresses and phone numbers

    • Fixed issue with preview images of empty SMS templates

  • Product Launches

    • MMS support

      • SMS templates now support an attached image! Maybe they’d be more aptly named SMS/MMS templates :P

      • Project phone numbers now support MMS sending as well

  • Bug Fixes

    • Fixed an issue with customer enrollment in email blasts

  • Improvements

    • The “Wait” step in triggers and campaigns has been enhanced with more intuitive controls

    • You can now remove steps from campaign drafts

    • Improved webhook delivery job handling

    • International numbers are now automatically skipped in campaign and trigger executions

    • Executions now automatically reschedule when email daily sending limits are reached

  • Product Launches

    • Email addresses now support daily sending limits. Utilize these to properly warm up domains for your customers and prevent their marketing emails from landing in spam

  • Improvements

    • In case of emergency, you can now halt sending across your entire project. Use with caution!

    • You can now create and manage project email templates in the Pocketflows dashboard!

  • Product Launches

    • We have a new email template editor! Speak with the team to have it turned on for your account. We maintain full backwards compatibility with the old editor

    • “Bring your own API key” - if you have already provisioned email addresses for your customers, Pocketflows can integrate into those existing addresses. Talk with the team to learn more

  • Bug Fixes

    • Resolved issues making copies of project email templates

  • Improvements

    • SMS and email usage

      • We now track SMS and email usage across all businesses. You can see how many SMS segments and emails each business has sent

      • Additionally, we return estimates for SMS and email usage in a given campaign

    • Added customer resubscribe functionality

    • Enhanced campaign and trigger template previews

    • Improved email test-sending dialogs in email template embeds

  • Bug Fixes

    • Fixed customer batch creation issues

  • Improvements

    • Enhanced unsubscribe system implementation

    • Email blasts can now define “one-off” email templates that will not be included in the business’s email template library

    • Performance

      • Vastly improved performance of customer batch creation and updates

      • Improved performance of campaign creation

    • You can now hide toasts in embeds by adding the hide_toasts=1 query param

    • Improved support for malformed IDs

  • Bug Fixes

    • Fixed Date conversions in filters

  • Product Launches

    • Email blasts

      • Email blasts are a pre-packaged primitive for sending a single email template to a set or segment of customers

      • You can now create and manage email blasts via API

      • Implemented HIPAA-compliant email sending with Paubox

      • Created comprehensive email blast system with creation, listing, and management features

      • Added email blast execution functionality

    • HIPAA-compliant email marketing

      • If you are in a HIPAA vertical, we now support sending HIPAA-compliant marketing emails. Talk to the team to learn more!

    • Project-Defined Events

      • You can now define triggerable events that will be shared across all the businesses you create in Pocketflows. Use these to create common triggers for your customer base

      • These project-defined events are now settable on triggers

  • Improvements

    • Improved batch customer creation with partial success handling

    • Added “Send test text” feature to SMS template embeds

    • The filter language that controls segments now supports array indexing and Date conversion

  • Bug Fixes

    • Fixed trigger creation validation issues

  • Product Launches

    • Dynamic segments

      • You can now create dynamic segments of customers based on flexible criteria! The syntax follows a subset of the Google CEL spec

      • You can read the computed customers in the segment via API

  • Improvements

    • Added support for numbers in our filter parser and evaluator

    • You can now update and expand segments attached to campaigns

    • Trigger updates

      • Like campaigns, you can now create embeds to create and update triggers

      • Trigger capabilities now match those of campaigns (e.g. step types)

      • There is now an embed to view a trigger

  • Bug Fixes

    • Fixed race condition in event processing

    • Fixed bug in iframe’d campaign embed customer selection

  • Product launches

    • You can send arbitrary business-specific events to Pocketflows. These events are used to trigger sequences. Find the full documentation for events here

  • Improvements

    • You can now activate and deactivate triggers

    • There is a new embeddable view for previewing campaigns that is more interactive — supports panning and zooming

  • Product launches

    • We now have embeddable SMS template editors! Like our email template editor, you can now embed an iframe to enable visual editing of SMS templates with variable support. Find full documentation here

    • You can now create triggerable sequences! Specify an event (really just a string) and a sequence of messages to follow after it. When Pocketflows receives that event with a customer attached, the customer will automatically start receiving the sequence of messages. View the full documention here

  • Bug fixes

    • Fixed an issue with draft sending and sending from SMS templates