Improvements
Reputation Management
Businesses can now view and generate permanent review links
Added a review configuration page, which allows businesses to customize their public review pages.
Launched the GET /businesses/:id/review_embed_config
and POST /businesses/:id/review_embed_config
endpoints to allow for viewing and updating of the review configuration.
SMBs can generate short and shareable links to collect reviews
Campaign Test Sending - Added the ability to test-send campaigns to preview all the steps of the campaign
Added the ability to copy existing email templates as project email templates within the Pocketflows dashboard.
Added a new endpoint GET /customers/:id/segments
to retrieve segments associated with a customer.
Added a new endpoint GET /campaigns/:id/variables
to retrieve all variables associated with a given campaign.
Product Launches
In Beta: Reputation Management
Our reputation management module is now in beta!
Enable your businesses to manage reviews across a number of channels, including their own internal reviews, Google, and Yelp
New endpoints:
GET /reviews
: List all reviews.
POST /reviews
: Create a new internal review.
POST /reviews/{review_id}/response
: Respond to a specific review.
Review Embeds
Along with the API capabilities, we launch new UIs into the customizable embed to view the reviews and connect accounts
Internal Event: Customer Joined Segment
Triggers can now be set up to respond to the customer_joined_segment
event, enabling automated actions when customers enter specific segments.
Improvements
The customizable embed now has a Segments page where SMBs can build dynamic segments of their customer base
Segments can now simultaneously have a filter
and static_customers
. The filter is first evaluated to include customers then all static_customers
are manually included
Enhanced the RequestLog
to track request duration in milliseconds.
Bug Fixes
Addressed a bug preventing campaign templates from loading in the dashboard
Resolved an issue with the clicked count for emails from GET /businesses/:id/campaigns
Fixed a bug with segment deletion
Product Launches
Excluded Users for Campaigns and Triggers
You can now exclude specific customers from campaigns and triggers, preventing them from receiving communications
Pass them via the excluded_customers
field or do so via the embedded UIs
Analytics in the Customizable Embed
Analytics are now displayed in the index pages for campaigns and triggers
Detailed analytics and steps are now available via tabs within the show pages for campaigns and triggers.
Improvements
Link tracking and rewriting is now supported in plain text emails
Added safeguards to prevent accidental discards of unsaved work in email and campaign creation
Bug Fixes
Resolved an issue that prevented deleting campaigns and triggers
Resolved spurious 500 errors on our /sync
endpoints
Product Launches
Trigger Templates
Similar to campaign templates, we now support trigger templates. Partners may use these to suggest event-based automations to their small businesses
Create new trigger templates based off any of the existing triggers within your small businesses
Improvements
For convenience, you can create new embeds for a business directly from the dashboard
Bug Fixes
Addressed an issue where customizable embeds could not load email addresses
Fixed an issue preventing campaign and trigger deletion
Product Launches
Triggers in the Customizable Embed
Create, edit, and view triggers directly within the customizable embed - those created with POST /businesses/:id/embeds
Revamped Webhooks
Projects can now define multiple webhooks
Webhooks can also have custom headers specified
Improvements
We have improved our email address validation during customer creation and updating
The campaign editor within the custommizable embed has been improved to align with the trigger editing experience
Bug Fixes
Fixed a bug that prevented trigger creation when custom steps were present but no sending email address was selected.
Improved handling of empty string payloads when creating/updating customers via various API endpoints.
Product Launches
Internal Event Triggering
You can now define Trigger
s off of InternalEvent
s. The first supported InternalEvent
is customer_created
which fires whenever a new customer is created via POST /businesses/:id/customers
or POST /sync/businesses/:id/customers
Improvements
Businesses within test projects are automatically provisioned email addresses so they are ready to send campaigns immediately
You can now configure colors for the business embeds (those created via POST /businesses/:id/embeds
). Configure them in the dashboard to help you better align with your brand
We've added a new endpoint GET /customers/:id/unsubscribe_info
to show which campaigns and triggers a customer has unsubscribed from
The dashboard now allows for greater visibility and management of project-defined events, including creation and display text editing. Manage them here
Both Campaign
and Trigger
objects returned from endpoints now surface the count of executed custom steps. See the statistics.custom_steps
field
Bug Fixes
Resolved an issue with deleting customers
Resolved an issue with deleting campaigns
Product Launches
Campaign Templates
Campaign templates allow partners to create and display suggestions for campaigns to all of their small businesses
You can create campaign templates from any of the campaigns that your small businesses have already created
URL Shortening Service & Analytics
Launched a new URL shortening and redirect service to create shorter, more manageable links
We can now track clicks on links from within emails to further monitor engagement
Improvements
You can now view all the campaigns and triggers for all the businesses within your test and live projects
Bug Fixes
Resolved an issue where project email templates were not viewable or editable in the dashboard.
Resolved an issue with tracking sent custom steps
Product Launches
The new POST /businesses/:id/embeds
is the fastest way to get started with the Pocketflows API. Generating an embed gives you an iframe
which allows you to edit campaigns and email templates. Future customizations will become available!
Improvements
Project email addresses are now visible in the dashboard for projects and their sub-businesses.
The UI for campaigns now has the ability to schedule the start and end of campaigns
The segment filter syntax now supports the has
operator. Use this operator to test whether an object has a key present, e.g. has(customer.key)
The speed of segment filtering has been improved
Bug Fixes
Fixed some issues with business deletion
Product launches
You can now set email address Reply-To
s 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 metadata
. metadata
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 FilterDefinition
s 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