---
title: "Add a tenant member by email"
method: POST
path: "/platform/tenants/{tenantId}/members"
tags: ["Platform Tenants"]
---

# Add a tenant member by email

`POST /platform/tenants/{tenantId}/members`

## Request

- Base URL: `http://localhost:3200`
- URL: `http://localhost:3200/platform/tenants/{tenantId}/members`
- Auth: API key in header `X-Steward-Platform-Key`
- TypeScript: <https://skmtc.dev/steward-fi/apis/steward-api/docs/platform/tenants/:tenantId/members/post.ts> (a function with typed inputs; its response is checked against the schema)

Requires a platform key with platform:tenant-member:write. Creates the user if needed, audits the membership add before mutating identity state, and preserves existing memberships idempotently.

## Headers

- `X-Steward-Request-Timestamp` string
- `X-Steward-Request-Expires-At` string
- `X-Steward-Signature` string
- `X-Steward-Signing-Key-Id` string
- `Idempotency-Key` string

## Request body

- object
  - `email` string, email, required
  - `role` 'owner' | 'admin' | 'member'

## Response `201`

JSON response

- object
  - `ok` true, required
  - `data` object, required
    - `userId` string, required
    - `tenantId` string
    - `role` 'owner' | 'admin' | 'member', required
    - `email` string, nullable, required
    - `name` string, nullable
    - `joinedAt` string, date-time, nullable

## Other responses

- `400`: JSON response
- `401`: JSON response
- `403`: JSON response
- `404`: JSON response
- `408`: JSON response
- `409`: JSON response

## Changes

- **2026-08-17** `261a7c8070b2`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/steward-fi/apis/steward-api/changes/platform/tenants/:tenantId/members/post.md)

---

[API](https://skmtc.dev/steward-fi/apis/steward-api.md) - [All operations](https://skmtc.dev/steward-fi/apis/steward-api/llms.txt) - [OpenAPI document](https://skmtc.dev/steward-fi/apis/steward-api/revisions/b88b4b97a664?raw)
