Skip to main content
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

action
string
required
Always set to "project_membership.create"
actor
object
required
The user who added the new member
targets
array
required
Three targets: the project, organization membership, and the user being added
context
object
required
metadata
object
required

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

action
string
required
Always set to "project_membership.update"
actor
object
required
The user who changed the member’s role
targets
array
required
Three targets: the project, organization membership, and the user whose role changed
context
object
required
metadata
object
required

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

action
string
required
Always set to "project_membership.delete"
actor
object
required
The user who removed the member
targets
array
required
Three targets: the project, organization membership, and the user being removed
context
object
required
metadata
object
required

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:
owner
string
Full project access including member management, settings changes, and resource deletion
editor
string
Create and manage API keys and MCP proxies. Cannot manage members or project settings
viewer
string
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

  1. Organization owner invites user to organization
  2. Project owner adds organization member to project with specific role
  3. 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.