API: Projects
Projects are containers structuring the information (e.g. work packages, wikis) into smaller groups. They can be used in a classic project management approach but also when structuring work by departments.
As containers, they also control behaviour of the elements within them. One of the most important aspects of this is that projects limit permissions by having members with a certain permission set (roles) assigned to them.
Link | Description | Condition |
---|---|---|
update | Form endpoint that aids in updating this project | Permission : edit project |
updateImmediately | Directly update this project | Permission : edit project |
delete | Delete this project | Permission : admin |
createWorkPackage | Form endpoint that aids in preparing and creating a work package | Permission : add work packages |
createWorkPackageImmediately | Directly creates a work package in the project | Permission : add work packages |
Link | Description | Type | Constraints | Supported operations | Condition |
---|---|---|---|---|---|
self | This project | Project | not null | READ | |
ancestors | Array of all ancestors of the project, down from the root node (first element) to the parent (last element). | Collection | not null | READ | Permission view project on the ancestor project. Non visible projects will be omitted |
categories | Categories available in this project | Collection | not null | READ | |
types | Types available in this project | Collection | not null | READ | Permission : view work packages or manage types |
versions | Versions available in this project | Collection | not null | READ | Permission : view work packages or manage versions |
memberships | Memberships in the project | Collection | not null | READ | Permission : view members |
workPackages | Work Packages of this project | Collection | not null | READ | |
parent | Parent project of the project | Project | READ/WRITE | Permission edit project | |
status | Denotes the status of the project, so whether the project is on track, at risk or is having trouble. | ProjectStatus | READ/WRITE | Permission edit project |
general introduction into links’ properties for more information.
Property | Description | Type | Constraints | Supported operations |
---|---|---|---|---|
id | Projects’ id | Integer | x > 0 | READ/WRITE |
identifier | String | READ/WRITE | ||
name | String | READ/WRITE | ||
active | Indicates whether the project is currently active or already archived | Boolean | READ/WRITE | |
statusExplanation | A text detailing and explaining why the project has the reported status | Formattable | READ/WRITE | |
public | Indicates whether the project is accessible for everybody | Boolean | READ/WRITE | |
description | Formattable | READ/WRITE | ||
createdAt | Time of creation | DateTime | READ | |
updatedAt | Time of the most recent change to the project | DateTime | READ |
View_project_statusModel
{
"type": "object",
"example": {
"_type": "ProjectStatus",
"id": "on_track",
"name": "On track",
"_links": {
"self": {
"href": "/api/v3/project_statuses/on_track"
404
Returned if the project status does not exist.
{
"_type": "Error",
"errorIdentifier": "urn:openproject-org:api:v3:errors:NotFound",
"message": "The requested resource could not be found."
ErrorResponse
{
"type": "object",
"required": [
"_type",
"errorIdentifier",
"message"
"properties": {
"_embedded": {
"type": "object",
"properties": {
"details": {
"type": "object",
"properties": {
"attribute": {
"type": "string",
"example": "project"
"_type": {
"type": "string",
"enum": [
"Error"
"errorIdentifier": {
"type": "string",
"example": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation"
"message": {
"type": "string",
"example": "Project can't be blank."
Returns a collection of projects. The collection can be filtered via query parameters similar to how work packages are filtered. In addition to the provided filter, the result set is always limited to only contain projects the client is allowed to see.
filters
string
optional query
JSON specifying filter conditions. Accepts the same format as returned by the queries endpoint. Currently supported filters are:
- active: based on the active property of the project
- ancestor: filters projects by their ancestor. A project is not considered to be it’s own ancestor.
- available_project_attributes: filters projects based on the activated project project attributes.
- created_at: based on the time the project was created
- latest_activity_at: based on the time the last activity was registered on a project.
- name_and_identifier: based on both the name and the identifier.
- parent_id: filters projects by their parent.
- principal: based on members of the project.
- storage_id: filters projects by linked storages
- storage_url: filters projects by linked storages identified by the host url
- type_id: based on the types active in a project.
- user_action: based on the actions the current user has in the project.
- id: based on projects’ id.
- visible: based on the visibility for the user (id) provided as the filter value. This filter is useful for admins to identify the projects visible to a user.
There might also be additional filters based on the custom fields that have been configured.
Example:
[{ "ancestor": { "operator": "=", "values": ["1"] }" }]
sortBy
string
optional query
JSON specifying sort criteria. Currently supported orders are:
- id
- name
- typeahead (sorting by hierarchy and name)
- created_at
- public
- latest_activity_at
- required_disk_space
There might also be additional orders based on the custom fields that have been configured.
Example:
[["id", "asc"]]
select
string
optional query
Comma separated list of properties to include.
Example:
total,elements/identifier,elements/name
ProjectCollectionModel
{
"allOf": [
"$ref": "#/components/schemas/CollectionModel"
"type": "object",
"required": [
"_links",
"_embedded"
"properties": {
"_links": {
"type": "object",
"required": [
"self",
"representations"
"properties": {
"self": {
"allOf": [
"$ref": "#/components/schemas/Link"
"description": "This project collection\n\n**Resource**: ProjectStorageCollectionModel"
"representations": {
"type": "array",
"items": {
"allOf": [
"$ref": "#/components/schemas/Link"
"description": "A project collection representation in a specific file format."
"_embedded": {
"type": "object",
"required": [
"elements"
"properties": {
"elements": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ProjectModel"
400
Returned if the client sends invalid request parameters e.g. filters
{
"_type": "Error",
"errorIdentifier": "urn:openproject-org:api:v3:errors:InvalidQuery",
"message": "Filters Invalid filter does not exist."
ErrorResponse
{
"type": "object",
"required": [
"_type",
"errorIdentifier",
"message"
"properties": {
"_embedded": {
"type": "object",
"properties": {
"details": {
"type": "object",
"properties": {
"attribute": {
"type": "string",
"example": "project"
"_type": {
"type": "string",
"enum": [
"Error"
"errorIdentifier": {
"type": "string",
"example": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation"
"message": {
"type": "string",
"example": "Project can't be blank."