Repository navigation
feat: add team invites - #67
Merged
Merged
Conversation
- Team invites: list (cursor paginated), retrieve, create, update and revoke
(`/team/invites`, `/team/invites/{inviteId}`)
- Team roles: retrieve, create, update, delete (optional
`replacement_role_id` query) and duplicate (`/team/roles/{roleId}`,
`/team/roles`, `/team/roles/{roleId}/duplicate`)
- Team members: remove a member (`DELETE /team/members/{userId}`)
- `GET /team/members` takes the optional `filter[project_id]` query
- `TeamRoleData` gains an optional, nullable `description`
Co-Authored-By: Claude <noreply@anthropic.com>
Adds `team().invites()` with `list`, `iterate`, `retrieve`, `create`, `update` and `revoke` for pending team invitations. Co-Authored-By: Claude <noreply@anthropic.com>
bjarn
added this pull request to stack #70
October 20, 2026 20:46
bjornftw
approved these changes
Oct 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
Non-breaking. Suggested version: 3.2.0 (minor).
co.lettermint.typesfrom the latest API spec (separate commit, generated files only).team().invites()for pending team invitations:list,iterate,retrieve,create,updateandrevoke. Each method has the usual overloads with and withoutListTeamInvitesQueryandRequestOptions, validates the invite ID before sending, and uses the team token.TeamApiTestlists those six operations as pending; everything else stays strictly checked.Generated records that tools may flag (a minor change, as in earlier minors):
TeamRoleData: the canonical record constructor gains adescriptionargument.ListTeamMembersQuery: the canonical record constructor gains afilterProjectIdargument. The builders are unchanged for existing callers.API changes in the regenerated types
GET /team/invitespage[size],page[cursor])team().invites().list/iterate(this PR)GET /team/invites/{inviteId}team().invites().retrieve(this PR)POST /team/invitesteam().invites().create(this PR)PUT /team/invites/{inviteId}team().invites().update(this PR)DELETE /team/invites/{inviteId}team().invites().revoke(this PR)GET /team/roles/{roleId}team().retrieveRole(stacked PR)POST /team/rolesteam().createRole(stacked PR)PUT /team/roles/{roleId}team().updateRole(stacked PR)DELETE /team/roles/{roleId}replacement_role_idquery. 409, 422team().deleteRole(stacked PR)POST /team/roles/{roleId}/duplicateteam().duplicateRole(stacked PR)DELETE /team/members/{userId}team().members().remove(stacked PR)GET /team/membersfilter[project_id]query (ListTeamMembersQuery.filterProjectId)team().members().list/iterateTeamRoleDatadescription(optional, nullable string)team().roles()and the new role methodsTeamInviteData,TeamInviteDataRole,CreateTeamInviteData,CreateTeamInviteDataProjectAccess,UpdateTeamInviteData,UpdateTeamInviteDataProjectAccess,ListTeamInvitesQuery,CreateTeamRoleData,UpdateTeamRoleData,DuplicateTeamRoleData,DeleteTeamRoleQueryThe 409 responses of the new operations carry an error code (
stale_resource,owner_protected,last_owner,built_in_role_immutable,custom_role_requires_pro); they map to the existingConflictException, and 422 responses toValidationException. The other generated files only change their spec header.Usage
Checks
./gradlew generateTypeswith the latest spec, then./gradlew checkGeneratedTypes: up to date (217 files)./gradlew clean build --no-daemonon JDK 17: passed (97 tests, 0 failures)./gradlew clean build --no-daemonon JDK 24: passed (97 tests, 0 failures)Automatic-Module-Name: co.lettermintpresent, no okhttp bundledNot run locally
./gradlew checkstyleMain checkstyleTest: the build has no checkstyle tasks, and the workflow ignores the result (|| true).Suggested release tag
v3.2.0, after the whole stack has merged.🤖 Generated with Claude Code