API Documentation
Memberships ¶
Memberships ¶
Working with memberships:
Membership objects are used for managing access to different resources in Productive. Currently it is used to manage access to projects, docs, dashboards, task views and deals.
Resources accessible via memberships
Depending on the resource you are giving access for, different attribute is required. Here is a list of resources that can be used with memberships and their required attributes:
Resource | Required attributes |
---|---|
Project | project_id |
Doc | page_id |
Dashboard | dashboard_id |
Task view | filter_id |
Deal | deal_id |
Membership types
There are three types of membership:
-
type_id: 1
, person -> gives access to a specific person -
type_id: 2
, dynamic_group -> gives access to a system predefined group of people -
type_id: 3
, team -> gives access to a team
When working with memberships, depending on the type of membership, different attributes should be sent. For person membership, you need to provide person_id
, for dynamic group membership, you need to provide dynamic_group_id
, and for team membership, you need to provide team_id
.
Dynamic groups
Dynamic groups are predefined groups of people that are created based on the person role and person assignment. There are four types of dynamic groups:
-
dynamic_group_id: 2
- employees -> all employees in the organization -
dynamic_group_id: 6
- project_members -> all members of a resource’s project -
dynamic_group_id: 8
- project_manager -> project manager of a resource’s project -
dynamic_group_id: 9
- deal_owner -> owner of a deal
When creating a membership for a dynamic group, you need to provide dynamic_group_id
.
Depending on the target resource you are giving access to, different dynamic groups are available, dynamic_group_id
available for:
-
Project membership: 2
-
Doc membership
- if Doc is on a project: 2, 6, 8
- if Doc is not on a project: 2
-
Dashboard membership: 2
-
Deal membership: 2, 6, 8, 9
-
Task view membership: 2
Access levels
There are multiple access levels membership can have:
-
access_type_id: 1
- full -> can edit and delete resource -
access_type_id: 2
- edit -> can edit resource -
access_type_id: 3
- view -> can only view resource -
access_type_id: 4
- comment -> can comment on resource -
access_type_id: 5
- member -> marks a subject as a member of a resource
More about member access: Member access is used for resources where there is no need for different levels (projects, deals). Those resources use only one access type and that is member access. Having member access means you are a member of a resource.
Depending on the target resource you are giving access to, different access levels are available:
-
Project memberships use level: 5
-
Doc memberships use levels: 1, 2, 3, 4
-
Dashboard memberships use levels: 1, 3
-
Deal memberships use level: 5
-
Task view memberships use level: 1, 3
Examples of creating membership
Example 1: creating a membership for a person on a project
POST https://api.productive.io/api/v2/memberships
{
"data": {
"attributes": {
"type_id": 1,
"person_id": 123,
"access_type_id": 5,
"project_id": 321
},
"type": "memberships"
}
}
Explanation of the example:
-
type_id: 1
- membership is for a person -
person_id: 123
- person with id: 123 is getting access -
access_type_id: 5
- person is getting member access -
project_id: 321
- person is getting access to project with id: 321
Example 2: creating full access membership for an employees dynamic group on a dashboard
POST https://api.productive.io/api/v2/memberships
{
"data": {
"attributes": {
"type_id": 2,
"dynamic_group_id": 2,
"access_type_id": 1,
"dashboard_id": 321
},
"type": "memberships"
}
}
Explanation of the example:
-
type_id: 2
- membership is for a dynamic group -
dynamic_group_id: 2
- employees dynamic group is getting access -
access_type_id: 1
- employees are getting full access -
dashboard_id: 321
- employees are getting access to dashboard with id: 321
Example 3: creating view access membership for a team on a doc
POST https://api.productive.io/api/v2/memberships
{
"data": {
"attributes": {
"type_id": 3,
"team_id": 123,
"access_type_id": 3,
"page_id": 321
},
"type": "memberships"
}
}
Explanation of the example:
-
type_id: 3
- membership is for a team -
team_id: 123
- team with id: 123 is getting access -
access_type_id: 3
- team is getting view access -
page_id: 321
- team is getting access to doc with id: 321
Supported filter params
-
access_type_id
-
dashboard_id
-
deal_id
-
dynamic_group_id
-
filter_id
-
id
-
page_id
-
person_id
-
project_id
-
target_id
-
target_type
-
type_id
GET /api/v2/memberships
Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
"data": [
{
"id": "1659",
"type": "memberships",
"attributes": {
"access_type_id": 1,
"dynamic_group_id": null,
"options": {},
"target_type": "page",
"type_id": 1
},
"relationships": {
"organization": {
"data": {
"type": "organizations",
"id": "717"
}
},
"person": {
"meta": {
"included": false
}
},
"team": {
"meta": {
"included": false
}
},
"dashboard": {
"meta": {
"included": false
}
},
"deal": {
"meta": {
"included": false
}
},
"filter": {
"meta": {
"included": false
}
},
"page": {
"meta": {
"included": false
}
},
"project": {
"meta": {
"included": false
}
},
"survey": {
"meta": {
"included": false
}
}
}
},
{
"id": "1660",
"type": "memberships",
"attributes": {
"access_type_id": 3,
"dynamic_group_id": null,
"options": {},
"target_type": "page",
"type_id": 1
},
"relationships": {
"organization": {
"data": {
"type": "organizations",
"id": "717"
}
},
"person": {
"meta": {
"included": false
}
},
"team": {
"meta": {
"included": false
}
},
"dashboard": {
"meta": {
"included": false
}
},
"deal": {
"meta": {
"included": false
}
},
"filter": {
"meta": {
"included": false
}
},
"page": {
"meta": {
"included": false
}
},
"project": {
"meta": {
"included": false
}
},
"survey": {
"meta": {
"included": false
}
}
}
},
{
"id": "1661",
"type": "memberships",
"attributes": {
"access_type_id": 1,
"dynamic_group_id": null,
"options": {},
"target_type": "page",
"type_id": 1
},
"relationships": {
"organization": {
"data": {
"type": "organizations",
"id": "717"
}
},
"person": {
"meta": {
"included": false
}
},
"team": {
"meta": {
"included": false
}
},
"dashboard": {
"meta": {
"included": false
}
},
"deal": {
"meta": {
"included": false
}
},
"filter": {
"meta": {
"included": false
}
},
"page": {
"meta": {
"included": false
}
},
"project": {
"meta": {
"included": false
}
},
"survey": {
"meta": {
"included": false
}
}
}
}
],
"links": {
"first": "http://api-test.productive.io/api/v2/memberships?page%5Bnumber%5D=1&page%5Bsize%5D=30",
"last": "http://api-test.productive.io/api/v2/memberships?page%5Bnumber%5D=1&page%5Bsize%5D=30"
},
"meta": {
"current_page": 1,
"total_pages": 1,
"total_count": 3,
"page_size": 30,
"max_page_size": 200
}
}
Get membershipsGET/api/v2/memberships
GET /api/v2/memberships/1675
Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
"data": {
"id": "1675",
"type": "memberships",
"attributes": {
"access_type_id": 3,
"dynamic_group_id": null,
"options": {},
"target_type": "page",
"type_id": 1
},
"relationships": {
"organization": {
"data": {
"type": "organizations",
"id": "721"
}
},
"person": {
"meta": {
"included": false
}
},
"team": {
"meta": {
"included": false
}
},
"dashboard": {
"meta": {
"included": false
}
},
"deal": {
"meta": {
"included": false
}
},
"filter": {
"meta": {
"included": false
}
},
"page": {
"meta": {
"included": false
}
},
"project": {
"meta": {
"included": false
}
},
"survey": {
"meta": {
"included": false
}
}
}
},
"meta": {}
}
Gets a membershipGET/api/v2/memberships/{id}
- id
number
(required) Example: 1membership id
POST /api/v2/memberships
Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
"data": {
"type": "memberships",
"attributes": {
"person_id": 2705,
"page_id": 20,
"type_id": 1,
"access_type_id": 2
}
}
}
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
"data": {
"id": "1680",
"type": "memberships",
"attributes": {
"access_type_id": 2,
"dynamic_group_id": null,
"options": null,
"target_type": "page",
"type_id": 1
},
"relationships": {
"organization": {
"data": {
"type": "organizations",
"id": "723"
}
},
"person": {
"meta": {
"included": false
}
},
"team": {
"meta": {
"included": false
}
},
"dashboard": {
"meta": {
"included": false
}
},
"deal": {
"meta": {
"included": false
}
},
"filter": {
"meta": {
"included": false
}
},
"page": {
"meta": {
"included": false
}
},
"project": {
"meta": {
"included": false
}
},
"survey": {
"meta": {
"included": false
}
}
}
},
"meta": {}
}
POST /api/v2/memberships
Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
"data": {
"type": "memberships",
"attributes": {
"target_type": "invalid"
}
}
}
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
"errors": [
{
"status": "403",
"title": "Access Denied",
"detail": "You are not authorized to access this resource",
"source": {}
}
]
}
Create a membershipPOST/api/v2/memberships
- access_type_id
number
(required) Example: 1access type id
- type_id
number
(required) Example: 1type id
- person_id: `1` (number, optional) - required if dynamic_group_id or team_id not provided
string
(required)- dynamic_group_id
number
(optional) Example: 1required if person_id or team_id not provided
- team_id: `1` (number, optional) - required if person_id or dynamic_group_id not provided
string
(required)
PATCH /api/v2/memberships/1707
Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
"data": {
"type": "memberships",
"attributes": {
"access_type_id": "1"
}
}
}
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
"data": {
"id": "1707",
"type": "memberships",
"attributes": {
"access_type_id": 1,
"dynamic_group_id": null,
"options": {},
"target_type": "page",
"type_id": 1
},
"relationships": {
"organization": {
"data": {
"type": "organizations",
"id": "731"
}
},
"person": {
"meta": {
"included": false
}
},
"team": {
"meta": {
"included": false
}
},
"dashboard": {
"meta": {
"included": false
}
},
"deal": {
"meta": {
"included": false
}
},
"filter": {
"meta": {
"included": false
}
},
"page": {
"meta": {
"included": false
}
},
"project": {
"meta": {
"included": false
}
},
"survey": {
"meta": {
"included": false
}
}
}
},
"meta": {}
}
PATCH /api/v2/memberships/1711
Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
"data": {
"type": "memberships",
"attributes": {
"access_type_id": "0"
}
}
}
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
"errors": [
{
"status": "422",
"code": "invalid_attribute",
"title": "Invalid Attribute",
"detail": "is not included in the list",
"source": {
"pointer": "data/attributes/access_type_id"
}
}
]
}
Update a membershipPATCH/api/v2/memberships/
- access_type_id
number
(required) Example: 1access type id
DELETE /api/v2/memberships/1717
Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Deletes a membershipDELETE/api/v2/memberships/{id}
- id
number
(required) Example: 1membership id
Generated by aglio on 02 Aug 2025