PLANS / list-organization-members-via-org-api

Plans

List organization members with the Organization API

Pull every member on the organization attached to your key with GET https://api.cursor.com/organizations/members. Each row includes the org role plus every linked-team assignment. Official reference: Organization API → Members.

Authenticate with an Organization API key (Basic auth, key as username, empty password). This route accepts members:read (or broader members:* / admin:*). Enterprise only. Pagination uses page and pageSize; pageSize is capped at 200 (larger values clamp to 200).

userId on each member matches the numeric id returned by the team Admin API GET /teams/members. Use those ids when calling Sync organization team memberships.

Request

curl -X GET "https://api.cursor.com/organizations/members?page=1&pageSize=50" \
  -u YOUR_ORGANIZATION_API_KEY:
Query Rules
page 1-indexed. Defaults to the first page
pageSize Members per page. Capped at 200

Response

{
  "members": [
    {
      "userId": 12345,
      "email": "developer@company.com",
      "name": "Alex",
      "organizationRole": "member",
      "teams": [
        { "teamId": 7, "teamRole": "member" },
        { "teamId": 8, "teamRole": "owner" }
      ]
    },
    {
      "userId": 12346,
      "email": "admin@company.com",
      "name": "Sam",
      "organizationRole": "admin",
      "teams": [
        { "teamId": 7, "teamRole": "owner" }
      ]
    }
  ],
  "pagination": {
    "page": 1,
    "pageSize": 50,
    "totalCount": 2,
    "totalPages": 1,
    "hasNextPage": false,
    "hasPreviousPage": false
  }
}
Field Meaning
userId Numeric member id (same family as team GET /teams/members id)
email / name Contact and display name
organizationRole Org-level role: admin or member
teams[].teamId Integer id of a linked team the member belongs to
teams[].teamRole Role on that team (for example member, owner)
pagination page, pageSize, totalCount, totalPages, hasNextPage, hasPreviousPage

organizationRole is separate from each teamRole. A user can be an org admin while holding member on one team, or the reverse.

Pitfalls

  • Use an Organization API key. Team Admin API keys under /teams/* fail on this route.
  • Narrow keys need at least members:read. A usage:* or models:* key without members scope returns 401 / 403.
  • Page through with hasNextPage until false; do not assume one page covers a large org.
  • Team ids in teams are the linked-team integers you pass to team-membership sync and org usage filters — keep them distinct from Organization Group g_… / grp_… ids.