Core
Sequences
You usually don't enroll from code
Prefer syncing state and letting an automation enroll the contact (e.g. "when a contact is created, enroll in onboarding"). Direct enrollment is here for the cases where your app is the right place to decide.
Enroll a contact
/sequences/enroll/scope: sequences:enrollEnrolls a contact in a sequence by its slug. The contact is auto-created if it doesn't exist. The sequence must be active.
| Field | Type | Description |
|---|---|---|
emailrequired | string | The contact to enroll (created if absent). |
sequence_slugrequired | string | The sequence's slug. Must be an active sequence (see list below). |
metadata | object | Optional data attached to the enrollment. |
trigger_source | string | Optional label for where the enrollment came from. Defaults to api. |
override_unsubscribe | boolean | Optional. Enroll even if normally suppressed. Use with care. |
curl -X POST "https://api.meisa.io/api/v1/sequences/enroll/" \
-H "X-API-Key: meisa_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"sequence_slug": "onboarding",
"metadata": { "signup_source": "website" }
}'A contact already active or paused in that sequence is rejected, so it's safe to call without double-enrolling.
Bulk enroll
/sequences/api/bulk-enroll/scope: sequences:enrollEnroll up to 500 emails at once. Already-enrolled and (unless overridden) suppressed addresses are skipped, and the response details each outcome.
curl -X POST "https://api.meisa.io/api/v1/sequences/api/bulk-enroll/" \
-H "X-API-Key: meisa_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"sequence_slug": "reactivation",
"emails": ["[email protected]", "[email protected]"]
}'List sequences
/sequences/api/list/scope: sequences:readLists sequences and their slugs so you know what to enroll into. By default returns active sequences; pass ?status=all for every status, or ?search= to filter by name.
curl "https://api.meisa.io/api/v1/sequences/api/list/" \
-H "X-API-Key: meisa_live_your_key"
# -> { "results": [ { "slug": "onboarding", "name": "Onboarding", "status": "active", "total_enrolled": 312 }, ... ] }Read a contact's enrollments
/sequences/api/contact-enrollments/scope: sequences:readPass ?email= to see every sequence a contact is in and its status. An unknown email returns contact_exists: false rather than a 404.
curl "https://api.meisa.io/api/v1/sequences/api/contact-enrollments/[email protected]" \
-H "X-API-Key: meisa_live_your_key"