Projects

One widget, or severallink

A chat project is a self-contained chat setup: its own appearance and messages, its own agents, and its own conversation queue. An organization that runs one site needs exactly one, and that one already exists, so nothing here is required reading to get started.

Reach for a second project when you run a second site or brand and you do not want the two streams of conversations mixed together. Agents can be restricted to a subset of projects, so a team handling one brand never sees another brand's customers.

Which project a widget opens chats inlink

The API key decides, and only the API key. The client never names a project.

The key you ship in a widget is a publishable key: the key ID sits in your page source where anyone can read it. If the embed could also name a project, anyone reading that page source could open conversations against any project in your organization, or read another project's configuration. So the server ignores any project the client offers and reads it from the key alone.

That leads to one rule: issue one key per project.

The key you usedWhat happens
Bound to one chat projectConversations open in that project
Bound to no chat projectConversations open in your organization's default project
Bound to two or more chat projectsThe request is rejected, so that nothing is opened in the wrong place by accident

Existing integrations keep workinglink

Every key issued before chat projects existed is bound to no project, so it falls into row two and resolves to the default project. That is the same data it always read and wrote. No redeploy of any widget or app is needed. This applies to the web widget and to the Android, iOS, React Native and Flutter SDKs equally, because they all authenticate the same way.

Binding a key to a projectlink

In the dashboard, open API Keys, create or edit a key, choose Chat among its products, and pick the project from the picker that appears. Leave it on Organization default project to keep the fallback behaviour.

No code changes: the same data-api-key or SDK key you already ship now resolves to the project you picked.

<script
  src="https://widget.newinstance.cloud/loader.js"
  data-api-key="sk_live_storefront_key"
  defer
></script>

Ship a different key on each site, and each site's conversations land in its own project.

Plan limitslink

Projects are included in your plan rather than billed separately, and each plan allows a set number. Creating one past that limit returns RESOURCE_LIMIT_EXCEEDED and names the current limit. Deleting a project frees its slot.

A project that still holds conversations cannot be deleted, and the default project cannot be deleted at all, since it is what unbound keys fall back to.