Group Types
Group types categorize how groups are organized and accessed within a firm. Every group belongs to exactly one group type, and the group type's permission model determines whether users need explicit access to the group itself (permissioned) or whether access flows through membership (implicit).
By default, every firm has a single built-in group type called GROUPS with permissioned access. You can create additional group types to support different organizational structures (households, strategies, custodian groupings) with their own access controls.
Overview
| Base route | /v1/group_types |
| Produces | JSON |
| Pagination | No |
| OAuth scopes | GROUPS or GROUPS_WRITE |
Access requirements
Read: "API Access: Create, edit, and delete" and "Groups: Manage selected or all groups access."
Create/Update/Delete: "Manage firm settings: Custom group types."
Resource attributes
| Attribute | Description |
|---|---|
group_type_key | Unique identifier for the group type. Becomes the resource ID. Immutable after creation. Example: "HH_GROUPS" |
display_name | User-facing label. Mutable. Example: "Households" |
is_permissioned_resource | Access model. If true, users need explicit group-level access ("permissioned"). If false, access is derived from membership in the group's entities ("implicit"). Example: true |
Permission model
The is_permissioned_resource flag is the key architectural decision when creating a group type:
Permissioned (true): A user must be explicitly granted access to each group of this type. This is appropriate for groups that represent organizational boundaries (advisor teams, compliance groups) where membership alone should not grant visibility.
Implicit (false): A user can see a group if they have access to at least one entity within it. This works for aggregation groupings (households, asset class groups) where visibility should follow the data.
The default GROUPS type is permissioned and cannot be modified or deleted.
Get all group types
GET /v1/group_types
curl -X GET "https://{firm}.addepar.com/api/v1/group_types" \
-H "Authorization: Basic {credentials}" \
-H "Addepar-Firm: 1" \
-H "Accept: application/vnd.api+json"
{
"data": [
{
"id": "HH_GROUPS",
"type": "group_types",
"attributes": {
"is_permissioned_resource": false,
"group_type_key": "HH_GROUPS",
"display_name": "Households"
},
"links": { "self": "/v1/group_types/HH_GROUPS" }
},
{
"id": "GROUPS",
"type": "group_types",
"attributes": {
"is_permissioned_resource": true,
"group_type_key": "GROUPS",
"display_name": "GROUPS"
},
"links": { "self": "/v1/group_types/GROUPS" }
}
],
"included": [],
"links": { "next": null }
}
Optional query parameters:
| Parameter | Description |
|---|---|
is_permissioned_resource | Filter by access model. true = only permissioned types. false = only implicit types. |
Response codes:
200 OK-- Success400 Bad Request-- Malformed request
Get a group type
GET /v1/group_types/:id
The :id is the group_type_key value (e.g., HH_GROUPS).
curl -X GET "https://{firm}.addepar.com/api/v1/group_types/HH_GROUPS" \
-H "Authorization: Basic {credentials}" \
-H "Addepar-Firm: 1" \
-H "Accept: application/vnd.api+json"
Response codes:
200 OK-- Success404 Not Found-- Group type key does not exist
Create a group type
POST /v1/group_types
curl -X POST "https://{firm}.addepar.com/api/v1/group_types" \
-H "Authorization: Basic {credentials}" \
-H "Addepar-Firm: 1" \
-H "Content-Type: application/vnd.api+json" \
-H "Accept: application/vnd.api+json" \
-d '{
"data": {
"type": "group_types",
"attributes": {
"is_permissioned_resource": false,
"group_type_key": "HH_GROUPS",
"display_name": "Households"
}
}
}'
{
"data": {
"id": "HH_GROUPS",
"type": "group_types",
"attributes": {
"is_permissioned_resource": false,
"group_type_key": "HH_GROUPS",
"display_name": "Households"
},
"links": { "self": "/v1/group_types/HH_GROUPS" }
},
"included": []
}
Constraints:
group_type_keyis immutable after creation. Choose a stable, uppercase identifier.is_permissioned_resourceis set at creation and determines the access model for all groups of this type.
Response codes:
201 Created-- Success400 Bad Request-- Missing required fields or malformed payload403 Forbidden-- Requires "Manage firm settings: Custom group types" permission409 Conflict--group_type_keyalready exists
Update a group type
Only display_name can be changed after creation.
PATCH /v1/group_types/:id
curl -X PATCH "https://{firm}.addepar.com/api/v1/group_types/HH_GROUPS" \
-H "Authorization: Basic {credentials}" \
-H "Addepar-Firm: 1" \
-H "Content-Type: application/vnd.api+json" \
-H "Accept: application/vnd.api+json" \
-d '{
"data": {
"id": "HH_GROUPS",
"type": "group_types",
"attributes": {
"display_name": "Household Groups"
}
}
}'
Response codes:
200 OK-- Success403 Forbidden-- Requires admin permission404 Not Found-- Group type does not exist
Delete a group type
DELETE /v1/group_types/:id
curl -X DELETE "https://{firm}.addepar.com/api/v1/group_types/HH_GROUPS" \
-H "Authorization: Basic {credentials}" \
-H "Addepar-Firm: 1" \
-H "Accept: application/vnd.api+json"
204 No Content
Constraints:
- The default
GROUPStype cannot be deleted. - Deleting a group type does not delete the groups within it, but those groups become inaccessible through normal queries.
Response codes:
204 No Content-- Deleted403 Forbidden-- Requires admin permission404 Not Found-- Group type does not exist
Related
- Groups -- Create and manage groups within a group type
- Entities -- Entities that groups contain
- Portfolio Query -- Use groups as portfolio scope (
portfolio_type: "GROUP")
Updated 11 days ago