PLANS / list-team-directory-groups-via-admin-api

Plans

List team directory groups with the Admin API

Pull every Team directory group on the team with GET https://api.cursor.com/teams/directory-groups, or fetch one group with GET https://api.cursor.com/teams/directory-groups/:groupId. Official reference: Admin API → Team directory groups.

Authenticate with a team Admin API key (Basic auth, key as username, empty password). Reads need read:* (or admin:*). Rate limit: 20 requests per minute per team. A 429 includes Retry-After: 60.

Team directory groups use public ids with the team_group_… prefix. They are a different API from Billing Groups (/teams/groups, group_… ids) and Organization Groups (/organizations/groups, g_ / grp_ ids). Pass the wrong prefix and the route returns 400 or 404.

List groups

curl -X GET "https://api.cursor.com/teams/directory-groups?page=1&pageSize=50" \
  -u YOUR_API_KEY:
Query Rules
page Defaults to 1
pageSize Defaults to 50. Capped at 200; larger values clamp to 200
{
  "groups": [
    {
      "id": "team_group_01k2ja2000e0080000000000n2",
      "name": "Engineering",
      "memberCount": 12,
      "monthlySpendingLimitDollars": 500,
      "createdAt": "2026-01-15T10:30:00.000Z",
      "updatedAt": "2026-01-20T14:22:00.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "pageSize": 50,
    "totalCount": 1,
    "totalPages": 1,
    "hasNextPage": false,
    "hasPreviousPage": false
  }
}
Field Meaning
id Public id (team_group_…). Use as :groupId on every other directory-group route
name Group name
memberCount Members currently in the group
monthlySpendingLimitDollars Per-member monthly spend cap in whole dollars, or null when unset
createdAt / updatedAt ISO 8601 timestamps

Get one group

curl -X GET https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2 \
  -u YOUR_API_KEY:
{
  "group": {
    "id": "team_group_01k2ja2000e0080000000000n2",
    "name": "Engineering",
    "memberCount": 12,
    "monthlySpendingLimitDollars": 500,
    "createdAt": "2026-01-15T10:30:00.000Z",
    "updatedAt": "2026-01-20T14:22:00.000Z"
  }
}

Pitfalls

  • Passing a Billing Group group_… id or an Organization Group g_ / grp_ id as :groupId
  • Assuming pageSize above 200 returns more rows — the API clamps it
  • Mixing this list with /teams/groups when you need chargeback spend — billing groups own cycle spend; directory groups own per-member monthly caps inside one team