---
title: "Preview Invite"
method: GET
path: "/api/v1/invites/preview"
tags: ["org-invites"]
---

# Preview Invite

`GET /api/v1/invites/preview`

One preview for both invite kinds, discriminated by `kind` (spec §9).

Project invites resolve first because the resolver asks an explicit question;
trying the org path and catching its NotFoundError would swallow a genuine miss
on the project side.

## Query parameters

- `token` string, required

## Response `200`

Successful Response

- InvitePreview — One preview for both invite kinds, discriminated by `kind` (spec §9). Deliberately one model with a discriminant and a nullable sibling rather than an annotated union: FastAPI inlines an anonymous union into the OpenAPI document, so `components.schemas.InvitePreview` would stop existing and every TypeScript consumer would change name for no behavioural gain.
  - `kind` 'org' | 'project', required
  - `email` string, required
  - `org_name` string, required
  - `project_name` string, nullable
  - `account_exists` boolean, required — Whether the invited email already has an account. This is not an open account-existence oracle: preview returns it only after a valid, unexpired, unrevoked bearer invite token has already disclosed the same email.

## Other responses

- `4XX` — Client Error
- `5XX` — Server Error

---

[API](https://skmtc.dev/rudus/apis/rudus-api.md) · [All operations](https://skmtc.dev/rudus/apis/rudus-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/rudus/rudus-api/revisions/f149124a4d80/schema)
