Teams
Teams let multiple developers co-own a set of applications. Discord parity — same four roles, same one-way transfer model, plus an App Testers roster that bypasses the public/private gate for in-development apps.
Roles
| Role | Can edit app | Can manage team | Can delete app |
|---|---|---|---|
| Owner | Yes | Yes (incl. transfer ownership) | Yes |
| Admin | Yes | Yes (members, testers) | No |
| Developer | Yes | No | No |
| Read-only | No | No | No |
The effective role on an app = the team-member role, unless the requester is also the personal owner (transfer source), in which case Owner-level access applies.
Invites
- Admin+ sends an invite by email to an existing GameVox user.
- The invitee sees a pending invite on their portal home and accepts or declines.
- Invites can be rescinded any time before accept.
- To re-send: rescind, then re-invite. (No dedicated "resend" button.)
Application transfer
Personal apps can be transferred into a team you own or admin in. The transfer dialog requires you to type the app name to confirm. After transfer:
- The team owns the app row.
owner_user_idis cleared;owner_team_idis set. - All existing tokens (bot tokens, client secrets, webhook tokens) remain valid — the transfer doesn't rotate them.
- App icon / cover storage prefixes are unchanged — assets keep working without re-upload.
- Transfer is one-way (matches Discord). To "untransfer," create a new personal app and migrate data manually.
Team icons
Upload from the team's General tab. Same image-upload widget as
app icons, with separate S3 prefix
(team-icons/{team_id}/). Renders on the team
list page, the team detail header, and as a small overlay on app
cards for apps owned by that team.
App Testers
The testers roster is per-application (not per-team), so a team's apps each have their own list. Testers can install a private app (public-toggle off) using the normal OAuth install URL — anyone not on the roster gets a not-found page.
- 100 testers per application.
- Invites are by GameVox user-id or email. Inviting yourself auto-accepts (you're already trusted).
- Testers don't get any access to the application's portal page — they only get install permission.
- Removing a tester does not revoke any tokens the tester already obtained via OAuth; revoke those separately.
Endpoints (portal)
GET /developer-portal/teams
POST /developer-portal/teams
GET /developer-portal/teams/{id}
PATCH /developer-portal/teams/{id}
DELETE /developer-portal/teams/{id}
GET /developer-portal/teams/{id}/members
POST /developer-portal/teams/{id}/members {email, role}
PATCH /developer-portal/teams/{id}/members/{user_id} {role}
DELETE /developer-portal/teams/{id}/members/{user_id}
POST /developer-portal/applications/{id}/transfer {team_id, app_name}
GET /developer-portal/applications/{id}/testers
POST /developer-portal/applications/{id}/testers {email|user_id}
DELETE /developer-portal/applications/{id}/testers/{user_id}