@@ -293,6 +293,13 @@ while paginated_members.next_page_results:
293293 params = MemberListQueryParams(per_page = 1000 , cursor = paginated_members.next_cursor),
294294 )
295295 all_members.extend(paginated_members.results)
296+
297+ # Project-role distribution — member counts per role across all active
298+ # (non-archived) projects in the workspace (built-in + custom roles)
299+ distribution = client.workspaces.get_project_role_distribution(workspace_slug)
300+ print (distribution.total_memberships, distribution.total_distinct_members)
301+ for role in distribution.roles:
302+ print (role.slug, role.membership_count, role.distinct_member_count)
296303```
297304
298305#### Roles
@@ -372,6 +379,24 @@ members = client.projects.get_members_lite(
372379 workspace_slug, project_id,
373380 params = MemberListQueryParams(per_page = 1000 ),
374381)
382+
383+ # Paginated "lite" project list (id, identifier, name, icon/emoji, description,
384+ # cover image, archived_at) — for pickers/reference lookups.
385+ from plane.models.query_params import ProjectLiteListQueryParams
386+
387+ lite = client.projects.list_lite(
388+ workspace_slug,
389+ params = ProjectLiteListQueryParams(per_page = 1000 , order_by = " -created_at" ),
390+ )
391+ for p in lite.results:
392+ print (p.identifier, p.name)
393+
394+ # NOTE : archived projects are now EXCLUDED by default. Pass include_archived=True
395+ # to restore the previous behavior of listing archived projects too.
396+ lite = client.projects.list_lite(
397+ workspace_slug,
398+ params = ProjectLiteListQueryParams(include_archived = True ),
399+ )
375400```
376401
377402#### Work Items
@@ -482,6 +507,26 @@ cycle = client.cycles.create(
482507# List cycles
483508cycles = client.cycles.list(workspace_slug, project_id)
484509
510+ # Filter cycles by status: current | upcoming | completed | draft | incomplete.
511+ # `status` is canonical; `cycle_view` is a deprecated alias (status wins if both set).
512+ from plane.models.query_params import CycleListQueryParams
513+
514+ upcoming = client.cycles.list(
515+ workspace_slug, project_id,
516+ params = CycleListQueryParams(status = " upcoming" ),
517+ )
518+ for c in upcoming.results: # paginated envelope
519+ print (c.name)
520+
521+ # NOTE : status="current" is a special case — the API returns a BARE LIST of cycles
522+ # (not the paginated envelope). list() returns whichever shape the server sends.
523+ current = client.cycles.list(
524+ workspace_slug, project_id,
525+ params = CycleListQueryParams(status = " current" ),
526+ )
527+ for c in current: # plain list[Cycle]
528+ print (c.name)
529+
485530# Retrieve a cycle
486531cycle = client.cycles.retrieve(workspace_slug, project_id, cycle_id)
487532
@@ -499,6 +544,19 @@ client.cycles.delete(workspace_slug, project_id, cycle_id)
499544# List archived cycles
500545archived = client.cycles.list_archived(workspace_slug, project_id)
501546
547+ # Paginated "lite" cycle list (full cycle fields minus issue-count metrics).
548+ # Supports a status filter: current | upcoming | completed | draft | incomplete
549+ # (omit for all). The lite endpoint takes only `status` (no `cycle_view` alias)
550+ # and ALWAYS paginates — even for status="current".
551+ from plane.models.query_params import CycleLiteListQueryParams
552+
553+ lite = client.cycles.list_lite(
554+ workspace_slug, project_id,
555+ params = CycleLiteListQueryParams(status = " current" , per_page = 1000 ),
556+ )
557+ for c in lite.results:
558+ print (c.name)
559+
502560# Add work items to cycle
503561from plane.models.cycles import AddWorkItemsToCycleRequest
504562
@@ -557,6 +615,16 @@ client.modules.delete(workspace_slug, project_id, module_id)
557615# List archived modules
558616archived = client.modules.list_archived(workspace_slug, project_id)
559617
618+ # Paginated "lite" module list (full module fields minus issue-count metrics)
619+ from plane.models.query_params import LiteListQueryParams
620+
621+ lite = client.modules.list_lite(
622+ workspace_slug, project_id,
623+ params = LiteListQueryParams(per_page = 1000 , order_by = " -created_at" ),
624+ )
625+ for m in lite.results:
626+ print (m.name)
627+
560628# Add work items to module
561629from plane.models.modules import AddWorkItemsToModuleRequest
562630
0 commit comments