Docs/Integrations

Integrations

Connect Modality to the tools you already use, for taking payments, sending email and SMS, publishing to social, syncing calendars, and streaming data to your own systems. Everything is managed from a single Settings → Integrations page, with providers grouped by category and a filter bar to narrow the list.

The Integrations page, the category filter pills across the top, the flat grid of provider cards (Stripe, Brevo, Mailchimp, Klaviyo, Twilio, Instagram, and more) each with Connect / Active state, and the 'Coming from another ticketing platform?' migration banner.
The Integrations page, the category filter pills across the top, the flat grid of provider cards (Stripe, Brevo, Mailchimp, Klaviyo, Twilio, Instagram, and more) each with Connect / Active state, and the 'Coming from another ticketing platform?' migration banner.
Connected credentials are stored per workspace and never shown back in full, API keys and tokens are masked to their last four characters everywhere they're displayed. Some categories (email, SMS, social, automations) are gated to paid plans; the CRM and events core is always free.

Stripe (Payments)

Stripe powers every payment in Modality, online ticket checkout, paid form fields, and in-person box-office sales. Modality connects you through Stripe Connect as a platform partner (Paradox Analytics): you get your own connected Stripe account, customer charges run directly against it, and payouts go straight to your bank, Modality never holds your funds.

Embedded Onboarding

Connecting happens inside Modality with Stripe's embedded onboarding component, no full redirect out to Stripe in the normal flow.

  1. 1

    Open the Stripe card

    Go to Settings → Integrations and click Connect on the Stripe card. A dialog opens with Stripe's embedded onboarding form.

  2. 2

    Create or link a Stripe account

    Modality creates a Stripe Connect account for your workspace behind the scenes, then mounts Stripe's hosted onboarding. Enter (or connect an existing) Stripe account: business details, bank account for payouts, and identity verification. Everything stays inside the dialog.

  3. 3

    Submit for verification

    When you finish, Stripe records your details. The connection is considered complete the moment your details are submitted, you don't have to wait on the dialog.

  4. 4

    Payments activate automatically

    Stripe's charges_enabled check often lags submission by seconds to minutes. During that window the card shows Verifying; Modality polls Stripe in the background and flips the card to Active on its own once charges are enabled, no manual retrying.

If a publishable key isn't available in the browser, Modality falls back to Stripe's redirect-based onboarding (an Account Link) that returns you to the Integrations page. Either path produces the same connected Standard account.

GIF: clicking Connect on the Stripe card, Stripe's embedded onboarding form mounting inside the dialog (business details → bank for payouts → identity), then the card settling from 'Verifying' to 'Active'.

Demo GIF / screenshot to be added

Fees & Payouts

  • Direct charges, paid sales are charged on your connected account, so Stripe pays out to your bank on Stripe's normal schedule.
  • Platform service fee, Modality collects a small application fee (0.5%–1.9% depending on your plan) on paid orders. Free tickets and $0 orders carry no fee.
  • Stripe processing fees, Stripe's own card fees (2.9% + $0.30 in the US) apply on top and are surfaced to the buyer as part of the service fee at checkout.
  • Payment methods, cards, Apple Pay, Google Pay, Cash App, Venmo, and more, per your Stripe account's enabled methods.

The same connected account also underpins in-person card payments, the Stripe Terminal location used by Tap to Pay and card readers is created on it (see Events & Ticketing → Box Office). Disconnecting Stripe removes the stored account reference from your workspace; paid checkout is then blocked with a clear message until you reconnect. Free events work without Stripe.

Email Service Providers

Connect an ESP to route campaign sends through their infrastructure and keep your contacts in sync. Modality supports three: Brevo, Mailchimp, and Klaviyo. Each connected ESP becomes a selectable sending provider when you build a campaign.

How Each One Authenticates

  • Brevo, API key. Paste your key; Modality validates it and reads your lists and templates.
  • Mailchimp, OAuth. Click Connect, authorize in Mailchimp, and you're returned to Modality. Modality also reads your account's data-center so API calls hit the right region.
  • Klaviyo, OAuth with PKCE (not a plain API key). Click Connect, authorize the requested scopes in Klaviyo, and the access/refresh tokens are stored and auto-refreshed before they expire.
The OAuth providers (Mailchimp, Klaviyo) also offer a "Use API key instead" fallback in the connect dialog if you'd rather paste a key than run the redirect flow.

How to Connect an ESP

  1. Go to Settings → Integrations and find the ESP you want.
  2. Click Connect. For Brevo, paste your API key; for Mailchimp/Klaviyo, complete the OAuth flow (or use the API-key fallback).
  3. Modality tests the credentials and fetches your account's lists/audiences.
  4. Optionally pick a default audience list to map contacts into.
  5. Once connected, the ESP appears as a sending option when creating campaigns, and contact sync is available.
The ESP connect dialog for Klaviyo, the 'Connect with Klaviyo' OAuth button, the 'Use API key instead' fallback link, and (after connecting) the optional default-audience-list picker.
The ESP connect dialog for Klaviyo, the 'Connect with Klaviyo' OAuth button, the 'Use API key instead' fallback link, and (after connecting) the optional default-audience-list picker.

Contact Sync (Push to Your ESP)

Contact sync is one-directional: Modality pushes contacts out to your connected ESPs. Modality is the source of truth for segmentation, the ESP is a delivery destination, not a two-way mirror.

  • On change, when a contact is created or updated in Modality, it's pushed to every active integration in the background (fire-and-forget; failures are logged, never blocking).
  • What's sent, email address (the match key), first and last name, and the contact's tag names.
  • Bulk sync, the Sync button on a connected ESP card pushes all of your workspace's contacts to that provider, processed in batches of 50, and reports how many synced.
Because sync is push-only, Modality does not pull audiences, unsubscribes, or bounces back from the ESP through this path. Manage suppression where you send: unsubscribes on Modality's native sends are handled by Modality; unsubscribes inside your ESP's own sends are handled there.

Twilio (SMS)

Bring your own Twilio account to send campaign and transactional SMS/MMS from your own number. Connect it from the Twilio card with a short multi-field form.

  • Account SID and Auth Token, from your Twilio Console dashboard (Account Info).
  • Twilio phone number, in E.164 format (e.g. +15551234567).
  • Messaging Service SID (optional, under Advanced), use a Messaging Service for higher throughput and multiple sender numbers.

Modality authenticates to Twilio with these credentials (an API Key SID/secret pair is used automatically when present, which Twilio recommends over the root Auth Token). Every outbound message appends a Reply STOP to unsubscribe notice.

A connected (BYO) Twilio account is the primary SMS sender and is not metered against your plan. If you don't connect Twilio, eligible SMS can still go out through Modality's platform sender, metered against your plan's SMS quota. Consent is your responsibility, only message opted-in numbers.
The Twilio connect dialog, Account SID, Auth Token, and Twilio phone number fields, with the collapsible 'Advanced options' revealing the Messaging Service SID.
The Twilio connect dialog, Account SID, Auth Token, and Twilio phone number fields, with the collapsible 'Advanced options' revealing the Messaging Service SID.

Social Publishing

Connect social accounts to publish posts (and reels/videos) about your events and pull engagement back into the CRM. All social integrations use OAuth.

  • Instagram, posts and Reels plus engagement. Requires a Business or Creator account linked to a Facebook Page.
  • Facebook, post to a Facebook Page (Meta doesn't allow posting to personal profiles).
  • TikTok, publish videos and track engagement. Requires a TikTok Business account.
  • X (Twitter) and LinkedIn, implemented and marked Coming Soon until their developer apps are provisioned.

Publishing lets you attach text, media, and a link; connectors also report per-post engagement (likes, comments, shares, reach/impressions). Where a platform supports it, Modality can fetch comments on a published post and match commenters to CRM contacts, the basis for turning social replies into leads.

The Social category on the Integrations page, Instagram, Facebook, and TikTok connectable via OAuth, with X and LinkedIn showing the 'Soon' badge.
The Social category on the Integrations page, Instagram, Facebook, and TikTok connectable via OAuth, with X and LinkedIn showing the 'Soon' badge.

Import from Another Ticketing Platform

Moving to Modality? The migration wizard at Integrations → Import (the "Coming from another ticketing platform?" banner) brings your events, attendees, and orders across. It's a guided four-step flow: pick a source, connect, preview and select events, then import.

Supported Sources

  • Ticket Tailor, API key (Box office settings → API).
  • TicketSpice, API key (Pages → Extras → Integrations → API Keys).
  • TicketsCandy, bearer key plus the event IDs to import (TicketsCandy can't list events over its API), with an optional API base URL.
  • TicketLeap, export your attendee/sales report to CSV and upload it.
  • Any other platform (CSV), upload a CSV export from any tool and map the columns (event title and attendee email are required; name, ticket type, order reference, amount, and event date are optional).

How the Import Behaves

  • Idempotent, events, orders, and tickets are keyed on their source + external id, so re-running never creates duplicates.
  • Silent, imported attendees become People records with no emails, notifications, or ESP sync (it's a quiet migration).
  • Safe by default, imported events land unlisted (and draft, or completed if already past). Nothing publishes to Discover or Google until you deliberately publish it.
  • Orders & tickets, orders are stamped with the IMPORT channel and an EXTERNAL payment method; checked-in tickets carry over as used.
  • Async with progress, the import runs as a background job you can watch (events / orders / attendees counts), and it keeps running if you leave the page. CSVs are capped at 20,000 rows.
The import wizard, choosing a source (Ticket Tailor / TicketSpice / TicketsCandy / TicketLeap / CSV), connecting, the preview list of found events with select-all, and the live 'Importing…' progress counting up events, orders, and attendees.
The import wizard, choosing a source (Ticket Tailor / TicketSpice / TicketsCandy / TicketLeap / CSV), connecting, the preview list of found events with select-all, and the live 'Importing…' progress counting up events, orders, and attendees.

Google Calendar

Connect Google Calendar over OAuth (with offline access so Modality can refresh its token). Tasks that have a due date sync out as all-day calendar events, and status changes update or remove them, a two-way sync for your task workflow.

Slack

Paste an incoming webhook URL from your Slack workspace to post Modality notifications into a channel. Modality sends a confirmation message when you connect so you can verify the webhook works.

Google Analytics

Enter a GA4 Measurement ID (G-XXXXXXXXXX). Modality injects the gtag.js snippet into your public pages, event pages and form pages, so you can track visits and conversions in your own Google Analytics property. Nothing is sent to Modality; the tag reports straight to Google.

Webhooks

Stream real-time data to any URL. Add an endpoint and Modality POSTs a JSON payload ({ event, timestamp, data }) whenever a subscribed event fires. Provide an optional signing secret and Modality signs each payload with an HMAC-SHA256 signature so your receiver can verify authenticity. A test test.ping is sent when you connect.

Events currently dispatched:

  • contact.created, contact.updated, contact.status_changed, contact.deleted
  • event.created, event.updated, event.deleted
  • form.submitted

Music Embeds (Spotify & Apple Music)

Spotify and Apple Music don't require a connection flow, they work automatically. Paste a Spotify or Apple Music URL onto an artist profile or into an event's lineup and the player renders on the public event page.

The Connector Framework

Under the hood, integrations implement one of a few shared interfaces so behavior is consistent across providers. Email providers (Brevo, Mailchimp, Klaviyo) implement the Connector interface; SMS and social have their own parallel interfaces; and lightweight integrations (Stripe, Slack, webhooks, Google Analytics, music) register a simple connection test rather than the full interface.

The Connector Interface (Email)

Every ESP connector implements:

  • testConnection, validate the stored credentials.
  • syncContact, push a contact (email, name, tags) to the provider.
  • syncAudience, push a list/segment of contacts to a provider list.
  • getLists, read the provider's lists/audiences.
  • getTemplates, read available email templates.
  • createCampaign, create a campaign (draft) in the provider.
  • sendCampaign, send or schedule that campaign.
  • getCampaignStats, pull back sends, opens, clicks, bounces, unsubscribes, and rates.

Connectors may also implement optional capabilities where the provider supports them, reading a template's or campaign's HTML and metadata, listing merge tags, listing existing campaigns to link, and building, starting, and triggering automation workflows.

Sibling Interfaces

  • SmsConnector (Twilio), testConnection and sendSms.
  • SocialConnector (Instagram, Facebook, X, LinkedIn, TikTok), test, list accounts/pages, publish a post, read post engagement, and (optionally) fetch comments.
  • Simple testers, Stripe, Slack, Webhooks, Google Analytics, Spotify, and Apple Music register just a connection check.
Because ESPs share the Connector interface, you can switch providers without changing your campaigns or automations, disconnect one, connect another, and re-select it as a campaign's sending target. Modality also has native sending (email via Resend; SMS via Twilio) that you can use alongside an ESP: each campaign independently picks its sending provider.

Managing Your Integrations

  • One page, everything lives at Settings → Integrations, with category filter pills and a "connected / available" count.
  • Status at a glance, each card shows Connect, Active, Verifying (Stripe), or Soon.
  • Disconnect anytime, disconnecting deactivates the integration and clears its stored config; Stripe disconnect removes the connected-account reference from your workspace.
  • Masked secrets, API keys and tokens are always displayed masked to their last four characters.