Skip to content

Add a member​

POST
/org-admin/{slug}/members

Adds an existing FundlyHub user, found by email (case-insensitive), to the organization with the given role. The membership is active immediately; no invitation is sent and the user does not have to accept. org_owner cannot be granted here — add the user first, then promote them with PATCH /org-admin/{slug}/members/{userId}.

An optional display title can be set with either org_role_title_id (an id from GET /org-role-titles) or custom_role_title, not both.

Available only to organizations that are approved or verified; any other organization gets 403 with code: ORG_NOT_APPROVED.

Rate limited to 30 requests per minute per user, in one bucket shared with GET /org-admin/{slug}/users/search.

Requires permission: org.manage_members

Authorizations​

BearerAuth

In the browser, authentication rides on the httpOnly session cookies set by /cognito/signin or the Google / Apple sign-in at /cognito/oauth/{provider}. For scripts and for Swagger UI testing, paste an API key (fh_live_…, created with POST /api-keys); a Cognito JWT is accepted too. Sign-in does not return a token in its body.

Type
HTTP (bearer)

Parameters​

Path Parameters

slug*

The organization's slug (not its UUID).

Type
string
Required
Example"local-food-bank-a1b2c3"
Pattern
"^[a-z0-9][a-z0-9-]{0,254}$"

Request Body​

application/json
JSON
{
"email": "string",
"role": "string",
"org_role_title_id": "executive_director",
"custom_role_title": "string"
}

Responses​

Member added

application/json
JSON
{
"data": {
"user_id": "string",
"user_name": "string",
"role_name": "string"
}
}

Playground​

Server
Authorization
Variables
Key
Value
Body

Samples​

Powered by VitePress OpenAPI

Built with VitePress