Skip to content

Organizations​

Manage nonprofit organizations


List organizations​

GET
/organizations

Public list of approved/verified, non-deleted organizations. Returns their public fields plus a true total count. Rate-limited.

Parameters​

Query Parameters

verification_status

Only approved or verified take effect; other values fall back to the default public filter.

Type
string
Valid values
"approved""verified"
country
Type
string
limit

Clamped to 1..100. Defaults to 20.

Type
integer
Minimum
1
Maximum
100
Default
20
offset
Type
integer
Minimum
0
Default
0

Responses​

Paginated list of organizations

application/json
JSON
{
"data": [
{
"id": "string",
"legal_name": "string",
"dba_name": "string",
"slug": "string",
"country": "string",
"address": "string",
"website": "string",
"logo": "string",
"banner_image": "string",
"description": "string",
"mission": "string",
"categories": [
"string"
],
"social_links": {
"additionalProperties": "string"
},
"founded_year": 0,
"verification_status": "string",
"verification_completed_at": "string",
"kind": "string",
"parent_organization_id": "string",
"created_at": "string",
"updated_at": "string"
}
],
"pagination": {
"limit": 0,
"offset": 0,
"total": 0
}
}

Playground​

Server
Variables
Key
Value

Samples​


Create organization​

POST
/organizations

Multi-tier onboarding payload.
Requires a bearer session and a verified email address — an unverified session answers 403. Self-service creation is capped at 5 organizations per hour per (IP, user).

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)

Request Body​

application/json
JSON
{
"legal_name": "string",
"ein": "12-3456789",
"country": "string",
"website": "string",
"description": "string",
"categories": [
"string"
],
"kind": "company",
"parent_organization_id": "string",
"dbas": [
{
"dba_name": "string"
}
],
"locations": [
{
"label": "string",
"address": {
"additionalProperties": "string"
}
}
]
}

Responses​

Organization created, pending verification. The caller becomes its org_owner.

application/json
JSON
{
"data": {
"id": "string",
"slug": "string",
"legal_name": "string",
"kind": "string",
"parent_organization_id": "string",
"verification_status": "string",
"dbas": [
{
"id": "string",
"dba_name": "string",
"is_default": true
}
],
"locations": [
{
"id": "string",
"label": "string",
"address": {
"additionalProperties": "string"
},
"is_primary": true
}
],
"created_at": "string"
}
}

Playground​

Server
Authorization
Body

Samples​


Get the caller's organizations​

GET
/organizations/me

Organizations the authenticated caller holds an active org-scoped role on. Flat array, no pagination.

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)

Responses​

Caller's organizations

application/json
JSON
{
"data": [
{
"id": "string",
"legal_name": "string",
"dba_name": "string",
"slug": "string",
"country": "string",
"website": "string",
"logo": "string",
"description": "string",
"verification_status": "string",
"kind": "string",
"parent_organization_id": "string",
"created_at": "string",
"updated_at": "string",
"role_name": "string",
"role_display_name": "string",
"role_hierarchy_level": 0,
"org_role_title_id": "string",
"org_role_title_label": "string",
"org_role_title_category": "string",
"start_date": "string",
"end_date": "string",
"is_current": true,
"affiliation_description": "string"
}
]
}

Playground​

Server
Authorization

Samples​


Get organization by ID or slug​

GET
/organizations/{id}

Public read of a single org by UUID or slug. Anonymous callers only see approved/verified non-deleted orgs; an active member of the organization can also read it in its other states and additionally receives suspension/rejection metadata (suspension_reason, rejected_reason, suspended_until) and the unredacted contact_email. Authentication is therefore optional but not inert.

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)
or

Parameters​

Path Parameters

id*

Organization UUID or slug.

Type
string
Required

Responses​

Organization detail

application/json
JSON
{
"data": {
"id": "string",
"legal_name": "string",
"dba_name": "string",
"slug": "string",
"country": "string",
"website": "string",
"logo": "string",
"banner_image": "string",
"description": "string",
"mission": "string",
"verification_status": "string",
"kind": "string",
"parent_organization_id": "string",
"address": "string",
"categories": [
"string"
],
"social_links": {
"additionalProperties": "string"
},
"founded_year": 0,
"verification_completed_at": "string",
"contact_email": "string",
"contact_email_public": true,
"suspension_reason": "string",
"rejected_reason": "string",
"suspended_until": "string",
"created_at": "string",
"updated_at": "string",
"primary_location": {
"id": "string",
"label": "string",
"address": {
"additionalProperties": "string"
},
"is_publicly_visible": true
},
"dbas": [
{
"id": "string",
"dba_name": "string",
"is_default": true
}
],
"children": [
{
"id": "string",
"slug": "string",
"legal_name": "string",
"logo": "string",
"verification_status": "string"
}
]
}
}

Playground​

Server
Authorization
Variables
Key
Value

Samples​


Get organization stats​

GET
/organizations/{id}/stats

Campaign counts, funds raised, unique donors and followers for an org (UUID or slug). A bare object — not wrapped in data.

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Organization stats

application/json
JSON
{
"campaignCount": 0,
"totalCampaignCount": 0,
"totalFundsRaisedCents": 45600000,
"uniqueDonorCount": 0,
"followerCount": 0
}

Playground​

Server
Variables
Key
Value

Samples​


Get organization public team​

GET
/organizations/{id}/members

Public "Our team" list for an org (UUID or slug). Filtered to active, publicly-visible, non-expired memberships whose user profile is not private.

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Organization team members

application/json
JSON
{
"data": [
{
"user_id": "string",
"name": "string",
"profile_slug": "string",
"avatar": "string",
"kyc_verified_at": "string",
"org_role_title_id": "string",
"role_title_label": "string",
"role_title_category": "string",
"role_title_sort_order": 0,
"start_date": "string",
"end_date": "string",
"is_current": true,
"affiliation_description": "string",
"rbac_role_name": "string",
"rbac_hierarchy_level": 0
}
]
}

Playground​

Server
Variables
Key
Value

Samples​


Get organization updates feed​

GET
/organizations/{id}/updates

Public, latest-first updates feed for an org (UUID or slug). Offset pagination, limit clamped 1..50.

Parameters​

Path Parameters

id*
Type
string
Required

Query Parameters

limit
Type
integer
Minimum
1
Maximum
50
Default
20
offset
Type
integer
Minimum
0
Default
0

Responses​

Organization updates

application/json
JSON
{
"data": [
{
"id": "string",
"org_id": "string",
"author_user_id": "string",
"title": "string",
"body": "string",
"cover_image": "string",
"published_at": "string",
"created_at": "string",
"updated_at": "string",
"author_name": "string",
"author_profile_slug": "string",
"author_avatar": "string"
}
],
"pagination": {
"limit": 0,
"offset": 0,
"total": 0
}
}

Playground​

Server
Variables
Key
Value

Samples​


List public organization documents​

GET
/organizations/{id}/documents/public

Approved trust documents an organization admin has marked public, for an approved or verified org (UUID or slug). Metadata only — there is no public download.

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Public documents

application/json
JSON
{
"data": [
{
"id": "string",
"doc_type": "string",
"original_filename": "string",
"content_type": "string",
"size_bytes": 0,
"reviewed_at": "string",
"created_at": "string"
}
]
}

Playground​

Server
Variables
Key
Value

Samples​


List organization role titles​

GET
/org-role-titles

Public reference list of non-deprecated position titles (the LinkedIn-style "position" picker on the org-admin Members page), ordered by sort_order then label. These titles are display-only and carry no permissions — they are distinct from the RBAC roles org_owner / org_admin / org_viewer. Pass an id from this list as org_role_title_id when adding a member.

Responses​

Role titles

application/json
JSON
{
"data": [
]
}

Playground​

Samples​


List campaign locations by US state​

GET
/locations

US states that currently have active campaigns, with a campaign count per state, sorted by state name. The state is parsed out of each campaign's free-text location (a two-letter code or full state name); campaigns whose location cannot be matched to a state are left out. Cached for 5 minutes. Drives the location filter on campaign browse.

Responses​

States with active campaigns

application/json
JSON
{
"data": [
{
"code": "CA",
"name": "California",
"count": 0
}
]
}

Playground​

Samples​


Report an organization​

POST
/organizations/{id}/report

Flags an organization for review by FundlyHub's trust team. A signed-in caller with a verified email address can report; no relationship to the organization is needed. Each user holds at most one report per organization — reporting again overwrites the earlier category and details and puts the report back to pending.

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

id*

Organization UUID (a slug is not accepted and answers 404).

Type
string
Required
Format
"uuid"

Request Body​

application/json
JSON
{
"category": "string",
"details": "string"
}

Responses​

Report recorded

application/json
JSON
{
"success": true
}

Playground​

Server
Authorization
Variables
Key
Value
Body

Samples​


Powered by VitePress OpenAPI

Built with VitePress