---
title: "Create or renew an organization invitation"
method: POST
path: "/api/v1/user/org/invites"
tags: ["User"]
---

# Create or renew an organization invitation

`POST /api/v1/user/org/invites`

Owner/admin mutation. Enforces seat and daily invitation limits, sends the invitation out of band and never returns its token.

## Headers

- `X-CSRF-Token` string, required

## Request body

- UserOrganizationInviteRequest
  - `email` string, email, required
  - `role` 'admin' | 'member'

## Response `201`

Invitation created or renewed without token

- OrganizationInviteCreatedResponse
  - `ok` boolean, required
  - `invite_id` integer, required
  - `email` string, email, required
  - `role` string, required
  - `expires_at` string, required
  - `renewed` boolean, required
  - `email_sent` boolean, required

## Other responses

- `400` — Invalid request
- `401` — Authentication required (no active session)
- `403` — Owner/admin permission or CSRF required
- `409` — No organization, duplicate member or no free seat
- `429` — Rate limit exceeded
- `503` — Organization or email service unavailable

---

[API](https://skmtc.net/openmercantil/apis/openmercantil-public-api.md) · [All operations](https://skmtc.net/openmercantil/apis/openmercantil-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/openmercantil/openmercantil-public-api/versions/996f96a11758/schema)
