Splio

Splio is an AI-first CRM combining marketing automation, a customer data platform (CDP) and loyalty programs. Datafly Signal delivers first-party events collected by Datafly.js straight to the Splio Customer Platform (SCP) Data API as contact upserts, so your marketing-automation, segmentation and loyalty journeys act on real-time signals without any client-side Splio tags.

This integration writes to the Data API contacts endpoint (POST /data/contacts). It maps identity (email, name, phone), locale and marketing consent into a Splio contact, subscribes the contact to a list when consent is granted, and writes selected traits to your universe’s custom fields.

Prerequisites

  • A Splio universe with the Customer Platform Data API enabled.
  • An API key created in the API users section of your universe. The Data API uses this key to mint a short-lived access token (see API Endpoint).
  • The list id contacts should be subscribed to when they grant marketing consent. The list must already exist in your universe.
  • The custom field ids in your Splio data model for any traits you want to store (Splio custom fields are addressed by id, not by name).

Configuration

FieldRequiredDescription
API Bearer Token (JWT)YesA Data API access token (JWT). Valid for one hour after it is minted from your API key.
Splio API KeyNoThe long-lived API key from your universe’s API users list, used to mint the JWT.
Default List IDNoThe list contacts are subscribed to when marketing consent is granted.
Default LanguageNoISO language code (en, fr, it, es, …) for new contacts when no locale is on the event.

Configure in Signal

  1. In your Signal management UI, go to Integrations and add Splio.
  2. Paste your Data API token and (optionally) your API key, list id and default language.
  3. Attach the Splio blueprint to your pipeline. The default preset maps Signed Up, Identified and Order Completed events to contact upserts.
  4. Save and enable the integration. Signal begins upserting contacts on the next matching event.

API Endpoint

Contacts are written to:

POST https://api.splio.com/data/contacts
Authorization: Bearer <token>
Content-Type: application/json

Splio authenticates the Data API with a one-hour JSON Web Token. Mint it by exchanging your universe API key:

POST https://api.splio.com/authenticate
Content-Type: application/json

{ "api_key": "<your api key>" }

The response is a JWT that you send as Authorization: Bearer <token> on every Data API call for the next hour.

A contact is identified by email, cellphone, or a configured unique key. The request body is a flat contact object plus lists and custom_fields arrays:

{
  "email": "jane@example.com",
  "firstname": "Jane",
  "lastname": "Doe",
  "cellphone": "+33612345678",
  "language": "en",
  "lists": [{ "id": "newsletter" }],
  "custom_fields": [{ "id": "city", "value": "Paris" }]
}

Identity Signals

Splio is a messaging platform, so identity values are sent in cleartext (not hashed) — Splio needs a deliverable email address and phone number to reach the contact.

Datafly traitSplio field
emailemail
phonecellphone
first_namefirstname
last_namelastname
context.localelanguage

At least one of email or cellphone must be present for the upsert to succeed.

The contact is subscribed to your configured list only when canonical marketing consent is granted. Signal maps context.consent.canonical.marketing to the lists array: when it is true, the blueprint emits lists: [{ "id": "<list id>" }]; otherwise no list subscription is sent.

Event Mapping

The default preset upserts a contact for Signed Up, Identified and Order Completed. All three resolve to the same Splio contact_upsert action.

Example: Signed Up

A Datafly.js call:

datafly.identify("u-123", {
  email: "jane@example.com",
  first_name: "Jane",
  last_name: "Doe",
  phone: "+33612345678",
  city: "Paris"
});
 
datafly.track("Signed Up");

With marketing consent granted and list_id set to newsletter, Signal delivers:

{
  "email": "jane@example.com",
  "firstname": "Jane",
  "lastname": "Doe",
  "cellphone": "+33612345678",
  "language": "en",
  "creation_date": "2026-06-06T10:30:00Z",
  "lists": [{ "id": "newsletter" }],
  "custom_fields": [{ "id": "city", "value": "Paris" }]
}

The custom_fields ids (city, company, country in the default preset) must match the custom field ids in your Splio universe — adjust the blueprint to your own field ids.

Testing

  1. Mint a fresh token from POST /authenticate and set it as the integration’s API token.
  2. Fire a Signed Up event from a test page with datafly.identify populated.
  3. Confirm a 201/200 response from /data/contacts in the Signal Event Debugger.
  4. In Splio, open the contact by email and verify name, phone, language, list membership and custom fields.

Troubleshooting

  • 400 Bad Request — the contact has no identifying field (email/cellphone/unique key), the body is malformed, or a list / custom_field id does not exist in your universe.
  • 401 / 403 — the token is missing or expired (tokens last one hour), or the API key lacks Data API permissions. Mint a fresh token.
  • 404 — wrong host or path; confirm your universe is served from api.splio.com.
  • Contact created but not subscribed — marketing consent was not granted, or Default List ID is unset. The list is only added on consent.canonical.marketing = true.
  • Custom fields ignored — the custom_fields ids must match your Splio field ids exactly.