Customer.io is now available as a Meshes destination. Use it to identify people, sync customer traits, and track behavioral events from the product events your app already emits to Meshes.
The Customer.io integration helps lifecycle, growth, and product teams keep Customer.io profiles and campaigns aligned with real product activity.
userId, email, or anonymousId.event_name_override.A user.signup event can identify the new profile in Customer.io, attach traits like email, plan, and first_name, and record the signup event so Customer.io campaigns and segments can react to it.
Create a Customer.io connection, add a rule for the event you want to send, map the identity fields, and use Send Test Event to verify the delivery. See the Customer.io docs for the setup flow and field mapping details.
Discord is now available as a connection type in Meshes. Add the Meshes bot to your Discord server, pick the destination channel in the rule builder, configure an embed title and message template, and Meshes handles delivery with retries.
Each rule targeting a Discord connection includes a live channel picker backed by the connected server. After the bot is authorized, Meshes loads the available text and announcement channels so you can route each event to the right destination without hardcoded channel IDs.
Discord rules use a required embed title plus a message template with {{field}} interpolation. When an event fires, Meshes renders the title and body from the event payload and posts a rich embed to the selected channel.
Example rule values:
Title: Payment failed
Template:
Customer: {{customer.email}}
Plan: {{plan}}
Retry at: {{retry_at}}
Templates support nested field access such as {{user.name}}, so Discord notifications can stay concise while still carrying the product context your team needs.
Discord is the latest supported integration, joining HubSpot, Salesforce, Intercom, Mailchimp, ActiveCampaign, Resend, Zoom, AWeber, MailerLite, Slack, and Webhooks.
SendGrid is now available as a connection type in Meshes. You can connect a SendGrid account with an API key, select a Dynamic Template in the rule builder, or send an inline HTML email directly from the event that should trigger the message.
This integration supports two actions: Send Email (Template) for SendGrid Dynamic Templates and Send Email for inline HTML delivery. That means welcome emails, trial onboarding prompts, billing confirmations, and other transactional sends can all run from the same product events you already route to the rest of your stack.
No custom SendGrid worker is required. Create the connection in Connections -> New Connection -> SendGrid, add a rule for the event you care about, map email plus any template_variables you need, and Meshes handles the delivery path.
ActiveCampaign connections now support a Sync Contact action alongside the existing list and tag actions.
Sync Contact creates or updates the contact record in ActiveCampaign using the fields mapped in your Meshes rule. Unlike the list and tag actions, it does not require selecting a target list or tag — the mapped fields are the entire operation. This is useful when the goal is keeping contact data current without triggering list-based or tag-based automation.
email, firstName, lastName, phone) and custom fields from the connected account.email is required for all ActiveCampaign contact actions, including Sync Contact.
Meshes webhooks are no longer config-only. Every webhook connection now supports authenticated, signed delivery with full control over how the request reaches your endpoint.
Attach credentials to every webhook request. Choose from:
Authorization: Basic header from a username and passwordAuthorization: Bearer headerX-API-KeyAll credentials are encrypted at rest and never returned in plaintext after they are saved.
Enable HMAC-SHA256 or HMAC-SHA512 so your endpoint can cryptographically verify that every request body came from Meshes and has not been tampered with. The signature is computed from the exact bytes sent and attached in a configurable header (default X-Meshes-Signature). Signing is independent of authentication — use both together for defense in depth.
Add up to five static headers to every request for routing keys, tenant identifiers, or any metadata your endpoint expects.
Choose Wrapped to send the full Meshes event envelope, or Raw to send only the payload object. In raw mode, event metadata is promoted to X-Meshes-* HTTP headers so your endpoint can still access the event ID, name, resource, and timestamps.
Select POST, PUT, or PATCH per connection. The default is POST.
Meshes embed sessions now support two new additive access shapes on top of the existing workspace session model.
resource + resource_id pairlaunch_page replaces raw launch paths with a small initial-page enumdashboard, rules, or eventsdashboardlaunch_page instead of raw route stringssession_type when minting a sessionresource and resource_id only for resource sessionsYou can now embed key Meshes workspace pages directly inside your own product with session-based access and an iframe-ready launch flow.
This release adds a new embedded workspace surface for teams that want to expose integrations to their own customers without sending them to a separate admin app. Your backend mints a short-lived session, your frontend mounts the returned launch_url, and the embedded experience handles refresh, navigation, and resizing through a small postMessage contract.
POST /api/v1/sessions and POST /api/v1/sessions/:sessionId/refreshevents.payload:read session scopelaunch_urlmeshes:readymeshes:auth with the current access_tokenSlack is now available as a connection type in Meshes. Connect your Slack workspace via OAuth, pick a destination channel, configure a message template, and Meshes handles delivery with retries.
Each rule targeting a Slack connection includes a message template with {{field}} interpolation. When an event fires, Meshes renders the template with the event payload and posts to the configured channel.
Example template:
🎉 New signup: {{email}}
Plan: {{plan}}
Source: {{source}}
Templates support Slack markdown formatting and nested field access via dot notation (e.g., {{user.name}}). Missing fields render as empty strings rather than broken template syntax.
Slack is the latest supported integration, joining HubSpot, Salesforce, Intercom, Mailchimp, ActiveCampaign, Resend, Zoom, AWeber, MailerLite, and Webhooks.
Rule actions now support a textarea field type for multiline input. This powers Slack's message template editor and is available for any integration that needs multiline configuration in rule setup.
Previously, rule action fields only supported single-line text and password inputs. The new textarea type renders a resizable monospace text area in the rule configuration form - useful for templates, message bodies, or any structured text input.
This is a platform-level change, not specific to Slack. Any integration can now define a kind: "field" action data entry with type: "textarea" and get multiline input in the rule form automatically.
Meshes is now live with paid plans. Send product events from your app and route them to HubSpot, Salesforce, Intercom, Mailchimp, ActiveCampaign, Resend, Zoom, AWeber, MailerLite, and custom webhooks — with retries, deduplication, and delivery guarantees built in.
Sign up at meshes.io and send your first event in minutes. The Developer tier is free — 100 events/month, 1 workspace, 3 connections. Card required to activate your account.
Paid plans start at $49/mo (Builder) with annual pricing available with 2 months free.
When a product event lands in a destination, you should know exactly what happened — not just whether it ended up green or red. This release turns every event in Meshes into a full delivery story, attempt by attempt, with the controls to act on what you find.
Open any event in the dashboard and each routing rule now expands inline to show the full attempt history. You can see the order things happened in, how long each attempt took, what the destination said, and which attempt finally succeeded or what is still being retried. Failed attempts that captured a response from the destination expose that response on demand, so debugging a flaky webhook or a misconfigured CRM no longer means digging through your own logs to figure out what Meshes saw.
Attempts now carry a structured outcome — delivered, rate limited, auth failure, timeout, server error, and others — so you can tell apart a transient destination blip from a credential problem from a mapping mistake at a glance. The same outcome flows through the API, so dashboards, automations, and support tooling can react to specific failure modes instead of treating every red row the same. The full list of outcome codes is in the API reference.
Event and rule status now distinguishes work that is actively being retried from work that has stopped. Retrying means a previous attempt failed but Meshes will try again; canceled means delivery has been stopped on purpose and will not resume. Combined with the new countdown that shows when the next attempt will fire, you always know whether an event is making progress or sitting still.
Two new controls live directly on the event detail page:
Both actions require workspace edit permission. Per-rule cancel and retry-now are available in embedded Meshes experiences your customers see in your own product; event-scope cancel stays inside your team's own dashboard.
The event and rule status enums now include retrying and canceled in addition to the existing values. The change is additive — existing responses still parse — but consumers that do an exhaustive switch on status should add branches for the two new values. Attempts written before this release do not carry an outcome code, so SDK clients should treat that field as optional.
Pipedrive is now available as a Meshes destination. Connect a Pipedrive account with OAuth and route product events into Person records and labels without building a separate Pipedrive sync path in your app.
The Pipedrive integration focuses on Person updates driven by the events you already send through Meshes.
Sync Person creates or updates a Pipedrive Person by email.Update Person Field syncs the mapped Person data and sets one supported editable Person field from the connected account.Add Label to Person and Remove Label from Person sync the mapped Person data and keep Person labels aligned with lifecycle and product status changes.A trial.started event can create or update the Person in Pipedrive, set a lifecycle custom field, and add a Person label for the trial state. From there, Pipedrive automations can handle follow-up tasks, deal routing, or campaign enrollment based on those Person updates.
Create a Pipedrive connection, add a rule for the event you want to send, choose the Person action that fits the workflow, and map the fields Meshes should write. Use Send Test Event to verify the Person update before turning the rule on. See the Pipedrive docs for setup and mapping details.