---
title: "Invite someone by email"
method: POST
path: "/projects/{id}/invites"
tags: ["Projects"]
---

# Invite someone by email

`POST /projects/{id}/invites`

## Request

- Base URL: `https://tasg.app/api/v1`
- URL: `https://tasg.app/api/v1/projects/{id}/invites`
- Auth: HTTP bearer

Project owner only. Emails a 7-day invite link; any earlier pending invite for the same address is replaced. The raw accept token is also returned. On instances with billing enforcement enabled, inviting someone new past the workspace plan's people limit returns 403; re-inviting an existing person always succeeds.

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `email` string, email, required
  - `role` 'editor' | 'viewer', required: Ownership cannot be granted through the API.

## Response `201`

Sent.

- object
  - `message` string, required
  - `token` string, required: Accept token: the same one embedded in the emailed link.

## Other responses

- `400`: Validation failed: the body or query did not match the schema, or a business rule was violated. `error` says which.
- `401`: Missing, invalid, expired or revoked credentials.
- `403`: Authenticated, but not allowed: not a member, insufficient project role or the API token lacks the required scope.
- `404`: Not found, or not visible to the caller (tenancy is enforced: foreign resources look identical to missing ones).
- `429`: Rate limited. Back off and retry after the window in the `RateLimit-*` headers.

---

[API](https://skmtc.dev/tasg/apis/tasg-api.md) · [All operations](https://skmtc.dev/tasg/apis/tasg-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tasg/apis/tasg-api/revisions/cd2a1dbaf5cf?raw)
