Skip to content

Key concepts

JustAI decides what each customer receives and when, then sends it through Iterable, Klaviyo, or Customer.io. To do that, it needs two kinds of data from you: customer profiles and customer events. This page explains those terms and the other pieces you meet during onboarding. The picture below is the Iterable path. Choose a delivery provider covers the others.

Your dataCDP, warehouse, or backend
JustAIBuilds each person's message
IterableSends from your sending profile
Your customersReceive and engage
Sends, opens, and clicks return to JustAI through the system webhook
Your data source sends customer profiles and events to JustAI. JustAI asks Iterable to send each message and supplies the content. Iterable delivers the email from your sending profile. Sends, opens, and clicks return to JustAI through the system webhook.
  1. Your systems send customer profiles and events to JustAI from a CDP, a reverse ETL tool, files, or your own backend.
  2. Your journeys in JustAI use that data to decide who gets which message, and JustAI prepares each person’s message.
  3. JustAI asks Iterable to send the message through your sending profile’s campaign. Iterable fetches the prepared subject and body from JustAI through the content data feed and delivers the email.
  4. Iterable reports sends, opens, clicks, bounces, and unsubscribes back to JustAI through the system webhook. Sends, opens, and clicks appear in journey analytics.

Iterable engagement doesn’t appear under Events, and it doesn’t change customer profiles.

A customer profile is one person and what you know about them. Each profile has a user ID and a set of attributes, such as email, plan, or country. The APIs call attributes traits, and the app calls them attributes.

You create and update profiles with the Identify API, directly or through a CDP or reverse ETL tool. CSV uploads in the app also create and update profiles. Discuss any customer-specific S3 file import with your JustAI team before planning it. Each update merges into the profile. The traits you send replace their stored values, and traits you leave out stay as they are.

Identify request body
{
"userId": "user-1234",
"traits": {
"email": "ada@example.com",
"plan": "pro",
"country": "GB"
},
"timestamp": "2026-10-01T12:00:00Z"
}

Find profiles under Users in the app, or read one back with the Profiles API. Profile attributes power segments, message personalization, and journey conditions such as Wait until steps and exit rules. Confirm with your JustAI team whether A profile attribute changes is available for your organization before planning a journey around it. When available, an Identify call that changes an attribute can start that journey. CSV uploads don’t start those journeys. Confirm the behavior of any customer-specific file import with your JustAI team.

See Send customer profiles.

A customer event records something a person did, such as completing an order. You send events with the Track API, directly or through Segment, RudderStack, or Hightouch. Each event has a name, the time it happened, a unique messageId, a userId or an anonymousId, and optional properties.

Track request body
{
"type": "track",
"messageId": "order-5678-completed",
"event": "Order Completed",
"userId": "user-1234",
"timestamp": "2026-10-01T12:05:00Z",
"properties": {
"order_id": "order-5678",
"total": 42.5
}
}

Events drive journeys. An event can start a journey (Event triggered), end a Wait until step, or make someone exit. Event properties can personalize messages, and an event can be the conversion a journey is measured on. An event reaches a journey only when all of these are true:

  • It has a non-empty userId. Events with only an anonymousId are recorded, but they never reach journeys.
  • Its name matches the journey’s event name exactly, including case. Order Completed and order_completed are two different events.
  • It arrives after the journey is published.

New event names can take time to appear in Events > Custom events. Journey event pickers read that list, which shows the event names JustAI received in the last 30 days. Send one test event with the exact name, and build the journey after the name appears in Custom events. Journeys don’t wait for the list to update. They react to a matching event shortly after JustAI receives it.

Contact your JustAI team before planning an import of past events. Do not replay them through Track: a matching event received after a journey is published can start, advance, or end that journey, regardless of its timestamp.

See Send customer events.

JustAI identifies each person by the userId you send. Use a stable ID from your own systems, and send the same value in every Identify and Track call so each event lands on the right profile. By default, two different user IDs are two different people, even when they share an email address. Ask your JustAI team whether treating each email address as one person is available and appropriate for your organization, and confirm the setup before relying on it.

Send each person’s email address in the email trait. JustAI needs it to send that person email. Iterable and Klaviyo find each email recipient by that address, and it must match the address that provider has for them. Customer.io finds each person by the same ID your workspace already uses. Confirm that ID with your JustAI team. See Choose a delivery provider.

JustAI doesn’t link an anonymousId to a profile later. Events that carry only an anonymousId stay anonymous.

See Identity and consent.

A sending profile is the sender setup JustAI uses to send through Iterable. It isn’t a customer profile. An email sending profile holds a From email, a sender name, and optionally a reply-to address and an Iterable message type. You create sending profiles on your Iterable connection.

For each email sending profile, JustAI creates a triggered campaign and a template in your Iterable project, both named JustAI · <profile name>. Iterable can show two copies of the template for one profile. Don’t edit the campaign or either template copy, because a change can send blank or wrong email.

A journey uses one email sending profile for all of its email, chosen in the journey’s settings. The profile must show Verified before a journey can use it.

See Create a sending profile.

Every organization has a Production environment. Organization admins can add more in Settings > Environments, for example a staging environment for testing. Each environment is separate. It has its own customer profiles, events, journeys, integrations, and API keys, and a new environment starts empty.

The account menu at the bottom of the left sidebar shows where you are, as <Organization> / <Environment>. Switch environments from that menu. Every environment looks the same in the app, so check that label before you send test data or set up an integration.

An API key belongs to the environment that was selected when you created it. Production requests use your organization slug in the path. For any other environment, your JustAI team gives you a path value, which replaces the organization slug in the path, and an environment key, which you send in the X-JustAI-Environment header. See Environments in the API overview.

  1. An organization admin opens Settings > Environments, selects New environment, enters an Environment name such as Staging, and selects Create environment.

  2. Switch to the new environment. Open the account menu, select Environment, and select Switch next to it. The address bar shows the environment key after env=.

  3. Ask your JustAI team for the environment key and the path value, for example staging and acme_staging.

  4. With the new environment selected, create an API key in Settings > API keys.

  5. Set up your data source again for the new environment, with its path value, environment key, and API key. To send through Iterable from it, connect a different Iterable project than the one your Production environment uses.

Your organization slug is the short, lowercase identifier for your organization in API paths. It goes where {org_slug} appears in https://ingest.justwords.ai/api/identify/{org_slug}. It isn’t your organization’s display name. Your JustAI team gives you your slug at kickoff. In the Production environment, it also appears inside the system webhook and content data feed URLs on your Iterable connection.

Onboarding uses four credentials.

Credential Where it comes from What it does
JustAI API key Settings > API keys in JustAI. It starts with jai_. Authenticates your calls to the Identify, Track, and Profiles APIs, and other JustAI APIs, for one environment.
Iterable API key The API keys page of your Iterable project. Create a server-side key with full read and write access. Lets JustAI create campaigns and templates, set up the system webhook, and trigger sends in your project. You paste it into your Iterable connection in JustAI.
Feed token Generate token on the content data feed step in JustAI. Lets Iterable fetch prepared content from JustAI. You paste it into the data feed’s Authorization token field in Iterable.
System webhook header JustAI writes it into your system webhook when you select Set header. Authenticates the calls the system webhook makes to JustAI. You never copy it.

JustAI shows an API key only once, when you create it. A key has no per-API scopes, so treat it as a full-access secret and keep it on your servers or in your data tools, never in browser or mobile code. JustAI also shows a feed token only once. Generating a new token stops the old one immediately.

See Credentials.