PlanRadar Projects API
Read your projects, add or remove members to the project
Read your projects, add or remove members to the project
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/planradar-projects-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: PlanRadar's API Documentation Approval Requests V2 Projects API
version: '2.0'
description: "Welcome to PlanRadar's API documentation, here you can find all the details about our APIs as well as test them online.<br />\n <h5>Rate Limits</h5>30 requests per minute per account, aggregated across all tokens.<br />\n If the threshold is exceeded, a 5-minute cooldown is applied to the account, aggregated across all tokens.<br />\n During the cooldown period, further requests may be rejected until the cooldown ends.<br />\n In rare cases, an endpoint may have a different rate limit than the default. When that happens, the differing limit will be explicitly stated in the API documentation for that endpoint.<br />\n <h5>Access Key</h5>In order to be able to access any API you have to create an access token.Therefore you have to follow these steps:-\n <ul>\n <li>Go to your profile page and click on Personal Access Tokens on the left side bar</li><li>Click on the 'Create Access Token' top right button in order to create a new access token.</li><li>Copy the created token and paste it into the field that pops up when you click on the 'Authorize' button </li><li>Note: you can copy the token only once.</li><li>Now you can easily access any API</li>\n </ul>\n <h5>V2 APIs</h5>We are currently working on upgrading all our APIs to v2, and we recommend that you use v2 APIs if it is available.\n <p>V2 APIs are faster, robust and more flexible than v1 APIs</p>"
servers:
- url: /
tags:
- name: Projects
description: Read your projects, add or remove members to the project
paths:
/api/v1/{customer_id}/projects/{project_id}/memberships:
get:
summary: Get all project memberships
tags:
- Projects
description: Get all users that are member of a specific project
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: project_id
in: path
description: use 0 to return all project memberships
required: true
schema:
type: string
- name: last_sync_date
in: query
required: false
description: Unix timestamp in seconds. When provided, returns only memberships changed after this time (incremental sync). Omit or use 0 to return all memberships. Non-numeric values are ignored.
schema:
type: integer
responses:
'404':
description: project not found
'406':
description: Unsupported Accept Header
/api/v1/{customer_id}/projects/{project_id}/project_groups:
get:
summary: Returns all groups of a specific project
tags:
- Projects
description: 'This API returns all groups of a specific project based on its id. Without any extra parameters it will return the first 100 groups ordered by ascending ID. Extra parameters can be added to sort the results.<br /> <b>Group Sorting:</b> Groups can be sorted by the amount of users they have. <br /><b>Example: </b> `/project_groups?sort=count`<br /> Moreover, they can be sorted by the groups''s name: group.name, the leader''s first name: leader.firstname or the leader''s email: leader.mail. The sort is always ascending unless the field name is prefixed with a minus (U+002D HYPHEN-MINUS, “-“) i.e. `-id` or `id`. <br /><b>Example: </b> `/project_groups?sort=-group.name`<br />'
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: project_id
in: path
required: true
schema:
type: string
- name: sort
in: query
schema:
type: string
- name: page
in: query
description: sets the number of pages for the returned groups
schema:
type: integer
- name: pagesize
in: query
description: sets the number of groups that should be returned per page <br/>Maximum is 500, default is 100
schema:
type: integer
- name: check_inhouse
in: query
description: sets whether or not the returned groups should contain an in house user type
schema:
type: boolean
responses:
'404':
description: Project Not Found
/api/v1/{customer_id}/projects/{project_id}/users:
get:
summary: Returns all users of a project
tags:
- Projects
description: 'This API returns all users of a specific project including customer permissions and groups.<br /> Without any extra parameters it will return the first 100 users ordered by ascending ID. Extra parameters can be added to sort the results.<br /> <b>User Sorting:</b> Users can be sorted by their attributes e.g id, firstname, lastname, company. Moreover, the results can be sorted by other characteristics such as customer_permissions and project_memberships. The sort is always ascending unless the field name is prefixed with a minus (U+002D HYPHEN-MINUS, “-“) i.e. `-id` or `id`. <br /><b>Example#1: </b> `/users?sort=-firstname`<br /> <br /><b>Example#2: </b> `/users?sort=customer-permissions.permission-type`<br /> <br /><b>Example#3: </b> `/users?sort=project-memberships.defectradar_role_id`<br />'
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: project_id
in: path
description: set project id to 0 if you want to get all the users that are part of projects
required: true
schema:
type: string
- name: page
in: query
description: sets the number of pages for the returned users
schema:
type: integer
- name: pagesize
in: query
description: sets the number of users that should be returned per page <br/>Maximum is 500, default is 100
schema:
type: integer
- name: sort
in: query
schema:
type: string
responses:
'404':
description: Users Not Found
'406':
description: Unsupported Accept Header
/api/v1/{customer_id}/projects/{project_id}/add_member_to_project:
post:
summary: Adds specific user/s to project
tags:
- Projects
description: This API is used for assigning a specific user to a specific project.
security:
- apiKey: []
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: project_id
in: path
required: true
schema:
type: string
responses:
'404':
description: User Or Project Not Found
'406':
description: Unsupported Accept Header
requestBody:
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
attributes:
type: object
properties:
all:
type: boolean
example: false
description: sets whether or not all groups of the customer should be added to the project
is_mobile_sync:
type: boolean
example: false
description: 'sets whether or not the data should be synced on a mobile phone '
white_list:
type: array
items:
type: string
example: byk
description: ' contains all the ids of the users that should be added to the project'
black_list:
type: array
items:
type: string
example: lmw
description: contains all the ids of the users that are deselected and should therefore be removed from the project
roleId:
type: string
example: lm
description: id of the role that should be assigned to the added user/s
/api/v1/{customer_id}/projects/{project_id}/remove_member_from_project:
post:
summary: Removes specific member from project
tags:
- Projects
description: This API is used for removing a specific user from a specific project.
security:
- apiKey: []
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: project_id
in: path
required: true
schema:
type: string
responses:
'404':
description: Member Not Found
requestBody:
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
attributes:
type: object
properties:
userId:
type: string
description: 'id of the user that should be removed from the project '
force_unassign_issues:
type: boolean
description: if is set to `true` all the tickets that are assigned to this user will be unassigned
/api/v1/{customer_id}/projects/{project_id}/add_group_to_project:
post:
summary: Adds specific group/s to project
tags:
- Projects
description: 'This API is used for adding one group or multiple groups with a specific role to a specific project based on its id. '
security:
- apiKey: []
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: project_id
in: path
required: true
schema:
type: string
responses:
'404':
description: Group or Role Not Found
requestBody:
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
attributes:
type: object
properties:
all:
type: boolean
example: false
description: ' sets whether or not all groups of the customer should be added to the project'
black_list:
type: array
items:
type: string
example: oll
description: contains all the ids of the groups that are deselected and should therefore be removed from the project
white_list:
type: array
items:
type: string
example: gpk
description: contains all the ids of the groups that should be added to the project
roleId:
type: string
example: lm
description: id of the role that should be assigned to the added group/s
required:
- title
- content
/api/v1/{customer_id}/projects/{project_id}/update_project_member_role:
put:
summary: Updates specific member role of project
tags:
- Projects
description: This API is used for updating the role of a specific member of a specific project
security:
- apiKey: []
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: project_id
in: path
required: true
schema:
type: string
responses:
'404':
description: Project Or User Not Found not found
'406':
description: Unsupported Accept Header
requestBody:
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
attributes:
type: object
properties:
roleId:
type: string
example: lm
description: id of the new role - is required
userId:
type: string
exmample: byk
description: id of the user - is required
/api/v1/{customer_id}/projects:
get:
summary: Returns all projects
tags:
- Projects
description: 'This API returns all projects of the logged in customer. Without any extra parameters it will return the first 100 projects ordered by ascending ID. Extra parameters can be added to sort the results. <br ><b>Project Sorting: </b> <br /> Projects can be sorted by the project''s id: running_number, project''s name: name, project''s code: projectnumber, project''s start date: drstart_date, project''s end date: drend_date, project''s zipcode: zipcode, project''s city: city, project''s street: street, project''s country: country. The sort is always ascending unless the field name is prefixed with a minus (U+002D HYPHEN-MINUS, “-“) i.e. `-id` or `id` <br /> <b>Example#1: </b>sorting projects by descending name `/projects?sort=-name`<br /> <b>Example#2: </b>sorting projects by ascending start date `/projects?sort=drstart_date`'
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: sort
in: query
schema:
type: string
- name: pagesize
in: query
description: sets the number of projects that should be returned per page <br/>Maximum is 500, default is 100
schema:
type: string
- name: page
in: query
description: sets the number of pages for the returned projects
schema:
type: string
responses:
'404':
description: Projects Not Found
post:
summary: Creates project
tags:
- Projects
description: This API is used for creating a new project.
security:
- apiKey: []
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
responses:
'422':
description: Unprocessable Entity
requestBody:
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
attributes:
type: object
properties:
name:
type: string
example: firstproject
description: name of the project
street:
type: string
example: Some Street
description: street of the project
zipcode:
type: string
example: '1010'
description: zipcode of the project
city:
type: string
example: Vienna
description: city of the project
country:
type: string
example: Austria
description: country of the project
description:
type: string
example: This is the first project
description: description of the project
drend-date:
type: string
example: '2022-02-26T00:00:00.000Z'
description: end date of the project
drstart-date:
type: string
example: '2022-02-23T10:02:25.000Z'
description: start date of the project
homepage:
type: string
example: https://www.planradar.com
description: homepage of the project
bruttosize:
type: integer
budget:
type: integer
drend_date:
type: string
drstart_date:
type: string
identifier:
type: string
is_active:
type: boolean
is_customer:
type: boolean
is_public:
type: boolean
nettosize:
type: integer
parent_id:
type: integer
projectnumber:
type: integer
example: 52512510244225
description: code of the project
status:
type: integer
default: 1
example: 1
fields:
type: array
items:
type: object
description: is an array that contains the project's custom created fields and their values
properties:
edit:
type: boolean
example: true
description: sets whether or not the field can be edited
id:
type: string
example: b5723873-a607-4ea6-956a-6d5663f1953b
description: id of the field
name:
type: string
example: first-field
description: name of the field
type:
type: string
example: CustomFields::LongTextType
description: 'type of the field - allowed values are: CustomFields::ShortTextType, CustomFields::LongTextType, CustomFields::BooleanType, CustomFields::DateType, CustomFields::FloatType, CustomFields::ListType, CustomFields::IntegerType, CustomFields::TimeType, CustomFields::CheckListType'
value:
type: string
example: firstvalue
description: value of the field
required:
- name
- projectnumber
/api/v1/{customer_id}/projects/{project_id}/copy_project:
post:
summary: 'Copies specific project '
tags:
- Projects
description: This API is used for copying a specific project based on its id.
security:
- apiKey: []
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: project_id
in: path
required: true
schema:
type: string
- name: name
in: query
description: sets the name of the copy of the project
schema:
type: string
- name: details
in: query
description: sets whether or not the copy of the project should contain the project's details
schema:
type: boolean
- name: groups
in: query
description: sets whether or not the copy of the project should contain the project's groups
schema:
type: boolean
- name: ticket_types
in: query
description: sets whether or not the copy of the project should contain the project's forms and lists
schema:
type: boolean
- name: users
in: query
description: sets whether or not the copy of the project should contain the project's users
schema:
type: boolean
- name: components
in: query
description: sets whether or not the copy of the project should contain the project's layers and plans
schema:
type: boolean
responses:
'404':
description: project not found
'406':
description: Unsupported Accept Header
/api/v1/{customer_id}/projects/{project_id}/export_project:
get:
summary: Exports data of a specific project
tags:
- Projects
description: This API is used for exporting the data of a specific project based on its id.
security:
- apiKey: []
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: project_id
in: path
required: true
schema:
type: string
- name: filter_id
in: query
description: 'id of the filter of the tickets that should be exported with the project '
schema:
type: string
- name: timezone_offset
in: query
description: is a timestamp - is the difference between the local time and the worlwide UTC time
schema:
type: string
- name: includedocuments
in: query
description: sets whether or not all documents should be included in the export
schema:
type: boolean
responses:
'404':
description: Project Not Found
'406':
description: Unsupported Accept Header
/api/v1/{customer_id}/projects/{project_id}:
get:
summary: Returns specific project
tags:
- Projects
description: This API returns a specific project based on its id.
security:
- apiKey: []
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: project_id
in: path
required: true
schema:
type: string
responses:
'404':
description: Project Not Found
'406':
description: Unsupported Accept Header
put:
summary: Updates specific project
tags:
- Projects
description: This API is used for updating a specific project based on its id.
security:
- apiKey: []
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: project_id
in: path
required: true
schema:
type: string
responses:
'422':
description: Unprocessable Entity
requestBody:
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
attributes:
type: object
properties:
name:
type: string
example: firstproject
description: name of the project
running-number:
type: string
description: 'project count in relation to the user, example: 5 (this means that this is the 5th created project of the customer)'
parent-id-hashed:
type: string
description: ' hashed id of the logged in customer - is optional'
typed-fields:
type: array
items:
type: object
description: is an array that contains the project's custom created fields and their values
properties:
edit:
type: boolean
example: true
description: sets whether or not the field can be edited
id:
type: string
example: b5723873-a607-4ea6-956a-6d5663f1953b
description: id of the field
name:
type: string
example: first-field
description: name of the field
type:
type: string
example: CustomFields::LongTextType
description: 'type of the field - allowed values are: CustomFields::ShortTextType, CustomFields::LongTextType, CustomFields::BooleanType, CustomFields::DateType, CustomFields::FloatType, CustomFields::ListType, CustomFields::IntegerType, CustomFields::TimeType, CustomFields::CheckListType'
value:
type: string
example: firstvalue
description: value of the field
typed-values:
type: object
description: 'sets the values of the typed-fields of the project. This is a partial update: fields omitted from the object keep their stored value, fields included with a value overwrite it, and fields included with an empty value (null or empty string) are removed.'
projectnumber:
type: string
example: '52512510244225'
description: code of the project
street:
type: string
example: Some Street
description: street of the project
zipcode:
type: string
example: '1010'
description: zipcode of the project
city:
type: string
example: Vienna
description: city of the project
country:
type: string
example: Austria
description: country of the project
description:
type: string
example: This is the first project
description: description of the project
drend-date:
type: string
example: '2022-02-23T00:00:00.000Z'
description: end date of the project
drstart-date:
type: string
example: '2022-02-16T10:02:25.000Z'
description: start date of the project
homepage:
type: string
example: https://www.planradarproject.com
description: homepage of the project
fields:
type: array
items:
type: object
description: is an array that contains the project's custom created fields and their values
properties:
edit:
type: boolean
example: true
description: sets whether or not the field can be edited
id:
type: string
example: b5723873-a607-4ea6-956a-6d5663f1953b
description: id of the field
name:
type: string
example: first-field
description: name of the field
type:
type: string
example: CustomFields::LongTextType
description: 'type of the field - allowed values are: CustomFields::ShortTextType, CustomFields::LongTextType, CustomFields::BooleanType, CustomFields::DateType, CustomFields::FloatType, CustomFields::ListType, CustomFields::IntegerType, CustomFields::TimeType, CustomFields::CheckListType'
value:
type: string
example: firstvalue
description: value of the field
schedule-start-date:
type: string
example: '2022-02-23'
description: schedule start date of the project
required:
- name
- projectnumber
/api/v1/{customer_id}/projects/{project_id}/archive_project:
put:
summary: Archives/Unarchives specific project
tags:
- Projects
description: This API is used for archiving/unarchiving a specific project based on its id.
security:
- apiKey: []
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: project_id
in: path
required: true
schema:
type: string
responses:
'404':
description: Project Not found
'406':
description: Unsupported Accept Header
requestBody:
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
attributes:
type: object
properties:
status:
type: integer
example: 9
description: if is set to 9 the project will be archived - if is set to 1 the project will be unarchived
/api/v1/{customer_id}/projects/{project_id}/remove_group_from_project:
post:
summary: Removes a group from a specific project
tags:
- Projects
description: This API is used for removing a specific group from a specific project.
security:
- apiKey: []
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: project_id
in: path
required: true
schema:
type: string
responses:
'404':
description: Group Not Found
requestBody:
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
attributes:
type: object
properties:
group_id:
type: string
example: lm
description: id of the group that should be removed
# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/planradar/refs/heads/main/openapi/planradar-projects-api-openapi.yml