Configuring SleekFlow as a Source
In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the SleekFlow option from the list of connectors. Click Next and you’ll be prompted to add your access.1. Add account access
The connector uses the SleekFlow Platform API key. Only users with Admin access in SleekFlow can see it: in SleekFlow, open Integrations, find Platform API under Direct API, click Connect and copy the key shown under Your unique API key. The connector only reads data: it never sends messages or changes anything in your account.The Platform API is available on SleekFlow’s Premium and Enterprise plans. If you click Refresh API key in SleekFlow, the previous key stops working and the source must be updated with the new one.
- API Key: the SleekFlow Platform API key. Required.
- Region: (Default: Auto-detect) the region where your SleekFlow account is hosted: Hong Kong, United States, Singapore, West Europe or UAE North. With Auto-detect, the connector checks every region on each sync (5 API calls) and requires exactly one of them to accept the key (a region that does not answer does not stop the sync); once the run log tells you the region, select it here to make a single check. Required.
- Start Date: contacts and conversations updated, messages sent and daily analytics from this date on are extracted. An earlier date means a longer first sync and more API calls (about one per conversation for the Messages stream). Required.
- Max API calls per run: (Default: 1500, advanced) Contacts and Messages stop when a sync has made this many SleekFlow API calls and continue from that point in the next syncs. A first sync of an account with many conversations is therefore spread over several syncs (see API Limits & Performance). Required.
2. Select streams
Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones.Tip: The stream can be found more easily by typing its name.
Messages costs one API call per conversation with new activity since the previous sync. Every other stream costs one or a few calls per sync. If you only need volumes (messages sent and received, active conversations, response times), Conversation Analytics Daily gives them at one call per sync.
3. Configure data streams
Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.- Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
- Folder: a folder can be created inside the selected layer to group all tables being created from this new data source.
- Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster!
- Sync Type: use INCREMENTAL for Contacts, Conversations, Messages and Conversation Analytics Daily: each sync then reads only what changed since the previous one. Labels, Staff, Teams, Contact Lists, Broadcasts, Saved Replies and Channels are FULL_TABLE: each sync reads their current state. Read more about Sync Types here.
A full sync replaces the table, so it cannot stop halfway: a full sync of Messages (one API call per conversation updated since the Start Date) or of Contacts that needs more calls than Max API calls per run is refused, and that stream fails in that sync. Prefer incremental syncs for Contacts, Conversations and Messages.
4. Configure data source
Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times). A daily sync is usually enough and keeps API usage predictable. Optionally, you can define some additional settings:- Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource here.
- An Additional Full Sync is only needed if you want contacts deleted in SleekFlow to disappear from your tables. On Messages it costs one API call per conversation updated since the Start Date and must fit in Max API calls per run, so prefer an occasional manual full sync over a frequent schedule.
5. Check your new source
You can view your new source on the Sources page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.Streams and Fields
Available streams
The table below lists every stream, its slug (the exact identifier to pass when creating the source via API) and a short description.Fields by stream
All dates are in UTC. Nested values (contact properties, assignee, attached files, channel settings) are JSON strings. Attributes SleekFlow returns beyond the documented ones are kept in each table’sextra_fields column.
Contacts
Contacts
Every contact updated since the Start Date, with its labels and every contact property of the account (lead stage, contact owner, lists, your own custom fields).
custom_fields_by_name holds the same properties keyed by name, for simpler queries.Primary key: id · Replication key: updated_atConversations
Conversations
One row per conversation (SleekFlow keeps one conversation per contact thread), in every status, with its assignee, collaborators, team and labels. A conversation is read again whenever it has new activity (
updated_time) or changes status (modified_at).Primary key: conversation_id · Replication key: last_changed_atMessages
Messages
Every message, sent and received, of the conversations with activity since the previous sync: channel, type, content, delivery status and the staff member who sent it. Join with Conversations on
conversation_id.Primary key: id · Replication key: created_atLabels
Labels
Labels (hashtags) of the account. Read in full on every sync.Primary key:
id · Full tableStaff
Staff
Staff users (agents) of the account.
user_id matches assignee_id in Conversations and sender_id in Messages. Read in full on every sync.Primary key: staff_id · Full tableTeams
Teams
Teams and the staff IDs of their members. Read in full on every sync.Primary key:
team_id · Full tableContact Lists
Contact Lists
Contact lists of the account with their contact counts. Read in full on every sync.Primary key:
id · Full tableBroadcasts
Broadcasts
Broadcasts (campaigns), including drafts, with their delivery statistics. Read in full on every sync, so the statistics are always current.Primary key:
id · Full tableSaved Replies
Saved Replies
Saved (quick) replies available to the team. Read in full on every sync.Primary key:
id · Full tableChannels
Channels
One row per messaging channel connected to the account (WhatsApp numbers, Facebook pages, LINE, SMS, e-commerce integrations). Credentials found in the channel settings are never stored. Read in full on every sync.Primary key:
channel_type, channel_key · Full tableConversation Analytics Daily
Conversation Analytics Daily
One row per day with the account’s figures as SleekFlow’s analytics report them: contacts, conversations, new enquiries, messages sent and received, automated messages, broadcast results, active agents and response times.Primary key:
date · Replication key: dateImplementation Notes
Data Quality Considerations
- Contacts and conversations are read by their last update time; messages are read for the conversations that changed since the previous complete pass. Every sync re-reads the last 30 minutes before the previous one, so changes that SleekFlow records with a short delay are not missed.
- Conversations that change while the list is being read (for example, a closed conversation reopened by a new message) are listed again before the sync moves on, so their messages are not missed. Messages are read from the start of the previous pass’s window, so a conversation an earlier sync could not see still gets all its messages.
- A conversation is only counted as done once all its messages were read; a sync that stops on the call limit continues from the next conversation.
- If SleekFlow does not accept listing conversations in the pending (snoozed) status, the connector lists every status at once instead; if that is refused too, the sync fails rather than leaving those conversations and their messages out.
- A message’s delivery
status(Sent, Delivered, Read…) is the value at the time the message was extracted. SleekFlow has no way to read a single message again, so the status is only refreshed when its conversation has new activity. Use broadcast statistics or Conversation Analytics Daily for delivery rates. - When SleekFlow answers “not found” for the messages of a conversation that was just listed, the connector treats the conversation as deleted during the sync, skips it and says so in the run log. This behavior of the API was not confirmed on a real account.
- Contacts, conversations and messages deleted in SleekFlow stay in the tables after incremental syncs. A full sync of Contacts removes deleted contacts; a full sync of Conversations and Messages does the same for them, at a high API cost for Messages.
- Conversation Analytics Daily stops two days before the current date, so that every day it reads is already complete in every time zone, and it re-reads the last three days on every sync. Each day is dated from the period SleekFlow says it returned or, when that period is not usable, from the date of each row; if the days cannot be matched, that stream fails instead of saving days with the wrong date (it is synced last, so the other streams are not affected).
- File URLs in Messages (
uploaded_files) are temporary download links generated by SleekFlow; download the files if you need to keep them.
API Limits & Performance
Calls made by each sync, which count toward your SleekFlow plan’s monthly API call limit:- A quiet daily sync costs about 30 calls; each conversation with new activity adds one. With the default Max API calls per run (1,500), a daily sync stays under about 45,000 calls a month. Each sync ends with a line in the run log saying how many calls it made.
- Every table that is replaced on each sync (Staff, Labels, Teams, Channels, Saved Replies, Contact Lists, Broadcasts, and any stream set to full sync) is read completely before the connector sends it. If SleekFlow answers with errors, rejects the key or refuses more calls while it is being read, that stream is not sent, the other streams still sync, and the sync fails at the end: sync it again.
When a sync succeeds or fails
- Succeeds when everything was read, and also when Contacts or Messages stopped on Max API calls per run (or because SleekFlow refused more calls) while the sync made progress. The run log then warns how much is left, for example “messages of 1,500 of 4,200 conversations read, 2,700 pending”, and the next syncs continue from there. When both have a backlog, Contacts leave part of the limit (40%) to Messages, so both move forward.
- Fails when neither Contacts nor Messages could make any progress, when one of them has had work pending for more than 7 days (raise Max API calls per run, sync more often or use a more recent Start Date), when listing the conversations alone needs more calls than the whole limit allows, or when a stream fails (SleekFlow errors while reading it). The other streams are synced first, and the failure is reported at the end; the stream that failed must be synced again.
- A sync that fails still uses the API calls it made before failing.
- If a sync is interrupted for another reason while it is writing a table that is replaced on each sync (for example, during a full sync), that table can be left incomplete until the next successful run. Run the sync again until it succeeds.