Capture feedback, connect your stack, power Webflow
One script embeds rich ticket capture on any site. Route tickets to Slack, Jira, and webhooks. Run Webflow CMS pipelines and an AI assistant for site updates.
Create a project
Sign in, open the dashboard, and add a project for your product or site.
API key and allowed domain
Generate the single API key for that project and allow the hostnames where the widget will run.
Paste the script
One script tag with your hub URL, apiKey, and lang. The hub checks the embedding origin and injects locale and keyboard shortcuts from the dashboard.
Rich ticket capture
Collect structured feedback with categories, priority, rich descriptions, screenshots, and console context — then triage on a real kanban board.
Reporter form
Project board
Backlog
When the cart includes a subscription SKU, the checkout button stays disabled and the user cannot complete payment.
In Progress
Several labels in settings use fg.muted on a dark background and fail WCAG AA. We should bump contrast on secondary text.
Done
Legacy ticket without a generated title.
Try the widget
Use Cmd/Ctrl + M or the button below. Configure your own shortcut per project in the dashboard. Widget is active on this page — use the shortcut or buttons above to open it.
Integrated Tktries project
The same embed that captures tickets opens an integrated hub overlay with Tickets and Chat tabs for signed-in teammates. Triage work, discuss in project chat or per-ticket threads, and stay on your site—with an optional new-tab fallback when browsers restrict third-party iframes.
Capture ticket
Embedded hub
Discuss in chat
One script for tickets and the hub
Reporters stay on your site for the widget. Team members with a Tktries account use the embedded hub to triage tickets and chat without juggling a second tab—unless they choose Open in new tab.
Less friction for reporters
A single name and email step still unlocks ticketing for visitors who have not used the widget before.
Open the hub from your UI
Call window.Tktries?.openTktries() for the full project, or window.Tktries?.openChat() to land with general chat open. Use the project shortcut (defaults to Cmd/Ctrl + Shift + C on this page) for chat-first entry. Configure shortcuts per project in the dashboard.
Project chat for the team
A shared project channel keeps everyone aligned. Open chat from the embed shortcut or window.Tktries?.openChat()—no context switch to a separate app.
Ticket threads
Discuss a specific ticket in its own thread. Open a ticket from the hub list and jump straight into the conversation tied to that issue.
Collaborate without leaving your site
Reporters file feedback in the widget while teammates triage, assign, and discuss in the same embedded overlay. Everyone stays in the product context where the issue was found.
Mount the demo widget and allow this hostname for your API key. The hub looks up the project slug automatically.
Connect your stack
When a ticket is created, Tktries fans out to Slack, Jira Cloud, and HTTPS webhooks in parallel. Encrypted credentials, delivery logs, and retries are built in.
Post formatted summaries to a Slack channel via incoming webhook or bot token (threaded updates for pipelines).
*New ticket* — Checkout fails when the cart contains a subscription
Reporter: Alex Morgan <alex@example.com>
Category: bug · Priority: high
Page: https://example.com/checkout
When the cart includes a subscription SKU, the checkout button stays disabled…
Open in hub: https://tkt.example.com/app/projects/demo/tickets/tk_01HX…Also available: native Trello list connector.
Built for Webflow
Scope the embed to Webflow preview URLs, run scheduled CMS pipelines, and chat with an assistant to update site content.
Load the widget only on *.webflow.io hosts so shortcuts stay scoped to preview and staging while window.Tktries.open* stays available everywhere.
<script>
(function () {
if (!window.location.hostname.endsWith('webflow.io')) return
var s = document.createElement('script')
s.src = 'https://tkt.coteries.com/ticketing-standalone.js?apiKey=YOUR_API_KEY&lang=en'
s.referrerPolicy = 'origin'
document.head.appendChild(s)
})()
</script>Scheduled sync and maintenance routines for your Webflow CMS collections.
How it works
Connect collection
Map & configure
Schedule & sync
Features
Import & sync
Upsert items from CSV or external feeds into a Webflow CMS collection with field mapping and a stable sync key.
Archive expired
Archive CMS items automatically when a date field is in the past—no manual cleanup in the designer.
Scheduled runs
Run hourly, daily, or weekly on UTC cron. Trigger a manual run anytime from the dashboard.
Dry run
Preview creates, updates, and removals before any write to Webflow—safe to test mapping changes.
Publish after changes
Optionally publish synced items to your live site when a pipeline finishes applying changes.
Run logs & Slack
Per-run summaries in the project dashboard. Post pipeline updates to a Slack channel or thread.
Pipeline types
Import and sync
Map an external feed into the target collection (create, update, optionally remove missing items).
Archive expired items
Archive target collection items whose date field is in the past.
Pipeline steps
Experimental assistant: inspect and update CMS and static page copy via API. Approve changes before they are applied.
Cursor & Claude MCP integration
Connect Tktries to Cursor, Claude Code, and Claude Desktop via a hosted MCP endpoint. Enable MCP in your project embed settings—one API key grants access to that project only.
Available tools
get_project — Confirm which project your API key is scoped to.
list_tickets — List tickets with optional status and workflow filters.
get_ticket — Fetch full ticket detail including description, page URL, and console context.
update_ticket — Patch title, description, assignee, or workflow status.
complete_ticket — Mark a ticket done and optionally append a fix note.
Cursor configuration
Add to ~/.cursor/mcp.json (or .cursor/mcp.json in your repo). Replace YOUR_PROJECT_API_KEY with your project API key, then restart Cursor. Same hosted-URL pattern as Sentry—no extra package required.
{
"mcpServers": {
"tktries": {
"url": "https://tkt.coteries.com/api/mcp?api_key=YOUR_PROJECT_API_KEY"
}
}
}Claude Code
Add to .mcp.json in your project root (or the mcpServers section of ~/.claude.json for all projects). Use type http with the hosted URL below, replace YOUR_PROJECT_API_KEY, then restart Claude Code.
{
"mcpServers": {
"tktries": {
"type": "http",
"url": "https://tkt.coteries.com/api/mcp?api_key=YOUR_PROJECT_API_KEY"
}
}
}Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json on macOS (or the equivalent path on Windows/Linux). Claude Desktop uses stdio locally—mcp-remote bridges to the hosted Tktries endpoint. Replace YOUR_PROJECT_API_KEY, then fully quit and reopen Claude Desktop.
{
"mcpServers": {
"tktries": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://tkt.coteries.com/api/mcp?api_key=YOUR_PROJECT_API_KEY"
]
}
}
}Do not commit your API key. Prefer local config files that are gitignored. Rotate the key in embed settings if it is exposed.
Developer reference
Embed snippets, options, and hosting notes. Open a section to see details.
Serve /ticketing-standalone.js from your deployed hub (it bundles public/ticketing-standalone.bundle.js built by pnpm build or pnpm exec tsup).
Basic embed
<script src="https://tkt.coteries.com/ticketing-standalone.js?apiKey=YOUR_API_KEY&lang=en" referrerpolicy="origin"></script>Conditional load
Inject the script only when your rule matches (cleanup on unload is unnecessary — the hub script initializes once).
<script>
(function () {
if (!window.location.hostname.endsWith('webflow.io')) return
var s = document.createElement('script')
s.src = 'https://tkt.coteries.com/ticketing-standalone.js?apiKey=YOUR_API_KEY&lang=en'
s.referrerPolicy = 'origin'
document.head.appendChild(s)
})()
</script>Default embed: query parameters on /ticketing-standalone.js. The hub validates the embedding page’s host against your allowed domains, then serves the widget and calls initTicketing with assistantUrl, shortcuts from the project, and locale from lang. Optional onlyOpenOn (glob on the page URL, * wildcard) limits those keyboard shortcuts; window.Tktries.open* is unchanged. You can also open the dialog from your own UI with window.Tktries?.openTicket(), window.Tktries?.openChat(), and window.Tktries?.openTktries() (each returns a Promise).
apiKey (query)
RequiredProject API key. Also sent as X-Api-Key from the widget. Appears in URLs and logs — use referrerpolicy="origin" on the script tag when possible.
lang (query)
Optionalen, fr, or de (default en).
Self-hosted bundle
AdvancedLoad ticketing-standalone.bundle.js and call window.initTicketing yourself with assistantUrl, apiKey, locale, and shortcuts.
Shadow DOM
Isolated styles so the widget does not clash with your page.
Messages and events
Open the dialog via postMessage or custom DOM events.
Keyboard shortcut
Default Cmd/Ctrl + M; override per project in the dashboard.
For the live demo above: set NEXT_PUBLIC_APP_URL (or rely on localhost in dev), NEXT_PUBLIC_TKT_API_KEY from the dashboard, and allow your current host (e.g. localhost) for that key.






