---
title: "Invite a member (consumes a billed seat once accepted)"
method: POST
path: "/accounts/members"
tags: ["Members"]
---

# Invite a member (consumes a billed seat once accepted)

`POST /accounts/members`

## Request

- Base URL: `https://api.nippy.host`
- URL: `https://api.nippy.host/accounts/members`
- Auth: `bearer` (a scheme the document does not define)

## Request body

- InviteMemberDto
  - `email` string, email, required: Email address to invite
  - `role` 'admin' | 'member', required: Role to grant (owner cannot be invited)

## Response `201`

- APIMembership
  - `id` string, required
  - `accountId` string, required
  - `userId` string, nullable, required
  - `role` 'owner' | 'admin' | 'member', required
  - `status` 'invited' | 'active' | 'suspended', required
  - `invitationEmail` string, required: Email the invitation was sent to
  - `joinedAt` string, date-time, nullable, required
  - `createdAt` string, date-time, required

## Other responses

- `403`: Plan does not allow members, or insufficient role
- `409`: Already a member
- `422`: The address cannot be used for a new account (ADR 0048). The body carries `code: "EMAIL_DOMAIN_NOT_ALLOWED"` (a blocked or disposable domain) or `code: "EMAIL_ALIAS_NOT_ALLOWED"` (a `+` alias). Inviting an existing user is never refused.

---

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