client.projects.memberships
client.projects.memberships — the projects.memberships operations.
On AsyncKindgi every method is the same, awaited.
client.projects.memberships.list()
Section titled “client.projects.memberships.list()”list( project_id: str, /, *, limit: int | None = None, cursor: str | None = None, timeout: float | None = None,) -> ProjectMembershipCollectionPageList direct memberships of a project. GET /v1/projects/{projectId}/memberships
Cursor-paginated. Direct-grant memberships only — team-mediated grants are resolved through the FGA store per tenant.
client.projects.memberships.add()
Section titled “client.projects.memberships.add()”add( project_id: str, body: AddProjectMembershipBody | Mapping[str, Any] | None = None, /, *, idempotency_key: str | None = None, timeout: float | None = None, **fields: Any,) -> AddProjectMembershipResultAdd a user directly to a project. POST /v1/projects/{projectId}/memberships
Idempotent on (projectId, userId) — re-adding an existing member with a different role does NOT overwrite; use PATCH for role changes.
client.projects.memberships.update_role()
Section titled “client.projects.memberships.update_role()”update_role( project_id: str, user_id: str, body: UpdateProjectMembershipBody | Mapping[str, Any] | None = None, /, *, idempotency_key: str | None = None, timeout: float | None = None, **fields: Any,) -> NoneChange an existing project member's role. PATCH /v1/projects/{projectId}/memberships/{userId}
client.projects.memberships.remove()
Section titled “client.projects.memberships.remove()”remove( project_id: str, user_id: str, /, *, idempotency_key: str | None = None, timeout: float | None = None,) -> NoneRemove a user from a project (idempotent). DELETE /v1/projects/{projectId}/memberships/{userId}