Suri is multi-tenant: each customer chatbot has its own API root and access token, both found in the chatbot’s Portal Settings.
Configuring Suri as a Source
In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the Suri option from the list of connectors. Click Next and you’ll be prompted to add your access.1. Add account access
Authentication uses a static Bearer token, unique per chatbot.1
Open your chatbot's Portal Settings
In the Suri Portal, go to your chatbot’s settings to find its API root URL (formatted like
https://xxx.azurewebsites.net/api) and API token.2
Paste the API URL and token into Nekt
Fill in the Chatbot API URL and API Token fields with the values from the previous step.
- Chatbot API URL: (Required) The chatbot’s API root, e.g.
https://xxx.azurewebsites.net/api. - API Token: (Required) The static Bearer token from Portal Settings described above.
- Start Date: (Optional) Lower bound for the
shop_ordersandattendancesstreams. If omitted, defaults to 30 days before the current date.
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.Select the streams and click Next.
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: you can choose between INCREMENTAL and FULL_TABLE.
- Incremental: every time the extraction happens, we’ll get only the new data - which is good if, for example, you want to keep every record ever fetched.
- Full table: every time the extraction happens, we’ll get the current state of the data - which is good if, for example, you don’t want to have deleted data in your catalog.
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). 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.
- Determine when to execute an Additional Full Sync. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.
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
Below you’ll find all available data streams from Suri and their corresponding fields.Departments
Departments
Departments the chatbot can route contacts to, from
/departments. Full-table sync.Key Fields:Attendants
Attendants
Human attendants (agents) registered on the chatbot, from
/attendants. Full-table sync.Key Fields:Channels
Channels
Communication channels connected to the chatbot (WhatsApp, Webchat, etc.), from
/channels. Full-table sync.Key Fields:Attendance Reasons
Attendance Reasons
Reasons attendants can select when closing an attendance, from
/attendances/reasons. Full-table sync.Key Fields:Templates
Templates
WhatsApp/message templates registered on the chatbot, from
/templates. Full-table sync.Key Fields:Campaigns
Campaigns
Bulk message campaigns sent from the chatbot, from
/campaigns. Full-table sync.Key Fields:Flows
Flows
Conversational flows defined in the chatbot’s Portal flow builder, from
/flows. Full-table sync.Key Fields:Contacts
Contacts
Chatbot contacts, listed via
POST /contacts/list (the non-deprecated search endpoint). Full-table sync, paginated via continuationToken.Key Fields:POST /contacts/list has no date filter, only sort order (orderBy/orderType) — so there’s no way to ask the API for “only contacts changed since X”. This stream does a full sync every run.Attendances
Attendances
Human attendance history, from
POST /attendances. Incremental sync on startDate.Key Fields:POST /attendances requires an explicit startDate/endDate window (format yyyy-MM-dd) on every call. The API reference doesn’t document pagination for it, so each sync issues one request covering [bookmark or start_date or 30 days ago, today].Shop Categories
Shop Categories
Product categories in the Suri Shop catalog, from
/shop/categories. Full-table sync.Key Fields:Shop Stores
Shop Stores
Physical/logistic stores in the Suri Shop catalog, from
/shop/stores. Full-table sync.Key Fields:Shop Collections
Shop Collections
Curated product collections in the Suri Shop catalog, from
/shop/collections. Full-table sync.Key Fields:Shop Products
Shop Products
Products in the Suri Shop catalog, from
POST /shop/products/list. Full-table sync, paginated via a pageToken cursor.Key Fields:Shop Orders
Shop Orders
Orders placed through the Suri Shop, from
POST /shop/orders. Incremental sync on createdDate, paginated by page number.Key Fields:CreatedDate bounds the window server-side (undocumented default: last 30 days) and is used as both the replication key and the incremental filter — this only catches new orders, not status changes to orders created before the current bookmark window.Implementation Notes
Sync mode
shop_orders and attendances sync incrementally. All other streams are full-table syncs.
Pagination
Suri’s simpleGET list endpoints (departments, attendants, channels, templates, campaigns, flows, attendance reasons, shop categories/stores/collections) return their full result set in one response — every example in the API reference does, and no page/limit params are documented for them.
The POST-based list/search endpoints paginate differently from each other:
contacts: cursor viacontinuationToken, echoed back in the request body.shop_products: cursor viapageToken+ ahasMoreflag, both underdata.shop_orders: page number (Page/PerPagein the request body) + ahasMoreflag underdata.
API limitations / undocumented behavior
This V1 was built entirely from the public API reference — Nekt does not yet have access to the requesting customer’s Suri account to validate against real data. Known gaps:contactshas no server-side date filter, so it’s a full sync every run (see the Contacts note above).- Several nested fields have no documented schema and were always null/empty in every sample response:
shop_orders.seller/customer/logistic/payment/items/platformUser/errorMessages/origin/referral,flows.actions/trigger, andshop_products.dimensions’s inner variant/stock shape. These are kept as raw JSON strings. - The “get by id” endpoints (contact, template, campaign, category, product, order, collection, flow, attendance reason by id) and
GET /contacts/:user_id/messagesexist in the API but aren’t included in V1 — they need an id from a parent stream and largely duplicate data already present in the corresponding list endpoint. - Write/action endpoints (import contact, send message, create/update/delete category/product/collection/order actions, webhook registration) are out of scope for an extractor.
Skills for agents
Download Suri skills file
Suri connector documentation as plain markdown, for use in AI agent contexts.