Reference

Full API reference

Every public endpoint in one place. Base URL https://api.meisa.io/api/v1, auth via the X-API-Key header. For an exhaustive, paste-ready spec, see /llms-full.txt.

Endpoints

GET/ping/scope: any key

Verify a key and see its scopes, environment, and product.

POST/contacts/upsert/scope: contacts:write

Create or update a contact by email/external_id. custom_fields are merged.

body: email (req), external_id, first_name, last_name, display_name, source, custom_fields, tag_names

Details →
GET/contacts/api/unsubscribed-emails/scope: contacts:read

List addresses you must not email (unsubscribed/bounced/complained).

Details →
POST/contacts/{id}/add_tag/scope: contacts:write

Add a tag to a contact (created if absent).

body: tag_name OR tag_id

Details →
POST/contacts/{id}/remove_tag/scope: contacts:write

Remove a tag from a contact.

body: tag_name OR tag_id

Details →
POST/events/track/scope: events:track

Record a custom event for a contact; can fire automations.

body: event_name (req), email|external_id (one req), properties

Details →
POST/sequences/enroll/scope: sequences:enroll

Enroll a contact in an active sequence by slug.

body: email (req), sequence_slug (req), metadata, trigger_source, override_unsubscribe

Details →
POST/sequences/api/bulk-enroll/scope: sequences:enroll

Enroll up to 500 emails in a sequence.

body: sequence_slug (req), emails (req, max 500), override_unsubscribe

Details →
GET/sequences/api/list/scope: sequences:read

List sequences and their slugs (active by default).

Details →
GET/sequences/api/contact-enrollments/scope: sequences:read

List a contact's sequence enrollments (by ?email=).

Details →
POST/emails/trigger/scope: emails:trigger

Send a transactional email via a dashboard-configured trigger.

body: trigger_key (req), to_email (req), variables, recipient, idempotency_key

Details →

cURL: verify your key

ping
curl "https://api.meisa.io/api/v1/ping/" -H "X-API-Key: meisa_live_your_key"

Not in the API

Broadcasts/campaigns (dashboard or MCP only), creating templates/triggers/sequences/automations (dashboard only), and outbound webhooks are not part of the REST API. The tags:write scope exists but tag changes use contacts:write.