API Documentation

API Endpoint

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
Requestsreturns memberships

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
Responses200
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 memberships
GET/api/v2/memberships


GET /api/v2/memberships/1
Requestsreturns membership

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
Responses200
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 membership
GET/api/v2/memberships/{id}

URI Parameters
HideShow
id
number (required) Example: 1

membership id


POST /api/v2/memberships
Requestscreates membershipreturns error

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
    }
  }
}
Responses201
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"
    }
  }
}
Responses403
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 membership
POST/api/v2/memberships

URI Parameters
HideShow
access_type_id
number (required) Example: 1

access type id

type_id
number (required) Example: 1

type id

person_id: `1` (number, optional) - required if dynamic_group_id or team_id not provided
string (required) 
dynamic_group_id
number (optional) Example: 1

required 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/
Requestsupdates membershipreturns error

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"
    }
  }
}
Responses200
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"
    }
  }
}
Responses422
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 membership
PATCH/api/v2/memberships/

URI Parameters
HideShow
access_type_id
number (required) Example: 1

access type id


DELETE /api/v2/memberships/1
Requestsdestroys membership

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
Responses204
This response has no content.

Deletes a membership
DELETE/api/v2/memberships/{id}

URI Parameters
HideShow
id
number (required) Example: 1

membership id


Generated by aglio on 02 Aug 2025