Seats are billed per month. A seat you add starts right away, prorated to your next renewal.
- Open Billing, then Plan and seats.
- Choose Add seats and pick how many.
- Confirm. Your new teammates can sign in at once.
Your customers get answers on the screen they're stuck on, without opening another tab. One script gives your app search, AI answers that cite your articles, and help that opens exactly where it's needed.
The widget is on every plan. AI answers are included on Catalyst, or a $29/mo add-on on Bootstrap and Growth. Send this to your developer
Yes. Open Billing and choose Add seats.1 You pay a prorated amount for the rest of this cycle, and you can remove the seat before your next renewal.2
React, Vue, Angular or plain HTML, single-page apps included.
From your own button, a ? beside a setting or a link in your UI.
AI answers come only from your published articles, with citations.
Your colours, launcher icon, greeting and texts, in your languages.
Pick one to see what your customers get and what your developer adds. They all run on the same script, so you can start with one and add the rest later.
One click opens your help center over the screen your customer is on: search, the articles that fit that screen, your most read guides, your categories and a way to reach your team.
Suggestions for the current screen need a plan with AI.
<!-- Before </body>, on every page of your app -->
<script>
window.hcOptions = { app_id: 'YOUR_WIDGET_ID' };
</script>
<script src="https://helpcenter.io/js/init.js" async></script>
Hide the launcher and open help from your header, an onboarding checklist or a command palette. The widget opens as a full-height panel beside your app, and full screen on phones.
window.hcOptions = {
app_id: 'YOUR_WIDGET_ID',
showButton: false, // no floating launcher
onWidgetReady: function () {
document.getElementById('help-button').disabled = false;
}
};
document.getElementById('help-button').addEventListener('click', function () {
window.hcWidget.show();
});
Seats are billed per month. A seat you add starts right away, prorated to your next renewal.
Put a ? beside a tricky setting, or turn any "Learn more" link into one that opens the article inside the widget. Your customer reads it next to the field and carries on. Each screen can also list its own category of articles first.
<!-- A ? that opens the article inside the widget -->
<a href="https://help.flowline.io/content/add-or-remove-seats" data-hc-article>?</a>
<script>
// On the billing screen, list the Billing category first
window.hcWidget.onReady(function () {
window.hcWidget.setCategory(4821);
});
</script>
Show your full help center, with its search, categories and articles, as a page of your app. It keeps your help center's design, grows to the height of each page, and your app's address follows along, so a link to an article opens it right there. With JS-only access on, it opens only inside the sites you approve.
<!-- On your app's /help page -->
<div id="hc_embed"></div>
<script>
window._hcEmbedOpts = { customDomain: 'help.flowline.io' };
</script>
<script src="https://helpcenter.io/js/embed.js"></script>
Put the questions everyone asks about billing right under your plan picker. You edit an answer once in your help center, and every screen that shows it updates. Pick the questions yourself, or show every FAQ grouped by category.
<!-- Anywhere on a page that has the widget snippet -->
<div class="hc-faq-section" data-id="YOUR_SECTION_KEY" data-type="custom"></div>
Offer help when a customer lingers on a screen, scrolls past your pricing, goes idle in a form, or when your own code says something went wrong. One click on the message opens the widget.
2 messages with page and time rules on Bootstrap. Up to 50 messages and all 13 triggers on Growth and Catalyst.
// After an import fails in your app. A message with the
// Custom event rule "import_failed" shows over the launcher.
window.hcWidget.trigger('import_failed');
It's connected to our own help center, in the corner of your screen. Ask it how to install it, or open our install guide in it the way a ? link would in your app.
Ask AI reads your published articles and writes one answer, with a numbered citation for every claim and the sources underneath. Your customers can keep asking: follow-up questions carry the context of the conversation. When your articles don't cover something, it says so instead of guessing, and points to your team.
Yes. Invite them from Team, then Invite, and choose the Viewer role.1 Viewers can open dashboards and reports, but can't edit them, export data or invite anyone.2
Not as a Viewer. Exporting needs the Editor role or above.1 If they only need the numbers, an Editor can schedule the report to email them a CSV every Monday.2
Yes. Invite them from Team, then Invite, and choose the Viewer role.1 Viewers can open dashboards and reports, but can't edit them, export data or invite anyone.2
Not as a Viewer. Exporting needs the Editor role or above.1 If they only need the numbers, an Editor can schedule the report to email them a CSV every Monday.2
Most failed imports have a date column in a format Flowline doesn't read.1 Open Data imports and click the failed import: the error list names each row and column. Change those dates to YYYY-MM-DD and upload just the failed rows again.2
Yes. Under Data imports, choose New source, then Google Sheets, and pick the sheet. Flowline checks it for new rows every hour.1
I couldn't find anything about nonprofit pricing in the Flowline help center, so I won't guess. Our team can tell you directly.
Flowline reads from Snowflake, BigQuery, Redshift and Postgres with a read-only user.
Every article that opens in the widget comes with an "Ask about this article…" bar. The answer comes from that article alone, so a customer in the middle of a setup guide gets the step they need without starting a new search.
The widget reads the text of the page and suggests the two articles that match it best. On a plan with AI.
Tell the widget which category belongs to each part of your app, and your billing screen lists billing articles first. On every plan.
Page address, time on page, scroll depth, idle, exit intent, an abandoned form, a click, your own events from code and more. Test a message against any address before it goes live. 2 messages with page and time rules on Bootstrap. Up to 50 messages and all 13 triggers on Growth and Catalyst.
Your backend signs a short-lived token for the customer who is already logged in, and the widget sends it with every request. There's no second login, and private categories, like admin guides or the docs for one plan, show up in the widget's categories and search only for the readers they're shared with.
Set the two colours of the gradient, pick a launcher icon, and write the brand name, greeting and texts. The live preview shows every change before you save, and you can remove the HelpCenter.io branding.
Bottom right by default, bottom left with one option.
Show the widget in any of your help center's languages, with your own translations of its buttons and labels. Several languages on Growth and Catalyst.
On screens narrower than 450 pixels the widget opens full screen.
"Still stuck? Message our team" opens a short form inside the widget that emails your team. Rather use your own chat or ticket form? One option in the snippet hands that moment to your code instead.
onContactsRequest: openSupportChat
Filter your statistics to the widget and you see your in-app help on its own: what people searched, which searches found nothing, what they asked AI about each article, and how many solved it themselves before contacting you.
Each snippet is a few lines of plain JavaScript or HTML, with no package to install and no build step. Forward this section, or send the docs straight to whoever looks after your app.
<!-- Before </body>, on every page of your app -->
<script>
window.hcOptions = { app_id: 'YOUR_WIDGET_ID' };
</script>
<script src="https://helpcenter.io/js/init.js" async></script>
window.hcOptions = {
app_id: 'YOUR_WIDGET_ID',
showButton: false, // no floating launcher
onWidgetReady: function () {
document.getElementById('help-button').disabled = false;
}
};
document.getElementById('help-button').addEventListener('click', function () {
window.hcWidget.show();
});
<!-- A ? that opens the article inside the widget -->
<a href="https://help.flowline.io/content/add-or-remove-seats" data-hc-article>?</a>
<script>
// On the billing screen, list the Billing category first
window.hcWidget.onReady(function () {
window.hcWidget.setCategory(4821);
});
</script>
window.hcOptions = {
app_id: 'YOUR_WIDGET_ID',
jwt: firstTokenFromYourServer,
// Each token is used once, so the widget asks for the next one here
onAuthExpired: async function () {
const response = await fetch('/helpcenter-token', { credentials: 'include' });
const { jwt } = await response.json();
return jwt;
}
};
window.hcOptions = {
app_id: 'YOUR_WIDGET_ID',
// Runs instead of the widget's own contact form
onContactsRequest: function () {
openSupportChat();
}
};
<!-- On your app's /help page -->
<div id="hc_embed"></div>
<script>
window._hcEmbedOpts = { customDomain: 'help.flowline.io' };
</script>
<script src="https://helpcenter.io/js/embed.js"></script>
<!-- Anywhere on a page that has the widget snippet -->
<div class="hc-faq-section" data-id="YOUR_SECTION_KEY" data-type="custom"></div>
// After an import fails in your app. A message with the
// Custom event rule "import_failed" shows over the launcher.
window.hcWidget.trigger('import_failed');
Send your developer a short email with this page and the four docs they need. It opens in your own mail app; nothing is sent until you press send.
Email this to your developerSomeone who can edit your app's HTML pastes one snippet before the closing body tag; in a single-page app it goes in the app shell, once. Everything else, from colours, launcher icon and texts to proactive messages and FAQ sections, is set in your HelpCenter.io dashboard without code.
Yes. Load the snippet once and the widget stays put through route changes. Call hcWidget.setCategory() on each route to list the help for that screen first, and each route change counts as a new page for your proactive messages.
Yes, with single sign-on on Catalyst. Your backend signs a short-lived token (a JWT) for the customer who is logged in, and the widget sends it with every request, so there is no second login and private articles show only to the readers they are meant for.
Ask AI, follow-up questions, questions about an article and suggestions for the current screen are included on Catalyst, or available as a $29 per month add-on ($24 per month billed annually) on Bootstrap and Growth. The widget itself, search, articles, FAQ sections, proactive messages and the contact form are on every plan. There is no per-answer fee; fair-use limits apply.
Yes. Embed it as a page of your app and turn on JS-only access, and your help center opens only inside the websites you list. Embedding the whole help center is part of Growth and Catalyst. JS-only access is not access control on its own: to limit who can read your articles, make the help center private and sign readers in with single sign-on.
The loader is loaded asynchronously, so it does not hold up your page, and the widget runs in its own frame. One snippet loads the widget, your FAQ sections and your proactive messages.
Ask AI says it could not find it rather than guessing, and the widget offers "Still stuck? Message our team". That opens a short contact form that emails your team, or, if you prefer, your own chat or ticket form through the onContactsRequest option.
Start a trial, paste one snippet, and see your help center inside your own product.
Help could not load. Open our help center.