If you’ve never created a project, you’re already using one: every org has a built-in Production project (slug
default). Existing data and SDK calls belong to it automatically, so you don’t need to change anything unless you want multiple projects.What a project is
A project is a named, isolated slice of your org. Everything you send to Raindrop is recorded against exactly one project, and the dashboard, signals, and AI features only ever read from one project at a time. Each project has two identifiers:| Field | Mutable? | Used for |
|---|---|---|
| Slug (project ID) | No (frozen at creation) | The X-Raindrop-Project-Id header, SDK options, and URLs |
| Display name | Yes | What you see in the dashboard |
support-prod). It is chosen when the project is created and never changes. Renaming a project changes only its display name; the slug stays the same, so any header, SDK option, or saved URL referencing it keeps working.
The default “Production” project
Every org starts with one reserved project:- Its slug is
defaultand cannot be changed or reused. - Its display name is Production (you can rename the display name, but not the slug).
- It is the implicit project: any request that doesn’t specify a project resolves to
default.
Isolation
Projects are isolated end to end:- Ingest: events, traces, and signals are stored against the project they were sent to.
- Dashboards and analytics: the dashboard scopes everything (events, conversations, issues, stumbles) to the selected project.
- AI features: topic classification, signals, Tiny Models, and the Triage Agent operate per project, so a model trained in one project doesn’t leak into another.
Archival
Projects can be archived when you no longer need them. There is no hard delete yet.- Archiving hides a project from the dashboard and stops it from accepting new data.
- Archived slugs are not reusable: you can’t create a new project that reuses an archived project’s slug.
- Data sent to an archived project is rejected with a
403. See Behavior. - The
defaultproject cannot be archived.
Permissions
Creating, renaming, and archiving projects is restricted to Owner and Admin roles. Members can send data to and view existing projects, but cannot manage the project list.Setting the project from an SDK
You select a project per request by sending its slug. The canonical contract is theX-Raindrop-Project-Id HTTP header; each SDK also exposes an option that sets this header for you.
When the slug is omitted, empty, or
default, the request resolves to the Production (default) project, identical to not specifying a project at all.HTTP header (canonical)
Send the project slug in theX-Raindrop-Project-Id header alongside your write key:
TypeScript / JavaScript
PassprojectId when constructing the client; every event from that client is scoped to the project:
@raindrop-ai/browser-sdk) accepts the same projectId option.
Python
Passproject_id to raindrop.init(...):
Behavior
The table below describes what happens to data you send on ingest:| Project sent on ingest | Result |
|---|---|
Unset, empty, or default | Resolves to the Production (default) project (backward compatible) |
| An active project slug in your org | Accepted and scoped to that project |
| A new slug your org hasn’t created yet, within the per-org limit | Accepted; the data is stored and the slug appears in Settings -> Projects to be created (see Discovering projects from ingested data) |
| An archived project slug | Request rejected with 403 |
| A new slug beyond the per-org limit | Request rejected with 403 |
| A malformed slug | Request rejected with 400 |
403 on read.
Event views are finalized-only, so events sent via
trackAiPartial / track_partial appear once they finalize, not while still pending. This is independent of projects. See Core Concepts.Discovering projects from ingested data
You don’t have to create a project before you send data to it. When you send events with a new slug your org hasn’t used yet, Raindrop accepts them and stores the data under that slug, up to a per-org limit on slugs that don’t yet have a project. Each such slug then appears in Settings -> Projects under “Projects with data, not yet created”, along with how many events it has received and when it was last seen. An Owner or Admin can select Create project there to create it. The data only becomes visible in the dashboard and the Query API once the project has been created. This lets you start sending from a new slug in your code first and create the project in the dashboard afterward, without losing the data sent in between. Once your org reaches the limit, further new slugs are rejected with a403 until you create some of the pending ones.
Backward compatibility
Projects are fully backward compatible. Orgs that never set a project keep sending to thedefault project, and every existing query, dashboard, and SDK call behaves exactly as before. You only opt in to multi-project behavior by creating additional projects and sending their slugs.