Guides
Recipe: Embed the AI Widget Anywhere
Your doc site's AI assistant can live on any page you control — turn "Contact support" into "Ask the docs" on your marketing site, inside your app, or in your support portal.
Basic Embed
Add one script tag:
<script
src="https://widget.syntext.dev/widget.js"
data-project-id="prj_abc123"
async
></script>
This renders a floating chat button. The widget:
- Fetches its name/persona from your project's widget config
- Streams answers from the chat endpoint with citations linking back to your docs
- Applies per-visitor rate limits automatically
Passing Page Context
If the widget is embedded in your app, tell it what the user is looking at for more relevant retrieval:
<script
src="https://widget.syntext.dev/widget.js"
data-project-id="prj_abc123"
data-page-context="/dashboard/billing"
async
></script>
Building a Custom UI
Skip the widget entirely and call the API from your own frontend:
const res = await fetch(
`https://api.syntext.dev/v1/projects/${PROJECT_ID}/chat`,
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
question,
visitorId, // stable anonymous ID you generate
sessionId, // from previous X-Session-Id header, for follow-ups
}),
}
)
const sessionId = res.headers.get('X-Session-Id')
const reader = res.body!.getReader()
// ...consume the SSE stream
Add feedback buttons that call the feedback endpoint — thumbs-down answers feed your documentation gaps report.
Things to Know
- The chat endpoint is public by design (it's what your doc site uses) — abuse is contained by visitor rate limits and your org's monthly AI quota
- Answers only draw from your indexed documentation
- Handle the
429and403 USAGE_LIMIT_EXCEEDEDresponses gracefully in custom UIs — show a cooldown message rather than an error
Was this page helpful?