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
ProducesJSON
PaginationNo
OAuth scopesGROUPS 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

AttributeDescription
group_type_keyUnique identifier for the group type. Becomes the resource ID. Immutable after creation. Example: "HH_GROUPS"
display_nameUser-facing label. Mutable. Example: "Households"
is_permissioned_resourceAccess 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:

ParameterDescription
is_permissioned_resourceFilter by access model. true = only permissioned types. false = only implicit types.

Response codes:

  • 200 OK -- Success
  • 400 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 -- Success
  • 404 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_key is immutable after creation. Choose a stable, uppercase identifier.
  • is_permissioned_resource is set at creation and determines the access model for all groups of this type.

Response codes:

  • 201 Created -- Success
  • 400 Bad Request -- Missing required fields or malformed payload
  • 403 Forbidden -- Requires "Manage firm settings: Custom group types" permission
  • 409 Conflict -- group_type_key already 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 -- Success
  • 403 Forbidden -- Requires admin permission
  • 404 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 GROUPS type 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 -- Deleted
  • 403 Forbidden -- Requires admin permission
  • 404 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")

Did this page help you?