POST request with a customer identifier and an optional payload, and Tappd queues the enrollment immediately. All of the journey’s steps — messages, delays, conditions, and webhooks — then execute according to the journey’s configured rules.
Prerequisites
Before you make your first API trigger call, make sure you have:- An API key — Generate one in Settings → API Keys inside the Tappd dashboard.
- An active journey — The journey must be published and configured with API as its trigger type.
- An existing customer — The customer must already exist in your workspace. Use the SDK’s
identify()method or the Customers API to create them first.
Endpoint
:workspaceId and :journeyId with the IDs found in your Tappd dashboard.
Request Parameters
Single Customer
Use these fields to trigger a journey for one customer at a time.Your internal user ID (also accepted as
externalId). This is the most common identifier to use — it matches the value you pass to identify() in the SDK.The customer’s email address. Use this as an alternative to
external_id when you only have the email available.The Tappd customer ID. Use this when you already have the Tappd customer record and want the most direct lookup.
A custom JSON object sent alongside the trigger (also accepted as
properties). Values are available in Liquid templates throughout the journey using {{ api.properties.* }} or {{ api.payload.* }}.Bulk Operations
Use these fields to enroll multiple customers in a single request.An array of your internal user IDs (also accepted as
externalIds). Maximum 1,000 entries. Customers whose IDs are not found are silently skipped — no error is returned for individual missing IDs.An array of Tappd segment IDs (also accepted as
segmentIds). Enrolls every customer who belongs to those segments. Maximum 10 segments per request. An invalid segment ID returns an error for the entire request.An array of external IDs to exclude from enrollment (also accepted as
excludeExternalIds). Applied after any intersection logic. Maximum 1,000 entries.A custom JSON object shared with all enrolled customers (also accepted as
properties). Available in Liquid templates as {{ api.properties.* }}.If you supply both
external_ids and segment_ids, only customers who appear in both sets are enrolled (intersection). Use exclude_external_ids to remove specific customers from the final list regardless of how they were matched.Code Examples
- cURL
- JavaScript / Node.js
- Python
Response Format
Single customer success:Error Responses
| Error | HTTP Status | Cause |
|---|---|---|
Customer not found | 404 | No customer matched the supplied external_id, email, or customerId |
Journey not found | 404 | The journey ID doesn’t exist or the journey is not active |
Invalid journey type | 400 | The journey’s trigger type is not set to API |
Missing required parameter | 400 | No customer identifier was supplied in the request body |
Array size exceeded | 400 | external_ids contains more than 1,000 entries |
Error resolving segments | 400 | One or more segment_ids don’t exist in the workspace |
Missing entries in the
external_ids array are silently skipped. Invalid segment_ids, however, fail the entire request — verify your segment IDs before sending bulk calls.Using Payload Data in Journeys
Thepayload (or properties) object you include in the trigger request is available in every Liquid template inside the journey.
Access payload values using either syntax:
Journey Configuration
Create a Journey
Open the Tappd dashboard and create a new journey, or open an existing draft journey.
Set Trigger Type to API
In the journey’s settings panel, set the Trigger Type to API. Only journeys with this trigger type can be started via the API endpoint.
Configure Entry Rules
Optionally, set entry rules to control how customers enter the journey:
- Maximum entries per customer — how many times a single customer can enroll
- Re-enrollment — whether customers can re-enter after completing the journey
- Entry conditions — additional attribute or event conditions that must be met before enrollment is confirmed
Add Steps
Build out the journey with messages, delays, conditions, webhooks, and any other steps your workflow requires.
Re-Enrollment Behavior
Understanding how re-enrollment works helps you avoid unexpected behavior when triggering the same journey for a customer more than once. Multiple entries allowed (maxEntriesPerCustomer > 1): If the customer has fewer completed entries than the maximum, any active enrollment is exited and a new one is created immediately.
Single entry only (maxEntriesPerCustomer is 1 or not set): If the customer has an active or completed enrollment, the API returns an “already enrolled” status. Enable re-enrollment in the journey settings to allow customers to re-enter after they complete the journey.
Rate Limiting
The Journey Trigger API enforces a limit of 100 requests per minute per API key. Requests that exceed this limit receive a429 Too Many Requests response. Check the rate limit headers in the response to track your current usage and implement exponential backoff in high-volume scenarios.
Use Cases
E-Commerce Order Confirmation
Trigger an order confirmation journey immediately after checkout completes. Pass order details — ID, total, items, shipping address — in the payload and use them to personalize every step.
Subscription Management
Fire a journey when a customer upgrades, downgrades, or cancels their subscription. Use the payload to tailor messaging based on their previous and new plan tiers.
Event Registration
Enroll registrants into a confirmation and reminder journey the moment they sign up for an event. Include event details in the payload so the messages feel personal and timely.
Webhook Integration (Stripe, etc.)
Receive a webhook from a payment processor or any third-party service and immediately enroll the customer in the appropriate journey — no manual intervention needed.