Embed widget
Add this script to any page. Create an embed key in the dashboard under Embed.
<script
src="https://fynd.chat/widget/fynd.js"
data-key="YOUR_EMBED_KEY"
data-bot="default"
async></script>
data-key: shop embed key (pk_live_…)data-bot: bot slug (default bot if omitted)data-position: launcher side: right (default) or leftdata-launcher: launcher emoji / label (default 💬)data-launcher-icon: optional image URL for the launcher buttondata-locale: optional UI locale override (e.g. nl, en)data-api: optional API base override
The public embed key (pk_live_…) is safe in the browser. Never put an sk_live catalog key in frontend code.
Catalog REST API
Push products into Fynd as an alternative or complement to sitemap and feeds. Indexed products power recommendations, prices, and product cards in chat.
Authenticate with
Authorization: Bearer sk_live_…
Base URL:
https://fynd.chat/api/v1/catalog
Create a key under API keys in the dashboard (Growth+). The full key is shown once. Store it securely. Plan limits apply to products and API keys (402 when exceeded).
Endpoints
-
GET /products: list / search (q,page,bot) PUT /products/{external_id}: create or update one productPOST /products/bulk: bulk upsert (max 500 per request)DELETE /products/{external_id}: soft-delete (available: false)POST /sync: re-index all available products for search / RAG
Writes default to the shop-wide shared catalog. Add ?bot=slug for a bot-specific overlay (overrides shared for the same external_id).
Product fields
| Field | Required | Notes |
|---|---|---|
external_id |
Yes | Your SKU / ID (URL path or bulk body) |
title |
Yes | Product name (max 500) |
description |
No | Text used for RAG / advice |
price |
No | Numeric price |
currency |
No | e.g. EUR |
product_url |
No | Link to the product page |
image_url |
No | Image for the product card |
category |
No | Category label |
attributes |
No | JSON object, e.g. specs |
available |
No | Boolean; default true |
Example: upsert
curl -X PUT https://fynd.chat/api/v1/catalog/products/MBP-14 \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "MacBook Pro 14\"",
"description": "Powerful laptop for pros",
"price": 1999,
"currency": "EUR",
"product_url": "https://shop.example/macbook-pro-14",
"image_url": "https://shop.example/mbp.jpg",
"category": "Laptops",
"attributes": {"ram": "16GB"},
"available": true
}'
Example: bulk
curl -X POST https://fynd.chat/api/v1/catalog/products/bulk \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"products": [
{
"external_id": "SKU-1",
"title": "Product A",
"price": 49.99,
"currency": "EUR",
"product_url": "https://shop.example/a"
},
{
"external_id": "SKU-2",
"title": "Product B",
"price": 79.00,
"currency": "EUR",
"product_url": "https://shop.example/b"
}
]
}'
Example: search, overlay, delete & sync
# Search
curl "https://fynd.chat/api/v1/catalog/products?q=macbook&page=1" \
-H "Authorization: Bearer sk_live_YOUR_KEY"
# Bot overlay
curl -X PUT "https://fynd.chat/api/v1/catalog/products/MBP-14?bot=default" \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"MacBook Pro 14\" (bot)","price":1899,"currency":"EUR"}'
# Soft-delete
curl -X DELETE https://fynd.chat/api/v1/catalog/products/MBP-14 \
-H "Authorization: Bearer sk_live_YOUR_KEY"
# Re-index
curl -X POST https://fynd.chat/api/v1/catalog/sync \
-H "Authorization: Bearer sk_live_YOUR_KEY"
Knowledge sources
Besides the Catalog API, sync knowledge from the dashboard with no code required.
- Custom knowledge: paste FAQs, policies, and tips (all plans)
- Sitemap crawl: each URL becomes a sync row you can watch (Growth+)
- Product feed XML/CSV: URL or upload (Growth+)
- REST pull: fetch a remote catalog on a schedule (Growth+)
- Catalog push API: the REST endpoints above (Growth+)
Rate limits
Catalog API and widget endpoints are throttled per key and IP to prevent abuse.
- Catalog API: 120 requests / minute per API key, 60 / minute per IP.
- Widget config/events: 120 requests / minute per embed key, 60 / minute per IP.
- Widget chat: 20 messages / minute per embed key, 10 / minute per IP (lower on the public demo).
- Plan limits (messages, products, bots) apply on top of technical throttles.
Error codes
API errors return JSON with a clear status code.
401: missing or invalid API key402: plan / license limit reached (products, feature)403: no access to this shop or feature404: product or bot not found422: validation error in the payload429: rate limit hit; retry later
Widget events
The embed widget sends allowlisted analytics events to your shop dashboard.
widget_open: visitor opens the advisormessage_sent: visitor sends a messageproduct_click: visitor clicks a recommended productlead_submit: visitor leaves contact details