---
title: "Invite App User"
method: POST
path: "/api/apps/{name}/users/invite"
tags: ["apps"]
---

# Invite App User

`POST /api/apps/{name}/users/invite`

## Request

- Base URL: `https://softkiln.com` (the document declares no server; this is the origin it was published from)
- URL: `https://softkiln.com/api/apps/{name}/users/invite`
- Auth: none declared

Bring someone NEW into the org and give them this app, in one step.

`add_app_user` can only shuffle access within the org's existing
population, so adding a colleague meant leaving the app entirely, finding
the organization page, inviting them there, coming back, and granting the
app. This is that round trip collapsed.

It is org-owner/admin only, deliberately. An app admin who is a plain org
member must not be able to widen the org — that containment property is
what makes a per-app grant a real boundary, and it is asserted by
`test_an_app_admin_cannot_add_a_non_member_to_their_app`. Such a caller
keeps the picker and gets 403 here.

`require_team` runs before any row is written, exactly as `invite_member`
does: a refused invite must not leave a pending user squatting the address.

## Path parameters

- `name` string, required

## Request body

- InviteAppUserRequest
  - `email` string, required
  - `role` string

## Response `201`

Successful Response

- InviteAppUserResult
  - `member` AppUserOut, required
    - `id` string, required
    - `email` string, required
    - `role` string, required
  - `converted_to_team` boolean, required

## Other responses

- `422`: Validation Error

---

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