Mailjet
Mailjet is an email platform from Sinch. Datafly Signal adds or updates contacts in a Mailjet contact list (POST /v3/REST/contactslist/{list_ID}/managecontact) and sets their list subscription.
Why route Mailjet through Datafly Signal
- Events come from your server, not the browser. They reach Mailjet even when a tracker blocker or a failed page unload would have dropped a client-side call.
- Delivery is queued and retried. Signal buffers to Kafka and retries on 429 or a transient failure rather than dropping the event; a permanent rejection goes to the dead-letter queue with the vendor’s reason.
- One consent decision governs every destination. Mailjet is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
Get your Mailjet credentials
Copy your API keys
In Mailjet open Account Settings > API Key Management and copy the API key and secret key.
Choose the contact list
Open Contacts > Contact lists and note the numeric list ID.
Configuration
| Field | Required | Description |
|---|---|---|
api_key | Yes | Your Mailjet API Key (public). Found in Mailjet under Account Settings > API Key Management. Used as the Basic-auth username. |
secret_key | Yes | Your Mailjet Secret Key (private), paired with the API Key. Found alongside the API Key in Account Settings > API Key Management. Used as the Basic-auth password. |
contact_list_id | Yes | The numeric ID of the Mailjet contact list to add contacts to. Find it in the Mailjet UI under Contacts > Contact lists, or via GET /v3/REST/contactslist. |
Management UI setup
- Go to Integrations in the sidebar and open the Integration Library tab.
- Find Mailjet under Marketing Automation and click Install.
- Choose a preset, enter the fields above and click Install Integration.
Management API setup
curl -X POST http://localhost:8084/v1/admin/integration-catalog/mailjet/install \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Mailjet",
"variant": "default",
"config": {
"api_key": "your_api_key",
"secret_key": "your_secret_key",
"contact_list_id": "your_contact_list_id"
},
"delivery_mode": "server_side"
}'What Signal sends
An example request, rendered from the default preset for newsletter_subscribed:
POST https://api.mailjet.com/v3/REST/contactslist/1234567/managecontact
{
"Action": "addforce",
"Email": "neill@example.com",
"Name": "Neill Mcfixture"
}| Field | Source |
|---|---|
Email | The contact email from identify() traits, trimmed and lower-cased. Required. |
Name | The name trait. |
Action | addforce on newsletter_subscribed, unsub on newsletter_unsubscribed; addnoforce (add, never re-subscribing someone who opted out) on the disabled events. Never set from cookie consent. |
Mailjet matches the contact on the email and accepts no hashed identifier, so it is sent in plain text. An event without an email is not sent.
Presets
| Preset | Signal event → vendor event |
|---|---|
| Default | sign_up → managecontact (disabled), identify → managecontact (disabled), newsletter_subscribed → managecontact, newsletter_unsubscribed → managecontact |
| Retail | sign_up → managecontact (disabled), identify → managecontact (disabled), newsletter_subscribed → managecontact, newsletter_unsubscribed → managecontact, purchase → managecontact (disabled) |
| Publishing | sign_up → managecontact (disabled), newsletter_subscribed → managecontact, newsletter_unsubscribed → managecontact, subscription_started → managecontact (disabled) |
Events not listed are not sent. Each preset is a starting point: add, rename or remove mappings on the installed integration.
Notes and limits
- Sign-up, identify, purchase and subscription started are listed but disabled. Their Action,
addnoforce, adds a contact who is not yet in the list as subscribed, so these events would subscribe people who never asked for email. Enable them only for a list people joined knowingly. - Contact properties are not sent by default: Mailjet rejects the whole call if a property has not been created first. Create the property in Mailjet (Contacts > Contact properties), then add a
Properties.<name>mapping to the integration.
Consent
Marketing-automation integrations have no consent category by default. Assign the marketing category when you install Mailjet, so an event is delivered only when the visitor has granted it. Cookie-banner consent is not email or SMS opt-in: keep messaging opt-in in Mailjet.
Verify it’s working
- Open the integration in the Signal Management UI and watch Live Events while you trigger a mapped event.
- Confirm a 2xx response from Mailjet.
- Find the contact in Mailjet and check the event or record arrived.
Troubleshooting
| Symptom | Resolution |
|---|---|
400 | A mapped property does not exist in Mailjet, or the Action is invalid. |
401 | The API key or secret key is wrong. |
404 | The list ID does not exist. |