Teams
Invite people to your apps with owner, admin, developer and viewer roles.
On this page
Teams let other people work on your apps with their own sign-in. Each person gets a role, so a contractor can manage keys and emoji without managing the team, and a teammate can read usage and analytics without changing anything.
Roles
| Role | Can do |
|---|---|
| Owner | Everything. The account that owns the apps and the plan. |
| Admin | Everything except changing the plan, including team management. |
| Developer | Apps, keys, custom emoji and webhooks. No team management. |
| Viewer | Read only: apps, usage and analytics. |
Members work on the owner’s apps and see the owner’s plan. A membership counts only while the owner’s plan includes team members.
Invite people
The dashboard API serves teams to your signed-in session. An owner or an admin creates an invite with a role. The email address is optional.
POST /api/team/invites
{ "role": "developer", "email": "sam@example.com" }
→ 201 { "invite": { … }, "url": "https://…/invite/<token>" }Send the link to the person. It is shown once, works once and expires after 7 days. They sign in and accept it:
POST /api/invites/<token>/accept
→ 200 { "team": { "ownerId": "…", "ownerName": "…", "role": "developer" } }Manage the team
| Route | Does | Who |
|---|---|---|
GET /api/team | Members and open invites | Any member |
PATCH /api/team/members/:id | Change a role with { role }. The owner’s role cannot change. | Owner, admin |
DELETE /api/team/members/:id | Remove a member, or leave the team yourself | Owner, admin, the member |
DELETE /api/team/invites/:id | Withdraw an open invite | Owner, admin |
Team routes act on your own account. Add ?owner=<accountId> to act on a team you are a member of, with a high enough role.
Errors
Errors have the shape { "error": { "code", "message", "field"?, "plan"? } }.
| Status | Code | When |
|---|---|---|
| 402 | plan_required | The owner’s plan has no team members. plan names the cheapest plan that has them. |
| 403 | forbidden_role | Your role is too low for this action |
| 404 | invite_not_found | Unknown or withdrawn invite link |
| 409 | invite_own_team, already_member, owner_immutable | An invite to your own team, a second membership, a change to the owner |
| 410 | invite_used, invite_expired | The invite was accepted already, or is older than 7 days |
Apps and environments
Each app has an environment: dev, staging or prod. Use one app per environment, so each one has its own keys, usage and analytics. Only dev apps may have publishable keys that work from any origin.
| Plan | Apps | Team members |
|---|---|---|
| Free | 1 | — |
| Solo | 1 | — |
| Pro | 3 | Yes |
| Scale | Unlimited | Yes |
Creating an app past your plan’s limit answers 402 with plan_required.