Get All Memberships
/v1/membershipsReturns memberships, optionally filtered by workspace, person, firebase id, or status. Read-only; no side effects. Used to render a workspace's member roster and pending invites. ## Filtering & sorting Filter via `POST /v1/records/query` (root `memberships`) or the `filters` model; operators are gated by each field's data type. See [Filtering & sorting](../filtering-and-sorting). **Filterable fields** | Field | Type | Allowed operators | |---|---|---| | `created_at` | date | `eq` `lt` `gt` `is_null` `is_not_null` | | `deleted_at` | date | `eq` `lt` `gt` `is_null` `is_not_null` | | `firebase_id` | text | `contains` `eq` `neq` `starts_with` `ends_with` `is_null` `is_not_null` | | `invite_token` | text | `contains` `eq` `neq` `starts_with` `ends_with` `is_null` `is_not_null` | | `is_default` | boolean | `eq` | | `membership_id` | text | `contains` `eq` `neq` `starts_with` `ends_with` `is_null` `is_not_null` | | `membership_role` | text | `contains` `eq` `neq` `starts_with` `ends_with` `is_null` `is_not_null` | | `pk` | number | `eq` `neq` `gt` `gte` `lt` `lte` `is_null` `is_not_null` | | `status` | text | `contains` `eq` `neq` `starts_with` `ends_with` `is_null` `is_not_null` | | `updated_at` | date | `eq` `lt` `gt` `is_null` `is_not_null` | **Sortable fields:** `created_at`, `deleted_at`, `firebase_id`, `invite_token`, `membership_id`, `membership_role`, `pk`, `status`, `updated_at` (via `orderBy` / `sort`, `asc`|`desc`).
Requires a bearer token: Authorization: Bearer <token>.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| filter[workspace] | string <uuid> | No | Restrict to one workspace.e.g. 8f6b2c10-4a1e-4d2b-9c3a-1f0e7a5b6c21 |
| filter[person] | string <uuid> | No | Restrict to one person.e.g. d5e6f7a8-9b0c-41d2-83e4-f5a6b7c8d9e0 |
| filter[firebase_id] | string | No | Restrict to one firebase auth uid.e.g. uid_dani_park_92a |
| filter[status] | string | No | Restrict to pending or active memberships.e.g. active |
| page[number] | string | No | 1-based page number.e.g. 1 |
| page[size] | string | No | Page size, 1 to 100.e.g. 25 |
Request
curl -X GET https://api.wellapp.ai/v1/memberships \
-H "Authorization: Bearer $WELL_API_TOKEN"Responses
200 — Memberships with included workspaces and people.
{
"data": [
{
"type": "membership",
"id": "3d4e5f60-7182-493a-a4b5-c6d7e8f9a0b1",
"attributes": {
"membership_role": "member",
"status": "pending",
"firebase_id": null,
"invite_token": "5f3a9c2e-1b4d-4e6f-8a90-12c3d4e5f607",
"is_default": false,
"created_at": "2026-02-01T10:00:00.000Z",
"updated_at": "2026-02-01T10:00:00.000Z"
},
"relationships": {
"workspace": {
"data": {
"type": "workspace",
"id": "8f6b2c10-4a1e-4d2b-9c3a-1f0e7a5b6c21"
}
},
"person": {
"data": {
"type": "people",
"id": "d5e6f7a8-9b0c-41d2-83e4-f5a6b7c8d9e0"
}
},
"parent_workspace": {
"data": null
},
"invited_by": {
"data": {
"type": "people",
"id": "c4d5e6f7-8a9b-40c1-92d3-e4f5a6b7c8d9"
}
}
}
}
],
"included": [
{
"type": "workspace",
"id": "8f6b2c10-4a1e-4d2b-9c3a-1f0e7a5b6c21",
"attributes": {
"name": "Foldspace AI",
"description": "Production finance workspace for the Foldspace team.",
"avatar_image": null,
"avatar_color": "#5B8DEF",
"external_workspace_id": null,
"trusted": false,
"auto_extract_enabled": true,
"stage": "active",
"timezone": "America/Los_Angeles",
"parent_workspace_id": null,
"created_at": "2026-01-12T09:29:00.000Z",
"updated_at": "2026-05-21T07:45:00.000Z"
},
"relationships": {
"person": {
"data": {
"type": "people",
"id": "00000000-0000-4000-8000-000000000001"
}
},
"invited_by": {
"data": {
"type": "people",
"id": "00000000-0000-4000-8000-000000000001"
}
}
}
}
]
}401 — Unauthorized
{
"code": "UNAUTHORIZED",
"status": 401,
"title": "Unauthorized",
"message": "See title.",
"meta": {
"trace_id": "a1b2c3",
"log_id": "a1b2c3"
}
}403 — Forbidden
{
"code": "FORBIDDEN",
"status": 403,
"title": "Forbidden",
"message": "See title.",
"meta": {
"trace_id": "a1b2c3",
"log_id": "a1b2c3"
}
}Filtering & sorting on related objects
This resource's related objects (the ones you can include) and how to filter or sort on each:
| Relationship | Cardinality | Filter on a field | Sort by a field |
|---|---|---|---|
person | to-one (people) | { "person": { "full_name": { "_eq": … } } } | "field": "person.full_name" ✅ |
workspace | to-one (workspace) | { "workspace": { "name": { "_eq": … } } } | "field": "workspace.name" ✅ |
invited_by | to-one (people) | { "invited_by": { "full_name": { "_eq": … } } } | "field": "invited_by.full_name" ✅ |
Replace field_name with any field of the related object. See its object-reference page for the full field list.
Filter by a to-one relation (and sort by it):
{
"root": "memberships",
"whereClause": { "person": { "full_name": { "_ilike": "%acme%" } } },
"orderBy": { "field": "person.full_name", "direction": "asc" }
}