# Concatflow > Embed a data assistant in your product. Your customers ask questions about their own data, and every value they see is read from your database. - [Get started](https://docs.concatflow.com/index.md): Put a data assistant in your product and learn how to build on Concatflow. - [How Concatflow works](https://docs.concatflow.com/concepts.md): Three pieces, two doors, and why every value on screen comes from your database. - [Quickstart](https://docs.concatflow.com/quickstart.md): Put the assistant on a page in five minutes. Two tags, no build step, no server code. - [Where to find your identifiers](https://docs.concatflow.com/identifiers.md): Three identifiers, where each one lives in the dashboard, and where it may go. - [Add a search bar to your marketing site](https://docs.concatflow.com/tutorials/marketing-site.md): Let anonymous visitors ask questions about your public data, from a static HTML site. No server code, about 15 minutes. - [Build a per-customer assistant with Next.js](https://docs.concatflow.com/tutorials/nextjs-per-customer.md): A Next.js app where each logged-in customer asks questions about their own data, and never sees another customer's rows. About 20 minutes. - [Per-user door](https://docs.concatflow.com/guides/per-user-door.md): Let each logged-in customer ask about their own data. Your server opens a session, your page shows the assistant. - [React](https://docs.concatflow.com/guides/react.md): One component, , for both doors. Works with Next.js, Remix, Vite and any React 18+ app. - [Bar or bubble](https://docs.concatflow.com/guides/bar-or-bubble.md): Three launchers: an inline search bar, a ⌘K bar, or a chat bubble. Same assistant, same conversation. - [Theme, accent and placeholder](https://docs.concatflow.com/guides/appearance.md): Match the assistant to your product: light or dark, your accent colour, your own prompt. - [Session renewal](https://docs.concatflow.com/guides/session-renewal.md): Tokens last 15 minutes. Conversations last much longer. onSessionExpired bridges the two. - [Read and erase a conversation](https://docs.concatflow.com/guides/conversations.md): Read what a customer asked, and erase it when they delete their account. No ticket, no email to us. - [Content Security Policy](https://docs.concatflow.com/guides/csp.md): One origin to allow, in two directives. Nothing else. - [Versioning](https://docs.concatflow.com/guides/versioning.md): The widget updates itself. Your copy of the npm package keeps working. - [Testing](https://docs.concatflow.com/guides/testing.md): There is no test mode. Test on your own assistant, from localhost, with a test customer. - [Go-live checklist](https://docs.concatflow.com/guides/go-live.md): Ten checks before your customers see the assistant. - [Private databases](https://docs.concatflow.com/private-databases/overview.md): Connect a database that never accepts inbound connections. A small agent runs next to it and calls out to Concatflow. - [Quickstart](https://docs.concatflow.com/private-databases/quickstart.md): Connect a PostgreSQL database in a closed network to Concatflow, end to end. - [Create a read-only account](https://docs.concatflow.com/private-databases/guides/read-only-account.md): The agent only serves an account that cannot write. Here is how to create one on each database. - [Run with Docker Compose](https://docs.concatflow.com/private-databases/guides/docker-compose.md): Keep the agent next to your other services, with its token and database URL out of the file. - [Run two agents](https://docs.concatflow.com/private-databases/guides/high-availability.md): A second agent on another machine keeps the dataset online when the first one stops. - [Revoke, replace and rotate](https://docs.concatflow.com/private-databases/guides/revoke-and-replace.md): Cut an agent off, move it to a new machine, or change the database password. - [Network requirements](https://docs.concatflow.com/private-databases/guides/network.md): The agent needs two outbound HTTPS destinations on port 443. Nothing inbound. - [Agent configuration](https://docs.concatflow.com/private-databases/reference/configuration.md): Every environment variable, file and exit code of the agent. - [Security model](https://docs.concatflow.com/private-databases/reference/security.md): What the agent can reach, what Concatflow can ask of it, and what stays on your machine. - [Troubleshooting](https://docs.concatflow.com/private-databases/troubleshooting.md): Every error the agent prints, what it means, and how to fix it. - [SDKs](https://docs.concatflow.com/reference/sdks.md): Two small libraries: one for your page, one for your server. Both typed, no dependencies. - [@concatflow/embed](https://docs.concatflow.com/reference/embed/overview.md): The browser library. It loads the hosted widget.js and gives you a typed Concatflow object. - [loadConcatflow()](https://docs.concatflow.com/reference/embed/load-concatflow.md): Load widget.js once and get a typed Concatflow object. - [Concatflow.init()](https://docs.concatflow.com/reference/embed/init.md): Create an assistant on the page. Pass exactly one of session or siteToken. - [Assistant instance](https://docs.concatflow.com/reference/embed/instance.md): open(), close(), setSession() and destroy(): what init() returns. - [](https://docs.concatflow.com/reference/embed/react.md): The React component from @concatflow/embed/react. React 18 or later. - [](https://docs.concatflow.com/reference/embed/element.md): The custom element defined by widget.js. The public door with no JavaScript of your own. - [@concatflow/node](https://docs.concatflow.com/reference/node/overview.md): The server library. Opens sessions and manages conversations with your secret API key. - [Concatflow client](https://docs.concatflow.com/reference/node/client.md): The server-side client from @concatflow/node. Node 18 or later, no dependencies. - [sessions.create()](https://docs.concatflow.com/reference/node/sessions-create.md): Open a session for the customer logged in to your product. - [conversations.list()](https://docs.concatflow.com/reference/node/conversations-list.md): Read one customer's conversation with an assistant. - [conversations.erase()](https://docs.concatflow.com/reference/node/conversations-erase.md): Erase one customer's conversation. For account deletion and GDPR erasure requests. - [Errors](https://docs.concatflow.com/reference/node/errors.md): Every non-2xx answer throws a ConcatflowError with its status, code and body. - [API reference](https://docs.concatflow.com/reference/api/overview.md): Three server-to-server routes. @concatflow/node wraps them; any language can call them. - [Authentication](https://docs.concatflow.com/reference/api/authentication.md): A secret API key, as a bearer token, from your server only. - [Errors](https://docs.concatflow.com/reference/api/errors.md): Standard HTTP status codes, and a machine-readable code to branch on. - [Partitions](https://docs.concatflow.com/reference/api/partitions.md): How a customer is named: an object in bodies, key=value in query strings. - [Create a session](https://docs.concatflow.com/api-reference/create-a-session.md): Open a session for one logged-in customer, on the per-user door. Hand the `token` to the page's `init({ session })`, which expires 15 minutes later: see [Session renewal](/guides/session-renewal). Take the partition values from your own session, never from the request. On Node, call [`sessions.creat… - [Get a conversation](https://docs.concatflow.com/api-reference/get-a-conversation.md): Read one customer's conversation. A customer with no conversation gets an empty thread: `since` is `null` and `messages` is `[]`. On Node, call [`conversations.list`](/reference/node/conversations-list). - [Erase a conversation](https://docs.concatflow.com/api-reference/erase-a-conversation.md): Erase one customer's questions, answers and blocks, and revoke their open sessions. The cost of past questions is kept, without content. Erasing a customer with no conversation also returns `204`. Call it when a customer deletes their account. On Node, call [`conversations.erase`](/reference/node/co… - [Changelog](https://docs.concatflow.com/reference/changelog.md): What changed in @concatflow/embed, @concatflow/node and the HTTP API. ## OpenAPI Specs - [openapi](/openapi.yaml) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.