Authentication
Two methods are accepted, and which one you use decides how calls are attributed.
Methods
| Method | Client | Behaviour |
|---|---|---|
| OAuth | claude.ai web | You sign in as yourself. Calls are scoped to your account automatically — no owner_email needed. |
| Bearer token | Claude Code, Desktop, custom | Send Authorization: Bearer <key> or x-api-key: <key>. Pass owner_email to say who the caller is acting as. |
Prefer OAuth where the client supports it. It removes shared secrets entirely and scopes every call to a real person.
Permissions
Permissions are enforced per project on every call:
| Operation | Requires |
|---|---|
| Reads | Membership of the project |
| Edits | An editor role — lead or member |
An unconfigured or unauthorised endpoint returns 404 rather than confirming it exists.
Attribution
Every write records the acting user. That is why the dashboard Activityfeed names the person behind an MCP-driven change instead of showing “Someone”.
With OAuth the actor is whoever signed in. With a bearer token it is the account named by owner_email, so set it deliberately when automating on someone’s behalf.