Project membership events track when users are added to, removed from, or have their roles changed within projects.
project_membership.create
Triggered when a user is added to a project with a specific role. Only project owners can add members.
Event Schema
Always set to "project_membership.create"
The user who added the new member Email of admin impersonating the user
Three targets: the project, organization membership, and the user being added Project’s unique identifier
Organization containing the project
Set to "organization_membership"
Organization membership identifier
Member’s organization role (e.g., "member", "admin")
User agent string or "unknown"
Page route where member was added (e.g., "/projects/{id}/members")
Project role assigned: "owner", "editor", or "viewer"
Example
{
"action" : "project_membership.create" ,
"occurredAt" : "2024-11-02T18:30:00.000Z" ,
"version" : 1 ,
"actor" : {
"type" : "user" ,
"id" : "user_01JBKQ8Z..." ,
"name" : "Alice Johnson" ,
"metadata" : {
"first_name" : "Alice" ,
"last_name" : "Johnson" ,
"email" : "alice@company.com" ,
"impersonator_email" : "" ,
"impersonator_reason" : ""
}
},
"targets" : [
{
"type" : "project" ,
"id" : "proj_abc123" ,
"name" : "Production API" ,
"metadata" : {
"name" : "Production API" ,
"organization_id" : "org_xyz789"
}
},
{
"type" : "organization_membership" ,
"id" : "om_def456" ,
"name" : "Bob Smith" ,
"metadata" : {
"organization_id" : "org_xyz789" ,
"role_slug" : "member"
}
},
{
"type" : "user" ,
"id" : "user_02JBKQ9A..." ,
"name" : "Bob Smith" ,
"metadata" : {
"first_name" : "Bob" ,
"last_name" : "Smith" ,
"email" : "bob@company.com"
}
}
],
"context" : {
"location" : "203.0.113.1" ,
"userAgent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
},
"metadata" : {
"source" : "/projects/proj_abc123/members" ,
"role" : "editor"
}
}
project_membership.update
Triggered when a project member’s role is changed. Only project owners can update member roles. Users cannot modify their own membership.
Event Schema
Always set to "project_membership.update"
The user who changed the member’s role Email of admin impersonating the user
Three targets: the project, organization membership, and the user whose role changed Project’s unique identifier
Organization containing the project
Set to "organization_membership"
Organization membership identifier
Member’s organization role
User agent string or "unknown"
Page route where role was updated (e.g., "/projects/{id}/members")
Previous project role: "owner", "editor", or "viewer"
New project role: "owner", "editor", or "viewer"
Example
{
"action" : "project_membership.update" ,
"occurredAt" : "2024-11-02T18:35:00.000Z" ,
"version" : 1 ,
"actor" : {
"type" : "user" ,
"id" : "user_01JBKQ8Z..." ,
"name" : "Alice Johnson" ,
"metadata" : {
"first_name" : "Alice" ,
"last_name" : "Johnson" ,
"email" : "alice@company.com" ,
"impersonator_email" : "" ,
"impersonator_reason" : ""
}
},
"targets" : [
{
"type" : "project" ,
"id" : "proj_abc123" ,
"name" : "Production API" ,
"metadata" : {
"name" : "Production API" ,
"organization_id" : "org_xyz789"
}
},
{
"type" : "organization_membership" ,
"id" : "om_def456" ,
"name" : "Bob Smith" ,
"metadata" : {
"organization_id" : "org_xyz789" ,
"role_slug" : "member"
}
},
{
"type" : "user" ,
"id" : "user_02JBKQ9A..." ,
"name" : "Bob Smith" ,
"metadata" : {
"first_name" : "Bob" ,
"last_name" : "Smith" ,
"email" : "bob@company.com"
}
}
],
"context" : {
"location" : "203.0.113.1" ,
"userAgent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
},
"metadata" : {
"source" : "/projects/proj_abc123/members" ,
"old_role" : "viewer" ,
"new_role" : "editor"
}
}
project_membership.delete
Triggered when a user is removed from a project. Only project owners can remove members. Users cannot remove themselves.
Event Schema
Always set to "project_membership.delete"
The user who removed the member Email of admin impersonating the user
Three targets: the project, organization membership, and the user being removed Project’s unique identifier
Organization containing the project
Set to "organization_membership"
Organization membership identifier
Member’s organization role
User agent string or "unknown"
Page route where member was removed (e.g., "/projects/{id}/members")
Project role before removal: "owner", "editor", or "viewer"
Example
{
"action" : "project_membership.delete" ,
"occurredAt" : "2024-11-02T18:40:00.000Z" ,
"version" : 1 ,
"actor" : {
"type" : "user" ,
"id" : "user_01JBKQ8Z..." ,
"name" : "Alice Johnson" ,
"metadata" : {
"first_name" : "Alice" ,
"last_name" : "Johnson" ,
"email" : "alice@company.com" ,
"impersonator_email" : "" ,
"impersonator_reason" : ""
}
},
"targets" : [
{
"type" : "project" ,
"id" : "proj_abc123" ,
"name" : "Production API" ,
"metadata" : {
"name" : "Production API" ,
"organization_id" : "org_xyz789"
}
},
{
"type" : "organization_membership" ,
"id" : "om_def456" ,
"name" : "Bob Smith" ,
"metadata" : {
"organization_id" : "org_xyz789" ,
"role_slug" : "member"
}
},
{
"type" : "user" ,
"id" : "user_02JBKQ9A..." ,
"name" : "Bob Smith" ,
"metadata" : {
"first_name" : "Bob" ,
"last_name" : "Smith" ,
"email" : "bob@company.com"
}
}
],
"context" : {
"location" : "203.0.113.1" ,
"userAgent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
},
"metadata" : {
"source" : "/projects/proj_abc123/members" ,
"role" : "editor"
}
}
Project Roles
Project memberships use three role levels:
Full project access including member management, settings changes, and resource deletion
Create and manage API keys and MCP proxies. Cannot manage members or project settings
Read-only access to project resources and analytics
Only users who are already members of the organization can be added to projects. Project membership requires existing organization membership.
Common Patterns
Member Addition Flow
Organization owner invites user to organization
Project owner adds organization member to project with specific role
project_membership.create event logs the addition
Permission Changes
Role updates from the project members page create project_membership.update events with before and after roles in metadata. This tracks all permission changes for compliance and security auditing.
Access Removal
When a project owner removes a member, the project_membership.delete event records the user’s role at time of removal. The member retains organization membership but loses project access.