---
title: "Invite a person to the project by email"
method: POST
path: "/projects/{id}/invitations"
---

# Invite a person to the project by email

`POST /projects/{id}/invitations`

## Request

- Base URL: `https://api.eurobase.dev`
- URL: `https://api.eurobase.dev/projects/{id}/invitations`
- Auth: none declared

Owner or admin. Saves or renews a 7-day invitation and emails it. The answer is the same whether or not the email has a Eurobase account; the person joins only by accepting.

## Path parameters

- `id` string, required

## Request body

- ProjectInvitationRequest
  - `email` string, required
  - `role` 'owner' | 'admin' | 'contributor', required

## Response `201`

Invitation saved; emailDelivery reports whether the email went out

- ProjectInvitationResponse
  - `invitation` ProjectInvitation, required
    - `id` string, required
    - `projectId` string, required
    - `email` string, required
    - `role` 'owner' | 'admin' | 'contributor', required
    - `status` 'pending' | 'expired', required
    - `expiresAt` string, date-time, required
    - `createdAt` string, date-time, required
    - `projectName` string
    - `invitedByEmail` string
  - `emailDelivery` 'sent' | 'failed' | 'not_configured', required

## Other responses

- `409`: Already a member (project-member-exists) or member limit reached (project-member-limit-reached)
- `429`: Invitation rate limit reached

---

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