--- openapi: 3.1.2 info: description: |- You're looking at the current **stable** documentation of the OpenProject APIv3. If you're interested in the current development version, please go to [github.com/opf](https://github.com/opf/openproject/tree/dev/docs/api/apiv3). ## Introduction The documentation for the APIv3 is written according to the [OpenAPI 3.1 Specification](https://swagger.io/specification/). You can either view the static version of this documentation on the [website](https://www.openproject.org/docs/api/introduction/) or the interactive version, rendered with [OpenAPI Explorer](https://github.com/Rhosys/openapi-explorer/blob/main/README.md), in your OpenProject installation under `/api/docs`. In the latter you can try out the various API endpoints directly interacting with our OpenProject data. Moreover you can access the specification source itself under `/api/v3/spec.json` and `/api/v3/spec.yml` (e.g. [here](https://community.openproject.org/api/v3/spec.yml)). The APIv3 is a hypermedia REST API, a shorthand for "Hypermedia As The Engine Of Application State" (HATEOAS). This means that each endpoint of this API will have links to other resources or actions defined in the resulting body. These related resources and actions for any given resource will be context sensitive. For example, only actions that the authenticated user can take are being rendered. This can be used to dynamically identify actions that the user might take for any given response. As an example, if you fetch a work package through the [Work Package endpoint](https://www.openproject.org/docs/api/endpoints/work-packages/), the `update` link will only be present when the user you authenticated has been granted a permission to update the work package in the assigned project. ## HAL+JSON HAL is a simple format that gives a consistent and easy way to hyperlink between resources in your API. Read more in the following specification: [https://tools.ietf.org/html/draft-kelly-json-hal-08](https://tools.ietf.org/html/draft-kelly-json-hal-08) **OpenProject API implementation of HAL+JSON format** enriches JSON and introduces a few meta properties: - `_type` - specifies the type of the resource (e.g.: WorkPackage, Project) - `_links` - contains all related resource and action links available for the resource - `_embedded` - contains all embedded objects HAL does not guarantee that embedded resources are embedded in their full representation, they might as well be partially represented (e.g. some properties can be left out). However in this API you have the guarantee that whenever a resource is **embedded**, it is embedded in its **full representation**. ## API response structure All API responses contain a single HAL+JSON object, even collections of objects are technically represented by a single HAL+JSON object that itself contains its members. More details on collections can be found in the [Collections Section](https://www.openproject.org/docs/api/collections/). ## Authentication The API supports the following authentication schemes: * Session-based authentication * API tokens * passed as Bearer token * passed via Basic auth * OAuth 2.0 * using built-in authorization server * using an external authorization server (RFC 9068) Depending on the settings of the OpenProject instance many resources can be accessed without being authenticated. In case the instance requires authentication on all requests the client will receive an **HTTP 401** status code in response to any request. Otherwise unauthenticated clients have all the permissions of the anonymous user. ### Session-based authentication This means you have to login to OpenProject via the Web-Interface to be authenticated in the API. This method is well-suited for clients acting within the browser, like the Angular-Client built into OpenProject. In this case, you always need to pass the HTTP header `X-Requested-With "XMLHttpRequest"` for authentication. ### API token as bearer token Users can authenticate towards the API v3 using an API token as a bearer token. For example: ```shell API_KEY=opapi-2519132cdf62dcf5a66fd96394672079f9e9cad1 curl -H "Authorization: Bearer $API_KEY" https://community.openproject.org/api/v3/users/42 ``` Users can generate API tokens on their account page. ### API token through Basic Auth API tokens can also be used with basic auth, using the user name `apikey` (NOT your login) and the API token as the password. For example: ```shell API_KEY=opapi-2519132cdf62dcf5a66fd96394672079f9e9cad1 curl -u apikey:$API_KEY https://community.openproject.org/api/v3/users/42 ``` ### OAuth 2.0 authentication OpenProject allows authentication and authorization with OAuth2 with *Authorization code flow*, as well as *Client credentials* operation modes. To get started, you first need to register an application in the OpenProject OAuth administration section of your installation. This will save an entry for your application with a client unique identifier (`client_id`) and an accompanying secret key (`client_secret`). You can then use one the following guides to perform the supported OAuth 2.0 flows: - [Authorization code flow](https://oauth.net/2/grant-types/authorization-code) - [Authorization code flow with PKCE](https://doorkeeper.gitbook.io/guides/ruby-on-rails/pkce-flow), recommended for clients unable to keep the client_secret confidential - [Client credentials](https://oauth.net/2/grant-types/client-credentials/) - Requires an application to be bound to an impersonating user for non-public access ### OAuth 2.0 using an external authorization server There is a possibility to use JSON Web Tokens (JWT) generated by an OIDC provider configured in OpenProject as a bearer token to do authenticated requests against the API. The following requirements must be met: - OIDC provider must be configured in OpenProject with **jwks_uri** - JWT must be signed using RSA algorithm - JWT **iss** claim must be equal to OIDC provider **issuer** - JWT **aud** claim must contain the OpenProject **client ID** used at the OIDC provider - JWT **scope** claim must include a valid scope to access the desired API (e.g. `api_v3` for APIv3) - JWT must be actual (neither expired or too early to be used) - JWT must be passed in Authorization header like: `Authorization: Bearer {jwt}` - User from **sub** claim must be linked to OpenProject before (e.g. by logging in), otherwise it will be not authenticated In more general terms, OpenProject should be compliant to [RFC 9068](https://www.rfc-editor.org/rfc/rfc9068) when validating access tokens. ### Why not username and password? The simplest way to do basic auth would be to use a user's username and password naturally. However, OpenProject already has supported API keys in the past for the API v2, though not through basic auth. Using **username and password** directly would have some advantages: * It is intuitive for the user who then just has to provide those just as they would when logging into OpenProject. * No extra logic for token management necessary. On the other hand using **API keys** has some advantages too, which is why we went for that: * If compromised while saved on an insecure client the user only has to regenerate the API key instead of changing their password, too. * They are naturally long and random which makes them invulnerable to dictionary attacks and harder to crack in general. Most importantly users may not actually have a password to begin with. Specifically when they have registered through an OpenID Connect provider. ## Cross-Origin Resource Sharing (CORS) By default, the OpenProject API is _not_ responding with any CORS headers. If you want to allow cross-domain AJAX calls against your OpenProject instance, you need to enable CORS headers being returned. Please see [our API settings documentation](https://www.openproject.org/docs/system-admin-guide/api-and-webhooks/) on how to selectively enable CORS. ## Allowed HTTP methods - `GET` - Get a single resource or collection of resources - `POST` - Create a new resource or perform - `PATCH` - Update a resource - `DELETE` - Delete a resource ## Compression Responses are compressed if requested by the client. Currently [gzip](https://www.gzip.org/) and [deflate](https://tools.ietf.org/html/rfc1951) are supported. The client signals the desired compression by setting the [`Accept-Encoding` header](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3). If no `Accept-Encoding` header is send, `Accept-Encoding: identity` is assumed which will result in the API responding uncompressed. title: OpenProject API V3 (Stable) version: '3' servers: - url: https://qa.openproject-edge.com description: Edge QA instance - url: https://qa.openproject-stage.com description: Staging instance - url: https://community.openproject.org description: Community instance paths: "/api/v3": get: summary: View root operationId: view_root description: Returns the root resource, containing basic information about the server instance and a collection of useful links. tags: - Root responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/RootModel" "/api/v3/actions": get: parameters: - description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: + id: Returns only the action having the id or all actions except those having the id(s). example: '[{ "id": { "operator": "=", "values": ["memberships/create"] }" }]' in: query name: filters required: false schema: type: string - description: |- JSON specifying sort criteria. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are: + *No sort supported yet* example: '[["id", "asc"]]' in: query name: sortBy required: false schema: default: '[["id", "asc"]]' type: string responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: self: href: "/api/v3/actions/work_packages/create" title: Add work package _type: Action description: Creating a work package within a project including the uploading of attachments. Some attributes might not be selected, e.g version which requires a second permission id: work_packages/create modules: - work_packages name: Add work package - _links: self: href: "/api/v3/actions/work_packages/assign_versions" title: Assigning version _type: Action description: Assigning a work package to a version when creating/updating a work package. Only principals having this permission can assign a value to the version property of the work package resource. id: work_packages/assign_versions modules: - work_packages - versions name: Assign version _links: self: href: "/api/v3/actions" _type: Collection count: 2 total: 2 schema: "$ref": "#/components/schemas/List_actionsModel" description: OK headers: {} tags: - Actions & Capabilities description: |- Returns a collection of actions. The client can choose to filter the actions similar to how work packages are filtered. In addition to the provided filters, the server will reduce the result set to only contain actions, for which the requesting client has sufficient permissions. operationId: List_actions summary: List actions "/api/v3/actions/{id}": get: parameters: - description: action id which is the name of the action example: work_packages/create in: path name: id required: true schema: type: string responses: '200': content: application/hal+json: examples: response: value: _links: self: href: "/api/v3/actions/work_packages/create" title: Add work package _type: Action description: Creating a work package within a project including the uploading of attachments. Some attributes might not be selected, e.g version which requires a second permission id: work_packages/create modules: - work_packages name: Add work package schema: "$ref": "#/components/schemas/View_actionModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: Returned if the action does not exist. headers: {} tags: - Actions & Capabilities description: Returns an individual action. operationId: View_action summary: View action "/api/v3/activities/{id}": get: summary: Get an activity operationId: get_activity tags: - Activities description: Returns the requested activity resource identified by its unique id. parameters: - name: id description: Activity id in: path required: true schema: type: integer example: 1 responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/ActivityModel" examples: response: "$ref": "#/components/examples/ActivityResponse" patch: summary: Update activity operationId: update_activity tags: - Activities description: Updates an activity's comment and, on success, returns the updated activity. parameters: - name: id description: Activity id in: path required: true schema: type: integer example: 1 requestBody: content: application/json: schema: "$ref": "#/components/schemas/ActivityCommentWriteModel" responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/ActivityModel" examples: response: "$ref": "#/components/examples/ActivityResponse" '400': "$ref": "#/components/responses/InvalidRequestBody" '403': description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit journals content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to edit the comment of this journal entry. '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': description: Returned if the client tries to modify a read-only property. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyIsReadOnly message: The ID of an activity can't be changed. "/api/v3/activities/{id}/attachments": get: summary: List attachments by activity operationId: list_activity_attachments tags: - Activities - Attachments description: List all attachments of a single activity. parameters: - name: id description: ID of the activity whose attachments will be listed in: path required: true schema: type: integer example: 1 responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/Attachments_Model" '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: "Returned if the activity does not exist or the client does not have sufficient permissions\nto see it.\n\n**Required permission:** \n- `view_work_packages`\n- for internal comments: `view_internal_comments`\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of an activity.\nThat's why a 404 is returned here, even if a 403 might be more appropriate.*" post: summary: Add attachment to activity operationId: create_activity_attachment tags: - Activities - Attachments description: Adds an attachment to the specified activity. parameters: - name: id description: ID of the activity to receive the attachment in: path required: true schema: type: integer example: 1 requestBody: content: multipart/form-data: schema: "$ref": "#/components/schemas/FileUploadForm" responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/AttachmentModel" '400': description: |- Returned if the client sends a not understandable request. Reasons include: * Omitting one of the required parts (metadata and file) * sending unparsable JSON in the metadata part content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidRequestBody message: The request could not be parsed as JSON. '403': description: |- Returned if the client does not have sufficient permissions. **Required permission:** view_work_packages or view_internal_comments (for internal comments) *Note that you will only receive this error, if you are at least allowed to see the activity* content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to add attachments to this activity. '404': description: |- Returned if the activity does not exist or the client does not have sufficient permissions to see it. **Required permission:** view_work_packages or view_internal_comments (for internal comments) *Note: A client without sufficient permissions shall not be able to test for the existence of an activity. That's why a 404 is returned here, even if a 403 might be more appropriate.* content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': description: |- Returned if the client tries to send an invalid attachment. Reasons are: * Omitting the file name (`fileName` property of metadata part) * Sending a file that is too large content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: File is too large (maximum size is 5242880 Bytes). "/api/v3/activities/{id}/emoji_reactions": get: summary: List emoji reactions by activity operationId: list_activity_emoji_reactions tags: - Activities - EmojiReactions description: List all emoji reactions of a single activity. parameters: - name: id description: ID of the activity whose emoji reactions will be listed in: path required: true schema: type: integer example: '1' responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/EmojiReactions_Model" '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the activity does not exist or the client does not have sufficient permissions to see it. **Required permission:** - `view_work_packages` - for internal comments: `view_internal_comments` *Note: A client without sufficient permissions shall not be able to test for the existence of an activity. That's why a 404 is returned here, even if a 403 might be more appropriate.* patch: summary: Toggle emoji reaction for an activity operationId: toggle_activity_emoji_reaction tags: - Activities - EmojiReactions description: |- Toggle an emoji reaction for a given activity. If the user has already reacted with the given emoji, the reaction will be removed. Otherwise, a new reaction will be created. **Note:** The response contains the complete collection of all emoji reactions for this activity. **Required permission:** - `add_work_package_comments` - for internal comments: `add_internal_comments` parameters: - name: id description: ID of the activity to toggle emoji reaction for in: path required: true schema: type: integer example: '1' requestBody: required: true content: application/hal+json: schema: type: object required: - reaction properties: reaction: type: string description: The emoji reaction identifier example: thumbs_up enum: - thumbs_up - thumbs_down - grinning_face_with_smiling_eyes - confused_face - heart - party_popper - rocket - eyes responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/EmojiReactionModel" '400': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:BadRequest message: 'Bad request: reaction does not have a valid value' description: Returned if the request is invalid. For example, if the reaction is not valid. '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: Returned if the client does not have sufficient permissions to toggle the emoji reaction for the activity. '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the activity does not exist or the client does not have sufficient permissions to see it. "/api/v3/attachments": post: responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/AttachmentModel" description: OK '400': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidRequestBody message: The request could not be parsed as JSON. description: |- Returned if the client sends a not understandable request. Reasons include: * Omitting one of the required parts (metadata and file) * sending unparsable JSON in the metadata part '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to delete this attachment. description: |- Returned if the client does not have sufficient permissions. **Required permission:** At least one permission in any project: edit work package, add work package, edit messages, edit wiki pages (plugins might extend this list) '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: File is too large (maximum size is 5242880 Bytes). description: |- Returned if the client tries to send an invalid attachment. Reasons are: * Omitting the file name (`fileName` property of metadata part) * Sending a file that is too large tags: - Attachments description: |- Clients can create attachments without a container first and attach them later on. This is useful if the container does not exist at the time the attachment is uploaded. After the upload, the client can then claim such containerless attachments for any resource eligible (e.g. WorkPackage) on subsequent requests. The upload and the claiming *must* be done for the same user account. Attachments uploaded by another user cannot be claimed and once claimed for a resource, they cannot be claimed by another. The upload request must be of type `multipart/form-data` with exactly two parts. The first part *must* be called `metadata`. Its content type is expected to be `application/json`, the body *must* be a single JSON object, containing at least the `fileName` and optionally the attachments `description`. The second part *must* be called `file`, its content type *should* match the mime type of the file. The body *must* be the raw content of the file. Note that a `filename` *must* be indicated in the `Content-Disposition` of this part, although it will be ignored. Instead the `fileName` inside the JSON of the metadata part will be used. operationId: create_attachment summary: Create Attachment "/api/v3/attachments/{id}": delete: parameters: - description: Attachment id example: 1 in: path name: id required: true schema: type: integer responses: '204': description: |- Returned if the attachment was deleted successfully. Note that the response body is empty as of now. In future versions of the API a body *might* be returned along with an appropriate HTTP status. '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to delete this attachment. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit permission for the container of the attachment or being the author for attachments without container *Note that you will only receive this error, if you are at least allowed to see the attachment.* '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified attachment does not exist. description: |- Returned if the attachment does not exist or the client does not have sufficient permissions to see it. **Required permission:** view permission for the container of the attachment or being the author for attachments without container *Note: A client without sufficient permissions shall not be able to test for the existence of an attachment. That's why a 404 is returned here, even if a 403 might be more appropriate.* '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" tags: - Attachments description: Permanently deletes the specified attachment. operationId: delete_attachment summary: Delete attachment get: parameters: - description: Attachment id example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/AttachmentModel" description: OK '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified attachment does not exist. description: |- Returned if the attachment does not exist or the client does not have sufficient permissions to see it. **Required permission:** view permission for the container of the attachment or being the author for attachments without container *Note: A client without sufficient permissions shall not be able to test for the existence of an attachment. That's why a 404 is returned here, even if a 403 might be more appropriate.* tags: - Attachments description: '' operationId: view_attachment summary: View attachment "/api/v3/budgets/{id}": get: parameters: - description: Budget id example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _links: self: href: "/api/v3/budgets/1" title: Q3 2015 _type: Budget id: 1 subject: Q3 2015 schema: "$ref": "#/components/schemas/BudgetModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to see this budget. description: |- Returned if the client does not have sufficient permissions. **Required permission:** view work packages **or** view budgets (on the budgets project) headers: {} tags: - Budgets description: '' operationId: view_Budget summary: view Budget "/api/v3/capabilities": get: parameters: - description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. + action: Get all capabilities of a certain action + principal: Get all capabilities of a principal + context: Get all capabilities within a context. Note that for a workspace context the client needs to provide `w{id}`, e.g. `w5` and for the global context a `g`. + **Deprecation**: The now deprecated context `p` for project still works, but must eventually be replaced with the `w` for the workspace context. example: '[{ "principal": { "operator": "=", "values": ["1"] }" }]' in: query name: filters required: false schema: type: string - description: |- JSON specifying sort criteria. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are: + id: Sort by the capabilities id example: '[["id", "asc"]]' in: query name: sortBy required: false schema: default: '[["id", "asc"]]' type: string responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: action: href: "/api/v3/actions/work_packages/create" title: Add work package context: href: "/api/v3/projects/123" title: A project principal: href: "/api/v3/users/567" title: Some user self: href: "/api/v3/capabilities/work_packages/create/w123-567" _type: Capability id: work_packages/create/w123-567 - _links: action: href: "/api/v3/actions/work_packages/assignee" context: href: "/api/v3/projects/123" title: A project principal: href: "/api/v3/users/567" title: Some user self: href: "/api/v3/capabilities/work_packages/assignee/w123-567" _type: Capability id: work_packages/assignee/w123-567 - _links: action: href: "/api/v3/actions/memberships/create" context: href: "/api/v3/portfolios/345" title: A portfolio principal: href: "/api/v3/users/821" title: Some user self: href: "/api/v3/capabilities/memberships/create/w345-821" title: Create members _type: Capability id: memberships/create/w345-821 - _links: context: href: "/api/v3/capabilities/context/global" title: Global principal: href: "/api/v3/users/567" title: Some user self: href: "/api/v3/capabilities/users/delete/g-567" title: Delete user _type: Capability id: users/delete/g-567 _links: changeSize: href: "/api/v3/capabilities?pageSize={size}" templated: true jumpTo: href: "/api/v3/capabilities?offset={offset}" templated: true self: href: "/api/v3/capabilities" _type: Collection count: 4 total: 4 schema: "$ref": "#/components/schemas/List_capabilitiesModel" description: OK headers: {} tags: - Actions & Capabilities description: Returns a collection of actions assigned to a principal in a context. The client can choose to filter the actions similar to how work packages are filtered. In addition to the provided filters, the server will reduce the result set to only contain actions, for which the requesting client has sufficient permissions operationId: List_capabilities summary: List capabilities "/api/v3/capabilities/context/global": get: responses: '200': content: application/hal+json: examples: response: value: _links: self: href: "/api/v3/capabilities/context/global" _type: CapabilityContext::Global id: global schema: "$ref": "#/components/schemas/View_global_contextModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: Returned if the action does not exist. headers: {} tags: - Actions & Capabilities description: Returns the global capability context. This context is necessary to consistently link to a context even if the context is not a project. operationId: View_global_context summary: View global context "/api/v3/capabilities/{id}": get: parameters: - description: capability id example: work_packages/create/p123-567 in: path name: id required: true schema: type: string responses: '200': content: application/hal+json: examples: response: value: _links: action: href: "/api/v3/actions/work_packages/create" title: Add work package context: href: "/api/v3/projects/123" title: A project principal: href: "/api/v3/users/567" title: Some user self: href: "/api/v3/capabilities/work_packages/create/w123-567" _type: Capability id: work_packages/create/p123-567 schema: "$ref": "#/components/schemas/View_capabilitiesModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: Returned if the capability does not exist. headers: {} tags: - Actions & Capabilities description: '' operationId: View_capabilities summary: View capabilities "/api/v3/categories/{id}": get: parameters: - description: Category id example: '1' in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _links: defaultAssignee: href: "/api/v3/users/42" title: John Sheppard project: href: "/api/v3/projects/11" title: Example project self: href: "/api/v3/categories/10" title: Category with assignee _type: Category id: 10 name: Foo schema: "$ref": "#/components/schemas/CategoryModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified category does not exist. description: |- Returned if the category does not exist or the client does not have sufficient permissions to see it. **Required permission:** view project (defining the category) *Note: A client without sufficient permissions shall not be able to test for the existence of a category. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} tags: - Categories description: '' operationId: View_Category summary: View Category "/api/v3/configuration": get: responses: '200': content: application/hal+json: examples: response: value: _type: Configuration _links: self: href: "/api/v3/configuration" userPreferences: href: "/api/v3/my_preferences" maximumAttachmentFileSize: 5242880 hostName: example.com:8080 perPageOptions: - 1 - 10 - 100 durationFormat: hours_only activeFeatureFlags: - aFeatureFlag - anotherFeatureFlag schema: "$ref": "#/components/schemas/ConfigurationModel" description: OK headers: {} tags: - Configuration description: '' operationId: View_configuration summary: View configuration "/api/v3/custom_actions/{id}": get: summary: Get a custom action tags: - Custom actions description: Retrieves a custom action by id. operationId: get_custom_action parameters: - name: id description: The id of the custom action to fetch in: path required: true schema: type: integer example: 42 responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/CustomActionModel" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit work packages in any project '404': description: Returned if the custom action does not exist. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. "/api/v3/custom_actions/{id}/execute": post: parameters: - description: The id of the custom action to execute example: 1 in: path name: id required: true schema: type: integer responses: '200': description: OK headers: {} '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit work packages - Additional permissions might be required based on the custom action. headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: Returned if the custom action does not exist. headers: {} '406': "$ref": "#/components/responses/MissingContentType" '409': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:UpdateConflict message: Couldn't update the resource because of conflicting modifications. description: Returned if the client provided an outdated lockVersion or no lockVersion at all. headers: {} '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _embedded: details: attribute: lag _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Lag must be a number greater than or equal to 0 description: Returned if the custom action was not executed successfully e.g. when a constraint on a work package property was violated. headers: {} tags: - Custom actions description: |- A POST to this endpoint executes the custom action on the work package provided in the payload. The altered work package will be returned. In order to avoid executing the custom action unbeknown to a change that has already taken place, the client has to provide the work package's current lockVersion. operationId: Execute_custom_action requestBody: content: application/json: schema: example: _links: workPackage: href: "/api/v3/work_packages/42" lockVersion: '3' properties: _links: properties: workPackage: properties: href: type: string type: object type: object lockVersion: type: string type: object summary: Execute custom action "/api/v3/custom_fields/{id}/items": get: summary: Get the custom field hierarchy items operationId: get_custom_field_items description: |- Retrieves the hierarchy of custom fields. The hierarchy is a tree structure of hierarchy items. It is represented as a flat list of items, where each item has a reference to its parent and children. The list is ordered in a depth-first manner. The first item is the requested parent. If parent was unset, the root item is returned as first element. Passing the `depth` query parameter allows to limit the depth of the hierarchy. If the depth is unset, the full hierarchy tree is returned. If the depth is set to `0`, only the requested parent is returned. Any other positive integer will return the number of children levels specified by this value. This endpoint only returns, if the custom field is of type `hierarchy`. parameters: - name: id description: The custom field's unique identifier in: path example: '42' required: true schema: type: integer - name: parent description: The identifier of the parent hierarchy item in: query example: '1337' required: false schema: type: integer - name: depth description: The level of hierarchy depth in: query example: '1' required: false schema: type: integer responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/HierarchyItemCollectionModel" examples: simple response: "$ref": "#/components/examples/HierarchyItemCollectionResponse" filtered response: "$ref": "#/components/examples/HierarchyItemCollectionFilteredResponse" '403': description: Returned if the user is not logged in. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. '404': description: Returned if the custom field does not exist or the user lacks the permission to view it. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. '422': description: Returned if the custom field is not of type hierarchy. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:UnprocessableContent message: The requested custom field resource is of wrong type. "/api/v3/custom_field_items/{id}": get: summary: Get a custom field hierarchy item operationId: get_custom_field_item description: Retrieves a single custom field item specified by its unique identifier. parameters: - name: id description: The custom field item's unique identifier in: path example: 42 required: true schema: type: integer responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/HierarchyItemReadModel" examples: simple response: "$ref": "#/components/examples/HierarchyItemResponse" '403': description: Returned if the user is not logged in. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. '404': description: |- Returned if the custom field item does not exist or the user lacks permission to see it. The permission required to view the item depends on the custom field it belongs to. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. "/api/v3/custom_field_items/{id}/branch": get: summary: Get a custom field hierarchy item's branch operationId: get_custom_field_item_branch description: |- Retrieves the branch of a single custom field item specified by its unique identifier. A branch is list of all ancestors, starting with the root item and finishing with the item itself. parameters: - name: id description: The custom field item's unique identifier in: path example: 42 required: true schema: type: integer responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/HierarchyItemCollectionModel" examples: simple response: "$ref": "#/components/examples/HierarchyItemCollectionResponse" '403': description: Returned if the user is not logged in. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. '404': description: Returned if the custom field does not exist or the user lacks permission to view it. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. '422': description: Returned if the custom field is not of type hierarchy. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:UnprocessableContent message: The requested custom field resource is of wrong type. "/api/v3/custom_options/{id}": get: parameters: - description: The custom option's identifier example: '1' in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _links: self: href: "/api/v3/custom_options/1" _type: CustomOption value: Foo schema: "$ref": "#/components/schemas/CustomOptionModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the custom option does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package in any project the custom option's custom field is active in. headers: {} tags: - Custom Options description: '' operationId: View_Custom_Option summary: View Custom Option "/api/v3/days/non_working": get: summary: Lists all non working days operationId: list_non_working_days tags: - Work Schedule description: |- Lists all one-time non working days, such as holidays. It does not lists the non working weekdays, such as each Saturday, Sunday. For listing the weekends, the `/api/v3/days` endpoint should be used. All days from current year are returned by default. parameters: - name: filters in: query description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: + date: the inclusive date interval to scope days to look up. When unspecified, default is from the beginning to the end of current year. Example: `{ "date": { "operator": "<>d", "values": ["2022-05-02","2022-05-26"] } }` would return days between May 5 and May 26 2022, inclusive. example: '[{ "date": { "operator": "<>d", "values": ["2022-05-02","2022-05-26"] } }]' required: false schema: type: string responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/NonWorkingDayCollectionModel" '400': "$ref": "#/components/responses/InvalidRequestBody" '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" post: summary: Creates a non-working day (NOT IMPLEMENTED) operationId: create_non_working_day tags: - Work Schedule description: |- **(NOT IMPLEMENTED)** Marks a day as being a non-working day. Note: creating a non-working day will not affect the start and finish dates of work packages but will affect their duration. requestBody: content: application/json: schema: "$ref": "#/components/schemas/NonWorkingDayModel" example: _type: NonWorkingDay date: '2022-12-25' name: Christmas responses: '201': description: Non-working day created. content: application/hal+json: schema: "$ref": "#/components/schemas/NonWorkingDayModel" '400': "$ref": "#/components/responses/InvalidRequestBody" '403': description: Returned if the client does not have sufficient permissions. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidQuery message: You are not authorized to access this resource. '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" "/api/v3/days/non_working/{date}": get: summary: View a non-working day operationId: view_non_working_day tags: - Work Schedule description: Returns the non-working day information for a given date. parameters: - name: date in: path required: true description: The date of the non-working day to view in ISO 8601 format. schema: type: string format: date example: '2022-05-06' responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/NonWorkingDayModel" '400': "$ref": "#/components/responses/InvalidRequestBody" '404': description: Returned if the given date is not a non-working day. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. patch: summary: Update a non-working day attributes (NOT IMPLEMENTED) operationId: update_non_working_day tags: - Work Schedule description: |- **(NOT IMPLEMENTED)** Update the non-working day information for a given date. parameters: - name: date in: path required: true description: The date of the non-working day to view in ISO 8601 format. schema: type: string format: date example: '2022-05-06' requestBody: content: application/json: schema: "$ref": "#/components/schemas/NonWorkingDayModel" example: _type: NonWorkingDay date: '2022-05-01' name: Labour day responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/NonWorkingDayModel" '400': "$ref": "#/components/responses/InvalidRequestBody" '404': description: Returned if the given date is not a non-working day. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" delete: summary: Removes a non-working day (NOT IMPLEMENTED) operationId: delete_non_working_day tags: - Work Schedule description: |- **(NOT IMPLEMENTED)** Removes the non-working day at the given date. Note: deleting a non-working day will not affect the start and finish dates of work packages but will affect their duration. parameters: - name: date in: path required: true description: The date of the non-working day to view in ISO 8601 format. schema: type: string format: date example: '2022-05-06' responses: '204': description: |- No Content. The operation succeeded. '400': "$ref": "#/components/responses/InvalidRequestBody" '404': description: Returned if the given date is not a non-working day. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" "/api/v3/days/week": get: summary: Lists week days operationId: list_week_days tags: - Work Schedule description: Lists week days with work schedule information. responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/WeekDayCollectionModel" '400': "$ref": "#/components/responses/InvalidRequestBody" patch: summary: Update week days (NOT IMPLEMENTED) operationId: update_week_days tags: - Work Schedule description: |- **(NOT IMPLEMENTED)** Update multiple week days with work schedule information. requestBody: content: application/json: schema: "$ref": "#/components/schemas/WeekDayCollectionWriteModel" responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/WeekDayCollectionModel" '400': "$ref": "#/components/responses/InvalidRequestBody" '404': description: Returned if a week day resource can not be found. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidQuery message: The requested resource could not be found. '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" "/api/v3/days/week/{day}": get: summary: View a week day operationId: view_week_day tags: - Work Schedule description: View a week day and its attributes. parameters: - name: day in: path required: true description: The week day from 1 to 7. 1 is Monday. 7 is Sunday. schema: type: integer minimum: 1 maximum: 7 responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/WeekDayModel" '400': "$ref": "#/components/responses/InvalidRequestBody" '404': description: Returned if the day is out of the 1-7 range. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. patch: summary: Update a week day attributes (NOT IMPLEMENTED) operationId: update_week_day description: |- **(NOT IMPLEMENTED)** Makes a week day a working or non-working day. Note: changing a week day working attribute will not affect the start and finish dates of work packages but will affect their duration attribute. tags: - Work Schedule parameters: - name: day in: path required: true description: The week day from 1 to 7. 1 is Monday. 7 is Sunday. schema: type: integer minimum: 1 maximum: 7 requestBody: content: application/json: schema: "$ref": "#/components/schemas/WeekDayWriteModel" example: _type: WeekDay working: false responses: '200': description: |- Update succeeded. Response will include the week day with updated attributes. content: application/hal+json: schema: "$ref": "#/components/schemas/WeekDayModel" '400': "$ref": "#/components/responses/InvalidRequestBody" '403': description: Returned if the client does not have sufficient permissions. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidQuery message: You are not authorized to access this resource. '404': description: Returned if the day is out of the 1-7 range. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidQuery message: The requested resource could not be found. '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" "/api/v3/days": get: summary: Lists days operationId: list_days tags: - Work Schedule description: |- Lists days information for a given date interval. All days from the beginning of current month to the end of following month are returned by default. parameters: - name: filters in: query description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: + date: the inclusive date interval to scope days to look up. When unspecified, default is from the beginning of current month to the end of following month. Example: `{ "date": { "operator": "<>d", "values": ["2022-05-02","2022-05-26"] } }` would return days between May 5 and May 26 2022, inclusive. + working: when `true`, returns only the working days. When `false`, returns only the non-working days (weekend days and non-working days). When unspecified, returns both working and non-working days. Example: `{ "working": { "operator": "=", "values": ["t"] } }` would exclude non-working days from the response. example: '[{ "date": { "operator": "<>d", "values": ["2022-05-02","2022-05-26"] } }, { "working": { "operator": "=", "values": ["f"] } }]' required: false schema: type: string responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/DayCollectionModel" '400': "$ref": "#/components/responses/InvalidRequestBody" '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" "/api/v3/days/{date}": get: summary: View day operationId: view_day tags: - Work Schedule description: View the day information for a given date. parameters: - name: date in: path required: true description: The date of the non-working day to view in ISO 8601 format. schema: type: string format: date example: '2022-05-06' responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/DayModel" '400': "$ref": "#/components/responses/InvalidRequestBody" "/api/v3/documents": get: parameters: - description: Page number inside the requested collection. example: '25' in: query name: offset required: false schema: default: 1 type: integer - description: Number of elements to display per page. example: '25' in: query name: pageSize required: false schema: type: integer - description: |- JSON specifying sort criteria. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are: + id: Sort by primary key + created_at: Sort by document creation datetime example: '[["created_at", "asc"]]' in: query name: sortBy required: false schema: type: string responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: addAttachment: href: "/api/v3/documents/1/attachments" method: post attachments: href: "/api/v3/documents/1/attachments" project: href: "/api/v3/projects/19" title: Some project self: href: "/api/v3/documents/1" title: Some document _type: Document createdAt: '2018-12-10T20:53:39.184Z' description: format: markdown html: "
Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui.
" raw: Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui. id: 1 title: Some other document - _links: addAttachment: href: "/api/v3/documents/2/attachments" method: post attachments: href: "/api/v3/documents/2/attachments" project: href: "/api/v3/projects/29" title: Some other project self: href: "/api/v3/documents/2" title: Some other document _type: Document createdAt: '2018-12-10T20:55:54.049Z' description: format: markdown html: "Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui.
" raw: Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui. id: 2 title: Some other document _links: changeSize: href: "/api/v3/documents?offset=1&pageSize=%7Bsize%7D" templated: true jumpTo: href: "/api/v3/documents?offset=%7Boffset%7D&pageSize=30" templated: true self: href: "/api/v3/documents?offset=1&pageSize=30" _type: Collection count: 2 offset: 1 pageSize: 30 total: 2 schema: "$ref": "#/components/schemas/DocumentsModel" description: OK headers: {} '400': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidQuery message: - Filters Invalid filter does not exist. description: Returned if the client sends invalid request parameters e.g. filters headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to view this resource. description: Returned if the client is not logged in and login is required. headers: {} tags: - Documents description: The documents returned depend on the provided parameters and also on the requesting user's permissions. operationId: List_Documents summary: List Documents "/api/v3/documents/{id}": get: parameters: - description: Document id example: '1' in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: attachments: _embedded...: elements: [] _links: self: href: "/api/v3/documents/1/attachments" _type: Collection count: 2 total: 2 project: _type: Project... _links: addAttachment: href: "/api/v3/documents/1/attachments" method: post attachments: href: "/api/v3/documents/1/attachments" project: href: "/api/v3/projects/19" title: Some project self: href: "/api/v3/documents/1" title: Some document _type: Document createdAt: '2018-12-10T20:53:39.698Z' description: format: markdown html: "Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui.
" raw: Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui. id: 1 title: Some other document schema: "$ref": "#/components/schemas/DocumentModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the document does not exist or if the user does not have permission to view it. **Required permission** `view documents` in the project the document belongs to headers: {} tags: - Documents description: '' operationId: View_document summary: View document patch: parameters: - description: Document id example: '1' in: path name: id required: true schema: type: integer requestBody: content: application/json: schema: type: object properties: title: type: string description: The title of the document description: type: object properties: raw: type: string description: The raw markdown content examples: request: value: title: Updated document title description: raw: Updated description content responses: '200': content: application/hal+json: examples: response: value: _embedded: attachments: _embedded...: elements: [] _links: self: href: "/api/v3/documents/1/attachments" _type: Collection count: 2 total: 2 project: _type: Project... _links: addAttachment: href: "/api/v3/documents/1/attachments" method: post attachments: href: "/api/v3/documents/1/attachments" project: href: "/api/v3/projects/19" title: Some project self: href: "/api/v3/documents/1" title: Updated document title _type: Document createdAt: '2018-12-10T20:53:39.698Z' description: format: markdown html: "Updated description content
" raw: Updated description content id: 1 title: Updated document title schema: "$ref": "#/components/schemas/DocumentModel" description: OK headers: {} '400': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:BadRequest message: The request body was invalid. description: Returned if the request body is invalid. headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the user does not have permission to edit the document. **Required permission** `manage documents` in the project the document belongs to headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the document does not exist or if the user does not have permission to view it. **Required permission** `view documents` in the project the document belongs to headers: {} '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Title can't be blank. _embedded: details: attribute: title description: Returned if the request body contains validation errors. headers: {} tags: - Documents description: Updates a document's attributes. operationId: Update_document summary: Update document "/api/v3/example/form": post: responses: '200': content: application/hal+json: examples: response: value: _embedded: payload: _links: status: href: "/api/v3/statuses/1" _type: Example lockVersion: 5 subject: An example title schema: _links: self: href: "/api/v3/example/schema" _type: Schema lockVersion: type: Integer writable: false status: _embedded: allowedValues: - _links: self: href: "/api/v3/statuses/1" _type: Status createdAt: '2014-05-21T08:51:20.396Z' defaultDoneRatio: 0 id: 1 isClosed: false isDefault: true name: New position: 1 updatedAt: '2014-05-21T09:12:00.647Z' - _links: self: href: "/api/v3/statuses/2" _type: Status createdAt: '2014-05-21T08:51:20.396Z' defaultDoneRatio: 100 id: 2 isClosed: true isDefault: false name: Closed position: 2 updatedAt: '2014-05-21T09:12:00.647Z' _links: allowedValues: - href: "/api/v3/statuses/1" title: New - href: "/api/v3/statuses/2" title: Closed type: Status subject: maxLength: 255 minLength: 1 type: String validationErrors: subject: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:BadExampleError message: For the purpose of this example we need a validation error. The remainder of the response pretends there were no errors. _links: commit: href: "/api/v3/example" method: PATCH previewMarkup: href: "/api/v3/render/markdown" method: POST self: href: "/api/v3/example/form" validate: href: "/api/v3/example/form" method: POST _type: Form schema: "$ref": "#/components/schemas/Example_FormModel" description: OK headers: {} '400': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidRequestBody message: The request body was neither empty, nor did it contain a single JSON object. description: |- Occurs when the client did not send a valid JSON object in the request body and the request body was not empty. Note that this error only occurs when the content is not at all a single JSON object. It **does not occur** for requests containing undefined properties or invalid property values. headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to edit example resources. description: Returned if the client does not have sufficient permissions to modify the associated resource. headers: {} '406': "$ref": "#/components/responses/MissingContentType" '409': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:UpdateConflict message: The resource you are about to edit was changed in the meantime. description: Returned if underlying resource was changed since the client requested the form. This is determined using the `lockVersion` property. headers: {} '415': "$ref": "#/components/responses/UnsupportedMediaType" tags: - Forms description: This is an example of how a form might look like. Note that this endpoint does not exist in the actual implementation. operationId: show_or_validate_form requestBody: content: application/json: schema: example: _type: Example lockVersion: 5 subject: An example title properties: _type: type: string lockVersion: type: number subject: type: string type: object summary: show or validate form "/api/v3/example/schema": get: responses: '200': content: application/hal+json: examples: response: value: _dependencies: [] _links: self: href: "/api/v3/example/schema" _type: Schema lockVersion: name: Resource Version type: Integer writable: false status: _embedded: allowedValues: - _links: self: href: "/api/v3/statuses/1" _type: Status createdAt: '2014-05-21T08:51:20.396Z' defaultDoneRatio: 0 id: 1 isClosed: false isDefault: true name: New position: 1 updatedAt: '2014-05-21T09:12:00.441Z' - _links: self: href: "/api/v3/statuses/2" _type: Status createdAt: '2014-05-21T08:51:20.396Z' defaultDoneRatio: 100 id: 2 isClosed: true isDefault: false name: Closed position: 2 updatedAt: '2014-05-21T09:12:00.441Z' _links: allowedValues: - href: "/api/v3/statuses/1" title: New - href: "/api/v3/statuses/2" title: Closed location: _links name: Status type: Status subject: maxLength: 255 minLength: 1 name: Subject type: String schema: "$ref": "#/components/schemas/Example_SchemaModel" description: OK headers: {} tags: - Schemas description: This is an example of how a schema might look like. Note that this endpoint does not exist in the actual implementation. operationId: view_the_schema summary: view the schema "/api/v3/examples": get: parameters: - description: |- The column to group by. Note: Aggregation is as of now only supported by the work package collection. You can pass any column name as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. example: status in: query name: groupBy required: false schema: type: string - description: '' example: true in: query name: showSums required: false schema: default: false type: boolean responses: '200': description: OK headers: {} tags: - Collections description: '' operationId: view_aggregated_result summary: view aggregated result "/api/v3/file_links/{id}": get: summary: Gets a file link. operationId: view_file_link tags: - File links description: Gets a single file link resource of a work package. parameters: - name: id description: File link id in: path required: true schema: type: integer example: 42 responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/FileLinkReadModel" '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package, view file links delete: summary: Removes a file link. operationId: delete_file_link tags: - File links description: |- Removes a file link on a work package. The request contains only the file link identifier as a path parameter. No request body is needed. parameters: - name: id description: File link id in: path required: true schema: type: integer example: 42 responses: '200': description: OK '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** manage file links *Note that you will only receive this error, if you are at least allowed to see the corresponding work package.* '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the work package or the file link does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package, view file links "/api/v3/file_links/{id}/open": get: summary: Creates an opening uri of the linked file. operationId: open_file_link tags: - File links description: |- Creates a uri to open the origin file linked by the given file link. This uri depends on the storage type and is always located on the origin storage itself. parameters: - name: id description: File link id in: path required: true schema: type: integer example: 42 - name: location description: Boolean flag indicating, if the file should be opened directly or rather the directory location. in: query required: false schema: type: boolean example: true responses: '303': headers: Location: schema: type: string format: uri description: |- Returned if the request was successful. In the `Location` header is the uri where the client can open the origin file on the storage. '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package, view file links "/api/v3/file_links/{id}/download": get: summary: Creates a download uri of the linked file. operationId: download_file_link tags: - File links description: |- Creates a uri to download the origin file linked by the given file link. This uri depends on the storage type and is always located on the origin storage itself. parameters: - name: id description: File link id in: path required: true schema: type: integer example: 42 responses: '303': headers: Location: schema: type: string format: uri description: |- Returned if the request was successful. In the `Location` header is the uri where the client can download the origin file from the storage. '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package, view file links "/api/v3/grids": get: summary: List grids tags: - Grids description: |- Lists all grids matching the provided filters and being part of the selected query page. The grids returned will also depend on the permissions of the requesting user. operationId: list_grids parameters: - name: offset schema: type: integer default: 1 description: Page number inside the requested collection. in: query required: false example: 25 - name: pageSize schema: type: integer default: 30 description: Number of elements to display per page. in: query required: false example: 25 - name: filters schema: type: string description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: - page: Filter grid by work package in: query required: false example: '[{ "page": { "operator": "=", "values": ["/my/page"] } }]' responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/GridCollectionModel" examples: Simple grid collection: "$ref": "#/components/examples/GridSimpleCollectionResponse" '400': "$ref": "#/components/responses/InvalidQuery" '403': description: Returned if the client is not logged in and login is required. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to view this resource. post: summary: Create a grid operationId: create_grid tags: - Grids description: |- Creates a new grid applying the attributes provided in the body. The constraints applied to the grid depend on the page the grid is placed in which is why the create form endpoint should be used to be guided when wanting to create a grid. requestBody: content: application/json: schema: "$ref": "#/components/schemas/GridWriteModel" examples: Simple grid creation: "$ref": "#/components/examples/GridSimplePatchModel" responses: '201': description: Created content: application/hal+json: schema: "$ref": "#/components/schemas/GridReadModel" '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** Depends on the page the grid is defined for. '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': description: |- Returned if: * a constraint for a property was violated (`PropertyConstraintViolation`) "/api/v3/grids/form": post: responses: '200': description: OK headers: {} tags: - Grids description: '' operationId: Grid_Create_Form summary: Grid Create Form "/api/v3/grids/{id}": get: summary: Get a grid operationId: get_grid tags: - Grids description: Fetches a single grid identified by its id. parameters: - name: id in: path description: Grid id required: true schema: type: integer example: '42' responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/GridReadModel" examples: Simple grid: "$ref": "#/components/examples/GridSimpleResponse" '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the Grid does not exist or if the user does not have permission to view it. **Required permission** depends on the page the grid is defined for patch: summary: Update a grid operationId: update_grid tags: - Grids description: |- Updates the given grid by applying the attributes provided in the body. The constraints applied to the grid depend on the page the grid is placed in which is why the create form endpoint should be used to be guided when wanting to update a grid. parameters: - name: id in: path description: Grid id required: true schema: type: integer example: '42' requestBody: content: application/json: schema: "$ref": "#/components/schemas/GridWriteModel" examples: Simple grid patch: "$ref": "#/components/examples/GridSimplePatchModel" responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/GridReadModel" examples: Simple grid: "$ref": "#/components/examples/GridSimpleResponse" '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** The permission depends on the page the grid is placed in. '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': description: |- Returned if: * a constraint for a property was violated (`PropertyConstraintViolation`) "/api/v3/grids/{id}/form": post: parameters: - description: ID of the grid being modified example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: schema: type: object examples: response: value: _embedded: payload: columnCount: 5 rowCount: 6 widgets: - _type: GridWidget endColumn: 3 endRow: 8 identifier: time_entries_current_user startColumn: 1 startRow: 1 - _type: GridWidget endColumn: 5 endRow: 8 identifier: news startColumn: 4 startRow: 3 - _type: GridWidget endColumn: 6 endRow: 3 identifier: documents startColumn: 3 startRow: 1 schema: _links: {} _type: Schema columnCount: hasDefault: false name: Number of columns required: true type: Integer writable: true createdAt: hasDefault: false name: Created on required: true type: DateTime writable: false id: hasDefault: false name: ID required: true type: Integer writable: false rowCount: hasDefault: false name: Number of rows required: true type: Integer writable: true scope: _links: {} hasDefault: false name: Page required: true type: Href writable: false updatedAt: hasDefault: false name: Updated on required: true type: DateTime writable: false widgets: _links: {} hasDefault: false name: Widgets required: true type: "[]GridWidget" writable: true validationErrors: widgets: _embedded: errors: - _embedded: details: attribute: widgets _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Widgets is outside of the grid. - _embedded: details: attribute: widgets _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Widgets is outside of the grid. _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MultipleErrors message: Multiple field constraints have been violated. _links: self: href: "/api/v3/grids/2/form" method: post validate: href: "/api/v3/grids/2/form" method: post _type: Form description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** depends on the page the grid is defined for. *Note that you will only receive this error, if you are at least allowed to see the corresponding grid.* headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the grid does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" tags: - Grids description: '' operationId: Grid_Update_Form summary: Grid Update Form "/api/v3/groups": get: summary: List groups operationId: list_groups tags: - Groups description: |- Returns a collection of groups. The client can choose to filter the groups similar to how work packages are filtered. In addition to the provided filters, the server will reduce the result set to only contain groups, for which the requesting client has sufficient permissions (*view_members*, *manage_members*). parameters: - name: sortBy description: |- JSON specifying sort criteria. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are: + id: Sort by primary key + created_at: Sort by group creation datetime + updated_at: Sort by the time the group was updated last in: query required: false example: '[["id", "asc"]]' schema: default: '[["id", "asc"]]' type: string - name: select description: Comma separated list of properties to include. in: query required: false example: total,elements/name,elements/self,self schema: type: string responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/GroupCollectionModel" '403': description: |- Returned if the client does not have sufficient permissions. **Required permission:** View members or manage members in any project content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. post: summary: Create group operationId: create_group tags: - Groups description: Creates a new group applying the attributes provided in the body. requestBody: content: application/json: schema: "$ref": "#/components/schemas/GroupWriteModel" responses: '201': description: Created content: application/hal+json: schema: "$ref": "#/components/schemas/GroupModel" '400': "$ref": "#/components/responses/InvalidRequestBody" '403': description: |- Returned if the client does not have sufficient permissions. **Required permission:** Administrator content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': description: |- Returned if: * a constraint for a property was violated (`PropertyConstraintViolation`) content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _embedded: details: attribute: name _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Name can't be blank. "/api/v3/groups/{id}": delete: summary: Delete group operationId: delete_group tags: - Groups description: Deletes the group. parameters: - name: id description: Group id example: 1 in: path required: true schema: type: integer responses: '202': description: |- Returned if the group was marked for deletion. Note that the response body is empty as of now. In future versions of the API a body *might* be returned, indicating the progress of deletion. '403': description: |- Returned if the client does not have sufficient permissions. **Required permission:** Administrator content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. '404': description: |- Returned if the group does not exist or the client does not have sufficient permissions to see it. **Required permission:** Administrator *Note: A client without sufficient permissions shall not be able to test for the existence of a version. That's why a 404 is returned here, even if a 403 might be more appropriate.* content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" get: summary: Get group operationId: get_group tags: - Groups description: Fetches a group resource. parameters: - name: id description: Group id example: 1 in: path required: true schema: type: integer responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/GroupModel" examples: group response: "$ref": "#/components/examples/GroupResponse" '404': description: |- Returned if the group does not exist or if the API user does not have permission to view them. **Required permission** If the user has the *manage members* permission in at least one project the user will be able to query all groups. If not, the user will be able to query all groups which are members in projects, he has the *view members* permission in. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. patch: summary: Update group operationId: update_group tags: - Groups description: |- Updates the given group by applying the attributes provided in the body. Please note that the `members` array provided will override the existing set of members (similar to a PUT). A client thus has to provide the complete list of members the group is to have after the PATCH even if only one member is to be added. parameters: - name: id description: Group id example: 1 in: path required: true schema: type: integer requestBody: content: application/json: schema: "$ref": "#/components/schemas/GroupWriteModel" responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/GroupModel" '400': "$ref": "#/components/responses/InvalidRequestBody" '403': description: |- Returned if the client does not have sufficient permissions. **Required permission:** Administrator content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. '404': description: |- Returned if the group does not exist or the client does not have sufficient permissions to see it. **Required permission** If the user has the *manage members* permission in at least one project the user will be able to query all groups. If not, the user will be able to query all groups which are members in projects, he has the *view members* permission in. *Note: A client without sufficient permissions shall not be able to test for the existence of a version. That's why a 404 is returned here, even if a 403 might be more appropriate.* content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': description: |- Returned if: * a constraint for a property was violated (`PropertyConstraintViolation`) content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _embedded: details: attribute: members _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Member is already taken. "/api/v3/help_texts": get: summary: List help texts operationId: list_help_texts tags: - Help texts description: List the complete collection of help texts. responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/HelpTextCollectionModel" "/api/v3/help_texts/{id}": get: summary: Get help text operationId: get_help_text tags: - Help texts description: Fetches the help text from the given id. parameters: - name: id description: Help text id example: 1 in: path required: true schema: type: integer responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/HelpTextModel" '404': description: Returned if the help text does not exist. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. "/api/v3/meetings": get: summary: List all visible meetings operationId: list_meetings tags: - Meetings description: Retrieve a paginated collection of meetings visible to the authenticated user. responses: '200': description: OK content: application/hal+json: examples: response: "$ref": "#/components/examples/MeetingCollectionSimpleResponse" schema: "$ref": "#/components/schemas/MeetingCollectionModel" "/api/v3/meetings/{id}": get: summary: Get a meeting operationId: get_meeting tags: - Meetings description: Retrieve an individual meeting as identified by the id parameter parameters: - description: Meeting identifier example: 1 in: path name: id required: true schema: type: integer responses: '200': description: OK content: application/hal+json: examples: response: "$ref": "#/components/examples/MeetingSimpleResponse" schema: "$ref": "#/components/schemas/MeetingModel" '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the meeting does not exist or the client does not have sufficient permissions to see it. **Required permission:** view meetings in the page's project "/api/v3/meetings/{id}/attachments": get: parameters: - description: ID of the meeting whose attachments will be listed example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: author: href: "/api/v3/users/1" title: OpenProject Admin container: href: "/api/v3/meetings/72" title: meeting delete: href: "/api/v3/attachments/376" method: delete downloadLocation: href: "/api/v3/attachments/376/content" self: href: "/api/v3/attachments/376" title: 200.gif _type: Attachment contentType: image/gif createdAt: '2018-06-01T07:24:19.896Z' description: format: plain html: '' raw: '' digest: algorithm: md5 hash: 7ac9c97ef73d47127f590788b84c0c1c fileName: some.gif fileSize: 3521772 id: 376 _links: self: href: "/api/v3/meetings/72/attachments" _type: Collection count: 1 total: 1 schema: "$ref": "#/components/schemas/Attachments_Model" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the meeting does not exist or the client does not have sufficient permissions to see it. **Required permission:** view meetings *Note: A client without sufficient permissions shall not be able to test for the existence of a meeting. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} tags: - Attachments description: '' operationId: List_attachments_by_meeting summary: List attachments by meeting post: parameters: - description: ID of the meeting to receive the attachment example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: author: _links: lock: href: "/api/v3/users/1/lock" method: post title: Set lock on admin self: href: "/api/v3/users/1" title: OpenProject Admin showUser: href: "/users/1" type: text/html updateImmediately: href: "/api/v3/users/1" method: patch title: Update admin _type: User admin: true avatar: '' createdAt: '2015-03-20T12:56:52.343Z' email: firstName: OpenProject id: 1 identityUrl: lastName: Admin login: admin name: OpenProject Admin status: active updatedAt: '2018-05-29T13:57:44.662Z' container: _links: addAttachment: href: "/api/v3/meetings/72/attachments" method: post attachments: href: "/api/v3/meetings/72/attachments" project: href: "/api/v3/projects/12" title: Demo project self: href: "/api/v3/meetings/72" _type: Meeting id: 72 title: meeting _links: author: href: "/api/v3/users/1" title: OpenProject Admin container: href: "/api/v3/meetings/72" title: meeting delete: href: "/api/v3/attachments/376" method: delete downloadLocation: href: "/api/v3/attachments/376/content" self: href: "/api/v3/attachments/376" title: 200.gif _type: Attachment contentType: image/gif createdAt: '2018-06-01T07:24:19.896Z' description: format: plain html: '' raw: '' digest: algorithm: md5 hash: 7ac9c97ef73d47127f590788b84c0c1c fileName: some.gif fileSize: 3521772 id: 376 description: OK headers: {} '400': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidRequestBody message: The request could not be parsed as JSON. description: |- Returned if the client sends a not understandable request. Reasons include: * Omitting one of the required parts (metadata and file) * sending unparsable JSON in the metadata part headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to delete this attachment. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit meetings *Note that you will only receive this error, if you are at least allowed to see the meeting* headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the meeting does not exist or the client does not have sufficient permissions to see it. **Required permission:** view meetings *Note: A client without sufficient permissions shall not be able to test for the existence of a meeting That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: File is too large (maximum size is 5242880 Bytes). description: |- Returned if the client tries to send an invalid attachment. Reasons are: * Omitting the file name (`fileName` property of metadata part) * Sending a file that is too large headers: {} tags: - Attachments description: Adds an attachment with the meeting as its container. operationId: Add_attachment_to_meeting summary: Add attachment to meeting "/api/v3/memberships": get: summary: List memberships operationId: list_memberships tags: - Memberships description: |- Returns a collection of memberships. The client can choose to filter the memberships similar to how work packages are filtered. In addition to the provided filters, the server will reduce the result set to only contain memberships, for which the requesting client has sufficient permissions (*view_members*, *manage_members*). parameters: - name: filters in: query required: false schema: type: string description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: + any_name_attribute: filters memberships based on the name of the principal. All possible name variants (and also email and login) are searched. + blocked: reduces the result set to all memberships that are temporarily blocked or that are not blocked temporarily. + group: filters memberships based on the name of a group. The group however is not the principal used for filtering. Rather, the memberships of the group are used as the filter values. + name: filters memberships based on the name of the principal. Note that only the name is used which depends on a setting in the OpenProject instance. + principal: filters memberships based on the id of the principal. + project: filters memberships based on the id of the project. + role: filters memberships based on the id of any role assigned to the membership. + status: filters memberships based on the status of the principal. + created_at: filters memberships based on the time the membership was created. + updated_at: filters memberships based on the time the membership was updated last. examples: name-filter: summary: Filtering on the name of the principal value: '[{ "name": { "operator": "=", "values": ["A User"] }" }]' global-memberships: summary: Get memberships for global roles value: '[{ "project": { "operator": "!*", "values": null }" }]' - name: sortBy in: query required: false schema: default: '[["id", "asc"]]' type: string description: |- JSON specifying sort criteria. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are: + id: Sort by primary key + name: Sort by the name of the principal. Note that this depends on the setting for how the name is to be displayed at least for users. + email: Sort by the email address of the principal. Groups and principal users, which do not have an email, are sorted last. + status: Sort by the status of the principal. Groups and principal users, which do not have a status, are sorted together with the active users. + created_at: Sort by membership creation datetime + updated_at: Sort by the time the membership was updated last example: '[["id", "asc"]]' responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/MembershipCollectionModel" examples: simple membership collection: "$ref": "#/components/examples/MembershipSimpleCollectionResponse" '400': "$ref": "#/components/responses/InvalidQuery" '403': description: Returned if the client is not logged in and login is required. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to view this resource. post: summary: Create a membership operationId: create_membership tags: - Memberships description: |- Creates a new membership applying the attributes provided in the body. You can use the form and schema to retrieve the valid attribute values and by that be guided towards successful creation. By providing a `notificationMessage` within the `_meta` block of the payload, the client can include a customized message to the user of the newly created membership. In case of a group, the message will be sent to every user belonging to the group. By including `{ "sendNotifications": false }` within the `_meta` block of the payload, no notifications is send out at all. requestBody: content: application/json: schema: "$ref": "#/components/schemas/MembershipWriteModel" examples: global role: "$ref": "#/components/examples/MembershipCreateRequestGlobalRole" no notification: "$ref": "#/components/examples/MembershipCreateRequestNoNotification" custom message: "$ref": "#/components/examples/MembershipCreateRequestCustomMessage" responses: '201': description: Created content: application/hal+json: schema: "$ref": "#/components/schemas/MembershipReadModel" examples: simple membership: "$ref": "#/components/examples/MembershipSimpleResponse" '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** Manage members '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _embedded: details: attribute: project _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Project can't be blank. description: |- Returned if: - a constraint for a property was violated (`PropertyConstraintViolation`) "/api/v3/memberships/available_projects": get: summary: Available projects for memberships operationId: get_memberships_available_projects tags: - Memberships description: |- Gets a list of projects in which a membership can be created in. The list contains all projects in which the user issuing the request has the manage members permissions. responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/ProjectCollectionModel" examples: simple project collection: "$ref": "#/components/examples/ProjectCollection" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** manage members "/api/v3/memberships/form": post: summary: Form create membership operationId: form_create_membership tags: - Memberships description: |- Requests and validates the creation form for memberships. The request payload, if sent, is validated. The form endpoint itself does not create a membership. requestBody: content: application/json: schema: "$ref": "#/components/schemas/MembershipWriteModel" examples: global role: "$ref": "#/components/examples/MembershipCreateRequestGlobalRole" no notification: "$ref": "#/components/examples/MembershipCreateRequestNoNotification" custom message: "$ref": "#/components/examples/MembershipCreateRequestCustomMessage" responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/MembershipFormModel" examples: form: "$ref": "#/components/examples/MembershipFormResponse" '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** manage memberships in any project '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" "/api/v3/memberships/schema": get: summary: Schema membership operationId: get_membership_schema tags: - Memberships description: Retrieves the schema for the membership resource object. responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/MembershipSchemaModel" examples: schema: "$ref": "#/components/examples/MembershipSchemaResponse" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions to see the schema. **Required permission:** manage members or view memberships on any project "/api/v3/memberships/{id}": delete: summary: Delete membership operationId: delete_membership tags: - Memberships description: Deletes the membership. parameters: - name: id description: Membership id in: path required: true example: 1 schema: type: integer responses: '204': description: Returned if the membership was successfully deleted '403': description: |- Returned if the client does not have sufficient permissions. **Required permission:** manage members content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the membership does not exist or the client does not have sufficient permissions to see it. **Required permission:** view members *Note: A client without sufficient permissions shall not be able to test for the existence of a version. That's why a 404 is returned here, even if a 403 might be more appropriate.* '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" get: summary: Get a membership operationId: get_membership description: Retrieves a membership resource identified by the given id. tags: - Memberships parameters: - name: id description: Membership id in: path required: true example: 1 schema: type: integer responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/MembershipReadModel" examples: simple membership: "$ref": "#/components/examples/MembershipSimpleResponse" '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the membership does not exist or the client does not have sufficient permissions to see it. **Required permission:** view members **or** manage members *Note: A client without sufficient permissions shall not be able to test for the existence of a membership. That's why a 404 is returned here, even if a 403 might be more appropriate.* patch: summary: Update membership operationId: update_membership description: |- Updates the given membership by applying the attributes provided in the body. By providing a `notificationMessage` within the `_meta` block of the payload, the client can include a customized message to the user of the updated membership. In case of a group, the message will be sent to every user belonging to the group. By including `{ "sendNotifications": false }` within the `_meta` block of the payload, no notifications is send out at all. tags: - Memberships parameters: - name: id description: Membership id in: path required: true example: 1 schema: type: integer requestBody: content: application/json: schema: "$ref": "#/components/schemas/MembershipWriteModel" examples: add roles: "$ref": "#/components/examples/MembershipUpdateAdditionalRoles" responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/MembershipReadModel" examples: simple membership: "$ref": "#/components/examples/MembershipSimpleResponse" '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** Manage members in the membership's project. headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the membership does not exist or the client does not have sufficient permissions to see it. **Required permission:** view member *Note: A client without sufficient permissions shall not be able to test for the existence of a version. That's why a 404 is returned here, even if a 403 might be more appropriate.* '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _embedded: details: attribute: roles _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Roles has an unassignable role. description: |- Returned if: * a constraint for a property was violated (`PropertyConstraintViolation`) "/api/v3/memberships/{id}/form": post: summary: Form update membership operationId: form_update_membership tags: - Memberships description: |- Requests and validates the update form for a membership identified by the given id. The request payload, if sent, is validated. The form endpoint itself does not change the membership. parameters: - name: id description: Membership id in: path required: true example: 1 schema: type: integer requestBody: content: application/json: schema: "$ref": "#/components/schemas/MembershipWriteModel" examples: no notification: "$ref": "#/components/examples/MembershipCreateRequestNoNotification" custom message: "$ref": "#/components/examples/MembershipCreateRequestCustomMessage" responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/MembershipReadModel" examples: simple membership: "$ref": "#/components/examples/MembershipSimpleResponse" '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** manage versions in the version's project '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" "/api/v3/my_preferences": get: responses: '200': content: application/hal+json: examples: response: value: _links: self: href: "/api/v3/my_preferences" user: href: "/api/v3/users/1" title: John Sheppard updateImmediately: href: "/api/v3/users/3/preferences" method: patch _type: UserPreferences commentSortDescending: true disableKeyboardShortcuts: false timeZone: Europe/Berlin warnOnLeavingUnsaved: true notifications: watched: false involved: true mentioned: false shared: true newsAdded: false, newsCommented: false documentAdded: false forumMessages: false wikiPageAdded: false wikiPageUpdated: false membershipAdded: false membershipUpdated: false workPackageCommented: false workPackageProcessed: false workPackagePrioritized: false workPackageScheduled: false _links: project: href: schema: "$ref": "#/components/schemas/UserPreferencesModel" description: OK headers: {} '401': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:Unauthenticated message: You need to be authenticated to access this resource. description: Returned if no user is currently authenticated headers: {} tags: - UserPreferences description: '' operationId: Show_my_preferences summary: Show my preferences patch: responses: '200': content: application/hal+json: examples: response: value: _links: self: href: "/api/v3/my_preferences" user: href: "/api/v3/users/1" title: John Sheppard updateImmediately: href: "/api/v3/users/3/preferences" method: patch _type: UserPreferences commentSortDescending: true disableKeyboardShortcuts: false timeZone: Europe/Berlin warnOnLeavingUnsaved: true notifications: watched: false involved: true mentioned: false shared: true newsAdded: false, newsCommented: false documentAdded: false forumMessages: false wikiPageAdded: false wikiPageUpdated: false membershipAdded: false membershipUpdated: false workPackageCommented: false workPackageProcessed: false workPackagePrioritized: false workPackageScheduled: false _links: project: href: schema: "$ref": "#/components/schemas/UserPreferencesModel" description: OK headers: {} '400': "$ref": "#/components/responses/InvalidRequestBody" '401': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:Unauthenticated message: You need to be authenticated to access this resource. description: Returned if no user is currently authenticated headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Time zone is not set to one of the allowed values. description: |- Returned if the update contains invalid properties. Reasons are: * Specifying an invalid type * Using an unknown time zone headers: {} tags: - UserPreferences description: When calling this endpoint the client provides a single object, containing the properties that it wants to change, in the body. operationId: Update_UserPreferences requestBody: content: application/json: schema: example: autoHidePopups: true timeZone: Europe/Paris properties: autoHidePopups: type: boolean timeZone: type: string type: object summary: Update my preferences "/api/v3/news": get: parameters: - description: Page number inside the requested collection. example: 25 in: query name: offset required: false schema: default: 1 type: integer - description: Number of elements to display per page. example: 25 in: query name: pageSize required: false schema: type: integer - description: |- JSON specifying sort criteria. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are: + id: Sort by primary key + created_at: Sort by news creation datetime example: '[["created_at", "asc"]]' in: query name: sortBy required: false schema: type: string - description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: + project_id: Filter news by project example: '[{ "project_id": { "operator": "=", "values": ["1", "2"] } }]' in: query name: filters required: false schema: type: string responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: author: href: "/api/v3/users/2" title: Peggie Feeney project: href: "/api/v3/projects/1" title: Seeded Project self: href: "/api/v3/news/1" title: asperiores possimus nam doloribus ab _type: News createdAt: '2015-03-20T12:57:01.209Z' description: format: markdown html: "Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui.
" raw: Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui. id: 1 summary: Celebrer spiculum colo viscus claustrum atque. Id nulla culpa sumptus. Comparo crapula depopulo demonstro. title: asperiores possimus nam doloribus ab - _links: author: href: "/api/v3/users/2" title: Peggie Feeney project: href: "/api/v3/projects/1" title: Seeded Project self: href: "/api/v3/news/2" title: terminatio tutamen. Officia adeptio sp _type: News createdAt: '2015-03-20T12:57:01.262Z' description: format: markdown html: "Amicitia alius cattus voluntarius. Virgo viduo terminatio tutamen. Officia adeptio spectaculum atavus nisi cum concido bis. Harum caecus auxilium sol theatrum eaque consequatur. Omnis aeger suus adipisci cicuta. Cur delicate alias curto cursim atqui talio fugiat.
" raw: Amicitia alius cattus voluntarius. Virgo viduo terminatio tutamen. Officia adeptio spectaculum atavus nisi cum concido bis. Harum caecus auxilium sol theatrum eaque consequatur. Omnis aeger suus adipisci cicuta. Cur delicate alias curto cursim atqui talio fugiat. id: 2 summary: Consequatur sequi surculus creo tui aequitas. title: terminatio tutamen. Officia adeptio sp _links: changeSize: href: "/api/v3/news?offset=1&pageSize=%7Bsize%7D" templated: true jumpTo: href: "/api/v3/news?offset=%7Boffset%7D&pageSize=2" templated: true nextByOffset: href: "/api/v3/news?offset=2&pageSize=2" self: href: "/api/v3/news?offset=1&pageSize=2" _type: Collection count: 2 offset: 1 pageSize: 2 total: 78 schema: "$ref": "#/components/schemas/List_of_NewsModel" description: OK headers: {} '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to view this resource. description: Returned if the client is not logged in and login is required. headers: {} tags: - News description: Lists news. The news returned depend on the provided parameters and also on the requesting user's permissions. operationId: List_News summary: List News post: summary: Create News operationId: create_news tags: - News description: |- Creates a news entry. Only administrators and users with "Manage news" permission in the given project are eligible. When calling this endpoint the client provides a single object, containing at least the properties and links that are required, in the body. requestBody: content: application/json: schema: "$ref": "#/components/schemas/NewsCreateModel" responses: '201': content: application/hal+json: schema: "$ref": "#/components/schemas/NewsModel" description: Created '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to create new news. description: |- Returned if the client does not have sufficient permissions. **Required permission:** Administrator, Manage news permission in the project '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _embedded: details: attribute: title _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Title can't be blank. description: |- Returned if: * the client tries to modify a read-only property (`PropertyIsReadOnly`) * a constraint for a property was violated (`PropertyConstraintViolation`) "/api/v3/news/{id}": get: parameters: - description: news id example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: author: _type: User... project: _type: Project... _links: author: href: "/api/v3/users/2" title: Peggie Feeney project: href: "/api/v3/projects/1" title: A project self: href: "/api/v3/news/1" title: asperiores possimus nam doloribus ab _type: News createdAt: '2015-03-20T12:57:01.601Z' description: format: markdown html: "Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui.
" raw: Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui. id: 1 summary: Celebrer spiculum colo viscus claustrum atque. Id nulla culpa sumptus. Comparo crapula depopulo demonstro. title: asperiores possimus nam doloribus ab schema: "$ref": "#/components/schemas/NewsModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the news does not exist or if the user does not have permission to view it. **Required permission** being member of the project the news belongs to headers: {} tags: - News description: '' operationId: View_news summary: View news patch: summary: Update news operationId: update_news tags: - News description: |- Updates the news's writable attributes. When calling this endpoint the client provides a single object, containing the properties and links to be updated, in the body. parameters: - description: News id example: 1 in: path name: id required: true schema: type: integer requestBody: content: application/json: schema: "$ref": "#/components/schemas/NewsCreateModel" responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/NewsModel" description: OK '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to update this news. description: |- Returned if the client does not have sufficient permissions. **Required permission:** Administrators, Manage news permission '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified news does not exist or you do not have permission to view it. description: |- Returned if the news entry does not exist or if the API user does not have the necessary permissions to update it. **Required permission:** Administrators, Manage news permission '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _embedded: details: attribute: title _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Title can't be blank. description: |- Returned if: * the client tries to modify a read-only property (`PropertyIsReadOnly`) * a constraint for a property was violated (`PropertyConstraintViolation`) delete: summary: Delete news operationId: delete_news description: Permanently deletes the specified news entry. tags: - News parameters: - description: News id example: 1 in: path name: id required: true schema: type: integer responses: '202': description: |- Returned if the news was deleted successfully. Note that the response body is empty as of now. In future versions of the API a body *might* be returned, indicating the progress of deletion. '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to delete this news entry description: |- Returned if the client does not have sufficient permissions. **Required permission:** Administrators and Manage news permission '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified news does not exist. description: Returned if the news does not exist. "/api/v3/notifications": get: summary: Get notification collection operationId: list_notifications tags: - Notifications description: |- Returns the collection of available in-app notifications. The notifications returned depend on the provided parameters and also on the requesting user's permissions. Contrary to most collections, this one also links to and embeds schemas for the `details` properties of the notifications returned. This is an optimization. Clients will receive the information necessary to display the various types of details that a notification can carry. parameters: - name: offset description: Page number inside the requested collection. in: query example: 25 required: false schema: default: 1 type: integer - name: pageSize description: Number of elements to display per page. in: query example: 25 required: false schema: default: 20 type: integer - name: sortBy in: query description: |- JSON specifying sort criteria. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are: + id: Sort by primary key + reason: Sort by notification reason + readIAN: Sort by read status example: '[["reason", "asc"]]' required: false schema: type: string - name: groupBy in: query description: |- string specifying group_by criteria. + reason: Group by notification reason + project: Sort by associated project example: reason required: false schema: type: string - name: filters in: query description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: + id: Filter by primary key + project: Filter by the project the notification was created in + readIAN: Filter by read status + reason: Filter by the reason, e.g. 'mentioned' or 'assigned' the notification was created because of + resourceId: Filter by the id of the resource the notification was created for. Ideally used together with the `resourceType` filter. + resourceType: Filter by the type of the resource the notification was created for. Ideally used together with the `resourceId` filter. example: '[{ "readIAN": { "operator": "=", "values": ["t"] } }]' required: false schema: type: string responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/NotificationCollectionModel" examples: Collection of notifications: "$ref": "#/components/examples/NotificationCollection" description: OK '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to view this resource. description: Returned if the client is not logged in and login is required. '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidQuery message: Filters Invalid filter does not exist. description: Returned if the client sends invalid request parameters e.g. filters "/api/v3/notifications/read_ian": post: summary: Read all notifications operationId: read_notifications tags: - Notifications description: |- Marks the whole notification collection as read. The collection contains only elements the authenticated user can see, and can be further reduced with filters. parameters: - name: filters in: query description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: + id: Filter by primary key + project: Filter by the project the notification was created in + reason: Filter by the reason, e.g. 'mentioned' or 'assigned' the notification was created because of + resourceId: Filter by the id of the resource the notification was created for. Ideally used together with the `resourceType` filter. + resourceType: Filter by the type of the resource the notification was created for. Ideally used together with the `resourceId` filter. example: '[{ "reason": { "operator": "=", "values": ["mentioned"] } }]' required: false schema: type: string responses: '204': description: OK '400': description: Returned if the request is not properly formatted. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidQuery message: - Filters Invalid filter does not exist. '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" "/api/v3/notifications/unread_ian": post: summary: Unread all notifications operationId: unread_notifications tags: - Notifications description: |- Marks the whole notification collection as unread. The collection contains only elements the authenticated user can see, and can be further reduced with filters. parameters: - name: filters in: query description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: + id: Filter by primary key + project: Filter by the project the notification was created in + reason: Filter by the reason, e.g. 'mentioned' or 'assigned' the notification was created because of + resourceId: Filter by the id of the resource the notification was created for. Ideally used together with the `resourceType` filter. + resourceType: Filter by the type of the resource the notification was created for. Ideally used together with the `resourceId` filter. example: '[{ "reason": { "operator": "=", "values": ["mentioned"] } }]' required: false schema: type: string responses: '204': description: OK '400': "$ref": "#/components/responses/InvalidRequestBody" '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" "/api/v3/notifications/{id}": get: summary: Get the notification operationId: view_notification tags: - Notifications description: Returns the notification identified by the notification id. parameters: - name: id in: path description: notification id example: 1 required: true schema: type: integer responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/NotificationModel" examples: Date alert notification: "$ref": "#/components/examples/DateAlertNotification" Mentioned notification: "$ref": "#/components/examples/MentionedNotification" description: OK '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the notification does not exist or if the user does not have permission to view it. **Required permission** being recipient of the notification "/api/v3/notifications/{notification_id}/details/{id}": get: summary: Get a notification detail operationId: view_notification_detail tags: - Notifications - Values::Property description: Returns an individual detail of a notification identified by the notification id and the id of the detail. parameters: - name: notification_id in: path description: notification id example: 1 required: true schema: type: integer - name: id in: path description: detail id example: 0 required: true schema: type: integer responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/ValuesPropertyModel" examples: Start date notification detail: "$ref": "#/components/examples/ValuesPropertyStartDate" Due date notification detail: "$ref": "#/components/examples/ValuesPropertyDueDate" Date notification detail for milestone work package: "$ref": "#/components/examples/ValuesPropertyDate" description: OK '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the notification or the detail of it does not exist or if the user does not have permission to view it. **Required permission** being recipient of the notification "/api/v3/notifications/{id}/read_ian": post: summary: Read notification operationId: read_notification tags: - Notifications description: Marks the given notification as read. parameters: - name: id in: path description: notification id example: '1' required: true schema: type: integer responses: '204': description: OK '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the notification does not exist or if the user does not have permission to view it. **Required permission** being recipient of the notification "/api/v3/notifications/{id}/unread_ian": post: summary: Unread notification operationId: unread_notification tags: - Notifications description: Marks the given notification as unread. parameters: - name: id in: path description: notification id example: 1 required: true schema: type: integer responses: '204': description: OK '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the notification does not exist or if the user does not have permission to view it. **Required permission** being recipient of the notification "/api/v3/oauth_applications/{id}": get: summary: Get the oauth application. operationId: get_oauth_application tags: - OAuth 2 description: |- Retrieves the OAuth 2 provider application for the given identifier. The secret will not be part of the response, instead a `confidential` flag is indicating, whether there is a secret or not. parameters: - name: id description: OAuth application id in: path required: true schema: type: integer example: 1337 responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/OAuthApplicationReadModel" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** admin '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: Returned if the application does not exist. "/api/v3/oauth_client_credentials/{id}": get: summary: Get the oauth client credentials object. operationId: get_oauth_client_credentials tags: - OAuth 2 description: |- Retrieves the OAuth 2 client credentials for the given identifier. The secret will not be part of the response, instead a `confidential` flag is indicating, whether there is a secret or not. parameters: - name: id description: OAuth Client Credentials id in: path required: true schema: type: integer example: 1337 responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/OAuthClientCredentialsReadModel" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** admin '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: Returned if the object does not exist. "/api/v3/placeholder_users": get: summary: List placehoder users operationId: list_placeholder_users tags: - Principals description: |- List all placeholder users. This can only be accessed if the requesting user has the global permission `manage_placeholder_user` or `manage_members` in any project. parameters: - name: filters description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: - name: filters placeholder users by the name. - group: filters placeholder by the group it is contained in. - status: filters placeholder by the status it has. in: query required: false schema: type: string example: '[{ "name": { "operator": "~", "values": ["Darth"] } }]' - name: select description: Comma separated list of properties to include. in: query required: false schema: type: string example: total,elements/name,elements/self,self responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/PrincipalCollectionModel" '400': description: Returned if the client sends invalid request parameters e.g. filters content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidQuery message: Filters Invalid filter does not exist. post: summary: Create placeholder user operationId: create_placeholder_user tags: - Principals description: |- Creates a new placeholder user. Only administrators and users with `manage_placeholder_user` global permission are allowed to do so. When calling this endpoint the client provides a single object, containing at least the properties and links that are required, in the body. requestBody: content: application/json: schema: "$ref": "#/components/schemas/PlaceholderUserCreateModel" responses: '201': content: application/hal+json: schema: "$ref": "#/components/schemas/PlaceholderUserModel" description: Created '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to create new placeholder users. description: |- Returned if the client does not have sufficient permissions. **Required permission:** Administrator '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _embedded: details: attribute: name _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Name has already been taken. description: |- Returned if: * a constraint for a property was violated (`PropertyConstraintViolation`) "/api/v3/placeholder_users/{id}": delete: summary: Delete placeholder user operationId: delete_placeholder_user description: Set the specified placeholder user to deleted status. tags: - Principals parameters: - description: Placeholder user id example: 1 in: path name: id required: true schema: type: integer responses: '202': description: |- Returned if the group was marked for deletion. Note that the response body is empty as of now. In future versions of the API a body *might* be returned, indicating the progress of deletion. '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to delete the account of this user. description: |- Returned if the client does not have sufficient permissions. **Required permission:** `manage_placeholder_users` '404': description: Returned if the placeholder user does not exist. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified placeholder user does not exist. get: summary: View placeholder user operationId: view_placeholder_user description: Return the placeholder user resource. tags: - Principals parameters: - description: The placeholder user id example: 1 in: path name: id required: true schema: type: string responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/PlaceholderUserModel" examples: placeholder user response: "$ref": "#/components/examples/PlaceholderUserResponse" description: OK '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified placeholder user does not exist or you do not have permission to view them. description: |- Returned if the user does not exist or if the API user does not have permission to view them. **Required permission**: `manage_placeholder_users` patch: summary: Update placeholder user operationId: update_placeholder_user tags: - Principals description: |- Updates the placeholder user's writable attributes. When calling this endpoint the client provides a single object, containing at least the properties and links that are required, in the body. parameters: - description: Placeholder user id example: 1 in: path name: id required: true schema: type: integer requestBody: content: application/json: schema: "$ref": "#/components/schemas/PlaceholderUserCreateModel" responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/PlaceholderUserModel" description: OK '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to update the account of this user. description: |- Returned if the client does not have sufficient permissions. **Required permission**: `manage_placeholder_users` '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified placeholder user does not exist. description: Returned if the placeholder user does not exist. '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _embedded: details: attribute: name _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Name has already been taken. description: |- Returned if: - the client tries to modify a read-only property (`PropertyIsReadOnly`) - a constraint for a property was violated (`PropertyConstraintViolation`) "/api/v3/portfolios": get: summary: List portfolios operationId: list_portfolios tags: - Portfolios description: Returns a collection of portfolios. 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 portfolios the client is allowed to see. parameters: - name: filters schema: type: string in: query required: false description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openportfolio.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: + active: based on the active property of the portfolio + ancestor: filters portfolios by their ancestor. A portfolio is not considered to be its own ancestor. + available_project_attributes: filters portfolios based on the activated project attributes. + created_at: based on the time the portfolio was created + favorited: based on the favorited property of the portfolio + id: based on portfolios' id. + latest_activity_at: based on the time the last activity was registered on a portfolio. + name_and_identifier: based on both the name and the identifier. + parent_id: filters portfolios by their parent. + principal: based on members of the portfolio. + project_phase_any: based on the project phases active in a portfolio. + project_status_code: based on status code of the portfolio + storage_id: filters portfolios by linked storages + storage_url: filters portfolios by linked storages identified by the host url + type_id: based on the types active in a portfolio. + user_action: based on the actions the current user has in the portfolio. + visible: based on the visibility for the user (id) provided as the filter value. This filter is useful for admins to identify the portfolios visible to a user. There might also be additional filters based on the custom fields that have been configured. Each defined lifecycle step will also define a filter in this list endpoint. Given that the elements are not static but rather dynamically created on each OpenProject instance, a list cannot be provided. Those filters follow the schema: + project_start_gate_[id]: a filter on a project phase's start gate active in a portfolio. The id is the id of the phase the gate belongs to. + project_finish_gate_[id]: a filter on a project phase's finish gate active in a portfolio. The id is the id of the phase the gate belongs to. + project_phase_[id]: a filter on a project phase active in a portfolio. The id is the id of the phase queried for. example: '[{ "ancestor": { "operator": "=", "values": ["1"] }" }]' - name: sortBy schema: type: string in: query required: false description: |- 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"]]' - name: select schema: type: string in: query required: false description: Comma separated list of properties to include. example: total,elements/identifier,elements/name responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/PortfolioCollectionModel" examples: simple portfolio collection: "$ref": "#/components/examples/PortfolioCollection" '400': description: Returned if the client sends invalid request parameters e.g. filters content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidQuery message: Filters Invalid filter does not exist. "/api/v3/portfolios/{id}": get: parameters: - description: Portfolio id example: '1' in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/PortfolioModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the portfolio does not exist or the client does not have sufficient permissions to see it. **Required permission:** any permission in the portfolio *Note: A client without sufficient permissions shall not be able to test for the existence of a portfolio. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} tags: - Portfolios description: '' operationId: View_portfolio summary: View portfolio patch: parameters: - description: Portfolio id example: '1' in: path name: id required: true schema: type: integer requestBody: content: application/json: schema: "$ref": "#/components/schemas/PortfolioModel" examples: with custom fields: "$ref": "#/components/examples/PortfolioBody" responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/PortfolioModel" examples: with custom fields: "$ref": "#/components/examples/Portfolio" description: OK headers: {} '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit project for the portfolio to be altered headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the portfolio does not exist or the client does not have sufficient permissions to see it. **Required permission:** view project *Note: A client without sufficient permissions shall not be able to test for the existence of a version. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _embedded: details: attribute: name _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Name can't be blank. description: |- Returned if: * a constraint for a property was violated (`PropertyConstraintViolation`) headers: {} tags: - Portfolios description: Updates the given portfolio by applying the attributes provided in the body. operationId: Update_Portfolio summary: Update Portfolio delete: parameters: - description: Portfolio id example: '1' in: path name: id required: true schema: type: integer responses: '204': description: |- Returned if the portfolio was successfully deleted. There is currently no endpoint to query for the actual deletion status. Such an endpoint _might_ be added in the future. headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** admin headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the portfolio does not exist or the client does not have sufficient permissions to see it. **Required permission:** any permission in the portfolio *Note: A client without sufficient permissions shall not be able to test for the existence of a version. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _embedded: details: attribute: base _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Work packages in non descendant projects reference versions of the portfolio or its descendants. description: |- Returned if the portfolio cannot be deleted. This can happen when there are still references to the portfolio in other workspaces that need to be severed at first. headers: {} tags: - Portfolios description: |- Deletes the portfolio permanently. As this is a lengthy process, the actual deletion is carried out asynchronously. So the portfolio might exist well after the request has returned successfully. To prevent unwanted changes to the portfolio scheduled for deletion, it is archived at once. operationId: Delete_Portfolio summary: Delete Portfolio "/api/v3/portfolios/{id}/form": post: parameters: - description: Portfolio id example: '1' in: path name: id required: true schema: type: integer requestBody: content: application/json: schema: type: object examples: with custom fields: "$ref": "#/components/examples/PortfolioBody" empty: description: Empty request to get the form initially in order to start the guided update of a portfolio value: {} responses: '200': description: OK headers: {} '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit workspace in the portfolio headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" tags: - Portfolios description: '' operationId: Portfolio_update_form summary: Portfolio update form "/api/v3/posts/{id}": get: parameters: - description: Post's identifier example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: project: _type: Project... _links: addAttachment: href: "/api/v3/posts/1/attachments" method: post attachments: href: "/api/v3/posts/1/attachments" project: href: "/api/v3/projects/1" title: A project with a title self: href: "/api/v3/posts/1" _type: Post id: 1 subject: A post with a subject schema: "$ref": "#/components/schemas/PostModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the post does not exist or the client does not have sufficient permissions to see it. **Required permission:** view messages in the post's project headers: {} tags: - Posts description: Retrieve an individual post as identified by the id parameter operationId: View_Post summary: View Post "/api/v3/posts/{id}/attachments": get: parameters: - description: ID of the post whose attachments will be listed example: '1' in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: author: href: "/api/v3/users/1" title: OpenProject Admin container: href: "/api/v3/posts/72" title: wiki delete: href: "/api/v3/attachments/376" method: delete downloadLocation: href: "/api/v3/attachments/376/content" self: href: "/api/v3/attachments/376" title: 200.gif _type: Attachment contentType: image/gif createdAt: '2018-06-01T07:24:19.706Z' description: format: plain html: '' raw: '' digest: algorithm: md5 hash: 7ac9c97ef73d47127f590788b84c0c1c fileName: some.gif fileSize: 3521772 id: 376 _links: self: href: "/api/v3/posts/72/attachments" _type: Collection count: 1 total: 1 schema: "$ref": "#/components/schemas/Attachments_Model" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the post does not exist or the client does not have sufficient permissions to see it. **Required permission:** view messages *Note: A client without sufficient permissions shall not be able to test for the existence of a post. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} tags: - Attachments description: '' operationId: List_attachments_by_post summary: List attachments by post post: parameters: - description: ID of the post to receive the attachment example: '1' in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: author: _links: lock: href: "/api/v3/users/1/lock" method: post title: Set lock on admin self: href: "/api/v3/users/1" title: OpenProject Admin showUser: href: "/users/1" type: text/html updateImmediately: href: "/api/v3/users/1" method: patch title: Update admin _type: User admin: true avatar: '' createdAt: '2015-03-20T12:56:52.850Z' email: firstName: OpenProject id: 1 identityUrl: lastName: Admin login: admin name: OpenProject Admin status: active updatedAt: '2018-05-29T13:57:44.604Z' container: _links: addAttachment: href: "/api/v3/posts/150/attachments" method: post attachments: href: "/api/v3/posts/150/attachments" project: href: "/api/v3/projects/12" title: Demo project self: href: "/api/v3/posts/150" _type: Post id: 150 subject: sfsdfsdfsdfsdf _links: author: href: "/api/v3/users/1" title: OpenProject Admin container: href: "/api/v3/posts/150" title: sfsdfsdfsdfsdf delete: href: "/api/v3/attachments/377" method: delete downloadLocation: href: "/api/v3/attachments/377/content" self: href: "/api/v3/attachments/377" title: 200.gif _type: Attachment contentType: image/gif createdAt: '2018-06-01T07:53:36.831Z' description: format: plain html: '' raw: '' digest: algorithm: md5 hash: 7ac9c97ef73d47127f590788b84c0c1c fileName: some.gif fileSize: 3521772 id: 377 description: OK headers: {} '400': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidRequestBody message: The request could not be parsed as JSON. description: |- Returned if the client sends a not understandable request. Reasons include: * Omitting one of the required parts (metadata and file) * sending unparsable JSON in the metadata part headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to delete this attachment. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit messages *Note that you will only receive this error, if you are at least allowed to see the wiki page* headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the post does not exist or the client does not have sufficient permissions to see it. **Required permission:** view messages *Note: A client without sufficient permissions shall not be able to test for the existence of a post. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: File is too large (maximum size is 5242880 Bytes). description: |- Returned if the client tries to send an invalid attachment. Reasons are: * Omitting the file name (`fileName` property of metadata part) * Sending a file that is too large headers: {} tags: - Attachments description: Adds an attachment with the post as its container. operationId: Add_attachment_to_post summary: Add attachment to post "/api/v3/principals": get: summary: List principals operationId: list_principals tags: - Principals description: |- List all principals. The client can choose to filter the principals similar to how work packages are filtered. In addition to the provided filters, the server will reduce the result set to only contain principals who are members in projects the client is allowed to see. parameters: - name: filters description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: - type: filters principals by their type (*User*, *Group*, *PlaceholderUser*). - member: filters principals by the projects they are members in. - name: filters principals by the user or group name. - any_name_attribute: filters principals by the user or group first- and last name, email or login. - status: filters principals by their status number (active = *1*, registered = *2*, locked = *3*, invited = *4*) in: query required: false schema: type: string example: '[{ "type": { "operator": "=", "values": ["User"] } }]' - name: select description: Comma separated list of properties to include. in: query required: false schema: type: string example: total,elements/name,elements/self,self responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/PrincipalCollectionModel" '400': description: Returned if the client sends invalid request parameters e.g. filters content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidQuery message: Filters Invalid filter does not exist. "/api/v3/priorities": get: responses: '200': content: application/hal+json: examples: simple priority collection: "$ref": "#/components/examples/PriorityCollection" schema: "$ref": "#/components/schemas/PriorityCollectionModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to see the priorities. description: |- Returned if the client does not have sufficient permissions. **Required permission:** view work package (on any project) headers: {} tags: - Priorities description: '' operationId: List_all_Priorities summary: List all Priorities "/api/v3/priorities/{id}": get: parameters: - description: Priority id example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _links: self: href: "/api/v3/priorities/1" title: Low _type: Priority id: 1 isActive: true isDefault: false name: Low position: 1 schema: "$ref": "#/components/schemas/PriorityModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to see this priority. description: |- Returned if the client does not have sufficient permissions. **Required permission:** view work package (on any project) headers: {} tags: - Priorities description: '' operationId: View_Priority summary: View Priority "/api/v3/programs": get: summary: List programs operationId: list_programs tags: - Programs description: Returns a collection of programs. 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 programs the client is allowed to see. parameters: - name: filters schema: type: string in: query required: false description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: + active: based on the active property of the program + ancestor: filters programs by their ancestor. A program is not considered to be its own ancestor. + available_project_attributes: filters programs based on the activated project attributes. + created_at: based on the time the program was created + favorited: based on the favorited property of the program + id: based on programs' id. + latest_activity_at: based on the time the last activity was registered on a program. + name_and_identifier: based on both the name and the identifier. + parent_id: filters programs by their parent. + principal: based on members of the program. + project_phase_any: based on the project phases active in a program. + project_status_code: based on status code of the program + storage_id: filters programs by linked storages + storage_url: filters programs by linked storages identified by the host url + type_id: based on the types active in a program. + user_action: based on the actions the current user has in the program. + visible: based on the visibility for the user (id) provided as the filter value. This filter is useful for admins to identify the programs visible to a user. There might also be additional filters based on the custom fields that have been configured. Each defined lifecycle step will also define a filter in this list endpoint. Given that the elements are not static but rather dynamically created on each OpenProject instance, a list cannot be provided. Those filters follow the schema: + project_start_gate_[id]: a filter on a project phase's start gate active in a program. The id is the id of the phase the gate belongs to. + project_finish_gate_[id]: a filter on a project phase's finish gate active in a program. The id is the id of the phase the gate belongs to. + project_phase_[id]: a filter on a project phase active in a program. The id is the id of the phase queried for. example: '[{ "ancestor": { "operator": "=", "values": ["1"] }" }]' - name: sortBy schema: type: string in: query required: false description: |- 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"]]' - name: select schema: type: string in: query required: false description: Comma separated list of properties to include. example: total,elements/identifier,elements/name responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/ProgramCollectionModel" examples: simple program collection: "$ref": "#/components/examples/ProgramCollection" '400': description: Returned if the client sends invalid request parameters e.g. filters content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidQuery message: Filters Invalid filter does not exist. "/api/v3/programs/{id}": get: parameters: - description: Program id example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/ProgramModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the program does not exist or the client does not have sufficient permissions to see it. **Required permission:** any permission in the program *Note: A client without sufficient permissions shall not be able to test for the existence of a program. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} tags: - Programs description: '' operationId: View_program summary: View program patch: parameters: - description: Program id example: 1 in: path name: id required: true schema: type: integer requestBody: content: application/json: schema: "$ref": "#/components/schemas/ProgramModel" examples: with custom fields: "$ref": "#/components/examples/ProgramBody" responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/ProgramModel" examples: with custom fields: "$ref": "#/components/examples/Program" description: OK headers: {} '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit project for the program to be altered headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the program does not exist or the client does not have sufficient permissions to see it. **Required permission:** view project *Note: A client without sufficient permissions shall not be able to test for the existence of a version. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _embedded: details: attribute: name _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Name can't be blank. description: |- Returned if: * a constraint for a property was violated (`PropertyConstraintViolation`) headers: {} tags: - Programs description: Updates the given program by applying the attributes provided in the body. operationId: Update_Program summary: Update Program delete: parameters: - description: Program id example: 1 in: path name: id required: true schema: type: integer responses: '204': description: |- Returned if the program was successfully deleted. There is currently no endpoint to query for the actual deletion status. Such an endpoint _might_ be added in the future. headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** admin headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the program does not exist or the client does not have sufficient permissions to see it. **Required permission:** any permission in the program *Note: A client without sufficient permissions shall not be able to test for the existence of a version. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _embedded: details: attribute: base _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Work packages in non descendant projects reference versions of the program or its descendants. description: |- Returned if the program cannot be deleted. This can happen when there are still references to the program in other workspaces that need to be severed at first. headers: {} tags: - Programs description: |- Deletes the program permanently. As this is a lengthy process, the actual deletion is carried out asynchronously. So the program might exist well after the request has returned successfully. To prevent unwanted changes to the program scheduled for deletion, it is archived at once. operationId: Delete_Program summary: Delete Program "/api/v3/programs/{id}/form": post: parameters: - description: Program id example: 1 in: path name: id required: true schema: type: integer requestBody: content: application/json: schema: type: object examples: with custom fields: "$ref": "#/components/examples/ProgramBody" empty: description: Empty request to get the form initially in order to start the guided update of a program value: {} responses: '200': description: OK headers: {} '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit workspace in the program headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" tags: - Programs description: '' operationId: Program_update_form summary: Program update form "/api/v3/project_phases/{id}": get: summary: Get a project phase operationId: get_project_phase tags: - Project Phases description: |- Gets a project phase resource. This resource contains an instance of a ProjectPhaseDefinition within a project which can then have project specific dates. parameters: - name: id description: Project phase id in: path required: true schema: type: integer example: 1337 responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/ProjectPhaseModel" '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the project phase does not exist or the client does not have sufficient permissions to see it. **Required permission:** view project phase "/api/v3/project_phase_definitions": get: summary: List project phase definitions operationId: list_project_phase_definitions tags: - Project Phase Definitions description: |- Returns a collection of all project phase definitions. The result set is always limited to only contain project phase definitions the client is allowed to see. responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/ProjectPhaseDefinitionCollectionModel" '400': description: Returned if the client sends invalid request parameters e.g. filters content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidQuery message: Filters Invalid filter does not exist. "/api/v3/project_phase_definitions/{id}": get: summary: Get a project phase definition operationId: get_project_phase_definition tags: - Project Phase Definitions description: "Gets a project phase definition resource. This resource is part of the abstract definition of a project life\ncycle shaping the phases of a project. " parameters: - name: id description: Project phase definition id in: path required: true schema: type: integer example: 1337 responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/ProjectPhaseDefinitionModel" '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the user does not have permission to see project phases. **Required permission:** view project phase OR select project phase "/api/v3/project_storages": get: summary: Gets a list of project storages operationId: list_project_storages tags: - File Links description: Gets a collection of all project storages that meet the provided filters and the user has permission to see them. parameters: - name: filters in: query required: false schema: default: "[]" type: string description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: - project_id - storage_id - storage_url example: '[{ "project_id": { "operator": "=", "values": ["42"] }}, { "storage_id": { "operator": "=", "values": ["1337"] }}]' responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/ProjectStorageCollectionModel" '400': description: Returned if any given filter is invalid. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidQuery message: The query parameter 'filters' is missing or malformed. "/api/v3/project_storages/{id}": get: summary: Gets a project storage operationId: get_project_storage tags: - File Links description: |- Gets a project storage resource. This resource contains all data that is applicable on the relation between a storage and a project. parameters: - name: id description: Project storage id in: path required: true schema: type: integer example: 1337 responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/ProjectStorageModel" '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the project storage does not exist or the client does not have sufficient permissions to see it. **Required permission:** view file links "/api/v3/project_storages/{id}/open": get: summary: Open the project storage operationId: open_project_storage tags: - File Links description: |- Gets a redirect to the location of the project storage's remote origin. If the project storage has a project folder, it is opened at this location. If not, the storage root is opened. parameters: - name: id description: Project storage id in: path required: true schema: type: integer example: 1337 responses: '303': description: Redirect headers: Location: schema: type: string format: uri '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:Unauthenticated message: You are not authorized to access this resource. description: Returned if the authorization token of the current user grants no permission to access the remote storage. '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the project storage does not exist or the client does not have sufficient permissions to see it. **Required permission:** view file links "/api/v3/projects": get: summary: List projects operationId: list_projects tags: - Projects description: |- 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. Prior to OpenProject 17.0, only projects existed and the concept of workspaces wasn't implemented in the API. With 17.0 the other workspace types (program and portfolio) exist and will be returned alongside projects by this endpoint. This might surprise typed clients. parameters: - name: filters schema: type: string in: query required: false description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/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 its own ancestor. + available_project_attributes: filters projects based on the activated project project attributes. + created_at: based on the time the project was created + favorited: based on the favorited property of the project + id: based on projects' id. + 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. + project_phase_any: based on the project phases active in a project. + project_status_code: based on status code 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. + 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. Each defined lifecycle step will also define a filter in this list endpoint. Given that the elements are not static but rather dynamically created on each OpenProject instance, a list cannot be provided. Those filters follow the schema: + project_start_gate_[id]: a filter on a project phase's start gate active in a project. The id is the id of the phase the gate belongs to. + project_finish_gate_[id]: a filter on a project phase's finish gate active in a project. The id is the id of the phase the gate belongs to. + project_phase_[id]: a filter on a project phase active in a project. The id is the id of the phase queried for. example: '[{ "ancestor": { "operator": "=", "values": ["1"] }" }]' - name: sortBy schema: type: string in: query required: false description: |- 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"]]' - name: select schema: type: string in: query required: false description: Comma separated list of properties to include. example: total,elements/identifier,elements/name responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/ProjectCollectionModel" examples: simple project collection: "$ref": "#/components/examples/ProjectCollection" '400': description: Returned if the client sends invalid request parameters e.g. filters content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidQuery message: Filters Invalid filter does not exist. post: summary: Create project operationId: create_project tags: - Projects description: |- Creates a new project, applying the attributes provided in the body. You can use the form and schema to be retrieve the valid attribute values and by that be guided towards successful creation. requestBody: content: application/json: schema: "$ref": "#/components/schemas/ProjectModel" examples: with custom fields: "$ref": "#/components/examples/ProjectBody" responses: '201': description: Created content: application/hal+json: schema: "$ref": "#/components/schemas/ProjectModel" examples: with custom fields: "$ref": "#/components/examples/Project" '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** add project which is a global permission '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _embedded: details: attribute: name _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Name can't be blank. description: |- Returned if: * a constraint for a property was violated (`PropertyConstraintViolation`) "/api/v3/projects/form": post: requestBody: content: application/json: schema: type: object examples: with custom fields: "$ref": "#/components/examples/ProjectBody" empty: description: Empty request to get the form initially in order to start the guided creation of a project value: {} responses: '200': content: application/hal+json: schema: type: object examples: response: value: _embedded: payload: _links: customField26: href: title: customField31: href: title: parent: href: status: href: active: true customField30: customField34: customField35: Text custom field value customField41: format: markdown html: '' raw: '' customField42: description: format: markdown html: '' raw: identifier: new_project_identifier name: New project name public: false statusExplanation: format: markdown html: "" raw: schema: _dependencies: [] _links: {} _type: Schema active: hasDefault: true name: Active required: true type: Boolean writable: true createdAt: hasDefault: false name: Created on required: true type: DateTime writable: false customField26: _links: allowedValues: href: "/api/v3/principals?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22%21%22%2C%22values%22%3A%5B%220%22%2C%223%22%5D%7D%7D%2C%7B%22type%22%3A%7B%22operator%22%3A%22%3D%22%2C%22values%22%3A%5B%22User%22%5D%7D%7D%2C%7B%22member%22%3A%7B%22operator%22%3A%22%3D%22%2C%22values%22%3A%5B%22%22%5D%7D%7D%5D&pageSize=0" hasDefault: false location: _links name: Project user required: false type: User visibility: default writable: true customField30: hasDefault: false name: some project cf required: false type: Integer visibility: default writable: true customField31: _embedded: allowedValues: - _links: self: href: "/api/v3/custom_options/513" title: abc _type: CustomOption id: 513 value: abc - _links: self: href: "/api/v3/custom_options/514" title: def _type: CustomOption id: 514 value: def - _links: self: href: "/api/v3/custom_options/515" title: ghi _type: CustomOption id: 515 value: ghi _links: allowedValues: - href: "/api/v3/custom_options/513" title: abc - href: "/api/v3/custom_options/514" title: def - href: "/api/v3/custom_options/515" title: ghi hasDefault: false location: _links name: list project cf required: false type: CustomOption visibility: default writable: true customField34: hasDefault: false name: Bool Project CF required: false type: Boolean visibility: default writable: true customField35: hasDefault: false name: text project cf required: true type: String visibility: default writable: true customField41: hasDefault: false name: Long text project cf required: false type: Formattable visibility: default writable: true customField42: hasDefault: false name: Date project cf required: false type: Date visibility: default writable: true description: hasDefault: false name: Description required: false type: Formattable writable: true id: hasDefault: false name: ID required: true type: Integer writable: false identifier: hasDefault: false maxLength: 100 minLength: 1 name: Identifier required: true type: String writable: true name: hasDefault: false maxLength: 255 minLength: 1 name: Name required: true type: String writable: true parent: _links: allowedValues: href: "/api/v3/projects/available_parent_projects" hasDefault: false location: _links name: Subproject of required: false type: Project visibility: default writable: true public: hasDefault: false name: Public required: true type: Boolean writable: true status: _links: allowedValues: - href: "/api/v3/project_statuses/on_track" title: On track - href: "/api/v3/project_statuses/at_risk" title: At risk - href: "/api/v3/project_statuses/off_track" title: Off track hasDefault: true name: Status required: false type: ProjectStatus writable: true statusExplanation: hasDefault: false name: Status explanation required: false type: Formattable writable: true updatedAt: hasDefault: false name: Updated on required: true type: DateTime writable: false validationErrors: identifier: _embedded: details: attribute: identifier _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Identifier has already been taken. _links: self: href: "/api/v3/projects/form" method: post validate: href: "/api/v3/projects/form" method: post _type: Form description: OK headers: {} '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** add project which is a global permission headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" tags: - Projects description: '' operationId: Project_create_form summary: Project create form "/api/v3/projects/schema": get: responses: '200': content: application/hal+json: examples: response: value: _dependencies: [] _attributeGroups: - _type: ProjectFormCustomFieldSection name: Project Details attributes: - customField30 - customField34 - _type: ProjectFormCustomFieldSection name: Budget Information attributes: - customField31 - customField32 - customField35 _links: self: href: "/api/v3/projects/schema" _type: Schema active: hasDefault: true name: Active required: true type: Boolean writable: true createdAt: hasDefault: false name: Created on required: true type: DateTime writable: false customField30: hasDefault: false name: Integer project custom field required: false type: Integer visibility: default writable: true customField31: _links: {} hasDefault: false location: _links name: List project custom field required: false type: CustomOption visibility: default writable: true customField32: _links: {} hasDefault: false location: _links name: Version project custom field required: false type: Version visibility: default writable: true customField34: hasDefault: false name: Boolean project custom field required: false type: Boolean visibility: default writable: true customField35: hasDefault: false name: Text project custom field required: true type: String visibility: default writable: true description: hasDefault: false name: Description required: false type: Formattable writable: true id: hasDefault: false name: ID required: true type: Integer writable: false identifier: hasDefault: false maxLength: 100 minLength: 1 name: Identifier required: true type: String writable: true name: hasDefault: false maxLength: 255 minLength: 1 name: Name required: true type: String writable: true parent: _links: {} hasDefault: false location: _links name: Subproject of required: false type: Project visibility: default writable: true public: hasDefault: false name: Public required: true type: Boolean writable: true status: _links: allowedValues: - href: "/api/v3/project_statuses/on_track" title: On track - href: "/api/v3/project_statuses/at_risk" title: At risk - href: "/api/v3/project_statuses/off_track" title: Off track hasDefault: true name: Status required: false type: ProjectStatus writable: true statusExplanation: hasDefault: false name: Status explanation required: false type: Formattable writable: true updatedAt: hasDefault: false name: Updated on required: true type: DateTime writable: false schema: "$ref": "#/components/schemas/Workspaces_schemaModel" description: OK headers: {} tags: - Projects description: |- Provides the schema describing a project resource. This endpoint is deprecated. As projects are workspaces, an equivalent schema can be found fetching `/api/v3/workspaces/schema`. operationId: View_project_schema summary: View project schema "/api/v3/projects/{id}": delete: parameters: - description: Project id example: 1 in: path name: id required: true schema: type: integer responses: '204': description: |- Returned if the project was successfully deleted. There is currently no endpoint to query for the actual deletion status. Such an endpoint _might_ be added in the future. headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** admin headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the project does not exist or the client does not have sufficient permissions to see it. **Required permission:** any permission in the project *Note: A client without sufficient permissions shall not be able to test for the existence of a version. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _embedded: details: attribute: base _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Work packages in non descendant projects reference versions of the project or its descendants. description: |- Returned if the project cannot be deleted. This can happen when there are still references to the project in other workspaces that need to be severed at first. headers: {} tags: - Projects description: |- Deletes the project permanently. As this is a lengthy process, the actual deletion is carried out asynchronously. So the project might exist well after the request has returned successfully. To prevent unwanted changes to the project scheduled for deletion, it is archived at once. operationId: Delete_Project summary: Delete Project get: parameters: - description: Project id example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: with custom fields: "$ref": "#/components/examples/Project" schema: "$ref": "#/components/schemas/ProjectModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the project does not exist or the client does not have sufficient permissions to see it. **Required permission:** view project *Note: A client without sufficient permissions shall not be able to test for the existence of a project. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} tags: - Projects description: '' operationId: View_project summary: View project patch: parameters: - description: Project id example: 1 in: path name: id required: true schema: type: integer requestBody: content: application/json: schema: "$ref": "#/components/schemas/ProjectModel" examples: with custom fields: "$ref": "#/components/examples/ProjectBody" responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/ProjectModel" examples: with custom fields: "$ref": "#/components/examples/Project" description: OK headers: {} '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit project for the project to be altered headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the project does not exist or the client does not have sufficient permissions to see it. **Required permission:** view project *Note: A client without sufficient permissions shall not be able to test for the existence of a version. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _embedded: details: attribute: name _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Name can't be blank. description: |- Returned if: * a constraint for a property was violated (`PropertyConstraintViolation`) headers: {} tags: - Projects description: Updates the given project by applying the attributes provided in the body. operationId: Update_Project summary: Update Project "/api/v3/projects/{id}/form": post: parameters: - description: Project id example: 1 in: path name: id required: true schema: type: integer requestBody: content: application/json: schema: type: object examples: with custom fields: "$ref": "#/components/examples/ProjectBody" empty: description: Empty request to get the form initially in order to start the guided update of a project value: {} responses: '200': description: OK headers: {} '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit projects in the project headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" tags: - Projects description: '' operationId: Project_update_form summary: Project update form "/api/v3/projects/{id}/copy": post: parameters: - description: Project id example: '1' in: path name: id required: true schema: type: integer responses: '302': description: Returned if the request is successful. It will redirect to the job statuses API with the backend job that got created. You can query that endpoint to check the status of the copy, and eventually get the created project. headers: {} '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** copy projects in the source project headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _embedded: details: attribute: name _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Name can't be blank. description: |- Returned if: * a constraint for a property was violated (`PropertyConstraintViolation`) headers: {} tags: - Projects description: '' operationId: Create_project_copy summary: Create project copy "/api/v3/projects/{id}/copy/form": post: parameters: - description: Project id example: '1' in: path name: id required: true schema: type: integer responses: '200': description: OK headers: {} '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** copy projects in the source project headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" tags: - Projects description: '' operationId: Project_copy_form summary: Project copy form "/api/v3/project_statuses/{id}": get: parameters: - description: Project status id example: on_track in: path name: id required: true schema: type: string responses: '200': content: application/hal+json: examples: response: value: _links: self: href: "/api/v3/project_statuses/on_track" _type: ProjectStatus id: on_track name: On track schema: "$ref": "#/components/schemas/View_project_statusModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: Returned if the project status does not exist. headers: {} tags: - Projects description: '' operationId: View_project_status summary: View project status "/api/v3/projects/available_parent_projects": get: parameters: - description: JSON specifying filter conditions. example: '[{ "ancestor": { "operator": "=", "values": [''1''] }" }]' in: query name: filters required: false schema: type: string - description: The id or identifier of the project the parent candidate is determined for example: '123' in: query name: of required: false schema: type: string - description: |- The workspace type of the new project the parent candidate is determined for. Ignored when `of` parameter is provided. Note that while 'portfolio' is supported as a type (since it is a type of Workspace), the endpoint will currently always return an empty resultset as portfolios cannot have parents. example: program in: query name: workspace_type required: false schema: type: string enum: - project - program - portfolio - description: |- JSON specifying sort criteria. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint and allows all the filters and sortBy supported by the project list endpoint. example: '[["id", "asc"]]' in: query name: sortBy required: false schema: type: string responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: categories: href: "/api/v3/projects/6/categories" createWorkPackage: href: "/api/v3/projects/6/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/projects/6/work_packages" method: post self: href: "/api/v3/projects/6" title: A project status: href: "/api/v3/project_statuses/on_track" title: On track versions: href: "/api/v3/projects/6/versions" _type: Project active: true createdAt: '2015-07-06T13:28:14+00:00' description: format: markdown html: "Lorem ipsum dolor sit amet
" raw: Lorem **ipsum** dolor sit amet id: 6 identifier: a_project name: A project public: false statusExplanation: format: markdown html: "Everything fine
" raw: Everything **fine** type: Customer Project updatedAt: '2015-10-01T09:55:02+00:00' - _links: categories: href: "/api/v3/projects/14/categories" createWorkPackage: href: "/api/v3/projects/14/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/projects/14/work_packages" method: post self: href: "/api/v3/projects/14" title: Another project status: href: "/api/v3/project_statuses/on_track" title: On track versions: href: "/api/v3/projects/14/versions" _type: Project active: true createdAt: '2016-02-29T12:50:20+00:00' description: format: markdown html: '' raw: '' id: 14 identifier: another_project name: Another project public: true statusExplanation: format: markdown html: "Everything super fine
" raw: Everything super **fine** type: updatedAt: '2016-02-29T12:50:20+00:00' _links: self: href: "/api/v3/projects/available_parent_projects?of=123" _type: Collection count: 2 total: 2 schema: "$ref": "#/components/schemas/List_available_parent_project_candidatesModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit project in a project or the global add project permission headers: {} tags: - Projects description: |- Lists projects which can become parent to another project. Only sound candidates are returned. For instance a project cannot become parent of itself or its children. To specify the project for which a parent is queried for, the `of` parameter can be provided. If no `of` parameter is provided, a new project is assumed. Then, the check for the hierarchy is omitted as a new project cannot be part of a hierarchy yet, instead `workspace_type` parameter can be passed defining it for new project. Candidates can be filtered. Most commonly one will want to filter by name or identifier. You can do this through the `filters` parameter which works just like the work package index. For instance to find all parent candidates with "rollout" in their name: ``` ?filters=[{"name_and_identifier":{"operator":"~","values":["rollout"]}}] ``` operationId: List_available_parent_project_candidates summary: List available parent project candidates "/api/v3/projects/{id}/budgets": get: parameters: - description: Project id example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: self: href: "/api/v3/budgets/1" title: Q3 2015 _type: Budget id: 1 subject: Q3 2015 - _links: self: href: "/api/v3/budgets/2" title: Q4 2015 _type: Budget id: 2 subject: Q4 2015 _links: self: href: "/api/v3/projects/1/budgets" _type: Collection count: 2 total: 2 schema: "$ref": "#/components/schemas/Budgets_by_ProjectModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to see the budgets of this project. description: |- Returned if the client does not have sufficient permissions to see the budgets of the given project. **Required permission:** view work packages **or** view budgets *Note that you will only receive this error, if you are at least allowed to see the corresponding project.* headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified project does not exist. description: |- Returned if either: * the project does not exist * the client does not have sufficient permissions to see the project * the costs module is not enabled on the given project **Required permission:** view project *Note: A client without sufficient permissions shall not be able to test for the existence of a project. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} tags: - Budgets description: '' operationId: view_Budgets_of_a_Project summary: view Budgets of a Project "/api/v3/projects/{id}/queries/default": get: summary: View default query for project operationId: View_default_query_for_project tags: - Queries description: |- Same as [viewing an existing, persisted Query](https://www.openproject.org/docs/api/endpoints/queries/#list-queries) in its response, this resource returns an unpersisted query and by that allows to get the default query configuration. The client may also provide additional parameters which will modify the default query. The query will already be scoped to the project. This endpoint is deprecated and replaced by [`/api/v3/workspaces/{id}/queries/default`](https://www.openproject.org/docs/api/endpoints/queries/#view-default-query-for-workspace) parameters: - description: Id of the project the default query is requested for example: 1 in: path name: id required: true schema: type: integer - name: filters description: |- JSON specifying filter conditions. The filters provided as parameters are not applied to the query but are instead used to override the query's persisted filters. All filters also accepted by the work packages endpoint are accepted. If no filter is to be applied, the client should send an empty array (`[]`). example: '[{ "assignee": { "operator": "=", "values": ["1", "5"] }" }]' in: query required: false schema: default: '[{ "status_id": { "operator": "o", "values": null }}]' type: string - name: offset description: Page number inside the queries' result collection of work packages. example: 25 in: query required: false schema: default: 1 type: integer - name: pageSize description: Number of elements to display per page for the queries' result collection of work packages. example: 25 in: query required: false schema: type: integer - name: sortBy description: JSON specifying sort criteria. The sort criteria is applied to the query's result collection of work packages overriding the query's persisted sort criteria. example: '[["status", "asc"]]' in: query required: false schema: default: '[["id", "asc"]]' type: string - name: groupBy description: The column to group by. The grouping criteria is applied to the to the query's result collection of work packages overriding the query's persisted group criteria. example: status in: query required: false schema: type: string - name: showSums description: Indicates whether properties should be summed up if they support it. The showSums parameter is applied to the to the query's result collection of work packages overriding the query's persisted sums property. example: true in: query required: false schema: default: false type: boolean - name: timestamps description: 'Indicates the timestamps to filter by when showing changed attributes on work packages. Values can be either ISO8601 dates, ISO8601 durations and the following relative date keywords: "oneDayAgo@HH:MM+HH:MM", "lastWorkingDay@HH:MM+HH:MM", "oneWeekAgo@HH:MM+HH:MM", "oneMonthAgo@HH:MM+HH:MM". The first "HH:MM" part represents the zero paded hours and minutes. The last "+HH:MM" part represents the timezone offset from UTC associated with the time. Values older than 1 day are accepted only with valid Enterprise Token available. ' example: 2023-01-01,P-1Y,PT0S,lastWorkingDay@12:00 in: query required: false schema: default: PT0S type: string - name: timelineVisible description: Indicates whether the timeline should be shown. example: true in: query required: false schema: default: false type: boolean - name: showHierarchies description: Indicates whether the hierarchy mode should be enabled. example: true in: query required: false schema: default: true type: boolean responses: '200': content: application/hal+json: examples: response: value: _embedded: results: _embedded: elements: - "<--- shortened for brevity --->" _links: changeSize: href: "/api/v3/workspaces/42/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=1&pageSize=%7Bsize%7D&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" templated: true createWorkPackage: href: "/api/v3/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/work_packages" method: post jumpTo: href: "/api/v3/workspaces/42/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=%7Boffset%7D&pageSize=2&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" templated: true self: href: "/api/v3/workspaces/42/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=1&pageSize=2&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" _type: WorkPackageCollection count: 30 offset: 1 pageSize: 2 total: 234 _links: columns: - href: "/api/v3/queries/columns/id" title: ID - href: "/api/v3/queries/columns/subject" title: Subject - href: "/api/v3/queries/columns/type" title: Type - href: "/api/v3/queries/columns/status" title: Status - href: "/api/v3/queries/columns/priority" title: Priority - href: "/api/v3/queries/columns/assignee" title: Assignee - href: "/api/v3/queries/columns/updated_at" title: Updated on groupBy: href: title: project: href: "/api/v3/projects/42" title: Lorem ipsum project results: href: "/api/v3/workspaces/42/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=1&pageSize=2&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" self: href: "/api/v3/workspaces/42/queries/default" title: Default sortBy: - href: "/api/v3/queries/sort_bys/parent-desc" title: Parent (Descending) user: href: "/api/v3/users/1" title: OpenProject Admin _type: Query filters: - _links: filter: href: "/api/v3/queries/filters/status" title: Status operator: href: "/api/v3/queries/operators/o" title: open schema: href: "/api/v3/queries/filter_instance_schemas/status" values: [] _type: StatusQueryFilter name: Status name: default public: false showHierarchies: true starred: false sums: false timelineVisible: false timelineZoomLevel: days schema: "$ref": "#/components/schemas/Default_Query_for_WorkspaceModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions to see the default query. **Required permission:** view work packages in the project headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the client does not have sufficient permissions to see the project. **Required permission:** any permission in the project headers: {} "/api/v3/projects/{id}/queries/filter_instance_schemas": get: parameters: - description: Project id example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _dependencies: - _type: SchemaDependency dependencies: "/api/v3/queries/operators/!": values: _links: {} hasDefault: false name: Values required: true type: "[]User" writable: true "/api/v3/queries/operators/!*": {} "/api/v3/queries/operators/*": {} "/api/v3/queries/operators/=": values: _links: {} hasDefault: false name: Values required: true type: "[]User" writable: true 'on': operator _links: filter: href: "/api/v3/queries/filters/assignee" title: Assignee self: href: "/api/v3/queries/filter_instance_schemas/assignee" _type: QueryFilterInstanceSchema filter: _links: {} hasDefault: false name: Filter required: true type: QueryFilter writable: true name: hasDefault: true name: Name required: true type: String writable: false - _dependencies: - _type: SchemaDependency dependencies: "/api/v3/queries/operators/!": values: _links: {} hasDefault: false name: Values required: true type: "[]User" writable: true "/api/v3/queries/operators/=": values: _links: {} hasDefault: false name: Values required: true type: "[]User" writable: true 'on': operator _links: filter: href: "/api/v3/queries/filters/author" title: Author self: href: "/api/v3/queries/filter_instance_schemas/author" _type: QueryFilterInstanceSchema filter: _links: {} hasDefault: false name: Filter required: true type: QueryFilter writable: true name: hasDefault: true name: Name required: true type: String writable: false _links: self: href: "/api/v3/projects/42/queries/filter_instance_schemas" _type: Collection count: 2 total: 2 schema: "$ref": "#/components/schemas/Query_Filter_Instance_Schemas_For_WorkspaceModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:Unauthenticated message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions to see it. **Required permission:** view work package in any project headers: {} tags: - Query Filter Instance Schema description: |- Returns the list of QueryFilterInstanceSchemas defined for a query of the specified project. This endpoint is deprecated and replaced by [`/api/v3/workspaces/{id}/queries/filter_instance_schemas`](https://www.openproject.org/docs/api/endpoints/query-filter-instance-schema/#list-query-filter-instance-schemas-for-workspace) operationId: List_Query_Filter_Instance_Schemas_for_Project summary: List Query Filter Instance Schemas for Project "/api/v3/projects/{id}/queries/schema": get: parameters: - description: Project id example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: QuerySchema: "$ref": "#/components/examples/QuerySchemaModel" schema: "$ref": "#/components/schemas/Schema_For_Workspace_QueriesModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: "**Required permission:** view work package in the project" headers: {} tags: - Queries description: |- Retrieve the schema for project queries. This endpoint is deprecated and replaced by ['/api/v3/workspaces/{id}/queries/schema`](https://www.openproject.org/docs/api/endpoints/queries/#view-schema-for-workspace-queries) operationId: View_schema_for_project_queries summary: View schema for project queries "/api/v3/projects/{id}/work_packages": get: summary: Get work packages of project operationId: Get_Project_Work_Package_Collection tags: - Work Packages description: |- Returns the collection of work packages that are related to the given project. This endpoint is deprecated and replaced by [`/api/v3/workspaces/{id}/work_packages`](https://www.openproject.org/docs/api/endpoints/work-packages/#get-work-packages-of-workspace) parameters: - description: Project id example: 1 in: path name: id required: true schema: type: integer - description: Page number inside the requested collection. example: 25 in: query name: offset required: false schema: default: 1 type: integer - description: Number of elements to display per page. example: 25 in: query name: pageSize required: false schema: type: integer - description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. If no filter is to be applied, the client should send an empty array (`[]`). example: '[{ "type_id": { "operator": "=", "values": [''1'', ''2''] }}]' in: query name: filters required: false schema: default: '[{ "status_id": { "operator": "o", "values": null }}]' type: string - description: |- JSON specifying sort criteria. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. example: '[["status", "asc"]]' in: query name: sortBy required: false schema: default: '[["id", "asc"]]' type: string - description: The column to group by. example: status in: query name: groupBy required: false schema: type: string - description: Indicates whether properties should be summed up if they support it. example: true in: query name: showSums required: false schema: default: false type: boolean - description: Comma separated list of properties to include. example: total,elements/subject,elements/id,self in: query name: select required: false schema: type: string responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/Work_PackagesModel" description: OK '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to see the work packages of this project. description: |- Returned if the client does not have sufficient permissions. **Required permission:** view work packages *Note that you will only receive this error, if you are at least allowed to see the corresponding project.* '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified project does not exist. description: |- Returned if the project does not exist or the client does not have sufficient permissions to see it. **Required permission:** view project post: summary: Create work package in project operationId: Create_Project_Work_Package tags: - Work Packages description: |- When calling this endpoint the client provides a single object, containing at least the properties and links that are required, in the body. The required fields of a WorkPackage can be found in its schema, which is embedded in the respective form. Note that it is only allowed to provide properties or links supporting the write operation. This endpoint is deprecated and replaced by [`/api/v3/workspaces/{id}/work_packages`](https://www.openproject.org/docs/api/endpoints/work-packages/#create-work-package-in-workspace) requestBody: content: application/json: schema: "$ref": "#/components/schemas/WorkPackageModel" parameters: - description: Project id example: 1 in: path name: id required: true schema: type: integer - description: |- Indicates whether change notifications (e.g. via E-Mail) should be sent. Note that this controls notifications for all users interested in changes to the work package (e.g. watchers, author and assignee), not just the current user. example: false in: query name: notify required: false schema: default: true type: boolean responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/WorkPackageModel" description: OK '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to add work packages to this project. description: |- Returned if the client does not have sufficient permissions. **Required permission:** add work packages *Note that you will only receive this error, if you are at least allowed to see the corresponding project.* '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified project does not exist. description: |- Returned if the project does not exist or the client does not have sufficient permissions to see it. **Required permissions:** view project *Note: A client without sufficient permissions shall not be able to test for the existence of a project. That's why a 404 is returned here, even if a 403 might be more appropriate.* '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _embedded: details: attribute: Subject _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: The subject might not be blank. description: |- Returned if: * the client tries to write a read-only property * a constraint for a property was violated * a property was provided in an unreadable format "/api/v3/projects/{id}/work_packages/form": post: summary: Form for creating Work Packages in a Project operationId: form_create_work_package_in_project tags: - Work Packages description: |- This endpoint allows you to validation a new work package creation body in a specific project. It works similarly to the `/api/v3/work_packages/form` endpoint, but already specifies the work package's project in the path, so that it does not have to be defined in the request body. This endpoint is deprecated and replaced by [`/api/v3/workspaces/{id}/work_packages/form`](https://www.openproject.org/docs/api/endpoints/work-packages/#form-for-creating-work-packages-in-a-workspace) parameters: - name: id description: ID of the project in which the work package will be created in: path required: true schema: type: integer example: 1 requestBody: content: application/json: schema: "$ref": "#/components/schemas/WorkPackageWriteModel" examples: Minimal example: "$ref": "#/components/examples/WorkPackageCreateOnlySubject" Valid example: "$ref": "#/components/examples/WorkPackageCreateValid" responses: '200': description: OK content: application/json: schema: "$ref": "#/components/schemas/WorkPackageFormModel" '415': "$ref": "#/components/responses/UnsupportedMediaType" "/api/v3/projects/{id}/available_assignees": get: parameters: - description: Project id example: '1' in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: delete: href: "/api/v3/users/1" method: DELETE title: Delete j.sheppard lock: href: "/api/v3/users/1/lock" method: POST title: Set lock on j.sheppard self: href: "/api/v3/users/1" title: John Sheppard - j.sheppard _type: User avatar: https://example.org/users/1/avatar createdAt: '2014-05-21T08:51:20.396Z' email: shep@mail.com firstName: John id: 1 lastName: Sheppard login: j.sheppard status: active updatedAt: '2014-05-21T08:51:20.396Z' - _links: delete: href: "/api/v3/users/2" method: DELETE title: Delete j.sheppard2 lock: href: "/api/v3/users/2/lock" method: POST title: Set lock on j.sheppard2 self: href: "/api/v3/users/2" title: Jim Sheppard - j.sheppard2 _type: User avatar: https://example.org/users/1/avatar createdAt: '2014-05-21T08:51:20.396Z' email: shep@mail.net firstName: Jim id: 2 lastName: Sheppard login: j.sheppard2 status: active updatedAt: '2014-05-21T08:51:20.396Z' _links: self: href: "/api/v3/projects/42/available_assignees" _type: Collection count: 2 total: 2 schema: "$ref": "#/components/schemas/Available_AssigneesModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to see the assignable users for this project. description: |- Returned if the client does not have sufficient permissions. **Required permission:** add work packages *Note that you will only receive this error, if you are at least allowed to see the corresponding project.* headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified project does not exist. description: |- Returned if the project does not exist or the client does not have sufficient permissions to see it. **Required permission:** view project headers: {} tags: - Work Packages description: |- Gets a list of users that can be assigned to work packages in the given project. This endpoint is deprecated and replaced by [`/api/v3/workspaces/{id}/available_assignees`](https://www.openproject.org/docs/api/endpoints/work-packages/#workspace-available-assignees) operationId: Project_Available_assignees summary: Project Available assignees "/api/v3/projects/{id}/categories": get: parameters: - description: ID of the project whose categories will be listed example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: defaultAssignee: href: "/api/v3/users/42" title: John Sheppard project: href: "/api/v3/projects/11" title: Example project self: href: "/api/v3/categories/10" title: Category with assignee _type: Category id: 10 name: Foo - _links: project: href: "/api/v3/projects/11" self: href: "/api/v3/categories/11" _type: Category id: 11 name: Bar _links: self: href: "/api/v3/projects/11/categories" _type: Collection count: 2 total: 2 schema: "$ref": "#/components/schemas/Categories_by_WorkspaceModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified project does not exist. description: |- Returned if the project does not exist or the client does not have sufficient permissions to see it. **Required permission:** view project *Note: A client without sufficient permissions shall not be able to test for the existence of a project. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} tags: - Categories description: "List all categories of a project\nThis endpoint is deprecated and replaced by [`/api/v3/workspaces/{id}/categories`](https://www.openproject.org/docs/api/endpoints/categories/#list-categories-of-a-workspace) " operationId: List_categories_of_a_project summary: List categories of a project "/api/v3/projects/{id}/sprints": get: parameters: - description: ID of the project whose sprints will be listed example: '1' in: path name: id required: true schema: type: integer - description: |- JSON specifying filter conditions. Accepts the same format and filters as returned by the [sprints](https://www.openproject.org/docs/api/endpoints/sprints/) endpoint. example: '[{ "definingWorkspace": { "operator": "=", "values": ["1"] }" }]' in: query name: filters required: false schema: type: string - description: Page number inside the requested collection. example: '25' in: query name: offset required: false schema: default: 1 type: integer - description: Number of elements to display per page. example: '25' in: query name: pageSize required: false schema: type: integer responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/SprintCollectionModel" examples: response: "$ref": "#/components/examples/SprintCollectionResponse" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/SprintCollectionModel" examples: response: "$ref": "#/components/examples/SprintCollectionResponse" description: |- Returned if the user lacks permission to list sprints in the queried for project. **Required permission:** view sprints in the project. headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified project does not exist. description: |- Returned if the project does not exist. **Required permission:** view sprints in the queried for project. headers: {} tags: - Sprints description: List sprints in the project. The sprints might be ones native to the project or shared with it. This endpoint supports pagination and filtering. operationId: List_sprints_in_project summary: List sprints in project "/api/v3/projects/{id}/types": get: parameters: - description: ID of the project whose types will be listed example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: self: href: "/api/v3/types/1" _type: Type color: "#ff0000" createdAt: '2014-05-21T08:51:20.396Z' id: 1 isDefault: true isMilestone: false name: Bug position: 1 updatedAt: '2014-05-21T08:51:20.396Z' - _links: self: href: "/api/v3/types/2" _type: Type color: "#888" createdAt: '2014-05-21T08:51:20.396Z' id: 2 isDefault: false isMilestone: false name: Feature position: 2 updatedAt: '2014-05-21T08:51:20.396Z' _links: self: href: "/api/v3/projects/11/types" _type: Collection count: 2 total: 2 schema: "$ref": "#/components/schemas/Types_by_WorkspaceModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified project does not exist. description: |- Returned if the project does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work packages **or** manage types (on given project) *Note: A client without sufficient permissions shall not be able to test for the existence of a project. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} tags: - Types description: |- This endpoint lists the types that are *available* in a given project. This endpoint is deprecated and replaced by [`/api/v3/workspaces/{id}/types`](https://www.openproject.org/docs/api/endpoints/types/#list-types-available-in-a-workspace) operationId: List_types_available_in_a_project summary: List types available in a project "/api/v3/projects/{id}/versions": get: parameters: - description: ID of the project whose versions will be listed example: '1' in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: availableInProjects: href: "/api/v3/versions/11/workspaces" definingProject: href: "/api/v3/projects/11" self: href: "/api/v3/versions/11" _type: Version description: format: plain html: This version has a description raw: This version has a description endDate: id: 11 name: v3.0 Alpha startDate: '2014-11-20' status: Open - _links: availableInProjects: href: "/api/v3/versions/12/workspaces" definingProject: href: "/api/v3/projects/11" self: href: "/api/v3/versions/12" _type: Version description: format: plain html: '' raw: '' endDate: id: 12 name: v2.0 startDate: status: Closed - _links: availableInProjects: href: "/api/v3/versions/10/workspaces" definingProject: href: "/api/v3/projects/11" self: href: "/api/v3/versions/10" _type: Version description: format: plain html: '' raw: '' endDate: id: 10 name: v1.0 startDate: status: Open _links: self: href: "/api/v3/projects/11/versions" _type: Collection count: 3 total: 3 schema: "$ref": "#/components/schemas/Versions_by_WorkspaceModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified project does not exist. description: |- Returned if the project does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work packages **or** manage versions (on given project) *Note: A client without sufficient permissions shall not be able to test for the existence of a project. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} tags: - Versions description: |- This endpoint lists the versions that are *available* in a given project. Note that due to sharing this might be more than the versions *defined* by that project. This endpoint is deprecated and replaced by [`/api/v3/workspaces/{id}/versions`](https://www.openproject.org/docs/api/endpoints/versions/#list-versions-available-in-a-workspace) operationId: List_versions_available_in_a_project summary: List versions available in a project "/api/v3/projects/{id}/favorite": delete: parameters: - description: Project id example: '1' in: path name: id required: true schema: type: integer responses: '204': description: Returned if the project was successfully removed from favorites. '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the project does not exist or the client does not have sufficient permissions to see it. **Required permission:** view project '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** logged in tags: - Projects - Favorites description: |- Removes the project from the current user's favorites. This endpoint is deprecated and replaced by [`/api/v3/workspaces/{id}/favorite`](https://www.openproject.org/docs/api/endpoints/workspaces/#unfavorite-workspace) operationId: Unfavorite_Project summary: Unfavorite Project post: parameters: - description: Project id example: '1' in: path name: id required: true schema: type: integer responses: '204': description: Returned if the project was successfully added to favorites. '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the project does not exist or the client does not have sufficient permissions to see it. **Required permission:** view project '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** logged in tags: - Projects - Favorites description: |- Adds the project to the current user's favorites. This endpoint is deprecated and replaced by [`/api/v3/workspaces/{id}/favorite`](https://www.openproject.org/docs/api/endpoints/workspaces/#favorite-workspace) operationId: Favorite_Project summary: Favorite Project "/api/v3/projects/{id}/configuration": get: parameters: - description: Project id example: '1' in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _type: Configuration _links: self: href: "/api/v3/projects/1/configuration" userPreferences: href: "/api/v3/my_preferences" maximumAttachmentFileSize: 5242880 perPageOptions: - 20 - 100 enabledInternalComments: true schema: "$ref": "#/components/schemas/ProjectConfigurationModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: Returned if the project does not exist or the user cannot view it. headers: {} tags: - Configuration - Projects description: |- Returns the configuration scoped to a specific project, including all global configuration properties plus project-specific settings. operationId: View_project_configuration summary: View project configuration "/api/v3/queries": get: summary: List queries operationId: List_queries tags: - Queries description: Returns a collection of queries. The collection can be filtered via query parameters similar to how work packages are filtered. Please note however, that the filters are applied to the queries and not to the work packages the queries in turn might return. parameters: - description: |- JSON specifying filter conditions. Currently supported filters are: + project: filters queries by the project they are assigned to. If the project filter is passed with the `!*` (not any) operator, global queries are returned. + id: filters queries based on their id + updated_at: filters queries based on the last time they where updated example: '[{ "project_id": { "operator": "!*", "values": null }" }]' in: query name: filters required: false schema: type: string responses: '200': content: application/hal+json: examples: Queries: "$ref": "#/components/examples/QueriesModel" schema: "$ref": "#/components/schemas/QueriesModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to see the queries. description: |- Returned if the client does not have sufficient permissions to see queries. **Required permission:** view work packages or manage public queries in any project headers: {} post: summary: Create query operationId: Create_query tags: - Queries description: |- When calling this endpoint the client provides a single object, containing at least the properties and links that are required, in the body. The required fields of a Query can be found in its schema, which is embedded in the respective form. Note that it is only allowed to provide properties or links supporting the write operation. requestBody: content: application/json: schema: "$ref": "#/components/schemas/Query_Create_Form" responses: '201': content: application/hal+json: examples: Query: "$ref": "#/components/examples/QueryModel" schema: "$ref": "#/components/schemas/QueryModel" description: Created headers: {} '400': "$ref": "#/components/responses/InvalidRequestBody" '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _embedded: details: attribute: project _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Project not found description: |- Returned if: * the client tries to modify a read-only property (`PropertyIsReadOnly`) * a constraint for a property was violated (`PropertyConstraintViolation`) * the client provides a link to an invalid resource (`ResourceTypeMismatch`), e.g. a user, project or operator not found headers: {} "/api/v3/queries/available_projects": get: responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: categories: href: "/api/v3/projects/6/categories" createWorkPackage: href: "/api/v3/projects/6/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/projects/6/work_packages" method: post self: href: "/api/v3/projects/6" title: A project versions: href: "/api/v3/projects/6/versions" _type: Project createdAt: '2015-07-06T13:28:14+00:00' description: Eveniet molestias omnis quis aut qui eum adipisci. id: 6 identifier: a_project name: A project type: Customer Project updatedAt: '2015-10-01T09:55:02+00:00' - _links: categories: href: "/api/v3/projects/14/categories" createWorkPackage: href: "/api/v3/projects/14/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/projects/14/work_packages" method: post self: href: "/api/v3/projects/14" title: Another project versions: href: "/api/v3/projects/14/versions" _type: Project createdAt: '2016-02-29T12:50:20+00:00' description: '' id: 14 identifier: another_project name: Another project type: updatedAt: '2016-02-29T12:50:20+00:00' _links: self: href: "/api/v3/queries/available_projects" _type: Collection count: 2 total: 2 schema: "$ref": "#/components/schemas/Available_projects_for_queryModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** view work packages headers: {} tags: - Queries description: Gets a list of projects that are available as projects a query can be assigned to. operationId: Available_projects_for_query summary: Available projects for query "/api/v3/queries/columns/{id}": get: parameters: - description: QueryColumn id example: priority in: path name: id required: true schema: type: string responses: '200': content: application/hal+json: examples: response: value: _links: self: href: "/api/v3/queries/columns/priority" title: Priority _type: QueryColumn::Property id: priority name: Priority schema: "$ref": "#/components/schemas/Query_ColumnModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:Unauthenticated message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions to see it. **Required permission:** view work package in any project headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified query does not exist. description: Returned if the QueryColumn does not exist. headers: {} tags: - Query Columns description: Retrieve an individual QueryColumn as identified by the `id` parameter. operationId: View_Query_Column summary: View Query Column "/api/v3/queries/default": get: summary: View default query operationId: View_default_query tags: - Queries description: Same as [viewing an existing, persisted Query](https://www.openproject.org/docs/api/endpoints/queries/#list-queries) in its response, this resource returns an unpersisted query and by that allows to get the default query configuration. The client may also provide additional parameters which will modify the default query. parameters: - name: filters description: |- JSON specifying filter conditions. The filters provided as parameters are not applied to the query but are instead used to override the query's persisted filters. All filters also accepted by the work packages endpoint are accepted. If no filter is to be applied, the client should send an empty array (`[]`). example: '[{ "assignee": { "operator": "=", "values": ["1", "5"] }" }]' in: query required: false schema: default: '[{ "status_id": { "operator": "o", "values": null }}]' type: string - name: offset description: Page number inside the queries' result collection of work packages. example: 25 in: query required: false schema: default: 1 type: integer - name: pageSize description: Number of elements to display per page for the queries' result collection of work packages. example: 25 in: query required: false schema: type: integer - name: sortBy description: JSON specifying sort criteria. The sort criteria is applied to the query's result collection of work packages overriding the query's persisted sort criteria. example: '[["status", "asc"]]' in: query required: false schema: default: '[["id", "asc"]]' type: string - name: groupBy description: The column to group by. The grouping criteria is applied to the to the query's result collection of work packages overriding the query's persisted group criteria. example: status in: query required: false schema: type: string - name: showSums description: Indicates whether properties should be summed up if they support it. The showSums parameter is applied to the to the query's result collection of work packages overriding the query's persisted sums property. example: true in: query required: false schema: default: false type: boolean - name: timestamps description: 'Indicates the timestamps to filter by when showing changed attributes on work packages. Values can be either ISO8601 dates, ISO8601 durations and the following relative date keywords: "oneDayAgo@HH:MM+HH:MM", "lastWorkingDay@HH:MM+HH:MM", "oneWeekAgo@HH:MM+HH:MM", "oneMonthAgo@HH:MM+HH:MM". The first "HH:MM" part represents the zero paded hours and minutes. The last "+HH:MM" part represents the timezone offset from UTC associated with the time, the offset can be positive or negative e.g."oneDayAgo@01:00+01:00", "oneDayAgo@01:00-01:00". Values older than 1 day are accepted only with valid Enterprise Token available. ' example: 2023-01-01,P-1Y,PT0S,lastWorkingDay@12:00 in: query required: false schema: default: PT0S type: string - name: timelineVisible description: Indicates whether the timeline should be shown. example: true in: query required: false schema: default: false type: boolean - name: timelineZoomLevel description: Indicates in what zoom level the timeline should be shown. Valid values are `days`, `weeks`, `months`, `quarters`, and `years`. example: days in: query required: false schema: default: days type: string - name: showHierarchies description: Indicates whether the hierarchy mode should be enabled. example: true in: query required: false schema: default: true type: boolean responses: '200': content: application/hal+json: examples: response: value: _embedded: results: _embedded: elements: - "<--- shortened for brevity --->" _links: changeSize: href: "/api/v3/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=1&pageSize=%7Bsize%7D&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" templated: true createWorkPackage: href: "/api/v3/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/work_packages" method: post jumpTo: href: "/api/v3/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=%7Boffset%7D&pageSize=2&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" templated: true self: href: "/api/v3/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=1&pageSize=2&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" _type: WorkPackageCollection count: 30 offset: 1 pageSize: 2 total: 234 _links: columns: - href: "/api/v3/queries/columns/id" title: ID - href: "/api/v3/queries/columns/subject" title: Subject - href: "/api/v3/queries/columns/type" title: Type - href: "/api/v3/queries/columns/status" title: Status - href: "/api/v3/queries/columns/priority" title: Priority - href: "/api/v3/queries/columns/assignee" title: Assignee - href: "/api/v3/queries/columns/updated_at" title: Updated on groupBy: href: title: highlightedAttributes: [] project: href: results: href: "/api/v3/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=1&pageSize=2&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" self: href: "/api/v3/queries/default" title: Default sortBy: - href: "/api/v3/queries/sort_bys/parent-desc" title: Parent (Descending) user: href: "/api/v3/users/1" title: OpenProject Admin _type: Query filters: - _links: filter: href: "/api/v3/queries/filters/status" title: Status operator: href: "/api/v3/queries/operators/o" title: open schema: href: "/api/v3/queries/filter_instance_schemas/status" values: [] _type: StatusQueryFilter name: Status highlightingMode: inline name: default public: false showHierarchies: true starred: false sums: false timelineLabels: {} timelineVisible: false timelineZoomLevel: days schema: "$ref": "#/components/schemas/Default_QueryModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions to see the default query. **Required permission:** view work packages in any project headers: {} "/api/v3/queries/filter_instance_schemas": get: responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _dependencies: - _type: SchemaDependency dependencies: "/api/v3/queries/operators/!": values: _links: {} hasDefault: false name: Values required: true type: "[]User" writable: true "/api/v3/queries/operators/!*": {} "/api/v3/queries/operators/*": {} "/api/v3/queries/operators/=": values: _links: {} hasDefault: false name: Values required: true type: "[]User" writable: true 'on': operator _links: filter: href: "/api/v3/queries/filters/assignee" title: Assignee self: href: "/api/v3/queries/filter_instance_schemas/assignee" _type: QueryFilterInstanceSchema filter: _links: {} hasDefault: false name: Filter required: true type: QueryFilter writable: true name: hasDefault: true name: Name required: true type: String writable: false - _dependencies: - _type: SchemaDependency dependencies: "/api/v3/queries/operators/!": values: _links: {} hasDefault: false name: Values required: true type: "[]User" writable: true "/api/v3/queries/operators/=": values: _links: {} hasDefault: false name: Values required: true type: "[]User" writable: true 'on': operator _links: filter: href: "/api/v3/queries/filters/author" title: Author self: href: "/api/v3/queries/filter_instance_schemas/author" _type: QueryFilterInstanceSchema filter: _links: {} hasDefault: false name: Filter required: true type: QueryFilter writable: true name: hasDefault: true name: Name required: true type: String writable: false _links: self: href: "/api/v3/queries/filter_instance_schemas" _type: Collection count: 2 total: 2 schema: "$ref": "#/components/schemas/Query_Filter_Instance_SchemasModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:Unauthenticated message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions to see it. **Required permission:** view work package in any project headers: {} tags: - Query Filter Instance Schema description: Returns the list of QueryFilterInstanceSchemas defined for a global query. That is a query not assigned to a project. operationId: List_Query_Filter_Instance_Schemas summary: List Query Filter Instance Schemas "/api/v3/queries/filter_instance_schemas/{id}": get: parameters: - description: QueryFilterInstanceSchema identifier. The identifier is the filter identifier. example: author in: path name: id required: true schema: type: string responses: '200': content: application/hal+json: examples: response: value: _dependencies: - _type: SchemaDependency dependencies: "/api/v3/queries/operators/!": values: _links: {} hasDefault: false name: Values required: true type: "[]User" writable: true "/api/v3/queries/operators/=": values: _links: {} hasDefault: false name: Values required: true type: "[]User" writable: true 'on': operator _links: filter: href: "/api/v3/queries/filters/author" title: Author self: href: "/api/v3/queries/filter_instance_schemas/author" _type: QueryFilterInstanceSchema filter: _links: {} hasDefault: false name: Filter required: true type: QueryFilter writable: true name: hasDefault: true name: Name required: true type: String writable: false schema: "$ref": "#/components/schemas/Query_Filter_Instance_SchemaModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:Unauthenticated message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions to see it. **Required permission:** view work package in any project headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified query does not exist. description: Returned if the QueryFilterInstanceSchema does not exist. headers: {} tags: - Query Filter Instance Schema description: Retrieve an individual QueryFilterInstanceSchema as identified by the id parameter. operationId: View_Query_Filter_Instance_Schema summary: View Query Filter Instance Schema "/api/v3/queries/filters/{id}": get: parameters: - description: QueryFilter identifier example: status in: path name: id required: true schema: type: string responses: '200': content: application/hal+json: examples: response: value: _links: self: href: "/api/v3/queries/filters/status" title: Status _type: QueryFilter id: status schema: "$ref": "#/components/schemas/Query_FilterModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:Unauthenticated message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions to see it. **Required permission:** view work package in any project headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified query does not exist. description: Returned if the QueryFilter does not exist. headers: {} tags: - Query Filters description: Retrieve an individual QueryFilter as identified by the id parameter. operationId: View_Query_Filter summary: View Query Filter "/api/v3/queries/form": post: summary: Query Create Form operationId: Query_Create_Form tags: - Queries description: '' requestBody: content: application/json: schema: "$ref": "#/components/schemas/Query_Create_Form" responses: '200': description: OK headers: {} "/api/v3/queries/operators/{id}": get: parameters: - description: QueryOperator id example: "!" in: path name: id required: true schema: type: string responses: '200': content: application/hal+json: examples: response: value: _links: self: href: "/api/v3/queries/operators/!" title: is not _type: QueryOperator id: "!" name: is not schema: "$ref": "#/components/schemas/Query_OperatorModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:Unauthenticated message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions to see it. **Required permission:** view work package in any project headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified query does not exist. description: Returned if the QueryOperator does not exist. headers: {} tags: - Query Operators description: Retrieve an individual QueryOperator as identified by the `id` parameter. operationId: View_Query_Operator summary: View Query Operator "/api/v3/queries/schema": get: summary: View schema for global queries operationId: View_schema_for_global_queries tags: - Queries description: Retrieve the schema for global queries, those, that are not assigned to a project. responses: '200': content: application/hal+json: examples: QuerySchema: "$ref": "#/components/examples/QuerySchemaModel" schema: "$ref": "#/components/schemas/Schema_For_Global_QueriesModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: "**Required permission:** view work package in any project" headers: {} "/api/v3/queries/sort_bys/{id}": get: parameters: - description: QuerySortBy identifier. The identifier is a combination of the column identifier and the direction. example: status-asc in: path name: id required: true schema: type: string responses: '200': content: application/hal+json: examples: response: value: _links: column: href: "/api/v3/queries/columns/status" title: Status direction: href: urn:openproject-org:api:v3:queries:directions:asc title: Ascending self: href: "/api/v3/queries/sort_bys/status-asc" title: Status (Ascending) _type: QuerySortBy id: status-asc name: Status (Ascending) schema: "$ref": "#/components/schemas/Query_Sort_ByModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:Unauthenticated message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions to see it. **Required permission:** view work package in any project headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified query does not exist. description: Returned if the QuerySortBy does not exist. headers: {} tags: - Query Sort Bys description: Retrieve an individual QuerySortBy as identified by the id parameter. operationId: View_Query_Sort_By summary: View Query Sort By "/api/v3/queries/{id}": delete: summary: Delete query operationId: Delete_query tags: - Queries description: Delete the query identified by the id parameter parameters: - description: Query id example: '1' in: path name: id required: true schema: type: integer responses: '204': description: No Content headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** for own queries none; for public queries: manage public queries *Note that you will only receive this error, if you are at least allowed to see the corresponding query.* headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the query does not exist or the client does not have sufficient permissions to see it. **Required condition:** query belongs to user or query is public **Required permission:** view work package in queries project headers: {} get: summary: View query operationId: View_query tags: - Queries description: Retrieve an individual query as identified by the id parameter. Then endpoint accepts a number of parameters that can be used to override the resources' persisted parameters. parameters: - name: id description: Query id example: '1' in: path required: true schema: type: integer - name: filters description: |- JSON specifying filter conditions. The filters provided as parameters are not applied to the query but are instead used to override the query's persisted filters. All filters also accepted by the work packages endpoint are accepted. If no filter is to be applied, the client should send an empty array (`[]`). example: '[{ "assignee": { "operator": "=", "values": ["1", "5"] }" }]' in: query required: false schema: default: '[{ "status_id": { "operator": "o", "values": null }}]' type: string - name: offset description: Page number inside the queries' result collection of work packages. example: '25' in: query required: false schema: default: 1 type: integer - name: pageSize description: Number of elements to display per page for the queries' result collection of work packages. example: '25' in: query required: false schema: type: integer - name: columns description: Selected columns for the table view. example: "[]" in: query required: false schema: default: "['type', 'priority']" type: string - name: sortBy description: JSON specifying sort criteria. The sort criteria is applied to the query's result collection of work packages overriding the query's persisted sort criteria. example: '[["status", "asc"]]' in: query required: false schema: default: '[["id", "asc"]]' type: string - name: groupBy description: The column to group by. The grouping criteria is applied to the to the query's result collection of work packages overriding the query's persisted group criteria. example: status in: query required: false schema: type: string - name: showSums description: Indicates whether properties should be summed up if they support it. The showSums parameter is applied to the to the query's result collection of work packages overriding the query's persisted sums property. example: true in: query required: false schema: default: false type: boolean - name: timestamps description: 'Indicates the timestamps to filter by when showing changed attributes on work packages. Values can be either ISO8601 dates, ISO8601 durations and the following relative date keywords: "oneDayAgo@HH:MM+HH:MM", "lastWorkingDay@HH:MM+HH:MM", "oneWeekAgo@HH:MM+HH:MM", "oneMonthAgo@HH:MM+HH:MM". The first "HH:MM" part represents the zero paded hours and minutes. The last "+HH:MM" part represents the timezone offset from UTC associated with the time, the offset can be positive or negative e.g."oneDayAgo@01:00+01:00", "oneDayAgo@01:00-01:00". Values older than 1 day are accepted only with valid Enterprise Token available. ' example: 2023-01-01,P-1Y,PT0S,lastWorkingDay@12:00 in: query required: false schema: default: PT0S type: string - name: timelineVisible description: Indicates whether the timeline should be shown. example: true in: query required: false schema: default: false type: boolean - name: timelineLabels description: Overridden labels in the timeline view example: "{}" in: query required: false schema: default: "{}" type: string - name: highlightingMode description: Highlighting mode for the table view. example: inline in: query required: false schema: default: inline type: string - name: highlightedAttributes description: Highlighted attributes mode for the table view when `highlightingMode` is `inline`. When set to `[]` all highlightable attributes will be returned as `highlightedAttributes`. example: "[]" in: query required: false schema: default: "['type', 'priority']" type: string - name: showHierarchies description: Indicates whether the hierarchy mode should be enabled. example: true in: query required: false schema: default: true type: boolean responses: '200': content: application/hal+json: examples: Query: "$ref": "#/components/examples/QueryModel" schema: "$ref": "#/components/schemas/QueryModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified query does not exist. description: |- Returned if the query does not exist or the client does not have sufficient permissions to see it. **Required condition:** query belongs to user or query is public **Required permission:** view work package in queries project headers: {} patch: summary: Edit Query operationId: Edit_Query tags: - Queries description: |- When calling this endpoint the client provides a single object, containing the properties and links that it wants to change, in the body. Note that it is only allowed to provide properties or links supporting the **write** operation. parameters: - description: Query id example: '1' in: path name: id required: true schema: type: integer requestBody: content: application/json: schema: "$ref": "#/components/schemas/Query_Update_Form" responses: '200': content: application/hal+json: examples: response: value: _embedded: highlightedAttributes: [] results: _embedded: elements: - "<--- shortened for brevity --->" _links: changeSize: href: "/api/v3/projects/3/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=1&pageSize=%7Bsize%7D&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" templated: true createWorkPackage: href: "/api/v3/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/work_packages" method: post jumpTo: href: "/api/v3/projects/3/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=%7Boffset%7D&pageSize=2&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" templated: true self: href: "/api/v3/projects/3/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=1&pageSize=2&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" _type: WorkPackageCollection count: 30 offset: 1 pageSize: 2 total: 234 _links: columns: - href: "/api/v3/queries/columns/id" title: ID - href: "/api/v3/queries/columns/subject" title: Subject - href: "/api/v3/queries/columns/type" title: Type - href: "/api/v3/queries/columns/status" title: Status - href: "/api/v3/queries/columns/priority" title: Priority - href: "/api/v3/queries/columns/assignee" title: Assignee - href: "/api/v3/queries/columns/updated_at" title: Updated on groupBy: href: title: highlightedAttributes: [] project: href: "/api/v3/projects/3" title: copy results: href: "/api/v3/projects/3/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=1&pageSize=2&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" self: href: "/api/v3/queries/9" title: fdsfdsfdsf sortBy: - href: "/api/v3/queries/sort_bys/parent-desc" title: Parent (Descending) user: href: "/api/v3/users/1" title: OpenProject Admin _type: Query createdAt: '2015-03-20T12:56:56.343Z' filters: - _links: filter: href: "/api/v3/queries/filters/status" title: Status operator: href: "/api/v3/queries/operators/o" title: open schema: href: "/api/v3/queries/filter_instance_schemas/status" values: [] _type: StatusQueryFilter name: Status - _links: filter: href: "/api/v3/queries/filters/dueDate" title: Finish date operator: href: "/api/v3/queries/operators/Hello world! This *is* plain text!
\n" schema: "$ref": "#/components/schemas/Plain_TextModel" description: OK headers: {} '415': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:TypeNotSupported message: Expected Content-Type to be 'text/plain' but got 'application/json'. description: Returned if the Content-Type indicated in the request is not `text/plain`. headers: {} tags: - Previewing description: '' operationId: Preview_plain_document summary: Preview plain document "/api/v3/revisions/{id}": get: parameters: - description: Revision id example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _links: author: href: "/api/v3/users/1" project: href: "/api/v3/projects/1" self: href: "/api/v3/revisions/1" showRevision: href: "/projects/identifier/repository/revision/11f4b07" _type: Revision authorName: Some Developer createdAt: '2015-07-21T13:36:59.454Z' formattedIdentifier: 11f4b07 id: 1 identifier: 11f4b07dff4f4ce9548a52b7d002daca7cd63ec6 message: format: plain html: "This revision provides new features
An elaborate
description
Lorem ipsum dolor sit amet
" raw: Lorem **ipsum** dolor sit amet id: 1 identifier: project_identifier name: Project example statusExplanation: format: markdown html: "Everything fine
" raw: Everything **fine** updatedAt: '2014-05-21T08:51:20.396Z' _links: self: href: "/api/v3/versions/2/projects" _type: Collection count: 1 total: 1 schema: "$ref": "#/components/schemas/List_workspaces_by_versionModel" description: OK headers: {} '404': description: |- Returned if the version does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work packages **or** manage versions (any project where the given version is available) *Note: A client without sufficient permissions shall not be able to test for the existence of a version. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} tags: - Projects description: |- This endpoint lists the projects where the given version is available. The projects returned depend on the sharing settings of the given version, but are also limited to the projects that the current user is allowed to see. This endpoint is deprecated and replaced by [`/api/v3/versions/{id}/workspaces`](https://www.openproject.org/docs/api/endpoints/projects/#list-workspaces-having-version) operationId: List_projects_with_version summary: List projects having version "/api/v3/versions/{id}/workspaces": get: parameters: - description: Version id example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: categories: href: "/api/v3/projects/1/categories" self: href: "/api/v3/projects/1" title: Lorem status: href: "/api/v3/project_statuses/on_track" title: On track versions: href: "/api/v3/projects/1/versions" _type: Project active: true createdAt: '2014-05-21T08:51:20.396Z' description: format: markdown html: "Lorem ipsum dolor sit amet
" raw: Lorem **ipsum** dolor sit amet id: 1 identifier: project_identifier name: Project example statusExplanation: format: markdown html: "Everything fine
" raw: Everything **fine** updatedAt: '2014-05-21T08:51:20.396Z' _links: self: href: "/api/v3/versions/2/projects" _type: Collection count: 1 total: 1 schema: "$ref": "#/components/schemas/List_workspaces_by_versionModel" description: OK headers: {} '404': description: |- Returned if the version does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work packages **or** manage versions (any workspace where the given version is available) *Note: A client without sufficient permissions shall not be able to test for the existence of a version. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} tags: - Projects description: |- This endpoint lists the workspaces where the given version is available. The workspaces returned depend on the sharing settings of the given version, but are also limited to the workspaces that the current user is allowed to see. operationId: List_workspaces_with_version summary: List workspaces having version "/api/v3/views": get: parameters: - description: |- JSON specifying filter conditions. Currently supported filters are: + project: filters views by the project their associated query is assigned to. If the project filter is passed with the `!*` (not any) operator, global views are returned. + id: filters views based on their id + type: filters views based on their type example: '[{ "project_id": { "operator": "!*", "values": null }" }]' in: query name: filters required: false schema: type: string responses: '200': content: application/hal+json: examples: Queries: "$ref": "#/components/examples/Views" description: OK headers: {} tags: - Views description: Returns a collection of Views. The collection can be filtered via query parameters similar to how work packages are filtered. operationId: List_views summary: List views "/api/v3/views/{id}": get: parameters: - description: View id example: 42 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: ViewWorkPackagesTable: "$ref": "#/components/examples/ViewWorkPackagesTable" ViewTeamPlanner: "$ref": "#/components/examples/ViewTeamPlanner" description: Returns the result of a single view, dependent of the view type. '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** The required permission depends on the type of the view. headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the resource can not be found. *Note: A client without sufficient permissions shall not be able to test for the existence of a view. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} tags: - Views description: '' operationId: View_view summary: View view post: parameters: - description: The view identifier name: id in: path required: true example: 1 schema: type: string requestBody: content: application/json: examples: Views::WorkPackagesTable: value: _links: query: href: "/api/v3/queries/5" Views::TeamPlanner: value: _links: query: href: "/api/v3/queries/5" schema: type: object properties: _links: type: object properties: query: type: object properties: href: type: string format: uri responses: '201': content: application/hal+json: schema: type: object examples: Views::WorkPackagesTable: "$ref": "#/components/examples/ViewWorkPackagesTable" Views::TeamPlanner: "$ref": "#/components/examples/ViewTeamPlanner" description: Created headers: {} '400': "$ref": "#/components/responses/InvalidRequestBody" '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _embedded: details: attribute: query _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Query does not exist. description: |- Returned if: * the client tries to modify a read-only property (`PropertyIsReadOnly`) * a constraint for a property was violated (`PropertyConstraintViolation`) * the client provides a link to an invalid resource (`ResourceTypeMismatch`), e.g. a query not found headers: {} tags: - Views description: |- When calling this endpoint the client provides a single object, containing at least the properties and links that are required, in the body. The required fields of a View can be found in its schema, which is embedded in the respective form. Note that it is only allowed to provide properties or links supporting the write operation. There are different subtypes of `Views` (e.g. `Views::WorkPackagesTable`) with each having its own endpoint for creating that subtype e.g. * `/api/v3/views/work_packages_table` for `Views::WorkPackagesTable` * `/api/v3/views/team_planner` for `Views::TeamPlanner` * `/api/v3/views/work_packages_calendar` for `Views::WorkPackagesCalendar` **Not yet implemented** To get the list of available subtypes and by that the endpoints for creating a subtype, use the ``` /api/v3/views/schemas ``` endpoint. operationId: Create_views summary: Create view "/api/v3/wiki_pages/{id}": get: parameters: - description: Wiki page identifier example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: project: _type: Project... id: 12 _links: addAttachment: href: "/api/v3/wiki_pages/72/attachments" method: post attachments: href: "/api/v3/wiki_pages/72/attachments" project: href: "/api/v3/projects/12" title: some project self: href: "/api/v3/wiki_pages/72" _type: WikiPage id: 72 title: A wiki page with a name schema: "$ref": "#/components/schemas/Wiki_PageModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the wiki page does not exist or the client does not have sufficient permissions to see it. **Required permission:** view wiki page in the page's project headers: {} tags: - Wiki Pages description: Retrieve an individual wiki page as identified by the id parameter operationId: View_Wiki_Page summary: View Wiki Page "/api/v3/wiki_pages/{id}/attachments": get: parameters: - description: ID of the wiki page whose attachments will be listed example: '1' in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: author: href: "/api/v3/users/1" title: OpenProject Admin container: href: "/api/v3/wiki_pages/72" title: wiki delete: href: "/api/v3/attachments/376" method: delete downloadLocation: href: "/api/v3/attachments/376/content" self: href: "/api/v3/attachments/376" title: 200.gif _type: Attachment contentType: image/gif createdAt: '2018-06-01T07:24:19.896Z' description: format: plain html: '' raw: '' digest: algorithm: md5 hash: 7ac9c97ef73d47127f590788b84c0c1c fileName: some.gif fileSize: 3521772 id: 376 _links: self: href: "/api/v3/wiki_pages/72/attachments" _type: Collection count: 1 total: 1 schema: "$ref": "#/components/schemas/Attachments_Model" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the wiki page does not exist or the client does not have sufficient permissions to see it. **Required permission:** view wiki pages *Note: A client without sufficient permissions shall not be able to test for the existence of a work package. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} tags: - Attachments description: '' operationId: List_attachments_by_wiki_page summary: List attachments by wiki page post: parameters: - description: ID of the wiki page to receive the attachment example: '1' in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: author: _links: lock: href: "/api/v3/users/1/lock" method: post title: Set lock on admin self: href: "/api/v3/users/1" title: OpenProject Admin showUser: href: "/users/1" type: text/html updateImmediately: href: "/api/v3/users/1" method: patch title: Update admin _type: User admin: true avatar: '' createdAt: '2015-03-20T12:56:52.343Z' email: firstName: OpenProject id: 1 identityUrl: lastName: Admin login: admin name: OpenProject Admin status: active updatedAt: '2018-05-29T13:57:44.662Z' container: _links: addAttachment: href: "/api/v3/wiki_pages/72/attachments" method: post attachments: href: "/api/v3/wiki_pages/72/attachments" project: href: "/api/v3/projects/12" title: Demo project self: href: "/api/v3/wiki_pages/72" _type: WikiPage id: 72 title: wiki _links: author: href: "/api/v3/users/1" title: OpenProject Admin container: href: "/api/v3/wiki_pages/72" title: wiki delete: href: "/api/v3/attachments/376" method: delete downloadLocation: href: "/api/v3/attachments/376/content" self: href: "/api/v3/attachments/376" title: 200.gif _type: Attachment contentType: image/gif createdAt: '2018-06-01T07:24:19.896Z' description: format: plain html: '' raw: '' digest: algorithm: md5 hash: 7ac9c97ef73d47127f590788b84c0c1c fileName: some.gif fileSize: 3521772 id: 376 description: OK headers: {} '400': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidRequestBody message: The request could not be parsed as JSON. description: |- Returned if the client sends a not understandable request. Reasons include: * Omitting one of the required parts (metadata and file) * sending unparsable JSON in the metadata part headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to delete this attachment. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit wiki pages *Note that you will only receive this error, if you are at least allowed to see the wiki page* headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the wiki page does not exist or the client does not have sufficient permissions to see it. **Required permission:** view wiki pages *Note: A client without sufficient permissions shall not be able to test for the existence of a wiki page That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: File is too large (maximum size is 5242880 Bytes). description: |- Returned if the client tries to send an invalid attachment. Reasons are: * Omitting the file name (`fileName` property of metadata part) * Sending a file that is too large headers: {} tags: - Attachments description: Adds an attachment with the wiki page as its container. operationId: Add_attachment_to_wiki_page summary: Add attachment to wiki page "/api/v3/work_packages": get: summary: List work packages operationId: list_work_packages tags: - Work Packages description: Returns a collection of work packages. parameters: - description: Page number inside the requested collection. example: '25' in: query name: offset required: false schema: default: 1 type: integer - description: Number of elements to display per page. example: '25' in: query name: pageSize required: false schema: type: integer - description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. If no filter is to be applied, the client should send an empty array (`[]`), otherwise a default filter is applied. A Currently supported filters are (there are additional filters added by modules): - assigned_to - assignee_or_group - attachment_base - attachment_content - attachment_file_name - author - blocked - blocks - category - comment - created_at - custom_field - dates_interval - description - done_ratio - due_date - duplicated - duplicates - duration - estimated_hours - file_link_origin_id - follows - group - id - includes - linkable_to_storage_id - linkable_to_storage_url - manual_sort - milestone - only_subproject - parent - partof - precedes - principal_base - priority - project - relatable - relates - required - requires - responsible - role - search - start_date - status - storage_id - storage_url - subject - subject_or_id - subproject - type - typeahead - updated_at - version - watcher - work_package example: '[{ "type_id": { "operator": "=", "values": ["1", "2"] }}]' in: query name: filters required: false schema: default: '[{ "status_id": { "operator": "o", "values": null }}]' type: string - description: |- JSON specifying sort criteria. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. example: '[["status", "asc"]]' in: query name: sortBy required: false schema: default: '[["id", "asc"]]' type: string - description: The column to group by. example: status in: query name: groupBy required: false schema: type: string - description: Indicates whether properties should be summed up if they support it. example: true in: query name: showSums required: false schema: default: false type: boolean - description: Comma separated list of properties to include. example: total,elements/subject,elements/id,self in: query name: select required: false schema: type: string - description: |- In order to perform a [baseline comparison](/docs/api/baseline-comparisons), you may provide one or several timestamps in ISO-8601 format as comma-separated list. The timestamps may be absolute or relative, such as ISO8601 dates, ISO8601 durations and the following relative date keywords: "oneDayAgo@HH:MM+HH:MM", "lastWorkingDay@HH:MM+HH:MM", "oneWeekAgo@HH:MM+HH:MM", "oneMonthAgo@HH:MM+HH:MM". The first "HH:MM" part represents the zero paded hours and minutes. The last "+HH:MM" part represents the timezone offset from UTC associated with the time, the offset can be positive or negative e.g."oneDayAgo@01:00+01:00", "oneDayAgo@01:00-01:00". Usually, the first timestamp is the baseline date, the last timestamp is the current date. Values older than 1 day are accepted only with valid Enterprise Token available. example: 2022-01-01T00:00:00Z,PT0S in: query name: timestamps required: false schema: default: PT0S type: string responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/Work_PackagesModel" '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to see work packages. description: |- Returned if the client does not have sufficient permissions. **Required permission:** view work packages (globally or in any project) post: summary: Create Work Package operationId: create_work_package tags: - Work Packages description: |- When calling this endpoint the client provides a single object, containing at least the properties and links that are required, in the body. The required fields of a WorkPackage can be found in its schema, which is embedded in the respective form. Note that it is only allowed to provide properties or links supporting the write operation. A project link must be set when creating work packages through this route. When setting start date, finish date, and duration together, their correctness will be checked and a 422 error will be returned if one value does not match with the two others. You can make the server compute a value: set only two values in the request and the third one will be computed and returned in the response. For instance, when sending `{ "startDate": "2022-08-23", duration: "P2D" }`, the response will include `{ "dueDate": "2022-08-24" }`. requestBody: content: application/json: schema: "$ref": "#/components/schemas/WorkPackageModel" parameters: - description: |- Indicates whether change notifications (e.g. via E-Mail) should be sent. Note that this controls notifications for all users interested in changes to the work package (e.g. watchers, author and assignee), not just the current user. example: false in: query name: notify required: false schema: default: true type: boolean responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/WorkPackageModel" '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to add work packages to this project. description: |- Returned if the client does not have sufficient permissions. **Required permission:** add work packages *Note that you will only receive this error, if you are at least allowed to see the corresponding project.* '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified project does not exist. description: |- Returned if the project does not exist or the client does not have sufficient permissions to see it. **Required permissions:** view project *Note: A client without sufficient permissions shall not be able to test for the existence of a project. That's why a 404 is returned here, even if a 403 might be more appropriate.* '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: The subject might not be blank. _embedded: details: attribute: Subject description: |- Returned if: * the client tries to write a read-only property * a constraint for a property was violated * a property was provided in an unreadable format "/api/v3/work_packages/form": post: summary: Form for creating a Work Package operationId: form_create_work_package tags: - Work Packages description: |- When calling this endpoint, the client provides a single object containing the properties and links to be created, in the body. The input is validated and a schema response is returned. If the validation errors of the response is empty, the same payload can be used to create a work package. Only the properties of the work package write model are allowed to set on a work package on creation. When setting start date, finish date, and duration together, their correctness will be checked and a validation error will be returned if one value does not match with the two others. You can make the server compute a value: set only two values in the request and the third one will be computed and returned in the response. For instance, when sending `{ "startDate": "2022-08-23", duration: "P2D" }`, the response will include `{ "dueDate": "2022-08-24" }`. requestBody: content: application/json: schema: "$ref": "#/components/schemas/WorkPackageWriteModel" examples: Valid creation: "$ref": "#/components/examples/WorkPackageCreateValid" responses: '200': description: OK content: application/json: schema: "$ref": "#/components/schemas/WorkPackageFormModel" '415': "$ref": "#/components/responses/UnsupportedMediaType" "/api/v3/work_packages/schemas": get: summary: List Work Package Schemas operationId: list_work_package_schemas tags: - Work Packages description: |- List all work package schemas that match the given filters. This endpoint does not return a successful response, if no filter is given. parameters: - name: filters description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are: + id: The schema's id Schema id has the form `project_id-work_package_type_id`. in: query required: true schema: type: string example: '[{ "id": { "operator": "=", "values": ["12-1", "14-2"] } }]' responses: '200': description: OK content: application/hal+json: examples: response: value: _embedded: elements: - _links: self: href: "/api/v3/work_packages/schemas/13-1" _type: Schema... - _links: self: href: "/api/v3/work_packages/schemas/7-6" _type: Schema... _links: self: href: "/api/v3/work_packages/schemas" _type: Collection count: 2 total: 5 '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to list schemas. description: |- Returned if the client does not have sufficient permissions. **Required permission:** View work packages in any project. headers: {} "/api/v3/work_packages/schemas/{identifier}": get: parameters: - description: Identifier of the schema example: 12-13 in: path name: identifier required: true schema: type: string responses: '200': description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified schema does not exist. description: |- Returned if the schema does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work packages (on the project where this schema is used) *Note: A client without sufficient permissions shall not be able to test for the existence of a project. That's why a 404 is returned here, even if a 403 might be more appropriate.* headers: {} tags: - Work Packages description: '' operationId: View_Work_Package_Schema summary: View Work Package Schema "/api/v3/work_packages/{id}": delete: summary: Delete Work Package operationId: delete_work_package tags: - Work Packages description: |- Deletes the work package, as well as: - all associated time entries - its hierarchy of child work packages parameters: - description: Work package id in: path name: id required: true schema: type: integer example: 1 responses: '204': description: |- Returned if the work package was deleted successfully. Note that the response body is empty as of now. In future versions of the API a body *might* be returned along with an appropriate HTTP status. '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to delete this work package. description: |- Returned if the client does not have sufficient permissions. **Required permission:** delete work package '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified work package does not exist. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" get: summary: View Work Package operationId: view_work_package tags: - Work Packages description: Returns the specified work package. parameters: - description: Work package id in: path name: id required: true schema: type: integer example: 1 - description: |- In order to perform a [baseline comparison](/docs/api/baseline-comparisons) of the work-package attributes, you may provide one or several timestamps in ISO-8601 format as comma-separated list. The timestamps may be absolute or relative, such as ISO8601 dates, ISO8601 durations and the following relative date keywords: "oneDayAgo@HH:MM+HH:MM", "lastWorkingDay@HH:MM+HH:MM", "oneWeekAgo@HH:MM+HH:MM", "oneMonthAgo@HH:MM+HH:MM". The first "HH:MM" part represents the zero paded hours and minutes. The last "+HH:MM" part represents the timezone offset from UTC associated with the time, the offset can be positive or negative e.g."oneDayAgo@01:00+01:00", "oneDayAgo@01:00-01:00". Usually, the first timestamp is the baseline date, the last timestamp is the current date. Values older than 1 day are accepted only with valid Enterprise Token available. in: query name: timestamps required: false schema: default: PT0S type: string example: 2022-01-01T00:00:00Z,PT0S responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/WorkPackageModel" description: OK '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified work package does not exist. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package patch: summary: Update a Work Package operationId: update_work_package tags: - Work Packages description: "When calling this endpoint the client provides a single object, containing the properties and links that it wants\nto change, in the body. Note that it is only allowed to provide properties or links supporting the **write**\noperation.\n\nAdditionally to the fields the client wants to change, it is mandatory to provide the value of `lockVersion` which\nwas received by the `GET` request this change originates from.\n\nThe value of `lockVersion` is used to implement\n[optimistic locking](https://en.wikipedia.org/wiki/Optimistic_concurrency_control).\n\n**Custom Field Validation** \n\nRequired custom fields are only validated when they are explicitly provided in the request body. If a custom field\nis not included in the update request, it will not be validated. This enables clients to update\nspecific attributes independently without having to provide values for all required custom fields.\n\nTo override this behavior and validate all required custom fields regardless of whether they are included in the\nrequest, set `validateCustomFields` to `true` in the `_meta` object of the request body." parameters: - name: id description: Work package id in: path required: true schema: type: integer example: 42 - name: notify description: |- Indicates whether change notifications should be sent. Note that this controls notifications for all users interested in changes to the work package (e.g. watchers, author and assignee), not just the current user. in: query required: false schema: type: boolean default: true example: false requestBody: content: application/json: schema: "$ref": "#/components/schemas/WorkPackagePatchModel" examples: With custom field validation: "$ref": "#/components/examples/WorkPackageWithMetaValidation" responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/WorkPackageModel" description: OK '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to edit the content of the work package. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit work package, assign version, change work package status, manage subtasks or move work package '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified work package does not exist. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package '406': "$ref": "#/components/responses/MissingContentType" '409': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:UpdateConflict message: Your changes could not be saved, because the work package was changed since you've seen it the last time. description: Returned if the resource was changed since the client requested it. This is determined using the `lockVersion` property. '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _embedded: details: attribute: Subject _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: The subject might not be blank. description: |- Returned if: - the client tries to modify a read-only property (`PropertyIsReadOnly`) - a constraint for a property was violated (`PropertyConstraintViolation`) - the client provides a link to an invalid resource (`ResourceTypeMismatch`) "/api/v3/work_packages/{id}/activities": get: parameters: - description: Work package id example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: self: href: "/api/v3/activity/1" user: href: "/api/v3/users/1" workPackage: href: "/api/v3/work_packages/1" _type: Activity comment: format: markdown html: "Lorem ipsum dolor sit amet.
" raw: Lorem ipsum dolor sit amet. createdAt: '2014-05-21T08:51:20.396Z' updatedAt: '2014-05-21T09:14:02.726Z' details: [] id: 1 version: 1 - _links: self: href: "/api/v3/activity/2" user: href: "/api/v3/users/1" workPackage: href: "/api/v3/work_packages/1" _type: Activity comment: format: markdown html: "Lorem ipsum dolor sit amet.
" raw: Lorem ipsum dolor sit amet. createdAt: '2014-05-21T09:51:22.077Z' updatedAt: '2014-05-21T10:14:02.957Z' details: [] id: 2 version: 2 _links: self: href: "/api/v3/work_packages/1/revisions" _type: Collection count: 2 total: 2 schema: "$ref": "#/components/schemas/Work_Package_activitiesModel" description: OK headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified work package does not exist. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package headers: {} tags: - Work Packages description: '' operationId: List_work_package_activities summary: List work package activities post: parameters: - description: Work package id example: 1 in: path name: id required: true schema: type: integer - description: |- Indicates whether change notifications (e.g. via E-Mail) should be sent. Note that this controls notifications for all users interested in changes to the work package (e.g. watchers, author and assignee), not just the current user. example: false in: query name: notify required: false schema: default: true type: boolean responses: '201': description: Created headers: {} '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to create a comment here. description: |- Returned if the client does not have sufficient permissions. **Required permission:** create journals *Note that you will only receive this error, if you are at least allowed to see the corresponding work package.* headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified work package does not exist. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package headers: {} tags: - Work Packages description: |- Creates an activity for the selected work package and, on success, returns the updated activity. operationId: Comment_work_package requestBody: content: application/json: schema: "$ref": "#/components/schemas/ActivityCommentWriteModel" summary: Comment work package "/api/v3/work_packages/{id}/activities_emoji_reactions": get: summary: List emoji reactions by work package activities operationId: list_work_package_activities_emoji_reactions tags: - WorkPackages - Activities - EmojiReactions description: List all emoji reactions of all activities of a single work package. parameters: - name: id description: ID of the work package whose activities' emoji reactions will be listed in: path required: true schema: type: integer example: 1 responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/EmojiReactions_Model" '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** - `view_work_packages` - for internal comments: `view_internal_comments` *Note: A client without sufficient permissions shall not be able to test for the existence of a work package. That's why a 404 is returned here, even if a 403 might be more appropriate.* "/api/v3/work_packages/{id}/attachments": get: parameters: - description: ID of the work package whose attachments will be listed example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/Attachments_Model" description: OK '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified work package does not exist. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package *Note: A client without sufficient permissions shall not be able to test for the existence of a work package. That's why a 404 is returned here, even if a 403 might be more appropriate.* tags: - Attachments description: '' operationId: list_work_package_attachments summary: List attachments by work package post: parameters: - description: ID of the work package to receive the attachment example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: schema: "$ref": "#/components/schemas/AttachmentModel" description: OK '400': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidRequestBody message: The request could not be parsed as JSON. description: |- Returned if the client sends a not understandable request. Reasons include: * Omitting one of the required parts (metadata and file) * sending unparsable JSON in the metadata part '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to delete this attachment. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit work package or add work package *Note that you will only receive this error, if you are at least allowed to see the work package.* '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified work package does not exist. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package *Note: A client without sufficient permissions shall not be able to test for the existence of a work package. That's why a 404 is returned here, even if a 403 might be more appropriate.* '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: File is too large (maximum size is 5242880 Bytes). description: |- Returned if the client tries to send an invalid attachment. Reasons are: * Omitting the file name (`fileName` property of metadata part) * Sending a file that is too large tags: - Attachments description: |- To add an attachment to a work package, a client needs to issue a request of type `multipart/form-data` with exactly two parts. The first part *must* be called `metadata`. Its content type is expected to be `application/json`, the body *must* be a single JSON object, containing at least the `fileName` and optionally the attachments `description`. The second part *must* be called `file`, its content type *should* match the mime type of the file. The body *must* be the raw content of the file. Note that a `filename` must be indicated in the `Content-Disposition` of this part, however it will be ignored. Instead the `fileName` inside the JSON of the metadata part will be used. operationId: create_work_package_attachment summary: Create work package attachment "/api/v3/work_packages/{id}/available_assignees": get: parameters: - description: Work package id example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: delete: href: "/api/v3/users/1" method: DELETE title: Delete j.sheppard lock: href: "/api/v3/users/1/lock" method: POST title: Set lock on j.sheppard self: href: "/api/v3/users/1" title: John Sheppard - j.sheppard _type: User avatar: https://example.org/users/1/avatar createdAt: '2014-05-21T08:51:20.396Z' email: shep@mail.com firstName: John id: 1 lastName: Sheppard login: j.sheppard status: active updatedAt: '2014-05-21T08:51:20.396Z' - _links: delete: href: "/api/v3/users/2" method: DELETE title: Delete j.sheppard2 lock: href: "/api/v3/users/2/lock" method: POST title: Set lock on j.sheppard2 self: href: "/api/v3/users/2" title: Jim Sheppard - j.sheppard2 _type: User avatar: https://example.org/users/1/avatar createdAt: '2014-05-21T08:51:20.396Z' email: shep@mail.net firstName: Jim id: 2 lastName: Sheppard login: j.sheppard2 status: active updatedAt: '2014-05-21T08:51:20.396Z' _links: self: href: "/api/v3/work_packages/42/available_assignees" _type: Collection count: 2 total: 2 schema: "$ref": "#/components/schemas/Available_AssigneesModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not allowed to see the assignable users for this work package. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit work packages *Note that you will only receive this error, if you are at least allowed to see the corresponding work package.* headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The work package you are looking for cannot be found or has been deleted. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work packages headers: {} tags: - Work Packages description: Gets a list of users that can be assigned to the given work package. operationId: Work_Package_Available_assignees summary: Work Package Available assignees "/api/v3/work_packages/{id}/available_projects": get: parameters: - description: work package id example: 1 in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: categories: href: "/api/v3/projects/6/categories" createWorkPackage: href: "/api/v3/projects/6/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/projects/6/work_packages" method: post editWorkPackage: href: "/api/v3//work_packages/{id}/form" method: post templated: true self: href: "/api/v3/projects/6" title: A project versions: href: "/api/v3/projects/6/versions" _type: Project createdAt: '2015-07-06T13:28:14+00:00' description: Eveniet molestias omnis quis aut qui eum adipisci. Atque aut aut in exercitationem adipisci amet. Nisi asperiores quia ratione veritatis enim exercitationem magnam. Aut fuga architecto adipisci nihil. Et repellat pariatur. Aliquam et sed perferendis nostrum quaerat. Fugit doloremque voluptatem. id: 6 identifier: a_project name: A project type: Customer Project updatedAt: '2015-10-01T09:55:02+00:00' - _links: categories: href: "/api/v3/projects/14/categories" createWorkPackage: href: "/api/v3/projects/14/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/projects/14/work_packages" method: post self: href: "/api/v3/projects/14" title: Another project versions: href: "/api/v3/projects/14/versions" _type: Project createdAt: '2016-02-29T12:50:20+00:00' description: '' id: 14 identifier: another_project name: Another project type: updatedAt: '2016-02-29T12:50:20+00:00' _links: self: href: "/api/v3/work_packages/5/available_projects" _type: Collection count: 2 total: 2 schema: "$ref": "#/components/schemas/Available_projects_for_work_packageModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** edit work package *Note that you will only receive this error, if you are at least allowed to see the corresponding work package.* headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified work package does not exist. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package headers: {} tags: - Work Packages description: Gets a list of projects that are available as projects to which the work package can be moved. operationId: Available_projects_for_work_package summary: Available projects for work package "/api/v3/work_packages/{id}/available_relation_candidates": get: summary: Available relation candidates operationId: list_available_relation_candidates tags: - Work Packages description: '' parameters: - description: Project id example: 1 in: path name: id required: true schema: type: integer - description: Maximum number of candidates to list (default 10) example: 25 in: query name: pageSize required: false schema: type: integer - description: |- JSON specifying filter conditions. Accepts the same filters as the [work packages](https://www.openproject.org/docs/api/endpoints/work-packages/) endpoint. example: '[{ "status_id": { "operator": "o", "values": null } }]' in: query name: filters required: false schema: type: string - description: Shortcut for filtering by ID or subject example: '"rollout"' in: query name: query required: false schema: type: string - description: Type of relation to find candidates for (default "relates") example: '"follows"' in: query name: type required: false schema: type: string - description: |- JSON specifying sort criteria. Accepts the same sort criteria as the [work packages](https://www.openproject.org/docs/api/endpoints/work-packages/) endpoint. example: '[["status", "asc"]]' in: query name: sortBy required: false schema: default: '[["id", "asc"]]' type: string responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: self: href: "/api/v3/work_packages/1" _type: WorkPackage id: 1 subject: Skipped other properties for brevity - _links: self: href: "/api/v3/work_packages/2" _type: WorkPackage id: 2 subject: Skipped other properties for brevity _links: self: href: "/api/v3/projects/14/work_packages" _type: Collection count: 2 total: 2 schema: "$ref": "#/components/schemas/Available_relation_candidatesModel" description: OK '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified work package does not exist. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package "/api/v3/work_packages/{id}/available_watchers": get: parameters: - description: work package id example: '1' in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: delete: href: "/api/v3/users/1" method: DELETE title: Delete j.sheppard lock: href: "/api/v3/users/1/lock" method: POST title: Set lock on j.sheppard self: href: "/api/v3/users/1" title: John Sheppard - j.sheppard _type: User avatar: https://example.org/users/1/avatar createdAt: '2014-05-21T08:51:20.396Z' email: shep@mail.com firstName: John id: 1 lastName: Sheppard login: j.sheppard status: active updatedAt: '2014-05-21T08:51:20.396Z' - _links: delete: href: "/api/v3/users/2" method: DELETE title: Delete j.sheppard2 lock: href: "/api/v3/users/2/lock" method: POST title: Set lock on j.sheppard2 self: href: "/api/v3/users/2" title: Jim Sheppard - j.sheppard2 _type: User avatar: https://example.org/users/1/avatar createdAt: '2014-05-21T08:51:20.396Z' email: shep@mail.net firstName: Jim id: 2 lastName: Sheppard login: j.sheppard2 status: active updatedAt: '2014-05-21T08:51:20.396Z' _links: self: href: "/api/v3/work_packages/1/available_watchers" _type: Collection count: 2 total: 2 schema: "$ref": "#/components/schemas/Available_WatchersModel" description: OK headers: {} '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** add work package watchers *Note that you will only receive this error, if you are at least allowed to see the corresponding work package.* headers: {} '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified work package does not exist. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package headers: {} tags: - Work Packages description: Gets a list of users that are able to be watchers of the specified work package. operationId: Available_watchers summary: Available watchers "/api/v3/work_packages/{id}/file_links": post: summary: Creates file links. operationId: create_work_package_file_link tags: - Work Packages - File links description: |- Creates file links on a work package. The request is interpreted as a bulk insert, where every element of the collection is validated separately. Each element contains the origin meta data and a link to the storage, the file link is about to point to. The storage link can be provided as a resource link with id or as the host url. The file's id and name are considered mandatory information. The rest of the origin meta data SHOULD be provided by the client. The _mimeType_ SHOULD be a standard mime type. An empty mime type will be handled as unknown. To link a folder, the custom mime type `application/x-op-directory` MUST be used. Up to 20 file links can be submitted at once. If any element data is invalid, no file links will be created. If a file link with matching origin id, work package, and storage already exists, then it will not create an additional file link or update the meta data. Instead the information from the existing file link will be returned. parameters: - name: id description: Work package id in: path required: true schema: type: integer example: 1337 requestBody: content: application/json: schema: "$ref": "#/components/schemas/FileLinkCollectionWriteModel" example: _type: Collection _embedded: elements: - originData: id: 5503 name: logo.png mimeType: image/png size: 433765 createdAt: '2021-12-19T09:42:10.170Z' lastModifiedAt: '2021-12-20T14:00:13.987Z' createdByName: Luke Skywalker lastModifiedByName: Anakin Skywalker _links: storageUrl: href: https://nextcloud.deathstar.rocks/ responses: '201': description: Created content: application/hal+json: schema: "$ref": "#/components/schemas/FileLinkCollectionReadModel" '400': "$ref": "#/components/responses/InvalidRequestBody" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** manage file links *Note that you will only receive this error, if you are at least allowed to see the corresponding work package.* '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package, view file links '406': "$ref": "#/components/responses/MissingContentType" '415': "$ref": "#/components/responses/UnsupportedMediaType" '422': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: The request was invalid. File Link logo.png - Storage was invalid. description: |- Occurs if the request body was correctly formatted, but some properties lead to errors in the validation process. This happens e.g. if the provided storage url is not available on the server. get: summary: Gets all file links of a work package operationId: list_work_package_file_links tags: - Work Packages - File links description: "Gets all file links of a work package.\n\nAs a side effect, for every file link a request is sent to the storage's origin to fetch live data and patch\nthe file link's data before returning, as well as retrieving permissions of the user on this origin file. " parameters: - name: id description: Work package id in: path required: true schema: type: integer example: 1337 - name: filters in: query description: |- JSON specifying filter conditions. Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. The following filters are supported: - storage required: false example: '[{"storage":{"operator":"=","values":["42"]}}]' schema: type: string responses: '200': description: OK content: application/hal+json: schema: "$ref": "#/components/schemas/FileLinkCollectionReadModel" '403': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission message: You are not authorized to access this resource. description: |- Returned if the client does not have sufficient permissions. **Required permission:** view file links *Note that you will only receive this error, if you are at least allowed to see the corresponding work package.* '404': content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The requested resource could not be found. description: |- Returned if the work package does not exist or the client does not have sufficient permissions to see it. **Required permission:** view work package "/api/v3/work_packages/{id}/form": post: summary: Form for editing a Work Package operationId: form_edit_work_package tags: - Work Packages description: "When calling this endpoint, the client provides a single object containing the properties and links to be\nedited, in the body. The input is validated and a schema response is returned. If the validation errors of the\nresponse is empty, the same payload can be used to edit the work package.\n\nOnly the properties of the work package write model are allowed to set on a work package on editing.\n\nWhen setting start date, finish date, and duration together, their correctness will be checked and a validation\nerror will be returned if one value does not match with the two others. You can make the server compute a value:\nset only two values in the request and the third one will be computed and returned in the response. For instance,\nwhen sending `{ \"startDate\": \"2022-08-23\", duration: \"P2D\" }`, the response will\ninclude `{ \"dueDate\": \"2022-08-24\" }`.\n\n**Custom Field Validation** \n\nRequired custom fields are only validated when they are explicitly provided in the request body. If a custom field\nis not included in the form request, it will not be validated, allowing clients to validate partial updates\nwithout triggering validation errors for unrelated required custom fields.\n\nTo override this behavior and validate all required custom fields regardless of whether they are included in the\nrequest, set `validateCustomFields` to `true` in the `_meta` object of the request body." requestBody: content: application/json: schema: "$ref": "#/components/schemas/WorkPackageWriteModel" examples: Changing subject: "$ref": "#/components/examples/WorkPackageEditSubject" With custom field validation: "$ref": "#/components/examples/WorkPackageWithMetaValidation" parameters: - name: id description: ID of the work package being modified in: path required: true schema: type: integer example: 1 responses: '200': description: OK content: application/json: schema: "$ref": "#/components/schemas/WorkPackageFormModel" '404': description: "Returned if the work package does not exist or the client does not have sufficient permissions to see it.\t\n\n**Required permission:** view work package" content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" examples: response: value: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:NotFound message: The specified work package does not exist. '415': "$ref": "#/components/responses/UnsupportedMediaType" "/api/v3/work_packages/{id}/revisions": get: parameters: - description: Work package id example: '1' in: path name: id required: true schema: type: integer responses: '200': content: application/hal+json: examples: response: value: _embedded: elements: - _links: author: href: "/api/v3/users/1" title: John Sheppard - j.sheppard project: href: "/api/v3/projects/1" title: A Test Project self: href: "/api/v3/revisions/13" showRevision: href: "/projects/identifier/repository/revision/11f4b07" _type: Revision authorName: John Sheppard createdAt: '2015-07-21T13:36:59.220Z' formattedIdentifier: 11f4b07 id: 13 identifier: 11f4b07dff4f4ce9548a52b7d002daca7cd63ec6 message: format: plain html: "This revision provides new features
An
elaborate description
This revision fixes some stuff
More information
here
I can give you a CR70 corvette, you have to make do, Leia...
details: [] version: 4 internal: false createdAt: '2025-04-17T13:54:40.737Z' updatedAt: '2025-04-17T13:54:40.737Z' _embedded: attachments: _type: Collection total: 1 count: 1 _abbreviated: Attachments resource shortened for brevity. workPackage: id: 207 _type: WorkPackage _abbreviated: Work package resource shortened for brevity. emojiReactions: _type: Collection total: 1 count: 1 _abbreviated: Emoji reactions resource shortened for brevity. _links: attachments: href: "/api/v3/activities/1478/attachments" addAttachment: href: "/api/v3/activities/1478/attachments" method: post self: href: "/api/v3/activities/1478" workPackage: href: "/api/v3/work_packages/207" title: Recover Death Star blueprints user: href: "/api/v3/users/33" update: href: "/api/v3/activities/1478" method: patch DateAlertNotification: value: _type: Notification id: 1 readIAN: false reason: dateAlert createdAt: '2022-04-05T14:38:28.361Z' updatedAt: '2022-04-06T09:03:24.347Z' _embedded: project: _abbreviated: Project resource shortened for brevity _type: Project id: 11 name: Jedi Remnant Locator resource: _abbreviated: WorkPackage resource shortened for brevity _type: WorkPackage id: 77 subject: Educate Visas Marr details: - _type: Values::Property property: startDate value: '2021-01-01' _links: self: href: api/v3/notifications/123/details/0 schema: href: api/v3/values/schemas/startDate _links: self: href: "/api/v3/notifications/1" readIAN: href: "/api/v3/notifications/1/read_ian" method: post actor: href: project: href: "/api/v3/projects/11" title: Jedi Remnant Locator activity: href: resource: href: "/api/v3/work_packages/77" title: Educate Visas Marr GridSimpleCollectionResponse: value: _type: Collection total: 1 count: 1 pageSize: 30 offset: 1 _embedded: elements: - _type: Grid id: 2 rowCount: 8 columnCount: 5 widgets: - _type: GridWidget id: 1 identifier: time_entries_current_user startRow: 1 endRow: 8 startColumn: 1 endColumn: 3 - _type: GridWidget id: 2 identifier: news startRow: 3 endRow: 8 startColumn: 4 endColumn: 5 - _type: GridWidget id: 3 identifier: documents startRow: 1 endRow: 3 startColumn: 3 endColumn: 6 createdAt: '2018-12-03T16:58:30.297Z' updatedAt: '2018-12-13T19:36:40.352Z' _links: scope: href: "/my/page" type: text/html updateImmediately: href: "/api/v3/grids/2" method: patch update: href: "/api/v3/grids/2/form" method: post self: href: "/api/v3/grids/2" _links: self: href: "/api/v3/grids" jumpTo: href: "/api/v3/grids?filters=%5B%5D&offset=%7Boffset%7D&pageSize=20" templated: true changeSize: href: "/api/v3/grids?filters=%5B%5D&offset=1&pageSize=%7Bsize%7D" templated: true GridSimplePatchModel: value: rowCount: 1 columnCount: 2 widgets: - _type: GridWidget identifier: tasks startRow: 1 endRow: 2 startColumn: 1 endColumn: 2 options: name: Tasks - _type: GridWidget identifier: news startRow: 1 endRow: 2 startColumn: 2 endColumn: 3 options: name: News _links: scope: href: "/my/page" type: text/html GridSimpleResponse: value: _type: Grid id: 2 rowCount: 8 columnCount: 5 widgets: - _type: GridWidget id: 1 identifier: tasks startRow: 1 endRow: 8 startColumn: 1 endColumn: 3 - _type: GridWidget id: 2 identifier: news startRow: 3 endRow: 8 startColumn: 4 endColumn: 5 - _type: GridWidget id: 3 identifier: documents startRow: 1 endRow: 3 startColumn: 3 endColumn: 6 createdAt: '2018-12-03T16:58:30.915Z' updatedAt: '2018-12-13T19:36:40.588Z' _links: self: href: "/api/v3/grids/2" attachments: href: "/api/v3/grids/2/attachments" addAttachment: href: "/api/v3/grids/2/attachments" method: post scope: href: "/my/page" type: text/html updateImmediately: href: "/api/v3/grids/2" method: patch update: href: "/api/v3/grids/2/form" method: post delete: href: "/api/v3/grids/2" method: delete GroupResponse: value: _type: Group id: 26 name: Force Users createdAt: '2024-01-11T15:54:16.542Z' updatedAt: '2024-01-11T15:58:02.237Z' _embedded: members: - _type: User id: 23 name: Grogu Jarin _abbreviated: Principal resource shortened for brevity - _type: User id: 14 name: Mara Jade _abbreviated: Principal resource shortened for brevity - _type: User id: 3 name: Darth Vader _abbreviated: Principal resource shortened for brevity _links: self: href: "/api/v3/groups/26" title: Force Users memberships: href: "/api/v3/memberships?filters=%5B%7B%22principal%22%3A%7B%22operator%22%3A%22%3D%22%2C%22values%22%3A%5B%2226%22%5D%7D%7D%5D" title: Memberships delete: href: "/api/v3/groups/26" method: delete updateImmediately: href: "/api/v3/groups/26" method: patch members: - href: "/api/v3/users/23" title: Grogu Jarin - href: "/api/v3/users/14" title: Mara Jade - href: "/api/v3/users/3" title: Darth Vader HierarchyItemCollectionFilteredResponse: description: Filtered response of a hierarchy structure starting at a specific parent and restricting the depth. value: _type: Collection total: 3 count: 3 _embedded: elements: - _type: HierarchyItem id: 1338 label: Stormtroopers short: ST weight: formattedWeight: depth: 1 _links: self: href: "/api/v3/custom_field_items/1338" name: Stormtroopers parent: href: "/api/v3/custom_field_items/1337" name: branch: href: "/api/v3/custom_field_items/1338/branch" children: - href: "/api/v3/custom_field_items/1340" name: ST-377 - href: "/api/v3/custom_field_items/1341" name: ST-422 - _type: HierarchyItem id: 1340 label: ST-377 short: weight: formattedWeight: depth: 2 _links: self: href: "/api/v3/custom_field_items/1340" name: ST-377 parent: href: "/api/v3/custom_field_items/1338" name: Stormtroopers branch: href: "/api/v3/custom_field_items/1340/branch" children: - href: "/api/v3/custom_field_items/1480" name: ST-377-200 - href: "/api/v3/custom_field_items/1481" name: ST-377-201 - _type: HierarchyItem id: 1341 label: ST-422 short: weight: formattedWeight: depth: 2 _links: self: href: "/api/v3/custom_field_items/1341" name: ST-422 parent: href: "/api/v3/custom_field_items/1338" name: Stormtroopers branch: href: "/api/v3/custom_field_items/1341/branch" children: - href: "/api/v3/custom_field_items/1580" name: ST-422-137 - href: "/api/v3/custom_field_items/1581" name: ST-422-138 _links: self: href: "/api/v3/custom_field/42/items?parent=1338&depth=1" HierarchyItemCollectionResponse: description: Simple response of a hierarchy structure starting at root. value: _type: Collection total: 37 count: 37 _embedded: elements: - _type: HierarchyItem id: 1337 label: short: weight: formattedWeight: depth: 0 _links: self: href: "/api/v3/custom_field_items/1337" branch: href: "/api/v3/custom_field_items/1337/branch" children: - href: "/api/v3/custom_field_items/1338" name: Stormtroopers - href: "/api/v3/custom_field_items/1339" name: Dark Troopers - _type: HierarchyItem id: 1338 label: Stormtroopers short: ST weight: formattedWeight: depth: 1 _links: self: href: "/api/v3/custom_field_items/1338" name: Stormtroopers parent: href: "/api/v3/custom_field_items/1337" name: Imperial Troopers branch: href: "/api/v3/custom_field_items/1338/branch" children: - href: "/api/v3/custom_field_items/1340" name: ST-377 - href: "/api/v3/custom_field_items/1341" name: ST-422 - _type: HierarchyItem id: 1340 label: ST-377 short: weight: formattedWeight: depth: 2 _links: self: href: "/api/v3/custom_field_items/1340" branch: href: "/api/v3/custom_field_items/1340/branch" children: [] _links: self: href: "/api/v3/custom_field/42/items" HierarchyItemResponse: description: Simple response of a single item of a custom field of type hierarchy. value: _type: HierarchyItem id: 1338 label: Stormtroopers short: ST weight: formattedWeight: depth: 1 _links: self: href: "/api/v3/custom_field_items/1338" name: Stormtroopers parent: href: "/api/v3/custom_field_items/1337" name: branch: href: "/api/v3/custom_field_items/1338/branch" children: - href: "/api/v3/custom_field_items/1340" name: ST-377 - href: "/api/v3/custom_field_items/1341" name: ST-422 MeetingCollectionSimpleResponse: description: A simple response of a meeting collection. value: _type: Collection total: 2 count: 2 pageSize: 20 offset: 1 _embedded: _abbreviated: Embedded resources shortened for brevity elements: - _type: Meeting id: 6 title: Weekly startTime: '2026-02-17T20:54:35.523Z' endTime: '2026-02-17T21:54:35.523Z' - _type: Meeting id: 5 title: Weekly startTime: '2026-02-10T20:54:35.523Z' endTime: '2026-02-10T21:54:35.523Z' _links: self: href: "/api/v3/meetings?filters=%5B%5D&offset=1&pageSize=20" jumpTo: href: "/api/v3/meetings?filters=%5B%5D&offset=%7Boffset%7D&pageSize=20" templated: true changeSize: href: "/api/v3/meetings?filters=%5B%5D&offset=1&pageSize=%7Bsize%7D" templated: true MeetingSimpleResponse: description: A simple meeting response. value: _type: Meeting id: 1 title: Meeting No 42 location: Death Star - Level 1337 L13/42 lockVersion: 13 startTime: '2026-02-16T10:00:00.000Z' endTime: '2026-02-16T11:00:00.000Z' duration: 1.0 createdAt: '2026-02-13T14:47:12.315Z' updatedAt: '2026-02-13T14:47:12.315Z' _links: attachments: href: "/api/v3/meetings/1/attachments" addAttachment: href: "/api/v3/meetings/1/attachments" method: post self: href: "/api/v3/meetings/1" title: Meeting No 42 author: href: "/api/v3/users/4" title: Darth Vader project: href: "/api/v3/projects/10" title: Death Star _embedded: _abbreviated: Embedded resources shortened for brevity attachments: _type: Collection total: 2 count: 2 author: _type: User name: Darth Vader id: 4 project: _type: Project name: Death Star id: 10 MembershipCreateRequestCustomMessage: description: Create a membership and send a custom notification message. value: _links: principal: href: "/api/v3/users/14" project: href: "/api/v3/projects/21" roles: - href: "/api/v3/roles/4" _meta: notificationMessage: format: markdown raw: Granted permission to execute Order *66*. MembershipCreateRequestGlobalRole: description: Create a membership for a global role. To address global roles, no project must be set. value: _links: principal: href: "/api/v3/users/14" roles: - href: "/api/v3/roles/4" MembershipCreateRequestNoNotification: description: Create a membership without sending a notification message. value: _links: principal: href: "/api/v3/users/14" project: href: "/api/v3/projects/21" roles: - href: "/api/v3/roles/4" _meta: sendNotification: false MembershipFormResponse: description: A simple form response example. value: _type: Form _embedded: payload: _meta: notificationMessage: format: markdown raw: "*Hallo*" html:Hallo
_links: project: href: "/api/v3/projects/21" title: Death Star v3 principal: href: "/api/v3/users/14" title: Mara Jade roles: [] schema: _type: Schema _abbreviated: Schema resource shortened for brevity validationErrors: roles: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation message: Roles need to be assigned. _embedded: details: attribute: roles _links: self: href: "/api/v3/memberships/form" method: post validate: href: "/api/v3/memberships/form" method: post MembershipSchemaResponse: description: A simple schema response example. value: _type: Schema _dependencies: [] id: type: Integer name: ID required: true hasDefault: false writable: false options: {} createdAt: type: DateTime name: Created on required: true hasDefault: false writable: false options: {} updatedAt: type: DateTime name: Updated on required: true hasDefault: false writable: false options: {} notificationMessage: type: Formattable name: Message required: false hasDefault: false writable: true options: {} location: _meta project: type: Project name: Project required: false hasDefault: false writable: true location: _links _links: allowedValues: href: "/api/v3/memberships/available_projects?filters=%5B%7B%22principal%22%3A%7B%22operator%22%3A%22%21%22%2C%22values%22%3A%5B%2214%22%5D%7D%7D%5D" principal: type: Principal name: Principal required: true hasDefault: false writable: true location: _links _links: allowedValues: href: "/api/v3/principals?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22%21%22%2C%22values%22%3A%5B%223%22%5D%7D%7D%2C%7B%22member%22%3A%7B%22operator%22%3A%22%21%22%2C%22values%22%3A%5B%2221%22%5D%7D%7D%5D" roles: type: "[]Role" name: Role required: true hasDefault: false writable: true location: _links _links: allowedValues: href: "/api/v3/roles" _links: self: href: "/api/v3/memberships/schema" MembershipSimpleCollectionResponse: description: A simple membership collection response example. value: _type: Collection total: 1 count: 1 pageSize: 20 offset: 1 _embedded: elements: - _type: Membership id: 11 createdAt: '2015-03-20T12:56:56.643Z' updatedAt: '2018-12-20T18:16:11.643Z' _links: self: href: "/api/v3/memberships/11" title: Darth Vader schema: href: "/api/v3/memberships/schema" update: href: "/api/v3/memberships/11/form" method: post updateImmediately: href: "/api/v3/memberships/11" method: patch project: href: "/api/v3/projects/3" title: Death Start v3 principal: href: "/api/v3/users/5" title: Darth Vader roles: - href: "/api/v3/roles/4" title: Sith Lord _links: self: href: "/api/v3/memberships" jumpTo: href: "/api/v3/memberships?filters=%5B%5D&offset=%7Boffset%7D&pageSize=20" templated: true changeSize: href: "/api/v3/memberships?filters=%5B%5D&offset=1&pageSize=%7Bsize%7D" templated: true nextByOffset: href: "/api/v3/memberships?filters=%5B%5D&offset=2&pageSize=20" MembershipSimpleResponse: description: A simple membership response example. value: _type: Membership id: 11 createdAt: '2015-03-20T12:56:56.626Z' updatedAt: '2018-12-20T18:16:11.563Z' _embedded: project: _type: Project id: 3 _abbreviated: Project resource shortened for brevity principal: _type: User id: 5 _abbreviated: User resource shortened for brevity roles: - _type: Role id: 4 _abbreviated: Roles resource shortened for brevity _links: self: href: "/api/v3/memberships/11" title: Darth Vader schema: href: "/api/v3/memberships/schema" update: href: "/api/v3/memberships/11/form" method: post updateImmediately: href: "/api/v3/memberships/11" method: patch project: href: "/api/v3/projects/3" title: Death Start v3 principal: href: "/api/v3/users/5" title: Darth Vader roles: - href: "/api/v3/roles/4" title: Sith Lord MembershipUpdateAdditionalRoles: description: Updates a membership and add multiple roles. value: _links: roles: - href: "/api/v3/roles/5" - href: "/api/v3/roles/6" MentionedNotification: value: _type: Notification id: 1 readIAN: false reason: mentioned createdAt: '2022-04-05T14:38:28.881Z' updatedAt: '2022-04-06T09:03:24.591Z' _embedded: author: _abbreviated: User resource shortened for brevity _type: User id: 13 name: Darth Nihilus project: _abbreviated: Project resource shortened for brevity _type: Project id: 11 name: Jedi Remnant Locator activity: _abbreviated: Activity resource shortened for brevity _type: Activity::Comment id: 180 version: 3 resource: _abbreviated: WorkPackage resource shortened for brevity _type: WorkPackage id: 77 subject: Educate Visas Marr details: [] _links: self: href: "/api/v3/notifications/1" readIAN: href: "/api/v3/notifications/1/read_ian" method: post actor: href: "/api/v3/users/13" title: Darth Nihilus project: href: "/api/v3/projects/11" title: Jedi Remnant Locator activity: href: "/api/v3/activities/180" resource: href: "/api/v3/work_packages/77" title: Educate Visas Marr NotificationCollection: value: _type: Collection count: 2 total: 2 offset: 1 pageSize: 20 _embedded: elements: - _abbreviated: Notification resource shortened for brevity id: 1 readIAN: false reason: mentioned - _abbreviated: Notification resource shortened for brevity id: 2 readIAN: false reason: dateAlert _embedded: details: - _type: Values::Property property: startDate value: '2021-01-01' _links: self: href: api/v3/notifications/123/details/0 schema: href: api/v3/values/schemas/startDate detailsSchemas: - _type: Schema property: name: Property type: String value: name: Start date type: Date _links: self: href: "/api/v3/values/schemas/startDate" _links: self: href: "/api/v3/notifications?offset=1&pageSize=20" jumpTo: href: "/api/v3/notifications?filters=%5B%5D&offset=%7Boffset%7D&pageSize=20" templated: true changeSize: href: "/api/v3/notifications?filters=%5B%5D&offset=1&pageSize=%7Bsize%7D" templated: true PlaceholderUserResponse: value: _type: PlaceholderUser id: 27 name: Akolyth createdAt: '2024-02-12T11:52:24.708Z' updatedAt: '2024-02-12T11:52:24.708Z' _links: self: href: "/api/v3/placeholder_users/27" title: Akolyth memberships: href: "/api/v3/memberships?filters=%5B%7B%22principal%22%3A%7B%22operator%22%3A%22%3D%22%2C%22values%22%3A%5B%2227%22%5D%7D%7D%5D" title: Memberships updateImmediately: href: "/api/v3/placeholder_users/27" title: Update Akolyth method: patch delete: href: "/api/v3/placeholder_users/27" title: Delete Akolyth method: delete showUser: href: "/placeholder_users/27" type: text/html Portfolio: value: _type: Portfolio _links: self: href: "/api/v3/portfolios/1" title: Lorem createWorkPackage: href: "/api/v3/portfolios/1/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/portfolios/1/work_packages" method: post categories: href: "/api/v3/portfolios/1/categories" types: href: "/api/v3/portfolios/1/types" versions: href: "/api/v3/portfolios/1/versions" workPackages: href: "/api/v3/portfolios/1/work_packages" memberships: href: /api/v3/memberships?filters=[{"project":{"operator":"=","values":["1"]}}] customField456: href: "/api/v3/users/315" title: A user parent: href: "/api/v3/portfolios/123" title: Parent portfolio ancestors: - href: "/api/v3/portfolios/2" title: Root portfolio - href: "/api/v3/portfolios/12" title: Grandparent portfolio - href: "/api/v3/portfolios/123" title: Parent portfolio status: href: "/api/v3/project_statuses/on_track" title: On track id: 1 identifier: connect2025 name: Digital Connect 2030 active: true public: false statusExplanation: format: markdown raw: Everything **fine** html: "Everything fine
" description: format: markdown raw: This collection showcases a diverse selection of projects that highlight our commitment to excellence and our passion for design. From innovative web applications to stunning graphic designs, each piece reflects our unique approach and dedication to delivering impactful solutions. Discover the journey of our work and see how we bring ideas to life. html: "This collection showcases a diverse selection of projects that highlight our commitment to excellence and our passion for design. From innovative web applications to stunning graphic designs, each piece reflects our unique approach and dedication to delivering impactful solutions. Discover the journey of our work and see how we bring ideas to life.
" createdAt: '2014-05-21T08:51:20.396Z' updatedAt: '2014-05-21T08:51:20.396Z' customField123: 123 customComment123: Why is the value 123? PortfolioBody: value: name: Portfolio example statusExplanation: raw: Everything **fine** description: raw: Lorem **ipsum** dolor sit amet customField123: 123 customComment123: Because it is 123! _links: parent: href: "/api/v3/portfolios/123" customField456: href: "/api/v3/portfolios/315" PortfolioCollection: value: _type: Collection count: 2 total: 2 pageSize: 20 offset: 1 _embedded: elements: - _hint: Portfolio resource shortened for brevity id: 1 identifier: connect2030 name: Digital Connect 2030 active: true public: true - _hint: Portfolio resource shortened for brevity id: 2 identifier: future2050 name: Digital Future 2050 active: true public: false _links: self: href: "/api/v3/portfolios?filters=%5B%5D&offset=1&pageSize=20" jumpTo: href: "/api/v3/portfolios?filters=%5B%5D&offset=%7Boffset%7D&pageSize=20" templated: true changeSize: href: "/api/v3/portfolios?filters=%5B%5D&offset=1&pageSize=%7Bsize%7D" templated: true representations: - href: "/portfolios.csv?filters=%5B%5D&offset=1&pageSize=20" identifier: csv type: text/csv title: CSV - href: "/portfolios.xls?filters=%5B%5D&offset=1&pageSize=20" identifier: xls type: application/vnd.ms-excel title: XLS PriorityCollection: value: _embedded: elements: - _links: self: href: "/api/v3/priorities/1" title: Low _type: Priority id: 1 isActive: true isDefault: false name: Low position: 1 - _links: self: href: "/api/v3/priorities/2" title: Normal _type: Priority id: 2 isActive: true isDefault: true name: Normal position: 2 - _links: self: href: "/api/v3/priorities/3" title: High _type: Priority id: 3 isActive: true isDefault: false name: High position: 3 - _links: self: href: "/api/v3/priorities/4" title: Immediate _type: Priority id: 4 isActive: true isDefault: false name: Immediate position: 5 _links: self: href: "/api/v3/priorities" _type: Collection count: 4 total: 4 Program: value: _type: Program _links: self: href: "/api/v3/programs/1" title: Lorem createWorkPackage: href: "/api/v3/programs/1/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/programs/1/work_packages" method: post categories: href: "/api/v3/programs/1/categories" types: href: "/api/v3/programs/1/types" versions: href: "/api/v3/programs/1/versions" workPackages: href: "/api/v3/programs/1/work_packages" memberships: href: /api/v3/memberships?filters=[{"project":{"operator":"=","values":["1"]}}] customField456: href: "/api/v3/users/315" title: A user parent: href: "/api/v3/portfolio/123" title: Parent portfolio ancestors: - href: "/api/v3/portfolios/2" title: Root portfolio - href: "/api/v3/portfolios/12" title: Grandparent portfolio - href: "/api/v3/portfolios/123" title: Parent portfolio status: href: "/api/v3/project_statuses/on_track" title: On track id: 1 identifier: program_example name: Program example active: true public: false statusExplanation: format: markdown raw: Everything **fine** html: "Everything fine
" description: format: markdown raw: Lorem **ipsum** dolor sit amet html: "Lorem ipsum dolor sit amet
" createdAt: '2014-05-21T08:51:20.396Z' updatedAt: '2014-05-21T08:51:20.396Z' customField123: 123 customComment123: Why is the value 123? ProgramBody: value: name: Program example statusExplanation: raw: Everything **fine** description: raw: Lorem **ipsum** dolor sit amet customField123: 123 customComment123: Because it is 123! _links: parent: href: "/api/v3/programs/123" customField456: href: "/api/v3/programs/315" ProgramCollection: value: _type: Collection count: 2 total: 2 pageSize: 20 offset: 1 _embedded: elements: - _hint: Program resource shortened for brevity id: 1 identifier: initialprogram name: DeathStar construction active: true public: true - _hint: Program resource shortened for brevity id: 2 identifier: mysecret name: Palpatine's secret plan active: true public: false _links: self: href: "/api/v3/programs?filters=%5B%5D&offset=1&pageSize=20" jumpTo: href: "/api/v3/programs?filters=%5B%5D&offset=%7Boffset%7D&pageSize=20" templated: true changeSize: href: "/api/v3/programs?filters=%5B%5D&offset=1&pageSize=%7Bsize%7D" templated: true representations: - href: "/programs.csv?filters=%5B%5D&offset=1&pageSize=20" identifier: csv type: text/csv title: CSV - href: "/programs.xls?filters=%5B%5D&offset=1&pageSize=20" identifier: xls type: application/vnd.ms-excel title: XLS Project: value: _type: Project _links: self: href: "/api/v3/projects/1" title: Lorem createWorkPackage: href: "/api/v3/projects/1/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/projects/1/work_packages" method: post categories: href: "/api/v3/projects/1/categories" types: href: "/api/v3/projects/1/types" versions: href: "/api/v3/projects/1/versions" workPackages: href: "/api/v3/projects/1/work_packages" memberships: href: /api/v3/memberships?filters=[{"project":{"operator":"=","values":["1"]}}] customField456: href: "/api/v3/users/315" title: A user parent: href: "/api/v3/projects/123" title: Parent project ancestors: - href: "/api/v3/portfolios/2" title: Root portfolios - href: "/api/v3/programs/12" title: Grandparent program - href: "/api/v3/projects/123" title: Parent project status: href: "/api/v3/project_statuses/on_track" title: On track id: 1 identifier: project_example name: Project example active: true public: false statusExplanation: format: markdown raw: Everything **fine** html: "Everything fine
" description: format: markdown raw: Lorem **ipsum** dolor sit amet html: "Lorem ipsum dolor sit amet
" createdAt: '2014-05-21T08:51:20.396Z' updatedAt: '2014-05-21T08:51:20.396Z' customField123: 123 customComment123: Why is the value 123? ProjectBody: value: name: Project example statusExplanation: raw: Everything **fine** description: raw: Lorem **ipsum** dolor sit amet customField123: 123 customComment123: Because it is 123! _links: parent: href: "/api/v3/projects/123" customField456: href: "/api/v3/users/315" ProjectCollection: value: _type: Collection count: 2 total: 2 pageSize: 20 offset: 1 _embedded: elements: - _abbreviated: Project resource shortened for brevity id: 1 identifier: initialproject name: DeathStar construction active: true public: true - _abbreviated: Project resource shortened for brevity id: 2 identifier: mysecret name: Palpatine's secret plan active: true public: false _links: self: href: "/api/v3/projects?filters=%5B%5D&offset=1&pageSize=20" jumpTo: href: "/api/v3/projects?filters=%5B%5D&offset=%7Boffset%7D&pageSize=20" templated: true changeSize: href: "/api/v3/projects?filters=%5B%5D&offset=1&pageSize=%7Bsize%7D" templated: true representations: - href: "/projects.csv?filters=%5B%5D&offset=1&pageSize=20" identifier: csv type: text/csv title: CSV - href: "/projects.xls?filters=%5B%5D&offset=1&pageSize=20" identifier: xls type: application/vnd.ms-excel title: XLS RelationCollectionResponse: description: Simple response of a relation collection. value: _type: Collection total: 40 count: 20 pageSize: 20 offset: 1 _embedded: elements: - _type: Relation id: 650 name: duplicated by type: duplicated reverseType: duplicates lag: description: Those are the same... stupid Stormtroopers! _links: self: href: "/api/v3/relations/650" updateImmediately: href: "/api/v3/relations/650" method: patch delete: href: "/api/v3/relations/650" method: delete, title: Remove relation from: href: "/api/v3/work_packages/108" title: Destroy Rebel Base to: href: "/api/v3/work_packages/78" title: Annihilate Yavin 4 - _type: Relation id: 652 name: relates to type: relates reverseType: relates _hint: Relation resource shortened for brevity. - _hint: Further relation resources shortened for brevity. _links: self: href: "/api/v3/relations?filters=%5B%5D&offset=1&pageSize=20" jumpTo: href: "/api/v3/relations?filters=%5B%5D&offset=%7Boffset%7D&pageSize=20" templated: true changeSize: href: "/api/v3/relations?filters=%5B%5D&offset=1&pageSize=%7Bsize%7D" templated: true nextByOffset: href: "/api/v3/relations?filters=%5B%5D&offset=2&pageSize=20" RelationCreateRequest: description: Example request to create a relation between two work packages. value: type: follows lag: 2 description: Build hangar AFTER improving external skeleton of Death Star. _links: to: href: "/api/v3/work_packages/1337" RelationResponse: description: Simple response of a 'duplicated by' relation between two work packages. value: _type: Relation id: 650 name: duplicated by type: duplicated reverseType: duplicates lag: description: Those are the same... stupid Stormtroopers! _embedded: from: id: 108 _type: WorkPackage _abbreviated: Work package resource shortened for brevity. to: id: 78 _type: WorkPackage _abbreviated: Work package resource shortened for brevity. _links: self: href: "/api/v3/relations/650" updateImmediately: href: "/api/v3/relations/650" method: patch delete: href: "/api/v3/relations/650" method: delete, title: Remove relation from: href: "/api/v3/work_packages/108" title: Destroy Rebel Base to: href: "/api/v3/work_packages/78" title: Annihilate Yavin 4 RelationUpdateRequest: description: Example request to update the relation's description. value: description: This is the new description. SprintResponse: description: A sprint resource example value: _type: Sprint id: 3 name: Sprint 11 startDate: '2026-02-02' finishDate: '2026-02-09' createdAt: '2026-02-06T09:30:49.157Z' updatedAt: '2026-02-10T09:53:21.620Z' _links: self: href: "/api/v3/sprints/3" title: Sprint 11 definingWorkspace: href: "/api/v3/projects/10" title: Scrum project status: href: urn:openproject-org:api:v3:sprints:status:in_planning title: In planning SprintCollectionResponse: description: Simple response of a sprint collection. value: _type: Collection total: 40 count: 20 pageSize: 20 offset: 1 _embedded: elements: - _type: Sprint id: 3 name: Sprint 11 startDate: '2026-02-02' finishDate: '2026-02-09' createdAt: '2026-02-06T09:30:49.157Z' updatedAt: '2026-02-10T09:53:21.620Z' _links: self: href: "/api/v3/sprints/3" title: Sprint 11 definingWorkspace: href: "/api/v3/projects/10" title: Scrum project status: href: urn:openproject-org:api:v3:sprints:status:in_planning title: In planning - _abbreviated: Further sprint resources shortened for brevity. _links: self: href: "/api/v3/sprints?filters=%5B%5D&offset=1&pageSize=20" jumpTo: href: "/api/v3/sprints?filters=%5B%5D&offset=%7Boffset%7D&pageSize=20" templated: true changeSize: href: "/api/v3/sprints?filters=%5B%5D&offset=1&pageSize=%7Bsize%7D" templated: true nextByOffset: href: "/api/v3/sprints?filters=%5B%5D&offset=2&pageSize=20" StatusCollection: description: A standard, unpaginated collection of statuses. value: _type: Collection count: 6 total: 6 _embedded: elements: - _type: Status id: 1 name: New isClosed: false color: "#3997AD" isDefault: true isReadonly: false excludedFromTotals: false defaultDoneRatio: 0 position: 1 _links: self: href: "/api/v3/statuses/1" - _type: Status id: 3 name: Resolved isClosed: false color: "#93D2AE" isDefault: false isReadonly: false excludedFromTotals: false defaultDoneRatio: 75 position: 3 _links: self: href: "/api/v3/statuses/3" - _type: Status id: 4 name: Feedback isClosed: false color: "#A96FFE" isDefault: false isReadonly: false excludedFromTotals: false defaultDoneRatio: 25 position: 4 _links: self: href: "/api/v3/statuses/4" - _type: Status id: 5 name: Closed isClosed: true color: "#DF6DA1" isDefault: false isReadonly: false excludedFromTotals: false defaultDoneRatio: 100 position: 5 _links: self: href: "/api/v3/statuses/5" - _type: Status id: 6 name: Rejected isClosed: true color: "#D32937" isDefault: false isReadonly: true excludedFromTotals: true defaultDoneRatio: 100 position: 6 _links: self: href: "/api/v3/statuses/6" - _type: Status id: 2 name: In Progress isClosed: false color: "#3852C6" isDefault: false isReadonly: false excludedFromTotals: false defaultDoneRatio: 50 position: 3 _links: self: href: "/api/v3/statuses/2" _links: self: href: "/api/v3/statuses" StatusResponse: description: A standard status resource response. value: _type: Status id: 13 name: Waiting for Darth-approval isClosed: false color: "#FE005D" isDefault: false isReadonly: false excludedFromTotals: false defaultDoneRatio: 66 position: 4 _links: self: href: "/api/v3/statuses/13" title: Waiting for Darth-approval StorageNextcloudResponse: value: _type: Storage id: 1337 name: It's no moon hasApplicationPassword: true createdAt: '2021-12-20T13:37:00.211Z' updatedAt: '2021-12-20T13:37:00.211Z' configured: true _embedded: oauthApplication: id: 42 _type: OAuthApplication name: It's no moon (Nextcloud) clientId: O5h6WObhMg1Z8IcLHRE3_LMh4jJYmmca2V6OTFSv8DA confidential: true createdAt: '2022-12-07T12:56:42.626Z' updatedAt: '2022-12-07T12:56:42.626Z' scopes: - api_v3 _links: self: href: "/api/v3/oauth_applications/42" owner: href: "/api/v3/users/13" title: Darth Vader integration: href: "/api/v3/storages/1337" title: It's no moon redirectUri: - href: https://nextcloud.deathstar.rocks/index.php/apps/integration_openproject/oauth-redirect oauthClientCredentials: _type: OAuthClientCredentials id: 42 clientId: fGEFWxIpROrpci25TW6qWCZozDFEAKSkonMBkrf3LYvBXRljBbLajBf2vD2fjePm confidential: true createdAt: '2023-12-08T09:49:24.397Z' updatedAt: '2023-12-08T09:49:24.397Z' _links: self: href: "/api/v3/oauth_client_credentials/42" integration: href: "/api/v3/storages/1337" title: It's no moon _links: self: href: "/api/v3/storages/1337" title: It's no moon type: href: urn:openproject-org:api:v3:storages:Nextcloud title: Nextcloud origin: href: https://nextcloud.deathstar.rocks/ prepareUpload: - href: "/api/v3/storages/1337/files/prepare_upload" method: post title: Upload file payload: projectId: 21 fileName: "{fileName}" parent: "{parent}" templated: true - href: "/api/v3/storages/95/files/prepare_upload" method: post title: Upload file payload: projectId: 11 fileName: "{fileName}" parent: "{parent}" templated: true open: href: "/api/v3/storages/1337/open" authorizationState: href: urn:openproject-org:api:v3:storages:authorization:Connected title: Connected projectStorages: href: /api/v3/project_storages?filters=[{"storageId":{"operator":"=","values":["1337"]}}] oauthApplication: href: "/api/v3/oauth_application/42" title: It's no moon (Nextcloud) oauthClientCredentials: href: "/api/v3/oauth_client_credentials/42" StorageCreateFolderRequestBody: description: A valid request body to create a new folder on a external storage value: name: Uploads parentId: '200' StorageNextcloudResponseForCreation: value: _type: Storage id: 1337 name: My New DeathStar hasApplicationPassword: false createdAt: '2024-05-21T09:11:53.880Z' updatedAt: '2024-05-21T09:11:53.880Z' configured: false _embedded: oauthApplication: id: 42 _type: OAuthApplication name: My New DeathStar (Nextcloud) clientId: gNQ-gi3VX59ruoft5B9aRmukEYbZOhKIsxXE9iT1tcQ confidential: true clientSecret: 79hIlb1Ezj5kPx8LgE6LI9L1-mb8g7jX1-u_a08RJlI createdAt: '2024-05-21T09:11:53.908Z' updatedAt: '2024-05-21T09:11:53.908Z' scopes: - api_v3 _links: self: href: "/api/v3/oauth_applications/42" owner: href: "/api/v3/users/13" title: Darth Vader integration: href: "/api/v3/storages/1337" title: My New DeathStar redirectUri: - href: https://nextcloud.deathstar.rocks/index.php/apps/integration_openproject/oauth-redirect _links: self: href: "/api/v3/storages/1337" title: My New DeathStar type: href: urn:openproject-org:api:v3:storages:Nextcloud title: Nextcloud origin: href: https://nextcloud.deathstar.rocks/ open: href: "/api/v3/storages/1337/open" prepareUpload: [] authorizationState: href: urn:openproject-org:api:v3:storages:authorization:FailedAuthorization title: Authorization failed projectStorages: href: /api/v3/project_storages?filters=[{"storageId":{"operator":"=","values":["1337"]}}] oauthApplication: href: "/api/v3/oauth_application/42" title: My New DeathStar (Nextcloud) oauthClientCredentials: href: StorageNextcloudUnauthorizedResponse: value: _type: Storage id: 1337 name: It's no moon hasApplicationPassword: false createdAt: '2021-12-20T13:37:00.211Z' updatedAt: '2021-12-20T13:37:00.211Z' configured: true _embedded: oauthApplication: id: 42 _type: OAuthApplication name: It's no moon (Nextcloud) clientId: O5h6WObhMg1Z8IcLHRE3_LMh4jJYmmca2V6OTFSv8DA confidential: true createdAt: '2022-12-07T12:56:42.626Z' updatedAt: '2022-12-07T12:56:42.626Z' scopes: - api_v3 _links: self: href: "/api/v3/oauth_applications/42" owner: href: "/api/v3/users/13" title: Darth Vader integration: href: "/api/v3/storages/1337" title: It's no moon redirectUri: - href: https://nextcloud.deathstar.rocks/index.php/apps/integration_openproject/oauth-redirect oauthClientCredentials: _type: OAuthClientCredentials id: 42 clientId: fGEFWxIpROrpci25TW6qWCZozDFEAKSkonMBkrf3LYvBXRljBbLajBf2vD2fjePm confidential: true createdAt: '2023-12-08T09:49:24.397Z' updatedAt: '2023-12-08T09:49:24.397Z' _links: self: href: "/api/v3/oauth_client_credentials/42" integration: href: "/api/v3/storages/1337" title: It's no moon _links: self: href: "/api/v3/storages/1337" title: It's no moon type: href: urn:openproject-org:api:v3:storages:Nextcloud title: Nextcloud origin: href: https://nextcloud.deathstar.rocks/ prepareUpload: [] open: href: "/api/v3/storages/1337/open" authorizationState: href: urn:openproject-org:api:v3:storages:authorization:FailedAuthorization title: Authorization failed authorize: href: https://nextcloud25.local/index.php/apps/oauth2/authorize?client_id=fnrIeJZqqAKGQlejuDaGhSQfCAVtoayHLACWCYcPJ0w17Pp6daPPUktkM9QaGxca&redirect_uri=https://openproject.local/oauth_clients/fnrIeJZqqAKGQlejuDaGhSQfCAVtoayHLACWCYcPJ0w17Pp6daPPUktkM9QaGxca/callback&response_type=code title: Authorize projectStorages: href: /api/v3/project_storages?filters=[{"storageId":{"operator":"=","values":["1337"]}}] oauthApplication: href: "/api/v3/oauth_application/42" title: It's no moon (Nextcloud) oauthClientCredentials: href: "/api/v3/oauth_client_credentials/42" StorageOneDriveIncompleteResponse: value: _type: Storage id: 1337 name: It's no moon tenantId: e36f1dbc-fdae-427e-b61b-0d96ddfb81a4 driveId: createdAt: '2021-12-20T13:37:00.211Z' updatedAt: '2021-12-20T13:37:00.211Z' configured: false _links: self: href: "/api/v3/storages/1337" title: It's no moon type: href: urn:openproject-org:api:v3:storages:OneDrive title: OneDrive/SharePoint prepareUpload: [] open: href: "/api/v3/storages/1337/open" authorizationState: href: urn:openproject-org:api:v3:storages:authorization:FailedAuthorization title: Authorization failed projectStorages: href: /api/v3/project_storages?filters=[{"storageId":{"operator":"=","values":["1337"]}}] oauthClientCredentials: href: "/api/v3/oauth_client_credentials/42" StorageOneDriveResponse: value: _type: Storage id: 1337 name: It's no moon tenantId: e36f1dbc-fdae-427e-b61b-0d96ddfb81a4 driveId: b!FeOZEMfQx0eGQKqVBLcP__BG8mq-4-9FuRqOyk3MXY8Qconfm2i6SKEoCmuGYqQK createdAt: '2021-12-20T13:37:00.211Z' updatedAt: '2021-12-20T13:37:00.211Z' configured: true _embedded: oauthClientCredentials: _type: OAuthClientCredentials id: 42 clientId: b8a5bb54-5fb2-4e0e-9427-9d24dbac32ff confidential: true createdAt: '2023-12-08T09:49:24.397Z' updatedAt: '2023-12-08T09:49:24.397Z' _links: self: href: "/api/v3/oauth_client_credentials/42" integration: href: "/api/v3/storages/1337" title: It's no moon _links: self: href: "/api/v3/storages/1337" title: It's no moon type: href: urn:openproject-org:api:v3:storages:OneDrive title: OneDrive prepareUpload: - href: "/api/v3/storages/1337/files/prepare_upload" method: post title: Upload file payload: projectId: 33 fileName: "{fileName}" parent: "{parent}" templated: true open: href: "/api/v3/storages/1337/open" authorizationState: href: urn:openproject-org:api:v3:storages:authorization:Connected title: Connected projectStorages: href: /api/v3/project_storages?filters=[{"storageId":{"operator":"=","values":["1337"]}}] oauthClientCredentials: href: "/api/v3/oauth_client_credentials/42" StoragesSimpleCollectionModel: value: _type: Collection count: 2 total: 2 offset: 1 pageSize: 20 _embedded: elements: - id: 1337 _type: Storage name: It's no moon hasApplicationPassword: true configured: true createdAt: '2021-12-20T13:37:00.211Z' updatedAt: '2021-12-20T13:37:00.211Z' _links: self: href: "/api/v3/storages/1337" title: It's no moon type: href: urn:openproject-org:api:v3:storages:nextcloud title: Nextcloud origin: href: https://nextcloud.deathstar.rocks/ open: href: https://nextcloud.deathstar.rocks/apps/files authorizationState: href: urn:openproject-org:api:v3:storages:authorization:FailedAuthorization title: Failed Authorization authorize: href: https://nextcloud.deathstar.rocks/authorize/ title: Authorize projectStorages: href: /api/v3/project_storages?filters=[{"storageId":{"operator":"=","values":["1337"]}}] oauthApplication: href: "/api/v3/oauth_application/42" title: It's no moon (Nextcloud) oauthClientCredentials: href: "/api/v3/oauth_client_credentials/42" - id: 1338 _type: Storage name: EmpireSharepoint tenantId: e36f1dbc-fdae-427e-b61b-0d96ddfb81a4 driveId: b!FeOZEMfQx0eGQKqVBLcP__BG8mq-4-9FuRqOyk3MXY8Qconfm2i6SKEoCmuGYqQK createdAt: '2021-12-20T13:37:00.211Z' updatedAt: '2021-12-20T13:37:00.211Z' configured: true _links: self: href: "/api/v3/storages/1338" title: EmpireSharepoint type: href: urn:openproject-org:api:v3:storages:one-drive title: OneDrive open: href: https://empire.sharepoint.com/sites/Documents authorizationState: href: urn:openproject-org:api:v3:storages:authorization:Connected title: Connected projectStorages: href: /api/v3/project_storages?filters=[{"storageId":{"operator":"=","values":["1338"]}}] oauthClientCredentials: href: "/api/v3/oauth_client_credentials/44" _links: self: href: "/api/v3/storages?filters=%5B%5D&offset=1&pageSize=20" jumpTo: href: "/api/v3/storages?filters=%5B%5D&offset=%7Boffset%7D&pageSize=20" templated: true changeSize: href: "/api/v3/storages?filters=%5B%5D&offset=1&pageSize=%7Bsize%7D" templated: true nextByOffset: href: "/api/v3/storages?filters=%5B%5D&offset=2&pageSize=20" QueriesModel: value: _links: self: href: "/api/v3/queries" total: 1 count: 1 _type: Collection _embedded: elements: - _type: Query id: 9 name: fdsfdsfdsf createdAt: '2015-03-20T12:56:56.413Z' updatedAt: '2015-05-20T18:16:53.392Z' filters: - _type: StatusQueryFilter name: Status _links: filter: href: "/api/v3/queries/filters/status" title: Status operator: href: "/api/v3/queries/operators/o" title: open schema: href: "/api/v3/queries/filter_instance_schemas/status" values: [] - _type: DueDateQueryFilter name: Finish date values: - '1' _links: filter: href: "/api/v3/queries/filters/dueDate" title: Finish date operator: href: "/api/v3/queries/operators/First draft of the energy weapon ... (behold, Alderaan *evil_laughter*)
" startDate: '2026-02-02' endDate: '2026-02-09' status: closed sharing: none createdAt: '2026-02-06T09:30:49.157Z' updatedAt: '2026-02-10T09:53:21.620Z' customField14: true _links: self: href: "/api/v3/versions/1" title: v0.1.0-alpha schema: href: "/api/v3/versions/schema" update: href: "/api/v3/versions/1/form" method: post updateImmediately: href: "/api/v3/versions/1" method: patch delete: href: "/api/v3/versions/1" method: delete availableInProjects: href: "/api/v3/versions/1/workspaces" definingProject: href: "/api/v3/projects/10" title: Death Star customField23: href: "/api/v3/users/18" title: Mara Jade VersionCreateRequest: description: Request to create a basic version with custom fields value: name: v0.9.1-alpha startDate: '2026-02-02' endDate: '2026-02-09' status: open sharing: tree customField14: true _links: definingProject: href: "/api/v3/projects/10" title: Death Star customField23: href: "/api/v3/users/18" title: Mara Jade VersionUpdateNameRequest: description: Example request body to update the name of a version. value: name: v0.9.1-alpha Views: value: _links: self: href: "/api/v3/views" changeSize: href: "/api/v3/views?pageSize={size}" templated: true jumpTo: href: "/api/v3/views?offset={offset}" templated: true total: 1 count: 1 _type: Collection _embedded: elements: - _type: Views::WorkPackagesTable name: Current work packages timelineVisible: true id: 9 _links: self: href: "/api/v3/views/9" query: href: "/api/v3/queries/18" title: A query columns: - href: "/api/v3/users/id" title: ID - href: "/api/v3/users/subject" title: Subject - href: "/api/v3/users/type" title: Type - href: "/api/v3/users/status" title: Status - href: "/api/v3/users/priority" title: Priority - href: "/api/v3/users/assignee" title: Assignee - href: "/api/v3/users/updated_at" title: Updated on project: href: "/api/v3/project/89" title: The project ViewWorkPackagesTable: value: _type: Views::WorkPackagesTable name: Current work packages id: 9 _links: self: href: "/api/v3/views/9" query: href: "/api/v3/queries/18" title: Current work packages project: href: "/api/v3/project/89" title: The project ViewTeamPlanner: value: _type: Views::TeamPlanner name: Product team id: 9 _links: self: href: "/api/v3/views/9" query: href: "/api/v3/queries/18" title: Product team project: href: "/api/v3/project/89" title: The project WorkPackageCreateOnlySubject: description: |- A request body to create a work package with only a subject. This can only be used, if the project context is already given in the path. All other values will fall back to defaults. value: subject: Replace GNK power droids WorkPackageCreateValid: description: A valid request body to create or edit a work package with a couple of properties. value: subject: Install Dromund Kass planetary shield description: format: markdown raw: |- # TODO The planetary shield of Dromund Kass needs to be installed to protect the planet from orbital bombardment. startDate: '2877-07-21' duration: P1337D estimatedTime: P370DT13H ignoreNonWorkingDays: true project: href: "/api/v3/projects/42" type: href: "/api/v3/types/13" status: href: "/api/v3/statuses/2" WorkPackageEditSubject: description: A request body to edit a work package's subject. value: subject: Replace GNK power droids WorkPackageWithMetaValidation: description: A request body to edit a work package with custom field validation enabled via the _meta object. value: subject: Replace GNK power droids lockVersion: 42 _meta: validateCustomFields: true responses: InvalidQuery: description: Returned if the client sends invalid request parameters e.g. filters content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidQuery message: Filters Invalid filter does not exist. InvalidRequestBody: description: Occurs when the client did not send a valid JSON object in the request body. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:InvalidRequestBody message: The request body was not a single JSON object. MissingContentType: description: Occurs when the client did not send a Content-Type header content: text/plain: schema: type: string example: Missing content-type header UnsupportedMediaType: description: Occurs when the client sends an unsupported Content-Type header. content: application/hal+json: schema: "$ref": "#/components/schemas/ErrorResponse" example: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:TypeNotSupported message: Expected CONTENT-TYPE to be (expected value) but got (actual value). schemas: ActivityModel: type: object properties: _type: type: string enum: - Activity::Comment id: type: integer description: Activity id minimum: 1 version: type: integer description: Activity version minimum: 1 comment: "$ref": "#/components/schemas/Formattable" details: type: array items: "$ref": "#/components/schemas/Formattable" internal: type: boolean description: Whether this activity is internal (only visible to users with view_internal_comments permission) createdAt: type: string format: date-time description: Time of creation updatedAt: type: string format: date-time description: Time of update _embedded: type: object properties: attachments: allOf: - "$ref": "#/components/schemas/Attachments_Model" - description: Collection of attachments for this activity workPackage: allOf: - "$ref": "#/components/schemas/WorkPackageModel" - description: |- The work package this activity belongs to # Conditions Only embedded when the `journable` of the activity is a work package emojiReactions: allOf: - "$ref": "#/components/schemas/EmojiReactions_Model" - description: Collection of emoji reactions for this activity _links: type: object properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This activity **Resource**: Activity workPackage: allOf: - "$ref": "#/components/schemas/Link" - description: |- The work package this activity belongs to **Resource**: WorkPackage user: allOf: - "$ref": "#/components/schemas/Link" - description: |- The user who created this activity **Resource**: Principal update: allOf: - "$ref": "#/components/schemas/Link" - description: Update this activity attachments: allOf: - "$ref": "#/components/schemas/Link" - description: |- The attachment collection of this activity **Resource**: Attachments addAttachment: allOf: - "$ref": "#/components/schemas/Link" - description: |- Attach a file to the activity # Conditions **Permissions**: - `add_work_package_comments` - for internal comments: `add_internal_comments` emojiReactions: allOf: - "$ref": "#/components/schemas/Link" - description: |- The emoji reactions collection of this activity **Resource**: EmojiReactions example: id: 1 _type: Activity::Comment _embedded: attachments: _type: Collection total: 1 count: 1 _embedded: elements: - _type: Attachment id: 30388 fileName: Task_Ensure_financing___4___OpenProject_DEV.jpeg fileSize: 540992 description: format: plain raw: '' html: '' status: uploaded contentType: image/jpeg digest: algorithm: md5 hash: d02d312b25383b595a9fa10f1a8999fe createdAt: '2025-04-08T15:37:19.275Z' _links: self: href: "/api/v3/attachments/30388" title: Task_Ensure_financing___4___OpenProject_DEV.jpeg author: href: "/api/v3/users/435" title: Firstname container: href: "/api/v3/activities/79090" staticDownloadLocation: href: "/api/v3/attachments/30388/content" downloadLocation: href: "/api/v3/attachments/30388/content" delete: href: "/api/v3/attachments/30388" method: delete _links: self: href: "/api/v3/activities/79090/attachments" emojiReactions: _type: Collection total: 2 count: 2 _embedded: elements: - _type: EmojiReaction id: 1-thumbs_up reaction: thumbs_up emoji: "\U0001F44D" reactionsCount: 3 firstReactionAt: '2024-04-08T15:37:19.275Z' _links: self: href: "/api/v3/emoji_reactions/1-thumbs_up" reactable: href: "/api/v3/activities/1" reactingUsers: - href: "/api/v3/users/435" title: John Doe - href: "/api/v3/users/436" title: Jane Smith - href: "/api/v3/users/437" title: Bob Johnson - _type: EmojiReaction id: 1-heart reaction: heart emoji: "❤️" reactionsCount: 1 firstReactionAt: '2024-04-08T15:38:19.275Z' _links: self: href: "/api/v3/emoji_reactions/1-heart" reactable: href: "/api/v3/activities/1" reactingUsers: - href: "/api/v3/users/435" title: John Doe _links: self: href: "/api/v3/activities/1/emoji_reactions" workPackage: _type: WorkPackage id: 10403 lockVersion: 2 subject: Ensure financing description: format: markdown raw: Lorem ipsum dolor sit amet. html: "Lorem ipsum dolor sit amet.
" scheduleManually: true startDate: dueDate: derivedStartDate: derivedDueDate: estimatedTime: derivedEstimatedTime: derivedRemainingTime: duration: ignoreNonWorkingDays: false percentageDone: derivedPercentageDone: createdAt: '2025-03-24T13:11:09.480Z' updatedAt: '2025-04-14T11:00:02.411Z' _links: self: href: "/api/v3/work_packages/10403" title: Ensure financing type: href: "/api/v3/types/1" title: Task status: href: "/api/v3/statuses/1" title: New project: href: "/api/v3/projects/918" title: RVC Test schema: href: "/api/v3/work_packages/schemas/11-2" author: href: "/api/v3/users/1" title: OpenProject Admin - admin priority: href: "/api/v3/priorities/2" title: Normal ancestors: [] _links: self: href: "/api/v3/activity/1" title: Priority changed from High to Low workPackage: href: "/api/v3/work_packages/1" title: quis numquam qui voluptatum quia praesentium blanditiis nisi user: href: "/api/v3/users/1" title: John Sheppard - admin attachments: href: "/api/v3/activities/1/attachments" emojiReactions: href: "/api/v3/activities/1/emoji_reactions" addAttachment: href: "/api/v3/activities/1/attachments" method: post update: href: "/api/v3/activities/1" method: patch details: - format: markdown raw: Lorem ipsum dolor sit amet. html: "Lorem ipsum dolor sit amet.
" comment: format: markdown raw: Lorem ipsum dolor sit amet. html: "Lorem ipsum dolor sit amet.
" createdAt: '2014-05-21T08:51:20.721Z' updatedAt: '2014-05-21T09:14:02.929Z' version: 31 ActivityCommentWriteModel: type: object properties: comment: type: object properties: raw: type: string description: The raw content of the comment internal: type: boolean description: |- Determines whether this comment is internal. This is only available to users with `add_internal_comments` permission. It defaults to `false`, if unset. default: false example: comment: raw: I think this is awesome! AttachmentModel: type: object required: - fileName - description - status - contentType - digest - createdAt properties: id: type: integer description: Attachment's id minimum: 1 fileName: type: string description: The name of the uploaded file fileSize: type: integer description: The size of the uploaded file in Bytes minimum: 0 description: allOf: - "$ref": "#/components/schemas/Formattable" - description: A user provided description of the file status: type: string enum: - uploaded - prepared - scanned - quarantined - rescan contentType: type: string description: The files MIME-Type as determined by the server digest: type: object description: A checksum for the files content required: - algorithm - hash properties: algorithm: type: string description: The algorithm used to generate the digest. hash: type: string description: The hexadecimal representation of the digested hash value. createdAt: type: string format: date-time description: Time of creation _links: type: object required: - self - container - author - downloadLocation properties: delete: allOf: - "$ref": "#/components/schemas/Link" - description: |- Deletes this attachment # Conditions **Permission**: edit on attachment container or being the author for attachments without container self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This attachment **Resource**: Attachment container: allOf: - "$ref": "#/components/schemas/Link" - description: |- The object (e.g. WorkPackage) housing the attachment **Resource**: Anything author: allOf: - "$ref": "#/components/schemas/Link" - description: |- The user who uploaded the attachment **Resource**: User downloadLocation: allOf: - "$ref": "#/components/schemas/Link" - description: |- Direct download link to the attachment **Resource**: - example: _type: Attachment _links: self: href: "/api/v3/attachments/1" container: href: "/api/v3/work_packages/1" author: href: "/api/v3/users/1" staticDownloadLocation: href: "/api/v3/attachments/1/content" downloadLocation: href: "/some/remote/aws/url/image.png" id: 1 fileName: cat.png filesize: 24 status: uploaded description: format: plain raw: A picture of a cute cat html: "A picture of a cute cat
" contentType: image/png digest: algorithm: md5 hash: 64c26a8403cd796ea4cf913cda2ee4a9 createdAt: '2014-05-21T08:51:20.396Z' Attachments_Model: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- The attachments collection **Resource**: AttachmentsCollection readOnly: true _embedded: type: object properties: elements: type: array readOnly: true items: allOf: - "$ref": "#/components/schemas/AttachmentModel" - description: Collection of Attachments Available_AssigneesModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- The available assignees collection **Resource**: AvailableAssigneesCollection readOnly: true _embedded: type: object properties: elements: type: array readOnly: true items: allOf: - "$ref": "#/components/schemas/UserModel" - description: Collection of Users Available_WatchersModel: type: object example: _links: self: href: "/api/v3/work_packages/1/available_watchers" total: 2 count: 2 _type: Collection _embedded: elements: - _type: User _links: self: href: "/api/v3/users/1" title: John Sheppard - j.sheppard lock: href: "/api/v3/users/1/lock" title: Set lock on j.sheppard method: POST delete: href: "/api/v3/users/1" title: Delete j.sheppard method: DELETE id: 1 login: j.sheppard firstName: John lastName: Sheppard email: shep@mail.com avatar: https://example.org/users/1/avatar status: active createdAt: '2014-05-21T08:51:20.286Z' updatedAt: '2014-05-21T08:51:20.286Z' - _type: User _links: self: href: "/api/v3/users/2" title: Jim Sheppard - j.sheppard2 lock: href: "/api/v3/users/2/lock" title: Set lock on j.sheppard2 method: POST delete: href: "/api/v3/users/2" title: Delete j.sheppard2 method: DELETE id: 2 login: j.sheppard2 firstName: Jim lastName: Sheppard email: shep@mail.net avatar: https://example.org/users/1/avatar status: active createdAt: '2014-05-21T08:51:20.286Z' updatedAt: '2014-05-21T08:51:20.286Z' Available_projects_for_queryModel: type: object example: _links: self: href: "/api/v3/queries/available_projects" _type: Collection total: 2 count: 2 _embedded: elements: - _type: Project _links: self: href: "/api/v3/projects/6" title: A project createWorkPackage: href: "/api/v3/projects/6/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/projects/6/work_packages" method: post categories: href: "/api/v3/projects/6/categories" versions: href: "/api/v3/projects/6/versions" id: 6 identifier: a_project name: A project description: Eveniet molestias omnis quis aut qui eum adipisci. createdAt: '2015-07-06T13:28:14+00:00' updatedAt: '2015-10-01T09:55:02+00:00' type: Customer Project - _type: Project _links: self: href: "/api/v3/projects/14" title: Another project createWorkPackage: href: "/api/v3/projects/14/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/projects/14/work_packages" method: post categories: href: "/api/v3/projects/14/categories" versions: href: "/api/v3/projects/14/versions" id: 14 identifier: another_project name: Another project description: '' createdAt: '2016-02-29T12:50:20+00:00' updatedAt: '2016-02-29T12:50:20+00:00' type: Available_projects_for_time_entriesModel: type: object example: _links: self: href: "/api/v3/time_entries/available_projects" _type: Collection total: 2 count: 2 _embedded: elements: - _type: Project... - _type: Project... Available_projects_for_versionsModel: type: object example: _links: self: href: "/api/v3/versions/available_projects" _type: Collection total: 2 count: 2 _embedded: elements: - _type: Project _links: self: href: "/api/v3/projects/6" title: A project editWorkPackage: href: "/api/v3/work_packages/{id}/form" templated: true method: post createWorkPackage: href: "/api/v3/projects/6/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/projects/6/work_packages" method: post categories: href: "/api/v3/projects/6/categories" versions: href: "/api/v3/projects/6/versions" id: 6 identifier: a_project name: A project description: Eveniet molestias omnis quis aut qui eum adipisci. Atque aut aut in exercitationem adipisci amet. Nisi asperiores quia ratione veritatis enim exercitationem magnam. Aut fuga architecto adipisci nihil. Et repellat pariatur. Aliquam et sed perferendis nostrum quaerat. Fugit doloremque voluptatem. createdAt: '2015-07-06T13:28:14+00:00' updatedAt: '2015-10-01T09:55:02+00:00' type: Customer Project - _type: Project _links: self: href: "/api/v3/projects/14" title: Another project createWorkPackage: href: "/api/v3/projects/14/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/projects/14/work_packages" method: post categories: href: "/api/v3/projects/14/categories" versions: href: "/api/v3/projects/14/versions" id: 14 identifier: another_project name: Another project description: '' createdAt: '2016-02-29T12:50:20+00:00' updatedAt: '2016-02-29T12:50:20+00:00' type: Available_projects_for_work_packageModel: type: object example: _links: self: href: "/api/v3/work_packages/5/available_projects" _type: Collection total: 2 count: 2 _embedded: elements: - _type: Project _links: self: href: "/api/v3/projects/6" title: A project editWorkPackage: href: "/api/v3/work_packages/{id}/form" templated: true method: post createWorkPackage: href: "/api/v3/projects/6/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/projects/6/work_packages" method: post categories: href: "/api/v3/projects/6/categories" versions: href: "/api/v3/projects/6/versions" id: 6 identifier: a_project name: A project description: Eveniet molestias omnis quis aut qui eum adipisci. Atque aut aut in exercitationem adipisci amet. Nisi asperiores quia ratione veritatis enim exercitationem magnam. Aut fuga architecto adipisci nihil. Et repellat pariatur. Aliquam et sed perferendis nostrum quaerat. Fugit doloremque voluptatem. createdAt: '2015-07-06T13:28:14+00:00' updatedAt: '2015-10-01T09:55:02+00:00' type: Customer Project - _type: Project _links: self: href: "/api/v3/projects/14" title: Another project createWorkPackage: href: "/api/v3/projects/14/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/projects/14/work_packages" method: post categories: href: "/api/v3/projects/14/categories" versions: href: "/api/v3/projects/14/versions" id: 14 identifier: another_project name: Another project description: '' createdAt: '2016-02-29T12:50:20+00:00' updatedAt: '2016-02-29T12:50:20+00:00' type: Available_relation_candidatesModel: type: object example: _links: self: href: "/api/v3/projects/14/work_packages" total: 2 count: 2 _type: Collection _embedded: elements: - _type: WorkPackage _links: self: href: "/api/v3/work_packages/1" id: 1 subject: Skipped other properties for brevity - _type: WorkPackage _links: self: href: "/api/v3/work_packages/2" id: 2 subject: Skipped other properties for brevity BudgetModel: type: object properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This budget **Resource**: Budget readOnly: true example: _type: Budget _links: self: href: "/api/v3/budgets/1" title: Q3 2015 id: 1 subject: Q3 2015 Budgets_by_ProjectModel: type: object example: _links: self: href: "/api/v3/projects/1/budgets" _type: Collection total: 2 count: 2 _embedded: elements: - _type: Budget _links: self: href: "/api/v3/budgets/1" title: Q3 2015 id: 1 subject: Q3 2015 - _type: Budget _links: self: href: "/api/v3/budgets/2" title: Q4 2015 id: 2 subject: Q4 2015 Categories_by_WorkspaceModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- The categories collection **Resource**: CategoriesCollection readOnly: true _embedded: type: object properties: elements: type: array readOnly: true items: allOf: - "$ref": "#/components/schemas/CategoryModel" - description: Collection of Categories CategoryModel: type: object properties: id: type: integer description: Category id readOnly: true exclusiveMinimum: 0 name: type: string description: Category name _links: type: object required: - self - project properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This category **Resource**: Category readOnly: true project: allOf: - "$ref": "#/components/schemas/Link" - description: |- The project of this category **Resource**: Project readOnly: true defaultAssignee: allOf: - "$ref": "#/components/schemas/Link" - description: |- Default assignee for work packages of this category **Resource**: User readOnly: true example: _links: self: href: "/api/v3/categories/10" title: Category with assignee project: href: "/api/v3/projects/11" title: Example project defaultAssignee: href: "/api/v3/users/42" title: John Sheppard _type: Category id: 10 name: Foo CollectionLinks: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This collection resource. **Resource**: Collection CollectionModel: type: object required: - _type - total - count - _links properties: _type: type: string enum: - Collection total: type: integer description: The total amount of elements available in the collection. minimum: 0 count: type: integer description: Actual amount of elements in this response. minimum: 0 _links: "$ref": "#/components/schemas/CollectionLinks" ConfigurationModel: type: object properties: maximumAttachmentFileSize: type: integer description: The maximum allowed size of an attachment in Bytes readOnly: true hostName: type: string description: The host name configured for the system readOnly: true perPageOptions: type: array description: Page size steps to be offered in paginated list UI items: type: integer durationFormat: type: string description: The format used to display Work, Remaining Work, and Spent time durations readOnly: true activeFeatureFlags: type: array description: The list of all feature flags that are active items: type: string ProjectConfigurationModel: allOf: - "$ref": "#/components/schemas/ConfigurationModel" - type: object properties: enabledInternalComments: type: boolean description: Whether internal comments are enabled for this project readOnly: true CustomActionModel: type: object properties: _type: type: string enum: - CustomAction name: type: string description: The name of the custom action description: type: string description: The description for the custom action _links: type: object required: - self - executeImmediately properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This custom action **Resource**: CustomAction executeImmediately: allOf: - "$ref": "#/components/schemas/Link" - description: Execute this custom action. example: _type: CustomAction name: Change project and type description: Changes project and type in one go _links: executeImmediately: href: "/api/v3/custom_actions/2/execute" title: Execute Change project and type method: post self: href: "/api/v3/custom_actions/2" title: Change project and type CustomCommentProperties: type: object patternProperties: "^customComment\\d+$": type: - 'null' - string description: |- A plain-text comment associated with a project custom field that has comments enabled. The property is only present when the corresponding `customField{N}` has `has_comment` set to `true`. CustomFieldLinkedProperties: type: object patternProperties: "^customField\\d+$": allOf: - "$ref": "#/components/schemas/Link" - description: |- A custom field value that belongs to a custom field of a reference type: - Hierarchy - List - User - Version - Weighted item list CustomFieldProperties: type: object patternProperties: "^customField\\d+$": type: - 'null' - number - boolean - string - object description: |- A custom field value, that belongs to a custom field of a simple type: - Boolean - Date - Float - Integer - Link (URL) - Text - Long text CustomOptionModel: type: object properties: id: type: integer description: The identifier readOnly: true value: type: string description: The value defined for this custom option readOnly: true _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This custom option. **Resource**: CustomOption readOnly: true example: _links: self: href: "/api/v3/custom_options/1" _type: CustomOption value: Foo DayCollectionModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This days collection **Resource**: DayCollectionModel _embedded: type: object required: - elements properties: elements: type: array description: |- The array of days. Each day has a name and a working status indicating if it is a working or a non-working day. items: "$ref": "#/components/schemas/DayModel" example: _type: Collection total: 5 count: 5 _links: self: href: /api/v3/days?filters=[{"interval":{"operator":"<>d","values":["2022-04-29","2022-05-03"]}}] _embedded: elements: - _type: Day date: '2022-04-29' name: Friday working: true _links: self: href: "/api/v3/days/2022-04-29" weekday: href: "/api/v3/days/week/5" title: Friday - _type: Day date: '2022-04-30' name: Saturday working: false _links: self: href: "/api/v3/days/2022-04-30" nonWorkingReasons: - href: "/api/v3/days/week/6" title: Saturday weekday: href: "/api/v3/days/week/6" title: Saturday - _type: Day date: '2022-05-01' name: Sunday (Labour day) working: false _links: self: href: "/api/v3/days/2022-05-01" nonWorkingReasons: - href: "/api/v3/days/week/7" title: Sunday - href: "/api/v3/days/non_working/2022-05-01" title: Labour day weekday: href: "/api/v3/days/week/7" title: Sunday - _type: Day date: '2022-05-02' name: Monday working: true _links: self: href: "/api/v3/days/2022-05-02" weekday: href: "/api/v3/days/week/1" title: Monday - _type: Day date: '2022-05-03' name: Tuesday working: true _links: self: href: "/api/v3/days/2022-05-03" weekday: href: "/api/v3/days/week/2" title: Tuesday DayModel: type: object required: - _type - date - name - working properties: _type: type: string enum: - Day date: type: string format: date description: Date of the day. name: type: string description: Descriptive name for the day. working: type: boolean description: "`true` for a working day, `false` otherwise." _links: type: object required: - self properties: self: "$ref": "#/components/schemas/Link" nonWorkingReasons: type: array description: |- A list of resources describing why this day is a non-working day. Linked resources can be `NonWorkingDay` and `WeekDay` resources. This property is absent for working days. items: "$ref": "#/components/schemas/Link" weekDay: allOf: - "$ref": "#/components/schemas/Link" - description: The week day for this day. example: _type: Day date: '2022-12-25' name: Sunday (Christmas) working: false _links: self: href: "/api/v3/days/2022-12-25" nonWorkingReasons: - href: "/api/v3/days/week/7" title: Sunday - href: "/api/v3/days/non_working/2022-12-25" title: Christmas weekday: href: "/api/v3/days/week/7" title: Sunday Default_QueryModel: type: object example: _type: Query name: default filters: - _type: StatusQueryFilter name: Status _links: filter: href: "/api/v3/queries/filters/status" title: Status operator: href: "/api/v3/queries/operators/o" title: open schema: href: "/api/v3/queries/filter_instance_schemas/status" values: [] public: false sums: false timelineVisible: false timelineZoomLevel: days timelineLabels: {} highlightingMode: inline timestamps: - P0D showHierarchies: true starred: false _embedded: results: _type: WorkPackageCollection total: 234 count: 30 pageSize: 2 offset: 1 _embedded: elements: - "<--- shortened for brevity --->" _links: self: href: "/api/v3/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=1&pageSize=2&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" jumpTo: href: "/api/v3/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=%7Boffset%7D&pageSize=2&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" templated: true changeSize: href: "/api/v3/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=1&pageSize=%7Bsize%7D&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" templated: true createWorkPackage: href: "/api/v3/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/work_packages" method: post highlightedAttributes: [] _links: self: href: "/api/v3/queries/default" title: Default results: href: "/api/v3/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=1&pageSize=2&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" columns: - href: "/api/v3/queries/columns/id" title: ID - href: "/api/v3/queries/columns/subject" title: Subject - href: "/api/v3/queries/columns/type" title: Type - href: "/api/v3/queries/columns/status" title: Status - href: "/api/v3/queries/columns/priority" title: Priority - href: "/api/v3/queries/columns/assignee" title: Assignee - href: "/api/v3/queries/columns/updated_at" title: Updated on highlightedAttributes: [] groupBy: href: title: sortBy: - href: "/api/v3/queries/sort_bys/parent-desc" title: Parent (Descending) user: href: "/api/v3/users/1" title: OpenProject Admin project: href: Default_Query_for_WorkspaceModel: type: object example: _type: Query name: default filters: - _type: StatusQueryFilter name: Status _links: filter: href: "/api/v3/queries/filters/status" title: Status operator: href: "/api/v3/queries/operators/o" title: open schema: href: "/api/v3/queries/filter_instance_schemas/status" values: [] public: false sums: false timelineVisible: false timelineZoomLevel: days showHierarchies: true starred: false _embedded: results: _type: WorkPackageCollection total: 234 count: 30 pageSize: 2 offset: 1 _embedded: elements: - "<--- shortened for brevity --->" _links: self: href: "/api/v3/workspaces/42/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=1&pageSize=2&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" jumpTo: href: "/api/v3/workspaces/42/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=%7Boffset%7D&pageSize=2&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" templated: true changeSize: href: "/api/v3/workspaces/42/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=1&pageSize=%7Bsize%7D&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" templated: true createWorkPackage: href: "/api/v3/work_packages/form" method: post createWorkPackageImmediate: href: "/api/v3/work_packages" method: post _links: self: href: "/api/v3/workspaces/42/queries/default" title: Default results: href: "/api/v3/workspaces/42/work_packages?filters=%5B%7B%22status%22%3A%7B%22operator%22%3A%22o%22%2C%22values%22%3A%5B%5D%7D%7D%2C%7B%22dueDate%22%3A%7B%22operator%22%3A%22%3Ct%2B%22%2C%22values%22%3A%5B%221%22%5D%7D%7D%5D&offset=1&pageSize=2&sortBy=%5B%5B%22parent%22%2C%22desc%22%5D%5D" columns: - href: "/api/v3/queries/columns/id" title: ID - href: "/api/v3/queries/columns/subject" title: Subject - href: "/api/v3/queries/columns/type" title: Type - href: "/api/v3/queries/columns/status" title: Status - href: "/api/v3/queries/columns/priority" title: Priority - href: "/api/v3/queries/columns/assignee" title: Assignee - href: "/api/v3/queries/columns/updated_at" title: Updated on groupBy: href: title: sortBy: - href: "/api/v3/queries/sort_bys/parent-desc" title: Parent (Descending) user: href: "/api/v3/users/1" title: OpenProject Admin project: href: "/api/v3/projects/42" title: Lorem ipsum project DocumentModel: type: object properties: id: type: integer description: Document's id readOnly: true exclusiveMinimum: 0 title: type: string description: The title chosen for the document description: allOf: - "$ref": "#/components/schemas/Formattable" - description: A text describing the document createdAt: type: string format: date-time description: The time the document was created at readOnly: true _links: type: object required: - self - project - attachments properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This document **Resource**: Document readOnly: true project: allOf: - "$ref": "#/components/schemas/Link" - description: |- The project the document is in **Resource**: Project attachments: allOf: - "$ref": "#/components/schemas/Link" - description: |- The attachments belonging to the document **Resource**: []Attachment example: _type: Document id: 1 title: Some other document description: format: markdown raw: Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui. html: "Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui.
" createdAt: '2018-12-10T20:53:39.539Z' _links: attachments: href: "/api/v3/documents/1/attachments" addAttachment: href: "/api/v3/documents/1/attachments" method: post self: href: "/api/v3/documents/1" title: Some document project: href: "/api/v3/projects/19" title: Some project _embedded: project: _type: Project... attachments: _type: Collection total: 2 count: 2 _embedded...: elements: [] _links: self: href: "/api/v3/documents/1/attachments" DocumentsModel: type: object example: _type: Collection total: 2 count: 2 pageSize: 30 offset: 1 _embedded: elements: - description: format: markdown raw: Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui. html: "Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui.
" _type: Document id: 1 title: Some other document createdAt: '2018-12-10T20:53:39.966Z' _links: attachments: href: "/api/v3/documents/1/attachments" addAttachment: href: "/api/v3/documents/1/attachments" method: post self: href: "/api/v3/documents/1" title: Some document project: href: "/api/v3/projects/19" title: Some project - description: format: markdown raw: Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui. html: "Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui.
" _type: Document id: 2 title: Some other document createdAt: '2018-12-10T20:55:54.886Z' _links: attachments: href: "/api/v3/documents/2/attachments" addAttachment: href: "/api/v3/documents/2/attachments" method: post self: href: "/api/v3/documents/2" title: Some other document project: href: "/api/v3/projects/29" title: Some other project _links: self: href: "/api/v3/documents?offset=1&pageSize=30" jumpTo: href: "/api/v3/documents?offset=%7Boffset%7D&pageSize=30" templated: true changeSize: href: "/api/v3/documents?offset=1&pageSize=%7Bsize%7D" templated: true EmojiReactionModel: type: object properties: _type: type: string enum: - EmojiReaction id: type: string description: 'Emoji reaction id (format: reactable_id-reaction)' example: 1-thumbs_up reaction: type: string description: The reaction identifier example: thumbs_up emoji: type: string description: The emoji character example: "\U0001F44D" reactionsCount: type: integer description: Number of users who reacted with this emoji minimum: 1 example: 3 firstReactionAt: type: string format: date-time description: Time of the first reaction _links: type: object properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: This emoji reaction reactable: allOf: - "$ref": "#/components/schemas/Link" - description: The activity this emoji reaction belongs to reactingUsers: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: The users who reacted with this emoji example: _type: EmojiReaction id: 1-thumbs_up reaction: thumbs_up emoji: "\U0001F44D" reactionsCount: 3 firstReactionAt: '2024-04-08T15:37:19.275Z' _links: self: href: "/api/v3/emoji_reactions/1-thumbs_up" reactable: href: "/api/v3/activities/1" reactingUsers: - href: "/api/v3/users/435" title: John Doe - href: "/api/v3/users/436" title: Jane Smith - href: "/api/v3/users/437" title: Bob Johnson EmojiReactions_Model: type: object properties: _type: type: string enum: - Collection total: type: integer description: Total number of emoji reactions minimum: 0 count: type: integer description: Number of emoji reactions in this response minimum: 0 _embedded: type: object properties: elements: type: array items: "$ref": "#/components/schemas/EmojiReactionModel" _links: type: object properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: This collection example: _type: Collection total: 2 count: 2 _embedded: elements: - _type: EmojiReaction id: 1-thumbs_up reaction: thumbs_up emoji: "\U0001F44D" reactionsCount: 3 firstReactionAt: '2024-04-08T15:37:19.275Z' _links: self: href: "/api/v3/emoji_reactions/1-thumbs_up" reactable: href: "/api/v3/activities/1" reactingUsers: - href: "/api/v3/users/435" title: John Doe - href: "/api/v3/users/436" title: Jane Smith - href: "/api/v3/users/437" title: Bob Johnson - _type: EmojiReaction id: 1-heart reaction: heart emoji: "❤️" reactionsCount: 1 firstReactionAt: '2024-04-08T15:38:19.275Z' _links: self: href: "/api/v3/emoji_reactions/1-heart" reactable: href: "/api/v3/activities/1" reactingUsers: - href: "/api/v3/users/435" title: John Doe _links: self: href: "/api/v3/activities/1/emoji_reactions" 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. Example_FormModel: type: object example: _links: self: href: "/api/v3/example/form" validate: href: "/api/v3/example/form" method: POST previewMarkup: href: "/api/v3/render/markdown" method: POST commit: href: "/api/v3/example" method: PATCH _type: Form _embedded: payload: _links: status: href: "/api/v3/statuses/1" _type: Example lockVersion: 5 subject: An example title schema: _type: Schema _links: self: href: "/api/v3/example/schema" lockVersion: type: Integer writable: false subject: type: String minLength: 1 maxLength: 255 status: _links: allowedValues: - href: "/api/v3/statuses/1" title: New - href: "/api/v3/statuses/2" title: Closed type: Status _embedded: allowedValues: - _links: self: href: "/api/v3/statuses/1" _type: Status id: 1 name: New position: 1 isDefault: true isClosed: false defaultDoneRatio: 0 createdAt: '2014-05-21T08:51:20.759Z' updatedAt: '2014-05-21T09:12:00.237Z' - _links: self: href: "/api/v3/statuses/2" _type: Status id: 2 name: Closed position: 2 isDefault: false isClosed: true defaultDoneRatio: 100 createdAt: '2014-05-21T08:51:20.759Z' updatedAt: '2014-05-21T09:12:00.237Z' validationErrors: subject: _type: Error errorIdentifier: urn:openproject-org:api:v3:errors:BadExampleError message: For the purpose of this example we need a validation error. The remainder of the response pretends there were no errors. Example_SchemaModel: type: object example: _type: Schema _dependencies: [] _links: self: href: "/api/v3/example/schema" lockVersion: name: Resource Version type: Integer writable: false subject: name: Subject type: String minLength: 1 maxLength: 255 status: _links: allowedValues: - href: "/api/v3/statuses/1" title: New - href: "/api/v3/statuses/2" title: Closed name: Status type: Status location: _links _embedded: allowedValues: - _links: self: href: "/api/v3/statuses/1" _type: Status id: 1 name: New position: 1 isDefault: true isClosed: false defaultDoneRatio: 0 createdAt: '2014-05-21T08:51:20.991Z' updatedAt: '2014-05-21T09:12:00.155Z' - _links: self: href: "/api/v3/statuses/2" _type: Status id: 2 name: Closed position: 2 isDefault: false isClosed: true defaultDoneRatio: 100 createdAt: '2014-05-21T08:51:20.991Z' updatedAt: '2014-05-21T09:12:00.155Z' FileLinkCollectionReadModel: allOf: - "$ref": "#/components/schemas/PaginatedCollectionModel" - type: object properties: _links: type: object properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This file links collection **Resource**: FileLinkCollectionReadModel _embedded: type: object properties: elements: type: array items: "$ref": "#/components/schemas/FileLinkReadModel" example: _type: Collection total: 2 count: 2 pageSize: 30 offset: 1 _links: self: href: "/api/v3/work_packages/42/file_links" jumpTo: href: "/api/v3/work_packages/42/file_links?offset=%7Boffset%7D&pageSize=30" templated: true changeSize: href: "/api/v3/work_packages/42/file_links?offset=1&pageSize=%7Bsize%7D" templated: true _embedded: elements: - id: 1337 _type: FileLink createdAt: '2021-12-20T13:37:00.211Z' updatedAt: '2021-12-20T13:37:00.211Z' originData: id: '5503' name: logo.png mimeType: image/png size: 16042 createdAt: '2021-12-19T09:42:10.170Z' lastModifiedAt: '2021-12-20T14:00:13.987Z' createdByName: Luke Skywalker lastModifiedByName: Anakin Skywalker _links: self: href: "/api/v3/work_package/17/file_links/1337" title: file link storage: href: "/api/v3/storage/42" title: storage container: href: "/api/v3/work_package/17" title: work package creator: href: "/api/v3/users/33" title: Obi-Wan Kenobi delete: href: "/api/v3/work_package/17/file_links/1337" method: delete originOpen: href: https://nextcloud.deathstar.rocks/index.php/f?fileid=5503 staticOriginOpen: href: "/api/v3/work_package/17/file_links/1337/open" - _hint: File Link resource shortened for brevity id: 1338 FileLinkCollectionWriteModel: type: object required: - _embedded properties: _embedded: type: object required: - elements properties: elements: type: array items: "$ref": "#/components/schemas/FileLinkWriteModel" example: _embedded: elements: - originData: id: '5503' name: logo.png mimeType: image/png size: 16042 createdAt: '2021-12-19T09:42:10.170Z' lastModifiedAt: '2021-12-20T14:00:13.987Z' createdByName: Luke Skywalker lastModifiedByName: Anakin Skywalker _links: storage: href: "/api/v3/storage/42" FileLinkOriginDataModel: type: object required: - id - name properties: id: type: string description: Linked file's id on the origin name: type: string description: Linked file's name on the origin mimeType: type: string minLength: 0 description: |- MIME type of the linked file. To link a folder entity, the custom MIME type `application/x-op-directory` MUST be provided. Otherwise it defaults back to an unknown MIME type. size: type: integer minimum: 0 description: file size on origin in bytes createdAt: type: string format: date-time description: Timestamp of the creation datetime of the file on the origin lastModifiedAt: type: string format: date-time description: Timestamp of the datetime of the last modification of the file on the origin createdByName: type: string description: Display name of the author that created the file on the origin lastModifiedByName: type: string description: Display name of the author that modified the file on the origin last FileLinkReadModel: type: object properties: id: type: integer description: File link id _type: type: string enum: - FileLink createdAt: type: string format: date-time description: Time of creation updatedAt: type: string format: date-time description: Time of the most recent change to the file link originData: "$ref": "#/components/schemas/FileLinkOriginDataModel" _embedded: type: object required: - storage - container properties: storage: "$ref": "#/components/schemas/StorageReadModel" _links: type: object properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This file link. **Resource**: FileLink storage: allOf: - "$ref": "#/components/schemas/Link" - description: |- The storage resource of the linked file. **Resource**: Storage container: allOf: - "$ref": "#/components/schemas/Link" - description: |- The container the origin file is linked to. Can be one of the following **Resources**: - WorkPackage creator: allOf: - "$ref": "#/components/schemas/Link" - description: |- The creator of the file link. **Resource**: User delete: allOf: - "$ref": "#/components/schemas/Link" - description: |- The uri to delete the file link. **Resource**: N/A status: allOf: - "$ref": "#/components/schemas/Link" - description: |- The urn of the user specific file link status on its storage. Can be one of: - urn:openproject-org:api:v3:file-links:permission:ViewAllowed - urn:openproject-org:api:v3:file-links:permission:ViewNotAllowed - urn:openproject-org:api:v3:file-links:NotFound - urn:openproject-org:api:v3:file-links:Error **Resource**: N/A originOpen: allOf: - "$ref": "#/components/schemas/Link" - description: |- The uri to open the origin file on the origin itself. **Resource**: N/A staticOriginOpen: allOf: - "$ref": "#/components/schemas/Link" - description: |- A static uri to open the origin file on the storage. Responds with a redirect. **Resource**: N/A originOpenLocation: allOf: - "$ref": "#/components/schemas/Link" - description: |- The uri to open the location of origin file on the origin itself. **Resource**: N/A staticOriginOpenLocation: allOf: - "$ref": "#/components/schemas/Link" - description: |- A static uri to open the location of the origin file on the storage. Responds with a redirect. **Resource**: N/A staticOriginDownload: allOf: - "$ref": "#/components/schemas/Link" - description: |- A static uri to generate a new download URL from the storage. Responds with a redirect. **Resource**: N/A example: id: 1337 _type: FileLink createdAt: '2021-12-20T13:37:00.211Z' updatedAt: '2021-12-20T13:37:00.211Z' originData: id: '5503' name: logo.png mimeType: image/png size: 16042 createdAt: '2021-12-19T09:42:10.170Z' lastModifiedAt: '2021-12-20T14:00:13.987Z' createdByName: Luke Skywalker lastModifiedByName: Anakin Skywalker _embedded: storage: id: 1337 _type: Storage name: It's no moon createdAt: '2021-12-20T13:37:00.211Z' updatedAt: '2021-12-20T13:37:00.211Z' _links: self: href: "/api/v3/storages/1337" title: It's no moon type: href: urn:openproject-org:api:v3:storages:nextcloud title: Nextcloud origin: href: https://nextcloud.deathstar.rocks/ open: href: https://example.com/a-link-to-open-the-file authorizationState: href: urn:openproject-org:api:v3:storages:authorization:Connected container: _hint: Work package resource shortened for brevity _type: WorkPackage id: 1528 subject: Develop API _links: self: href: "/api/v3/work_package/17/file_links/1337" storage: href: "/api/v3/storage/42" title: It's no moon container: href: "/api/v3/work_package/17" title: Develop API creator: href: "/api/v3/users/33" title: Obi-Wan Kenobi delete: href: "/api/v3/work_package/17/file_links/1337" status: href: urn:openproject-org:api:v3:file-links:permission:ViewAllowed title: View allowed originOpen: href: https://nextcloud.deathstar.rocks/index.php/f/5503?openfile=1 staticOriginOpen: href: "/api/v3/file_links/1337/open" originOpenLocation: href: https://nextcloud.deathstar.rocks/index.php/f/5503?openfile=0 staticOriginOpenLocation: href: "/api/v3/file_links/1337/open?location=true" staticOriginDownload: href: "/api/v3/file_links/1337/download" FileLinkWriteModel: type: object required: - originData - _links properties: originData: "$ref": "#/components/schemas/FileLinkOriginDataModel" _links: oneOf: - type: object required: - storage properties: storage: allOf: - "$ref": "#/components/schemas/Link" - description: |- The storage resource of the linked file. **Resource**: Storage - type: object required: - storageUrl properties: storageUrl: allOf: - "$ref": "#/components/schemas/Link" - description: |- The storage url the file link references to. **Resource**: N/A example: originData: id: '5503' name: logo.png mimeType: image/png size: 16042 createdAt: '2021-12-19T09:42:10.170Z' lastModifiedAt: '2021-12-20T14:00:13.987Z' createdByName: Luke Skywalker lastModifiedByName: Anakin Skywalker _links: storageUrl: href: https://nextcloud.my-deathstar.org FileUploadForm: type: object properties: metadata: type: object properties: fileName: type: string file: type: string format: binary Formattable: type: object required: - format properties: format: type: string enum: - plain - markdown - custom readOnly: true description: Indicates the formatting language of the raw text example: markdown raw: type: string description: The raw text, as entered by the user example: I **am** formatted! html: type: string readOnly: true description: The text converted to HTML according to the format example: I am formatted! example: format: markdown raw: I am formatted! html: I am formatted! GridCollectionModel: allOf: - "$ref": "#/components/schemas/PaginatedCollectionModel" - type: object required: - _embedded properties: _embedded: type: object required: - elements properties: elements: type: array items: "$ref": "#/components/schemas/GridReadModel" GridReadModel: type: object required: - _type - id - rowCount - columnCount - widgets - _links properties: _type: type: string enum: - Grid id: type: integer description: Grid's id minimum: 1 rowCount: type: integer description: The number of rows the grid has minimum: 1 columnCount: type: integer description: The number of columns the grid has minimum: 1 widgets: type: array description: |- The set of `GridWidget`s selected for the grid. # Conditions - The widgets must not overlap. items: "$ref": "#/components/schemas/GridWidgetModel" createdAt: type: string format: date-time description: The time the grid was created. updatedAt: type: string format: date-time description: The time the grid was last updated. _links: type: object required: - self - scope properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This grid. **Resource**: Grid attachments: allOf: - "$ref": "#/components/schemas/Link" - description: |- The attachment collection of this grid. **Resource**: AttachmentCollection addAttachment: allOf: - "$ref": "#/components/schemas/Link" - description: Link for adding an attachment to this grid. scope: allOf: - "$ref": "#/components/schemas/Link" - description: The location where this grid is used, usually represented as a relative URL. updateImmediately: allOf: - "$ref": "#/components/schemas/Link" - description: |- Directly perform edits on this grid. # Conditions **Permission**: depends on the page the grid is defined for update: allOf: - "$ref": "#/components/schemas/Link" - description: |- Validate edits on the grid via a form resource before committing # Conditions **Permission**: depends on the page the grid is defined for delete: allOf: - "$ref": "#/components/schemas/Link" - description: Deletes this grid resource. GridWidgetModel: type: object required: - _type - id - identifier - startRow - endRow - startColumn - endColumn properties: _type: type: string enum: - GridWidget id: type: - integer - 'null' description: The grid widget's unique identifier. Can be null, if a new widget is created within a grid. minimum: 1 identifier: type: string description: An alternative, human legible, and unique identifier. startRow: type: integer description: The index of the starting row of the widget. The row is inclusive. minimum: 1 endRow: type: integer description: The index of the ending row of the widget. The row is exclusive. minimum: 1 startColumn: type: integer description: The index of the starting column of the widget. The column is inclusive. minimum: 1 endColumn: type: integer description: The index of the ending column of the widget. The column is exclusive. minimum: 1 options: type: object GridWriteModel: type: object properties: rowCount: type: integer description: The number of rows the grid has minimum: 1 columnCount: type: integer description: The number of columns the grid has minimum: 1 widgets: type: array description: |- The set of `GridWidget`s selected for the grid. # Conditions - The widgets must not overlap. items: "$ref": "#/components/schemas/GridWidgetModel" _links: type: object properties: scope: allOf: - "$ref": "#/components/schemas/Link" - description: The location where this grid is used, usually represented as a relative URL. GroupCollectionModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This group collection **Resource**: Collection _embedded: type: object required: - elements properties: elements: type: array items: "$ref": "#/components/schemas/GroupModel" example: _type: Collection total: 2 count: 2 _links: self: href: "/api/v3/groups" _embedded: elements: - _type: Group id: 1337 name: Stormtroopers createdAt: '2022-09-23T11:06:36.300Z' updatedAt: '2022-09-23T11:06:36.300Z' _links: self: href: "/api/v3/groups/9" title: Stormtroopers delete: href: "/api/v3/group/9" method: delete memberships: href: /api/v3/memberships?filters=[{"principal":{"operator":"=","values":["9"]}}] title: Memberships updateImmediately: href: "/api/v3/group/9" method: patch members: - href: "/api/v3/users/363" title: ST-097E - href: "/api/v3/users/60" title: ST-C-334 - _abbreviated: Group resource shortened for brevity id: 1338 GroupModel: allOf: - "$ref": "#/components/schemas/PrincipalModel" - "$ref": "#/components/schemas/CustomFieldProperties" - type: object required: - _type - _embedded properties: _type: type: string enum: - Group _embedded: type: object properties: members: type: array description: Embedded list of members. items: "$ref": "#/components/schemas/UserModel" _links: type: object properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This group resource **Resource**: Group members: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: |- A member of the group # Conditions: - user has permission `manage_members` in any project **Resource**: User memberships: allOf: - "$ref": "#/components/schemas/Link" - description: |- An collection of all memberships of the group. **Resource**: MembershipCollection delete: allOf: - "$ref": "#/components/schemas/Link" - description: |- An href to delete the group. # Conditions: - `admin` updateImmediately: allOf: - "$ref": "#/components/schemas/Link" - description: |- An href to update the group. # Conditions: - `admin` **Resource**: Group GroupWriteModel: type: object properties: name: type: string description: The new group name. _links: type: object properties: members: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: |- A new member for the group. **Resource**: User example: name: Emperor's guard _links: members: - href: "/api/v3/users/42" - href: "/api/v3/users/43" - href: "/api/v3/users/44" HelpTextCollectionModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This help text collection **Resource**: HelpTextCollectionModel _embedded: type: object required: - elements properties: elements: type: array items: "$ref": "#/components/schemas/HelpTextModel" example: total: 2 count: 2 _type: Collection _embedded: elements: - _type: HelpText _links: self: href: "/api/v3/help_texts/1" editText: href: "/admin/attribute_help_texts/1/edit" type: text/html attachments: href: "/api/v3/help_texts/1/attachments" addAttachment: href: "/api/v3/help_texts/1/attachments" method: post id: 1 attribute: id attributeCaption: ID scope: WorkPackage helpText: format: markdown raw: Help text for id attribute. html: "Help text for id attribute.
" - _type: HelpText _links: self: href: "/api/v3/help_texts/2" editText: href: "/admin/attribute_help_texts/2/edit" type: text/html attachments: href: "/api/v3/help_texts/2/attachments" addAttachment: href: "/api/v3/help_texts/2/attachments" method: post id: 2 attribute: status attributeCaption: Status scope: WorkPackage helpText: format: markdown raw: Help text for status attribute. html: "Help text for status attribute.
" _links: self: href: "/api/v3/help_texts" HelpTextModel: type: object required: - _type - id - attribute - scope - helpText - _links properties: _type: type: string enum: - HelpText id: type: integer format: int64 minimum: 1 attribute: type: string description: The attribute the help text is assigned to. scope: type: string enum: - WorkPackage - Project helpText: "$ref": "#/components/schemas/Formattable" _links: type: object required: - self - editText - attachments - addAttachment properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This help text resource. **Resource**: HelpText editText: allOf: - "$ref": "#/components/schemas/Link" - description: |- Edit the help text entry. **Resource**: text/html attachments: allOf: - "$ref": "#/components/schemas/Link" - description: |- The attachment collection of this help text. **Resource**: AttachmentCollection addAttachment: allOf: - "$ref": "#/components/schemas/Link" - description: Add an attachment to the help text. example: _type: HelpText id: 1 attribute: id scope: WorkPackage caption: Some plain text caption helpText: format: markdown raw: Help text for id attribute. html: "Help text for id attribute.
" _links: self: href: "/api/v3/help_texts/1" editText: href: "/admin/attribute_help_texts/1/edit" type: text/html attachments: href: "/api/v3/help_texts/1/attachments" addAttachment: href: "/api/v3/help_texts/1/attachments" method: post HierarchyItemCollectionModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This hierarchy item collection **Resource**: HierarchyItemCollectionModel _embedded: type: object required: - elements properties: elements: type: array items: "$ref": "#/components/schemas/HierarchyItemReadModel" HierarchyItemReadModel: type: object required: - _type - id - label - short - weight - formattedWeight - depth - _links properties: _type: type: string enum: - HierarchyItem id: type: integer description: Hierarchy item identifier label: type: - string - 'null' description: The label of the hierarchy item short: type: - string - 'null' description: |- The short name of the hierarchy item. If this attribute is set, the `weight` and the `formattedWeight` are `null`. weight: type: - string - 'null' description: |- The accurate weight of the hierarchy item. As a decimal precision number it is written as a string to not loose precision with conversion to a floating point number. If this attribute is set, the `short` is null. formattedWeight: type: - string - 'null' description: |- The formatted weight of the hierarchy item. The standard formatting of the OpenProject server is used to convert this number into a representable format - i.e. falling back to scientific notation for very small and very big numbers. If this attribute is set, the `short` is null. depth: type: integer description: The hierarchy depth. The root item has a depth of 0. _links: type: object required: - self - children - branch properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This hierarchy item **Resource**: HierarchyItem parent: allOf: - "$ref": "#/components/schemas/Link" - description: |- The hierarchy item that is the parent of the current hierarchy item **Resource**: HierarchyItem children: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: |- A hierarchy item that is a child of the current hierarchy item **Resource**: HierarchyItem branch: allOf: - "$ref": "#/components/schemas/Link" - description: |- The branch of the hierarchy item, ordered from root to node. **Resource**: HierarchyItemCollection Link: type: object required: - href properties: href: type: - string - 'null' description: URL to the referenced resource (might be relative) title: type: string description: Representative label for the resource templated: type: boolean default: false description: If true the href contains parts that need to be replaced by the client method: type: string default: GET description: The HTTP verb to use when requesting the resource payload: type: object description: The payload to send in the request to achieve the desired result identifier: type: string description: An optional unique identifier to the link object type: type: string description: The MIME-Type of the returned resource. example: href: "/api/v3/work_packages" method: POST List_actionsModel: type: object example: _links: self: href: "/api/v3/actions" total: 2 count: 2 _type: Collection _embedded: elements: - _links: self: href: "/api/v3/actions/work_packages/create" title: Add work package _type: Action id: work_packages/create name: Add work package description: Creating a work package within a project including the uploading of attachments. Some attributes might not be selected, e.g version which requires a second permission modules: - work_packages - _links: self: href: "/api/v3/actions/work_packages/assign_versions" title: Assigning version _type: Action id: work_packages/assign_versions name: Assign version description: Assigning a work package to a version when creating/updating a work package. Only principals having this permission can assign a value to the version property of the work package resource. modules: - work_packages - versions List_available_parent_project_candidatesModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- The project collection **Resource**: ProjectCollection readOnly: true _embedded: type: object properties: elements: type: array readOnly: true items: allOf: - "$ref": "#/components/schemas/ProjectModel" - "$ref": "#/components/schemas/ProgramModel" - "$ref": "#/components/schemas/PortfolioModel" description: Collection of projects List_capabilitiesModel: type: object example: _links: self: href: "/api/v3/capabilities" changeSize: href: "/api/v3/capabilities?pageSize={size}" templated: true jumpTo: href: "/api/v3/capabilities?offset={offset}" templated: true total: 4 count: 4 _type: Collection _embedded: elements: - _links: self: href: "/api/v3/capabilities/work_packages/create/p123-567" action: href: "/api/v3/actions/work_packages/create" title: Add work package context: href: "/api/v3/projects/123" title: A project principal: href: "/api/v3/users/567" title: Some user _type: Capability id: work_packages/create/p123-567 - _links: self: href: "/api/v3/capabilities/work_packages/assignee/p123-567" action: href: "/api/v3/actions/work_packages/assignee" context: href: "/api/v3/projects/123" title: A project principal: href: "/api/v3/users/567" title: Some user _type: Capability id: work_packages/assignee/p123-567 - _links: self: href: "/api/v3/capabilities/memberships/create/p345-821" title: Create members action: href: "/api/v3/actions/memberships/create" context: href: "/api/v3/projects/345" title: A project principal: href: "/api/v3/users/821" title: Some user _type: Capability id: memberships/create/p345-821 - _links: self: href: "/api/v3/capabilities/users/delete/g-567" title: Delete user context: href: "/api/v3/capabilities/context/global" title: Global principal: href: "/api/v3/users/567" title: Some user _type: Capability id: users/delete/g-567 List_of_NewsModel: type: object example: _type: Collection total: 78 count: 2 pageSize: 2 offset: 1 _embedded: elements: - _type: News id: 1 title: asperiores possimus nam doloribus ab summary: Celebrer spiculum colo viscus claustrum atque. Id nulla culpa sumptus. Comparo crapula depopulo demonstro. description: format: markdown raw: Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui. html: "Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui.
" createdAt: '2015-03-20T12:57:01.509Z' _links: self: href: "/api/v3/news/1" title: asperiores possimus nam doloribus ab project: href: "/api/v3/projects/1" title: Seeded Project author: href: "/api/v3/users/2" title: Peggie Feeney updateImmediately: href: api/v3/news/1 method: patch delete: href: api/v3/news/1 method: delete - _type: News id: 2 title: terminatio tutamen. Officia adeptio sp summary: Consequatur sequi surculus creo tui aequitas. description: format: markdown raw: Amicitia alius cattus voluntarius. Virgo viduo terminatio tutamen. Officia adeptio spectaculum atavus nisi cum concido bis. Harum caecus auxilium sol theatrum eaque consequatur. Omnis aeger suus adipisci cicuta. Cur delicate alias curto cursim atqui talio fugiat. html: "Amicitia alius cattus voluntarius. Virgo viduo terminatio tutamen. Officia adeptio spectaculum atavus nisi cum concido bis. Harum caecus auxilium sol theatrum eaque consequatur. Omnis aeger suus adipisci cicuta. Cur delicate alias curto cursim atqui talio fugiat.
" createdAt: '2015-03-20T12:57:01.509Z' _links: self: href: "/api/v3/news/2" title: terminatio tutamen. Officia adeptio sp project: href: "/api/v3/projects/1" title: Seeded Project author: href: "/api/v3/users/2" title: Peggie Feeney updateImmediately: href: api/v3/news/2 method: patch delete: href: api/v3/news/2 method: delete _links: self: href: "/api/v3/news?offset=1&pageSize=2" jumpTo: href: "/api/v3/news?offset=%7Boffset%7D&pageSize=2" templated: true changeSize: href: "/api/v3/news?offset=1&pageSize=%7Bsize%7D" templated: true nextByOffset: href: "/api/v3/news?offset=2&pageSize=2" List_workspaces_by_versionModel: type: object example: _links: self: href: "/api/v3/versions/2/workspaces" total: 1 count: 1 _type: Collection _embedded: elements: - _type: Project _links: self: href: "/api/v3/projects/1" title: Lorem categories: href: "/api/v3/projects/1/categories" versions: href: "/api/v3/projects/1/versions" status: href: "/api/v3/project_statuses/on_track" title: On track id: 1 identifier: project_identifier name: Project example description: format: markdown raw: Lorem **ipsum** dolor sit amet html: "Lorem ipsum dolor sit amet
" active: true statusExplanation: format: markdown raw: Everything **fine** html: "Everything fine
" createdAt: '2014-05-21T08:51:20.142Z' updatedAt: '2014-05-21T08:51:20.142Z' MeetingCollectionModel: allOf: - "$ref": "#/components/schemas/PaginatedCollectionModel" - type: object required: - _embedded - _links properties: _embedded: type: object required: - elements properties: elements: type: array items: "$ref": "#/components/schemas/MeetingModel" _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- The link to this meeting collection resource **Resource**: MeetingCollection MeetingModel: type: object required: - _type - id - lockVersion - title - startTime - endTime - duration - createdAt - updatedAt properties: _type: type: string enum: - Meeting id: type: integer description: Identifier of this meeting minimum: 1 title: type: string description: The meeting's title location: type: string description: The meeting's location lockVersion: type: integer description: The version of the item as used for optimistic locking startTime: type: string format: date-time description: The scheduled meeting start time. endTime: type: string format: date-time description: The scheduled meeting start time. duration: type: number description: The meeting duration in hours. createdAt: type: string format: date-time description: Time of creation. Can be writable by admins with the `apiv3_write_readonly_attributes` setting enabled. updatedAt: type: string format: date-time description: Time of the most recent change to the meeting. _embedded: type: object required: - attachments - author properties: attachments: "$ref": "#/components/schemas/Attachments_Model" author: "$ref": "#/components/schemas/UserModel" project: "$ref": "#/components/schemas/ProjectModel" _links: type: object properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This meeting **Resource**: Meeting author: allOf: - "$ref": "#/components/schemas/Link" - description: |- The user having created the meeting **Resource**: User project: allOf: - "$ref": "#/components/schemas/Link" - description: |- The project the meeting is in **Resource**: Project attachments: allOf: - "$ref": "#/components/schemas/Link" - description: |- The attachment collection of this grid. **Resource**: AttachmentCollection addAttachment: allOf: - "$ref": "#/components/schemas/Link" - description: |- Attach a file to the meeting # Conditions **Permission**: edit meeting MarkdownModel: type: string format: html example:Hello world! This is markdown!
MembershipCollectionModel: allOf: - "$ref": "#/components/schemas/PaginatedCollectionModel" - type: object required: - _embedded properties: _embedded: type: object required: - elements properties: elements: type: array items: "$ref": "#/components/schemas/MembershipReadModel" MembershipFormModel: type: object required: - _type - _embedded - _links properties: _type: type: string enum: - Form _embedded: type: object required: - payload - schema - validationError properties: payload: "$ref": "#/components/schemas/MembershipWriteModel" schema: "$ref": "#/components/schemas/MembershipSchemaModel" validationError: type: object properties: base: "$ref": "#/components/schemas/ErrorResponse" principal: "$ref": "#/components/schemas/ErrorResponse" roles: "$ref": "#/components/schemas/ErrorResponse" _links: type: object required: - self - validate - commit properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This form request. **Resource**: Form validate: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: The endpoint to validate the membership payload. commit: allOf: - "$ref": "#/components/schemas/Link" - description: |- The endpoint to create the membership with the same payload, as sent to the form. **Resource**: Membership MembershipReadModel: type: object required: - _type - id - createdAt - updatedAt - _links properties: _type: type: string enum: - Membership id: type: integer description: The membership's id minimum: 1 createdAt: type: string format: date-time description: The time the membership was created. updatedAt: type: string format: date-time description: The time the membership was last updated. _embedded: type: object properties: project: oneOf: - "$ref": "#/components/schemas/ProjectModel" - "$ref": "#/components/schemas/ProgramModel" - "$ref": "#/components/schemas/PortfolioModel" principal: anyOf: - "$ref": "#/components/schemas/UserModel" - "$ref": "#/components/schemas/GroupModel" roles: type: array items: "$ref": "#/components/schemas/RoleModel" _links: type: object required: - self - schema - project - principal - roles properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This membership. **Resource**: Membership schema: allOf: - "$ref": "#/components/schemas/Link" - description: |- This membership schema. **Resource**: Schema update: allOf: - "$ref": "#/components/schemas/Link" - description: |- The endpoint for updating the membership. # Conditions **Permission**: manage_members updateImmediately: allOf: - "$ref": "#/components/schemas/Link" - description: |- The endpoint for updating the membership without form validation. # Conditions **Permission**: manage_members project: allOf: - "$ref": "#/components/schemas/Link" - description: |- The workspace the membership is related to. **Resource**: Workspace principal: allOf: - "$ref": "#/components/schemas/Link" - description: |- The principal the membership is related to. **Resource**: Principal roles: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: |- A role the principal has. **Resource**: Role MembershipSchemaModel: allOf: - "$ref": "#/components/schemas/SchemaModel" - type: object required: - id - createdAt - updatedAt - notificationMessage - project - principal - roles properties: id: "$ref": "#/components/schemas/SchemaPropertyModel" createdAt: "$ref": "#/components/schemas/SchemaPropertyModel" updatedAt: "$ref": "#/components/schemas/SchemaPropertyModel" notificationMessage: "$ref": "#/components/schemas/SchemaPropertyModel" project: "$ref": "#/components/schemas/SchemaPropertyModel" principal: "$ref": "#/components/schemas/SchemaPropertyModel" roles: "$ref": "#/components/schemas/SchemaPropertyModel" MembershipWriteModel: type: object required: - _links properties: _links: type: object properties: principal: allOf: - "$ref": "#/components/schemas/Link" - description: |- The principal that is to get a membership. **Resource**: Principal roles: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: |- A role the principal has. **Resource**: Role project: allOf: - "$ref": "#/components/schemas/Link" - description: |- The project that is to get a membership. If no project is given, the principal's membership is supposed to be global. **Resource**: Project _meta: type: object properties: notificationMessage: allOf: - "$ref": "#/components/schemas/Formattable" - description: A customised notification message, which will overwrite the standard notification. sendNotification: type: boolean description: Set to false, if no notification should get sent. default: true NewsCreateModel: type: object properties: title: type: string description: The headline of the news readOnly: true summary: type: string description: A short summary readOnly: true description: allOf: - "$ref": "#/components/schemas/Formattable" - description: The main body of the news with all the details _links: type: object required: - project properties: project: allOf: - "$ref": "#/components/schemas/Link" - description: |- The project the news is situated in **Resource**: Project example: title: asperiores possimus nam doloribus ab summary: Celebrer spiculum colo viscus claustrum atque. Id nulla culpa sumptus. Comparo crapula depopulo demonstro. description: format: markdown raw: "**Videlicet deserunt aequitas cognatus**. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui." _links: project: href: "/api/v3/projects/1" NewsModel: type: object properties: id: type: integer description: News' id readOnly: true exclusiveMinimum: 0 title: type: string description: The headline of the news readOnly: true summary: type: string description: A short summary readOnly: true description: allOf: - "$ref": "#/components/schemas/Formattable" - description: The main body of the news with all the details readOnly: true createdAt: type: string format: date-time description: The time the news was created at readOnly: true _links: type: object required: - self - project - author properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This news **Resource**: News readOnly: true project: allOf: - "$ref": "#/components/schemas/Link" - description: |- The workspace the news is situated in **Resource**: workspace author: allOf: - "$ref": "#/components/schemas/Link" - description: |- The user having created the news **Resource**: User readOnly: true updateImmediately: allOf: - "$ref": "#/components/schemas/Link" - description: |- Directly perform edits on the news **Permission** manage news delete: allOf: - "$ref": "#/components/schemas/Link" - description: |- Delete the news **Permission** manage news example: _type: News id: 1 title: asperiores possimus nam doloribus ab summary: Celebrer spiculum colo viscus claustrum atque. Id nulla culpa sumptus. Comparo crapula depopulo demonstro. description: format: markdown raw: Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui. html: "Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui.
" createdAt: '2015-03-20T12:57:01.908Z' _links: self: href: "/api/v3/news/1" title: asperiores possimus nam doloribus ab project: href: "/api/v3/projects/1" title: A project author: href: "/api/v3/users/2" title: Peggie Feeney updateImmediately: href: api/v3/news/1 method: patch delete: href: api/v3/news/1 method: delete _embedded: project: _type: Workspace... author: _type: User... NonWorkingDayCollectionModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This non working days collection **Resource**: NonWorkingDayCollectionModel _embedded: type: object required: - elements properties: elements: type: array description: The array of non working days. Each day has a name and a date. items: "$ref": "#/components/schemas/NonWorkingDayModel" example: _type: Collection total: 2 count: 2 _links: self: href: /api/v3/non_working?filters=[{"interval":{"operator":"<>d","values":["2022-04-29","2022-12-24"]}}] _embedded: elements: - _type: NonWorkingDay date: '2022-12-24' name: Christmas Evening _links: self: href: "/api/v3/days/non_working/2022-04-24" weekday: href: "/api/v3/days/week/6" title: Saturday - _type: NonWorkingDay date: '2022-05-01' name: Labour day _links: self: href: "/api/v3/days/non_working/2022-05-01" weekday: href: "/api/v3/days/week/7" title: Sunday NonWorkingDayModel: type: object required: - _type - date - name properties: _type: type: string enum: - NonWorkingDay date: type: string format: date description: Date of the non-working day. name: type: string description: Descriptive name for the non-working day. _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This non-working day. **Resource**: NonWorkingDay example: _type: NonWorkingDay date: '2022-12-25' name: Christmas _links: self: href: "/api/v3/days/non_working/2022-12-25" title: Christmas NotificationCollectionModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This notification collection **Resource**: NotificationCollectionModel jumpTo: allOf: - "$ref": "#/components/schemas/Link" - description: |- The notification collection at another offset **Resource**: NotificationCollectionModel changeSize: allOf: - "$ref": "#/components/schemas/Link" - description: |- The notification collection with another size **Resource**: NotificationCollectionModel _embedded: type: object required: - elements - detailsSchemas properties: elements: type: array items: "$ref": "#/components/schemas/NotificationModel" detailsSchemas: type: array items: "$ref": "#/components/schemas/SchemaModel" NotificationModel: type: object properties: _type: type: string enum: - Notification id: type: integer description: Notification id minimum: 1 reason: type: string description: The reason for the notification enum: - assigned - commented - created - dateAlert - mentioned - prioritized - processed - responsible - subscribed - scheduled - watched readIAN: type: boolean description: Whether the notification is marked as read details: type: array items: oneOf: - "$ref": "#/components/schemas/ValuesPropertyModel" description: A list of objects including detailed information about the notification. createdAt: type: string format: date-time description: The time the notification was created at updatedAt: type: string format: date-time description: The time the notification was last updated _embedded: type: object required: - project - resource properties: actor: "$ref": "#/components/schemas/UserModel" project: oneOf: - "$ref": "#/components/schemas/ProjectModel" - "$ref": "#/components/schemas/ProgramModel" - "$ref": "#/components/schemas/PortfolioModel" activity: "$ref": "#/components/schemas/ActivityModel" resource: oneOf: - "$ref": "#/components/schemas/WorkPackageModel" _links: type: object required: - self - project - actor - activity - resource properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This notification **Resource**: Notification readIAN: allOf: - "$ref": "#/components/schemas/Link" - description: Request to mark the notification as read. Only available if the notification is currently unread. unreadIAN: allOf: - "$ref": "#/components/schemas/Link" - description: Request to mark the notification as unread. Only available if the notification is currently read. project: allOf: - "$ref": "#/components/schemas/Link" - description: |- The workspace the notification originated in **Resource**: Workspace actor: allOf: - "$ref": "#/components/schemas/Link" - description: |- The user that caused the notification. This might be null in case no user triggered the notification. **Resource**: User resource: allOf: - "$ref": "#/components/schemas/Link" - description: |- The linked resource of the notification, if any. **Resource**: Polymorphic activity: allOf: - "$ref": "#/components/schemas/Link" - description: |- The journal activity, if the notification originated from a journal entry. This might be null in case no activity triggered the notification. **Resource**: Activity OAuthApplicationReadModel: type: object required: - id - _type - name - clientId - confidential - _links properties: id: type: integer minimum: 1 _type: type: string enum: - OAuthApplication name: type: string description: The name of the OAuth 2 application clientId: type: string description: OAuth 2 client id clientSecret: type: string description: OAuth 2 client secret. This is only returned when creating a new OAuth application. confidential: type: boolean description: true, if OAuth 2 credentials are confidential, false, if no secret is stored createdAt: type: string format: date-time description: The time the OAuth 2 Application was created at updatedAt: type: string format: date-time description: The time the OAuth 2 Application was last updated scopes: type: array description: An array of the scopes of the OAuth 2 Application items: type: string _links: type: object required: - self - owner - redirectUri properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This OAuth application **Resource**: OAuthApplication owner: allOf: - "$ref": "#/components/schemas/Link" - description: |- The user that created the OAuth application. **Resource**: User integration: allOf: - "$ref": "#/components/schemas/Link" - description: |- The resource that integrates this OAuth application into itself. Currently, only `Storage` resources are able to create and maintain own OAuth application. **Resource**: Storage redirectUri: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: |- A redirect URI of the OAuth application **Resource**: N/A example: id: 1337 _type: OAuthApplication name: Vader's secure OAuth app clientId: O5h6WObhMg1Z8IcLHRE3_LMh4jJYmmca2V6OTFSv8DA confidential: true createdAt: '2022-12-07T12:56:42.626Z' updatedAt: '2022-12-07T12:56:42.626Z' scopes: - api_v3 _links: self: href: "/api/v3/oauth_applications/1337" owner: href: "/api/v3/users/13" title: Darth Vader integration: href: "/api/v3/storages/42" title: Death Star Cloud redirectUri: - href: https://death-star.cloud.tools/index.php/apps/integration_openproject/oauth-redirect OAuthClientCredentialsReadModel: type: object required: - id - _type - clientId - confidential - _links properties: id: type: integer minimum: 1 _type: type: string enum: - OAuthClientCredentials clientId: type: string description: OAuth 2 client id confidential: type: boolean description: true, if OAuth 2 credentials are confidential, false, if no secret is stored createdAt: type: string format: date-time description: The time the OAuth client credentials were created at updatedAt: type: string format: date-time description: The time the OAuth client credentials were last updated _links: type: object required: - self - integration properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This OAuth Client Credentials object **Resource**: OAuthClientCredentials integration: allOf: - "$ref": "#/components/schemas/Link" - description: |- The resource that integrates this OAuth client credentials. Currently, only `Storage` resources are able to contain OAuth client credentials. **Resource**: Storage example: id: 1337 _type: OAuthClientCredentials clientId: O5h6WObhMg1Z8IcLHRE3_LMh4jJYmmca2V6OTFSv8DA confidential: true createdAt: '2022-12-07T12:56:42.836Z' updatedAt: '2022-12-07T12:56:42.836Z' _links: self: href: "/api/v3/oauth_client_credentials/1337" integration: href: "/api/v3/storages/42" title: Death Star Cloud OAuthClientCredentialsWriteModel: type: object required: - clientId - clientSecret properties: clientId: type: string description: OAuth 2 client id clientSecret: type: string description: OAuth 2 client secret example: clientId: O5h6WObhMg1Z8IcLHRE3_LMh4jJYmmca2V6OTFSv8DA clientSecret: LSk52mn4jmtSYTgH0NzDj-u2z5LMpT8bsS0BouwJQQw OffsetPaginatedCollectionLinks: allOf: - "$ref": "#/components/schemas/CollectionLinks" - type: object required: - jumpTo - changeSize properties: jumpTo: allOf: - "$ref": "#/components/schemas/Link" - description: A templated link to jump to a given offset. changeSize: allOf: - "$ref": "#/components/schemas/Link" - description: A templated link to change the current page size. previousByOffset: allOf: - "$ref": "#/components/schemas/Link" - description: |- A link to the previous page of the collection. # Conditions - The collection is not on the first page. nextByOffset: allOf: - "$ref": "#/components/schemas/Link" - description: |- A link to the next page of the collection. # Conditions - The collection is not on the last page. OffsetPaginatedCollectionModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - pageSize - offset - _links properties: pageSize: type: integer description: |- The amount of elements per page. If not set by the request this value defaults to the server's system settings. minimum: 0 offset: type: integer description: The page offset indicating on which page the element collection starts. minimum: 0 _links: "$ref": "#/components/schemas/OffsetPaginatedCollectionLinks" PaginatedCollectionModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - pageSize - offset properties: pageSize: type: integer description: Amount of elements that a response will hold. minimum: 0 offset: type: integer description: The page number that is requested from paginated collection. minimum: 1 _links: type: object required: - jumpTo - changeSize properties: jumpTo: allOf: - "$ref": "#/components/schemas/Link" - description: |- Templated link to another page offset. **Resource**: Collection changeSize: allOf: - "$ref": "#/components/schemas/Link" - description: |- Templated link for another page size. **Resource**: Collection PlaceholderUserCollectionModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This placeholder user collection **Resource**: Collection _embedded: type: object required: - elements properties: elements: type: array items: "$ref": "#/components/schemas/PlaceholderUserModel" example: _type: Collection total: 2 count: 2 _links: self: href: "/api/v3/placeholder_users" _embedded: elements: - _abbreviated: PlaceholderUser resource shortened for brevity _type: PlaceholderUser id: 1337 - _abbreviated: PlaceholderUser resource shortened for brevity _type: PlaceholderUser id: 1338 PlaceholderUserCreateModel: type: object properties: name: type: string description: The new name of the placeholder user to be created. PlaceholderUserModel: allOf: - "$ref": "#/components/schemas/PrincipalModel" - type: object required: - _type properties: _type: type: string enum: - PlaceholderUser status: type: string description: |- The current activation status of the placeholder user. # Conditions - User has `manage_placeholder_user` permission globally _links: type: object required: - showUser properties: showUser: allOf: - "$ref": "#/components/schemas/Link" - description: A relative path to show the placeholder user in the web application. delete: allOf: - "$ref": "#/components/schemas/Link" - description: |- An href to delete the placeholder user. # Conditions: - `manage_placeholder_user` updateImmediately: allOf: - "$ref": "#/components/schemas/Link" - description: |- An href to update the placeholder user. # Conditions: - `manage_placeholder_user` **Resource**: PlaceholderUser Plain_TextModel: type: string format: html example: "Hello world! This *is* plain text!
" PortfolioCollectionModel: allOf: - "$ref": "#/components/schemas/OffsetPaginatedCollectionModel" - type: object required: - _links - _embedded properties: _links: allOf: - "$ref": "#/components/schemas/OffsetPaginatedCollectionLinks" - type: object properties: representations: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: A portfolio collection representation in a specific file format. _embedded: type: object required: - elements properties: elements: type: array items: "$ref": "#/components/schemas/PortfolioModel" PortfolioModel: allOf: - "$ref": "#/components/schemas/CustomFieldProperties" - "$ref": "#/components/schemas/CustomCommentProperties" - type: object properties: _type: type: string enum: - Portfolio id: type: integer description: Portfolios' id minimum: 1 identifier: type: string name: type: string active: type: boolean description: Indicates whether the portfolio is currently active or already archived favorited: type: boolean description: Indicates whether the portfolio is favorited by the current user statusExplanation: allOf: - "$ref": "#/components/schemas/Formattable" - description: A text detailing and explaining why the portfolio has the reported status public: type: boolean description: Indicates whether the portfolio is accessible for everybody description: "$ref": "#/components/schemas/Formattable" createdAt: type: string format: date-time description: Time of creation. Can be writable by admins with the `apiv3_write_readonly_attributes` setting enabled. updatedAt: type: string format: date-time description: Time of the most recent change to the portfolio _links: type: object required: - self - categories properties: update: allOf: - "$ref": "#/components/schemas/Link" - description: |- Form endpoint that aids in updating this portfolio # Conditions **Permission**: edit workspace updateImmediately: allOf: - "$ref": "#/components/schemas/Link" - description: |- Directly update this portfolio # Conditions **Permission**: edit workspace delete: allOf: - "$ref": "#/components/schemas/Link" - description: |- Delete this portfolio # Conditions **Permission**: admin favor: allOf: - "$ref": "#/components/schemas/Link" - description: |- Mark this portfolio as favorited by the current user # Conditions Only present if the portfolio is not yet favorited Permission**: none but login is required disfavor: allOf: - "$ref": "#/components/schemas/Link" - description: |- Mark this portfolio as not favorited by the current user # Conditions Only present if the portfolio is favorited by the current user Permission**: none but login is required createWorkPackage: allOf: - "$ref": "#/components/schemas/Link" - description: |- Form endpoint that aids in preparing and creating a work package # Conditions **Permission**: add work packages createWorkPackageImmediately: allOf: - "$ref": "#/components/schemas/Link" - description: |- Directly creates a work package in the portfolio # Conditions **Permission**: add work packages self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This portfolio **Resource**: Portfolio categories: allOf: - "$ref": "#/components/schemas/Link" - description: |- Categories available in this portfolio **Resource**: Collection types: allOf: - "$ref": "#/components/schemas/Link" - description: |- Types available in this portfolio **Resource**: Collection # Conditions **Permission**: view work packages or manage types versions: allOf: - "$ref": "#/components/schemas/Link" - description: |- Versions available in this portfolio **Resource**: Collection # Conditions **Permission**: view work packages or manage versions memberships: allOf: - "$ref": "#/components/schemas/Link" - description: |- Memberships in the portfolio **Resource**: Collection # Conditions **Permission**: view members workPackages: allOf: - "$ref": "#/components/schemas/Link" - description: |- Work Packages of this portfolio **Resource**: Collection parent: allOf: - "$ref": "#/components/schemas/Link" - description: |- Parent of the portfolio **Resource**: Portfolio # Conditions **Permission** edit workspace status: allOf: - "$ref": "#/components/schemas/Link" - description: |- Denotes the status of the portfolio, so whether the portfolio is on track, at risk or is having trouble. **Resource**: ProjectStatus # Conditions **Permission** edit workspace storages: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: |- The link to a storage that is active for this portfolio. **Resource**: Storage # Conditions **Permission**: view_file_links projectStorages: allOf: - "$ref": "#/components/schemas/Link" - description: |- The project storage collection of this portfolio. **Resource**: Collection # Conditions **Permission**: view_file_links ancestors: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: |- A collection of links to the ancestor portfolios. **Resource**: Portfolio PostModel: type: object required: - subject properties: id: type: integer description: Identifier of this post readOnly: true exclusiveMinimum: 0 subject: type: string description: The post's subject _links: type: object properties: addAttachment: allOf: - "$ref": "#/components/schemas/Link" - description: |- Attach a file to the post # Conditions **Permission**: edit messages readOnly: true example: _type: Post id: 1 subject: A post with a subject _embedded: project: _type: Project... _links: self: href: "/api/v3/posts/1" attachments: href: "/api/v3/posts/1/attachments" addAttachment: href: "/api/v3/posts/1/attachments" method: post project: href: "/api/v3/projects/1" title: A project with a title PrincipalCollectionModel: allOf: - "$ref": "#/components/schemas/OffsetPaginatedCollectionModel" - type: object required: - _embedded properties: _embedded: type: object required: - elements properties: elements: type: array items: anyOf: - "$ref": "#/components/schemas/UserModel" - "$ref": "#/components/schemas/PlaceholderUserModel" - "$ref": "#/components/schemas/GroupModel" example: _type: Collection total: 3 count: 3 _links: self: href: "/api/v3/principals" _embedded: elements: - _abbreviated: User resource shortened for brevity _type: User id: 1337 - _abbreviated: Group resource shortened for brevity _type: Group id: 1338 - _abbreviated: PlaceholderUser resource shortened for brevity _type: PlaceholderUser id: 1339 PrincipalModel: type: object required: - _type - id - name - _links properties: _type: type: string enum: - User - Group - PlaceholderUser id: type: integer description: The principal's unique identifier. minimum: 1 name: type: string description: The principal's display name, layout depends on instance settings. createdAt: type: string format: date-time description: Time of creation updatedAt: type: string format: date-time description: Time of the most recent change to the principal _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This principal resource. **Resource**: User|Group|PlaceholderUser memberships: allOf: - "$ref": "#/components/schemas/Link" - description: |- An href to the collection of the principal's memberships. # Conditions: - user has permission `view_members` or `manage_members` in any project **Resource**: Collection PriorityCollectionModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This priority collection **Resource**: PriorityCollectionModel readOnly: true _embedded: type: object required: - elements properties: elements: type: array items: "$ref": "#/components/schemas/PriorityModel" PriorityModel: type: object properties: id: type: integer description: Priority id readOnly: true exclusiveMinimum: 0 name: type: string description: Priority name readOnly: true minLength: 1 position: type: integer description: Sort index of the priority readOnly: true exclusiveMinimum: 0 isDefault: type: boolean description: Indicates whether this is the default value readOnly: true isActive: type: boolean description: Indicates whether the priority is available _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This priority **Resource**: Priority readOnly: true example: _type: Priority _links: self: href: "/api/v3/priorities/1" title: Low id: 1 name: Low position: 1 isDefault: false isActive: true ProgramCollectionModel: allOf: - "$ref": "#/components/schemas/OffsetPaginatedCollectionModel" - type: object required: - _links - _embedded properties: _links: allOf: - "$ref": "#/components/schemas/OffsetPaginatedCollectionLinks" - type: object properties: representations: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: A program collection representation in a specific file format. _embedded: type: object required: - elements properties: elements: type: array items: "$ref": "#/components/schemas/ProgramModel" ProgramModel: allOf: - "$ref": "#/components/schemas/CustomFieldProperties" - "$ref": "#/components/schemas/CustomCommentProperties" - type: object properties: _type: type: string enum: - Program id: type: integer description: Programs' id minimum: 1 identifier: type: string name: type: string active: type: boolean description: Indicates whether the program is currently active or already archived favorited: type: boolean description: Indicates whether the program is favorited by the current user statusExplanation: allOf: - "$ref": "#/components/schemas/Formattable" - description: A text detailing and explaining why the program has the reported status public: type: boolean description: Indicates whether the program is accessible for everybody description: "$ref": "#/components/schemas/Formattable" createdAt: type: string format: date-time description: Time of creation. Can be writable by admins with the `apiv3_write_readonly_attributes` setting enabled. updatedAt: type: string format: date-time description: Time of the most recent change to the program _links: type: object required: - self - categories properties: update: allOf: - "$ref": "#/components/schemas/Link" - description: |- Form endpoint that aids in updating this program # Conditions **Permission**: edit workspace updateImmediately: allOf: - "$ref": "#/components/schemas/Link" - description: |- Directly update this program # Conditions **Permission**: edit workspace delete: allOf: - "$ref": "#/components/schemas/Link" - description: |- Delete this program # Conditions **Permission**: admin favor: allOf: - "$ref": "#/components/schemas/Link" - description: |- Mark this program as favorited by the current user # Conditions Only present if the program is not yet favorited Permission**: none but login is required disfavor: allOf: - "$ref": "#/components/schemas/Link" - description: |- Mark this program as not favorited by the current user # Conditions Only present if the program is favorited by the current user Permission**: none but login is required createWorkPackage: allOf: - "$ref": "#/components/schemas/Link" - description: |- Form endpoint that aids in preparing and creating a work package # Conditions **Permission**: add work packages createWorkPackageImmediately: allOf: - "$ref": "#/components/schemas/Link" - description: |- Directly creates a work package in the program # Conditions **Permission**: add work packages self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This program **Resource**: Program categories: allOf: - "$ref": "#/components/schemas/Link" - description: |- Categories available in this program **Resource**: Collection types: allOf: - "$ref": "#/components/schemas/Link" - description: |- Types available in this program **Resource**: Collection # Conditions **Permission**: view work packages or manage types versions: allOf: - "$ref": "#/components/schemas/Link" - description: |- Versions available in this program **Resource**: Collection # Conditions **Permission**: view work packages or manage versions memberships: allOf: - "$ref": "#/components/schemas/Link" - description: |- Memberships in the program **Resource**: Collection # Conditions **Permission**: view members workPackages: allOf: - "$ref": "#/components/schemas/Link" - description: |- Work Packages of this program **Resource**: Collection parent: allOf: - "$ref": "#/components/schemas/Link" - description: |- Parent of the program **Resource**: Program # Conditions **Permission** edit workspace status: allOf: - "$ref": "#/components/schemas/Link" - description: |- Denotes the status of the program, so whether the program is on track, at risk or is having trouble. **Resource**: ProjectStatus # Conditions **Permission** edit workspace storages: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: |- The link to a storage that is active for this program. **Resource**: Storage # Conditions **Permission**: view_file_links projectStorages: allOf: - "$ref": "#/components/schemas/Link" - description: |- The project storage collection of this program. **Resource**: Collection # Conditions **Permission**: view_file_links ancestors: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: |- A collection of links to the ancestor workspace. **Resource**: Workspace ProjectCollectionModel: allOf: - "$ref": "#/components/schemas/OffsetPaginatedCollectionModel" - type: object required: - _links - _embedded properties: _links: allOf: - "$ref": "#/components/schemas/OffsetPaginatedCollectionLinks" - type: object properties: 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" ProjectModel: allOf: - "$ref": "#/components/schemas/CustomFieldProperties" - "$ref": "#/components/schemas/CustomCommentProperties" - type: object properties: _type: type: string enum: - Project id: type: integer description: Projects' id minimum: 1 identifier: type: string name: type: string active: type: boolean description: Indicates whether the project is currently active or already archived favorited: type: boolean description: Indicates whether the project is favorited by the current user statusExplanation: allOf: - "$ref": "#/components/schemas/Formattable" - description: A text detailing and explaining why the project has the reported status public: type: boolean description: Indicates whether the project is accessible for everybody description: "$ref": "#/components/schemas/Formattable" createdAt: type: string format: date-time description: Time of creation. Can be writable by admins with the `apiv3_write_readonly_attributes` setting enabled. updatedAt: type: string format: date-time description: Time of the most recent change to the project _links: type: object required: - self - categories properties: update: allOf: - "$ref": "#/components/schemas/Link" - description: |- Form endpoint that aids in updating this project # Conditions **Permission**: edit workspace updateImmediately: allOf: - "$ref": "#/components/schemas/Link" - description: |- Directly update this project # Conditions **Permission**: edit workspace delete: allOf: - "$ref": "#/components/schemas/Link" - description: |- Delete this project # Conditions **Permission**: admin favor: allOf: - "$ref": "#/components/schemas/Link" - description: |- Mark this project as favorited by the current user # Conditions Only present if the project is not yet favorited Permission**: none but login is required disfavor: allOf: - "$ref": "#/components/schemas/Link" - description: |- Mark this project as not favorited by the current user # Conditions Only present if the project is favorited by the current user Permission**: none but login is required createWorkPackage: allOf: - "$ref": "#/components/schemas/Link" - description: |- Form endpoint that aids in preparing and creating a work package # Conditions **Permission**: add work packages createWorkPackageImmediately: allOf: - "$ref": "#/components/schemas/Link" - description: |- Directly creates a work package in the project # Conditions **Permission**: add work packages self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This project **Resource**: Project categories: allOf: - "$ref": "#/components/schemas/Link" - description: |- Categories available in this project **Resource**: Collection types: allOf: - "$ref": "#/components/schemas/Link" - description: |- Types available in this project **Resource**: Collection # Conditions **Permission**: view work packages or manage types versions: allOf: - "$ref": "#/components/schemas/Link" - description: |- Versions available in this project **Resource**: Collection # Conditions **Permission**: view work packages or manage versions memberships: allOf: - "$ref": "#/components/schemas/Link" - description: |- Memberships in the project **Resource**: Collection # Conditions **Permission**: view members workPackages: allOf: - "$ref": "#/components/schemas/Link" - description: |- Work Packages of this project **Resource**: Collection parent: allOf: - "$ref": "#/components/schemas/Link" - description: |- Parent of the project **Resource**: Workspace # Conditions **Permission** edit workspace status: allOf: - "$ref": "#/components/schemas/Link" - description: |- Denotes the status of the project, so whether the project is on track, at risk or is having trouble. **Resource**: ProjectStatus # Conditions **Permission** edit workspace storages: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: |- The link to a storage that is active for this project. **Resource**: Storage # Conditions **Permission**: view_file_links projectStorages: allOf: - "$ref": "#/components/schemas/Link" - description: |- The project storage collection of this project. **Resource**: Collection # Conditions **Permission**: view_file_links ancestors: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: |- A collection of links to the ancestor workspaces. **Resource**: Workspace ProjectPhaseModel: type: object required: - _type - id - name - active - createdAt - updatedAt properties: _type: type: string enum: - ProjectPhase id: type: integer description: The project phase's id minimum: 1 name: type: string active: type: boolean createdAt: type: string format: date-time description: Time of creation updatedAt: type: string format: date-time description: Time of the most recent change to the project phase _links: type: object required: - self - definition - project properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This project phase. **Resource**: ProjectPhase definition: allOf: - "$ref": "#/components/schemas/Link" - description: |- The definition this phase relies on. **Resource**: ProjectPhaseDefinition project: allOf: - "$ref": "#/components/schemas/Link" - description: |- The project resource, that is the container of this phase. **Resource**: Project example: _type: ProjectPhase id: 1337 name: Initiating active: true createdAt: '2023-01-20T14:30:00.368Z' updatedAt: '2023-05-23T11:57:48.618Z' _links: self: href: "/api/v3/project_phases/23" definition: title: Initiating href: "/api/v3/project_definitions/11" project: title: Death Star 3.0 href: "/api/v3/projects/11" ProjectPhaseDefinitionModel: type: object required: - _type - id - name - startGate - startGateName - finishGate - finishGateName - createdAt - updatedAt properties: _type: type: string enum: - ProjectPhaseDefinition id: type: integer description: The project phase definition's id minimum: 1 name: type: string startGate: type: boolean startGateName: type: - string - 'null' finishGate: type: boolean finishGateName: type: - string - 'null' createdAt: type: string format: date-time description: Time of creation updatedAt: type: string format: date-time description: Time of the most recent change to the project phase definition _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This project phase definition. **Resource**: ProjectPhaseDefinition example: _type: ProjectPhaseDefinition id: 1337 name: Initiating startGate: true startGateName: Before Initiating finishGate: true finishGateName: createdAt: '2023-01-20T14:30:00.368Z' updatedAt: '2023-05-23T11:57:48.618Z' _links: self: href: "/api/v3/project_phase_definitions/23" ProjectPhaseDefinitionCollectionModel: allOf: - "$ref": "#/components/schemas/OffsetPaginatedCollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This file links collection **Resource**: ProjectPhaseDefinitionCollectionModel _embedded: type: object required: - elements properties: elements: type: array items: "$ref": "#/components/schemas/ProjectPhaseDefinitionModel" example: _type: Collection total: 2 count: 2 _links: self: href: "/api/v3/project_phase_definitions" _embedded: elements: - id: 14 name: Initiating _type: ProjectPhaseDefinition _abbreviated: project phase definition resource shortened for brevity - id: 15 name: Executing _type: ProjectPhaseDefinition _abbreviated: project phase definition resource shortened for brevity ProjectStorageCollectionModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This file links collection **Resource**: ProjectStorageCollectionModel _embedded: type: object required: - elements properties: elements: type: array items: "$ref": "#/components/schemas/ProjectStorageModel" example: _type: Collection total: 2 count: 2 _links: self: href: "/api/v3/project_storages?filters=%5B%7B%22storage%22%3A%7B%22operator%22%3A%22%3D%22%2C%22values%22%3A%5B%2281%22%5D%7D%7D%5D" _embedded: elements: - id: 1337 _type: ProjectStorage _abbreviated: project storage resource shortened for brevity - id: 1338 _type: ProjectStorage _abbreviated: File Link resource shortened for brevity ProjectStorageModel: type: object required: - _type - id - projectFolderMode - createdAt - updatedAt properties: _type: type: string enum: - ProjectStorage id: type: integer description: The project storage's id minimum: 1 projectFolderMode: type: string enum: - inactive - manual createdAt: type: string format: date-time description: Time of creation updatedAt: type: string format: date-time description: Time of the most recent change to the project storage _links: type: object required: - self - creator - storage - project properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This project storage. **Resource**: ProjectStorage creator: allOf: - "$ref": "#/components/schemas/Link" - description: |- The user who created the project storage. **Resource**: User storage: allOf: - "$ref": "#/components/schemas/Link" - description: |- The storage resource, that is linked to a project with this project storage. **Resource**: Storage project: allOf: - "$ref": "#/components/schemas/Link" - description: |- The project resource, that is linked to a storage with this project storage. **Resource**: Project projectFolder: allOf: - "$ref": "#/components/schemas/Link" - description: |- The directory on the storage that is used as a project folder. **Resource**: StorageFile # Conditions Only provided, if the `projectFolderMode` is `manual` or `automatic`. open: allOf: - "$ref": "#/components/schemas/Link" - description: |- A link to OpenProject strorage. # Conditions If the storage has not been configured(oauth client is missing, for instance), then the link is null. openWithConnectionEnsured: allOf: - "$ref": "#/components/schemas/Link" - description: |- A link to OpenProject storage with making sure user has access to it. **Deprecated:** Use `open` instead, which returns a link that will ensure the user's connection to the storage as well, but properly works for all kinds of storage configurations. example: _type: ProjectStorage id: 1337 projectFolderMode: manual createdAt: '2023-01-20T14:30:00.368Z' updatedAt: '2023-05-23T11:57:48.618Z' _links: self: href: "/api/v3/project_storages/23" projectFolder: href: "/api/v3/storages/81/files/30" creator: title: Darth Vader href: "/api/v3/users/3" project: title: Death Star 3.0 href: "/api/v3/projects/11" storage: title: Palpatine's Data Vault href: "/api/v3/storages/81" open: href: "/api/v3/storages/81/open" openWithConnectionEnsured: href: "/api/v3/storages/81/open" QueriesModel: type: object example: _links: self: href: "/api/v3/queries" total: 1 count: 1 _type: Collection _embedded: elements: - _type: Query id: 9 name: fdsfdsfdsf createdAt: '2015-03-20T12:56:56.858Z' updatedAt: '2015-05-20T18:16:53.887Z' filters: - _type: StatusQueryFilter name: Status _links: filter: href: "/api/v3/queries/filters/status" title: Status operator: href: "/api/v3/queries/operators/o" title: open schema: href: "/api/v3/queries/filter_instance_schemas/status" values: [] - _type: DueDateQueryFilter name: Finish date values: - '1' _links: filter: href: "/api/v3/queries/filters/dueDate" title: Finish date operator: href: "/api/v3/queries/operators/This revision provides new features
An elaborate description
This revision provides new features
An elaborate
description
This revision fixes some stuff
More information here
Some comment
" spentOn: '2015-03-20' hours: PT5H startTime: '2015-03-20T10:00:00.000Z' endTime: '2015-03-20T15:00:00.000Z' createdAt: '2015-03-20T12:56:56.803Z' updatedAt: '2015-03-20T12:56:56.803Z' _links: self: href: "/api/v3/time_entries/1" updateImmediately: href: "/api/v3/time_entries/1" method: patch delete: href: "/api/v3/time_entries/1" method: delete project: href: "/api/v3/projects/1" title: Some project entity: href: "/api/v3/work_packages/1" title: Some work package user: href: "/api/v3/users/2" title: Some user activity: href: "/api/v3/time_entries/activities/18" title: Some time entry activity - _type: TimeEntry id: 10 comment: format: plain raw: Another comment html: "Another comment
" spentOn: '2015-03-21' hours: PT7H startTime: '2015-03-20T15:00:00.000Z' endTime: '2015-03-20T22:00:00.000Z' createdAt: '2015-03-20T12:56:56.569Z' updatedAt: '2015-03-20T12:56:56.371Z' _links: self: href: "/api/v3/time_entries/2" project: href: "/api/v3/projects/42" title: Some other project entity: href: "/api/v3/work_packages/541" title: Some other work package user: href: "/api/v3/users/6" title: Some other project activity: href: "/api/v3/time_entries/activities/14" title: some other time entry activity _links: self: href: "/api/v3/time_entries?offset=1&pageSize=2" jumpTo: href: "/api/v3/time_entries?offset=%7Boffset%7D&pageSize=2" templated: true changeSize: href: "/api/v3/time_entries?offset=1&pageSize=%7Bsize%7D" templated: true nextByOffset: href: "/api/v3/time_entries?offset=2&pageSize=2" createTimeEntry: href: "/api/v3/time_entries/form" method: post createTimeEntryImmediately: href: "/api/v3/time_entries" method: post TimeEntryModel: allOf: - "$ref": "#/components/schemas/CustomFieldProperties" - type: object properties: id: type: integer description: The id of the time entry minimum: 1 comment: allOf: - "$ref": "#/components/schemas/Formattable" - description: A comment to the time entry spentOn: type: string format: date description: The date the expenditure is booked for hours: type: string format: duration description: The time quantifying the expenditure ongoing: type: boolean description: Whether the time entry is actively tracking time createdAt: type: string format: date-time description: The time the time entry was created startTime: type: - string - 'null' format: date-time description: |- The time the time entry was started, or null if the time entry does not have a start time. The time is returned as UTC time, if presented to the user it should be converted to the user's timezone. This field is only available if the global `allow_tracking_start_and_end_times` setting is enabled. endTime: type: - string - 'null' format: date-time description: |- The time the time entry was ended, or null if the time entry does not have a start time. The time is returned as UTC time, if presented to the user it should be converted to the user's timezone. This field is only available if the global `allow_tracking_start_and_end_times` setting is enabled. updatedAt: type: string format: date-time description: The time the time entry was last updated _links: type: object required: - self - project - user - activity - entity properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This time entry **Resource**: TimeEntry updateImmediately: allOf: - "$ref": "#/components/schemas/Link" - description: |- Directly perform edits on this time entry # Conditions **Permission**: 'edit time entries' or 'edit own time entries' if the time entry belongs to the user update: allOf: - "$ref": "#/components/schemas/Link" - description: |- Form endpoint that aids in preparing and performing edits on a TimeEntry # Conditions **Permission**: 'edit time entries' or 'edit own time entries' if the time entry belongs to the user delete: allOf: - "$ref": "#/components/schemas/Link" - description: |- Delete this time entry # Conditions **Permission**: 'edit time entries' or 'edit own time entries' if the time entry belongs to the user schema: allOf: - "$ref": "#/components/schemas/Link" - description: |- The time entry schema **Resource**: Schema project: allOf: - "$ref": "#/components/schemas/Link" - description: |- The project the time entry is bundled in. The project might be different from the work package's project once the workPackage is moved. **Resource**: Project entity: allOf: - "$ref": "#/components/schemas/Link" - description: |- The entity the time entry is created on **Resource**: WorkPackage, Meeting user: allOf: - "$ref": "#/components/schemas/Link" - description: |- The user the time entry tracks expenditures for **Resource**: User activity: allOf: - "$ref": "#/components/schemas/Link" - description: |- The time entry activity the time entry is categorized as **Resource**: TimeEntriesActivity example: _type: TimeEntry id: 42 comment: format: plain raw: The force shall set me free. html: "The force shall set me free.
" spentOn: '2023-01-11' hours: PT4H startTime: '2023-01-11T09:58:00.000Z' endTime: '2023-01-11T13:58:00.000Z' createdAt: '2023-01-11T13:58:24.927Z' updatedAt: '2023-01-11T13:58:24.927Z' _links: self: href: "/api/v3/time_entries/42" updateImmediately: href: "/api/v3/time_entries/42" method: patch update: href: "/api/v3/time_entries/42/form" method: post delete: href: "/api/v3/time_entries/42" method: delete schema: href: "/api/v3/time_entries/schema" project: href: "/api/v3/projects/11" title: DeathStarV2 entity: href: "/api/v3/work_packages/77" title: Build new hangar user: href: "/api/v3/users/3" title: Darth Vader activity: href: "/api/v3/time_entries/activities/1" title: Management TypeModel: type: object required: - id - name - color - position - isDefault - isMilestone - createdAt - updatedAt properties: id: type: integer description: Type id readOnly: true exclusiveMinimum: 0 name: type: string description: Type name readOnly: true color: type: - string - 'null' description: The color used to represent this type readOnly: true position: type: integer description: Sort index of the type readOnly: true isDefault: type: boolean description: Is this type active by default in new projects? readOnly: true isMilestone: type: boolean description: Do work packages of this type represent a milestone? readOnly: true createdAt: type: string format: date-time description: Time of creation readOnly: true updatedAt: type: string format: date-time description: Time of the most recent change to the user _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This type **Resource**: Type readOnly: true example: _links: self: href: "/api/v3/types/1" _type: Type id: 1 name: Bug color: "#ff0000" position: 1 isDefault: true isMilestone: false createdAt: '2014-05-21T08:51:20.624Z' updatedAt: '2014-05-21T08:51:20.624Z' TypesModel: type: object example: _links: self: href: "/api/v3/types" total: 2 count: 2 _type: Collection _embedded: elements: - _links: self: href: "/api/v3/types/1" _type: Type id: 1 name: Bug color: "#ff0000" position: 1 isDefault: true isMilestone: false createdAt: '2014-05-21T08:51:20.429Z' updatedAt: '2014-05-21T08:51:20.429Z' - _links: self: href: "/api/v3/types/2" _type: Type id: 2 name: Feature color: "#888" position: 2 isDefault: false isMilestone: false createdAt: '2014-05-21T08:51:20.429Z' updatedAt: '2014-05-21T08:51:20.429Z' Types_by_WorkspaceModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- The types collection **Resource**: TypesCollection readOnly: true _embedded: type: object properties: elements: type: array readOnly: true items: allOf: - "$ref": "#/components/schemas/TypeModel" - description: Collection of Types Unstar_QueryModel: type: object example: _type: Query id: 9 name: fdsfdsfdsf createdAt: '2015-03-20T12:56:56.257Z' updatedAt: '2015-05-20T18:16:53.953Z' filters: - _type: StatusQueryFilter name: Status _links: filter: href: "/api/v3/queries/filters/status" title: Status operator: href: "/api/v3/queries/operators/o" title: open schema: href: "/api/v3/queries/filter_instance_schemas/status" values: [] - _type: DueDateQueryFilter name: Finish date values: - '1' _links: filter: href: "/api/v3/queries/filters/dueDate" title: Finish date operator: href: "/api/v3/queries/operators/Develop super cool OpenProject API.
" scheduleManually: false readonly: false startDate: dueDate: derivedStartDate: derivedDueDate: estimatedTime: PT2H derivedEstimatedTime: PT10H percentageDone: 0 customField1: Foo customField2: 42 createdAt: '2014-08-29T12:40:53.373Z' updatedAt: '2014-08-29T12:44:41.981Z' WorkPackageFormModel: type: object description: |- The work package creation form. This object is returned, whenever a work package form endpoint is called. It contains an allowed payload definition, the full schema and any validation errors on the current request body. properties: _type: type: string enum: - Form _embedded: type: object properties: payload: "$ref": "#/components/schemas/WorkPackageWriteModel" schema: "$ref": "#/components/schemas/WorkPackageSchemaModel" validationErrors: type: object description: |- All validation errors, where the key is the faulty property. The object is empty, if the request body is valid. _links: type: object properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This form endpoint **Resource** : Form validate: allOf: - "$ref": "#/components/schemas/Link" - description: The endpoint for validating the request bodies. Often referring to this very form endpoint. previewMarkup: allOf: - "$ref": "#/components/schemas/Link" - description: Renders a markup preview for the work package form. customFields: allOf: - "$ref": "#/components/schemas/Link" - description: Link to the HTML page for the custom field definitions. configureForm: allOf: - "$ref": "#/components/schemas/Link" - description: Link to the HTML page for the form configuration. WorkPackagePatchModel: allOf: - "$ref": "#/components/schemas/WorkPackageWriteModel" - type: object required: - lockVersion properties: lockVersion: type: integer description: The version of the item as used for optimistic locking WorkPackageSchemaModel: type: object description: |- A schema for a work package. This schema defines the attributes of a work package. TODO: Incomplete, needs to be updated with the real behaviour of schemas (when does which attribute appear?). properties: _type: type: string enum: - Schema _dependencies: type: array items: type: string description: TBD _attributeGroups: type: array items: type: object description: TBD (WorkPackageFormAttributeGroup) lockVersion: "$ref": "#/components/schemas/SchemaPropertyModel" id: "$ref": "#/components/schemas/SchemaPropertyModel" subject: "$ref": "#/components/schemas/SchemaPropertyModel" description: "$ref": "#/components/schemas/SchemaPropertyModel" duration: "$ref": "#/components/schemas/SchemaPropertyModel" scheduleManually: "$ref": "#/components/schemas/SchemaPropertyModel" ignoreNonWorkingDays: "$ref": "#/components/schemas/SchemaPropertyModel" startDate: "$ref": "#/components/schemas/SchemaPropertyModel" dueDate: "$ref": "#/components/schemas/SchemaPropertyModel" derivedStartDate: "$ref": "#/components/schemas/SchemaPropertyModel" derivedDueDate: "$ref": "#/components/schemas/SchemaPropertyModel" estimatedTime: "$ref": "#/components/schemas/SchemaPropertyModel" derivedEstimatedTime: "$ref": "#/components/schemas/SchemaPropertyModel" remainingTime: "$ref": "#/components/schemas/SchemaPropertyModel" derivedRemainingTime: "$ref": "#/components/schemas/SchemaPropertyModel" percentageDone: "$ref": "#/components/schemas/SchemaPropertyModel" derivedPercentageDone: "$ref": "#/components/schemas/SchemaPropertyModel" readonly: "$ref": "#/components/schemas/SchemaPropertyModel" createdAt: "$ref": "#/components/schemas/SchemaPropertyModel" updatedAt: "$ref": "#/components/schemas/SchemaPropertyModel" author: "$ref": "#/components/schemas/SchemaPropertyModel" position: "$ref": "#/components/schemas/SchemaPropertyModel" project: "$ref": "#/components/schemas/SchemaPropertyModel" projectPhase: "$ref": "#/components/schemas/SchemaPropertyModel" projectPhaseDefinition: "$ref": "#/components/schemas/SchemaPropertyModel" parent: "$ref": "#/components/schemas/SchemaPropertyModel" sprint: "$ref": "#/components/schemas/SchemaPropertyModel" storyPoints: "$ref": "#/components/schemas/SchemaPropertyModel" assignee: "$ref": "#/components/schemas/SchemaPropertyModel" responsible: "$ref": "#/components/schemas/SchemaPropertyModel" type: "$ref": "#/components/schemas/SchemaPropertyModel" status: "$ref": "#/components/schemas/SchemaPropertyModel" category: "$ref": "#/components/schemas/SchemaPropertyModel" version: "$ref": "#/components/schemas/SchemaPropertyModel" priority: "$ref": "#/components/schemas/SchemaPropertyModel" _links: type: object properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- This work package schema **Resource**: Schema WorkPackageWriteModel: type: object description: |- This model is used for creating and updating work packages. It can also be used for validation against the work package form endpoints. properties: subject: type: string description: Work package subject description: allOf: - "$ref": "#/components/schemas/Formattable" - description: The work package description scheduleManually: type: boolean description: |- Uses manual scheduling mode when true (default). Uses automatic scheduling mode when false. Can be automatic only when predecessors or children are present. startDate: type: - string - 'null' format: date description: Scheduled beginning of a work package dueDate: type: - string - 'null' format: date description: Scheduled end of a work package estimatedTime: type: - string - 'null' format: duration description: Time a work package likely needs to be completed excluding its descendants duration: type: - string - 'null' format: duration description: |- The amount of time in hours the work package needs to be completed. This value must be bigger or equal to `P1D`, and any the value will get floored to the nearest day. The duration has no effect, unless either a start date or a due date is set. Not available for milestone type of work packages. ignoreNonWorkingDays: type: boolean description: |- When scheduling, whether or not to ignore the non working days being defined. A work package with the flag set to true will be allowed to be scheduled to a non working day. _links: type: object properties: category: allOf: - "$ref": "#/components/schemas/Link" - description: |- The category of the work package **Resource**: Category type: allOf: - "$ref": "#/components/schemas/Link" - description: |- The type of the work package **Resource**: Type priority: allOf: - "$ref": "#/components/schemas/Link" - description: |- The priority of the work package **Resource**: Priority project: allOf: - "$ref": "#/components/schemas/Link" - description: |- The project to which the work package belongs **Resource**: Project status: allOf: - "$ref": "#/components/schemas/Link" - description: |- The current status of the work package **Resource**: Status responsible: allOf: - "$ref": "#/components/schemas/Link" - description: |- The person that is responsible for the overall outcome **Resource**: User assignee: allOf: - "$ref": "#/components/schemas/Link" - description: |- The person that is intended to work on the work package **Resource**: User version: allOf: - "$ref": "#/components/schemas/Link" - description: |- The version associated to the work package **Resource**: Version parent: allOf: - "$ref": "#/components/schemas/Link" - description: |- Parent work package **Resource**: WorkPackage _meta: type: object description: Meta information for the work package request properties: validateCustomFields: type: boolean description: |- When set to true, explicitly validates all required custom fields on the work package, regardless of whether they are provided in the request body. This overrides the default behavior where only custom fields included in the request are validated. Use this parameter when you need to ensure all required custom fields have valid values before allowing the update to proceed. default: false Work_Package_activitiesModel: type: object example: _links: self: href: "/api/v3/work_packages/1/revisions" total: 2 count: 2 _type: Collection _embedded: elements: - _type: Activity _links: self: href: "/api/v3/activity/1" workPackage: href: "/api/v3/work_packages/1" user: href: "/api/v3/users/1" id: 1 details: [] comment: format: markdown raw: Lorem ipsum dolor sit amet. html: "Lorem ipsum dolor sit amet.
" createdAt: '2014-05-21T08:51:20.396Z' updatedAt: '2014-05-21T09:14:02.324Z' version: 1 - _type: Activity _links: self: href: "/api/v3/activity/2" workPackage: href: "/api/v3/work_packages/1" user: href: "/api/v3/users/1" id: 2 details: [] comment: format: markdown raw: Lorem ipsum dolor sit amet. html: "Lorem ipsum dolor sit amet.
" createdAt: '2014-05-21T09:51:22.769Z' updatedAt: '2014-05-21T10:14:02.927Z' version: 2 Work_PackagesModel: allOf: - "$ref": "#/components/schemas/CollectionModel" - type: object required: - _links - _embedded properties: _links: type: object required: - self properties: self: allOf: - "$ref": "#/components/schemas/Link" - description: |- The work package collection **Resource**: WorkPackageCollection readOnly: true _embedded: type: object required: - elements properties: elements: type: array items: "$ref": "#/components/schemas/WorkPackageModel" example: _links: self: href: "/api/v3/work_packages" total: 2 count: 2 _type: Collection _embedded: elements: - _abbreviated: Work package resource shortened for brevity _type: WorkPackage _links: self: href: "/api/v3/work_packages/1" id: 1 - _abbreviated: Work package resource shortened for brevity _type: WorkPackage _links: self: href: "/api/v3/work_packages/2" id: 2 WorkspaceCollectionModel: allOf: - "$ref": "#/components/schemas/OffsetPaginatedCollectionModel" - type: object required: - _links - _embedded properties: _links: allOf: - "$ref": "#/components/schemas/OffsetPaginatedCollectionLinks" - type: object properties: representations: type: array items: allOf: - "$ref": "#/components/schemas/Link" - description: A workspace collection representation in a specific file format. _embedded: type: object required: - elements properties: elements: type: array items: oneOf: - "$ref": "#/components/schemas/PortfolioModel" - "$ref": "#/components/schemas/ProgramModel" - "$ref": "#/components/schemas/ProjectModel" Workspaces_schemaModel: type: object description: A schema for a workspace. This schema defines the attributes of a workspace. properties: _type: type: string enum: - Schema description: The type identifier for this resource _dependencies: type: array description: Schema dependencies (currently empty for workspaces) _attributeGroups: type: array items: type: object properties: _type: type: string enum: - ProjectFormCustomFieldSection description: The type identifier for this resource id: type: integer description: The unique identifier of the custom field section name: type: string description: The human-readable name of the custom field section attributes: type: array items: type: string description: |- Array of camelCase custom field attribute names belonging to this section. Only includes custom fields visible to the current user. description: |- Defines the organizational structure of project custom fields into sections for UI rendering. Each attribute group represents a project attribute section containing related project attributes. The sections determine how project attributes are visually organized and grouped in forms. **Key behaviors:** - Admin-only project attributes appear only for users with admin privileges - Empty sections (with no accessible project attributes) are omitted from the response - The order reflects the configured section positioning in admin settings - Each section contains only project attributes assigned to that specific section **Example structure:** ```json [ { "_type": "ProjectFormCustomFieldSection", "name": "Project Details", "attributes": ["customField1", "customField3"] }, { "_type": "ProjectFormCustomFieldSection", "name": "Budget Information", "attributes": ["customField2", "customField4"] } ] ``` id: "$ref": "#/components/schemas/SchemaPropertyModel" name: "$ref": "#/components/schemas/SchemaPropertyModel" identifier: "$ref": "#/components/schemas/SchemaPropertyModel" description: "$ref": "#/components/schemas/SchemaPropertyModel" public: "$ref": "#/components/schemas/SchemaPropertyModel" active: "$ref": "#/components/schemas/SchemaPropertyModel" status: "$ref": "#/components/schemas/SchemaPropertyModel" statusExplanation: "$ref": "#/components/schemas/SchemaPropertyModel" parent: "$ref": "#/components/schemas/SchemaPropertyModel" createdAt: "$ref": "#/components/schemas/SchemaPropertyModel" updatedAt: "$ref": "#/components/schemas/SchemaPropertyModel" _links: type: object description: Links related to this resource properties: self: type: object properties: href: type: string example: "/api/v3/workspaces/schema" patternProperties: "^customField\\d+$": "$ref": "#/components/schemas/SchemaPropertyModel" "^customComment\\d+$": "$ref": "#/components/schemas/SchemaPropertyModel" example: _type: Schema _dependencies: [] _attributeGroups: - _type: ProjectFormCustomFieldSection name: Project Details attributes: - customField30 - customField34 - _type: ProjectFormCustomFieldSection name: Budget Information attributes: - customField31 - customField32 - customField35 id: type: Integer name: ID required: true hasDefault: false writable: false name: type: String name: Name required: true hasDefault: false writable: true minLength: 1 maxLength: 255 identifier: type: String name: Identifier required: true hasDefault: false writable: true minLength: 1 maxLength: 100 description: type: Formattable name: Description required: false hasDefault: false writable: true public: type: Boolean name: Public required: true hasDefault: false writable: true active: type: Boolean name: Active required: true hasDefault: true writable: true status: type: ProjectStatus name: Status required: false hasDefault: true writable: true _links: allowedValues: - href: "/api/v3/project_statuses/on_track" title: On track - href: "/api/v3/project_statuses/at_risk" title: At risk - href: "/api/v3/project_statuses/off_track" title: Off track statusExplanation: type: Formattable name: Status explanation required: false hasDefault: false writable: true parent: type: Workspace name: Subproject of required: false hasDefault: false writable: true location: _links visibility: default _links: {} createdAt: type: DateTime name: Created on required: true hasDefault: false writable: false updatedAt: type: DateTime name: Updated on required: true hasDefault: false writable: false customField30: type: Integer name: Integer project custom field required: false hasDefault: false writable: true visibility: default customField31: type: CustomOption name: List project custom field required: false hasDefault: false writable: true location: _links visibility: default _links: {} customField32: type: Version name: Version project custom field required: false hasDefault: false writable: true location: _links visibility: default _links: {} customField34: type: Boolean name: Boolean project custom field required: false hasDefault: false writable: true visibility: default customField35: type: String name: Text project custom field required: true hasDefault: false writable: true visibility: default customComment35: type: String name: Text project custom field comment required: false hasDefault: false writable: true _links: self: href: "/api/v3/workspaces/schema" securitySchemes: BasicAuth: type: http scheme: basic tags: - description: |- ## Links Links to other resources in the API are represented uniformly by so called link objects. ### Local Properties | Property | Description | Type | Required | Nullable | Default | |:---------:| ------------------------------------------------------------------------ | ------- |:--------:|:--------:| ----------- | | href | URL to the referenced resource (might be relative) | String | ✓ | ✓ | | | title | Representative label for the resource | String | | | | | templated | If true the `href` contains parts that need to be replaced by the client | Boolean | | | false | | method | The HTTP verb to use when requesting the resource | String | | | GET | | payload | The payload to send in the request to achieve the desired result | String | | | unspecified | | identifier| An optional unique identifier to the link object | String | | | unspecified | All link objects *must* contain the `href` property, though it might be `null`. Thus the following is a valid link object: `{ "href": null }` whereas `{ }` is not a valid link object. The meaning of `"href": null` is that **no** resource is referenced. For example a work package without an assignee will still have an assignee link, but its `href` will be `null`. If a `title` is present, the client can display the title to the user when referring to the resource. Templated links are links that contain client replaceable parts. Replaceable parts are enclosed in braces. For example the link `api/v3/example/{id}` is not complete in itself, but the client needs to replace the string `{id}` itself. As of now the API does not indicate the valid replacement values. The `method` indicates which HTTP verb the client *must* use when following the link for the intended purpose. If a `payload` is specified, it needs to be sent as the body of the request to achieve the desired result (e.g. perform the action represented by the link). If no `payload` is specified, there is either no payload to send or a valid payload is not specified by the link object. A payload might also be templated slightly. If the `templated` property is true, a payload might contain replaceable parts in its strings (e.g. `{ "href": "/api/v3/examples/{example_id}" }`). Note: When writing links (e.g. during a `PATCH` operation) only changes to `href` are accepted. Changes to all other properties will be **silently ignored**. For resources invisible to the client (e.g. because of missing permissions), a link will contain the uri `urn:openproject-org:api:v3:undisclosed` instead of a url. This indicates the existence of a value without revealing the actual value. An example for this is the parent project. A project resource which itself might be visible to the client can have a reference to a parent project invisible to the same client. Revealing the existence of a parent over hiding has the benefit of allowing the client to make an informed decision of whether to keep the existing reference or updating it. Sending ‘{ "href": "urn:openproject-org:api:v3:undisclosed" }` for a resource will have the effect of keeping the original value. This is especially beneficial if the client creates and updates resources based on the payload object provided as part of a form as is recommended when interacting with the API. ## Errors In case of an error, the API will respond with an appropriate HTTP status code. For responses with an HTTP status of `4xx` and `5xx` the body will always contain a single error object. Error objects shall give the client additional details about the cause of an erroneous response. ### General errors * Error objects have their `_type` set to `Error` * The `errorIdentifier` serves as a unique (and machine readable) identifier for a specific error cause * There *may* be multiple possible error identifiers per HTTP status code * There *may* be multiple possible HTTP status codes per error identifier * The "List of Error Identifiers" defines the possible mappings between HTTP status and error identifier * The `message` contains a human readable concise message describing the error * It *optionally* includes specific information, for example which permission would have been needed to perform an action * It is localized depending on the users preferences * It *must not* include HTML or other kind of markup * Error messages form complete sentences including punctuation #### Example ```json { "_type": "Error", "errorIdentifier": "urn:openproject-org:api:v3:errors:InternalServerError", "message": "An internal server error occurred. This is not your fault." } ``` ### Embedded error information Errors might optionally contain embedded objects that contain further information. #### Error details Under the embedded key `details` there might be an object describing the error more verbosely. For example if the error affects a specific field, this field could be defined there. ##### Example ```json { "_type": "Error", "errorIdentifier": "urn:openproject-org:api:v3:examples:ExampleError", "message": "This is an example error.", "_embedded": { "details": { "_type": "ExampleErrorDetailInformation", "erroneousField": "subject" } } } ``` #### Multiple error objects To ease implementation of basic clients it is guaranteed that the response body always only contains a single error object. However it is allowed that an error object *embeds* other error objects under the key `errors`, thereby aggregating them. The `errorIdentifier` of such an object is always `urn:openproject-org:api:v3:errors:MultipleErrors`. The message can either describe one of the embedded errors or simply state that multiple errors occurred. ##### Example ```json { "_type": "Error", "errorIdentifier": "urn:openproject-org:api:v3:errors:MultipleErrors", "message": "Multiple fields violated their constraints.", "_embedded": { "errors": [ { "_type": "Error", "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation", "...": "..." }, { "_type": "Error", "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation", "...": "..." } ] } } ``` ### List of Error Identifiers * `urn:openproject-org:api:v3:errors:InvalidQuery` (**HTTP 400**) The query contained a value that did not match the servers expectation * `urn:openproject-org:api:v3:errors:InvalidRenderContext` (**HTTP 400**) The client specified a rendering context that does not exist * `urn:openproject-org:api:v3:errors:InvalidRequestBody` (**HTTP 400**) The format of the request body did not match the servers expectation * `urn:openproject-org:api:v3:errors:InvalidSignal` (**HTTP 400**) The client specified a select not available on the resource, e.g because the property/link does not exist on it. * `urn:openproject-org:api:v3:errors:InvalidUserStatusTransition` (**HTTP 400**) The client used an invalid transition in the attempt to change the status of a user account. * `urn:openproject-org:api:v3:errors:Unauthenticated` (**HTTP 401**) The client has to authenticate to access the requested resource. * `urn:openproject-org:api:v3:errors:MissingPermission` (**HTTP 403**) The client does not have the needed permissions to perform the requested action * `urn:openproject-org:api:v3:errors:NotFound` (**HTTP 404**) Default for HTTP 404 when no further information is available * `urn:openproject-org:api:v3:errors:UpdateConflict` (**HTTP 409**) The resource changed between GET-ing it and performing an update on it * `urn:openproject-org:api:v3:errors:TypeNotSupported` (**HTTP 415**) The request contained data in an unsupported media type (Content-Type) * `urn:openproject-org:api:v3:errors:PropertyConstraintViolation` (**HTTP 422**) The client tried to set a property to an invalid value * `urn:openproject-org:api:v3:errors:PropertyIsReadOnly` (**HTTP 422**) The client tried to set or change a property that is not writable * `urn:openproject-org:api:v3:errors:PropertyFormatError` (**HTTP 422**) A property value was provided in a format that the server does not understand or accept * `urn:openproject-org:api:v3:errors:PropertyMissingError` (**HTTP 422**) The request is syntactically correct, but is missing a property to perform the requested action * `urn:openproject-org:api:v3:errors:PropertyValueNotAvailableAnymore` (**HTTP 422**) An unchanged property needs to be changed, because other changes to the resource make it unavailable * `urn:openproject-org:api:v3:errors:ResourceTypeMismatch` (**HTTP 422**) A link to a resource of a specific type was expected, but the link to another type of resource was provided * `urn:openproject-org:api:v3:errors:InternalServerError` (**HTTP 500**) Default for HTTP 500 when no further information is available * `urn:openproject-org:api:v3:errors:MultipleErrors` Multiple errors occurred. See the embedded `errors` array for more details. ## Formattable Text OpenProject supports text formatting in Markdown. Properties that contain formattable text have a special representation in this API. In this specification their type is indicated as `Formattable`. Their representation contains the following properties: | Property | Description | Type | Example | Supported operations | |:--------:| -------------------------------------------------- | ------ | ---------------------------------- | -------------------- | | format | Indicates the formatting language of the raw text | String | markdown | READ | | raw | The raw text, as entered by the user | String | `I **am** formatted!` | READ / WRITE | | html | The text converted to HTML according to the format | String | `I am formatted!` | READ | `format` can as of today have one of the following values: * `plain` - only basic formatting, e.g. inserting paragraphs and line breaks into HTML * `markdown` - formatting using Markdown * `custom` - There is no apparent formatting rule that transforms the raw version to HTML (only used for read only properties) Note that `raw` is the only property supporting the **write** operation. A property of type *Formattable* that is marked as **read and write**, will only accept changes to the `raw` property. Changes to `format` and `html` will be **silently ignored**. It is thus sufficient to solely provide the `raw` property for changes. If the *Formattable* is marked as **read only**, the `raw` attribute also becomes **read only**. ### Example ```json { "format": "markdown", "raw": "I **am** formatted!", "html": "I am formatted!" } ``` ## Dates, Times, Durations and Timestamps Representation of time related values in this API is done according to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601). In this specification the following terms will be used as type specifiers (e.g. in tables): * `Date` - refers to an ISO 8601 date, e.g. "2014-05-21" * `DateTime` - refers to an ISO 8601 combined date and time, optionally with milliseconds, e.g. "2014-05-21T13:37:00Z" or "2014-05-21T13:37:00.396Z" * `Duration` - refers to an ISO 8601 duration, e.g. "P1DT18H" * `Timestamp` - refers to an ISO 8601 combined date and time, e.g. "2014-05-21T13:37:00Z" or to an ISO 8601 duration, e.g. "P1DT18H". The following shorthand values are also being parsed as duration: "1d", "1w", "1m", "1y", "1y-2m", "-2y". It can also refer the following relative date keywords: `"oneDayAgo@HH:MM+HH:MM", "lastWorkingDay@HH:MM+HH:MM", "oneWeekAgo@HH:MM+HH:MM", "oneMonthAgo@HH:MM+HH:MM"`. The `"HH:MM"` part represents the zero padded hours and minutes, e.g. `"oneMonthAgo@21:00+00:00"`. The last "+HH:MM" part represents the timezone offset from UTC associated with the time, e.g. `"oneMonthAgo@21:00+02:00"` means a +2 hour timezone offset from UTC. The offset can be positive or negative e.g."oneDayAgo@01:00+01:00", "oneDayAgo@01:00-01:00". Values older than 1 day are accepted only with valid Enterprise Token available. ## Colors Colors are represented in RGB using hexadecimal notation as specified in [CSS Color Module Level 3](https://www.w3.org/TR/css3-color/). That is a `#` followed by either three or six hexadecimal digits. ### Example ``` red: #ff0000 or #f00 green: #00ff00 or #0f0 black: #000000 or #000 white: #ffffff or #fff ``` ## Digests Digests (or Hashes) are one way functions that map data of arbitrary size to data of a fixed size. In OpenProject they are for example used to calculate checksums for (attachment) files. The checksum calculated depends on the hashed data and the algorithm used as hash function. Therefore all digests are represented in the following form: | Property | Description | Type | Example | |:---------:| -------------------------------------------------- | ------ | ---------------------------------- | | algorithm | The algorithm used to compute the digest | String | md5 | | hash | The calculated digest in hexadecimal notation | String | 64c26a8403cd796ea4cf913cda2ee4a9 | ### Example ```json { "algorithm": "md5", "hash": "64c26a8403cd796ea4cf913cda2ee4a9" } ``` name: Basic Objects - description: |- Whenever a client calls a resource that can return more than one element, it will receive a collection of elements. However as collections can become quite large, the API will **not** simply return a JSON array, but a special collection object that will contain the actual elements in its embedded property `elements`. Collections *may* be paginated, this means that a single response from the server will not contain all elements of the collection, but only a subset. In this case the client can issue further requests to retrieve the remaining elements. There are two ways to access the result pages of a paginated collection: * offset based pagination * cursor based pagination The available ways of pagination depend on the collection queried. Some collections feature no pagination at all, meaning they will always return all elements. Others might only offer one of the two pagination methods or both of them. A collection also carries meta information like the total count of elements in the collection or - in case of a paginated collection - the amount of elements returned in this response and action links to retrieve the remaining elements. ## Local Properties | Property | Description | Type | Availability | |:--------:| --------------------------------------------------------------- | ------- | --------------------------- | | total | The total amount of elements available in the collection | Integer | always | | pageSize | Amount of elements that a response will hold | Integer | when paginated | | count | Actual amount of elements in this response | Integer | always | | offset | The page number that is requested from paginated collection | Integer | when offset based available | | groups | Summarized information about aggregation groups | Object | when grouping | | totalSums| Aggregations of supported values for elements of the collection | Object | when showing sums | ## Links | Link | Description | Availability | |:----------------:| ------------------------------------------------------------------------ | --------------------------- | | self | Link to the current page in the collection | always | | changeSize | Templated link to change the page size, might change relative position | when paginated | | jumpTo | Templated link to jump to a specified offset | when offset based available | | nextByOffset | Link to retrieve the following page of elements (offset based) | when offset based available | | previousByOffset | Link to retrieve the preceding page of elements (offset based) | when offset based available | | nextByCursor | Link to retrieve the elements following the current page (cursor based) | when cursor based available | | previousByCursor | Link to retrieve the elements preceding the current page (cursor based) | when cursor based available | name: Collections - description: |- Filter objects can be added to a number of endpoints in the OpenProject APIv3. With them, you can create powerful queries to endpoints to return the data that you want. They all share the following basic properties: - They consist of three items: A property to filter or a specific filter name, one or more values, and a filter operator that defines what query to produce with the given values - You can combine any number of distinct filters can be added to the endpoint definitions in this API documentation - A combination of filter objects are treated as an AND filter. OR filters are not yet possible in a single query. ## Filter syntax The filter syntax is a JSON object that can be passed as a GET parameter to the endpoints as an URL-encoded JSON string looks like the following: ```json5 [ { "A description for field Lorem ipsum. This may contain links.
" }; "_links": { "allowedValues": { "href": "/api/v3/some/path/to/users" } } } }, "2": { "loremIpsum": { "type": "User", "name": "Lorem ipsum", "required": true, "hasDefault": false, "writable": true, "location": "_links", "_links": { "allowedValues": { "href": "/api/v3/a/totally/different/path/to/other/users" } } } }, "3": { "loremIpsum": { "type": "User", "name": "Lorem ipsum", "required": true, "hasDefault": false, "writable": false, "location": "_links", } }, "4": {} } } ``` Given the example above: * If the depending property is `1`, `2` or `3`: * The client must set the property `loremIpsum`, because of `"required": true` for all three field schemas * When the depending property is `1` or `2`, the values allowed to be set for `loremIpsum` property differ * When the depending property is `3`, the `loremIpsum` property will not be writable * If the depending property is `4`, the `loremIpsum` property does not exist Because of the limitation of JSON objects, all keys will be strings, even when the depending value is actually something different (e.g. Integer, Date). This is also true for resources where the resource url is used as the key. name: Schemas - description: |- Work packages can be assigned to a sprint. This is employed in agile contexts such as Scrum or Kanban to group the work packages to be worked on within a defined time frame towards a defined goal. ## Linked Properties | Link | Description | Type | Constraints | Supported operations | |:-------------------:|----------------------------------------- | ------------- | -------------------------------------------------------------- | -------------------- | | self | This sprint | Sprint | not null | READ | | definingWorkspace | The workspace in which the sprint is defined | Workspace | | READ | | status | The status the sprint is in | URN | | READ | The status is represented as a URN and can have the following values: - **urn:openproject-org:api:v3:sprints:status:in_planning**: The sprint hasn't started yet, it is planned. - **urn:openproject-org:api:v3:sprints:status:active**: The sprint is currently active. - **urn:openproject-org:api:v3:sprints:status:completed**: The sprint has finished. ## Local Properties | Property | Description | Type | Constraints | Supported operations | | :---------: | --------------------------------------------- | ----------- | ----------- | -------------------- | | id | Sprint id | Integer | x > 0 | READ | | name | Sprint name | String | not null | READ | | description | | Formattable | | READ | | startDate | | Date | | READ | | finishDate | | Date | | READ | | createdAt | Time of creation | DateTime | not null | READ | | updatedAt | Time of the most recent change to the sprint | DateTime | not null | READ | name: Sprints - name: Statuses description: |- The statuses endpoints return collections or single entities of type `Status`. The following tables list the different properties of `Status` entities. ## Linked Properties | Link | Description | Type | Constraints | Supported operations | |:----:|-------------|--------|-------------|----------------------| | self | This status | Status | not null | READ | ## Local Properties | Property | Description | Type | Constraints | Supported operations | |:------------------:|--------------------------------------------------------------------------------------------------------------------------------------------|---------|---------------|----------------------| | id | Status id | Integer | x > 0 | READ | | name | Status name | String | | READ | | isClosed | Indicates, whether work package of this status are considered closed | Boolean | | READ | | color | A Hex-coded value of the color assigned to the status. | String | | READ | | isDefault | True, if this status is the default status for new work packages | Boolean | | READ | | isReadonly | Indicates, whether work package of this status are readonly | Boolean | | READ | | excludedFromTotals | Indicates, whether work package of this status are excluded from totals of