SendX App
Introduction
The SendX App for Flows enables you to connect your workflows to SendX, an email marketing and marketing-automation platform. This integration allows you to manage contacts, lists and tags, send transactional and template-based emails, and push revenue/custom events directly from your Flows without writing complex code. With this App, you can build automated workflows that keep your email marketing in sync with player/customer activity in real time, perfect for onboarding sequences, revenue attribution, behavioural automation, and campaign reporting.
What is SendX?
SendX is an email marketing automation platform that lets you manage contacts, lists and tags, send transactional and template emails, and track revenue and custom events that drive automations. Key features include:
- Contact management (create, update, search, unsubscribe, delete)
- Transactional and template-based email sending
- Lists and tags for segmentation
- Revenue and custom event tracking for automation triggers
- Campaign performance reporting
Getting Started
Prerequisites
Before using the SendX App, you will need:
- A SendX account
- Your SendX Team API Key
Finding Your Credentials
- Log in to your SendX app
- Go to Settings > Connectors > API
- Copy your Team Api Key from the "Team Api Key" section
(Direct link: https://app.sendx.io/setting/connectors/api)
Recommendation: the Team API Key is sent as the X-Team-ApiKey header on every request. Keep this key secure, anyone with it has full access to your SendX contacts, lists, and sending.
Available Stages
| Stage | Method | Description |
|---|---|---|
| Create Contact | POST | Create a new contact record |
| Get Contact | GET | Read a single contact by its prefixed ID |
| Update Contact | PUT | Replace a contact's email and name |
| Delete Contact | DELETE | Soft-delete a contact |
| Unsubscribe Contact | POST | Mark a contact as unsubscribed |
| Search Contacts | GET | Search contacts by name or email |
| Add Tag To Contact | POST | Add a tag to a contact by email (upsert, additive) |
| Add Contact To List | POST | Add a contact to a list by email (upsert, additive) |
| Send Transactional Email | POST | Send a one-off HTML email |
| Send Email Using Template | POST | Send an email rendered from a SendX template |
| Create List | POST | Create a subscriber list |
| Get All Lists | GET | Return every list |
| Create Tag | POST | Create a tag |
| Get All Tags | GET | Return every tag |
| Track Custom Event | POST | Push a named custom event for a contact |
| Track Revenue Event | POST | Push a revenue/purchase event for a contact |
| Get Campaign Report | GET | Read open/click/bounce stats for a campaign |
Authentication
SendX uses a single static API key sent as a request header - no OAuth, no token refresh, no expiry handling.
X-Team-ApiKey: <Team API Key>
Base URL for every endpoint: https://api.sendx.io/api/v1/rest
Create Contact
The Create Contact stage allows you to create a new contact record in SendX.
Input Parameters
| Parameter | Variable | Required | Description |
|---|---|---|---|
| {{email}} | Yes | Contact email address. Must be unique within the team, max 255 chars. | |
| First Name | {{firstName}} | Yes | Contact first name, max 255 chars. Used by SendX merge tags for personalisation. |
| Last Name | {{lastName}} | Yes | Contact last name, max 255 chars. |
Output
| Field | Description |
|---|---|
| ContactID | Prefixed contact ID — pass this to Get / Update / Delete / Unsubscribe Contact |
| Contact email address | |
| FirstName / LastName | Contact name fields |
| Company | Company name if one is stored |
| Unsubscribed | true once the contact has opted out |
| Bounced / Spam / Blocked / Dropped | Deliverability status flags |
| LTV | Lifetime value accumulated from revenue events |
| Created / Updated | ISO 8601 timestamps |
The lists and tags fields of a contact are arrays and are deliberately not returned as flat fields - Flows cannot resolve array indexes. Use Get All Lists / Get All Tags, or add a Loop stage against the raw response, if you need them.
Usage Example
| Parameter | Value |
|---|---|
| [email protected] | |
| firstName | Jane |
| lastName | Doe |
Important Notes
- Emails are unique per team, a duplicate email or invalid format returns a 400 error
Get Contact / Delete Contact / Unsubscribe Contact
These stages act on an existing contact using its prefixed contact ID.
Input Parameters
| Parameter | Variable | Required | Description |
|---|---|---|---|
| Contact ID | {{contactId}} | Yes | Prefixed contact ID returned by Create Contact or Search Contacts. Format contact_ + 22 alphanumeric chars. |
Output (Get Contact)
Same response fields as Create Contact - see the field table above.
Usage Example
| Parameter | Value |
|---|---|
| contactId | contact_BnKjkbBBS500CoBCP0oChQ |
Important Notes
- The ID must include the
contact_prefix - the bare 22 characters alone will return a 404 - Unsubscribe Contact marks a contact as opted-out; it does not delete the record
Update Contact
The Update Contact stage allows you to replace a contact's email and name.
Input Parameters
| Parameter | Variable | Required | Description |
|---|---|---|---|
| Contact ID | {{contactId}} | Yes | Prefixed contact ID to update |
| {{email}} | Yes | Email address to store - SendX requires this on every update, so always pass the contact's current (or new) address | |
| First Name | {{firstName}} | Yes | First name to store |
| Last Name | {{lastName}} | Yes | Last name to store |
Output
Same response fields as Create Contact - see the field table above.
Usage Example
| Parameter | Value |
|---|---|
| contactId | contact_BnKjkbBBS500CoBCP0oChQ |
| [email protected] | |
| firstName | Jane |
| lastName | Doe |
Important Notes
- Even if you're only changing the name, you must still pass the contact's current email - omitting it is not supported
Search Contacts
The Search Contacts stage lets you search contacts by name or email.
Input Parameters
| Parameter | Variable | Required | Description |
|---|---|---|---|
| Search | {{search}} | Yes | Text matched against firstName, lastName and email. Minimum 2 characters, max 255. |
Output
These return a single answer containing a count plus one array of objects (Contacts). Each object carries a 1-based sequence number so downstream stages can reference position.
Usage Example
| Parameter | Value |
|---|---|
| search | jane |
Important Notes
- A search string shorter than 2 characters returns an empty array
Add Tag To Contact / Add Contact To List
Both stages upsert a contact by email - if the contact doesn't exist, SendX creates it.
Add Tag To Contact — Input Parameters
| Parameter | Variable | Required | Description |
|---|---|---|---|
| {{email}} | Yes | Email of the contact. Created automatically if it does not exist. | |
| Tag Name | {{tagName}} | Yes | Tag name to add. Created automatically if it doesn't exist. Tags are additive — existing tags are kept. |
Add Contact To List — Input Parameters
| Parameter | Variable | Required | Description |
|---|---|---|---|
| {{email}} | Yes | Email of the contact. Created automatically if it does not exist. | |
| List Name | {{listName}} | Yes | Name of an existing list — create one first with Create List. Lists are additive — existing memberships are kept. |
Usage Examples
| Parameter | Value |
|---|---|
| [email protected] | |
| tagName | VIP Customer |
| Parameter | Value |
|---|---|
| [email protected] | |
| listName | Newsletter Subscribers |
Important Notes
- Unlike tags, lists are not auto-created - run Create List first, then use the exact list name, or the stage will silently do nothing
Send Transactional Email
The Send Transactional Email stage sends a one-off HTML email.
Input Parameters
| Parameter | Variable | Required | Description |
|---|---|---|---|
| From Email | {{fromEmail}} | Yes | Sender address — must belong to a domain verified in SendX |
| From Name | {{fromName}} | Yes | Sender display name shown in the inbox |
| To Email | {{toEmail}} | Yes | Recipient address |
| Subject | {{subject}} | Yes | Email subject line |
| HTML Body | {{htmlBody}} | Yes | Full HTML body of the email |
Output
| Field | Description |
|---|---|
| Status | "success" when SendX accepted the message |
| Message | "Email queued for delivery" |
HTTP 202 means queued, not delivered. Delivery happens asynchronously; use a SendX webhook if you need a delivery confirmation.
Usage Example
| Parameter | Value |
|---|---|
| fromEmail | [email protected] |
| fromName | Acme Support |
| toEmail | [email protected] |
| subject | Your order has shipped |
| htmlBody | <h1>Thanks!</h1><p>Your order is on its way.</p> |
Important Notes
- The sending domain must be verified in SendX (Settings > Domains) before using it as fromEmail, or the email will never arrive despite the 202 response
Send Email Using Template
The Send Email Using Template stage sends an email rendered from a SendX template.
Input Parameters
| Parameter | Variable | Required | Description |
|---|---|---|---|
| From Email | {{fromEmail}} | Yes | Sender address on a verified domain |
| From Name | {{fromName}} | Yes | Sender display name |
| To Email | {{toEmail}} | Yes | Recipient address |
| Subject | {{subject}} | Yes | Email subject line |
| Template | {{template}} | Yes | Prefixed template ID from Get All Templates in the SendX UI. Format template_ + 22 chars. |
Output
Same response fields as Send Transactional Email (Status, Message). HTTP 202 means queued, not delivered.
Usage Example
| Parameter | Value |
|---|---|
| fromEmail | [email protected] |
| fromName | Acme Support |
| toEmail | [email protected] |
| subject | Welcome aboard |
| template | template_6h8DnYrHt4KktCnG8PDO5Z |
Important Notes
- Same delivery caveats as Send Transactional Email apply (202 = queued, not delivered; domain must be verified)
Create List / Create Tag
Both stages create a new list or tag by name.
Input Parameters
| Parameter | Variable | Required | Description |
|---|---|---|---|
| Name | {{name}} | Yes | Name of the list or tag. Must be unique within the team. |
Usage Examples
| Parameter | Value |
|---|---|
| name | Newsletter Subscribers |
| Parameter | Value |
|---|---|
| name | VIP Customer |
Get All Lists / Get All Tags
Both stages return every list or tag in the team.
Output
Search Contacts / Get All Lists / Get All Tags - these return a single answer containing a count plus one array of objects (Contacts, Lists, Tags). Each object carries a 1-based sequence number so downstream stages can reference position.
Important Notes
- Both endpoints request the API maximum of 100 per call. Teams with more than 100 lists/tags need pagination, which these endpoints do not expose
Track Custom Event
The Track Custom Event stage pushes a named custom event for a contact - typically used as an automation trigger inside SendX.
Input Parameters
| Parameter | Variable | Required | Description |
|---|---|---|---|
| Identifier | {{identifier}} | Yes | Contact email address or prefixed contact ID |
| Event Name | {{eventName}} | Yes | Name of the event, used as the automation trigger in SendX |
Output
| Field | Description |
|---|---|
| Status | "success" when the event was recorded |
| Message | "Event tracked successfully" |
Usage Example
| Parameter | Value |
|---|---|
| identifier | [email protected] |
| eventName | trial_started |
Track Revenue Event
The Track Revenue Event stage pushes a revenue/purchase event for a contact, so SendX can accumulate lifetime value (LTV) and segment high-value customers.
Input Parameters
| Parameter | Variable | Required | Description |
|---|---|---|---|
| Identifier | {{identifier}} | Yes | Contact email address |
| Amount | {{amount}} | Yes | Revenue amount as a decimal number, no currency symbol |
| Source | {{source}} | Yes | Where the revenue came from - used for attribution reporting |
Output
Same response fields as Track Custom Event (Status, Message).
Usage Example
| Parameter | Value |
|---|---|
| identifier | [email protected] |
| amount | 99.99 |
| source | website |
Get Campaign Report
The Get Campaign Report stage reads open/click/bounce stats for a campaign.
Input Parameters
| Parameter | Variable | Required | Description |
|---|---|---|---|
| Campaign ID | {{campaignId}} | Yes | Prefixed campaign ID, format campaign_ + 22 chars. Copy it from the campaign URL in the SendX UI. |
Output
| Field | Description |
|---|---|
| SentContactCount | Contacts the campaign was sent to |
| OpenedContactCount / OpenedUniqueContactCount | Total and unique opens |
| ClickedContactCount / ClickedUniqueContactCount | Total and unique clicks |
| UnsubscribeContactCount | Contacts who opted out from this campaign |
| BounceContactCount / SpamContactCount | Deliverability counters |
The report's linkStats field is an array of per-URL click counts. It is not returned as a flat field - add a Loop stage over the raw response if you need per-link breakdowns.
Use Cases
- Signup to welcome email - a webhook trigger fires Create Contact, then Add Contact To List ("Newsletter Subscribers"), then Send Email Using Template with your welcome template.
- Purchase attribution - after a payment succeeds, call Track Revenue Event so SendX accumulates the contact's LTV and can segment high-value customers.
- Behavioural automation - call Track Custom Event (
trial_started,cart_abandoned) and let SendX automations react without any further Flows logic. - VIP tagging - when a player crosses a deposit threshold, call Add Tag To Contact with
VIP Customer; SendX creates the tag on the fly. - Campaign reporting digest - schedule Get Campaign Report daily and push the open/click counters into Slack or a BI table.
- GDPR erasure - on a deletion request, call Unsubscribe Contact then Delete Contact.
How to Test
- Install SendX from the marketplace and create a connection.
- Paste your Team API Key from https://app.sendx.io/setting/connectors/api into the API Key connection parameter.
- Start with Create Tag (name = "Flows Test Tag") - it needs nothing pre-existing and proves the key works. A TagID starting with
tag_comes back. - Then run Create Contact with email = "[email protected]", firstName = "Flows", lastName = "Test". Copy the returned ContactID.
- Run Get Contact with that ContactID to confirm the read path.
- Run Search Contacts with search = "flows" - you should get ContactCount >= 1 and your contact inside the Contacts array.
- Clean up with Delete Contact.
Each endpoint also carries a pink note in the Designer canvas with its own test recipe and example values.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| 401 Unauthorized | Missing or wrong Team API Key | Re-copy the key from Settings > Connectors > API. It is the Team Api Key, not a personal token. |
| 400 Bad Request on Create Contact | Email already exists in the team, or is not a valid email format | Emails are unique per team - use Add Tag To Contact / Add Contact To List (both upsert) instead, or Update Contact |
| 404 Not Found on Get / Update / Delete | Wrong ID or missing prefix | IDs must include the prefix, e.g. contact_BnKjkbBBS500CoBCP0oChQ, not the bare 22 characters |
| Email returns 202 but never arrives | The sending domain is not verified | Verify the domain in SendX (Settings > Domains) before using it as fromEmail |
| Search Contacts returns an empty array | Search shorter than 2 characters, or no match | SendX requires a minimum of 2 characters for the search filter |
| Add Contact To List does nothing | The list name does not exist | Unlike tags, lists are not auto-created. Run Create List first, then use the exact list name |
| Get All Lists / Get All Tags looks truncated | Page size | The endpoints request the API maximum of 100 per call - teams with more than 100 lists/tags need pagination, which these endpoints do not expose |