Getting started
Quickstart
1. Get an API key
In the Meisa dashboard, open Settings → API Keys and create a key. Give it the scopes you need (for this quickstart: contacts:write and emails:trigger). Copy the key once; it's only shown at creation.
Keys look like meisa_live_…. Send the key in the X-API-Key header on every request. Keep it server-side; never ship it to a browser or mobile client.
2. Verify your key
Confirm the key works and see its scopes:
curl "https://api.meisa.io/api/v1/ping/" \
-H "X-API-Key: meisa_live_your_key"
# -> { "status": "ok", "api_key": { "name": "...", "scopes": [...] }, "product": {...} }3. Sync your first user
Push a user's current state. Use email as the key and your own user ID as external_id. Put product data in custom_fields.
curl -X POST "https://api.meisa.io/api/v1/contacts/upsert/" \
-H "X-API-Key: meisa_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"external_id": "usr_12345",
"first_name": "Sarah",
"custom_fields": {
"plan": "free",
"signup_date": "2026-06-02T10:00:00Z"
}
}'That's the whole sync. If your team has an automation watching for new contacts, it just enrolled this user in your onboarding sequence — no extra code from you.
4. Send a transactional email
First, in the dashboard, create a trigger (template + sender) and give it a trigger_key like verification_code. Then fire it:
curl -X POST "https://api.meisa.io/api/v1/emails/trigger/" \
-H "X-API-Key: meisa_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"trigger_key": "verification_code",
"to_email": "[email protected]",
"variables": { "name": "Sarah", "code": "294817" }
}'Where to go next
That's the core loop. Read Contacts & upsert to learn what to put in custom_fields, then How automations work to see how synced data drives tags, sequences, and emails.