Roles
Every team has exactly one Owner. Use
POST /v1/teams/{id}/transfer-admin to hand off.
Auth and team binding
API key callers cannot pivot to a different team mid-request. To act on
a different team, mint a new key on that team.
Reading your teams
Members
Per-evaluation sharing
Beyond team membership, you can share a single evaluation with people who are not on the team. Three primitives:
Edit-on-share is gated by
editorsCanShare on the evaluation row —
default true. When the Owner flips it off, only Admin+ can edit
sharing.
”Not found” vs “no access”
We deliberately conflate the two. A 404 from/v1/evaluations/{id}
means either “no such row” or “you lack permission”. This avoids
leaking the existence of resources to outsiders.
The single exception: cross-team requests where the caller has a
membership on a team but not the resource’s team return a 403 with
code: evaluation_no_access and a details object containing the
resource’s team name and the caller’s email. The dashboard uses this
to render a “switch account” empty state.