Send a contact event
Identifies a contact by email, creates or updates it, and starts every active automation whose trigger listens for the event.
| Event | Contact must exist | What it does |
|---|---|---|
contact_added | no | Creates the contact, or updates name and replaces metadata of an existing one. |
contact_updated | yes | Updates name and locale, merges metadata into the contact's metadata. |
tag_added | yes | Adds metadata.tags to the contact's tags, without duplicates. |
order_created | no, created if missing | Starts automations listening for purchases. |
event_triggered | no, created if missing | A custom event; carry your own data in metadata. |
bearerAuthAuthorizationBearer <token>An API key from Workspace → API Keys, starting with snl_.
application/json- body
event*string"contact_added""contact_updated""tag_added""order_created""event_triggered"email*stringemailname?stringlocale?stringThe contact's locale. Automations send the trigger's template for it.
metadata?Contact attributes. For tag_added, metadata.tags is an array of strings.
The event was applied and matching automations were started.
application/json- response
success*booleandata*curl -X POST 'https://senlo.io/api/events' \ -H 'Content-Type: application/json' \ -d '{ "event": "contact_added", "email": "user@example.com", "name": "Jean-Pierre", "locale": "fr", "metadata": { "plan": "premium" }}'{ "success": true, "data": { "id": 0, "projectId": 0, "email": "user@example.com", "name": "string", "locale": "string", "meta": {}, "unsubscribed": true, "unsubscribedAt": "2019-08-24T14:15:22Z", "createdAt": "2019-08-24T14:15:22Z" }}Resend webhook POST
Paste this URL into a Resend webhook. Senlo verifies the Svix signature with the webhook signing secret saved on the provider in Senlo, then applies `email.delivered`, `email.bounced` and `email.complained`. Other event types are acknowledged and ignored.
Send a triggered email POST
Queues one email from a trigger. The trigger must belong to the workspace the API key is scoped to, and must be a triggered (API) trigger. A `200` means the email is queued, not that the provider accepted it. Delivery status shows up in the trigger's delivery log. `locale` picks the trigger's template for that locale when one is set, otherwise the trigger's default template. The match is exact and case-sensitive.