> For the complete documentation index, see [llms.txt](https://docs.veilio.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.veilio.xyz/documentation/basics/organizations-and-teams.md).

# Organizations & Teams

Veilio organizations let you **collaborate** on tokenized data: shared datasets, column-level access policies, member roles, and invitations.

> Organizations are **not** Enterprise-only. Freemium, Starter, and Pro accounts can create an org. What changes by plan is **how many members** you can invite.

### Roles

| Role     | UI label | See org data                                       | Write (tokenize) | Manage members | Billing |
| -------- | -------- | -------------------------------------------------- | ---------------- | -------------- | ------- |
| `OWNER`  | Owner    | All                                                | Yes              | Yes            | Yes     |
| `DPO`    | Owner    | All                                                | Yes              | Yes            | No      |
| `MEMBER` | Member   | Own tokens + shared dataset columns                | Yes              | No             | No      |
| `VIEWER` | Invitee  | Whitelisted API keys + shared datasets (read-only) | No               | No             | No      |

### Member limits by plan

| Plan       | Max members in org                |
| ---------- | --------------------------------- |
| Freemium   | 1 (owner only)                    |
| Starter    | 1 (owner only, **cannot invite**) |
| Pro        | 2 (owner + 1 collaborator)        |
| Enterprise | Unlimited                         |

To share datasets **inside Veilio** with colleagues, you need at least **Pro** (2 people) or **Enterprise** (larger teams).

### Dataset sharing within an organization

1. **Create an organization** (dashboard → Organization, or admin-provisioned).
2. **Upload a dataset** as OWNER or DPO while belonging to the org.
3. Veilio attaches the dataset to `organizationId` and creates an internal share API key.
4. Configure **column policies** per role/user (who sees which columns on download).
5. Invite members (DPO, MEMBER, VIEWER) — they access allowed columns only.

**Personal datasets** (no org): upload works on all plans, but **org-wide sharing** (member access, share keys) requires an organization.

### Invitations

* Only **OWNER** and **DPO** can invite.
* `POST /api/organization/invite` with `email` and `role`.
* Invitees receive an email link (7-day expiry).
* Alternative: join with a temporary invite code (`/api/organization/join-by-code`).

If the member limit is reached, the API returns `PLAN_LIMIT_REACHED` with the current plan name.

### VIEWER whitelist

VIEWER members only see tokens from API keys explicitly whitelisted for their membership. Configure from the organization settings UI.

### Public share (no Veilio account)

For external recipients (e.g. GDPR Article 15 delivery), use **one-time public download links** — see the existing **Dataset Access Tokens** page (public-share section). This is independent of org member count.

### Recommended setup (Pro + Stripe)

1. Admin creates the org and assigns the client as **OWNER**.
2. Client subscribes to **Pro** while already in the org (so Stripe links `organizationId` on the subscription).
3. Owner invites one collaborator (DPO, MEMBER, or VIEWER).
