Splio
Splio is an AI-first CRM combining marketing automation, a customer data platform (CDP) and loyalty programs. Datafly Signal creates contacts in the Splio Customer Platform (SCP) Data API from first-party sign-up and identify events, without any client-side Splio tags.
This integration writes to the Data API contacts endpoint (POST /data/contacts): email, name, phone and language.
Why route Splio through Datafly Signal
- Profiles are updated from the server, not the browser. Events reach Splio even when a tracker blocker or a failed page unload would have dropped a client-side call, so the profile reflects what actually happened.
- One consent decision governs every destination. Splio is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
Two limits make this integration unreliable today. The Data API token is a JWT that expires after 24 hours, and Signal cannot renew it yet (#1489): deliveries fail with 401 until you paste a new one. And POST /data/contacts only creates: an event for a contact that already exists is rejected with 400 and not retried (#1490).
Prerequisites
- A Splio universe with the Customer Platform Data API enabled.
- An API key created in the API users section of your universe, to mint the Data API token.
Configuration
| Field | Required | Description |
|---|---|---|
| API Bearer Token (JWT) | Yes | A Data API token from POST /authenticate. Valid for 24 hours; Signal does not renew it yet. |
| Splio API Key | No | Your universe API key, used to mint the token. Not used by Signal until automatic renewal exists. |
| Default List ID | No | Not used by the current blueprint (see Consent). |
| Default Language | No | Two-letter language code (en, fr, it, es, …) for new contacts when the event has no locale. |
Configure in Signal
- In your Signal management UI, go to Integrations and add Splio.
- Paste your Data API token and, optionally, the default language.
- The default preset creates a contact on
sign_upandidentify. Every other event is dropped. - Save and enable the integration.
API Endpoint
POST https://api.splio.com/data/contacts
Authorization: Bearer <token>
Content-Type: application/jsonMint the token by exchanging your universe API key (dev-scp.splio.com, Authentication):
POST https://api.splio.com/authenticate
Content-Type: application/json
{ "api_key": "<your api key>" }The response {"token": "..."} is valid for 24 hours.
Identity Signals
Splio is a messaging platform, so identity values are sent in clear (not hashed): Splio needs a deliverable email address and phone number.
| Datafly source | Splio field | Handling |
|---|---|---|
email trait | email | Required (the usual universe key). Trimmed and lower-cased. |
phone trait | cellphone | Normalised to E.164. |
first_name / last_name traits | firstname / lastname | As sent. |
context.locale | language | The two-letter language (en-GB becomes en), else Default Language. |
event time (sign_up) | creation_date | Splio’s YYYY-MM-DD HH:MM:SS. |
Consent
List subscriptions are not sent. Subscribing someone to a mailing list is a communications permission, and cookie consent must never grant it. Custom fields are not sent either: Splio addresses them by names or ids specific to your universe, and an unknown one fails the whole request. Add either to the installed integration if you need them.
Event Mapping
| Signal event | Splio action |
|---|---|
sign_up | Create contact, with creation_date |
identify | Create contact |
Example: sign_up
datafly.identify("u-123", {
email: "jane@example.com",
first_name: "Jane",
last_name: "Doe",
phone: "+33612345678"
});
datafly.track("sign_up", { method: "email" });Signal delivers:
{
"email": "jane@example.com",
"firstname": "Jane",
"lastname": "Doe",
"cellphone": "+33612345678",
"language": "fr",
"creation_date": "2026-09-23 10:30:00"
}Testing
- Mint a fresh token from
POST /authenticateand set it as the integration’s API token. - Fire a
sign_upevent for a new email from a test page withdatafly.identifypopulated. - Confirm a
201response from/data/contactsin the Signal Event Debugger. - In Splio, open the contact by email and verify name, phone and language.
Troubleshooting
400contact already exists:POST /data/contactsonly creates (#1490).400 Bad Requestotherwise: the contact has no email, or the body is malformed.401/403: the token has expired (24 hours) or the API key lacks Data API permissions. Mint a fresh token.404: wrong host or path; confirm your universe is served fromapi.splio.com.