OpenProject Programs API
Programs are one of the types of [workspaces](https://www.openproject.org/docs/api/endpoints/workspaces) in OpenProject structuring the information (e.g. work packages, wikis) into smaller sets. They are typically used to group, structure and manage projects that target similar strategic goals of the organization and belong to a portfolio. As containers, they also control behaviour of the elements within them. One of the most important aspects of this is that programs limit permissions by having members with a certain permission set (roles) assigned to them. ## Actions | Link | Description | Condition | |:--------------------------: |----------------------------------------------------------------------| --------------------------------- | | update | Form endpoint that aids in updating this program | **Permission**: edit workspace | | updateImmediately | Directly update this program | **Permission**: edit workspace | | delete | Delete this program | **Permission**: admin | | favor | Mark this program as favorited by the current user | **Permission**: none but login is required, only present if the program is not yet favorited | | disfavor | Mark this program as no longer favorited by the current user | **Permission**: none but login is required, only present if the program is favorited | | createWorkPackage | Form endpoint that aids in preparing and creating a work package | **Permission**: add work packages | | createWorkPackageImmediately | Directly creates a work package in the program | **Permission**: add work packages | ## Linked Properties | Link | Description | Type | Constraints | Supported operations |Condition | | :----------: | ------------- | ---- | ----------- | -------------------- |----------------------------------------- | | self | This program | Program | not null | READ | | | ancestors | Array of all ancestors of the program, down from the root node (first element) to the parent (last element). | Collection | not null | READ | **Permission** view program on the ancestor program. Non visible programs will be omitted | | categories | Categories available in this program | Collection | not null | READ | | | types | Types available in this program | Collection | not null | READ | **Permission**: view work packages or manage types | | versions | Versions available in this program | Collection | not null | READ | **Permission**: view work packages or manage versions | | memberships | Memberships in the program | Collection | not null | READ | **Permission**: view members | | workPackages | Work Packages of this program | Collection | not null | READ | | | parent | Parent program of the program | Program | | READ/WRITE | **Permission** edit workspace | | status | Denotes the status of the program, so whether the program is on track, at risk or is having trouble. | ProgramStatus | | READ/WRITE | **Permission** edit workspace | Depending on custom fields defined for programs, additional links might exist. Note, that the parent and ancestor links may contain the "undisclosed uri" `urn:openprogram-org:api:v3:undisclosed` in case an ancestor program is defined but the client lacks permission to see it. See the [general introduction into links' properties](https://www.openproject.org/docs/api/basic-objects/#local-properties) for more information. ## Local Properties | Property | Description | Type | Constraints | Supported operations | | :---------------------:| ------------- | ---- | ----------- | -------------------- | | id | Programs' id | Integer | x > 0 | READ/WRITE | | identifier | | String | | READ/WRITE | | name | | String | | READ/WRITE | | active | Indicates whether the program is currently active or already archived | Boolean | | READ/WRITE | | favorited | Indicates whether the program is favorited by the current user | Boolean | | READ | | statusExplanation | A text detailing and explaining why the program has the reported status | Formattable | | READ/WRITE | | public | Indicates whether the program 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 program | DateTime | | READ | Depending on custom fields defined for programs, additional properties might exist.