{"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\ndevelopment version, please go to [github.com/opf](https://github.com/opf/openproject/tree/dev/docs/api/apiv3).\n\n## Introduction\n\nThe documentation for the APIv3 is written according to the [OpenAPI 3.1 Specification](https://swagger.io/specification/).\nYou can either view the static version of this documentation on the [website](https://www.openproject.org/docs/api/introduction/)\nor the interactive version, rendered with [OpenAPI Explorer](https://github.com/Rhosys/openapi-explorer/blob/main/README.md),\nin your OpenProject installation under `/api/docs`.\nIn the latter you can try out the various API endpoints directly interacting with our OpenProject data.\nMoreover you can access the specification source itself under `/api/v3/spec.json` and `/api/v3/spec.yml`\n(e.g. [here](https://community.openproject.org/api/v3/spec.yml)).\n\nThe APIv3 is a hypermedia REST API, a shorthand for \"Hypermedia As The Engine Of Application State\" (HATEOAS).\nThis means that each endpoint of this API will have links to other resources or actions defined in the resulting body.\n\nThese related resources and actions for any given resource will be context sensitive. For example, only actions that the\nauthenticated user can take are being rendered. This can be used to dynamically identify actions that the user might take for any\ngiven response.\n\nAs 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\nbe present when the user you authenticated has been granted a permission to update the work package in the assigned project.\n\n## HAL+JSON\n\nHAL is a simple format that gives a consistent and easy way to hyperlink between resources in your API.\nRead 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)\n\n**OpenProject API implementation of HAL+JSON format** enriches JSON and introduces a few meta properties:\n\n- `_type` - specifies the type of the resource (e.g.: WorkPackage, Project)\n- `_links` - contains all related resource and action links available for the resource\n- `_embedded` - contains all embedded objects\n\nHAL does not guarantee that embedded resources are embedded in their full representation, they might as well be\npartially represented (e.g. some properties can be left out).\nHowever in this API you have the guarantee that whenever a resource is **embedded**, it is embedded in its **full representation**.\n\n## API response structure\n\nAll API responses contain a single HAL+JSON object, even collections of objects are technically represented by\na single HAL+JSON object that itself contains its members. More details on collections can be found\nin the [Collections Section](https://www.openproject.org/docs/api/collections/).\n\n## Authentication\n\nThe API supports the following authentication schemes: OAuth2, session based authentication, and basic auth.\n\nDepending on the settings of the OpenProject instance many resources can be accessed without being authenticated.\nIn case the instance requires authentication on all requests the client will receive an **HTTP 401** status code\nin response to any request.\n\nOtherwise unauthenticated clients have all the permissions of the anonymous user.\n\n### Session-based Authentication\n\nThis means you have to login to OpenProject via the Web-Interface to be authenticated in the API.\nThis method is well-suited for clients acting within the browser, like the Angular-Client built into OpenProject.\n\nIn this case, you always need to pass the HTTP header `X-Requested-With \"XMLHttpRequest\"` for authentication.\n\n### API Key through Basic Auth\n\nUsers can authenticate towards the API v3 using basic auth with the user name `apikey` (NOT your login) and the API key as the password.\nUsers can find their API key on their account page.\n\nExample:\n\n```shell\nAPI_KEY=2519132cdf62dcf5a66fd96394672079f9e9cad1\ncurl -u apikey:$API_KEY https://community.openproject.org/api/v3/users/42\n```\n\n### OAuth2.0 authentication\n\nOpenProject allows authentication and authorization with OAuth2 with *Authorization code flow*, as well as *Client credentials* operation modes.\n\nTo get started, you first need to register an application in the OpenProject OAuth administration section of your installation.\nThis will save an entry for your application with a client unique identifier (`client_id`) and an accompanying secret key (`client_secret`).\n\nYou can then use one the following guides to perform the supported OAuth 2.0 flows:\n\n- [Authorization code flow](https://oauth.net/2/grant-types/authorization-code)\n\n- [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\n\n- [Client credentials](https://oauth.net/2/grant-types/client-credentials/) - Requires an application to be bound to an impersonating user for non-public access\n\n### OIDC provider generated JWT as a Bearer token\n\nThere 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.\nThe following requirements must be met:\n\n- OIDC provider must be configured in OpenProject with **jwks_uri**\n- JWT must be signed using RSA algorithm\n- JWT **iss** claim must be equal to OIDC provider **issuer**\n- JWT **aud** claim must contain the OpenProject **client ID** used at the OIDC provider\n- JWT **scope** claim must include a valid scope to access the desired API (e.g. `api_v3` for APIv3)\n- JWT must be actual (neither expired or too early to be used)\n- JWT must be passed in Authorization header like: `Authorization: Bearer {jwt}`\n- User from **sub** claim must be logged in OpenProject before otherwise it will be not authenticated\n\nIn more general terms, OpenProject should be compliant to [RFC 9068](https://www.rfc-editor.org/rfc/rfc9068) when validating access tokens.\n\n### Why not username and password?\n\nThe simplest way to do basic auth would be to use a user's username and password naturally.\nHowever, OpenProject already has supported API keys in the past for the API v2, though not through basic auth.\n\nUsing **username and password** directly would have some advantages:\n\n* It is intuitive for the user who then just has to provide those just as they would when logging into OpenProject.\n\n* No extra logic for token management necessary.\n\nOn the other hand using **API keys** has some advantages too, which is why we went for that:\n\n* If compromised while saved on an insecure client the user only has to regenerate the API key instead of changing their password, too.\n\n* They are naturally long and random which makes them invulnerable to dictionary attacks and harder to crack in general.\n\nMost importantly users may not actually have a password to begin with. Specifically when they have registered\nthrough an OpenID Connect provider.\n\n## Cross-Origin Resource Sharing (CORS)\n\nBy default, the OpenProject API is _not_ responding with any CORS headers.\nIf you want to allow cross-domain AJAX calls against your OpenProject instance, you need to enable CORS headers being returned.\n\nPlease see [our API settings documentation](https://www.openproject.org/docs/system-admin-guide/api-and-webhooks/) on\nhow to selectively enable CORS.\n\n## Allowed HTTP methods\n\n- `GET` - Get a single resource or collection of resources\n\n- `POST` - Create a new resource or perform\n\n- `PATCH` - Update a resource\n\n- `DELETE` - Delete a resource\n\n## Compression\n\nResponses are compressed if requested by the client. Currently [gzip](https://www.gzip.org/) and [deflate](https://tools.ietf.org/html/rfc1951)\nare supported. The client signals the desired compression by setting the [`Accept-Encoding` header](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3).\nIf 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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint.\nCurrently supported filters are:\n\n+ 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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are:\n\n+ *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.\nIn addition to the provided filters, the server will reduce the result set to only contain actions, for which the requesting client\nhas 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.\n\n**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:\n\n* Omitting one of the required parts (metadata and file)\n\n* 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.\n\n**Required permission:** view_work_packages or view_internal_comments (for internal comments)\n\n*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\nto see it.\n\n**Required permission:** view_work_packages or view_internal_comments (for 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.*","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.\nReasons are:\n\n* Omitting the file name (`fileName` property of metadata part)\n\n* 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\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.*"}}},"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,\nthe reaction will be removed. Otherwise, a new reaction will be created.\n\n**Note:** The response contains the complete collection of all emoji reactions for this activity.\n\n**Required permission:**\n- `add_work_package_comments`\n- 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\nto 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:\n\n* Omitting one of the required parts (metadata and file)\n\n* 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.\n\n**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.\nReasons are:\n\n* Omitting the file name (`fileName` property of metadata part)\n\n* Sending a file that is too large"}},"tags":["Attachments"],"description":"Clients can create attachments without a container first and attach them later on.\nThis is useful if the container does not exist at the time the attachment is uploaded.\nAfter the upload, the client can then claim such containerless attachments for any resource eligible (e.g. WorkPackage) on subsequent requests.\nThe upload and the claiming *must* be done for the same user account. Attachments uploaded by another user cannot be claimed and\nonce claimed for a resource, they cannot be claimed by another.\n\nThe upload request must be of type `multipart/form-data` with exactly two parts.\n\nThe first part *must* be called `metadata`. Its content type is expected to be `application/json`,\nthe body *must* be a single JSON object, containing at least the `fileName` and optionally the attachments `description`.\n\nThe second part *must* be called `file`, its content type *should* match the mime type of the file.\nThe body *must* be the raw content of the file.\nNote that a `filename` *must* be indicated in the `Content-Disposition` of this part, although it will be ignored.\nInstead 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.\n\nNote that the response body is empty as of now. In future versions of the API a body\n*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.\n\n**Required permission:** edit permission for the container of the attachment or being the author for attachments without container\n\n*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\nto see it.\n\n**Required permission:** view permission for the container of the attachment or being the author for attachments without container\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of an attachment.\nThat'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\nto see it.\n\n**Required permission:** view permission for the container of the attachment or being the author for attachments without container\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of an attachment.\nThat'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.\n\n**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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint.\n\n+ action: Get all capabilities of a certain action\n\n+ principal: Get all capabilities of a principal\n\n+ context: Get all capabilities within a context. Note that for a workspace context the client needs to\n  provide `w{id}`, e.g. `w5` and for the global context a `g`.\n\n  + **Deprecation**: The now deprecated context `p` for project still works, but must eventually be replaced\n    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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are:\n\n+ 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\nto see it.\n\n**Required permission:** view project (defining the category)\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na 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.\n\n**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.\n\n**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\n 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.\n\nThe hierarchy is a tree structure of hierarchy items. It is represented as a flat list of items, where each item\nhas a reference to its parent and children. The list is ordered in a depth-first manner. The first item is the\nrequested parent. If parent was unset, the root item is returned as first element.\n\nPassing the `depth` query parameter allows to limit the depth of the hierarchy. If the depth is unset, the full\nhierarchy tree is returned. If the depth is set to `0`, only the requested parent is returned. Any other positive\ninteger will return the number of children levels specified by this value.\n\nThis 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.\n\nThe 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.\n\nA 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.\n\n**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.\nIt does not lists the non working weekdays, such as each Saturday, Sunday.\nFor listing the weekends, the `/api/v3/days` endpoint should be used.\n\nAll days from current year are returned by default.","parameters":[{"name":"filters","in":"query","description":"JSON specifying filter conditions.\n\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/)\nendpoint. Currently supported filters are:\n\n+ date: the inclusive date interval to scope days to look up. When\n  unspecified, default is from the beginning to the end of current year.\n\n  Example: `{ \"date\": { \"operator\": \"<>d\", \"values\": [\"2022-05-02\",\"2022-05-26\"] } }`\n  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)**\nMarks a day as being a non-working day.\n\nNote: creating a non-working day will not affect the start and finish dates\nof 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)**\nUpdate 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)**\nRemoves the non-working day at the given date.\n\nNote: deleting a non-working day will not affect the start and finish dates\nof 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.\n\nThe 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)**\nUpdate 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)**\nMakes a week day a working or non-working day.\n\nNote: changing a week day working attribute will not affect the start and\nfinish 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.\n\nResponse 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.\n\nAll days from the beginning of current month to the end of following month\nare returned by default.","parameters":[{"name":"filters","in":"query","description":"JSON specifying filter conditions.\n\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/)\nendpoint. Currently supported filters are:\n\n+ date: the inclusive date interval to scope days to look up. When\n  unspecified, default is from the beginning of current month to the end\n  of following month.\n\n  Example: `{ \"date\": { \"operator\": \"<>d\", \"values\": [\"2022-05-02\",\"2022-05-26\"] } }`\n  would return days between May 5 and May 26 2022, inclusive.\n\n+ working: when `true`, returns only the working days. When `false`,\n  returns only the non-working days (weekend days and non-working days).\n  When unspecified, returns both working and non-working days.\n\n  Example: `{ \"working\": { \"operator\": \"=\", \"values\": [\"t\"] } }`\n  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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are:\n\n+ id: Sort by primary key\n\n+ 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":"<p>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.</p>","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":"<p>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.</p>","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":"<p>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.</p>","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.\n\n**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":"<p>Updated description content</p>","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.\n\n**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.\n\n**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\nwas not empty.\n\nNote that this error only occurs when the content is not at all a single JSON object.\nIt **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.\nNote: Aggregation is as of now only supported by the work package collection.\nYou 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.\n\n**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.\n\nThe 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.\n\n**Required permission:** manage file links\n\n*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\nto see it.\n\n**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\nis 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\nfile 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.\n\n**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\nis 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\norigin 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.\n\n**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\nalso 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\nthe [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters\nare:\n\n- 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\npage the grid is placed in which is why the create form endpoint should be used to be guided when wanting to\ncreate 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.\n\n**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:\n\n* 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.\n\n**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\non the page the grid is placed in which is why the create form endpoint should be used to be guided when wanting\nto 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.\n\n**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:\n\n* 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.\n\n**Required permission:** depends on the page the grid is defined for.\n\n*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.\n\n**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\ngroups similar to how work packages are filtered. In addition to the provided\nfilters, the server will reduce the result set to only contain groups, for which\nthe requesting client has sufficient permissions (*view_members*, *manage_members*).","parameters":[{"name":"sortBy","description":"JSON specifying sort criteria.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are:\n\n+ id: Sort by primary key\n\n+ created_at: Sort by group creation datetime\n\n+ 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.\n\n**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.\n\n**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:\n\n* 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.\n\nNote that the response body is empty as of now. In future versions of the API a body\n*might* be returned, indicating the progress of deletion."},"403":{"description":"Returned if the client does not have sufficient permissions.\n\n**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\nto see it.\n\n**Required permission:** Administrator\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na 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.\n\n**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\nwill 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.\n\nPlease note that the `members` array provided will override the existing set of members (similar to a PUT). A\nclient thus has to provide the complete list of members the group is to have after the PATCH even if only one\nmember 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.\n\n**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\nto see it.\n\n**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\nwill be able to query all groups which are members in projects, he has the *view members* permission in.\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na 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:\n\n* 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/{id}":{"get":{"parameters":[{"description":"Meeting 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},"author":{"_type":"User...","id":2}},"_links":{"addAttachment":{"href":"/api/v3/meetings/72/attachments","method":"post"},"attachments":{"href":"/api/v3/meetings/72/attachments"},"project":{"href":"/api/v3/projects/12","title":"some project"},"author":{"href":"/api/v3/users/2","title":"Peggie Feeney"},"self":{"href":"/api/v3/meetings/72"}},"_type":"Meeting","id":72,"lockVersion":5,"title":"A meeting","startTime":"2014-05-21T08:00:00.000Z","duration":120,"createdAt":"2014-05-21T08:51:20.396Z","updatedAt":"2014-05-21T09:14:02.776Z"}}},"schema":{"$ref":"#/components/schemas/MeetingModel"}}},"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.\n\n**Required permission:** view meetings in the page's project","headers":{}}},"tags":["Meetings"],"description":"Retrieve an individual meeting as identified by the id parameter","operationId":"View_Meeting","summary":"View Meeting Page"}},"/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\nto see it.\n\n**Required permission:** view meetings\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a meeting.\nThat'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":null,"firstName":"OpenProject","id":1,"identityUrl":null,"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:\n\n* Omitting one of the required parts (metadata and file)\n\n* 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.\n\n**Required permission:** edit meetings\n\n*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\nto see it.\n\n**Required permission:** view meetings\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a meeting\nThat'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.\nReasons are:\n\n* Omitting the file name (`fileName` property of metadata part)\n\n* 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\nthe memberships similar to how work packages are filtered. In addition to the\nprovided filters, the server will reduce the result set to only contain memberships,\nfor 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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/)\nendpoint. Currently supported filters are:\n\n+ any_name_attribute: filters memberships based on the name of the principal. All possible name variants\n  (and also email and login) are searched.\n+ blocked: reduces the result set to all memberships that are temporarily blocked or that are not blocked\n  temporarily.\n+ group: filters memberships based on the name of a group. The group however is not the principal used for\n  filtering. Rather, the memberships of the group are used as the filter values.\n+ name: filters memberships based on the name of the principal. Note that only the name is used which depends\n  on a setting in the OpenProject instance.\n+ principal: filters memberships based on the id of the principal.\n+ project: filters memberships based on the id of the project.\n+ role: filters memberships based on the id of any role assigned to the membership.\n+ status: filters memberships based on the status of the principal.\n+ created_at: filters memberships based on the time the membership was created.\n+ 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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/)\nendpoint. Currently supported sorts are:\n\n+ id: Sort by primary key\n+ name: Sort by the name of the principal. Note that this depends on the setting for how the name is to be\n  displayed at least for users.\n+ email: Sort by the email address of the principal. Groups and principal users, which do not have an email,\n  are sorted last.\n+ status: Sort by the status of the principal. Groups and principal users, which do not have a status, are\n  sorted together with the active users.\n+ created_at: Sort by membership creation datetime\n+ 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.\n\nYou can use the form and schema to retrieve the valid attribute values and by that be guided towards successful\ncreation.\n\nBy providing a `notificationMessage` within the `_meta` block of the payload, the client can include a customized\nmessage to the user of the newly created membership. In case of a group, the message will be sent to every user\nbelonging to the group.\n\nBy including `{ \"sendNotifications\": false }` within the `_meta` block of the payload, no notifications is send\nout 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.\n\n**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:\n\n- 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\nissuing 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.\n\n**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\nendpoint 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.\n\n**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.\n\n**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.\n\n**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\nto see it.\n\n**Required permission:** view members\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na 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\nto see it.\n\n**Required permission:** view members **or** manage members\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na 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.\n\nBy providing a `notificationMessage` within the `_meta` block of the payload, the client can include a customized message to the user\nof the updated membership. In case of a group, the message will be sent to every user belonging to the group.\n\nBy 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.\n\n**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\nto see it.\n\n**Required permission:** view member\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na 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:\n\n* 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,\nis 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.\n\n**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":null}}}}}},"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":null}}}}}},"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.\nReasons are:\n\n* Specifying an invalid type\n\n* 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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are:\n\n+ id: Sort by primary key\n\n+ 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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are:\n\n+ 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":"<p>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.</p>","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":"<p>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.</p>","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.\nWhen 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.\n\n**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:\n\n* the client tries to modify a read-only property (`PropertyIsReadOnly`)\n\n* 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":"<p>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.</p>","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.\n\n**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.\nWhen 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.\n\n**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.\n\n**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:\n\n* the client tries to modify a read-only property (`PropertyIsReadOnly`)\n\n* 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.\n\nNote that the response body is empty as of now. In future versions of the API a body\n*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.\n\n**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\nparameters and also on the requesting user's permissions.\n\nContrary to most collections, this one also links to and embeds schemas for the `details` properties of the notifications returned.\nThis is an optimization. Clients will receive the information necessary to display the various types of details that a notification\ncan 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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are:\n\n+ id: Sort by primary key\n\n+ reason: Sort by notification reason\n\n+ readIAN: Sort by read status","example":"[[\"reason\", \"asc\"]]","required":false,"schema":{"type":"string"}},{"name":"groupBy","in":"query","description":"string specifying group_by criteria.\n\n+ reason: Group by notification reason\n\n+ project: Sort by associated project","example":"reason","required":false,"schema":{"type":"string"}},{"name":"filters","in":"query","description":"JSON specifying filter conditions.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are:\n\n+ id: Filter by primary key\n\n+ project: Filter by the project the notification was created in\n\n+ readIAN: Filter by read status\n\n+ reason: Filter by the reason, e.g. 'mentioned' or 'assigned' the notification was created because of\n\n+ resourceId: Filter by the id of the resource the notification was created for. Ideally used together with the `resourceType` filter.\n\n+ 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\nsee, and can be further reduced with filters.","parameters":[{"name":"filters","in":"query","description":"JSON specifying filter conditions.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/)\nendpoint. Currently supported filters are:\n\n+ id: Filter by primary key\n\n+ project: Filter by the project the notification was created in\n\n+ reason: Filter by the reason, e.g. 'mentioned' or 'assigned' the notification was created because of\n\n+ resourceId: Filter by the id of the resource the notification was created for. Ideally used together with the\n  `resourceType` filter.\n\n+ resourceType: Filter by the type of the resource the notification was created for. Ideally used together with\n  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\nsee, and can be further reduced with filters.","parameters":[{"name":"filters","in":"query","description":"JSON specifying filter conditions.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/)\nendpoint. Currently supported filters are:\n\n+ id: Filter by primary key\n\n+ project: Filter by the project the notification was created in\n\n+ reason: Filter by the reason, e.g. 'mentioned' or 'assigned' the notification was created because of\n\n+ resourceId: Filter by the id of the resource the notification was created for. Ideally used together with the\n  `resourceType` filter.\n\n+ resourceType: Filter by the type of the resource the notification was created for. Ideally used together with\n  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.\n\n**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.\n\n**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.\n\n**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.\n\n**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,\ninstead 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.\n\n**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,\ninstead 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.\n\n**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\n`manage_placeholder_user` or `manage_members` in any project.","parameters":[{"name":"filters","description":"JSON specifying filter conditions.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint.\nCurrently supported filters are:\n\n- name: filters placeholder users by the name.\n- group: filters placeholder by the group it is contained in.\n- 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\nallowed to do so. When calling this endpoint the client provides a single object, containing at least the\nproperties 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.\n\n**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:\n\n* 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.\n\nNote that the response body is empty as of now. In future versions of the API a body\n*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.\n\n**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.\n\n**Required permission**: `manage_placeholder_users`"}}},"patch":{"summary":"Update placeholder user","operationId":"update_placeholder_user","tags":["Principals"],"description":"Updates the placeholder user's writable attributes.\nWhen calling this endpoint the client provides a single object, containing at least the properties and links\nthat 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.\n\n**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:\n\n- the client tries to modify a read-only property (`PropertyIsReadOnly`)\n- 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.\nAccepts the same format as returned by the [queries](https://www.openportfolio.org/docs/api/endpoints/queries/) endpoint.\nCurrently supported filters are:\n\n+ active: based on the active property of the portfolio\n+ ancestor: filters portfolios by their ancestor. A portfolio is not considered to be its own ancestor.\n+ available_project_attributes: filters portfolios based on the activated project attributes.\n+ created_at: based on the time the portfolio was created\n+ favorited: based on the favorited property of the portfolio\n+ id: based on portfolios' id.\n+ latest_activity_at: based on the time the last activity was registered on a portfolio.\n+ name_and_identifier: based on both the name and the identifier.\n+ parent_id: filters portfolios by their parent.\n+ principal: based on members of the portfolio.\n+ project_phase_any: based on the project phases active in a portfolio.\n+ project_status_code: based on status code of the portfolio\n+ storage_id: filters portfolios by linked storages\n+ storage_url: filters portfolios by linked storages identified by the host url\n+ type_id: based on the types active in a portfolio.\n+ user_action: based on the actions the current user has in the portfolio.\n+ 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.\n\nThere might also be additional filters based on the custom fields that have been configured.\n\nEach defined lifecycle step will also define a filter in this list endpoint. Given that the elements are not\nstatic but rather dynamically created on each OpenProject instance, a list cannot be provided. Those filters follow the schema:\n+ 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.\n+ 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.\n+ 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.\nCurrently supported orders are:\n\n+ id\n+ name\n+ typeahead (sorting by hierarchy and name)\n+ created_at\n+ public\n+ latest_activity_at\n+ required_disk_space\n\nThere 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\nto see it.\n\n**Required permission:** any permission in the portfolio\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a portfolio.\nThat'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.\n\n**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\nto see it.\n\n**Required permission:** view project\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na 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:\n\n* 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.\nSuch 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.\n\n**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\nto see it.\n\n**Required permission:** any permission in the portfolio\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na 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\nthat 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.\nSo the portfolio might exist well after the request has returned successfully. To prevent unwanted changes to\nthe 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.\n\n**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.\n\n**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\nto see it.\n\n**Required permission:** view messages\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a post.\nThat'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":null,"firstName":"OpenProject","id":1,"identityUrl":null,"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:\n\n* Omitting one of the required parts (metadata and file)\n\n* 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.\n\n**Required permission:** edit messages\n\n*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\nto see it.\n\n**Required permission:** view messages\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a post.\nThat'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.\nReasons are:\n\n* Omitting the file name (`fileName` property of metadata part)\n\n* 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\naddition to the provided filters, the server will reduce the result set to only contain principals who are members\nin projects the client is allowed to see.","parameters":[{"name":"filters","description":"JSON specifying filter conditions.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint.\nCurrently supported filters are:\n\n- type: filters principals by their type (*User*, *Group*, *PlaceholderUser*).\n- member: filters principals by the projects they are members in.\n- name: filters principals by the user or group name.\n- any_name_attribute: filters principals by the user or group first- and last name, email or login.\n- 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.\n\n**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.\n\n**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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint.\nCurrently supported filters are:\n\n+ active: based on the active property of the program\n+ ancestor: filters programs by their ancestor. A program is not considered to be its own ancestor.\n+ available_project_attributes: filters programs based on the activated project attributes.\n+ created_at: based on the time the program was created\n+ favorited: based on the favorited property of the program\n+ id: based on programs' id.\n+ latest_activity_at: based on the time the last activity was registered on a program.\n+ name_and_identifier: based on both the name and the identifier.\n+ parent_id: filters programs by their parent.\n+ principal: based on members of the program.\n+ project_phase_any: based on the project phases active in a program.\n+ project_status_code: based on status code of the program\n+ storage_id: filters programs by linked storages\n+ storage_url: filters programs by linked storages identified by the host url\n+ type_id: based on the types active in a program.\n+ user_action: based on the actions the current user has in the program.\n+ 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.\n\nThere might also be additional filters based on the custom fields that have been configured.\n\nEach defined lifecycle step will also define a filter in this list endpoint. Given that the elements are not\nstatic but rather dynamically created on each OpenProject instance, a list cannot be provided. Those filters follow the schema:\n+ 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.\n+ 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.\n+ 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.\nCurrently supported orders are:\n\n+ id\n+ name\n+ typeahead (sorting by hierarchy and name)\n+ created_at\n+ public\n+ latest_activity_at\n+ required_disk_space\n\nThere 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\nto see it.\n\n**Required permission:** any permission in the program\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a program.\nThat'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.\n\n**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\nto see it.\n\n**Required permission:** view project\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na 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:\n\n* 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.\nSuch 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.\n\n**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\nto see it.\n\n**Required permission:** any permission in the program\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na 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\nthat 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.\nSo the program might exist well after the request has returned successfully. To prevent unwanted changes to\nthe 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.\n\n**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\nthen 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.\n\n**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.\nThe 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.\n\n**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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/)\nendpoint. Currently supported filters are:\n\n- project_id\n- storage_id\n- 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\nstorage 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.\n\n**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\nfolder, 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.\n\n**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.\nPrior 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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint.\nCurrently supported filters are:\n\n+ active: based on the active property of the project\n+ ancestor: filters projects by their ancestor. A project is not considered to be its own ancestor.\n+ available_project_attributes: filters projects based on the activated project project attributes.\n+ created_at: based on the time the project was created\n+ favorited: based on the favorited property of the project\n+ id: based on projects' id.\n+ latest_activity_at: based on the time the last activity was registered on a project.\n+ name_and_identifier: based on both the name and the identifier.\n+ parent_id: filters projects by their parent.\n+ principal: based on members of the project.\n+ project_phase_any: based on the project phases active in a project.\n+ project_status_code: based on status code of the project\n+ storage_id: filters projects by linked storages\n+ storage_url: filters projects by linked storages identified by the host url\n+ type_id: based on the types active in a project.\n+ user_action: based on the actions the current user has in the project.\n+ 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.\n\nThere might also be additional filters based on the custom fields that have been configured.\n\nEach defined lifecycle step will also define a filter in this list endpoint. Given that the elements are not\nstatic but rather dynamically created on each OpenProject instance, a list cannot be provided. Those filters follow the schema:\n+ 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.\n+ 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.\n+ 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.\nCurrently supported orders are:\n\n+ id\n+ name\n+ typeahead (sorting by hierarchy and name)\n+ created_at\n+ public\n+ latest_activity_at\n+ required_disk_space\n\nThere 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.\n\nYou 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.\n\n**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:\n\n* 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":null,"title":null},"customField31":{"href":null,"title":null},"parent":{"href":null},"status":{"href":null}},"active":true,"customField30":null,"customField34":null,"customField35":"Text custom field value","customField41":{"format":"markdown","html":"","raw":""},"customField42":null,"description":{"format":"markdown","html":"","raw":null},"identifier":"new_project_identifier","name":"New project name","public":false,"statusExplanation":{"format":"markdown","html":"<p></p>","raw":null}},"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.\n\n**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.\nThis 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.\nSuch 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.\n\n**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\nto see it.\n\n**Required permission:** any permission in the project\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na 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\nthat 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.\nSo the project might exist well after the request has returned successfully. To prevent unwanted changes to\nthe 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\nto see it.\n\n**Required permission:** view project\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a project.\nThat'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.\n\n**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\nto see it.\n\n**Required permission:** view project\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na 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:\n\n* 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.\n\n**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.\n\n**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:\n\n* 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.\n\n**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.\nNote 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.\nAccepts 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":"<p>Lorem <strong>ipsum</strong> dolor sit amet</p>","raw":"Lorem **ipsum** dolor sit amet"},"id":6,"identifier":"a_project","name":"A project","public":false,"statusExplanation":{"format":"markdown","html":"<p>Everything <strong>fine</strong></p>","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":"<p>Everything super <strong>fine</strong></p>","raw":"Everything super **fine**"},"type":null,"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.\n\n**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.\nFor instance a project cannot become parent of itself or its children.\n\nTo specify the project for which a parent is queried for, the `of` parameter can be provided. If no `of`\nparameter is provided, a new project is assumed. Then, the check for the hierarchy is omitted as a new project cannot be\npart of a hierarchy yet, instead `workspace_type` parameter can be passed defining it for new project.\n\nCandidates can be filtered. Most commonly one will want to filter by name or identifier.\nYou can do this through the `filters` parameter which works just like the work package index.\n\nFor instance to find all parent candidates with \"rollout\" in their name:\n\n```\n?filters=[{\"name_and_identifier\":{\"operator\":\"~\",\"values\":[\"rollout\"]}}]\n```","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\nproject.\n\n**Required permission:** view work packages **or** view budgets\n\n*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:\n\n* the project does not exist\n\n* the client does not have sufficient permissions to see the project\n\n* the costs module is not enabled on the given project\n\n**Required permission:** view project\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a project.\nThat'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)\nin its response, this resource returns an unpersisted query and by that allows\nto get the default query configuration. The client may also provide additional\nparameters which will modify the default query. The query will already be scoped\nto the project.\n\nThis 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.\nThe filters provided as parameters are not applied to the query but are instead used to override the query's persisted filters.\nAll 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.\n","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":null,"title":null},"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.\n\n**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.\n\n**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.\n\n**Required permission:** view work package in any project","headers":{}}},"tags":["Query Filter Instance Schema"],"description":"Returns the list of QueryFilterInstanceSchemas defined for a query\nof the specified project.\n\nThis 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.\n\nThis 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.\nThis 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.\nAccepts 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.\nAccepts 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.\n\n**Required permission:** view work packages\n\n*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.\n\n**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\nare required, in the body. The required fields of a WorkPackage can be found in its schema, which is embedded in\nthe respective form. Note that it is only allowed to provide properties or links supporting the write operation.\n\nThis 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.\nNote that this controls notifications for all users interested in changes to the work package (e.g. watchers, author and assignee),\nnot 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.\n\n**Required permission:** add work packages\n\n*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\nto see it.\n\n**Required permissions:** view project\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a project.\nThat'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:\n\n* the client tries to write a read-only property\n\n* a constraint for a property was violated\n\n* 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\nto the `/api/v3/work_packages/form` endpoint, but already specifies the work package's project in the path, so that\nit does not have to be defined in the request body.\n\nThis 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.\n\n**Required permission:** add work packages\n\n*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.\n\n**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.\nThis 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\nto see it.\n\n**Required permission:** view project\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a project.\nThat'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}/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\nto see it.\n\n**Required permission:** view work packages **or** manage types (on given project)\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a project.\nThat'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.\nThis 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":null,"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":null,"id":12,"name":"v2.0","startDate":null,"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":null,"id":10,"name":"v1.0","startDate":null,"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\nto see it.\n\n**Required permission:** view work packages **or** manage versions (on given project)\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a project.\nThat'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.\nNote that due to sharing this might be more than the versions *defined* by that project.\n\nThis 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\nto see it.\n\n**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.\n\n**Required permission:** logged in"}},"tags":["Projects","Favorites"],"description":"Removes the project from the current user's favorites.\n\nThis 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\nto see it.\n\n**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.\n\n**Required permission:** logged in"}},"tags":["Projects","Favorites"],"description":"Adds the project to the current user's favorites.\n\nThis 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\nconfiguration 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.\nCurrently supported filters are:\n\n+ 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.\n\n+ id: filters queries based on their id\n\n+ 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.\n\n**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.\nThe required fields of a Query can be found in its schema, which is embedded in the respective form.\nNote 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:\n\n* the client tries to modify a read-only property (`PropertyIsReadOnly`)\n\n* a constraint for a property was violated (`PropertyConstraintViolation`)\n\n* the client provides a link to an invalid resource (`ResourceTypeMismatch`),\n  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":null,"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.\n\n**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.\n\n**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.\nThe filters provided as parameters are not applied to the query but are instead used to override the query's persisted filters.\nAll 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.\n","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":null,"title":null},"highlightedAttributes":[],"project":{"href":null},"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.\n\n**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.\n\n**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.\n\n**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.\n\n**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.\n\n**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.\n\n**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.\n\n**Required permission:** for own queries none; for public queries: manage public queries\n\n*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.\n\n**Required condition:** query belongs to user or query is public\n\n**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.\nThe filters provided as parameters are not applied to the query but are instead used to override the query's persisted filters.\nAll 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.\n","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.\n\n**Required condition:** query belongs to user or query is public\n\n**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.\nNote 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":null,"title":null},"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/<t+","title":"in less than"},"schema":{"href":"/api/v3/queries/filter_instance_schemas/dueDate"}},"_type":"DueDateQueryFilter","name":"Finish date","values":["1"]}],"id":9,"name":"fdsfdsfdsf","public":false,"starred":false,"sums":false,"updatedAt":"2015-05-20T18:16:53.884Z"}}},"schema":{"$ref":"#/components/schemas/QueryModel"}}},"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 allowed to edit the content of the work package."}}}}},"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** edit 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 query does not exist."}}}}},"description":"Returned if the query does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view work packages in the query's project (unless global)","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":"The name might not be blank."}}}}},"description":"Returned if:\n\n* the client tries to modify a read-only property (`PropertyIsReadOnly`)\n\n* a constraint for a property was violated (`PropertyConstraintViolation`)\n\n* the client provides a link to an invalid resource (`ResourceTypeMismatch`)","headers":{}}}}},"/api/v3/queries/{id}/form":{"post":{"summary":"Query Update Form","operationId":"Query_Update_Form","tags":["Queries"],"description":"","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":{"description":"OK","headers":{}}}}},"/api/v3/queries/{id}/star":{"patch":{"parameters":[{"description":"Query id","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/hal+json":{"examples":{"response":{"value":{"_embedded":{"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":null,"title":null},"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.856Z","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/<t+","title":"in less than"},"schema":{"href":"/api/v3/queries/filter_instance_schemas/dueDate"}},"_type":"DueDateQueryFilter","name":"Finish date","values":["1"]}],"id":9,"name":"fdsfdsfdsf","public":false,"starred":true,"sums":false,"updatedAt":"2015-05-20T18:16:53.089Z"}}},"schema":{"$ref":"#/components/schemas/Star_QueryModel"}}},"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 allowed to star this query."}}}}},"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** for own queries none; for public queries: manage public queries\n\n*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 specified query does not exist."}}}}},"description":"Returned if the query does not exist or the client does not have sufficient permissions to see it.\n\n**Required condition:** query belongs to user or query is public\n\n**Required permission:** view work package in queries project","headers":{}}},"tags":["Queries"],"description":"","operationId":"Star_query","summary":"Star query"}},"/api/v3/queries/{id}/unstar":{"patch":{"parameters":[{"description":"Query id","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/hal+json":{"examples":{"response":{"value":{"_embedded":{"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":null,"title":null},"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.468Z","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/<t+","title":"in less than"},"schema":{"href":"/api/v3/queries/filter_instance_schemas/dueDate"}},"_type":"DueDateQueryFilter","name":"Finish date","values":["1"]}],"id":9,"name":"fdsfdsfdsf","public":false,"starred":false,"sums":false,"updatedAt":"2015-05-20T18:16:53.386Z"}}},"schema":{"$ref":"#/components/schemas/Unstar_QueryModel"}}},"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 allowed to unstar this query."}}}}},"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** for own queries none; for public queries: manage public queries\n\n*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 specified query does not exist."}}}}},"description":"Returned if the query does not exist or the client does not have sufficient permissions to see it.\n\n**Required condition:** query belongs to user or query is public\n\n**Required permission:** view work package in queries project","headers":{}},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"}},"tags":["Queries"],"description":"","operationId":"Unstar_query","summary":"Unstar query"}},"/api/v3/relations":{"get":{"summary":"List Relations","operationId":"list_relations","tags":["Relations"],"description":"Lists all relations according to the given (optional, logically conjunctive) filters and ordered by ID.\nThe response only includes relations between work packages which the user is allowed to see.","parameters":[{"name":"filters","description":"JSON specifying filter conditions. Accepts the same format as returned by\nthe [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Valid fields to filter by are:\n\n- id - ID of relation\n- from - ID of work package from which the filtered relations emanates.\n- to - ID of work package to which this related points.\n- involved - ID of either the `from` or the `to` work package.\n- type - The type of relation to filter by, e.g. \"follows\".","example":"[{ \"from\": { \"operator\": \"=\", \"values\": 42 }\" }]","in":"query","required":false,"schema":{"type":"string"}},{"name":"sortBy","description":"JSON specifying sort criteria.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint.","example":"[[\"type\", \"asc\"]]","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/RelationCollectionModel"},"examples":{"response":{"$ref":"#/components/examples/RelationCollectionResponse"}}}}},"400":{"description":"Returned if the client provides invalid filter parameters.","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"response":{"value":{"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:InvalidQuery","message":["Filters Type filter has invalid values."]}}}}}}}}},"/api/v3/relations/{id}":{"get":{"summary":"Get Relation","operationId":"get_relation","tags":["Relations"],"description":"Get a single relation specified by its unique identifier.","parameters":[{"description":"Relation id","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/hal+json":{"examples":{"response":{"$ref":"#/components/examples/RelationResponse"}},"schema":{"$ref":"#/components/schemas/RelationReadModel"}}}},"404":{"description":"Returned if the relation does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view work packages for the involved work packages","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 relation does not exist."}}}}}}}},"delete":{"summary":"Delete Relation","operationId":"delete_relation","tags":["Relations"],"description":"Deletes the relation.","parameters":[{"description":"The unique identifier of the relation resource","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Returned if the relation was deleted successfully. The response body is empty."},"403":{"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** manage work package relations","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 relation."}}}}}},"404":{"description":"Returned if the relation does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view work packages","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 relation does not exist."}}}}}},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"}}},"patch":{"summary":"Update Relation","operationId":"update_relation","tags":["Relations"],"description":"When calling this endpoint the client provides a single object, containing the properties and links that it wants\nto change, in the body. It is only allowed to provide properties or links supporting the **write** operation.\n\nNote that changing the `type` of a relation invariably also changes the respective `reverseType` as well as the\n\"name\" of it. The returned Relation object will reflect that change. For instance if you change a Relation's\n`type` to \"follows\" then the `reverseType` will be changed to `precedes`.\n\nIt is not allowed to change a relation's involved work packages.","parameters":[{"description":"Relation ID","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationWriteModel"},"examples":{"request":{"$ref":"#/components/examples/RelationUpdateRequest"}}}}},"responses":{"200":{"description":"OK","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/RelationReadModel"},"examples":{"response":{"$ref":"#/components/examples/RelationResponse"}}}}},"400":{"$ref":"#/components/responses/InvalidRequestBody"},"404":{"description":"Returned if the relation does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view work packages","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 relation does not exist."}}}}}},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"Returned if:\n\n- the client tries to modify a read-only property (`PropertyIsReadOnly`)\n- a constraint for a property was violated (`PropertyConstraintViolation`)\n- the client provides a link to an invalid resource (`ResourceTypeMismatch`) or a\n  work package that does not exist or for which the client does not have sufficient permissions\n  to see it (**required permissions**: `view work packages` for the involved work packages).","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"}}}}}}}}},"/api/v3/render/markdown":{"post":{"parameters":[{"description":"API-Link to the context in which the rendering occurs, for example a specific work package.\n\nIf left out only context-agnostic rendering takes place.\nPlease note that OpenProject features markdown-extensions on top of the extensions GitHub Flavored Markdown (gfm) already\nprovides that can only work given a context (e.g. display attached images).\n\n**Supported contexts:**\n\n* `/api/v3/work_packages/{id}` - an existing work package","example":"/api/v3/work_packages/42","in":"query","name":"context","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"text/html":{"examples":{"response":{"value":"<p>Hello world! <a href=\"http://example.com\">This</a> <strong>is</strong> markdown!</p>"}},"schema":{"$ref":"#/components/schemas/MarkdownModel"}}},"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:InvalidRenderContext","message":"Could not render markdown string in the given context."}}}}},"description":"Returned if the context passed by the client is not valid (e.g. unknown).\n\nNote that this response will also occur when the requesting user\nis not allowed to see the context resource (e.g. limited work package visibility).","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_Markdown_document","summary":"Preview Markdown document"}},"/api/v3/render/plain":{"post":{"responses":{"200":{"content":{"text/html":{"examples":{"response":{"value":"<p>Hello world! This *is* plain text!</p>\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":"<p>This revision provides new features<br/><br/>An elaborate description</p>","raw":"This revision provides new features\n\nAn elaborate description"}}}},"schema":{"$ref":"#/components/schemas/RevisionModel"}}},"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 revision does not exist."}}}}},"description":"Returned if the revision does not exist or the client does not have sufficient permissions\nto see it.\n\n**Required permission:** view changesets for the project the repository is created in.\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a revision.\nThat's why a 404 is returned here, even if a 403 might be more appropriate.*","headers":{}}},"tags":["Revisions"],"description":"","operationId":"View_revision","summary":"View revision"}},"/api/v3/reminders":{"get":{"summary":"List all active reminders","operationId":"list_reminders","tags":["Reminders"],"description":"Gets a list of all active reminders for the user.","responses":{"200":{"description":"OK","content":{"application/hal+json":{"schema":{"type":"object","required":["_type","total","count","_embedded"],"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},"_embedded":{"type":"object","required":["elements"],"properties":{"elements":{"type":"array","items":{"$ref":"#/components/schemas/ReminderModel"}}}}}}}}}}}},"/api/v3/reminders/{id}":{"patch":{"summary":"Update a reminder","operationId":"update_reminder","tags":["Reminders"],"description":"Updates an existing reminder.\n\nA user can only update their own active reminder.\n\n**Required permission:** view work packages for the project the reminder is contained in.","parameters":[{"name":"id","in":"path","description":"Reminder ID","example":"1","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"remindAt":{"type":"string","format":"date-time","description":"The date and time when the reminder is due"},"note":{"type":"string","description":"The note of the reminder (optional)"}}}}}},"responses":{"200":{"description":"Reminder updated successfully","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ReminderModel"}}}},"404":{"description":"Returned if the reminder does not exist or the client does not have sufficient permissions to see it.","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"summary":"Delete a reminder","operationId":"delete_reminder","tags":["Reminders"],"description":"Deletes an existing reminder.\n\nA user can only delete their own active reminder.\n\n**Required permission:** view work packages for the project the reminder is contained in.","parameters":[{"name":"id","in":"path","description":"Reminder ID","example":"1","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Reminder deleted successfully"},"404":{"description":"Returned if the reminder does not exist or the client does not have sufficient permissions to see it.","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v3/roles":{"get":{"parameters":[{"description":"JSON specifying filter conditions.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint.\nCurrently supported filters are:\n\n+ grantable: filters roles based on whether they are selectable for a membership\n\n+ unit: filters roles based on the unit ('project' or 'system') for which they are selectable for a membership","example":"[{ \"unit\": { \"operator\": \"=\", \"values\": [\"system\"] }\" }]","in":"query","name":"filters","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/hal+json":{"examples":{"response":{"value":{"_embedded":{"elements":[{"_links":{"self":{"href":"/api/v3/roles/3","title":"Manager"}},"_type":"Role","id":3,"name":"Manager"},{"_links":{"self":{"href":"/api/v3/roles/2","title":"Anonymous"}},"_type":"Role","id":2,"name":"Anonymous"},{"_links":{"self":{"href":"/api/v3/roles/5","title":"Reader"}},"_type":"Role","id":5,"name":"Reader"},{"_links":{"self":{"href":"/api/v3/roles/4","title":"Member"}},"_type":"Role","id":4,"name":"Member"},{"_links":{"self":{"href":"/api/v3/roles/1","title":"Non member"}},"_type":"Role","id":1,"name":"Non member"}]},"_links":{"self":{"href":"/api/v3/roles"}},"_type":"Collection","count":5,"total":5}}},"schema":{"$ref":"#/components/schemas/RolesModel"}}},"description":"OK","headers":{}}},"tags":["Roles"],"description":"List all defined roles. This includes built in roles like 'Anonymous' and 'Non member'.","operationId":"List_roles","summary":"List roles"}},"/api/v3/roles/{id}":{"get":{"parameters":[{"description":"Role 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/roles/3","title":"Manager"}},"_type":"Role","id":3,"name":"Manager"}}},"schema":{"$ref":"#/components/schemas/RoleModel"}}},"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 view this resource."}}}}},"description":"Returned if the client does not have sufficient permissions to see roles.\n\n**Required permission:** view members **or** manage members","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 role does not exist.","headers":{}}},"tags":["Roles"],"description":"Fetch an individual role.","operationId":"View_role","summary":"View role"}},"/api/v3/statuses":{"get":{"summary":"List the collection of all statuses","operationId":"list_statuses","tags":["Statuses"],"description":"Returns a collection of all work package statuses.","responses":{"200":{"description":"OK","content":{"application/hal+json":{"examples":{"simple status collection":{"$ref":"#/components/examples/StatusCollection"}},"schema":{"$ref":"#/components/schemas/StatusCollectionModel"}}}},"403":{"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** view work package (on any project)","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 statuses."}}}}}}}}},"/api/v3/statuses/{id}":{"get":{"summary":"Get a work package status","operationId":"get_status","tags":["Statuses"],"description":"Returns a work package status by its unique identifier.","parameters":[{"name":"id","description":"Status id","in":"path","required":true,"schema":{"type":"integer"},"example":"1"}],"responses":{"200":{"description":"OK","content":{"application/hal+json":{"examples":{"response":{"$ref":"#/components/examples/StatusResponse"}},"schema":{"$ref":"#/components/schemas/StatusModel"}}}},"403":{"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** view work package (on any project)","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 status."}}}}}},"404":{"description":"Returned if the status does not exist.","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/storages":{"get":{"summary":"Get Storages","operationId":"list_storages","tags":["File links"],"description":"Returns a collection of storages.","responses":{"200":{"description":"OK","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/StorageCollectionModel"},"examples":{"Simple storage collection":{"$ref":"#/components/examples/StoragesSimpleCollectionModel"}}}}},"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":"Creates a storage.","operationId":"create_storage","tags":["File links"],"description":"Creates a storage resource. When creating a storage, a confidential OAuth 2 provider application is created\nautomatically. The oauth client id and secret of the created OAuth application are returned in the response.\n\n**IMPORTANT:** This is the only time, the oauth client secret is visible to the consumer. After that, the secret is\nhidden.\n\nTo update the storage with OAuth client credentials, which enable the storage resource to behave as an OAuth 2\nclient against an external OAuth 2 provider application, another request must be made to create those, see\n`POST /api/v3/storages/{id}/oauth_client_credentials`.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageWriteModel"}}}},"responses":{"201":{"description":"Created","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/StorageReadModel"}}}},"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.\n\n**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:\n\n* a constraint for a property was violated (`PropertyConstraintViolation`)"}}}},"/api/v3/storages/{id}":{"get":{"summary":"Get a storage","operationId":"get_storage","tags":["File links"],"description":"Gets a storage resource. As a side effect, a live connection to the storages origin is established to retrieve\nconnection state data.","parameters":[{"name":"id","description":"Storage id","in":"path","required":true,"schema":{"type":"integer"},"example":1337}],"responses":{"200":{"description":"OK","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/StorageReadModel"},"examples":{"Nextcloud storage":{"$ref":"#/components/examples/StorageNextcloudResponse"},"Freshly created Nextcloud storage":{"$ref":"#/components/examples/StorageNextcloudResponseForCreation"},"OneDrive storage":{"$ref":"#/components/examples/StorageOneDriveResponse"},"Incomplete OneDrive storage":{"$ref":"#/components/examples/StorageOneDriveIncompleteResponse"},"Unauthorized Nextcloud storage":{"$ref":"#/components/examples/StorageNextcloudUnauthorizedResponse"}}}}},"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 storage does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view file links"}}},"patch":{"summary":"Update a storage","operationId":"update_storage","tags":["File links"],"description":"Updates a storage resource. Only data that is not generated by the server can be updated. This excludes the OAuth 2\napplication data.","parameters":[{"name":"id","description":"Storage id","in":"path","required":true,"schema":{"type":"integer"},"example":1337}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageWriteModel"}}}},"responses":{"200":{"description":"OK","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/StorageReadModel"}}}},"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.\n\n**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 storage does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view file links"}}},"delete":{"summary":"Delete a storage","operationId":"delete_storage","tags":["File links"],"description":"Deletes a storage resource. This also deletes all related records, like the created oauth application, client, and\nany file links created within this storage.","parameters":[{"name":"id","description":"Storage id","in":"path","required":true,"schema":{"type":"integer"},"example":1337}],"responses":{"204":{"description":"No content"},"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.\n\n**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 storage does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view file links"}}}},"/api/v3/storages/{id}/files":{"get":{"summary":"Gets files of a storage.","operationId":"get_storage_files","tags":["File links"],"description":"Gets a collection of files from a storage.\n\nIf no `parent` context is given, the result is the content of the document root. With `parent` context given, the\nresult contains the collections of files/directories from within the given parent file id.\n\nIf given `parent` context is no directory, `400 Bad Request` is returned.","parameters":[{"name":"id","description":"Storage id","in":"path","required":true,"schema":{"type":"integer"},"example":1337},{"name":"parent","description":"Parent file identification","in":"query","required":false,"schema":{"type":"string"},"example":"/my/data"}],"responses":{"200":{"description":"OK","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/StorageFilesModel"}}}},"400":{"description":"Returned if the given parent parameter value does not refer to a directory.","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:InvalidQuery","message":"The given parent is not a directory."}}}},"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 in either of those cases:\n- if the storage does not exist or the client does not have sufficient permissions to see it\n\n  **Required permission:** view file links\n- if the document root file identification does not exist on the storage"}}}},"/api/v3/storages/{id}/files/prepare_upload":{"post":{"summary":"Preparation of a direct upload of a file to the given storage.","operationId":"prepare_storage_file_upload","tags":["File links"],"description":"Executes a request that prepares a link for a direct upload to the storage.\n\nThe background here is, that the client needs to make a direct request to the storage instance for file uploading,\nbut should not get access to the credentials, which are stored in the backend. The response contains a link object,\nthat enables the client to execute a file upload without the real credentials.","parameters":[{"name":"id","description":"Storage id","in":"path","required":true,"schema":{"type":"integer"},"example":1337}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageFileUploadPreparationModel"}}}},"responses":{"201":{"description":"OK","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/StorageFileUploadLinkModel"}}}},"400":{"description":"Returned if the given parent parameter value does not refer to a directory.","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:InvalidQuery","message":"The given parent is not a directory."}}}},"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.\n\n**Required permission:** manage file links"},"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 storage does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view file links"},"500":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"outbound request failed":{"description":"This error is returned, if the outbound request to the file storage failed with a 404, e.g. if the\nupload location is not available.","value":{"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:OutboundRequest:NotFound","message":"An outbound request to another resource has failed with status code 404."}},"enterprise token missing":{"description":"This error is returned, if there is no Enterprise token available. The file upload to that storage is\nonly available in an Enterprise edition.","value":{"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:MissingEnterpriseToken","message":"The request cannot be handled due to invalid or missing Enterprise token."}}}}},"description":"Returned if the outbound request to the storage has failed with any reason."}}}},"/api/v3/storages/{id}/folders":{"post":{"summary":"Creation of a new folder","operationId":"create_storage_folder","tags":["File links"],"description":"Creates a new folder under the given parent","parameters":[{"name":"id","description":"Storage id","in":"path","required":true,"schema":{"type":"integer"},"example":1337}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageFolderWriteModel"},"examples":{"Valid example":{"$ref":"#/components/examples/StorageCreateFolderRequestBody"}}}}},"responses":{"201":{"description":"Created","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/StorageFileModel"}}}},"400":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:InvalidQuery","message":"The given parent is not a directory."}}},"description":"Returned if the request is missing a required parameter."},"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.\n\n**Required permission:** manage file links"},"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 storage does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view file links"}}}},"/api/v3/storages/{id}/oauth_client_credentials":{"post":{"summary":"Creates an oauth client credentials object for a storage.","operationId":"create_storage_oauth_credentials","tags":["File links"],"description":"Inserts the OAuth 2 credentials into the storage, to allow the storage to act as an OAuth 2 client. Calling this\nendpoint on a storage that already contains OAuth 2 client credentials will replace them.","parameters":[{"name":"id","description":"Storage id","in":"path","required":true,"schema":{"type":"integer"},"example":1337}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthClientCredentialsWriteModel"}}}},"responses":{"201":{"description":"Created","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/StorageReadModel"}}}},"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.\n\n**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 storage does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view file links"}}}},"/api/v3/storages/{id}/open":{"get":{"summary":"Open the storage","operationId":"open_storage","tags":["File Links"],"description":"Gets a redirect to the location of the storage's remote origin. The storage's files root should be the target\nlocation.","parameters":[{"name":"id","description":"Storage id","in":"path","required":true,"schema":{"type":"integer"},"example":1337}],"responses":{"303":{"description":"Redirect","headers":{"Location":{"schema":{"type":"string","format":"uri"}}}},"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 storage does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view file links"}}}},"/api/v3/time_entries":{"get":{"summary":"List time entries","operationId":"list_time_entries","tags":["Time entries"],"description":"Lists time entries. The time entries returned depend on the filters\nprovided and also on the permission of the requesting user.","parameters":[{"name":"offset","description":"Page number inside the requested collection.","example":25,"in":"query","required":false,"schema":{"default":1,"type":"integer"}},{"name":"pageSize","description":"Number of elements to display per page.","example":"25","in":"query","required":false,"schema":{"type":"integer"}},{"name":"sortBy","description":"JSON specifying sort criteria.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported sorts are:\n\n+ id: Sort by primary key\n\n+ hours: Sort by logged hours\n\n+ spent_on: Sort by spent on date\n\n+ created_at: Sort by time entry creation datetime\n\n+ updated_at: Sort by the time the time entry was updated last","example":"[[\"spent_on\", \"asc\"]]","in":"query","required":false,"schema":{"default":"[\"spent_on\", \"asc\"]","type":"string"}},{"name":"filters","description":"JSON specifying filter conditions.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are:\n\n+ entity_type: Filter time entries depending on the entity they are logged on. Can either be `WorkPackage` or `Meeting`.\n\n+ entity_id: Filter time entries for the specified entity IDs.\n\n+ project_id: Filter time entries by project\n\n+ user_id: Filter time entries by users\n\n+ ongoing: Filter to only recevie ongoing timers\n\n+ spent_on: Filter time entries by spent on date\n\n+ created_at: Filter time entries by creation datetime\n\n+ updated_at: Filter time entries by the last time they where updated\n\n+ activity_id: Filter time entries by time entry activity","example":"[{ \"entity_type\": { \"operator\": \"=\", \"values\": [\"WorkPackage\"] }}, { \"entity_id\": { \"operator\": \"=\", \"values\": [\"1\", \"2\"] } }, { \"project\": { \"operator\": \"=\", \"values\": [\"1\"] } }]","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/TimeEntryCollectionModel"}}}},"400":{"$ref":"#/components/responses/InvalidRequestBody"},"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 time entry","tags":["Time entries"],"description":"Creates a new time entry applying the attributes provided in the body.\nPlease note that while there is a fixed set of attributes, custom fields can extend\na time entries' attributes and are accepted by the endpoint.","operationId":"create_time_entry","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeEntryModel"}}}},"responses":{"201":{"description":"Created","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/TimeEntryModel"}}}},"400":{"$ref":"#/components/responses/InvalidRequestBody"},"403":{"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** Log time","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."}}}}}},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"Returned if:\n\n* a constraint for a property was violated (`PropertyConstraintViolation`)","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"response":{"value":{"_embedded":{"details":{"attribute":"workPackage"}},"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:PropertyConstraintViolation","message":"Work package is invalid."}}}}}}}}},"/api/v3/time_entries/{id}/form":{"post":{"parameters":[{"description":"Time entries activity 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 to edit the time entry.\n\n**Required permission:** *edit time entries* for every time entry of a project, or *edit own time entries* for time entries belonging to the user.","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 time entry does not exist or if the client does not have sufficient permissions to view it.\n\n**Required permission** `view time entries` in the project the time entry is assigned to or `view own time entries` for time entries belonging to the user","headers":{}},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"}},"tags":["Time Entries"],"description":"","operationId":"Time_entry_update_form","requestBody":{"content":{"application/json":{"schema":{"type":"integer"}}},"description":"Time entries activity id","required":true},"summary":"Time entry update form"}},"/api/v3/time_entries/activity/{id}":{"get":{"summary":"View time entries activity","operationId":"get_time_entries_activity","tags":["Time entry activities"],"description":"Fetches the time entry activity resource by the given id.","parameters":[{"name":"id","description":"Time entries activity id","in":"path","example":1,"required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/TimeEntryActivityModel"}}}},"404":{"description":"Returned if the activity does not exist or if the user does not have permission to view them.\n\n**Required permission** `view time entries`, `log time`, `edit time entries`, `edit own time entries` or\n`manage project activities` in any project","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/time_entries/available_projects":{"get":{"responses":{"200":{"content":{"application/hal+json":{"examples":{"response":{"value":{"_embedded":{"elements":[{"_type":"Project..."},{"_type":"Project..."}]},"_links":{"self":{"href":"/api/v3/time_entries/available_projects"}},"_type":"Collection","count":2,"total":2}}},"schema":{"$ref":"#/components/schemas/Available_projects_for_time_entriesModel"}}},"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.\n\n**Required permission:** *log time*, *edit time entries* or *edit own time entries* in any project","headers":{}}},"tags":["Time Entries"],"description":"Gets a list of projects in which a time entry can be created in or be assigned to on update. The list contains all projects in which the user issuing the request has the necessary permissions.","operationId":"Available_projects_for_time_entries","summary":"Available projects for time entries"}},"/api/v3/time_entries/form":{"post":{"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.\n\n**Required permission:** *log time* in any project","headers":{}},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"}},"tags":["Time Entries"],"description":"","operationId":"Time_entry_create_form","summary":"Time entry create form"}},"/api/v3/time_entries/schema":{"get":{"responses":{"200":{"content":{"application/hal+json":{"examples":{"response":{"value":{"_dependencies":[],"_links":{"self":{"href":"/api/v3/time_entries/schema"}},"_type":"Schema","activity":{"_links":{},"hasDefault":true,"location":"_links","name":"Activity","required":true,"type":"TimeEntriesActivity","writable":true},"createdAt":{"hasDefault":false,"name":"Created on","options":{},"required":true,"type":"DateTime","writable":false},"customField29":{"hasDefault":false,"name":"sfsdfsdfsdfsdfdsf","options":{"rtl":null},"required":false,"type":"String","writable":true},"hours":{"hasDefault":false,"name":"Hours","options":{},"required":true,"type":"Duration","writable":true},"id":{"hasDefault":false,"name":"ID","options":{},"required":true,"type":"Integer","writable":false},"project":{"_links":{},"hasDefault":false,"location":"_links","name":"Project","required":false,"type":"Project","writable":true},"ongoing":{"hasDefault":false,"name":"Ongoing","options":{},"required":false,"type":"Boolean","writable":true},"spentOn":{"hasDefault":false,"name":"Date","options":{},"required":true,"type":"Date","writable":true},"updatedAt":{"hasDefault":false,"name":"Updated on","options":{},"required":true,"type":"DateTime","writable":false},"user":{"hasDefault":false,"name":"User","options":{},"required":true,"type":"User","writable":false},"workPackage":{"_links":{},"hasDefault":false,"location":"_links","name":"Work package","required":false,"type":"WorkPackage","writable":true}}}},"schema":{"$ref":"#/components/schemas/View_time_entry_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:MissingPermission","message":"You are not authorized to access this resource."}}}}},"description":"Returned if the client does not have sufficient permissions to see the schema.\n\n**Required permission:** *log time* or *view time entries* or *edit time entries* or *edit own time entries* on any project","headers":{}}},"tags":["Time Entries"],"description":"","operationId":"View_time_entry_schema","summary":"View time entry schema"}},"/api/v3/time_entries/{id}":{"delete":{"summary":"Delete time entry","tags":["Time entries"],"description":"Permanently deletes the specified time entry.","operationId":"delete_time_entry","parameters":[{"name":"id","description":"Time entry id","example":1,"in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Returned if the time entry was deleted successfully."},"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:MissingPermission","message":"You are not authorized to access this resource."}}}},"404":{"description":"Returned if the time entry does not exist or if the user does not have sufficient permissions to see the time entry.\n\n**Required permission** `view time entries` in the project the time entry is assigned to or `view own time entries` for time entries belonging to the user","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"}}},"get":{"summary":"Get time entry","tags":["Time entries"],"description":"Retrieves a single time entry identified by the given id.","operationId":"get_time_entry","parameters":[{"name":"id","description":"time entry id","example":1,"in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/TimeEntryModel"}}}},"404":{"description":"Returned if the time entry does not exist or if the user does not have permission to view them.\n\n**Required permission**\n- `view time entries` in the project the time entry is assigned to or\n- `view own time entries` for time entries belonging to the user","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 time entry","tags":["Time Entries"],"description":"Updates the given time entry by applying the attributes provided in\nthe body. Please note that while there is a fixed set of attributes, custom fields\ncan extend a time entries' attributes and are accepted by the endpoint.","operationId":"update_time_entry","parameters":[{"name":"id","description":"Time entry id","example":1,"in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/TimeEntryModel"}}}},"400":{"$ref":"#/components/responses/InvalidRequestBody"},"403":{"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** Edit (own) time entries, depending on what time entry is being modified.","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."}}},"headers":{}},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"Returned if:\n\n* a constraint for a property was violated (`PropertyConstraintViolation`)","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"_embedded":{"details":{"attribute":"workPackage"}},"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:PropertyConstraintViolation","message":"Work package is invalid."}}}}}}},"/api/v3/types":{"get":{"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/types"}},"_type":"Collection","count":2,"total":2}}},"schema":{"$ref":"#/components/schemas/TypesModel"}}},"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 types."}}}}},"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** view work package or manage types (on any project)","headers":{}}},"tags":["Types"],"description":"","operationId":"List_all_Types","summary":"List all Types"}},"/api/v3/types/{id}":{"get":{"parameters":[{"description":"Type 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/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"}}},"schema":{"$ref":"#/components/schemas/TypeModel"}}},"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 type."}}}}},"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** view work package or manage types (on any project)","headers":{}}},"tags":["Types"],"description":"","operationId":"View_Type","summary":"View Type"}},"/api/v3/users":{"get":{"summary":"List Users","operationId":"list_Users","description":"Lists users. Only administrators or users with the following global permission can access this resource:\n- `manage_user`","tags":["Users","Principals"],"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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/)\nendpoint. Currently supported filters are:\n\n+ status: Status the user has\n\n+ group: Name of the group in which to-be-listed users are members.\n\n+ name: Filter users in whose first or last names, or email addresses the given string occurs.\n\n+ login: User's login","example":"[{ \"status\": { \"operator\": \"=\", \"values\": [\"invited\"] } }, { \"group\": { \"operator\": \"=\", \"values\": [\"1\"] } }, { \"name\": { \"operator\": \"=\", \"values\": [\"h.wurst@openproject.com\"] } }]","in":"query","name":"filters","required":false,"schema":{"type":"string"}},{"description":"JSON specifying sort criteria.\nAccepts 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":{"type":"string"}},{"description":"Comma separated list of properties to include.","example":"total,elements/name,elements/self,self","in":"query","name":"select","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/UserCollectionModel"}}},"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 list users."}}},"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** Administrator or any of: 'manage_members', 'manage_user', 'share_work_packages'."}}},"post":{"summary":"Create User","operationId":"create_user","tags":["Users","Principals"],"description":"Creates a new user. Only administrators and users with manage_user global permission are allowed to do so.\nWhen calling this endpoint the client provides a single object, containing at least the properties and links that are required, in the body.\n\nValid values for `status`:\n\n1) \"active\" - In this case a password has to be provided in addition to the other attributes.\n\n2) \"invited\" - In this case nothing but the email address is required. The rest is optional. An invitation will be sent to the user.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreateModel"}}}},"responses":{"201":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/UserModel"}}},"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 users."}}},"description":"Returned if the client does not have sufficient permissions.\n\n**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":"email"}},"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:PropertyConstraintViolation","message":"The email address is already taken."}}},"description":"Returned if:\n\n* a constraint for a property was violated (`PropertyConstraintViolation`)"}}}},"/api/v3/users/schema":{"get":{"responses":{"200":{"content":{"application/hal+json":{"examples":{"response":{"value":{"_dependencies":[],"_links":{"self":{"href":"/api/v3/users/schema"}},"_type":"Schema","admin":{"hasDefault":false,"name":"Administrator","options":{},"required":false,"type":"Boolean","writable":true},"avatar":{"hasDefault":false,"name":"Avatar","options":{},"required":false,"type":"String","writable":false},"createdAt":{"hasDefault":false,"name":"Created on","options":{},"required":true,"type":"DateTime","writable":false},"customField1":{"hasDefault":false,"name":"User String CF","required":false,"type":"String","writable":true},"customField2":{"hasDefault":false,"location":"_links","name":"User List cf","required":false,"type":"CustomOption","writable":true},"firstName":{"hasDefault":false,"maxLength":255,"minLength":1,"name":"First name","options":{},"required":true,"type":"String","writable":false},"id":{"hasDefault":false,"name":"ID","options":{},"required":true,"type":"Integer","writable":false},"identityUrl":{"hasDefault":false,"name":"Identity url","options":{},"required":false,"type":"String","writable":true},"language":{"hasDefault":false,"name":"Language","options":{},"required":false,"type":"String","writable":true},"lastName":{"hasDefault":false,"maxLength":255,"minLength":1,"name":"Last name","options":{},"required":true,"type":"String","writable":false},"login":{"hasDefault":false,"maxLength":255,"minLength":1,"name":"Username","options":{},"required":true,"type":"String","writable":true},"mail":{"hasDefault":false,"maxLength":255,"minLength":1,"name":"Email","options":{},"required":true,"type":"String","writable":true},"password":{"hasDefault":false,"name":"Password","options":{},"required":false,"type":"Password","writable":false},"status":{"hasDefault":false,"name":"Status","options":{},"required":false,"type":"String","writable":true},"updatedAt":{"hasDefault":false,"name":"Updated on","options":{},"required":true,"type":"DateTime","writable":false}}}},"schema":{"$ref":"#/components/schemas/View_user_schemaModel"}}},"description":"OK","headers":{}}},"tags":["Users"],"description":"The schema response use two exemplary custom fields that extend the schema response. Depending on your instance and custom field configuration, the response will look somewhat different.","operationId":"View_user_schema","summary":"View user schema"}},"/api/v3/users/{id}":{"delete":{"summary":"Delete user","operationId":"delete_user","description":"Permanently deletes the specified user account.","tags":["Users","Principals"],"parameters":[{"description":"User id","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"202":{"description":"Returned if the account was deleted successfully.\n\nNote that the response body is empty as of now. In future versions of the API a body\n*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 or if deletion of users was disabled in the instance wide settings.\n\n**Required permission:** Administrators only (exception: users might be able to delete their own accounts)"},"404":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:NotFound","message":"The specified user does not exist."}}},"description":"Returned if the user does not exist."}}},"get":{"summary":"View user","operationId":"view_user","description":"","tags":["Users","Principals"],"parameters":[{"description":"User id. Use `me` to reference current user, if any.","example":"1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/UserModel"},"examples":{"user response":{"$ref":"#/components/examples/UserResponse"}}}},"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 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.\n\n**Required permission** The user needs to be locked in if the installation is configured to prevent anonymous access"}}},"patch":{"summary":"Update user","operationId":"update_user","tags":["Users","Principals"],"description":"Updates the user's writable attributes.\nWhen calling this endpoint the client provides a single object, containing at least the properties and links that are required, in the body.","parameters":[{"description":"User id","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreateModel"}}}},"responses":{"200":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/UserModel"}}},"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.\n\n**Required permission:** Administrators, manage_user global 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 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 the necessary permissions to update it.\n\n**Required permission:** Administrators only (exception: users may update their own accounts)"},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"_embedded":{"details":{"attribute":"email"}},"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:PropertyConstraintViolation","message":"The email address is already taken."}}},"description":"Returned if:\n\n* the client tries to modify a read-only property (`PropertyIsReadOnly`)\n\n* a constraint for a property was violated (`PropertyConstraintViolation`)"}}}},"/api/v3/users/{id}/form":{"post":{"parameters":[{"description":"User 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.\n\n**Required permission:** manage_user global permission","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 request user can not be found.\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na membership. 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"}},"tags":["Users"],"description":"","operationId":"User_update_form","summary":"User update form"}},"/api/v3/users/{id}/lock":{"delete":{"summary":"Unlock user","operationId":"unlock_user","tags":["Users"],"parameters":[{"description":"User id","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/UserModel"}}},"description":"OK"},"400":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:InvalidUserStatusTransition","message":"The current user account status does not allow this operation."}}},"description":"Returned if the client tries to unlock a user account whose current status does not allow this transition.\n\n**Required permission:** Administrators only"},"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 unlock the account of this user."}}},"description":"Returned if the client does not have sufficient permissions for unlocking a user.\n\n**Required permission:** Administrators only"},"404":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:NotFound","message":"The specified user does not exist."}}},"description":"Returned if the user does not exist."},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"}}},"post":{"summary":"Lock user","operationId":"lock_user","tags":["Users"],"parameters":[{"description":"User id","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/UserModel"}}},"description":"OK"},"400":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:InvalidUserStatusTransition","message":"The current user account status does not allow this operation."}}},"description":"Returned if the client tries to lock a user account whose current status does not allow this transition.\n\n**Required permission:** Administrators only"},"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 lock the account of this user."}}},"description":"Returned if the client does not have sufficient permissions for locking a user.\n\n**Required permission:** Administrators only"},"404":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:NotFound","message":"The specified user does not exist."}}},"description":"Returned if the user does not exist."},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"}}}},"/api/v3/values/schema/{id}":{"get":{"parameters":[{"name":"id","in":"path","description":"The identifier of the value. This is typically the value of the `property` property of\nthe `Values` resource. It should be in lower camelcase format.","example":"startDate","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/SchemaModel"},"examples":{"Values::Property Start date schema":{"$ref":"#/components/examples/ValuesPropertyStartDateSchema"},"Values::Property Due date schema":{"$ref":"#/components/examples/ValuesPropertyDueDateSchema"},"Values::Property Date schema for Milestone work package":{"$ref":"#/components/examples/ValuesPropertyDateSchema"}}}},"description":"OK","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 schema does not exist."},"400":{"content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"_type":"Error","errorIdentifier":"urn:openproject-org:api:v3:errors:BadRequest","message":"Bad request: property is invalid"}}},"description":"Returned if the requested property id is not in a lower camel case format."}},"tags":["Values::Property"],"description":"The schema of a `Values` resource.","operationId":"View_values_schema","summary":"View Values schema"}},"/api/v3/versions":{"get":{"summary":"List versions","operationId":"list_versions","tags":["Versions"],"description":"Returns a collection of versions. The client can choose to filter the versions similar to how work packages are\nfiltered. In addition to the provided filters, the server will reduce the result set to only contain versions,\nfor which the requesting client has sufficient permissions (*view_work_packages*).","parameters":[{"name":"filters","description":"JSON specifying filter conditions. Accepts the same format as returned by\nthe [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported\nfilters are:\n\n- sharing: filters versions by how they are shared within the server (*none*, *descendants*, *hierarchy*, *tree*, *system*).\n- name: filters versions by their name.","example":"[{ \"sharing\": { \"operator\": \"=\", \"values\": [\"system\"] } }]","in":"query","required":false,"schema":{"type":"string"}},{"name":"sortBy","description":"JSON specifying sort criteria. Accepts the same format as returned by\nthe [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported\nattributes are:\n\n- id: Sort by the version id\n- name: Sort by the version name using numeric collation, comparing sequences of decimal digits by their numeric value","example":"[[\"name\", \"desc\"]]","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/VersionCollectionModel"}}}}}},"post":{"summary":"Create version","operationId":"create_version","tags":["Versions"],"description":"Creates a new version applying the attributes provided in the body. Please note that while there is a fixed set\nof attributes, custom fields can extend a version's attributes and are accepted by the endpoint.\n\nYou can use the form and schema to be retrieve the valid attribute values and by that be guided towards\nsuccessful creation.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionWriteModel"},"examples":{"create version":{"$ref":"#/components/examples/VersionCreateRequest"}}}}},"responses":{"201":{"description":"Created","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/VersionReadModel"},"examples":{"response":{"$ref":"#/components/examples/VersionSimpleResponse"}}}}},"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.\n\n**Required permission:** Manage versions"},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"Returned if:\n\n* a constraint for a property was violated (`PropertyConstraintViolation`)"}}}},"/api/v3/versions/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"},"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":null,"updatedAt":"2016-02-29T12:50:20+00:00"}]},"_links":{"self":{"href":"/api/v3/versions/available_projects"}},"_type":"Collection","count":2,"total":2}}},"schema":{"$ref":"#/components/schemas/Available_projects_for_versionsModel"}}},"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.\n\n**Required permission:** manage versions","headers":{}}},"tags":["Versions"],"description":"Gets a list of projects in which a version can be created in. The list contains all projects in which the user issuing the request has the manage versions permissions.","operationId":"Available_projects_for_versions","summary":"Available projects for versions"}},"/api/v3/versions/form":{"post":{"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.\n\n**Required permission:** manage versions in any project","headers":{}},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"}},"tags":["Versions"],"description":"","operationId":"Version_create_form","summary":"Version create form"}},"/api/v3/versions/schema":{"get":{"responses":{"200":{"content":{"application/hal+json":{"examples":{"response":{"value":{"_dependencies":[],"_links":{"self":{"href":"/api/v3/versions/schema"}},"_type":"Schema","createdAt":{"hasDefault":false,"name":"Created on","required":true,"type":"DateTime","writable":false},"customField14":{"hasDefault":false,"name":"text CF","required":false,"type":"String","visibility":"default","writable":true},"customField40":{"_links":{},"hasDefault":false,"location":"_links","name":"List CF","required":false,"type":"CustomOption","visibility":"default","writable":true},"definingProject":{"_links":{},"hasDefault":false,"name":"Project","required":true,"type":"Project","writable":true},"description":{"hasDefault":false,"name":"Description","required":false,"type":"Formattable","writable":true},"endDate":{"hasDefault":false,"name":"Finish date","required":false,"type":"Date","writable":false},"id":{"hasDefault":false,"name":"ID","required":true,"type":"Integer","writable":false},"name":{"hasDefault":false,"maxLength":60,"minLength":1,"name":"Name","required":true,"type":"String","writable":true},"sharing":{"_links":{},"hasDefault":false,"name":"Sharing","required":true,"type":"String","visibility":"default","writable":true},"startDate":{"hasDefault":false,"name":"Start date","required":false,"type":"Date","writable":true},"status":{"_links":{},"hasDefault":false,"name":"Status","required":true,"type":"String","visibility":"default","writable":true},"updatedAt":{"hasDefault":false,"name":"Updated on","required":true,"type":"DateTime","writable":false}}}},"schema":{"$ref":"#/components/schemas/Version_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:MissingPermission","message":"You are not authorized to access this resource."}}}}},"description":"Returned if the client does not have sufficient permissions to see the schema.\n\n**Required permission:** view work packages or manage versions on any project","headers":{}}},"tags":["Versions"],"description":"","operationId":"View_version_schema","summary":"View version schema"}},"/api/v3/versions/{id}":{"get":{"summary":"Get version","operationId":"get_version","tags":["Versions"],"description":"Retrieves a version defined by its unique identifier.","parameters":[{"description":"Version id","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/VersionReadModel"},"examples":{"response":{"$ref":"#/components/examples/VersionSimpleResponse"}}}}},"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 version does not exist or the client does not have sufficient permissions\nto see it.\n\n**Required permission:** view work packages **or** manage versions (any project where the version is available)\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na version. That's why a 404 is returned here, even if a 403 might be more appropriate.*"}}},"delete":{"summary":"Delete version","operationId":"delete_Version","tags":["Versions"],"description":"Deletes the version. Entities associated to the version will no longer be assigned to it.","parameters":[{"description":"Version id","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Returned if the version was successfully deleted"},"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.\n\n**Required permission:** manage versions"},"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 version does not exist or the client does not have sufficient permissions\nto see it.\n\n**Required permission:** view work packages **or** manage versions (any project where the version is available)\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na 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"}}},"patch":{"summary":"Update Version","operationId":"update_Version","tags":["Versions"],"description":"Updates the given version by applying the attributes provided in the body. Please note that while there is a fixed\nset of attributes, custom fields can extend a version's attributes and are accepted by the endpoint.","parameters":[{"description":"Version id","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionWriteModel"},"examples":{"update name":{"$ref":"#/components/examples/VersionUpdateNameRequest"}}}}},"responses":{"200":{"description":"OK","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/VersionReadModel"},"examples":{"response":{"$ref":"#/components/examples/VersionSimpleResponse"}}}}},"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.\n\n**Required permission:** Manage versions in the version's project."},"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 version does not exist or the client does not have sufficient permissions\nto see it.\n\n**Required permission:** view work packages **or** manage versions (any project where the version is available)\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na 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":{"description":"Returned if:\n\n* a constraint for a property was violated (`PropertyConstraintViolation`)"}}}},"/api/v3/versions/{id}/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.\n\n**Required permission:** manage versions in the version's project","headers":{}},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"}},"tags":["Versions"],"description":"","operationId":"Version_update_form","summary":"Version update form"}},"/api/v3/versions/{id}/projects":{"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":"<p>Lorem <strong>ipsum</strong> dolor sit amet</p>","raw":"Lorem **ipsum** dolor sit amet"},"id":1,"identifier":"project_identifier","name":"Project example","statusExplanation":{"format":"markdown","html":"<p>Everything <strong>fine</strong></p>","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\nto see it.\n\n**Required permission:** view work packages **or** manage versions (any project where the given version is available)\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a version.\nThat'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.\n\nThe projects returned depend on the sharing settings of the given version,\nbut are also limited to the projects that the current user is allowed to see.\n\nThis 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":"<p>Lorem <strong>ipsum</strong> dolor sit amet</p>","raw":"Lorem **ipsum** dolor sit amet"},"id":1,"identifier":"project_identifier","name":"Project example","statusExplanation":{"format":"markdown","html":"<p>Everything <strong>fine</strong></p>","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\nto see it.\n\n**Required permission:** view work packages **or** manage versions (any workspace where the given version is available)\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a version.\nThat'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.\n\nThe workspaces returned depend on the sharing settings of the given version,\nbut 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.\nCurrently supported filters are:\n\n+ 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.\n\n+ id: filters views based on their id\n\n+ 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.\n\n**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.\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of\na 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:\n\n* the client tries to modify a read-only property (`PropertyIsReadOnly`)\n\n* a constraint for a property was violated (`PropertyConstraintViolation`)\n\n* the client provides a link to an invalid resource (`ResourceTypeMismatch`),\n  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.\nThe required fields of a View can be found in its schema, which is embedded in the respective form.\nNote that it is only allowed to provide properties or links supporting the write operation.\n\nThere are different subtypes of `Views` (e.g. `Views::WorkPackagesTable`) with each having its own\nendpoint for creating that subtype e.g.\n\n* `/api/v3/views/work_packages_table` for `Views::WorkPackagesTable`\n* `/api/v3/views/team_planner` for `Views::TeamPlanner`\n* `/api/v3/views/work_packages_calendar` for `Views::WorkPackagesCalendar`\n\n**Not yet implemented** To get the list of available subtypes and by that the endpoints for creating a subtype, use the\n```\n  /api/v3/views/schemas\n```\nendpoint.","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.\n\n**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\nto see it.\n\n**Required permission:** view wiki pages\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a work package.\nThat'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":null,"firstName":"OpenProject","id":1,"identityUrl":null,"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:\n\n* Omitting one of the required parts (metadata and file)\n\n* 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.\n\n**Required permission:** edit wiki pages\n\n*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\nto see it.\n\n**Required permission:** view wiki pages\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a wiki page\nThat'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.\nReasons are:\n\n* Omitting the file name (`fileName` property of metadata part)\n\n* 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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/)\nendpoint. If no filter is to be applied, the client should send an empty array (`[]`), otherwise a default\nfilter is applied. A Currently supported filters are (there are additional filters added by modules):\n\n- assigned_to\n- assignee_or_group\n- attachment_base\n- attachment_content\n- attachment_file_name\n- author\n- blocked\n- blocks\n- category\n- comment\n- created_at\n- custom_field\n- dates_interval\n- description\n- done_ratio\n- due_date\n- duplicated\n- duplicates\n- duration\n- estimated_hours\n- file_link_origin_id\n- follows\n- group\n- id\n- includes\n- linkable_to_storage_id\n- linkable_to_storage_url\n- manual_sort\n- milestone\n- only_subproject\n- parent\n- partof\n- precedes\n- principal_base\n- priority\n- project\n- relatable\n- relates\n- required\n- requires\n- responsible\n- role\n- search\n- start_date\n- status\n- storage_id\n- storage_url\n- subject\n- subject_or_id\n- subproject\n- type\n- typeahead\n- updated_at\n- version\n- watcher\n- 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.\nAccepts 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\nin ISO-8601 format as comma-separated list. The timestamps may be absolute or relative,\nsuch as ISO8601 dates, ISO8601 durations and the following relative date keywords: \"oneDayAgo@HH:MM+HH:MM\",\n\"lastWorkingDay@HH:MM+HH:MM\", \"oneWeekAgo@HH:MM+HH:MM\", \"oneMonthAgo@HH:MM+HH:MM\".\nThe first \"HH:MM\" part represents the zero paded hours and minutes.\nThe last \"+HH:MM\" part represents the timezone offset from UTC associated with the time,\nthe offset can be positive or negative e.g.\"oneDayAgo@01:00+01:00\", \"oneDayAgo@01:00-01:00\".\n\nUsually, the first timestamp is the baseline date, the last timestamp is the current date.\nValues 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.\n\n**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.\nThe required fields of a WorkPackage can be found in its schema, which is embedded in the respective form.\nNote that it is only allowed to provide properties or links supporting the write operation.\n\nA project link must be set when creating work packages through this route.\n\nWhen 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.\nNote that this controls notifications for all users interested in changes to the work package (e.g. watchers, author and assignee),\nnot 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.\n\n**Required permission:** add work packages\n\n*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\nto see it.\n\n**Required permissions:** view project\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a project.\nThat'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:\n\n* the client tries to write a read-only property\n\n* a constraint for a property was violated\n\n* 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\ncreated, 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 create a work package.\n\nOnly the properties of the work package write model are allowed to set on a work package on creation.\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\" }`.","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,\nif no filter is given.","parameters":[{"name":"filters","description":"JSON specifying filter conditions.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/)\nendpoint. Currently supported filters are:\n\n+ id: The schema's id\n\nSchema 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.\n\n**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\nto see it.\n\n**Required permission:** view work packages (on the project where this schema is used)\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a project.\nThat'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:\n\n- all associated time entries\n- 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.\n\nNote that the response body is empty as of now. In future versions of the API a body\n*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.\n\n**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.\n\n**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\nprovide one or several timestamps in ISO-8601 format as comma-separated list. The timestamps may be absolute or relative,\nsuch as ISO8601 dates, ISO8601 durations and the following relative date keywords: \"oneDayAgo@HH:MM+HH:MM\",\n\"lastWorkingDay@HH:MM+HH:MM\", \"oneWeekAgo@HH:MM+HH:MM\", \"oneMonthAgo@HH:MM+HH:MM\".\nThe first \"HH:MM\" part represents the zero paded hours and minutes.\nThe last \"+HH:MM\" part represents the timezone offset from UTC associated with the time,\nthe offset can be positive or negative e.g.\"oneDayAgo@01:00+01:00\", \"oneDayAgo@01:00-01:00\".\n\nUsually, the first timestamp is the baseline date, the last timestamp is the current date.\nValues 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.\n\n**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\ninterested 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.\n\n**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.\n\n**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:\n\n- the client tries to modify a read-only property (`PropertyIsReadOnly`)\n- a constraint for a property was violated (`PropertyConstraintViolation`)\n- 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":"<p>Lorem ipsum dolor sit amet.</p>","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":"<p>Lorem ipsum dolor sit amet.</p>","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.\n\n**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.\nNote that this controls notifications for all users interested in changes to the work package (e.g. watchers, author and assignee),\nnot 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.\n\n**Required permission:** create journals\n\n*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.\n\n**Required permission:** view work package","headers":{}}},"tags":["Work Packages"],"description":"Creates an activity for the selected work package and, on success, returns the\nupdated 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\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 a work package.\nThat'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\nto see it.\n\n**Required permission:** view work package\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a work package.\nThat'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:\n\n* Omitting one of the required parts (metadata and file)\n\n* 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.\n\n**Required permission:** edit work package or add work package\n\n*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\nto see it.\n\n**Required permission:** view work package\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a work package.\nThat'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.\nReasons are:\n\n* Omitting the file name (`fileName` property of metadata part)\n\n* 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`\nwith exactly two parts.\n\nThe first part *must* be called `metadata`. Its content type is expected to be `application/json`,\nthe body *must* be a single JSON object, containing at least the `fileName` and optionally the attachments `description`.\n\nThe second part *must* be called `file`, its content type *should* match the mime type of the file.\nThe body *must* be the raw content of the file.\nNote that a `filename` must be indicated in the `Content-Disposition` of this part, however it will be ignored.\nInstead 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.\n\n**Required permission:** edit work packages\n\n*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.\n\n**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":null,"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.\n\n**Required permission:** edit work package\n\n*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.\n\n**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.\nAccepts 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.\nAccepts 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.\n\n**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.\n\n**Required permission:** add work package watchers\n\n*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.\n\n**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.\n\nThe request is interpreted as a bulk insert, where every element of the collection is validated separately. Each\nelement contains the origin meta data and a link to the storage, the file link is about to point to. The storage\nlink can be provided as a resource link with id or as the host url.\n\nThe file's id and name are considered mandatory information. The rest of the origin meta data SHOULD be provided\nby the client. The _mimeType_ SHOULD be a standard mime type. An empty mime type will be handled as unknown. To link\na folder, the custom mime type `application/x-op-directory` MUST be used.\n\nUp to 20 file links can be submitted at once.\n\nIf any element data is invalid, no file links will be created.\n\nIf a file link with matching origin id, work package, and storage already exists, then it will not create an\nadditional 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.\n\n**Required permission:** manage file links\n\n*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.\n\n**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\nprocess. 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.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/)\nendpoint. The following filters are supported:\n\n- 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.\n\n**Required permission:** view file links\n\n*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.\n\n**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":"<p>This revision provides new features<br/><br/>An elaborate description</p>","raw":"This revision provides new features\n\nAn elaborate description"}},{"_links":{"author":{"href":"/api/v3/users/2","title":"Jim Sheppard - j.sheppard"},"project":{"href":"/api/v3/projects/1","title":"A Test Project"},"self":{"href":"/api/v3/revisions/14"},"showRevision":{"href":"/projects/identifier/repository/revision/029ed72a"}},"_type":"Revision","authorName":"j1msheppard","createdAt":"2015-06-30T08:47:00.818Z","formattedIdentifier":"029ed72a","id":13,"identifier":"029ed72a3b7b7c4ab332b1f6eaa6576e7c946059","message":{"format":"plain","html":"<p>This revision fixes some stuff<br/><br/>More information here</p>","raw":"This revision fixes some stuff\n\nMore information here"}}]},"_links":{"self":{"href":"/api/v3/work_packages/42/revisions"}},"_type":"Collection","count":2,"total":2}}},"schema":{"$ref":"#/components/schemas/RevisionsModel"}}},"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 linked revisions for this work package."}}}}},"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** view work packages for the project the work package is contained in.\n\n*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 project does not exist."}}}}},"description":"Returned if the work package does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view work package","headers":{}}},"tags":["Work Packages"],"description":"Gets a list of revisions that are linked to this work package, e.g., because it is referenced in the commit message of the revision.\nOnly linked revisions from repositories are shown if the user has the view changesets permission in the defining project.","operationId":"Revisions","summary":"Revisions"}},"/api/v3/work_packages/{id}/relations":{"post":{"summary":"Create relation","operationId":"create_relation","tags":["Relations"],"description":"Create a work package relation on the given work package. A successful creation will result in a relation between\ntwo work packages, thus appearing on both involved work package resources.","parameters":[{"name":"id","description":"Work package id","example":"1","in":"path","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationWriteModel"},"examples":{"request":{"$ref":"#/components/examples/RelationCreateRequest"}}}}},"responses":{"201":{"description":"Created","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/RelationReadModel"},"examples":{"Simple response":{"$ref":"#/components/examples/RelationResponse"}}}}},"400":{"$ref":"#/components/responses/InvalidRequestBody"},"403":{"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** manage work package relations","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 relation."}}}}}},"409":{"description":"Returned if there already exists a relation between the given work packages of **any** type\nor if the relation is not allowed.","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."}}}}}},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"Returned if:\n\n- the client tries to write a read-only property (`PropertyIsReadOnly`)\n- a constraint for a property was violated (`PropertyConstraintViolation`)\n- the client provides a link to an invalid resource (`ResourceTypeMismatch`)","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"}}}}}}}}},"/api/v3/work_packages/{work_package_id}/reminders":{"get":{"summary":"List work package reminders","operationId":"list_work_package_reminders","tags":["Work Packages","Reminders"],"description":"Gets a list of your upcoming reminders for this work package.\n\nOnly active reminders that belong to the current user are returned.","parameters":[{"name":"work_package_id","in":"path","description":"Work package id","example":"1","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/hal+json":{"schema":{"type":"object","required":["_type","total","count","_embedded"],"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},"_embedded":{"type":"object","required":["elements"],"properties":{"elements":{"type":"array","items":{"$ref":"#/components/schemas/ReminderModel"}}}}}}}}},"403":{"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** view work packages for the project the work package is contained in.","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Returned if the work package does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view work package","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"summary":"Create a work package reminder","operationId":"create_work_package_reminder","tags":["Work Packages","Reminders"],"description":"Creates a new reminder for the specified work package.\n\n**Note:** A user can only have one **active** reminder at a time for a given work package.","parameters":[{"name":"work_package_id","in":"path","description":"Work package id","example":"1","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["remindAt"],"properties":{"remindAt":{"type":"string","format":"date-time","description":"The date and time when the reminder is due"},"note":{"type":"string","description":"The note of the reminder"}}}}}},"responses":{"201":{"description":"Reminder created successfully","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ReminderModel"}}}},"404":{"description":"Returned if the work package does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view work package","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Returned if the user already has an active reminder for this work package.\n\n**Error message**: You can only set one reminder at a time for a work package. Please delete or update the existing reminder.","content":{"application/hal+json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v3/work_packages/{id}/watchers":{"get":{"parameters":[{"description":"Work package id","example":1,"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/hal+json":{"example":{"_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"},"showUser":{"href":"/users/1","type":"text/html"}},"_type":"User","avatar":"https://example.org/users/1/avatar","createdAt":"2014-05-21T08:51:20.396Z","firstName":"John","id":1,"lastName":"Sheppard","login":"j.sheppard","mail":"shep@mail.com","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","firstName":"Jim","id":2,"lastName":"Sheppard","login":"j.sheppard2","mail":"shep@mail.net","status":"active","updatedAt":"2014-05-21T08:51:20.396Z"}]},"_links":{"self":{"href":"/api/v3/work_packages/14/watchers"}},"_type":"Collection","count":2,"total":2},"schema":{"$ref":"#/components/schemas/WatchersModel"}}},"description":"OK","headers":{}},"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 watchers of this work package."}}},"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** view work package watchers\n\n*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"},"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.\n\n**Required permission:** view work package\n\n*Note that you will effectively not be able to see the watchers of a work package without being able to see the work package.*","headers":{}}},"tags":["Work Packages"],"description":"","operationId":"List_watchers","summary":"List watchers"},"post":{"parameters":[{"description":"Work package id","example":1,"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","headers":{}},"201":{"description":"Created","headers":{}},"400":{"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."}}},"description":"Occurs when the client did not send a valid JSON object in the request body.\n\nFor example:\n\n* The request did not contain a single JSON object\n\n* The JSON object did not contain the key `user`\n\n* The value of `users` was not a link object","headers":{}},"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 watchers to this work package."}}},"description":"Returned if the client does not have sufficient permissions.\n\n**Required permissions:**\n\n* view work package (for self)\n\n* add work package watchers (for other users)\n\n*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"},"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.\n\n**Required permission:** view work package\n\n*Note that you will effectively not be able to change the watchers of a work package without being able to see the work package.*","headers":{}},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"Returned if:\n\n* the client tries to specify a link to a resource that is not a user (`ResourceTypeMismatch`)\n\n* the user specified is not allowed to watch that work package (`PropertyConstraintViolation`)\n\n* the user specified does not exist (`PropertyConstraintViolation`)","headers":{}}},"tags":["Work Packages"],"description":"Adds a watcher to the specified work package.\n\nThe request is expected to contain a single JSON object, that contains a link object under the `user` key.\n\nThe response will be user added as watcher.\nIn case the user was already watching the work package an `HTTP 200` is returned, an\n`HTTP 201` if the user was added as a new watcher.","operationId":"Add_watcher","requestBody":{"content":{"application/json":{"schema":{"example":{"user":{"href":"/api/v3/users/1"}},"properties":{"user":{"properties":{"href":{"type":"string"}},"type":"object"}},"type":"object"}}}},"summary":"Add watcher"}},"/api/v3/work_packages/{id}/watchers/{user_id}":{"delete":{"parameters":[{"description":"Work package id","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"description":"User id","example":"1","in":"path","name":"user_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 allowed to remove watchers from this work package."}}}}},"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** delete work package watchers\n\n*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 in one of the following cases:\n\nEither the work package does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view work package\n\nOr the specified user does not exist at all.\n\n*Note that you will effectively not be able to change the watchers of a work package without being able to see the work package.*","headers":{}},"406":{"$ref":"#/components/responses/MissingContentType"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"}},"tags":["Work Packages"],"description":"Removes the specified user from the list of watchers for the given work package.\n\nIf the request succeeds, the specified user is not watching the work package anymore.\n\n*Note: This might also be the case, if the specified user did not watch the work package prior to the request.*","operationId":"Remove_watcher","summary":"Remove watcher"}},"/api/v3/workspaces":{"get":{"summary":"List workspace","operationId":"list_workspace","tags":["Workspace"],"description":"Returns a collection of workspaces. 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 workspaces the client is allowed to see.\nSince workspaces are the generic term for a number of resources like projects and portfolios, the returned collection will contain a mix of those resources.","parameters":[{"name":"filters","schema":{"type":"string"},"in":"query","required":false,"description":"JSON specifying filter conditions.\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint.\nCurrently supported filters are:\n\n+ active: based on the active property of the workspace\n+ ancestor: filters workspace by their ancestor. A workspace is not considered to be its own ancestor.\n+ available_project_attributes: filters workspace based on the activated project attributes.\n+ created_at: based on the time the workspace was created\n+ favorited: based on the favorited property of the workspace\n+ id: based on workspace' id.\n+ latest_activity_at: based on the time the last activity was registered on a workspace.\n+ name_and_identifier: based on both the name and the identifier.\n+ parent_id: filters workspace by their parent.\n+ principal: based on members of the workspace.\n+ project_phase_any: based on the project phases active in a workspace.\n+ project_status_code: based on status code of the workspace\n+ storage_id: filters workspace by linked storages\n+ storage_url: filters workspace by linked storages identified by the host url\n+ type_id: based on the types active in a workspace.\n+ user_action: based on the actions the current user has in the workspace.\n+ visible: based on the visibility for the user (id) provided as the filter value. This filter is useful for admins to identify the workspace visible to a user.\n\nThere might also be additional filters based on the custom fields that have been configured.\n\nEach defined lifecycle step will also define a filter in this list endpoint. Given that the elements are not\nstatic but rather dynamically created on each OpenProject instance, a list cannot be provided. Those filters follow the schema:\n+ project_start_gate_[id]: a filter on a project phase's start gate active in a workspace. The id is the id of the phase the gate belongs to.\n+ project_finish_gate_[id]: a filter on a project phase's finish gate active in a workspace. The id is the id of the phase the gate belongs to.\n+ project_phase_[id]: a filter on a project phase active in a workspace. 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.\nCurrently supported orders are:\n\n+ id\n+ name\n+ typeahead (sorting by hierarchy and name)\n+ created_at\n+ public\n+ latest_activity_at\n+ required_disk_space\n\nThere 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/WorkspaceCollectionModel"}}}},"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/workspaces/{id}/available_assignees":{"get":{"parameters":[{"description":"Workspace 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/workspaces/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 workspace."}}}}},"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** add work packages\n\n*Note that you will only receive this error, if you are at least allowed to see the corresponding workspace.*","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 workspace does not exist."}}}}},"description":"Returned if the workspace does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view workspace","headers":{}}},"tags":["Work Packages"],"description":"Gets a list of users that can be assigned to work packages in the given workspace.","operationId":"Workspace_Available_assignees","summary":"Workspace Available assignees"}},"/api/v3/workspaces/{id}/categories":{"get":{"parameters":[{"description":"ID of the workspace 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 workspace does not exist or the client does not have sufficient permissions\nto see it.\n\n**Required permission:** view workspace\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a workspace.\nThat'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","operationId":"List_categories_of_a_workspace","summary":"List categories of a workspace"}},"/api/v3/workspaces/{id}/favorite":{"delete":{"parameters":[{"description":"Workspace id","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Returned if the workspace 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 workspace does not exist or the client does not have sufficient permissions\nto see it.\n\n**Required permission:** view workspace"},"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.\n\n**Required permission:** logged in"}},"tags":["Workspaces","Favorites"],"description":"Removes the workspace from the current user's favorites.","operationId":"Unfavorite_Workspace","summary":"Unfavorite Workspace"},"post":{"parameters":[{"description":"Workspace id","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Returned if the workspace 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 workspace does not exist or the client does not have sufficient permissions\nto see it.\n\n**Required permission:** view workspace"},"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.\n\n**Required permission:** logged in"}},"tags":["Workspaces","Favorites"],"description":"Adds the workspace to the current user's favorites.","operationId":"Favorite_Workspace","summary":"Favorite Workspace"}},"/api/v3/workspaces/{id}/queries/default":{"get":{"summary":"View default query for workspace","operationId":"View_default_query_for_workspace","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 workspace.","parameters":[{"description":"Id of the workspace the default query is requested for","example":"1","in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"name":"filters","description":"JSON specifying filter conditions.\nThe filters provided as parameters are not applied to the query but are instead used to override the query's persisted filters.\nAll 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.\n","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":null,"title":null},"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.\n\n**Required permission:** view work packages in the workspace","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 workspace.\n\n**Required permission:** any permission in the workspace","headers":{}}}}},"/api/v3/workspace/{id}/queries/filter_instance_schemas":{"get":{"parameters":[{"description":"Workspace 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/workspaces/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.\n\n**Required permission:** view work package in any workspace","headers":{}}},"tags":["Query Filter Instance Schema"],"description":"Returns the list of QueryFilterInstanceSchemas defined for a query of the specified workspace.","operationId":"List_Query_Filter_Instance_Schemas_for_Workspace","summary":"List Query Filter Instance Schemas for Workspace"}},"/api/v3/workspace/{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 workspace","headers":{}}},"tags":["Queries"],"description":"Retrieve the schema for workspace queries.","operationId":"View_schema_for_workspace_queries","summary":"View schema for workspace queries"}},"/api/v3/workspaces/{id}/types":{"get":{"parameters":[{"description":"ID of the workspace 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/workspaces/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 workspace does not exist."}}}}},"description":"Returned if the workspace does not exist or the client does not have sufficient permissions\nto see it.\n\n**Required permission:** view work packages **or** manage types (on given workspace)\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a workspace.\nThat's why a 404 is returned here, even if a 403 might be more appropriate.*","headers":{}}},"tags":["Types","Workspaces"],"description":"This endpoint lists the types that are *available* in a given workspace.","operationId":"List_types_available_in_a_workspace","summary":"List types available in a workspace"}},"/api/v3/workspaces/{id}/work_packages":{"get":{"summary":"Get work packages of workspace","operationId":"Get_Workspace_Work_Package_Collection","tags":["Work Packages"],"description":"Returns the collection of work packages that are related to the given workspace.","parameters":[{"description":"Workspace 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.\nAccepts 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.\nAccepts 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.\n\n**Required permission:** view work packages\n\n*Note that you will only receive this error, if you are at least allowed to see the corresponding workspace.*"},"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 workspace does not exist or the client does not have sufficient permissions to see it.\n\n**Required permission:** view workspace"}}},"post":{"summary":"Create work package in workspace","operationId":"Create_Workspace_Work_Package","tags":["Work Packages"],"description":"When calling this endpoint the client provides a single object, containing at least the properties and links that\nare required, in the body. The required fields of a WorkPackage can be found in its schema, which is embedded in\nthe 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/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.\nNote that this controls notifications for all users interested in changes to the work package (e.g. watchers, author and assignee),\nnot 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 workspace."}}},"description":"Returned if the client does not have sufficient permissions.\n\n**Required permission:** add work packages\n\n*Note that you will only receive this error, if you are at least allowed to see the corresponding workspace.*"},"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 workspace does not exist or the client does not have sufficient permissions\nto see it.\n\n**Required permissions:** view workspace\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a workspace.\nThat'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:\n\n* the client tries to write a read-only property\n\n* a constraint for a property was violated\n\n* a property was provided in an unreadable format"}}}},"/api/v3/workspaces/{id}/work_packages/form":{"post":{"summary":"Form for creating Work Packages in a Workspace","operationId":"form_create_work_package_in_workspace","tags":["Work Packages"],"description":"This endpoint allows you to validation a new work package creation body in a specific workspace. It works similarly\nto the `/api/v3/work_packages/form` endpoint, but already specifies the work package's workspace in the path, so that\nit does not have to be defined in the request body.","parameters":[{"name":"id","description":"ID of the workspace 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/workspaces/{id}/versions":{"get":{"parameters":[{"description":"ID of the workspace 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":null,"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":null,"id":12,"name":"v2.0","startDate":null,"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":null,"id":10,"name":"v1.0","startDate":null,"status":"Open"}]},"_links":{"self":{"href":"/api/v3/workspaces/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 workspace does not exist or the client does not have sufficient permissions\nto see it.\n\n**Required permission:** view work packages **or** manage versions (on given workspace)\n\n*Note: A client without sufficient permissions shall not be able to test for the existence of a workspace.\nThat'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 workspace.\nNote that due to sharing this might be more than the versions *defined* by that workspace.","operationId":"List_versions_available_in_a_workspace","summary":"List versions available in a workspace"}},"/api/v3/workspaces/schema":{"get":{"responses":{"200":{"content":{"application/hal+json":{"examples":{"response":{"value":{"_dependencies":[],"_attributeGroups":[{"_type":"ProjectFormCustomFieldSection","name":"Workspace Details","attributes":["customField30","customField34"]},{"_type":"ProjectFormCustomFieldSection","name":"Budget Information","attributes":["customField31","customField32","customField35"]}],"_links":{"self":{"href":"/api/v3/workspaces/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 workspace custom field","required":false,"type":"Integer","visibility":"default","writable":true},"customField31":{"_links":{},"hasDefault":false,"location":"_links","name":"List workspace custom field","required":false,"type":"CustomOption","visibility":"default","writable":true},"customField32":{"_links":{},"hasDefault":false,"location":"_links","name":"Version workspace custom field","required":false,"type":"Version","visibility":"default","writable":true},"customField34":{"hasDefault":false,"name":"Boolean workspace custom field","required":false,"type":"Boolean","visibility":"default","writable":true},"customField35":{"hasDefault":false,"name":"Text workspace 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":"Workspace","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":["Workspaces"],"description":"","operationId":"View_workspace_schema","summary":"View workspace schema"}}},"components":{"examples":{"ActivityResponse":{"description":"A simple response example for an activity comment.","value":{"_type":"Activity::Comment","id":1478,"comment":{"format":"markdown","raw":"I can give you a CR70 corvette, you have to make do, Leia...","html":"<p class=\"op-uc-p\">I can give you a CR70 corvette, you have to make do, Leia...</p>"},"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":null},"project":{"href":"/api/v3/projects/11","title":"Jedi Remnant Locator"},"activity":{"href":null},"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":null,"formattedWeight":null,"depth":1,"_links":{"self":{"href":"/api/v3/custom_field_items/1338","name":"Stormtroopers"},"parent":{"href":"/api/v3/custom_field_items/1337","name":null},"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":null,"weight":null,"formattedWeight":null,"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":null,"weight":null,"formattedWeight":null,"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":null,"short":null,"weight":null,"formattedWeight":null,"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":null,"formattedWeight":null,"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":null,"weight":null,"formattedWeight":null,"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":null,"formattedWeight":null,"depth":1,"_links":{"self":{"href":"/api/v3/custom_field_items/1338","name":"Stormtroopers"},"parent":{"href":"/api/v3/custom_field_items/1337","name":null},"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"}]}}},"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":"<p class=\"op-uc-p\"><em>Hallo</em></p>"}},"_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":"<p>Everything <strong>fine</strong></p>"},"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":"<p>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.</p>"},"createdAt":"2014-05-21T08:51:20.396Z","updatedAt":"2014-05-21T08:51:20.396Z","customField123":123}},"PortfolioBody":{"value":{"name":"Portfolio example","statusExplanation":{"raw":"Everything **fine**"},"description":{"raw":"Lorem **ipsum** dolor sit amet"},"customField123":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":"<p>Everything <strong>fine</strong></p>"},"description":{"format":"markdown","raw":"Lorem **ipsum** dolor sit amet","html":"<p>Lorem <strong>ipsum</strong> dolor sit amet</p>"},"createdAt":"2014-05-21T08:51:20.396Z","updatedAt":"2014-05-21T08:51:20.396Z","customField123":123}},"ProgramBody":{"value":{"name":"Program example","statusExplanation":{"raw":"Everything **fine**"},"description":{"raw":"Lorem **ipsum** dolor sit amet"},"customField123":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":"<p>Everything <strong>fine</strong></p>"},"description":{"format":"markdown","raw":"Lorem **ipsum** dolor sit amet","html":"<p>Lorem <strong>ipsum</strong> dolor sit amet</p>"},"createdAt":"2014-05-21T08:51:20.396Z","updatedAt":"2014-05-21T08:51:20.396Z","customField123":123}},"ProjectBody":{"value":{"name":"Project example","statusExplanation":{"raw":"Everything **fine**"},"description":{"raw":"Lorem **ipsum** dolor sit amet"},"customField123":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":null,"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":null,"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."}},"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":null}}}},"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":null,"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/<t+","title":"in less than"},"schema":{"href":"/api/v3/queries/filter_instance_schemas/dueDate"}}}],"public":false,"sums":false,"starred":true,"projections":[{"_type":"QueryProjection::Table"},{"_type":"QueryProjection::TeamPlanner","_links":{"rows":[{"href":"/api/v3/users/1","title":"Bob Bobbit"}]}},{"_type":"QueryProjection::Calendar"}],"_embedded":{"results":{"_type":"WorkPackageCollection","total":234,"count":30,"pageSize":30,"offset":1,"_embedded":{"elements":["<--- shortened for brevity --->"]},"_links":{"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"},"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},"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"}}}},"_links":{"self":{"href":"/api/v3/queries/9","title":"fdsfdsfdsf"},"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"},"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":null,"title":null},"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/3","title":"copy"}}}]}}},"QueryModel":{"value":{"_type":"Query","id":9,"name":"abcdefg","createdAt":"2015-03-20T12:56:56.235Z","updatedAt":"2015-05-20T18:16:53.976Z","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/<t+","title":"in less than"},"schema":{"href":"/api/v3/queries/filter_instance_schemas/dueDate"}}}],"public":false,"sums":false,"starred":false,"hidden":false,"timestamps":["PT0S"],"projections":[{"_type":"QueryProjection::Table","showHierarchies":true,"_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"}],"highlightedAttributes":[]}},{"_type":"QueryProjection::Gantt","labels":{},"zoomLevel":"auto","_links":{"highlightedAttributes":[]}},{"_type":"QueryProjection::TeamPlanner","_links":{"rows":[{"href":"/api/v3/users/1","title":"Alan Touring"},{"href":"/api/v3/users/5","title":"John von Neumann"}]}},{"_type":"QueryProjection::Calendar"}],"_embedded":{"results":{"_type":"WorkPackageCollection","total":234,"count":30,"pageSize":30,"offset":1,"_embedded":{"elements":["<--- shortened for brevity --->"]},"_links":{"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"},"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},"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"}}}},"_links":{"self":{"href":"/api/v3/queries/9","title":"abcdefg"},"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"},"groupBy":{"href":null,"title":null},"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/3","title":"copy"}}}},"QuerySchemaModel":{"value":{"_dependencies":[],"_embedded":{"filtersSchemas":{"_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":20,"total":20}},"_links":{"self":{"href":"/api/v3/queries/schema"}},"_type":"Schema","columns":{"_links":{},"hasDefault":true,"location":"_links","name":"Columns","required":false,"type":"[]QueryColumn","writable":true},"createdAt":{"hasDefault":false,"name":"Created on","required":true,"type":"DateTime","writable":false},"filters":{"_links":{"allowedValuesSchemas":{"href":"/api/v3/queries/filter_instance_schemas"}},"hasDefault":true,"location":"_links","name":"Filters","required":false,"type":"[]QueryFilterInstance","writable":true},"groupBy":{"_links":{},"hasDefault":false,"name":"Group results by","required":false,"type":"[]QueryGroupBy","writable":true},"highlightedAttributes":{"hasDefault":true,"location":"_links","name":"Highlighted attributes","required":false,"type":"[]QueryColumn","writable":true,"deprecated":true},"highlightingMode":{"hasDefault":true,"name":"Highlighting mode","required":false,"type":"String","writable":true,"deprecated":true},"id":{"hasDefault":false,"name":"ID","required":true,"type":"Integer","writable":false},"name":{"hasDefault":false,"maxLength":255,"minLength":1,"name":"Name","required":true,"type":"String","writable":true},"project":{"_links":{},"hasDefault":false,"location":"_links","name":"Project","required":false,"type":"Project","writable":true},"public":{"hasDefault":true,"name":"Public","required":false,"type":"Boolean","writable":true},"results":{"hasDefault":false,"name":"Results","required":false,"type":"WorkPackageCollection","writable":false},"showHierarchies":{"hasDefault":true,"name":"Show hierarchies","required":false,"type":"Boolean","writable":true,"deprecated":true},"sortBy":{"_links":{},"hasDefault":true,"name":"Sort by","required":false,"type":"[]QuerySortBy","writable":true},"starred":{"hasDefault":true,"name":"Starred","required":false,"type":"Boolean","writable":true},"sums":{"hasDefault":true,"name":"Sums","required":false,"type":"Boolean","writable":true},"timelineLabels":{"hasDefault":true,"name":"Timeline labels","required":false,"type":"QueryTimelineLabels","writable":true,"deprecated":true},"timelineVisible":{"hasDefault":true,"name":"Timeline visible","required":false,"type":"Boolean","writable":true,"deprecated":true},"timelineZoomLevel":{"hasDefault":true,"name":"Timeline zoom level","required":false,"type":"String","writable":true,"deprecated":true},"timestamps":{"hasDefault":true,"name":"Timestamps","required":false,"type":"[]Timestamp","writable":true},"updatedAt":{"hasDefault":false,"name":"Updated on","required":true,"type":"DateTime","writable":false},"user":{"hasDefault":true,"name":"User","required":true,"type":"User","writable":false}}},"UserResponse":{"value":{"_type":"User","id":14,"name":"Mara Jade","createdAt":"2022-04-04T08:07:22.910Z","updatedAt":"2024-02-09T09:01:17.382Z","login":"member","admin":false,"firstName":"Mara","lastName":"Jade","email":"m.jade@empire.org","avatar":"https://secure.gravatar.com/avatar/17dd23570f3bd129d06db9b48b7a41b8?default=404&secure=true","status":"active","identityUrl":null,"language":"en","_links":{"self":{"href":"/api/v3/users/14","title":"Mara Jade"},"memberships":{"href":"/api/v3/memberships?filters=%5B%7B%22principal%22%3A%7B%22operator%22%3A%22%3D%22%2C%22values%22%3A%5B%2214%22%5D%7D%7D%5D","title":"Memberships"},"showUser":{"href":"/users/14","type":"text/html"},"updateImmediately":{"href":"/api/v3/users/14","title":"Update member","method":"patch"},"lock":{"href":"/api/v3/users/14/lock","title":"Set lock on member","method":"post"},"delete":{"href":"/api/v3/users/14","title":"Delete member","method":"delete"}}}},"ValuesPropertyStartDateSchema":{"value":{"_type":"Schema","property":{"name":"Property","type":"String"},"value":{"name":"Start date","type":"Date"},"_links":{"self":{"href":"api/v3/values/schemas/startDate"}}}},"ValuesPropertyDueDateSchema":{"value":{"_type":"Schema","property":{"name":"Property","type":"String"},"value":{"name":"Due date","type":"Date"},"_links":{"self":{"href":"api/v3/values/schemas/dueDate"}}}},"ValuesPropertyDateSchema":{"value":{"_type":"Schema","property":{"name":"Property","type":"String"},"value":{"name":"Date","type":"Date"},"_links":{"self":{"href":"api/v3/values/schemas/date"}}}},"ValuesPropertyStartDate":{"value":{"_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"}}}},"ValuesPropertyDueDate":{"value":{"_type":"Values::Property","property":"dueDate","value":"2021-01-01","_links":{"self":{"href":"api/v3/notifications/123/details/0"},"schema":{"href":"api/v3/values/schemas/dueDate"}}}},"ValuesPropertyDate":{"value":{"_type":"Values::Property","property":"date","value":"2021-01-01","_links":{"self":{"href":"api/v3/notifications/123/details/0"},"schema":{"href":"api/v3/values/schemas/date"}}}},"VersionSimpleResponse":{"description":"Simple response showing a single version","value":{"_type":"Version","id":3,"name":"v0.9.1-alpha","description":{"format":"plain","raw":"First draft of the energy weapon ... (behold, Alderaan *evil_laughter*)","html":"<p>First draft of the energy weapon ... (behold, Alderaan *evil_laughter*)</p>"},"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\ngiven 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\n\nThe 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\n\n# Conditions\n\nOnly 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\n\n**Resource**: Activity"}]},"workPackage":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The work package this activity belongs to\n\n**Resource**: WorkPackage"}]},"user":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The user who created this activity\n\n**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\n\n**Resource**: Attachments"}]},"addAttachment":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Attach a file to the activity\n\n# Conditions\n\n**Permissions**:\n- `add_work_package_comments`\n- for internal comments: `add_internal_comments`"}]},"emojiReactions":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The emoji reactions collection of this activity\n\n**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":"👍","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":"<p>Lorem ipsum dolor sit amet.</p>"},"scheduleManually":true,"startDate":null,"dueDate":null,"derivedStartDate":null,"derivedDueDate":null,"estimatedTime":null,"derivedEstimatedTime":null,"derivedRemainingTime":null,"duration":null,"ignoreNonWorkingDays":false,"percentageDone":null,"derivedPercentageDone":null,"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":"<p>Lorem ipsum dolor sit amet.</p>"}],"comment":{"format":"markdown","raw":"Lorem ipsum dolor sit amet.","html":"<p>Lorem ipsum dolor sit amet.</p>"},"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\nwith `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\n\n# Conditions\n\n**Permission**: edit on attachment container or being the author for attachments without container"}]},"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This attachment\n\n**Resource**: Attachment"}]},"container":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The object (e.g. WorkPackage) housing the attachment\n\n**Resource**: Anything"}]},"author":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The user who uploaded the attachment\n\n**Resource**: User"}]},"downloadLocation":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Direct download link to the attachment\n\n**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":"<p>A picture of a cute cat</p>"},"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\n\n**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\n\n**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":null}]}}},"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":null}]}}},"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":null}]}}},"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\n\n**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\n\n**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\n\n**Resource**: Category","readOnly":true}]},"project":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The project of this category\n\n**Resource**: Project","readOnly":true}]},"defaultAssignee":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Default assignee for work packages of this category\n\n**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.\n\n**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\n\n**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"}}}},"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:\n\n- Hierarchy\n- List\n- User\n- Version\n- 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:\n\n- Boolean\n- Date\n- Float\n- Integer\n- Link (URL)\n- Text\n- 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.\n\n**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\n\n**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\nindicating 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.\nLinked resources can be `NonWorkingDay` and `WeekDay` resources.\nThis 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":null,"title":null},"sortBy":[{"href":"/api/v3/queries/sort_bys/parent-desc","title":"Parent (Descending)"}],"user":{"href":"/api/v3/users/1","title":"OpenProject Admin"},"project":{"href":null}}}},"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":null,"title":null},"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\n\n**Resource**: Document","readOnly":true}]},"project":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The project the document is in\n\n**Resource**: Project"}]},"attachments":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The attachments belonging to the document\n\n**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":"<p>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.</p>"},"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":"<p>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.</p>"},"_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":"<p>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.</p>"},"_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":"👍"},"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":"👍","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":"👍","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\n\n**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.\n\nTo link a folder entity, the custom MIME type `application/x-op-directory` MUST be provided. Otherwise it defaults back to\nan 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.\n\n**Resource**: FileLink"}]},"storage":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The storage resource of the linked file.\n\n**Resource**: Storage"}]},"container":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The container the origin file is linked to.\n\nCan be one of the following **Resources**:\n\n- WorkPackage"}]},"creator":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The creator of the file link.\n\n**Resource**: User"}]},"delete":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The uri to delete the file link.\n\n**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:\n\n- urn:openproject-org:api:v3:file-links:permission:ViewAllowed\n- urn:openproject-org:api:v3:file-links:permission:ViewNotAllowed\n- urn:openproject-org:api:v3:file-links:NotFound\n- urn:openproject-org:api:v3:file-links:Error\n\n**Resource**: N/A"}]},"originOpen":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The uri to open the origin file on the origin itself.\n\n**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.\n\n**Resource**: N/A"}]},"originOpenLocation":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The uri to open the location of origin file on the origin itself.\n\n**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.\n\n**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.\n\n**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.\n\n**Resource**: Storage"}]}}},{"type":"object","required":["storageUrl"],"properties":{"storageUrl":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The storage url the file link references to.\n\n**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 <strong>am</strong> 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.\n\n# Conditions\n\n- 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.\n\n**Resource**: Grid"}]},"attachments":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The attachment collection of this grid.\n\n**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.\n\n# Conditions\n\n**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\n\n# Conditions\n\n**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.\n\n# Conditions\n\n- 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\n\n**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"},{"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\n\n**Resource**: Group"}]},"members":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A member of the group\n\n# Conditions:\n\n- user has permission `manage_members` in any project\n\n**Resource**: User"}]}},"delete":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"An href to delete the group.\n\n# Conditions:\n\n- `admin`"}]},"updateImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"An href to update the group.\n\n# Conditions:\n\n- `admin`\n\n**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.\n\n**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\n\n**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":"<p>Help text for id attribute.</p>"}},{"_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":"<p>Help text for status attribute.</p>"}}]},"_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.\n\n**Resource**: HelpText"}]},"editText":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Edit the help text entry.\n\n**Resource**: text/html"}]},"attachments":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The attachment collection of this help text.\n\n**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":"<p>Help text for id attribute.</p>"},"_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\n\n**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\nthe `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\nnot loose precision with conversion to a floating point number.\nIf 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\nconvert this number into a representable format - i.e. falling back to scientific notation for very small and\nvery big numbers.\nIf 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\n\n**Resource**: HierarchyItem"}]},"parent":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The hierarchy item that is the parent of the current hierarchy item\n\n**Resource**: HierarchyItem"}]},"children":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A hierarchy item that is a child of the current hierarchy item\n\n**Resource**: HierarchyItem"}]}},"branch":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The branch of the hierarchy item, ordered from root to node.\n\n**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\n\n**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":"<p>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.</p>"},"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":"<p>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.</p>"},"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":"<p>Lorem <strong>ipsum</strong> dolor sit amet</p>"},"active":true,"statusExplanation":{"format":"markdown","raw":"Everything **fine**","html":"<p>Everything <strong>fine</strong></p>"},"createdAt":"2014-05-21T08:51:20.142Z","updatedAt":"2014-05-21T08:51:20.142Z"}]}}},"MeetingModel":{"type":"object","required":["title"],"properties":{"id":{"type":"integer","description":"Identifier of this meeting","readOnly":true,"exclusiveMinimum":0},"title":{"type":"string","description":"The meeting's title"},"_links":{"type":"object","properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This meeting\n\n**Resource**: Meeting","readOnly":true}]},"author":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The user having created the meeting\n\n**Resource**: User","readOnly":true}]},"project":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The project the meeting is in\n\n**Resource**: Project"}]},"attachments":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The attachment collection of this grid.\n\n**Resource**: AttachmentCollection           "}]},"addAttachment":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Attach a file to the meeting\n\n# Conditions\n\n**Permission**: edit meeting","readOnly":true}]}}}},"example":{"_type":"Meeting","id":72,"lockVersion":5,"title":"A meeting","startTime":"2014-05-21T08:00:00.000Z","endTime":"2014-05-21T10:00:00.000Z","duration":120,"createdAt":"2014-05-21T08:51:20.396Z","updatedAt":"2014-05-21T09:14:02.776Z","_embedded":{"project":{"_type":"Project...","id":12},"author":{"_type":"User...","id":2}},"_links":{"addAttachment":{"href":"/api/v3/meetings/72/attachments","method":"post"},"attachments":{"href":"/api/v3/meetings/72/attachments"},"project":{"href":"/api/v3/projects/12","title":"some project"},"author":{"href":"/api/v3/users/2","title":"Peggie Feeney"},"self":{"href":"/api/v3/meetings/72"}}}},"MarkdownModel":{"type":"string","format":"html","example":"<p>Hello world! <a href=\"http://example.com\">This</a> <strong>is</strong> markdown!</p>"},"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.\n\n**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.\n\n**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.\n\n**Resource**: Membership"}]},"schema":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This membership schema.\n\n**Resource**: Schema"}]},"update":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The endpoint for updating the membership.\n\n# Conditions\n\n**Permission**: manage_members"}]},"updateImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The endpoint for updating the membership without form validation.\n\n# Conditions\n\n**Permission**: manage_members"}]},"project":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The workspace the membership is related to.\n\n**Resource**: Workspace"}]},"principal":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The principal the membership is related to.\n\n**Resource**: Principal"}]},"roles":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A role the principal has.\n\n**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.\n\n**Resource**: Principal"}]},"roles":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A role the principal has.\n\n**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\nto be global.\n\n**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\n\n**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\n\n**Resource**: News","readOnly":true}]},"project":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The workspace the news is situated in\n\n**Resource**: workspace"}]},"author":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The user having created the news\n\n**Resource**: User","readOnly":true}]},"updateImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Directly perform edits on the news\n\n**Permission** manage news"}]},"delete":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Delete the news\n\n**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":"<p>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.</p>"},"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\n\n**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.\n\n**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\n\n**Resource**: NotificationCollectionModel"}]},"jumpTo":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The notification collection at another offset\n\n**Resource**: NotificationCollectionModel"}]},"changeSize":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The notification collection with another size\n\n**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\n\n**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\n\n**Resource**: Workspace"}]},"actor":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The user that caused the notification. This might be null in\ncase no user triggered the notification.\n\n**Resource**: User"}]},"resource":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The linked resource of the notification, if any.\n\n**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\ncase no activity triggered the notification.\n\n**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\n\n**Resource**: OAuthApplication"}]},"owner":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The user that created the OAuth application.\n\n**Resource**: User"}]},"integration":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The resource that integrates this OAuth application into itself. Currently, only `Storage` resources are\nable to create and maintain own OAuth application.\n\n**Resource**: Storage"}]},"redirectUri":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A redirect URI of the OAuth application\n\n**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\n\n**Resource**: OAuthClientCredentials"}]},"integration":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The resource that integrates this OAuth client credentials. Currently, only `Storage` resources are\nable to contain OAuth client credentials.\n\n**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.\n\n# Conditions\n- The collection is not on the first page."}]},"nextByOffset":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A link to the next page of the collection.\n\n# Conditions\n- 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\nsettings.","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.\n\n**Resource**: Collection"}]},"changeSize":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Templated link for another page size.\n\n**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\n\n**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.\n\n# Conditions\n\n- 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.\n\n# Conditions:\n\n- `manage_placeholder_user`"}]},"updateImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"An href to update the placeholder user.\n\n# Conditions:\n\n- `manage_placeholder_user`\n\n**Resource**: PlaceholderUser"}]}}}}}]},"Plain_TextModel":{"type":"string","format":"html","example":"<p>Hello world! This *is* plain text!</p>"},"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":{"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\n\n# Conditions\n\n**Permission**: edit workspace"}]},"updateImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Directly update this portfolio\n\n# Conditions\n\n**Permission**: edit workspace"}]},"delete":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Delete this portfolio\n\n# Conditions\n\n**Permission**: admin"}]},"favor":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Mark this portfolio as favorited by the current user\n\n# Conditions\n\nOnly present if the portfolio is not yet favorited\n\nPermission**: none but login is required"}]},"disfavor":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Mark this portfolio as not favorited by the current user\n\n# Conditions\nOnly present if the portfolio is favorited by the current user\n\nPermission**: none but login is required"}]},"createWorkPackage":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Form endpoint that aids in preparing and creating a work package\n\n# Conditions\n\n**Permission**: add work packages"}]},"createWorkPackageImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Directly creates a work package in the portfolio\n\n# Conditions\n\n**Permission**: add work packages"}]},"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This portfolio\n\n**Resource**: Portfolio"}]},"categories":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Categories available in this portfolio\n\n**Resource**: Collection"}]},"types":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Types available in this portfolio\n\n**Resource**: Collection\n\n# Conditions\n\n**Permission**: view work packages or manage types"}]},"versions":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Versions available in this portfolio\n\n**Resource**: Collection\n\n# Conditions\n\n**Permission**: view work packages or manage versions"}]},"memberships":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Memberships in the  portfolio\n\n**Resource**: Collection\n\n# Conditions\n\n**Permission**: view members"}]},"workPackages":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Work Packages of this portfolio\n\n**Resource**: Collection"}]},"parent":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Parent of the portfolio\n\n**Resource**: Portfolio\n\n# Conditions\n\n**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.\n\n**Resource**: ProjectStatus\n\n# Conditions\n\n**Permission** edit workspace"}]},"storages":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The link to a storage that is active for this portfolio.\n\n**Resource**: Storage\n\n# Conditions\n\n**Permission**: view_file_links"}]}},"projectStorages":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The project storage collection of this portfolio.\n\n**Resource**: Collection\n\n# Conditions\n\n**Permission**: view_file_links"}]},"ancestors":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A collection of links to the ancestor portfolios.\n\n**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\n\n# Conditions\n\n**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.\n\n**Resource**: User|Group|PlaceholderUser"}]},"memberships":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"An href to the collection of the principal's memberships.\n\n# Conditions:\n\n- user has permission `view_members` or `manage_members` in any project\n\n**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\n\n**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\n\n**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":{"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\n\n# Conditions\n\n**Permission**: edit workspace"}]},"updateImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Directly update this program\n\n# Conditions\n\n**Permission**: edit workspace"}]},"delete":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Delete this program\n\n# Conditions\n\n**Permission**: admin"}]},"favor":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Mark this program as favorited by the current user\n\n# Conditions\n\nOnly present if the program is not yet favorited\n\nPermission**: none but login is required"}]},"disfavor":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Mark this program as not favorited by the current user\n\n# Conditions\nOnly present if the program is favorited by the current user\n\nPermission**: none but login is required"}]},"createWorkPackage":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Form endpoint that aids in preparing and creating a work package\n\n# Conditions\n\n**Permission**: add work packages"}]},"createWorkPackageImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Directly creates a work package in the program\n\n# Conditions\n\n**Permission**: add work packages"}]},"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This program\n\n**Resource**: Program"}]},"categories":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Categories available in this program\n\n**Resource**: Collection"}]},"types":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Types available in this program\n\n**Resource**: Collection\n\n# Conditions\n\n**Permission**: view work packages or manage types"}]},"versions":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Versions available in this program\n\n**Resource**: Collection\n\n# Conditions\n\n**Permission**: view work packages or manage versions"}]},"memberships":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Memberships in the  program\n\n**Resource**: Collection\n\n# Conditions\n\n**Permission**: view members"}]},"workPackages":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Work Packages of this program\n\n**Resource**: Collection"}]},"parent":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Parent of the program\n\n**Resource**: Program\n\n# Conditions\n\n**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.\n\n**Resource**: ProjectStatus\n\n# Conditions\n\n**Permission** edit workspace"}]},"storages":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The link to a storage that is active for this program.\n\n**Resource**: Storage\n\n# Conditions\n\n**Permission**: view_file_links"}]}},"projectStorages":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The project storage collection of this program.\n\n**Resource**: Collection\n\n# Conditions\n\n**Permission**: view_file_links"}]},"ancestors":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A collection of links to the ancestor workspace.\n\n**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":{"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\n\n# Conditions\n\n**Permission**: edit workspace"}]},"updateImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Directly update this project\n\n# Conditions\n\n**Permission**: edit workspace"}]},"delete":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Delete this project\n\n# Conditions\n\n**Permission**: admin"}]},"favor":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Mark this project as favorited by the current user\n\n# Conditions\n\nOnly present if the project is not yet favorited\n\nPermission**: none but login is required"}]},"disfavor":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Mark this project as not favorited by the current user\n\n# Conditions\nOnly present if the project is favorited by the current user\n\nPermission**: none but login is required"}]},"createWorkPackage":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Form endpoint that aids in preparing and creating a work package\n\n# Conditions\n\n**Permission**: add work packages"}]},"createWorkPackageImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Directly creates a work package in the project\n\n# Conditions\n\n**Permission**: add work packages"}]},"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This project\n\n**Resource**: Project"}]},"categories":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Categories available in this project\n\n**Resource**: Collection"}]},"types":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Types available in this project\n\n**Resource**: Collection\n\n# Conditions\n\n**Permission**: view work packages or manage types"}]},"versions":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Versions available in this project\n\n**Resource**: Collection\n\n# Conditions\n\n**Permission**: view work packages or manage versions"}]},"memberships":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Memberships in the project\n\n**Resource**: Collection\n\n# Conditions\n\n**Permission**: view members"}]},"workPackages":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Work Packages of this project\n\n**Resource**: Collection"}]},"parent":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Parent of the project\n\n**Resource**: Workspace\n\n# Conditions\n\n**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.\n\n**Resource**: ProjectStatus\n\n# Conditions\n\n**Permission** edit workspace"}]},"storages":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The link to a storage that is active for this project.\n\n**Resource**: Storage\n\n# Conditions\n\n**Permission**: view_file_links"}]}},"projectStorages":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The project storage collection of this project.\n\n**Resource**: Collection\n\n# Conditions\n\n**Permission**: view_file_links"}]},"ancestors":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A collection of links to the ancestor workspaces.\n\n**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.\n\n**Resource**: ProjectPhase"}]},"definition":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The definition this phase relies on.\n\n**Resource**: ProjectPhaseDefinition"}]},"project":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The project resource, that is the container of this phase.\n\n**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.\n\n**Resource**: ProjectPhaseDefinition"}]}}}},"example":{"_type":"ProjectPhaseDefinition","id":1337,"name":"Initiating","startGate":true,"startGateName":"Before Initiating","finishGate":true,"finishGateName":null,"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\n\n**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\n\n**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.\n\n**Resource**: ProjectStorage"}]},"creator":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The user who created the project storage.\n\n**Resource**: User"}]},"storage":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The storage resource, that is linked to a project with this project storage.\n\n**Resource**: Storage"}]},"project":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The project resource, that is linked to a storage with this project storage.\n\n**Resource**: Project"}]},"projectFolder":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The directory on the storage that is used as a project folder.\n\n**Resource**: StorageFile\n\n# Conditions\n\nOnly provided, if the `projectFolderMode` is `manual` or `automatic`."}]},"open":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A link to OpenProject strorage.\n\n# Conditions\n\nIf 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.\n\n**Deprecated:** Use `open` instead, which returns a link that will ensure the user's connection to the storage\nas 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/<t+","title":"in less than"},"schema":{"href":"/api/v3/queries/filter_instance_schemas/dueDate"}}}],"public":false,"sums":false,"starred":true,"projections":[{"_type":"Query::TableProjection"},{"_type":"Query::TeamPlannerProjection","_links":{"rows":[{"href":"/api/v3/users/1","title":"Bob Bobbit"}]}},{"_type":"Query::CalendarProjection"}],"_embedded":{"results":{"_type":"WorkPackageCollection","total":234,"count":30,"pageSize":30,"offset":1,"_embedded":{"elements":["<--- shortened for brevity --->"]},"_links":{"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"},"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},"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"}}}},"_links":{"self":{"href":"/api/v3/queries/9","title":"fdsfdsfdsf"},"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"},"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":null,"title":null},"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/3","title":"copy"}}}]}}},"QueryModel":{"type":"object","required":["createdAt","updatedAt"],"properties":{"id":{"type":"integer","description":"Query id","readOnly":true,"exclusiveMinimum":0},"name":{"type":"string","description":"Query name","readOnly":true},"filters":{"type":"array","description":"A set of QueryFilters which will be applied to the work packages to determine the resulting work packages","readOnly":false,"items":{"$ref":"#/components/schemas/Query_Filter_Instance_Model"}},"sums":{"type":"boolean","description":"Should sums (of supported properties) be shown?","readOnly":true},"timelineVisible":{"type":"boolean","description":"Should the timeline mode be shown?","readOnly":true,"deprecated":true},"timelineLabels":{"type":"array","description":"Which labels are shown in the timeline, empty when default","readOnly":true,"deprecated":true,"items":{"type":"string"}},"timelineZoomLevel":{"type":"string","description":"Which zoom level should the timeline be rendered in?","readOnly":true,"deprecated":true},"timestamps":{"type":"array","description":"Timestamps to filter by when showing changed attributes on work packages.","readOnly":false},"highlightingMode":{"type":"string","description":"Which highlighting mode should the table have?","readOnly":true,"deprecated":true},"showHierarchies":{"type":"boolean","description":"Should the hierarchy mode be enabled?","readOnly":true,"deprecated":true},"hidden":{"type":"boolean","description":"Should the query be hidden from the query list?","readOnly":true,"deprecated":true},"public":{"type":"boolean","description":"Can users besides the owner see the query?","readOnly":true},"starred":{"type":"boolean","description":"Should the query be highlighted to the user?","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 query","readOnly":true},"_links":{"type":"object","properties":{"star":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Elevates the query to the status of 'starred'\n\n# Conditions\n\n**Permission**: save queries for own queries, manage public queries for public queries; Only present if query is not yet starred","readOnly":true}]},"unstar":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Removes the 'starred' status\n\n# Conditions\n\n**Permission**: save queries for own queries, manage public queries for public queries; Only present if query is starred","readOnly":true}]},"update":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Use the Form based process to verify the query before persisting\n\n# Conditions\n\n**Permission**: view work packages","readOnly":true}]},"updateImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Persist the query without using a Form based process for guidance\n\n# Conditions\n\n**Permission**: save queries for own queries, manage public queries for public queries;","readOnly":true}]}}}}},"Query_ColumnModel":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string","description":"Query column id","readOnly":true},"name":{"type":"string","description":"Query column name"}},"example":{"_type":"QueryColumn::Property","id":"priority","name":"Priority","_links":{"self":{"href":"/api/v3/queries/columns/priority","title":"Priority"}}}},"Query_Create_Form":{"type":"object","properties":{"name":{"type":"string","description":"Query name."}},"example":{"name":"New query name"}},"Query_FilterModel":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"QueryFilter id"}},"example":{"_type":"QueryFilter","id":"status","_links":{"self":{"href":"/api/v3/queries/filters/status","title":"Status"}}}},"Query_Filter_Instance_Model":{"type":"object","required":["_links","_type","name"],"properties":{"_links":{"type":"object","required":["filter","schema"],"properties":{"filter":{"$ref":"#/components/schemas/Link"},"schema":{"$ref":"#/components/schemas/Link"},"operator":{"$ref":"#/components/schemas/Link"}}},"_type":{"type":"string"},"name":{"type":"string"}}},"Query_Filter_Instance_SchemaModel":{"type":"object","required":["name","_links"],"properties":{"name":{"type":"string","description":"Describes the name attribute","readOnly":true},"_links":{"type":"object","required":["self","filter"],"properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This QueryFilterInstanceSchema (same as for schema)\n\n**Resource**: QueryFilterInstanceSchema","readOnly":true}]},"filter":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The filter for which this schema is specific\n\n**Resource**: Filter","readOnly":true}]}}}},"example":{"_type":"QueryFilterInstanceSchema","_dependencies":[{"_type":"SchemaDependency","on":"operator","dependencies":{"/api/v3/queries/operators/=":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}},"/api/v3/queries/operators/!":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}}}}],"name":"A name","_links":{"self":{"href":"/api/v3/queries/filter_instance_schemas/author"},"filter":{"href":"/api/v3/queries/filters/author","title":"Author"}}}},"Query_Filter_Instance_SchemasModel":{"type":"object","example":{"_type":"Collection","total":2,"count":2,"_embedded":{"elements":[{"_type":"QueryFilterInstanceSchema","_dependencies":[{"_type":"SchemaDependency","on":"operator","dependencies":{"/api/v3/queries/operators/=":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}},"/api/v3/queries/operators/!":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}},"/api/v3/queries/operators/!*":{},"/api/v3/queries/operators/*":{}}}],"name":{"type":"String","name":"Name","required":true,"hasDefault":true,"writable":false},"filter":{"type":"QueryFilter","name":"Filter","required":true,"hasDefault":false,"writable":true,"_links":{}},"_links":{"self":{"href":"/api/v3/queries/filter_instance_schemas/assignee"},"filter":{"href":"/api/v3/queries/filters/assignee","title":"Assignee"}}},{"_type":"QueryFilterInstanceSchema","_dependencies":[{"_type":"SchemaDependency","on":"operator","dependencies":{"/api/v3/queries/operators/=":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}},"/api/v3/queries/operators/!":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}}}}],"name":{"type":"String","name":"Name","required":true,"hasDefault":true,"writable":false},"filter":{"type":"QueryFilter","name":"Filter","required":true,"hasDefault":false,"writable":true,"_links":{}},"_links":{"self":{"href":"/api/v3/queries/filter_instance_schemas/author"},"filter":{"href":"/api/v3/queries/filters/author","title":"Author"}}}]},"_links":{"self":{"href":"/api/v3/queries/filter_instance_schemas"}}}},"Query_Filter_Instance_Schemas_For_WorkspaceModel":{"type":"object","example":{"_type":"Collection","total":2,"count":2,"_embedded":{"elements":[{"_type":"QueryFilterInstanceSchema","_dependencies":[{"_type":"SchemaDependency","on":"operator","dependencies":{"/api/v3/queries/operators/=":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}},"/api/v3/queries/operators/!":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}},"/api/v3/queries/operators/!*":{},"/api/v3/queries/operators/*":{}}}],"name":{"type":"String","name":"Name","required":true,"hasDefault":true,"writable":false},"filter":{"type":"QueryFilter","name":"Filter","required":true,"hasDefault":false,"writable":true,"_links":{}},"_links":{"self":{"href":"/api/v3/queries/filter_instance_schemas/assignee"},"filter":{"href":"/api/v3/queries/filters/assignee","title":"Assignee"}}},{"_type":"QueryFilterInstanceSchema","_dependencies":[{"_type":"SchemaDependency","on":"operator","dependencies":{"/api/v3/queries/operators/=":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}},"/api/v3/queries/operators/!":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}}}}],"name":{"type":"String","name":"Name","required":true,"hasDefault":true,"writable":false},"filter":{"type":"QueryFilter","name":"Filter","required":true,"hasDefault":false,"writable":true,"_links":{}},"_links":{"self":{"href":"/api/v3/queries/filter_instance_schemas/author"},"filter":{"href":"/api/v3/queries/filters/author","title":"Author"}}}]},"_links":{"self":{"href":"/api/v3/workspaces/42/queries/filter_instance_schemas"}}}},"Query_OperatorModel":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string","description":"Query operator id","readOnly":true},"name":{"type":"string","description":"Query operator name"}},"example":{"_type":"QueryOperator","id":"!","name":"is not","_links":{"self":{"href":"/api/v3/queries/operators/!","title":"is not"}}}},"Query_Sort_ByModel":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string","description":"QuerySortBy id","readOnly":true},"name":{"type":"string","description":"QuerySortBy name"}},"example":{"_type":"QuerySortBy","id":"status-asc","name":"Status (Ascending)","_links":{"self":{"href":"/api/v3/queries/sort_bys/status-asc","title":"Status (Ascending)"},"column":{"href":"/api/v3/queries/columns/status","title":"Status"},"direction":{"href":"urn:openproject-org:api:v3:queries:directions:asc","title":"Ascending"}}}},"Query_Update_Form":{"type":"object","properties":{"name":{"type":"string","description":"Query name."}},"example":{"name":"Updated query name"}},"RelationCollectionModel":{"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 relation collection\n\n**Resource**: RelationCollectionReadModel"}]}}},"_embedded":{"type":"object","required":["elements"],"properties":{"elements":{"type":"array","items":{"$ref":"#/components/schemas/RelationReadModel"}}}}}}]},"RelationReadModel":{"type":"object","properties":{"_type":{"type":"string","enum":["Relation"]},"id":{"type":"integer","description":"Relation ID"},"name":{"type":"string","description":"The internationalised name of this type of relation"},"type":{"type":"string","description":"The relation type.","enum":["relates","duplicates","duplicated","blocks","blocked","precedes","follows","includes","partof","requires","required"]},"reverseType":{"type":"string","description":"The type of relation from the perspective of the related work package.","enum":["relates","duplicates","duplicated","blocks","blocked","precedes","follows","includes","partof","requires","required"]},"description":{"type":["string","null"],"description":"A descriptive text for the relation."},"lag":{"type":["integer","null"],"description":"The lag in days between closing of `from` and start of `to`","minimum":0},"_embedded":{"type":"object","properties":{"from":{"$ref":"#/components/schemas/WorkPackageModel"},"to":{"$ref":"#/components/schemas/WorkPackageModel"}}},"_links":{"type":"object","properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This relation\n\n**Resource**: Relation\n\n# Conditions\n\n**Permission**: view work packages"}]},"updateImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Updates the relation between two work packages\n\n# Conditions\n\n**Permission**: manage work package relations"}]},"delete":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Destroys the relation between the two work packages\n\n# Conditions\n\n**Permission**: manage work package relations"}]},"from":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The emanating work package\n\n**Resource**: WorkPackage\n\n# Conditions\n\n**Permission**: view work packages"}]},"to":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The work package the relation ends in\n\n**Resource**: WorkPackage\n\n# Conditions\n\n**Permission**: view work packages"}]}}}}},"RelationWriteModel":{"type":"object","required":["_links","type"],"properties":{"type":{"type":"string","description":"The relation type.","enum":["relates","duplicates","duplicated","blocks","blocked","precedes","follows","includes","partof","requires","required"]},"description":{"type":["string","null"],"description":"A descriptive text for the relation."},"lag":{"type":["integer","null"],"description":"The lag in days between closing of `from` and start of `to`","minimum":0},"_links":{"type":"object","properties":{"to":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The work package the relation ends in. Only available on relation creation, not on update.\n\n**Resource**: WorkPackage\n\n# Conditions\n\n**Permission**: view work packages"}]}}}}},"ReminderModel":{"type":"object","properties":{"id":{"type":"integer","description":"Reminder id","readOnly":true,"minimum":1},"note":{"type":"string","description":"The note of the reminder"},"remindAt":{"type":"string","format":"date-time","description":"The date and time when the reminder is due"},"_links":{"required":["creator","remindable"],"type":"object","properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This reminder\n\n**Resource**: Reminder"}]},"creator":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The person that created the reminder\n\n**Resource**: User"}]},"remindable":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The resource that the reminder is associated with\n\n**Resource**: WorkPackage"}]}}}}},"RevisionModel":{"type":"object","required":["identifier","formattedIdentifier","authorName","message","createdAt"],"properties":{"id":{"type":"integer","description":"Revision's id, assigned by OpenProject","readOnly":true,"exclusiveMinimum":0},"identifier":{"type":"string","description":"The raw SCM identifier of the revision (e.g. full SHA hash)","readOnly":true},"formattedIdentifier":{"type":"string","description":"The SCM identifier of the revision, formatted (e.g. shortened unambiguous SHA hash). May be identical to identifier in many cases","readOnly":true},"authorName":{"type":"string","description":"The name of the author that committed this revision. Note that this name is retrieved from the repository and does not identify a user in OpenProject.","readOnly":true},"message":{"allOf":[{"$ref":"#/components/schemas/Formattable"},{"description":"The commit message of the revision","readOnly":true}]},"createdAt":{"type":"string","format":"date-time","description":"The time this revision was committed to the repository"},"_links":{"type":"object","required":["self","project","showRevision"],"properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This revision\n\n**Resource**: Revision","readOnly":true}]},"project":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The project to which the revision belongs\n\n**Resource**: Project","readOnly":true}]},"author":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The user that added this revision, if the authorName was mapped to a user in OpenProject\n\n**Resource**: User","readOnly":true}]},"showRevision":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A URL to the repository view (outside APIv3) showing this revision\n\n**Resource**: -","readOnly":true}]}}}},"example":{"_type":"Revision","_links":{"self":{"href":"/api/v3/revisions/1"},"project":{"href":"/api/v3/projects/1"},"author":{"href":"/api/v3/users/1"},"showRevision":{"href":"/projects/identifier/repository/revision/11f4b07"}},"id":1,"identifier":"11f4b07dff4f4ce9548a52b7d002daca7cd63ec6","formattedIdentifier":"11f4b07","authorName":"Some Developer","message":{"format":"plain","raw":"This revision provides new features\n\nAn elaborate description","html":"<p>This revision provides new features<br/><br/>An elaborate description</p>"},"createdAt":"2015-07-21T13:36:59.859Z"}},"RevisionsModel":{"type":"object","example":{"_links":{"self":{"href":"/api/v3/work_packages/42/revisions"}},"total":2,"count":2,"_type":"Collection","_embedded":{"elements":[{"_type":"Revision","_links":{"self":{"href":"/api/v3/revisions/13"},"project":{"href":"/api/v3/projects/1","title":"A Test Project"},"author":{"href":"/api/v3/users/1","title":"John Sheppard - j.sheppard"},"showRevision":{"href":"/projects/identifier/repository/revision/11f4b07"}},"id":13,"identifier":"11f4b07dff4f4ce9548a52b7d002daca7cd63ec6","formattedIdentifier":"11f4b07","authorName":"John Sheppard","message":{"format":"plain","raw":"This revision provides new features\n\nAn elaborate description","html":"<p>This revision provides new features<br/><br/>An elaborate description</p>"},"createdAt":"2015-07-21T13:36:59.201Z"},{"_type":"Revision","_links":{"self":{"href":"/api/v3/revisions/14"},"project":{"href":"/api/v3/projects/1","title":"A Test Project"},"author":{"href":"/api/v3/users/2","title":"Jim Sheppard - j.sheppard"},"showRevision":{"href":"/projects/identifier/repository/revision/029ed72a"}},"id":13,"identifier":"029ed72a3b7b7c4ab332b1f6eaa6576e7c946059","formattedIdentifier":"029ed72a","authorName":"j1msheppard","message":{"format":"plain","raw":"This revision fixes some stuff\n\nMore information here","html":"<p>This revision fixes some stuff<br/><br/>More information here</p>"},"createdAt":"2015-06-30T08:47:00.548Z"}]}}},"RoleModel":{"type":"object","required":["name"],"properties":{"_type":{"type":"string","enum":["Role"]},"id":{"type":"integer","description":"Role id","readOnly":true,"minimum":1},"name":{"type":"string","description":"Role name"},"_links":{"type":"object","required":["self"],"properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This role\n\n**Resource**: Role","readOnly":true}]}}}},"example":{"_type":"Role","id":3,"name":"Manager","_links":{"self":{"href":"/api/v3/roles/3","title":"Manager"}}}},"RolesModel":{"type":"object","example":{"_type":"Collection","total":5,"count":5,"_embedded":{"elements":[{"_type":"Role","id":3,"name":"Manager","_links":{"self":{"href":"/api/v3/roles/3","title":"Manager"}}},{"_type":"Role","id":2,"name":"Anonymous","_links":{"self":{"href":"/api/v3/roles/2","title":"Anonymous"}}},{"_type":"Role","id":5,"name":"Reader","_links":{"self":{"href":"/api/v3/roles/5","title":"Reader"}}},{"_type":"Role","id":4,"name":"Member","_links":{"self":{"href":"/api/v3/roles/4","title":"Member"}}},{"_type":"Role","id":1,"name":"Non member","_links":{"self":{"href":"/api/v3/roles/1","title":"Non member"}}}]},"_links":{"self":{"href":"/api/v3/roles"}}}},"RootModel":{"type":"object","required":["_type","instanceName","_links"],"properties":{"_type":{"type":"string","enum":["Root"]},"instanceName":{"type":"string","description":"The name of the OpenProject instance"},"coreVersion":{"type":"string","description":"The OpenProject core version number for the instance\n\n# Conditions\n\n**Permission** requires admin privileges"},"_links":{"type":"object","required":["self","configuration","memberships","priorities","relations","statuses","time_entries","types","user","userPreferences","workPackages"],"properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This root information object.\n\n**Resource**: Root"}]},"configuration":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The configuration resource.\n\n**Resource**: Configuration"}]},"memberships":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The collection of memberships.\n\n**Resource**: Collection"}]},"priorities":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The collection of priorities.\n\n**Resource**: Collection"}]},"relations":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The collection of relations.\n\n**Resource**: Collection"}]},"statuses":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The collection of statuses.\n\n**Resource**: Collection"}]},"time_entries":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The collection of time entries.\n\n**Resource**: Collection"}]},"types":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The collection of types.\n\n**Resource**: Collection"}]},"user":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The current user resource.\n\n**Resource**: User"}]},"userPreferences":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The current user preferences resource.\n\n**Resource**: UserPreferences"}]},"workPackages":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The work package collection.\n\n**Resource**: Collection"}]}}}},"example":{"_type":"Root","instanceName":"OpenProject","coreVersion":"12.1.0","_links":{"self":{"href":"/api/v3"},"configuration":{"href":"/api/v3/configuration"},"memberships":{"href":"/api/v3/memberships"},"priorities":{"href":"/api/v3/priorities"},"relations":{"href":"/api/v3/relations"},"statuses":{"href":"/api/v3/statuses"},"time_entries":{"href":"/api/v3/time_entries"},"types":{"href":"/api/v3/types"},"user":{"href":"/api/v3/users/3","title":"Anakin Skywalker"},"userPreferences":{"href":"/api/v3/users/3/preferences"},"workPackages":{"href":"/api/v3/work_packages"}}}},"SchemaModel":{"type":"object","required":["_type","_links"],"properties":{"_type":{"type":"string","enum":["Schema"]},"_dependencies":{"type":"array","description":"A list of dependencies between one property's value and another property","items":{"type":"string"}},"_links":{"type":"object","properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This schema\n\n**Resource**: Schema"}]}}}}},"SchemaPropertyModel":{"type":"object","required":["type","name","required","hasDefault","writable"],"properties":{"type":{"type":"string","description":"The resource type for this property."},"name":{"type":"string","description":"The name of the property."},"required":{"type":"boolean","description":"Indicates, if the property is required for submitting a request of this schema."},"hasDefault":{"type":"boolean","description":"Indicates, if the property has a default."},"writable":{"type":"boolean","description":"Indicates, if the property is writable when sending a request of this schema."},"object":{"type":"object","description":"Additional options for the property."},"location":{"type":"string","description":"Defines the json path where the property is located in the payload.","default":""},"_links":{"type":"object","description":"Useful links for this property (e.g. an endpoint to fetch allowed values)"}}},"Schema_For_Global_QueriesModel":{"type":"object","example":{"_type":"Schema","_dependencies":[],"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},"createdAt":{"type":"DateTime","name":"Created on","required":true,"hasDefault":false,"writable":false},"updatedAt":{"type":"DateTime","name":"Updated on","required":true,"hasDefault":false,"writable":false},"user":{"type":"User","name":"User","required":true,"hasDefault":true,"writable":false},"project":{"type":"Project","name":"Project","required":false,"hasDefault":false,"writable":true,"location":"_links","_links":{}},"public":{"type":"Boolean","name":"Public","required":false,"hasDefault":true,"writable":true},"sums":{"type":"Boolean","name":"Sums","required":false,"hasDefault":true,"writable":true},"timelineVisible":{"type":"Boolean","name":"Timeline visible","required":false,"hasDefault":true,"writable":true,"deprecated":true},"timelineZoomLevel":{"type":"String","name":"Timeline zoom level","required":false,"hasDefault":true,"writable":true,"deprecated":true},"timelineLabels":{"type":"QueryTimelineLabels","name":"Timeline labels","required":false,"hasDefault":true,"writable":true,"deprecated":true},"timestamps":{"type":"[]Timestamp","name":"Timestamps","required":false,"hasDefault":true,"writable":true},"highlightingMode":{"type":"String","name":"Highlighting mode","required":false,"hasDefault":true,"writable":true,"deprecated":true},"highlightedAttributes":{"type":"[]QueryColumn","name":"Highlighted attributes","required":false,"hasDefault":true,"writable":true,"location":"_links","deprecated":true},"showHierarchies":{"type":"Boolean","name":"Show hierarchies","required":false,"hasDefault":true,"writable":true,"deprecated":true},"starred":{"type":"Boolean","name":"Starred","required":false,"hasDefault":true,"writable":true},"columns":{"type":"[]QueryColumn","name":"Columns","required":false,"hasDefault":true,"writable":true,"location":"_links","_links":{}},"filters":{"type":"[]QueryFilterInstance","name":"Filters","required":false,"writable":true,"hasDefault":true,"location":"_links","_links":{"allowedValuesSchemas":{"href":"/api/v3/queries/filter_instance_schemas"}}},"groupBy":{"type":"[]QueryGroupBy","name":"Group results by","required":false,"hasDefault":false,"writable":true,"_links":{}},"sortBy":{"type":"[]QuerySortBy","name":"Sort by","required":false,"hasDefault":true,"writable":true,"_links":{}},"results":{"type":"WorkPackageCollection","name":"Results","required":false,"hasDefault":false,"writable":false},"_embedded":{"filtersSchemas":{"_type":"Collection","total":20,"count":20,"_embedded":{"elements":[{"_type":"QueryFilterInstanceSchema","_dependencies":[{"_type":"SchemaDependency","on":"operator","dependencies":{"/api/v3/queries/operators/=":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}},"/api/v3/queries/operators/!":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}},"/api/v3/queries/operators/!*":{},"/api/v3/queries/operators/*":{}}}],"name":{"type":"String","name":"Name","required":true,"hasDefault":true,"writable":false},"filter":{"type":"QueryFilter","name":"Filter","required":true,"hasDefault":false,"writable":true,"_links":{}},"_links":{"self":{"href":"/api/v3/queries/filter_instance_schemas/assignee"},"filter":{"href":"/api/v3/queries/filters/assignee","title":"Assignee"}}},{"_type":"QueryFilterInstanceSchema","_dependencies":[{"_type":"SchemaDependency","on":"operator","dependencies":{"/api/v3/queries/operators/=":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}},"/api/v3/queries/operators/!":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}}}}],"name":{"type":"String","name":"Name","required":true,"hasDefault":true,"writable":false},"filter":{"type":"QueryFilter","name":"Filter","required":true,"hasDefault":false,"writable":true,"_links":{}},"_links":{"self":{"href":"/api/v3/queries/filter_instance_schemas/author"},"filter":{"href":"/api/v3/queries/filters/author","title":"Author"}}}]},"_links":{"self":{"href":"/api/v3/queries/filter_instance_schemas"}}}},"_links":{"self":{"href":"/api/v3/queries/schema"}}}},"Schema_For_Workspace_QueriesModel":{"type":"object","example":{"_type":"Schema","_dependencies":[],"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},"createdAt":{"type":"DateTime","name":"Created on","required":true,"hasDefault":false,"writable":false},"updatedAt":{"type":"DateTime","name":"Updated on","required":true,"hasDefault":false,"writable":false},"user":{"type":"User","name":"User","required":true,"hasDefault":true,"writable":false},"project":{"type":"Workspace","name":"Project","required":false,"hasDefault":false,"writable":true,"_links":{}},"public":{"type":"Boolean","name":"Public","required":false,"hasDefault":true,"writable":true},"sums":{"type":"Boolean","name":"Sums","required":false,"hasDefault":true,"writable":true},"timelineVisible":{"type":"Boolean","name":"Timeline visible","required":false,"hasDefault":true,"writable":true},"timelineZoomLevel":{"type":"String","name":"Timeline zoom level","required":false,"hasDefault":true,"writable":true},"showHierarchies":{"type":"Boolean","name":"Show hierarchies","required":false,"hasDefault":true,"writable":true},"starred":{"type":"Boolean","name":"Starred","required":false,"hasDefault":true,"writable":true},"columns":{"type":"[]QueryColumn","name":"Columns","required":false,"hasDefault":true,"writable":true,"_links":{}},"filters":{"type":"[]QueryFilterInstance","name":"Filters","required":false,"writable":true,"hasDefault":true,"_links":{"allowedValuesSchemas":{"href":"/api/v3/workspaces/42/queries/filter_instance_schemas"}}},"groupBy":{"type":"[]QueryGroupBy","name":"Group results by","required":false,"hasDefault":false,"writable":true,"_links":{}},"sortBy":{"type":"[]QuerySortBy","name":"Sort by","required":false,"hasDefault":true,"writable":true,"_links":{}},"results":{"type":"WorkPackageCollection","name":"Results","required":false,"hasDefault":false,"writable":false},"_embedded":{"filtersSchemas":{"_type":"Collection","total":20,"count":20,"_embedded":{"elements":[{"_type":"QueryFilterInstanceSchema","_dependencies":[{"_type":"SchemaDependency","on":"operator","dependencies":{"/api/v3/queries/operators/=":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}},"/api/v3/queries/operators/!":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}},"/api/v3/queries/operators/!*":{},"/api/v3/queries/operators/*":{}}}],"name":{"type":"String","name":"Name","required":true,"hasDefault":true,"writable":false},"filter":{"type":"QueryFilter","name":"Filter","required":true,"hasDefault":false,"writable":true,"_links":{}},"_links":{"self":{"href":"/api/v3/queries/filter_instance_schemas/assignee"},"filter":{"href":"/api/v3/queries/filters/assignee","title":"Assignee"}}},{"_type":"QueryFilterInstanceSchema","_dependencies":[{"_type":"SchemaDependency","on":"operator","dependencies":{"/api/v3/queries/operators/=":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}},"/api/v3/queries/operators/!":{"values":{"type":"[]User","name":"Values","required":true,"hasDefault":false,"writable":true,"_links":{}}}}}],"name":{"type":"String","name":"Name","required":true,"hasDefault":true,"writable":false},"filter":{"type":"QueryFilter","name":"Filter","required":true,"hasDefault":false,"writable":true,"_links":{}},"_links":{"self":{"href":"/api/v3/queries/filter_instance_schemas/author"},"filter":{"href":"/api/v3/queries/filters/author","title":"Author"}}}]},"_links":{"self":{"href":"/api/v3/workspaces/42/queries/filter_instance_schemas"}}}},"_links":{"self":{"href":"/api/v3/workspaces/42/queries/schema"}}}},"Star_QueryModel":{"type":"object","example":{"_type":"Query","id":9,"name":"fdsfdsfdsf","createdAt":"2015-03-20T12:56:56.085Z","updatedAt":"2015-05-20T18:16:53.619Z","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/<t+","title":"in less than"},"schema":{"href":"/api/v3/queries/filter_instance_schemas/dueDate"}}}],"public":false,"sums":false,"starred":true,"_embedded":{"results":{"_type":"WorkPackageCollection","total":234,"count":30,"pageSize":2,"offset":1,"_embedded":{"elements":["<--- shortened for brevity --->"]},"_links":{"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"},"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},"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"}}}},"_links":{"self":{"href":"/api/v3/queries/9","title":"fdsfdsfdsf"},"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"},"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":null,"title":null},"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/3","title":"copy"}}}},"StatusCollectionModel":{"allOf":[{"$ref":"#/components/schemas/CollectionModel"},{"type":"object","required":["_embedded"],"properties":{"_embedded":{"type":"object","required":["elements"],"properties":{"elements":{"type":"array","items":{"$ref":"#/components/schemas/StatusModel"}}}}}}]},"StatusModel":{"type":"object","properties":{"_type":{"type":"string","enum":["Status"]},"id":{"type":"integer","description":"Status id","minimum":1},"name":{"type":"string","description":"Status name"},"isClosed":{"type":"boolean","description":"Indicates, whether work package of this status are considered closed"},"color":{"type":["string","null"],"format":"hex-code","description":"The color of the status"},"isDefault":{"type":"boolean","description":"True, if this status is the default status for new work packages"},"isReadonly":{"type":"boolean","description":"Indicates, whether work package of this status are readonly"},"excludedFromTotals":{"type":"boolean","description":"Indicates, whether work package of this status are excluded from totals of `Work`, `Remaining work`, and\n`% Complete` in a hierarchy."},"defaultDoneRatio":{"type":"integer","description":"The percentageDone being applied when changing to this status","minimum":0,"maximum":100},"position":{"type":"integer","description":"Sort index of the status"},"_links":{"type":"object","required":["self"],"properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This status\n\n**Resource**: Status"}]}}}}},"StorageCollectionModel":{"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 storage collection\n\n**Resource**: StorageCollectionReadModel"}]}}},"_embedded":{"type":"object","required":["elements"],"properties":{"elements":{"type":"array","items":{"$ref":"#/components/schemas/StorageReadModel"}}}}}}]},"StorageFileModel":{"allOf":[{"$ref":"#/components/schemas/FileLinkOriginDataModel"},{"type":"object","required":["_type","location","_links"],"properties":{"_type":{"type":"string","enum":["StorageFile"]},"location":{"type":"string","description":"Location identification for file in storage"},"_links":{"type":"object","required":["self"],"properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Not provided\n\n**Resource**: urn:openproject-org:api:v3:storages:storage_file:no_link_provided"}]}}}}}],"example":{"id":"42","name":"readme.md","_type":"StorageFile","location":"/readme.md","_links":{"self":{"href":"urn:openproject-org:api:v3:storages:storage_file:no_link_provided"}}}},"StorageFilesModel":{"type":"object","required":["_type","files","parent","ancestors","_links"],"properties":{"_type":{"type":"string","enum":["StorageFiles"]},"files":{"type":"array","items":{"$ref":"#/components/schemas/StorageFileModel"},"description":"List of files provided by the selected storage."},"parent":{"allOf":[{"$ref":"#/components/schemas/StorageFileModel"},{"description":"File of the currently selected parent directory."}]},"ancestors":{"type":"array","items":{"$ref":"#/components/schemas/StorageFileModel"},"description":"List of ancestors of the parent directory. Can be empty, if parent directory was root directory."},"_links":{"type":"object","required":["self"],"properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Not provided\n\n**Resource**: urn:openproject-org:api:v3:storages:storage_file:no_link_provided"}]}}}},"example":{"_type":"StorageFiles","files":[{"id":"42","name":"readme.md","_type":"StorageFile","location":"/readme.md","mimeType":"text/markdown","size":4096,"createdAt":"2021-12-19T09:42:10.170Z","lastModifiedAt":"2021-12-20T14:00:13.987Z","createdByName":"Luke Skywalker","lastModifiedByName":"Anakin Skywalker","_links":{"self":{"href":"urn:openproject-org:api:v3:storages:storage_file:no_link_provided"}}},{"id":"43","name":"readme.pdf","_type":"StorageFile","location":"/readme.pdf","mimeType":"application/pdf","size":2048,"createdAt":"2021-12-19T09:42:10.170Z","lastModifiedAt":"2021-12-20T14:00:13.987Z","createdByName":"Luke Skywalker","lastModifiedByName":"Anakin Skywalker","_links":{"self":{"href":"urn:openproject-org:api:v3:storages:storage_file:no_link_provided"}}}],"parent":{"id":"41","name":"/","_type":"StorageFile","location":"/","mimeType":"application/x-op-directory","size":6144,"createdAt":"2021-12-20T09:42:10.170Z","lastModifiedAt":"2021-12-21T14:00:13.987Z","createdByName":"Luke Skywalker","lastModifiedByName":"Anakin Skywalker","_links":{"self":{"href":"urn:openproject-org:api:v3:storages:storage_file:no_link_provided"}}},"ancestors":[],"_links":{"self":{"href":"urn:openproject-org:api:v3:storages:storage_file:no_link_provided"}}}},"StorageFolderWriteModel":{"type":"object","required":["name","parentId"],"properties":{"name":{"type":"string","description":"Name of the folder to be created"},"parentId":{"type":"string","description":"Unique identifier of the parent folder in which the new folder should be created in"}}},"StorageFileUploadPreparationModel":{"type":"object","required":["projectId","fileName","parent"],"properties":{"projectId":{"type":"integer","description":"The project identifier, from where a user starts uploading a file.","minimum":1},"fileName":{"type":"string","description":"The file name."},"parent":{"type":"string","description":"The directory to which the file is to be uploaded. For root directories, the value `/` must\nbe provided."}}},"StorageFileUploadLinkModel":{"type":"object","required":["_type","_links"],"properties":{"_type":{"type":"string","enum":["UploadLink"]},"_links":{"type":"object","required":["self","destination"],"properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The resource link of the upload link resource.\n\nAs the upload link is a temporal object, and cannot be retrieved again, the\nself link usually is `urn:openproject-org:api:v3:storages:upload_link:no_link_provided`.\n\n**Resource**: UploadLink"}]},"destination":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The direct upload link.\n\n**Resource**: N/A"}]}}}}},"StorageReadModel":{"type":"object","required":["id","_type","name","_links"],"properties":{"id":{"type":"integer","description":"Storage id"},"_type":{"type":"string","enum":["Storage"]},"name":{"type":"string","description":"Storage name"},"storageAudience":{"type":"string","description":"The audience that the storage expects in tokens for requests to it,\nusually the storage's client ID at the identity provider.\n\nThis is only required for authentication through single-sign-on and so far\nonly supported for provider type Nextcloud."},"tokenExchangeScope":{"type":"string","description":"The scope that will be requested when requesting a token for the storage through token exchange. Has no effect if no\ntoken exchange is performed.\n\nThis is only required for authentication through single-sign-on and so far only supported for provider type Nextcloud."},"tenantId":{"type":["string","null"],"description":"The tenant id of a file storage of type OneDrive.\n\nIgnored if the provider type is not OneDrive. May be null if the storage is not configured completely."},"driveId":{"type":["string","null"],"description":"The drive id of a file storage of type OneDrive.\n\nIgnored if the provider type is not OneDrive. May be null if the storage is not configured completely."},"hasApplicationPassword":{"type":"boolean","description":"Whether the storage has the application password to use for the Nextcloud storage.\n\nIgnored if the provider type is not Nextcloud."},"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 storage"},"configured":{"type":"boolean","description":"Indication, if the storage is fully configured"},"_embedded":{"type":"object","properties":{"oauthApplication":{"$ref":"#/components/schemas/OAuthApplicationReadModel"},"oauthClientCredentials":{"$ref":"#/components/schemas/OAuthClientCredentialsReadModel"}}},"_links":{"type":"object","required":["self","type","open","authorizationState"],"properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This storage resource. Contains the user defined storage name as title.\n\n**Resource**: Storage"}]},"type":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The urn of the storage type. Currently Nextcloud and OneDrive storages are supported.\n\n- urn:openproject-org:api:v3:storages:Nextcloud\n- urn:openproject-org:api:v3:storages:OneDrive\n\n**Resource**: N/A"}]},"authenticationMethod":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The urn of the authentication method. Currently only Nextcloud storages support this setting.\n\n- urn:openproject-org:api:v3:storages:authenticationMethod:TwoWayOAuth2 (default)\n- urn:openproject-org:api:v3:storages:authenticationMethod:OAuth2SSO\n\n**Resource**: N/A"}]},"origin":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Web URI of the storage instance. This link is ignored, if the storage is hosted in a cloud and has no own\nURL, like file storages of type OneDrive.\n\n**Resource**: N/A"}]},"open":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"URI of the file storage location, from where the user usually starts browsing files.\n\n**Resource**: N/A"}]},"authorizationState":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The urn of the storage connection state. Can be one of:\n\n- urn:openproject-org:api:v3:storages:authorization:Connected\n- urn:openproject-org:api:v3:storages:authorization:FailedAuthorization\n- urn:openproject-org:api:v3:storages:authorization:Error\n\n**Resource**: N/A"}]},"authorize":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The link to the starting point of the authorization cycle for a configured storage provider.\n\n# Conditions\n\n`authorizationState` is:\n\n- urn:openproject-org:api:v3:storages:authorization:FailedAuthorization\n\n**Resource**: N/A"}]},"oauthApplication":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The OAuth 2 provider application linked to the storage.\n\n# Conditions\n\n- User has role `admin`\n\n**Resource**: OAuthApplication"}]},"oauthClientCredentials":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The OAuth 2 credentials resource linked to the storage.\n\n# Conditions\n\n- User has role `admin`\n\n**Resource**: OAuthClientCredentials"}]}}}}},"StorageWriteModel":{"type":"object","properties":{"name":{"type":"string","description":"Storage name, if not provided, falls back to a default."},"storageAudience":{"type":"string","description":"The audience that the storage expects in tokens for requests to it,\nusually the storage's client ID at the identity provider.\n\nThis is only required for authentication through single-sign-on and so far\nonly supported for provider type Nextcloud."},"tokenExchangeScope":{"type":"string","description":"The scope that will be requested when requesting a token for the storage through token exchange. Has no effect if no\ntoken exchange is performed.\n\nThis is only required for authentication through single-sign-on and so far only supported for provider type Nextcloud."},"applicationPassword":{"type":["string","null"],"description":"The application password to use for the Nextcloud storage. Ignored if the provider type is not Nextcloud.\n\nIf a string is provided, the password is set and automatic management is enabled for the storage.\nIf null is provided, the password is unset and automatic management is disabled for the storage."},"_links":{"type":"object","required":["origin","type"],"properties":{"origin":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The storage's host URL.\n\n**Resource**: N/A"}]},"type":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The urn of the storage type. Currently Nextcloud and OneDrive storages are supported.\n\n- urn:openproject-org:api:v3:storages:Nextcloud\n- urn:openproject-org:api:v3:storages:OneDrive\n\n**Resource**: N/A"}]},"authenticationMethod":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The urn of the authentication method. Currently only Nextcloud storages support this setting.\n\n- urn:openproject-org:api:v3:storages:authenticationMethod:TwoWayOAuth2 (default)\n- urn:openproject-org:api:v3:storages:authenticationMethod:OAuth2SSO\n\n**Resource**: N/A"}]}}}},"example":{"name":"Coruscant","applicationPassword":"qJ_VLNReW@sd-Edz2hyC","_links":{"origin":{"href":"https://nextcloud.deathstar.rocks"},"type":{"href":"urn:openproject-org:api:v3:storages:Nextcloud"}}}},"TimeEntryActivityModel":{"type":"object","required":["_type","id","name","position","default","_embedded","_links"],"properties":{"_type":{"type":"string","enum":["TimeEntriesActivity"]},"id":{"type":"integer","description":"Time entry id","minimum":1},"name":{"type":"string","description":"The human readable name chosen for this activity"},"position":{"type":"integer","description":"The rank the activity has in a list of activities"},"default":{"type":"boolean","description":"Flag to signal whether this activity is the default activity"},"_embedded":{"type":"object","required":["projects"],"properties":{"projects":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/ProjectModel"},{"$ref":"#/components/schemas/ProgramModel"},{"$ref":"#/components/schemas/PortfolioModel"}]}}}},"_links":{"type":"object","required":["self","projects"],"properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This time entry activity\n\n**Resource**: TimeEntriesActivity"}]},"projects":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"One of the projects the time entry is active in.\n\n**Resource**: Project"}]}}}}},"example":{"_type":"TimeEntriesActivity","id":18,"name":"Management","position":8,"default":false,"_embedded":{"projects":[]},"_links":{"self":{"href":"/api/v3/time_entries/activities/18","title":"Management"},"projects":[{"href":"/api/v3/projects/death_star_v2","title":"DeathStarV2"},{"href":"/api/v3/projects/star_killer_base","title":"StarKillerBase"}]}}},"TimeEntryCollectionModel":{"type":"object","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 time entry collection\n\n**Resource**: TimeEntryCollectionModel"}]}}},"_embedded":{"type":"object","required":["elements"],"properties":{"elements":{"type":"array","items":{"$ref":"#/components/schemas/TimeEntryModel"}}}}}}],"example":{"_type":"Collection","total":39,"count":2,"pageSize":2,"offset":1,"_embedded":{"elements":[{"_type":"TimeEntry","id":5,"comment":{"format":"plain","raw":"Some comment","html":"<p>Some comment</p>"},"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":"<p>Another comment</p>"},"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":{"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.\n\nThe time is returned as UTC time, if presented to the user it should be converted to the user's timezone.\n\nThis 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.\n\nThe time is returned as UTC time, if presented to the user it should be converted to the user's timezone.\n\nThis 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\n\n**Resource**: TimeEntry"}]},"updateImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Directly perform edits on this time entry\n\n# Conditions\n\n**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\n\n# Conditions\n\n**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\n\n# Conditions\n\n**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\n\n**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.\n\n**Resource**: Project"}]},"entity":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The entity the time entry is created on\n\n**Resource**: WorkPackage, Meeting"}]},"user":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The user the time entry tracks expenditures for\n\n**Resource**: User"}]},"activity":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The time entry activity the time entry is categorized as\n\n**Resource**: TimeEntriesActivity"}]}}}},"example":{"_type":"TimeEntry","id":42,"comment":{"format":"plain","raw":"The force shall set me free.","html":"<p>The force shall set me free.</p>"},"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\n\n**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\n\n**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/<t+","title":"in less than"},"schema":{"href":"/api/v3/queries/filter_instance_schemas/dueDate"}}}],"public":false,"sums":false,"starred":false,"_embedded":{"results":{"_type":"WorkPackageCollection","total":234,"count":30,"pageSize":2,"offset":1,"_embedded":{"elements":["<--- shortened for brevity --->"]},"_links":{"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"},"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},"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"}}}},"_links":{"self":{"href":"/api/v3/queries/9","title":"fdsfdsfdsf"},"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"},"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":null,"title":null},"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/3","title":"copy"}}}},"UserCollectionModel":{"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 user collection\n\n**Resource**: Collection"}]}}},"_embedded":{"type":"object","required":["elements"],"properties":{"elements":{"type":"array","items":{"$ref":"#/components/schemas/UserModel"}}}}}}],"example":{"_type":"Collection","total":2,"count":2,"_links":{"self":{"href":"/api/v3/users"}},"_embedded":{"elements":[{"_abbreviated":"User resource shortened for brevity","_type":"User","id":1337},{"_abbreviated":"User resource shortened for brevity","_type":"User","id":1338}]}}},"UserCreateModel":{"type":"object","required":["admin","email","login","firstName","lastName","language"],"properties":{"admin":{"type":"boolean"},"email":{"type":"string","maxLength":60},"login":{"type":"string","maxLength":256},"password":{"type":"string","description":"The users password.\n\n*Conditions:*\n\nOnly writable on creation, not on update."},"firstName":{"type":"string","maxLength":30},"lastName":{"type":"string","maxLength":30},"status":{"type":"string","description":"The current activation status of the user.\n\n*Conditions:*\n\nOnly writable on creation, not on update."},"language":{"type":"string"}},"example":{"login":"j.sheppard","password":"idestroyedsouvereign","firstName":"John","lastName":"Sheppard","email":"shep@mail.com","admin":true,"status":"active","language":"en"}},"UserModel":{"allOf":[{"$ref":"#/components/schemas/PrincipalModel"},{"type":"object","required":["_type","avatar"],"properties":{"_type":{"type":"string","enum":["User"]},"avatar":{"type":["string","null"],"format":"uri","description":"URL to user's avatar"},"login":{"type":"string","description":"The user's login name\n\n# Conditions\n\n- User is self, or `create_user` or `manage_user` permission globally","maxLength":256},"firstName":{"type":"string","description":"The user's first name\n\n# Conditions\n\n- User is self, or `create_user` or `manage_user` permission globally","maxLength":30},"lastName":{"type":"string","description":"The user's last name\n\n# Conditions\n\n- User is self, or `create_user` or `manage_user` permission globally","maxLength":30},"email":{"type":"string","description":"The user's email address\n\n# Conditions\n\n- E-Mail address not hidden\n- User is not a new record\n- User is self, or `create_user` or `manage_user` permission globally","maxLength":60},"admin":{"type":"boolean","description":"Flag indicating whether or not the user is an admin\n\n# Conditions\n\n- `admin`"},"status":{"type":"string","description":"The current activation status of the user.\n\n# Conditions\n\n- User is self, or `create_user` or `manage_user` permission globally"},"language":{"type":"string","description":"User's language | ISO 639-1 format\n\n# Conditions\n\n- User is self, or `create_user` or `manage_user` permission globally"},"identityUrl":{"type":["string","null"],"description":"User's identity_url for OmniAuth authentication.\n**Deprecated:** It will be removed in the near future.\n\n# Conditions\n\n- User is self, or `create_user` or `manage_user` permission globally","deprecated":true},"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 user"},"_links":{"type":"object","properties":{"showUser":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A relative path to show the user in the web application.\n\n# Condition\n\n- User is not a new record\n- User is not `locked`"}]},"updateImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A link to update the user resource.\n\n# Conditions\n\n- `admin`"}]},"lock":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Restrict the user from logging in and performing any actions.\n\n# Conditions\n\n- User is not locked\n- `admin`"}]},"unlock":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Allow a locked user to login and act again.\n\n# Conditions\n\n- User is not locked\n- `admin`"}]},"delete":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Permanently remove a user from the instance\n\n# Conditions\n\neither:\n  - `admin`\n  - Setting `users_deletable_by_admin` is set\nor:\n  - User is self\n  - Setting `users_deletable_by_self` is set"}]},"authSource":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Permanently remove a user from the instance\n\n# Conditions\n\n- LDAP authentication configured\n- `admin`"}]}}}}}]},"UserPreferencesModel":{"type":"object","example":{"_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":null}}}]}},"ValuesPropertyModel":{"type":"object","required":["_type","property","value","_links"],"properties":{"_type":{"type":"string","enum":["Values::Property"]},"property":{"type":"string","description":"The key of the key - value pair represented by the Values::Property"},"value":{"type":"string","description":"The value of the key - value pair represented by the Values::Property"},"_links":{"type":"object","required":["self","schema"],"properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This key - value pair.\n\n**Resource**: Storage"}]},"schema":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The schema describing the key - value pair.\n\n**Resource**: Schema"}]}}}}},"VersionCollectionModel":{"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 version collection\n\n**Resource**: Collection"}]}}},"_embedded":{"type":"object","required":["elements"],"properties":{"elements":{"type":"array","items":{"$ref":"#/components/schemas/VersionReadModel"}}}}}}]},"VersionReadModel":{"type":"object","required":["id","_type","name","description","startDate","endDate","status","sharing","createdAt","updatedAt"],"allOf":[{"$ref":"#/components/schemas/CustomFieldProperties"}],"properties":{"id":{"type":"integer","description":"Version id","minimum":1},"_type":{"type":"string","enum":["Version"]},"name":{"type":"string","description":"Version name"},"description":{"$ref":"#/components/schemas/Formattable"},"startDate":{"type":["string","null"],"format":"date"},"endDate":{"type":["string","null"],"format":"date"},"status":{"type":"string","description":"The current status of the version. This could be:\n\n- *open*: if the version is available to be assigned to work packages in all shared projects\n- *locked*: if the version is not finished, but locked for further assignments to work packages\n- *closed*: if the version is finished","enum":["open","locked","closed"]},"sharing":{"type":"string","description":"The indicator of how the version is shared between projects. This could be:\n\n- *none*: if the version is only available in the defining project\n- *descendants*: if the version is shared with the descendants of the defining project\n- *hierarchy*: if the version is shared with the descendants and the ancestors of the defining project\n- *tree*: if the version is shared with the root project of the defining project and all descendants of the root project\n- *system*: if the version is shared globally","enum":["none","descendants","hierarchy","tree","system"]},"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 version"},"_links":{"type":"object","required":["self","schema","definingProject","availableInProjects"],"allOf":[{"$ref":"#/components/schemas/CustomFieldLinkedProperties"}],"properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This version\n\n**Resource**: Version"}]},"schema":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The schema of this version\n\n**Resource**: VersionSchema"}]},"update":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Form endpoint that aids in preparing and performing edits on the version\n\n# Conditions\n\n**Permission**: manage versions"}]},"delete":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Deletes this version\n\n# Conditions\n\n**Permission**: manage versions"}]},"updateImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Directly perform edits on the version\n\n# Conditions\n\n**Permission**: manage versions"}]},"definingProject":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The workspace to which the version belongs\n\n**Resource**: Workspace"}]},"availableInProjects":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Workspaces where this version can be used\n\n**Resource**: Workspace"}]}}}}},"VersionWriteModel":{"type":"object","allOf":[{"$ref":"#/components/schemas/CustomFieldProperties"}],"properties":{"name":{"type":"string","description":"Version name"},"description":{"$ref":"#/components/schemas/Formattable"},"startDate":{"type":["string","null"],"format":"date"},"endDate":{"type":["string","null"],"format":"date"},"status":{"type":"string","description":"The current status of the version. This could be:\n\n- *open*: if the version is available to be assigned to work packages in all shared projects\n- *locked*: if the version is not finished, but locked for further assignments to work packages\n- *closed*: if the version is finished","enum":["open","locked","closed"]},"sharing":{"type":"string","description":"The indicator of how the version is shared between projects. This could be:\n\n- *none*: if the version is only available in the defining project\n- *descendants*: if the version is shared with the descendants of the defining project\n- *hierarchy*: if the version is shared with the descendants and the ancestors of the defining project\n- *tree*: if the version is shared with the root project of the defining project and all descendants of the root project\n- *system*: if the version is shared globally","enum":["none","descendants","hierarchy","tree","system"]},"_links":{"type":"object","allOf":[{"$ref":"#/components/schemas/CustomFieldLinkedProperties"}],"properties":{"definingProject":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The workspace to which the version belongs\n\n**Resource**: Workspace"}]}}}}},"Version_schemaModel":{"type":"object","example":{"_type":"Schema","_dependencies":[],"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":60},"description":{"type":"Formattable","name":"Description","required":false,"hasDefault":false,"writable":true},"startDate":{"type":"Date","name":"Start date","required":false,"hasDefault":false,"writable":true},"endDate":{"type":"Date","name":"Finish date","required":false,"hasDefault":false,"writable":false},"status":{"type":"String","name":"Status","required":true,"hasDefault":false,"writable":true,"visibility":"default","_links":{}},"sharing":{"type":"String","name":"Sharing","required":true,"hasDefault":false,"writable":true,"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},"definingProject":{"type":"Project","name":"Project","required":true,"hasDefault":false,"writable":true,"_links":{}},"customField14":{"type":"String","name":"text CF","required":false,"hasDefault":false,"writable":true,"visibility":"default"},"customField40":{"type":"CustomOption","name":"List CF","required":false,"hasDefault":false,"writable":true,"location":"_links","visibility":"default","_links":{}},"_links":{"self":{"href":"/api/v3/versions/schema"}}}},"Versions_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 versions collection\n\n**Resource**: VersionsCollection","readOnly":true}]}}},"_embedded":{"type":"object","properties":{"elements":{"type":"array","readOnly":true,"items":{"allOf":[{"$ref":"#/components/schemas/VersionReadModel"},{"description":"Collection of Versions"}]}}}}}}]},"View_actionModel":{"type":"object","example":{"_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"]}},"View_capabilitiesModel":{"type":"object","example":{"_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"}},"View_global_contextModel":{"type":"object","example":{"_links":{"self":{"href":"/api/v3/capabilities/context/global"}},"_type":"CapabilityContext::Global","id":"global"}},"View_project_statusModel":{"type":"object","example":{"_type":"ProjectStatus","id":"on_track","name":"On track","_links":{"self":{"href":"/api/v3/project_statuses/on_track"}}}},"View_time_entry_schemaModel":{"type":"object","example":{"_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":{}},"spentOn":{"type":"Date","name":"Date","required":true,"hasDefault":false,"writable":true,"options":{}},"hours":{"type":"Duration","name":"Hours","required":true,"hasDefault":false,"writable":true,"options":{}},"user":{"type":"User","name":"User","required":true,"hasDefault":false,"writable":false,"options":{}},"workPackage":{"type":"WorkPackage","name":"Work package","required":false,"hasDefault":false,"writable":true,"location":"_links","_links":{}},"project":{"type":"Project","name":"Project","required":false,"hasDefault":false,"writable":true,"location":"_links","_links":{}},"activity":{"type":"TimeEntriesActivity","name":"Activity","required":true,"hasDefault":true,"writable":true,"location":"_links","_links":{}},"customField29":{"type":"String","name":"sfsdfsdfsdfsdfdsf","required":false,"hasDefault":false,"writable":true,"options":{"rtl":null}},"_links":{"self":{"href":"/api/v3/time_entries/schema"}}}},"View_user_schemaModel":{"type":"object","example":{"_type":"Schema","_dependencies":[],"id":{"type":"Integer","name":"ID","required":true,"hasDefault":false,"writable":false,"options":{}},"login":{"type":"String","name":"Username","required":true,"hasDefault":false,"writable":true,"minLength":1,"maxLength":255,"options":{}},"admin":{"type":"Boolean","name":"Administrator","required":false,"hasDefault":false,"writable":true,"options":{}},"mail":{"type":"String","name":"Email","required":true,"hasDefault":false,"writable":true,"minLength":1,"maxLength":255,"options":{}},"firstName":{"type":"String","name":"First name","required":true,"hasDefault":false,"writable":false,"minLength":1,"maxLength":255,"options":{}},"lastName":{"type":"String","name":"Last name","required":true,"hasDefault":false,"writable":false,"minLength":1,"maxLength":255,"options":{}},"avatar":{"type":"String","name":"Avatar","required":false,"hasDefault":false,"writable":false,"options":{}},"status":{"type":"String","name":"Status","required":false,"hasDefault":false,"writable":true,"options":{}},"identityUrl":{"type":"String","name":"Identity url","required":false,"hasDefault":false,"writable":true,"options":{}},"language":{"type":"String","name":"Language","required":false,"hasDefault":false,"writable":true,"options":{}},"password":{"type":"Password","name":"Password","required":false,"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":{}},"customField1":{"type":"String","name":"User String CF","required":false,"hasDefault":false,"writable":true},"customField2":{"type":"CustomOption","name":"User List cf","required":false,"hasDefault":false,"writable":true,"location":"_links"},"_links":{"self":{"href":"/api/v3/users/schema"}}}},"WatchersModel":{"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 watcher list\n\n**Resource**: WatchersModel","readOnly":true}]}}},"_embedded":{"type":"object","properties":{"elements":{"type":"array","readOnly":true,"items":{"allOf":[{"$ref":"#/components/schemas/UserModel"},{"description":"Collection of Users"}]}}}}}}],"example":{"_links":{"self":{"href":"/api/v3/work_packages/14/watchers"}},"total":2,"count":2,"_type":"Collection","_embedded":{"elements":[{"_type":"User","_links":{"self":{"href":"/api/v3/users/1","title":"John Sheppard - j.sheppard"},"showUser":{"href":"/users/1","type":"text/html"},"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","name":"John Sheppard","mail":"shep@mail.com","avatar":"https://example.org/users/1/avatar","status":"active","createdAt":"2014-05-21T08:51:20.396Z","updatedAt":"2014-05-21T08:51:20.396Z"},{"_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","name":"Jim Sheppard","mail":"shep@mail.net","avatar":"https://example.org/users/1/avatar","status":"active","createdAt":"2014-05-21T08:51:20.396Z","updatedAt":"2014-05-21T08:51:20.396Z"}]}}},"WeekDayCollectionModel":{"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 week days collection\n\n**Resource**: WeekDayCollectionModel"}]}}},"_embedded":{"type":"object","required":["elements"],"properties":{"elements":{"type":"array","description":"The array of week days.","minItems":7,"maxItems":7,"items":{"$ref":"#/components/schemas/WeekDayModel"}}}}}}],"example":{"_type":"Collection","total":7,"count":7,"_links":{"self":{"href":"/api/v3/days/week"}},"_embedded":{"elements":[{"_type":"WeekDay","day":1,"name":"Monday","working":true,"_links":{"self":{"href":"/api/v3/days/week/1","title":"Monday"}}},{"_type":"WeekDay","day":2,"name":"Tuesday","working":true,"_links":{"self":{"href":"/api/v3/days/week/2","title":"Tuesday"}}},{"_type":"WeekDay","day":3,"name":"Wednesday","working":true,"_links":{"self":{"href":"/api/v3/days/week/3","title":"Wednesday"}}},{"_type":"WeekDay","day":4,"name":"Thursday","working":true,"_links":{"self":{"href":"/api/v3/days/week/4","title":"Thursday"}}},{"_type":"WeekDay","day":5,"name":"Friday","working":true,"_links":{"self":{"href":"/api/v3/days/week/5","title":"Friday"}}},{"_type":"WeekDay","day":6,"name":"Saturday","working":false,"_links":{"self":{"href":"/api/v3/days/week/6","title":"Saturday"}}},{"_type":"WeekDay","day":7,"name":"Sunday","working":false,"_links":{"self":{"href":"/api/v3/days/week/7","title":"Sunday"}}}]}}},"WeekDayCollectionWriteModel":{"type":"object","required":["_type","_embedded"],"properties":{"_type":{"type":"string","enum":["Collection"]},"_embedded":{"type":"object","required":["elements"],"properties":{"elements":{"type":"array","description":"The array of week days.","minItems":1,"maxItems":7,"items":{"allOf":[{"$ref":"#/components/schemas/WeekDayWriteModel"},{"type":"object","required":["_links"],"properties":{"_links":{"allOf":[{"$ref":"#/components/schemas/WeekDaySelfLinkModel"}]}}}]}}}}},"example":{"_type":"Collection","_embedded":{"elements":[{"_type":"WeekDay","working":true,"_links":{"self":{"href":"/api/v3/days/week/1"}}},{"_type":"WeekDay","working":true,"_links":{"self":{"href":"/api/v3/days/week/2"}}},{"_type":"WeekDay","working":true,"_links":{"self":{"href":"/api/v3/days/week/4"}}},{"_type":"WeekDay","working":false,"_links":{"self":{"href":"/api/v3/days/week/6"}}},{"_type":"WeekDay","working":false,"_links":{"self":{"href":"/api/v3/days/week/7"}}}]}}},"WeekDayModel":{"type":"object","required":["_type","day","name","working"],"properties":{"_type":{"type":"string","enum":["WeekDay"]},"day":{"type":"integer","description":"The week day from 1 to 7. 1 is Monday. 7 is Sunday.","readOnly":true,"minimum":1,"maximum":7},"name":{"type":"string","description":"The week day name."},"working":{"type":"boolean","description":"`true` for a working week day, `false` otherwise."},"_links":{"allOf":[{"$ref":"#/components/schemas/WeekDaySelfLinkModel"}]}},"example":{"_type":"WeekDay","day":5,"name":"Friday","working":false,"_links":{"self":{"href":"/api/v3/day/week/5","title":"Friday"}}}},"WeekDaySelfLinkModel":{"type":"object","description":"Identify a particular week day by its href.","properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This week day resource link.\n\n**Resource**: WeekDay","readOnly":true}]}},"example":{"self":{"href":"/api/v3/days/week/3","title":"Wednesday"}}},"WeekDayWriteModel":{"type":"object","description":"Describes a week day as a working day or a non-working day (weekend).","required":["_type","working"],"properties":{"_type":{"type":"string","enum":["WeekDay"]},"working":{"type":"boolean","description":"`true` for a working day. `false` for a weekend day."}},"example":{"_type":"WeekDay","working":false}},"Wiki_PageModel":{"type":"object","required":["title"],"properties":{"id":{"type":"integer","description":"Identifier of this wiki page","readOnly":true,"exclusiveMinimum":0},"title":{"type":"string","description":"The wiki page's title"},"_links":{"type":"object","properties":{"addAttachment":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Attach a file to the wiki page\n\n# Conditions\n\n**Permission**: edit wiki page","readOnly":true}]}}}},"example":{"_type":"WikiPage","id":72,"title":"A wiki page with a name","_embedded":{"project":{"_type":"Project...","id":12}},"_links":{"self":{"href":"/api/v3/wiki_pages/72"},"attachments":{"href":"/api/v3/wiki_pages/72/attachments"},"addAttachment":{"href":"/api/v3/wiki_pages/72/attachments","method":"post"},"project":{"href":"/api/v3/projects/12","title":"some project"}}}},"WorkPackageModel":{"type":"object","required":["subject","_links"],"properties":{"id":{"type":"integer","description":"Work package id","readOnly":true,"minimum":1},"lockVersion":{"type":"integer","description":"The version of the item as used for optimistic locking","readOnly":true},"subject":{"type":"string","description":"Work package subject"},"_type":{"type":"string","enum":["WorkPackage"],"readOnly":true},"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\nmode when false. Can be automatic only when predecessors or children are\npresent."},"readonly":{"type":"boolean","description":"If true, the work package is in a readonly status so with the exception of the status, no other property can be altered."},"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"},"date":{"type":["string","null"],"format":"date","description":"Date on which a milestone is achieved"},"derivedStartDate":{"type":["string","null"],"format":"date","description":"Similar to start date but is not set by a client but rather deduced by the work packages' descendants. If manual scheduleManually is active, the two dates can deviate.","readOnly":true},"derivedDueDate":{"type":["string","null"],"format":"date","description":"Similar to due date but is not set by a client but rather deduced by the work packages' descendants. If manual scheduleManually is active, the two dates can deviate.","readOnly":true},"duration":{"type":["string","null"],"format":"duration","description":"**(NOT IMPLEMENTED)** The amount of time in hours the work package needs to be completed.\nNot available for milestone type of work packages.","readOnly":true},"estimatedTime":{"type":["string","null"],"format":"duration","description":"Time a work package likely needs to be completed excluding its descendants"},"derivedEstimatedTime":{"type":["string","null"],"format":"duration","description":"Time a work package likely needs to be completed including its descendants","readOnly":true},"ignoreNonWorkingDays":{"type":"boolean","description":"**(NOT IMPLEMENTED)** When scheduling, whether or not to ignore the non working days being defined.\nA work package with the flag set to true will be allowed to be scheduled to a non working day.","readOnly":true},"spentTime":{"type":"string","format":"duration","description":"The time booked for this work package by users working on it\n\n# Conditions\n\n**Permission** view time entries","readOnly":true},"percentageDone":{"type":["integer","null"],"description":"Amount of total completion for a work package","minimum":0,"maximum":100},"derivedPercentageDone":{"type":["integer","null"],"description":"Amount of total completion for a work package derived from itself and its descendant work packages","readOnly":true,"minimum":0,"maximum":100},"createdAt":{"type":"string","format":"date-time","description":"Time of creation. Can be writable by admins with the `apiv3_write_readonly_attributes` setting enabled.","readOnly":true},"updatedAt":{"type":"string","format":"date-time","description":"Time of the most recent change to the work package.","readOnly":true},"_links":{"type":"object","required":["self","schema","ancestors","author","priority","project","status","type"],"properties":{"addComment":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Post comment to WP\n\n# Conditions\n\n**Permission**: add work package notes","readOnly":true}]},"addRelation":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Adds a relation to this work package.\n\n# Conditions\n\n**Permission**: manage wp relations","readOnly":true}]},"addWatcher":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Add any user to WP watchers\n\n# Conditions\n\n**Permission**: add watcher","readOnly":true}]},"customActions":{"type":"array","readOnly":true,"items":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A predefined action that can be applied to the work package.\n\n**Resource**: CustomAction","readOnly":true}]}},"previewMarkup":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Post markup (in markdown) here to receive an HTML-rendered response","readOnly":true}]},"removeWatcher":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Remove any user from WP watchers\n\n# Conditions\n\n**Permission**: delete watcher","readOnly":true}]},"delete":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Delete this work package\n\n# Conditions\n\n**Permission**: delete_work_packages","readOnly":true}]},"logTime":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Create time entries on the work package\n\n# Conditions\n\n**Permission**: log_time or log_own_time","readOnly":true}]},"move":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Link to page for moving this work package\n\n# Conditions\n\n**Permission**: move_work_packages","readOnly":true}]},"copy":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Link to page for copying this work package\n\n# Conditions\n\n**Permission**: add_work_packages","readOnly":true}]},"unwatch":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Remove current user from WP watchers\n\n# Conditions\n\nlogged in; watching","readOnly":true}]},"update":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Form endpoint that aids in preparing and performing edits on a work package\n\n# Conditions\n\n**Permission**: edit work package","readOnly":true}]},"updateImmediately":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Directly perform edits on a work package\n\n# Conditions\n\n**Permission**: edit work package","readOnly":true}]},"watch":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Add current user to WP watchers\n\n# Conditions\n\nlogged in; not watching","readOnly":true}]},"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This work package\n\n**Resource**: WorkPackage","readOnly":true}]},"schema":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The schema of this work package\n\n**Resource**: Schema","readOnly":true}]},"ancestors":{"type":"array","readOnly":true,"items":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A visible ancestor work package of the current work package.\n\n**Resource**: WorkPackage\n\n# Conditions\n\n**Permission** view work packages","readOnly":true}]}},"attachments":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The files attached to this work package\n\n**Resource**: Collection\n\n# Conditions\n\n- **Setting**: deactivate_work_package_attachments set to false in related workspace"}]},"addAttachment":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Attach a file to the work package\n\n# Conditions\n\n- **Permission**: edit work package","readOnly":true}]},"prepareAttachment":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Attach a file to the work package\n\n# Conditions\n\n- **Setting**: direct uploads enabled","readOnly":true}]},"author":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The person that created the work package\n\n**Resource**: User","readOnly":true}]},"assignee":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The person that is intended to work on the work package\n\n**Resource**: User"}]},"availableWatchers":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"All users that can be added to the work package as watchers.\n\n**Resource**: User\n\n# Conditions\n\n**Permission** add work package watchers","readOnly":true}]},"budget":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The budget this work package is associated to\n\n**Resource**: Budget\n\n# Conditions\n\n**Permission** view cost objects"}]},"category":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The category of the work package\n\n**Resource**: Category"}]},"children":{"type":"array","readOnly":true,"items":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"A visible child work package of the current work package.\n\n**Resource**: WorkPackage\n\n# Conditions\n\n**Permission** view work packages","readOnly":true}]}},"addFileLink":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Add a file link to the work package\n\n# Conditions\n\n**Permission**: manage_file_links"}]},"fileLinks":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Gets the file link collection of this work package\n\n# Conditions\n\n**Permission**: view_file_links"}]},"parent":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Parent work package\n\n**Resource**: WorkPackage"}]},"priority":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The priority of the work package\n\n**Resource**: Priority"}]},"project":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The workspace to which the work package belongs\n\n**Resource**: Workspace"}]},"projectPhase":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The project phase to which the work package belongs\n\n**Resource**: ProjectPhase"}]},"projectPhaseDefinition":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The definition of the project phase the work package belongs to\n\n**Resource**: ProjectPhaseDefinition"}]},"responsible":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The person that is responsible for the overall outcome\n\n**Resource**: User"}]},"relations":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Relations this work package is involved in\n\n**Resource**: Relation\n\n# Conditions\n\n**Permission** view work packages","readOnly":true}]},"revisions":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Revisions that are referencing the work package\n\n**Resource**: Revision\n\n# Conditions\n\n**Permission** view changesets","readOnly":true}]},"status":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The current status of the work package\n\n**Resource**: Status"}]},"timeEntries":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"All time entries logged on the work package. Please note that this is a link to an HTML resource for now and as such, the link is subject to change.\n\n**Resource**: N/A\n\n# Conditions\n\n**Permission** view time entries","readOnly":true}]},"type":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The type of the work package\n\n**Resource**: Type"}]},"version":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The version associated to the work package\n\n**Resource**: Version"}]},"watchers":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"All users that are currently watching this work package\n\n**Resource**: Collection\n\n# Conditions\n\n**Permission** view work package watchers","readOnly":true}]}}}},"example":{"_type":"WorkPackage","_links":{"self":{"href":"/api/v3/work_packages/1528","title":"Develop API"},"schema":{"href":"/api/v3/work_packages/schemas/11-2"},"update":{"href":"/api/v3/work_packages/1528","method":"patch","title":"Update Develop API"},"delete":{"href":"/work_packages/bulk?ids=1528","method":"delete","title":"Delete Develop API"},"logTime":{"href":"/work_packages/1528/time_entries/new","type":"text/html","title":"Log time on Develop API"},"move":{"href":"/work_packages/1528/move/new","type":"text/html","title":"Move Develop API"},"attachments":{"href":"/api/v3/work_packages/1528/attachments"},"addAttachment":{"href":"/api/v3/work_packages/1528/attachments","method":"post"},"author":{"href":"/api/v3/users/1","title":"OpenProject Admin - admin"},"customActions":[{"href":"/api/v3/work_packages/1528/custom_actions/153/execute","method":"post","title":"Reset"},{"href":"/api/v3/work_packages/1528/custom_actions/94/execute","method":"post","title":"Forward to accounting"}],"responsible":{"href":"/api/v3/users/23","title":"Laron Leuschke - Alaina5788"},"relations":{"href":"/api/v3/work_packages/1528/relations","title":"Show relations"},"revisions":{"href":"/api/v3/work_packages/1528/revisions"},"assignee":{"href":"/api/v3/users/11","title":"Emmie Okuneva - Adele5450"},"priority":{"href":"/api/v3/priorities/2","title":"Normal"},"project":{"href":"/api/v3/portfolio/1","title":"A Test Portfolio"},"status":{"href":"/api/v3/statuses/1","title":"New"},"type":{"href":"/api/v3/types/1","title":"A Type"},"version":{"href":"/api/v3/versions/1","title":"Version 1"},"availableWatchers":{"href":"/api/v3/work_packages/1528/available_watchers"},"watch":{"href":"/api/v3/work_packages/1528/watchers","method":"post","payload":{"user":{"href":"/api/v3/users/1"}}},"addWatcher":{"href":"/api/v3/work_packages/1528/watchers","method":"post","payload":{"user":{"href":"/api/v3/users/{user_id}"}},"templated":true},"removeWatcher":{"href":"/api/v3/work_packages/1528/watchers/{user_id}","method":"delete","templated":true},"addRelation":{"href":"/api/v3/relations","method":"post","title":"Add relation"},"changeParent":{"href":"/api/v3/work_packages/694","method":"patch","title":"Change parent of Bug in OpenProject"},"addComment":{"href":"/api/v3/work_packages/1528/activities","method":"post","title":"Add comment"},"parent":{"href":"/api/v3/work_packages/1298","title":"nisi eligendi officiis eos delectus quis voluptas dolores"},"category":{"href":"/api/v3/categories/1298","title":"eligend isi"},"children":[{"href":"/api/v3/work_packages/1529","title":"Write API documentation"}],"ancestors":[{"href":"/api/v3/work_packages/1290","title":"Root node of hierarchy"},{"href":"/api/v3/work_packages/1291","title":"Intermediate node of hierarchy"},{"href":"/api/v3/work_packages/1298","title":"nisi eligendi officiis eos delectus quis voluptas dolores"}],"timeEntries":{"href":"/work_packages/1528/time_entries","type":"text/html","title":"Time entries"},"watchers":{"href":"/api/v3/work_packages/1528/watchers"},"customField3":{"href":"api/v3/users/14"}},"id":1528,"subject":"Develop API","description":{"format":"markdown","raw":"Develop super cool OpenProject API.","html":"<p>Develop super cool OpenProject API.</p>"},"scheduleManually":false,"readonly":false,"startDate":null,"dueDate":null,"derivedStartDate":null,"derivedDueDate":null,"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\nan 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\nvalid."}}},"_links":{"type":"object","properties":{"self":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"This form endpoint\n\n**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.\n\nTODO: 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"},"project":{"$ref":"#/components/schemas/SchemaPropertyModel"},"projectPhase":{"$ref":"#/components/schemas/SchemaPropertyModel"},"projectPhaseDefinition":{"$ref":"#/components/schemas/SchemaPropertyModel"},"parent":{"$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\n\n**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\npackage 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\nmode when false. Can be automatic only when predecessors or children are\npresent."},"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`,\nand any the value will get floored to the nearest day.\n\nThe duration has no effect, unless either a start date or a due date is set.\n\nNot available for milestone type of work packages."},"ignoreNonWorkingDays":{"type":"boolean","description":"When scheduling, whether or not to ignore the non working days being defined.\nA 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\n\n**Resource**: Category"}]},"type":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The type of the work package\n\n**Resource**: Type"}]},"priority":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The priority of the work package\n\n**Resource**: Priority"}]},"project":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The project to which the work package belongs\n\n**Resource**: Project"}]},"status":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The current status of the work package\n\n**Resource**: Status"}]},"responsible":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The person that is responsible for the overall outcome\n\n**Resource**: User"}]},"assignee":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The person that is intended to work on the work package\n\n**Resource**: User"}]},"version":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"The version associated to the work package\n\n**Resource**: Version"}]},"parent":{"allOf":[{"$ref":"#/components/schemas/Link"},{"description":"Parent work package\n\n**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\nthey are provided in the request body. This overrides the default behavior where only custom fields included\nin the request are validated. Use this parameter when you need to ensure all required custom fields have\nvalid 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":"<p>Lorem ipsum dolor sit amet.</p>"},"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":"<p>Lorem ipsum dolor sit amet.</p>"},"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\n\n**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.\nOnly includes custom fields visible to the current user."}}},"description":"Defines the organizational structure of project custom fields into sections for UI rendering.\n\nEach attribute group represents a project attribute section containing related project attributes.\nThe sections determine how project attributes are visually organized and grouped in forms.\n\n**Key behaviors:**\n- Admin-only project attributes appear only for users with admin privileges\n- Empty sections (with no accessible project attributes) are omitted from the response\n- The order reflects the configured section positioning in admin settings\n- Each section contains only project attributes assigned to that specific section\n\n**Example structure:**\n```json\n[\n  {\n    \"_type\": \"ProjectFormCustomFieldSection\",\n    \"name\": \"Project Details\",\n    \"attributes\": [\"customField1\", \"customField3\"]\n  },\n  {\n    \"_type\": \"ProjectFormCustomFieldSection\",\n    \"name\": \"Budget Information\",\n    \"attributes\": [\"customField2\", \"customField4\"]\n  }\n]\n```"},"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"}}}}}},"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"},"_links":{"self":{"href":"/api/v3/workspaces/schema"}}}}},"securitySchemes":{"BasicAuth":{"type":"http","scheme":"basic"}}},"tags":[{"description":"## Links\n\nLinks to other resources in the API are represented uniformly by so called link objects.\n\n### Local Properties\n\n| Property  | Description                                                              | Type    | Required | Nullable | Default     |\n|:---------:| ------------------------------------------------------------------------ | ------- |:--------:|:--------:| ----------- |\n| href      | URL to the referenced resource (might be relative)                       | String  |    ✓     |    ✓     |             |\n| title     | Representative label for the resource                                    | String  |          |          |             |\n| templated | If true the `href` contains parts that need to be replaced by the client | Boolean |          |          | false       |\n| method    | The HTTP verb to use when requesting the resource                        | String  |          |          | GET         |\n| payload   | The payload to send in the request to achieve the desired result         | String  |          |          | unspecified |\n| identifier| An optional unique identifier to the link object                         | String  |          |          | unspecified |\n\nAll link objects *must* contain the `href` property, though it might be `null`. Thus the following is a valid\nlink object: `{ \"href\": null }`  whereas `{ }` is not a valid link object.\nThe meaning of `\"href\": null` is that **no** resource is referenced.\nFor example a work package without an assignee will still have an assignee link, but its `href` will be `null`.\n\nIf a `title` is present, the client can display the title to the user when referring to the resource.\n\nTemplated links are links that contain client replaceable parts. Replaceable parts are enclosed in braces. For example\nthe link `api/v3/example/{id}` is not complete in itself, but the client needs to replace the string `{id}` itself.\nAs of now the API does not indicate the valid replacement values.\n\nThe `method` indicates which HTTP verb the client *must* use when following the link for the intended purpose.\n\nIf a `payload` is specified, it needs to be sent as the body of the request to achieve the desired result (e.g. perform the\naction represented by the link). If no `payload` is specified, there is either no payload to send or a valid payload is not specified\nby the link object. A payload might also be templated slightly. If the `templated` property is true, a payload might contain replaceable parts\nin its strings (e.g. `{ \"href\": \"/api/v3/examples/{example_id}\" }`).\n\nNote: When writing links (e.g. during a `PATCH` operation) only changes to `href` are accepted.\nChanges to all other properties will be **silently ignored**.\n\nFor resources invisible to the client (e.g. because of missing permissions), a link will contain\nthe uri `urn:openproject-org:api:v3:undisclosed` instead of a url. This indicates the existence of a value\nwithout revealing the actual value. An example for this is the parent project. A project resource which itself might be\nvisible to the client can have a reference to a parent project invisible to the same client. Revealing the existence of\na parent over hiding has the benefit of allowing the client to make an informed decision of whether to keep the existing reference\nor updating it. Sending ‘{ \"href\": \"urn:openproject-org:api:v3:undisclosed\" }` for a resource will have the effect of keeping the\noriginal value. This is especially beneficial if the client creates and updates resources based on the payload object provided\nas part of a form as is recommended when interacting with the API.\n\n## Errors\n\nIn case of an error, the API will respond with an appropriate HTTP status code.\nFor responses with an HTTP status of `4xx` and `5xx` the body will always contain a single error object.\nError objects shall give the client additional details about the cause of an erroneous response.\n\n### General errors\n\n* Error objects have their `_type` set to `Error`\n\n* The `errorIdentifier` serves as a unique (and machine readable) identifier for a specific error cause\n    * There *may* be multiple possible error identifiers per HTTP status code\n    * There *may* be multiple possible HTTP status codes per error identifier\n    * The \"List of Error Identifiers\" defines the possible mappings between HTTP status and error identifier\n\n* The `message` contains a human readable concise message describing the error\n    * It *optionally* includes specific information, for example which permission would have been needed to perform an action\n    * It is localized depending on the users preferences\n    * It *must not* include HTML or other kind of markup\n    * Error messages form complete sentences including punctuation\n\n#### Example\n\n```json\n{\n  \"_type\": \"Error\",\n  \"errorIdentifier\": \"urn:openproject-org:api:v3:errors:InternalServerError\",\n  \"message\": \"An internal server error occurred. This is not your fault.\"\n}\n```\n\n### Embedded error information\n\nErrors might optionally contain embedded objects that contain further information.\n\n#### Error details\n\nUnder the embedded key `details` there might be an object describing the error more verbosely. For example if the\nerror affects a specific field, this field could be defined there.\n\n##### Example\n\n```json\n{\n  \"_type\": \"Error\",\n  \"errorIdentifier\": \"urn:openproject-org:api:v3:examples:ExampleError\",\n  \"message\": \"This is an example error.\",\n  \"_embedded\": {\n    \"details\": {\n      \"_type\": \"ExampleErrorDetailInformation\",\n      \"erroneousField\": \"subject\"\n    }\n  }\n}\n```\n\n#### Multiple error objects\n\nTo ease implementation of basic clients it is guaranteed that the response body always only contains a single error object.\nHowever it is allowed that an error object *embeds* other error objects under the key `errors`, thereby aggregating them.\n\nThe `errorIdentifier` of such an object is always `urn:openproject-org:api:v3:errors:MultipleErrors`. The message can either describe one of the\nembedded errors or simply state that multiple errors occurred.\n\n##### Example\n\n```json\n{\n  \"_type\": \"Error\",\n  \"errorIdentifier\": \"urn:openproject-org:api:v3:errors:MultipleErrors\",\n  \"message\": \"Multiple fields violated their constraints.\",\n  \"_embedded\": {\n    \"errors\": [\n      {\n        \"_type\": \"Error\",\n        \"errorIdentifier\": \"urn:openproject-org:api:v3:errors:PropertyConstraintViolation\",\n        \"...\": \"...\"\n      },\n      {\n        \"_type\": \"Error\",\n        \"errorIdentifier\": \"urn:openproject-org:api:v3:errors:PropertyConstraintViolation\",\n        \"...\": \"...\"\n      }\n    ]\n  }\n}\n```\n\n### List of Error Identifiers\n\n* `urn:openproject-org:api:v3:errors:InvalidQuery` (**HTTP 400**)\nThe query contained a value that did not match the servers expectation\n\n* `urn:openproject-org:api:v3:errors:InvalidRenderContext` (**HTTP 400**)\nThe client specified a rendering context that does not exist\n\n* `urn:openproject-org:api:v3:errors:InvalidRequestBody` (**HTTP 400**)\nThe format of the request body did not match the servers expectation\n\n* `urn:openproject-org:api:v3:errors:InvalidSignal` (**HTTP 400**)\nThe client specified a select not available on the resource, e.g because the property/link does not exist on it.\n\n* `urn:openproject-org:api:v3:errors:InvalidUserStatusTransition` (**HTTP 400**)\nThe client used an invalid transition in the attempt to change the status of a user account.\n\n* `urn:openproject-org:api:v3:errors:Unauthenticated` (**HTTP 401**)\nThe client has to authenticate to access the requested resource.\n\n* `urn:openproject-org:api:v3:errors:MissingPermission` (**HTTP 403**)\nThe client does not have the needed permissions to perform the requested action\n\n* `urn:openproject-org:api:v3:errors:NotFound` (**HTTP 404**)\nDefault for HTTP 404 when no further information is available\n\n* `urn:openproject-org:api:v3:errors:UpdateConflict` (**HTTP 409**)\nThe resource changed between GET-ing it and performing an update on it\n\n* `urn:openproject-org:api:v3:errors:TypeNotSupported` (**HTTP 415**)\nThe request contained data in an unsupported media type (Content-Type)\n\n* `urn:openproject-org:api:v3:errors:PropertyConstraintViolation` (**HTTP 422**)\nThe client tried to set a property to an invalid value\n\n* `urn:openproject-org:api:v3:errors:PropertyIsReadOnly` (**HTTP 422**)\nThe client tried to set or change a property that is not writable\n\n* `urn:openproject-org:api:v3:errors:PropertyFormatError` (**HTTP 422**)\nA property value was provided in a format that the server does not understand or accept\n\n* `urn:openproject-org:api:v3:errors:PropertyMissingError` (**HTTP 422**)\nThe request is syntactically correct, but is missing a property to perform the requested action\n\n* `urn:openproject-org:api:v3:errors:PropertyValueNotAvailableAnymore` (**HTTP 422**)\nAn unchanged property needs to be changed, because other changes to the resource make it unavailable\n\n* `urn:openproject-org:api:v3:errors:ResourceTypeMismatch` (**HTTP 422**)\nA link to a resource of a specific type was expected, but the link to another type of resource was provided\n\n* `urn:openproject-org:api:v3:errors:InternalServerError` (**HTTP 500**)\nDefault for HTTP 500 when no further information is available\n\n* `urn:openproject-org:api:v3:errors:MultipleErrors`\nMultiple errors occurred. See the embedded `errors` array for more details.\n\n## Formattable Text\n\nOpenProject supports text formatting in Markdown. Properties that contain formattable text have a special representation in this API. In this specification their\ntype is indicated as `Formattable`. Their representation contains the following properties:\n\n| Property | Description                                        | Type   | Example                            | Supported operations |\n|:--------:| -------------------------------------------------- | ------ | ---------------------------------- | -------------------- |\n| format   | Indicates the formatting language of the raw text  | String | markdown                           | READ                 |\n| raw      | The raw text, as entered by the user               | String | `I **am** formatted!`              | READ / WRITE         |\n| html     | The text converted to HTML according to the format | String | `I <strong>am</strong> formatted!` | READ                 |\n\n`format` can as of today have one of the following values:\n\n* `plain` - only basic formatting, e.g. inserting paragraphs and line breaks into HTML\n\n* `markdown` - formatting using Markdown\n\n* `custom` - There is no apparent formatting rule that transforms the raw version to HTML (only used for read only properties)\n\nNote that `raw` is the only property supporting the **write** operation. A property of type *Formattable* that\nis marked as **read and write**, will only accept changes to the `raw` property. Changes to `format` and `html` will be **silently ignored**.\nIt is thus sufficient to solely provide the `raw` property for changes.\n\nIf the *Formattable* is marked as **read only**, the `raw` attribute also becomes **read only**.\n\n### Example\n\n```json\n{\n  \"format\": \"markdown\",\n  \"raw\": \"I **am** formatted!\",\n  \"html\": \"I <strong>am</strong> formatted!\"\n}\n```\n\n## Dates, Times, Durations and Timestamps\n\nRepresentation of time related values in this API is done according to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).\nIn this specification the following terms will be used as type specifiers (e.g. in tables):\n\n* `Date` - refers to an ISO 8601 date, e.g. \"2014-05-21\"\n\n* `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\"\n\n* `Duration` - refers to an ISO 8601 duration, e.g. \"P1DT18H\"\n\n* `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\".\nThe following shorthand values are also being parsed as duration: \"1d\", \"1w\", \"1m\", \"1y\", \"1y-2m\", \"-2y\".\nIt 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\"`.\nThe `\"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\nassociated with the time, e.g. `\"oneMonthAgo@21:00+02:00\"` means a +2 hour timezone offset from UTC.\nThe offset can be positive or negative e.g.\"oneDayAgo@01:00+01:00\", \"oneDayAgo@01:00-01:00\".\nValues older than 1 day are accepted only with valid Enterprise Token available.\n\n## Colors\n\nColors are represented in RGB using hexadecimal notation as specified in [CSS Color Module Level 3](https://www.w3.org/TR/css3-color/).\nThat is a `#` followed by either three or six hexadecimal digits.\n\n### Example\n\n```\n    red:   #ff0000 or #f00\n    green: #00ff00 or #0f0\n    black: #000000 or #000\n    white: #ffffff or #fff\n```\n\n## Digests\n\nDigests (or Hashes) are one way functions that map data of arbitrary size to data of a fixed size.\nIn OpenProject they are for example used to calculate checksums for (attachment) files.\nThe checksum calculated depends on the hashed data and the algorithm used as hash function.\n\nTherefore all digests are represented in the following form:\n\n| Property  | Description                                        | Type   | Example                            |\n|:---------:| -------------------------------------------------- | ------ | ---------------------------------- |\n| algorithm | The algorithm used to compute the digest           | String | md5                                |\n| hash      | The calculated digest in hexadecimal notation      | String | 64c26a8403cd796ea4cf913cda2ee4a9   |\n\n### Example\n\n```json\n{\n  \"algorithm\": \"md5\",\n  \"hash\": \"64c26a8403cd796ea4cf913cda2ee4a9\"\n}\n```","name":"Basic Objects"},{"description":"Whenever a client calls a resource that can return more than one element, it will receive a collection of elements.\nHowever as collections can become quite large, the API will **not** simply return a JSON array, but a special collection\nobject that will contain the actual elements in its embedded property `elements`.\n\nCollections *may* be paginated, this means that a single response from the server will not contain all elements of the collection,\nbut only a subset. In this case the client can issue further requests to retrieve the remaining elements.\nThere are two ways to access the result pages of a paginated collection:\n\n* offset based pagination\n\n* cursor based pagination\n\nThe available ways of pagination depend on the collection queried. Some collections feature no pagination at all, meaning they\nwill always return all elements. Others might only offer one of the two pagination methods or both of them.\n\nA collection also carries meta information like the total count of elements in the collection or - in case of a paginated collection -\nthe amount of elements returned in this response and action links to retrieve the remaining elements.\n\n## Local Properties\n\n| Property | Description                                                     | Type    | Availability                |\n|:--------:| --------------------------------------------------------------- | ------- | --------------------------- |\n| total    | The total amount of elements available in the collection        | Integer | always                      |\n| pageSize | Amount of elements that a response will hold                    | Integer | when paginated              |\n| count    | Actual amount of elements in this response                      | Integer | always                      |\n| offset   | The page number that is requested from paginated collection     | Integer | when offset based available |\n| groups   | Summarized information about aggregation groups                 | Object  | when grouping               |\n| totalSums| Aggregations of supported values for elements of the collection | Object  | when showing sums           |\n\n## Links\n\n| Link             | Description                                                              | Availability                |\n|:----------------:| ------------------------------------------------------------------------ | --------------------------- |\n| self             | Link to the current page in the collection                               | always                      |\n| changeSize       | Templated link to change the page size, might change relative position   | when paginated              |\n| jumpTo           | Templated link to jump to a specified offset                             | when offset based available |\n| nextByOffset     | Link to retrieve the following page of elements (offset based)           | when offset based available |\n| previousByOffset | Link to retrieve the preceding page of elements (offset based)           | when offset based available |\n| nextByCursor     | Link to retrieve the elements following the current page (cursor based)  | when cursor based available |\n| 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.\n\nThey all share the following basic properties:\n\n- 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\n\n- You can combine any number of distinct filters can be added to the endpoint definitions in this API documentation\n\n- A combination of filter objects are treated as an AND filter. OR filters are not yet possible in a single query.\n\n## Filter syntax\n\nThe 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:\n\n```json5\n[\n  { \"<filter name>\": { \"operator\": \"<operator>\", \"values\": [<value>, ...] } },\n  // ...\n]\n```\n\n**Example**\n\nFiltering the work packages API endpoint for a work package that matches the subject or ID \"12\" and has a status with the ID=5.\n\n```json\n[\n  { \"subjectOrId\": { \"operator\": \"**\", \"values\": [\"12\"] } },\n  { \"status\": { \"operator\": \"=\", \"values\": [\"5\"] } }\n]\n```\n\nWith the above JSON stringified and URL-encoded, this can be added to the `/api/v3/work_packages` endpoint using the `filter` parameter to form the URL:\n\n```\nhttps://community.openproject.org/api/v3/work_packages?filters=%5B%7B%22subjectOrId%22:%7B%22operator%22:%22**%22,%22values%22:%5B%2212%22%5D%7D%7D,%7B%22status%22:%7B%22operator%22:%22=%22,%22values%22:%5B%225%22%5D%7D%7D%5D\n```\n\n## Compression\n\nAs the above can become quite long, especially if a lot of filter values are included, the API offers to wrap all query props into a zlib compressed and base64 encoded property (`eprops`).\nThe property will then not only include the filter but the complete query props set (e.g. `pageSize`, `offset` and `columns`. So `eprops` is then a JSON object that is compressed and encoded.\n\n**Example**\n\nInstead of the request\n\n```\nhttps://community.openproject.org/api/v3/work_packages?filters=[%7B%22subjectOrId%22:%7B%22operator%22:%22**%22,%22values%22:[%2212%22]%7D%7D,%7B%22status%22:%7B%22operator%22:%22=%22,%22values%22:[%225%22]%7D%7D]&pageSize=10&sortBy=[[%22id%22,%20%22asc%22]]\n```\n\nWhich in a non URL encoded style would be\n\n```\nhttps://community.openproject.org/api/v3/work_packages?filters=[{\"subjectOrId\":{\"operator\":\"**\",\"values\":[\"12\"]}},{\"status\":{\"operator\":\"=\",\"values\":[\"5\"]}}]&pageSize=10&sortBy=[[\"id\", \"asc\"]]\n```\n\nAll of the props can be put inside a json object\n\n```json\n{\n  \"filters\": \"[{\\\"subjectOrId\\\":{\\\"operator\\\":\\\"**\\\",\\\"values\\\":[\\\"12\\\"]}},{\\\"status\\\":{\\\"operator\\\":\\\"=\\\",\\\"values\\\":[\\\"5\\\"]}}]\",\n  \"sortBy\": \"[[\\\"id\\\",\\\"asc\\\"]]\",\n  \"pageSize\": 10\n}\n```\n\nPlease note, that all objects that have to be json (e.g `filters`) will be double encoded.\n\nThat json object can then be compressed and encoded and the result sent over as the combined `eprops` parameter:\n\n```\nhttps://community.openproject.org/api/v3/work_packages?eprops=eJxtjTELwjAUhP%2FLjSWDFVwCLt2cHBz7OsT2VSKFlLwXQUv%2Bu0lXHe%2B7%2B7gN%0As1%2BUo8Ci3wiS7k8e9RovE8EWEFaOTkMsidA0BEN4uSWxFNIT2iNhyNlUV50m%0A%2BaOdf6zTLg0wkBC1e9f3gv20L52Mpa%2Ft6h588x%2BGbQ%2F5C12YN%2BM%3D%0A\n```\n\n## Available filters\n\nThe availability of filters depend on the endpoint you're querying and will be listed in each endpoint definition. For work packages, you can also [start using filters in the work packages module](https://community.openproject.org/projects/openproject/work_packages) to build your query and then simply copy the URL from your browser to get the resulting filter values and their operators.\n\n## Available operators\n\nThe following table is a list of all available operators. Not all endpoints and parameters support all values, but this list serves as a lookup table for identifying and using the operators. When building a filter object, you use the **symbol** listed below.\n\n| Symbol | Description of filtered properties                           | Values array contains      |\n| ------ | ------------------------------------------------------------ | -------------------------- |\n| `=`    | are equal to one of the given value(s)                       | At least one typed value   |\n| `&=`   | are containing all of the given value(s)                     | At least one typed value   |\n| `!`    | are not equal one of the given value(s)                      | At least one typed value   |\n| `>=`   | are greater or equal than the given value                    | One numerical value        |\n| `<=`   | are lesser or equal than the given value                     | One numerical value        |\n| `t-`   | are the given number of days in the past                     | 1 integer (days)           |\n| `t+`   | are the given number of days in the future                   | 1 integer (days)           |\n| `<t+`  | are *less than* the given number of days in the future       | 1 integer (days)           |\n| `>t+`  | are *more than* the given number of days in the future       | 1 integer (days)           |\n| `>t-`  | are *less than* the given number of days in the past         | 1 integer (days)           |\n| `<t-`  | are *more than* the given number of days in the past         | 1 integer (days)           |\n| `*`    | are not NULL                                                 | *nothing, values is empty* |\n| `!*`   | are NULL                                                     | *nothing, values is empty* |\n| `**`   | searches the given string in all string-based attributes     | One string value           |\n| `=d`   | are on the given date                                        | 1 ISO8601 date/datetime    |\n| `<>d`  | are between the two given dates.                             | 2 ISO8601 date/datetimes   |\n| `w`    | are in this week                                             | *nothing, values is empty* |\n| `t`    | are today                                                    | *nothing, values is empty* |\n| `~`    | are containing the given words (SQL LIKE) in that order      | At least one string value  |\n| `!~`   | are *not* containing the given words (SQL LIKE) in that order | At least one string value  |\n\n​\n\n**Special operators for work packages**\n\nThere are some additional operators only in use for work packages:\n\n| Symbol | Description of filtered properties         | Values array contains      |\n| ------ | ------------------------------------------ | -------------------------- |\n| `o`    | the status of the work package is *open*   | *nothing, values is empty* |\n| `c`    | the status of the work package is *closed* | *nothing, values is empty* |\n| `ow`   | the work packages have a manual sort order | *nothing, values is empty* |\n\nThere are also relation filters for work packages that have the symbols `blocks/blocked` `children/parent` `follows/precedes` `duplicates/duplicated` `partof/includes` `relates` `requires/required` depending on the direction of the relation and take as value the work package ID that is the target node of the relation.\n\n**Special values for boolean filters**\n\nIf you're using an operator that requires boolean values, please note that they need to be presented in this form:\n\n- `['f']` for false\n- `['t']` for true","name":"Filters"},{"description":"Baseline comparisons allow to compare work packages or collections of work packages with respect to different points in time.\n\nThis helps to answer questions like:\n\n- Which work packages match a certain set of filters today, which work packages match this set of filters at a certain earlier point in time?\n- Which properties of these work packages have changed with respect to these points in time?\n\nThis tool can be used to analyze how a project plan has changed with respect to a certain baseline date.\n\n## Requesting Work Packages for Different Timestamps\n\nThe work-packages API supports a `timestamps` parameter to gather information about a single work package or a collection of work packages for several points in time.\n\n```\nGET /api/v3/work_packages?timestamps=2022-01-01T00:00:00Z,PT0S\n```\n\n```\nGET /api/v3/work_packages/123?timestamps=2022-01-01T00:00:00Z,PT0S\n```\n\nEach timestamp should be given as an [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601) string, either an absolute date and time with timezone, e.g. `\"2022-01-01T00:00:00Z\"`, or a relative timestamp utilizing the [ISO-8601-Duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format, e.g. `\"P-1Y\"`, which is composed of an initial `\"P\"` for \"Period\", and a duration. `\"P-1Y\"` is interpreted as the relative timestamp \"1 year ago\".\nFurthermore, a set of predefined relative date keywords can also be passed for the timestamps: `\"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 paded 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,\ne.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\".\n\nSeveral timestamps should be passed as comma-separated list of these ISO-8601 strings to the `timestamps` parameter, e.g. `\"2022-01-01T00:00:00Z,PT0S\"`.\n\nThe timestamps should be given in ascending temporal order, such that the first timestamp is the **baseline** timestamp, and the last timestamp is the **current** timestamp.\n\nValues older than 1 day are accepted only with valid Enterprise Token available.\n\n## Response Overview\n\nWhen providing a `timestamps` parameter, the response has several additional properties:\n\n| Property                | Description                                                                            | Type             | Further information                                 |\n| ----------------------- | -------------------------------------------------------------------------------------- | ---------------- | --------------------------------------------------- |\n| `timestamp`             | The requested timestamp corresponding to the surrounding embedded object               | String           | Section *[Timestamps](#timestamps)* below           |\n| `attributesByTimestamp` | Attributes and meta information of the work packages at the respective timestamps      | Array of Objects | Section *[Attributes](#attributes)* below           |\n| `matchesFilters`        | Marks whether the work package matches the filter criteria at the respective timestamp | Bool             | Section *[Filter Matching](#filter-matching)* below |\n| `exists`                | Marks whether the work package exists at the respective timestamp                      | Bool | Section *[Existence](#existence)* below             |\n\nEach work-package element has the `attributesByTimestamp` as `_embedded` section.\n\nThe properties `timestamp`, `matchesFilters`, and `exists` are wrapped in a `_meta` section, which is added to each work-package element as well as to each element of the `attributesByTimestamp` array.\n\n```json5\n// /api/v3/work_packages?timestamps=2022-01-01T00:00:00Z,PT0S\n{\n  \"_type\": \"WorkPackageCollection\",\n  \"total\": 1,\n  \"_embedded\": {\n    \"elements\": [\n      {\n        \"_type\": \"WorkPackage\",\n        \"id\": 1528,\n        \"subject\": \"Current subject of the work package\",\n        // other attributes ...,\n        \"_links\": {\n          \"self\": {\n            \"href\": \"/api/v3/work_packages/1528?timestamps=2022-01-01T00:00:00Z,2023-03-01T01:37:10Z\"\n          }\n        },\n        \"_meta\": {\n          \"matchesFilters\": true,\n          \"exists\": true,\n          \"timestamp\": \"PT0S\"\n        },\n        \"_embedded\": {\n          \"attributesByTimestamp\": [\n            {\n              \"subject\": \"Original subject of the work package\",\n              \"_meta\": {\n                \"matchesFilters\": true,\n                \"exists\": true,\n                \"timestamp\": \"2022-01-01T00:00:00Z\"\n              },\n              \"_links\": {\n                \"self\": {\n                  \"href\": \"/api/v3/work_packages/1528?timestamps=2022-01-01T00:00:00Z\"\n                }\n              },\n            },\n            {\n              \"_meta\": {\n                \"matchesFilters\": true,\n                \"exists\": true,\n                \"timestamp\": \"PT0S\"\n              },\n              \"_links\": {\n                \"self\": {\n                  \"href\": \"/api/v3/work_packages/1528?timestamps=2023-03-01T01:37:10Z\"\n                }\n              }\n            }\n          ],\n        }\n      }\n    ]\n  },\n  \"_links\": {\n    \"self\": {\n      \"href\": \"/api/v3/work_packages?timestamps=2022-01-01T00:00:00Z,2023-03-01T01:37:10Z\"\n    }\n  }\n}\n```\n\n## Meta Information\n\nEach `_meta` section describes the surrounding object of the meta section, which may be the main work-package object, or an attributes object within the `attributesByTimestamp` array.\n\nNote that the `_meta` information of the most current (rightmost) timestamp is redundant: It is given as `_meta` section of the main work-package object as well as `_meta` section of the last object within the `attributesByTimestamp` array.\n\n## Timestamps\n\nEach `_meta` section contains a `timestamp` property, which is to the requested `timestamp` corresponding to the object the `_meta` section describes.\n\nThe `timestamp` has the same ISO-8601 format as in the `timestamps` request parameter and preserves the absolute or relative character of the requested timestamp.\n\nFurthermore, each self link corresponding to an earlier point in time has also a `timestamps` request parameter added to it, which is converted to an absolute ISO-8601 string at the execution time of the query. (in the above example, `PT0S` was converted to `2023-03-01T01:37:10Z` as the query was executed at that time.)\n\n## Attributes\n\nTo read out the attributes of the work packages at the current timestamp (the last of the given `timestamps`), check the attributes of the work-package objects. To read out the attributes of the work packages at the other given timestamps, check the attributes within `\"_embedded\"` section `\"attributesAtTimestamp\"`.\n\nTo save bandwidth, only attributes that differ from the ones in the main work-package object are included in the `\"attributesByTimestamp\"`. Attributes with the same value as in the main work-package object are not included in the `\"attributesByTimestamp\"` section.\n\n```json5\n// /api/v3/work_packages?timestamps=2022-01-01T00:00:00Z,PT0S\n{\n  \"_type\": \"WorkPackageCollection\",\n  \"_embedded\": {\n    \"elements\": [\n      {\n        \"_type\": \"WorkPackage\",\n        \"subject\": \"Current subject of the work package\",\n        \"_meta\": {\n          \"timestamp\": \"PT0S\"\n        },\n        \"_embedded\": {\n          \"attributesByTimestamp\": [\n            {\n              \"subject\": \"Original subject of the work package\",\n              \"_meta\": {\n                \"timestamp\": \"2022-01-01T00:00:00Z\"\n              }\n            },\n            {\n              \"_meta\": {\n                \"timestamp\": \"PT0S\"\n              }\n            }\n          ],\n        }\n      }\n    ]\n  }\n}\n```\n\nIn the above example, the last of the given `timestamps` is `\"PT0S\"` (which means 0 seconds ago, i.e. now). The work-package attributes at this time are included in the main work-package object. The `\"subject\"` of the work package at the timestamp `\"PT0S\"` (now) is `\"Current subject of the work package\"`.\n\nThe `\"_embedded\"` section `\"attributesByTimestamp\"` has an array entry for the timestamp `\"PT0S\"`, which is the last array entry. Because the value of the `\"subject\"` is the same as up in the main work-package object, the `\"subject\"` attribute is left out in the `\"attributesByTimestamp\"` for the timestamp `\"PT0S\"`. The `\"subject\"` of the work package at the timestamp `\"PT0S\"` (now) is `\"Current subject of the work package\"`.\n\nThe `\"_embedded\"` section `\"attributesByTimestamp\"` has an array entry for the baseline timestamp `\"2022-01-01T00:00:00Z\"`, which is the first array entry. The `\"subject\"` of the work package at the timestamp `\"2022-01-01T00:00:00Z\"` is `\"Original subject of the work package\"`. It is included in the  `\"attributesByTimestamp\"` for the timestamp `\"2022-01-01T00:00:00Z\"` because it differs from the `\"subject\"` in the main work-package object, which is `\"Current subject of the work package\"`.\n\n## Filter Matching\n\nThe work-packages API supports filtering the query results by one or several search criteria. See: [Filters](../filters)\n\nTo find out whether a work package matches the given set of filter criteria at a certain timestamp, check the `\"matchesFilters\"` property in the `\"_meta\"` section for that timestamp:\n\n```json5\n// /api/v3/work_packages?filters=...&timestamps=2022-01-01T00:00:00Z,PT0S\n{\n  \"_type\": \"WorkPackageCollection\",\n  \"_embedded\": {\n    \"elements\": [\n      {\n        \"_type\": \"WorkPackage\",\n        \"_meta\": {\n          \"matchesFilters\": true,\n          \"timestamp\": \"PT0S\"\n        },\n        \"_embedded\": {\n          \"attributesByTimestamp\": [\n            {\n              \"_meta\": {\n                \"matchesFilters\": false,\n                \"timestamp\": \"2022-01-01T00:00:00Z\"\n              }\n            },\n            {\n              \"_meta\": {\n                \"matchesFilters\": true,\n                \"timestamp\": \"PT0S\"\n              }\n            }\n          ],\n        }\n      }\n    ]\n  }\n}\n```\n\nIn the above example, the work package matches the filter criteria at the timestamp `\"PT0S\"`, but does not match the filter criteria at the timestamp `\"2022-01-01T00:00:00Z\"`.\n\nIn another example, it might be the other way around: The work package could match the filter criteria (`\"matchesFilters\": true`) at the baseline timestamp, but not match the filter criteria anymore (`\"matchesFilters\": false`) at the current timestamp.\n\nThe work package is included in the returned collection if it matches the filter criteria at least at one of the requested timestamps.\n\n## Existence\n\nTo find out whether a work package has existed at a requested timestamp, check the `\"exists\"` property in the `\"_meta\"` section for that timestamp:\n\n```json5\n// /api/v3/work_packages?timestamps=2022-01-01T00:00:00Z,PT0S\n{\n  \"_type\": \"WorkPackageCollection\",\n  \"_embedded\": {\n    \"elements\": [\n      {\n        \"_type\": \"WorkPackage\",\n        \"_meta\": {\n          \"exists\": true,\n          \"timestamp\": \"PT0S\"\n        },\n        \"_embedded\": {\n          \"attributesByTimestamp\": [\n            {\n              \"_meta\": {\n                \"exists\": false,\n                \"timestamp\": \"2022-01-01T00:00:00Z\"\n              }\n            },\n            {\n              \"_meta\": {\n                \"exists\": true,\n                \"timestamp\": \"PT0S\"\n              }\n            }\n          ],\n        }\n      }\n    ]\n  }\n}\n```\n\nIn the above example, the work package exists at the timestamp `\"PT0S\"`, but has not existed at the timestamp `\"2022-01-01T00:00:00Z\"`.\n\nIn another example, it might be the other way around: The work package could exist (`\"exists\": true`) at the baseline time, but could have been deleted after that time such that it does not exist (`\"exists\": false`) at the current time. Please note, however, that OpenProject does not support [soft deletion](https://community.openproject.org/projects/openproject/work_packages/40015), yet. Currently, when a work package is deleted, its history is deleted as well, so that its history cannot be retrieved through the baseline API anymore.\n\nThe work package is included in the returned collection if it has existed at least at one of the requested timestamps.\n\n## Usage Example\n\nIn this example ruby script, the work packages are retrieved at a baseline date and in their current state. Then the subject of the first work package is compared with respect to the baseline date and the current state.\n\n```ruby\n# Define timestamps\nbaseline_timestamp = \"2022-01-01T00:00:00Z\"\ncurrent_timestamp = \"PT0S\"\ntimestamps = [baseline_timestamp, current_timestamp]\n\n# Retrieve work packages\nurl = URI(\"https://community.openproject.org/api/v3/work_packages?timestamps=#{timestamps.join(',')}\")\nresponse = JSON.parse(Net::HTTP.get(url), object_class: OpenStruct)\nwork_packages = response.dig(\"_embedded\", \"elements\")\n\n# Extract differing baseline attributes\nwork_package = work_packages.first\nbaseline_attributes = work_package.dig(\"_embedded\", \"attributesByTimestamp\").first\n\n# Compare baseline state to current state of the work package\nif baseline_attributes.subject.present? and baseline_attributes.subject != work_package.subject\n  puts \"The subject of the work package has changed.\"\n  puts \"Subject at the baseline time: #{baseline_attributes.subject}\"\n  puts \"Current subject:              #{work_package.subject}\"\nend\n\n# Check existence\nputs \"The work package did exist at the baseline time.\" if baseline_attributes.dig(\"_meta\", \"exists\")\nputs \"The work package exists at the current time.\" if work_package.dig(\"_meta\", \"exists\")\n\n# Check filter matching\nputs \"The work package matches the query filters at the baseline time.\" if baseline_attributes.dig(\"_meta\", \"matchesFilters\")\nputs \"The work package matches the query filters at the current time.\" if work_package.dig(\"_meta\", \"matchesFilters\")\n```","name":"Baseline Comparisons"},{"description":"This API provides forms as a concept to aid in editing or creating resources. The goal of forms is to:\n\n* make writable properties of a resource discoverable\n\n* show to which values a property can be set\n\n* validate changes to a resource and indicate validation errors\n\nThese benefits aside, a client can freely choose to immediately edit a resource without prior validation by a form.\nIn the case of an invalid request the edit will fail and return appropriate errors nevertheless.\n\nA form is associated to a single resource and aids in performing changes on that resource.\nWhen posting to a form endpoint with an empty request body or an empty JSON object,\nyou will receive an initial form for the associated resource.\nSubsequent calls to the form should contain a single JSON object as described by the form.\n\n## Actions\n\n| Link                | Description                                                           | Condition                        |\n|:-------------------:| --------------------------------------------------------------------- | -------------------------------- |\n| validate            | Validate changes, show errors and allowed values for changed resource |                                  |\n| commit              | Actually perform changes to the resource                              | form content is valid            |\n| previewMarkup       | Post markup (e.g. markdown) here to receive an HTML-rendered response |                                  |\n\n## Linked Properties\n\n| Link                | Description                                      | Type          | Nullable | Supported operations |\n|:-------------------:| ------------------------------------------------ | ------------- | -------- | -------------------- |\n| self                | This form                                        | Form          |          | READ                 |\n\n## Embedded Properties:\n\nApart from the linked properties, forms contain always three other embedded properties:\n\n* `payload`\n\n* `schema`\n\n* `validationErrors`\n\nTheir purpose is explained below.\n\n### Payload\n\nThe payload contains an edited version of the resource that will be modified when committing the form.\nThis representation contains all writable properties of the resource and reflects all changes that the latest call to **validate** included,\nthereby acting as a preview for the changes.\n\nIn case the client tries to set the value to something invalid, the invalid change is also reflected here. However a validation error (see below)\nindicates that a commit of this payload would fail.\n\nIt might happen that setting one property affects the allowed values for another property. Thus by changing a property A\nthe current value of another property B might become invalid. If the client did not yet touch the value of B, the payload will\ncontain a default value for that property. Nevertheless the client will also receive an appropriate validation error for value B.\n\nThe content of this element *can* be used as a template for the request body of a call to **validate** or **commit**.\n\nA call to **validate** and **commit** does not need to include all properties that were defined in the `payload` section.\nIt is only necessary to include the properties that you want to change, as well as the `lockVersion` if one is present.\nHowever you *may* include all the properties sent in the `payload` section.\n\n### Schema\n\nThe schema embedded in a form is a normal [schema describing the underlying resource](https://www.openproject.org/docs/api/endpoints/schemas/).\nHowever, the embedded schema can change with each revalidation of the form.\nFor example it might be possible, that changing the type of a work package affects its available properties,\nas well as possible values for certain properties.\nAs this makes the embedded schema very dynamic, it is not included as a static link.\n\n### Validation Errors\n\nLike a schema the validation errors build a dictionary where the key is a property name.\nEach value is an error object that indicates the error that occurred validating the corresponding property.\nThere are only key value pairs for properties that failed validation, the element is empty if all validations succeeded.\n\nHowever note that even in the case of validation errors, the response you receive from the form endpoint will be an HTTP 200.\nThat is because the main purpose of a form is helping the client to sort out validation errors.\n\n### Meta object\n\nForm resources may have an additional `_meta` object that contains parameters to be sent together with the resource,\nbut that do not belong to the resource itself. For example, parameters on if and how to send notifications for the action\nperformed with the API request can be sent.\n\nEach individual endpoint will describe their meta properties, if available.","name":"Forms"},{"description":"Some endpoints, especially those returning `Collection` resources, support signaling desired properties. By signaling, the client\ncan convey to the server the properties to include in a response.\n\nCurrently only `select` is supported which allows to specify the subset of properties a client is interested in. The benefit of using `select`\nis reduced response time. Other signaling, especially expanding the embedded resources to include as well over multiple layers of embedding\nare in consideration to be implemented (probably named `embed`) but as of now, they are not supported. Please also see\n[the specification for OData that inspired this feature](https://www.odata.org/documentation/odata-version-2-0/uri-conventions/).\n\nFor example, a resource `/api/v3/bogus` that without signaling returns:\n\n```json\n  {\n    \"_type\": \"Collection\"\n    \"count\": 2,\n    \"total\": 554,\n    \"_embedded\": {\n      \"elements\": [\n        {\n          \"id\": 1,\n          \"name\": \"Some name\"\n        },\n        {\n          \"id\": 9,\n          \"name\": \"Another name\"\n        }\n      ]\n    },\n    \"_links\": {\n      \"self\": {\n        \"href\": \"/api/v3/bogus\",\n        \"title\": \"A bogus collection\"\n      },\n      \"bar\": {\n        \"href\": \"/api/v3/bar\",\n        \"title\": \"Foobar\"\n      }\n    }\n  }\n```\n\ncan via signaling `/api/v3/bogus?select=total,elements/name,bar` be instructed to return:\n\n```json\n  {\n    \"total\": 554,\n    \"_embedded\": {\n      \"elements\": [\n        {\n          \"name\": \"Some name\"\n        },\n        {\n          \"name\": \"Another name\"\n        }\n      ]\n    },\n    \"_links\": {\n      \"bar\": {\n        \"href\": \"/api/v3/bar\",\n        \"title\": \"Foobar\"\n      }\n    }\n  }\n```\n\nThe `select` query property is a comma separated list of the properties to include, e.g. `select=total,elements/name,bar`.\nThe API also accepts alternative styles of writing like `select=[\"total\",\"elements/name\",\"bar\"]`. Each individual item in the list\nis the path inside the resource. So while `total` refers to the property on the top level, `elements/name` refers to the property `name` within\nthe collection of `elements`. The full path has to be provided for every property, e.g. `select=elements/name,elements/id`.\nThe order of the list has no impact on the selection. There is also a wildcard `*` which will result in every property on that level to be selected.\nTo select every property in the example above, the client would have to signal `select=*,elements/*`.\n\nPlease note that the nesting into `_embedded` and `_links` is not included in the query prop `select` as\nlinks in the context of HAL can be considered properties of the resource just the same as unnested properties and forcing\nclients to write the full nesting would not increase clarity.\n\nLink properties are considered to be a single value that cannot be split up further. Every property within a link will be returned\nif the link is signaled to be selected.\n\nThe `select` signaling flag has been introduced for performance reasons. Not every endpoint supports it and those that do oftentimes only\nallow a subset of their resource's properties to be selected. Endpoints supporting the `select` query prop are documented accordingly.","name":"Signaling"},{"description":"An action is a change one can trigger within the OpenProject instance.\nThis could be creating a work package, exporting work packages or updating a user.\nAn action can also be something where the user is able to be involved so where the user is in the passive role\ne.g. when being assigned a work package.\n\nA capability combines an action with a context and a principal. It thus communicates, which principal can carry out\n(or be passively involved) which action within a certain context. E.g. a user might have the capability of creating work packages\nwithin a project.\n\nIn other words, an action is independent of a principal and context while a capability is\na relation between an action, the context and the principal.\n\nThe actions are most of the time derived from permissions which can be configured via the administrative UI where an administrator\nselects from a set of permissions to be granted per role. But there are other cases, e.g. in order to become assignee or responsible of a work package, a user has\nto have a role which allows having work packages assigned which is not a permission.\n\nEven though user might have a capability, it might still not be possible to carry out the action\nbecause some other requirement is not met.\nE.g. a user might have the capability to update work packages, but if a particular work package is\nin a readonly state, that work package cannot be updated.\n\n*Only a small set of actions that actually already exist in the system are currently exposed via\nthe api. They will be added over time.*\n\n## Action\n\nAn action describes what can be carried out within the application. Until an action becomes assigned,\nwhich turns it into a capability, it remains in the state of \"could be\".\n\n### Linked Properties\n\n|  Link               | Description                              | Type             | Constraints                                                    | Supported operations |\n|:-------------------:|----------------------------------------- | -------------    | -------------------------------------------------------------- | -------------------- |\n| self                | The action                               | Action           | not null                                                       | READ                 |\n\n### Local Properties\n\n| Property    | Description                                                                             | Type        | Constraints    | Supported operations |\n| :---------: | ---------------------------------------------                                           | ----------- | -----------    | -------------------- |\n| id          | Identifier for the action                                                               | String      | Not null       | READ                 |\n| name        | A human readable name for the action *Not yet implemented*                              | String      | Not null       | READ                 |\n| description | Describes what can be done by principals having that action   *Not yet implemented*     | String      | Not null       | READ                 |\n| modules     | Clusters the actions into groups into which they belong logically *Not yet implemented* | []String    | Not null       | READ                 |\n\n## Capabilities\n\nActions can be assigned to a principal by assigning roles to that principal. E.g. a user might receive the 'work_packages/show'\naction by having a role called reader assigned within a project.\n\nWhenever a principal is assigned an action within a context, the principal has additional capabilities.\n\nExactly which actions can be gained by having a role assigned depends on the configuration of that role.\nThe configuration is adaptable by admins within the administration of the OpenProject instance.\n\n### Linked Properties\n\n|  Link               | Description                                                                                            | Type               | Constraints     | Supported operations |\n|-------------------- |-----------------------------------------                                                               | -------------      | --------------- | -------------------- |\n| self                | The capability                                                                                         |                    |                 |                      |\n| action              | The action the principal is granted                                                                    | Action             | not null        | READ                 |\n| context             | The context the principal has this the action in. This is typically a workspace or the global context. | Workspace or null  |                 | READ                 |\n| principal           | The principal being allowed the action.                                                                | Action             | not null        | READ                 |\n\n### Local Properties\n\n| Property    | Description                                   | Type        | Constraints        | Supported operations |\n| :---------: | --------------------------------------------- | ----------- | -----------        | -------------------- |\n| id          | Identifier for the action                     | String      | Not null           | READ                 |\n| name        | A human readable name for the action          | String      | Not null           | READ                 |","name":"Actions & Capabilities"},{"description":"## Local Properties\n\n| Property    | Description      | Type                 | Constraints | Supported operations |\n| :---------: | -------------    | ----                 | ----------- | -------------------- |\n| id          | Activity id      | Integer              | x > 0       | READ                 |\n| version     | Activity version | Integer              | x > 0       | READ                 |\n| comment     |                  | Formattable          |             | READ / WRITE         |\n| details     |                  | Array of Formattable |             | READ                 |\n| createdAt   | Time of creation | DateTime             |             | READ                 |\n| updatedAt   | Time of update   | DateTime             |             | READ                 |\n\nActivity can be either _type `Activity` or _type `Activity::Comment`.","name":"Activities"},{"description":"Attachments are files that were uploaded to OpenProject. Each attachment belongs to a single\ncontainer (e.g. a work package or a board message).\n\n## Actions\n\n| Link                | Description                                                          | Condition                                                                                          |\n|:-------------------:|----------------------------------------------------------------------| --------------------------------------------                                                       |\n| delete              | Deletes this attachment                                              | **Permission**: edit on attachment container or being the author for attachments without container |\n\n## Linked Properties\n\n|  Link            | Description                                         | Type          | Constraints | Supported operations |\n|:----------------:| --------------------------------------------------- | ------------- | ----------- | -------------------- |\n| self             | This attachment                                     | Attachment    | not null    | READ                 |\n| container        | The object (e.g. WorkPackage) housing the attachment| Anything      | not null    | READ                 |\n| author           | The user who uploaded the attachment                | User          | not null    | READ                 |\n| downloadLocation | Direct download link to the attachment              | -             | not null    | READ                 |\n\n## Local Properties\n\n| Property     | Description                                     | Type        | Constraints | Supported operations |\n|:------------:| ----------------------------------------------- | ----------- | ----------- | -------------------- |\n| id           | Attachment's id                                 | Integer     | x > 0       | READ                 |\n| title        | The name of the file                            | String      | not null    | READ                 |\n| fileName     | The name of the uploaded file                   | String      | not null    | READ                 |\n| fileSize     | The size of the uploaded file in Bytes          | Integer     | x >= 0      | READ                 |\n| description  | A user provided description of the file         | Formattable | not null    | READ                 |\n| contentType  | The files MIME-Type as determined by the server | String      | not null    | READ                 |\n| digest       | A checksum for the files content                | Digest      | not null    | READ                 |\n| createdAt    | Time of creation                                | DateTime    | not null    | READ                 |","name":"Attachments"},{"description":"*Note: Budgets are currently only implemented as a stub. Further properties of budgets might be added at a future date, however they will require the view budget permission to be displayed.*\n\n## Linked Properties:\n\n|  Link     | Description                                 | Type          | Constraints           | Supported operations |\n|:---------:|-------------------------------------------- | ------------- | --------------------- | -------------------- |\n| self      | This budget                                 | Budget        | not null              | READ                 |\n\n## Properties\n\n| Property    | Description                                 | Type        | Constraints | Supported operations | Condition                   |\n| :---------: | ------------------------------------------- | ----------- | ----------- | -------------------- | --------------------------- |\n| id          | Budget id                                   | Integer     | x > 0       | READ                 |                             |\n| subject     | Budget name                                 | String      | not empty   | READ                 |                             |","name":"Budgets"},{"description":"The categories endpoints return collections or single entities of type `Category`. The following tables list the different properties\nof `Category` entities.\n\n## Linked Properties\n\n|  Link           | Description                                         | Type          | Constraints | Supported operations |\n|:---------------:| --------------------------------------------------- | ------------- | ----------- | -------------------- |\n| self            | This category                                       | Category      | not null    | READ                 |\n| project         | The project of this category                        | Project       | not null    | READ                 |\n| defaultAssignee | Default assignee for work packages of this category | User          |             | READ                 |\n\n## Local Properties\n\n| Property   | Description   | Type    | Constraints | Supported operations |\n| :--------: | ------------- | ------- | ----------- | -------------------- |\n| id         | Category id   | Integer | x > 0       | READ                 |\n| name       | Category name | String  |             | READ                 |","name":"Categories"},{"description":"The configuration endpoint allows to read certain configuration parameters of the OpenProject instance.\nNote that there is no 1:1 relationship between this endpoint and the settings an administrator has at hand to modify the behaviour\nof the application via configuration.yml or ENV variables.\n\nFor now this endpoint will only allow access to settings deemed useful for a client to know in general.\n\nAs clients might rely on the combination of both, the system settings as well as the current user's preferences, the resource\nembeds the current user's preferences so client can fetch both with one request.\n\n| Link                | Description                                      | Type            | Nullable | Supported operations |\n|:-------------------:| ------------------------------------------------ | -------------   | -------- | -------------------- |\n| self                | The configuration                                | Configuration   |          | READ                 |\n| userPreferences     | The preferences of the current user              | UserPreferences |          | READ                 |\n\n## Local Properties\n\n| Property                  | Description                                                                | Type       | Condition         | Supported operations |\n| :-----------------------: | -------------------------------------------------------------------------- | ---------- | ----------------- | -------------------- |\n| maximumAttachmentFileSize | The maximum allowed size of an attachment in Bytes                         | Integer    |                   | READ                 |\n| perPageOptions            | Page size steps to be offered in paginated list UI                         | Integer[]  |                   | READ                 |\n| hostName                  | The host name configured for the system                                    | String     |                   | READ                 |\n| durationFormat            | The format used to display Work, Remaining Work, and Spent time durations. | String     |                   | READ                 |\n| activeFeatureFlags        | The list of all feature flags that are active                              | String[]   |                   | READ                 |","name":"Configuration"},{"description":"Custom actions are a preconfigured set of changes that are applied to a work package.\n\nCurrently, this resource is a stub. The conditions and changes defined for the custom action are not yet present in the resource.\n\n## Actions\n\n| Link                | Description                                                          | Condition                                                                                                                        |\n|:-------------------:|----------------------------------------------------------------------| ---------------------------------------                                                                                          |\n| executeImmediately  | Apply the action to a work package                                   |\n\n## Linked Properties\n\n| Property         | Description                                               | Type                  | Constraints                      | Supported operations |\n| :--------------: | ------------------------------------------------------    | -----------           | -------------------------------- | -------------------- |\n| self             | This custom action                                        | CustomAction          | not null                         | READ                 |\n\n## Local Properties\n\n| Property         | Description                                              | Type                  | Constraints  | Supported operations |\n| :--------------: | ------------------------------------------------------   | -----------           | ------------ | -------------------- |\n| id               | Custom action id                                         | Integer               | x > 0        | READ                 |\n| name             | The user selected name of the custom action              | String                |              | READ                 |\n| description      | A text describing the custom action                      | String                |              | READ                 |","name":"Custom actions"},{"description":"The custom options endpoints return collections or single entities of type `CustomOption`. The following tables list the different properties\nof `CustomOption` entities.\n\n## Linked Properties\n\n|  Link         | Description               | Type          | Constraints | Supported operations |\n|:-------------:|-------------------------- | ------------- | ----------- | -------------------- |\n| self          | This custom option        | CustomOption  | not null    | READ                 |\n\n## Local Properties\n\n| Property         | Description                                    | Type     | Constraints | Supported operations |\n|:----------------:| ---------------------------------------------- | -------- | ----------- | -------------------- |\n| id               | The identifier                                 | Integer  |             | READ                 |\n| value            | The value defined for this custom option       | String   |             | READ                 |\n\ncustom options are options of list custom fields.","name":"Custom Options"},{"description":"A document is a file containing a list of attachments.\n\n*Please note, that the endpoint is only a stub for now.*\n\n## Actions\n\nNone yet\n\n## Linked Properties\n\n| Link          | Description                               | Type           | Constraints           | Supported operations | Condition                                 |\n| :-----------: | -------------------------------------     | -------------  | --------------------- | -------------------- | ----------------------------------------- |\n| self          | This document                             | Document       | not null              | READ                 |                                           |\n| project       | The project the document is in            | Project        | not null              | READ / WRITE         |                                           |\n| attachments   | The attachments belonging to the document | []Attachment   | not null              | READ / WRITE         |                                           |\n\n## Local Properties\n\n| Property     | Description                                               | Type     | Constraints                                          | Supported operations | Condition                                                   |\n| :----------: | --------------------------------------------------------- | -------- | ---------------------------------------------------- | -------------------- | ----------------------------------------------------------- |\n| id           | Document's id                                             | Integer  | x > 0                                                | READ                 |                                                             |\n| title        | The title chosen for the collection of documents          | String   | max 60 characters                                    | READ                 |                                                             |\n| description  | A text describing the documents                           | String   |                                                      | READ                 |                                                             |\n| createdAt    | The time the document was created at                      | DateTime |                                                      | READ                 |                                                             |","name":"Documents"},{"description":"TBD","name":"File links"},{"description":"A grid is a layout for a page or a part of the page of the OpenProject application. It defines the structure (number of rows and number of columns) as well as the contents of the page.\n\nThe contents is defined by `GridWidget`s. While a `GridWidget` is its own type, it is not a resource in its own right as it is an intrinsic part of a `Grid`.\n\nDepending on what page a grid is defined for, different widgets may be eligible to be placed on the grid. The page might also define the permissions needed for accessing, creating or modifying the grid.\n\nCurrently, the following pages employ grids:\n\n+ /my/page: The My page every user has. Only a user can access or modify their \"My page\".\n\n*The delete action is not yet supported*\n\n## Actions\n\n| Link                | Description                                                          | Condition                                                                                           |\n|:-------------------:| -------------------------------------------------------------------- | ----------------------------------------------------------------                                    |\n| updateImmediately   | Directly perform edits on this grid                                  | **Permission**: depends on the page the grid is defined for                                         |\n| update              | Validate edits on the grid via a form resource before committing     | **Permission**: depends on the page the grid is defined for                                         |\n\n## Linked Properties\n\n| Link          | Description                                                       | Type                | Constraints           | Supported operations | Condition                                     |\n| :-----------: | --------------------------------------------------------------    | -------------       | --------------------- | -------------------- | -----------------------------------------     |\n| self          | This grid                                                         | Grid                | not null              | READ                 |                                               |\n| page          | The url of the page the grid is defined for                       | url                 | not null              | READ / WRITE         | The page cannot be changed after the creation |\n\n## Local Properties\n\n| Property     | Description                                               | Type          | Constraints                                          | Supported operations | Condition                   |\n| :----------: | --------------------------------------------------------- | --------      | ---------------------------------------------------- | -------------------- | --------------              |\n| id           | Grid's id                                                 | Integer       | x > 0                                                | READ                 |                             |\n| rowCount     | The number of rows the grid has                           | Integer       | x > 0                                                | READ/WRITE           |                             |\n| columnCount  | The number of columns the grid has                        | Integer       | x > 0                                                | READ/WRITE           |                             |\n| widgets      | The set of `GridWidget`s selected for the grid            | []GridWidget  |                                                      | READ/WRITE           | The widgets cannot overlap  |\n| createdAt    | The time the grid was created                             | DateTime      |                                                      | READ                 |                             |\n| updatedAt    | The time the grid was last updated                        | DateTime      |                                                      | READ                 |                             |\n\n## GridWidget Properties\n\n| Property     | Description                                                                        | Type     | Constraints                                          | Supported operations | Condition      |\n| :----------: | ---------------------------------------------------------                          | -------- | ---------------------------------------------------- | -------------------- | -------------- |\n| identifier   | The kind of widget                                                                 | String   | not null                                             | READ/WRITE           |                |\n| startRow     | The row the widget starts at (1 based)                                             | Integer  | x > 0, x < rowCount of the grid, x < endRow          | READ/WRITE           |                |\n| endRow       | The row the widget ends. The widget's area does not include the row itself.        | Integer  | x > 0, x <= rowCount of the grid, x > startRow       | READ/WRITE           |                |\n| startColumn  | The column the widget starts at (1 based)                                          | Integer  | x > 0, x < columnCount of the grid, x < endColumn    | READ/WRITE           |                |\n| endColumn    | The column the widget ends. The widget's area does not include the column itself.  | Integer  | x > 0, x <= columnCount of the grid, x > startColumn | READ/WRITE           |                |\n| options      | An options hash of values customizable by the widget                               | JSON     |                                                      | READ/WRITE           |                |","name":"Grids"},{"description":"Groups are collections of users. They support assigning/unassigning multiple users to/from a project in one operation.\n\nThis resource does not yet have the form and schema endpoints. But as all properties are static, clients should still be able\nto work with this resource.\n\n## Actions\n\n## Actions\n\n| Link                | Description                                                          | Condition                                                        |\n|:-------------------:| -------------------------------------------------------------------- | ---------------------------------------------------------------- |\n| delete              | Deletes the group.                                                   | **Permission**: Administrator                                    |\n| updateImmediately   | Updates the group's attributes.                                      | **Permission**: Administrator                                    |\n\n## Linked Properties\n\n|  Link              | Description                                                                                                                                                           | Type              | Constraints           | Supported operations | Condition                                                                |\n|:-----------:       |--------------------------------------------------------------                                                                                                         | -------------     | --------------------- | -------------------- | -----------------------------------------                                |\n| self               | This group                                                                                                                                                            | Group             | not null              | READ                 |                                                                          |\n| memberships        | Link to collection of all the group's memberships. The list will only include the memberships in projects in which the requesting user has the necessary permissions. | MemberCollection  |                       | READ                 | **Permission**: view members or manage members in any project            |\n| members            | The list all all the users that are members of the group                                                                                                              | UserCollection    |                       | READ/WRITE           | **Permission**: manage members in any project to read & admin to write   |\n\nDepending on custom fields defined for versions, additional linked properties might exist.\n\n## Local Properties\n\n| Property     | Description                                                | Type     | Constraints                                          | Supported operations | Condition                                                      |\n| :----------: | ---------------------------------------------------------  | -------- | ---------------------------------------------------- | -------------------- | -----------------------------------------------------------    |\n| id           | Group's id                                                 | Integer  | x > 0                                                | READ                 |                                                                |\n| name         | Group's full name, formatting depends on instance settings | String   |                                                      | READ/WRITE           | Admin to write                                                 |\n| createdAt    | Time of creation                                           | DateTime |                                                      | READ                 | Only visible by admins                                         |\n| updatedAt    | Time of the most recent change to the user                 | DateTime |                                                      | READ                 | Only visible by admins                                         |\n\nDepending on custom fields defined for versions, additional properties might exist.","name":"Groups"},{"description":"The help texts endpoints return collections or single entities of type `HelpText`. The following tables list the different properties\nof `HelpText` entities.\n\n## Linked Properties\n\n|  Link         | Description               | Type          | Constraints | Supported operations |\n|:-------------:|-------------------------- | ------------- | ----------- | -------------------- |\n| self          | This help text            | HelpText      | not null    | READ                 |\n| editText      | Edit the help text entry  | text/htm      | Admin       | READ                 |\n\n## Local Properties\n\n| Property           | Description                 | Type                 | Constraints | Supported operations |\n| :---------:        | --------------------------- | -------------------- | ----------- | -------------------- |\n| id                 | Help text id                | Integer              | x > 0       | READ                 |\n| attribute          | Attribute name              | String               |             | READ                 |\n| attributeCaption   | Attribute caption           | String               |             | READ                 |\n| helpText           | Help text content           | Formattable          |             | READ                 |","name":"Help texts"},{"description":"Users and groups can become members of a project. Such a membership will also have one or more roles assigned to it. By that, memberships control the permissions a user has within a project.\n\nThere are also memberships that do not govern the permissions within a certain project but rather govern global permissions. Among the permissions that can be granted like this are the permissions to \"Create project\" and \"Manage users\". Those memberships do not have a project associated.\n\nWhen creating and updating memberships, a custom message can be sent to users of new and updated memberships. This message can be provided within the `_meta` group.\n\n## Linked Properties\n\n|  Link               | Description                                                   | Type             | Constraints                                                    | Supported operations |\n|:-------------------:|-----------------------------------------                      | -------------    | -------------------------------------------------------------- | -------------------- |\n| self                | This membership                                               | Membership       | not null                                                       | READ                 |\n| project             | The project for which the membership is granted               | Project          |                                                                | READ                 |\n| roles               | The list of roles the user or group is granted in the project | RoleCollection   | not null                                                       | READ                 |\n| principal           | The user or group that was granted membership                 | User or Group    | not null                                                       | READ                 |\n\n## Local Properties\n\n| Property    | Description                                   | Type        | Constraints                                        | Supported operations |\n| :---------: | --------------------------------------------- | ----------- | -----------                                        | -------------------- |\n| id          | Membership id                                 | Integer     | x > 0                                              | READ                 |\n| createdAt   | Time of creation                              | DateTime    | not null                                           | READ                 |\n| updatedAt   | Time of latest update                         | DateTime    | not null                                           | READ                 |\n\n## Meta parameters\n\n| Meta property              | Description                                                                          | Type         | Constraints | Supported operations |Condition |\n| :------------------------: | ---------------------------------------------------                                  | ----         | ----------- | -------------------- |----------|\n| notificationMessage        | The message included in the email(s) send to the users of new or updated memberships | Formattable  |             | READ/WRITE           |          |","name":"Memberships"},{"description":"News are articles written by users in order to inform other users of important information.\n\n## Actions\n\n| Link                | Description                                                              | Condition                              |\n|:-------------------:|--------------------------------------------------------------------------| ---------------------------------------|\n| delete              | Delete the new                                                           | **Permission**: manage news            |\n| updateImmediately   | Directly perform edits on the news                                       | **Permission**: manage news            |\n\n## Linked Properties\n\n| Link          | Description                          | Type           | Constraints           | Supported operations | Condition                                 |\n| :-----------: | -------------------------------------| -------------  | --------------------- | -------------------- | ----------------------------------------- |\n| self          | This news                            | News           | not null              | READ                 |                                           |\n| project       | The project the news is situated in  | Project        | not null              | READ / WRITE         |                                           |\n| author        | The user having created the news     | User           | not null              | READ                 |                                           |\n\n## Local Properties\n\n| Property     | Description                                               | Type     | Constraints                                          | Supported operations | Condition                                                   |\n| :----------: | --------------------------------------------------------- | -------- | ---------------------------------------------------- | -------------------- | ----------------------------------------------------------- |\n| id           | News' id                                                  | Integer  | x > 0                                                | READ                 |                                                             |\n| title        | The headline of the news                                  | String   | max 60 characters                                    | READ                 |                                                             |\n| summary      | A short summary                                           | String   | max 255 characters                                   | READ                 |                                                             |\n| description  | The main body of the news with all the details            | String   |                                                      | READ                 |                                                             |\n| createdAt    | The time the news was created at                          | DateTime |                                                      | READ                 |                                                             |","name":"News"},{"description":"Notifications are created through notifiable actions in OpenProject.\nNotifications are triggered by actions carried out in the system by users, e.g. editing a work package, but can also be send out because\nof time passing e.g. when a user is notified of a work package that is overdue.\n\nThis endpoint only returns in-app notifications.\n\n## Actions\n\n| Link                | Description                                                          | Condition                   |\n|:-------------------:| -------------------------------------------------------------------- | --------------------------- |\n| read_ian            | Marks the notification as read                                       | notification is unread      |\n| unread_ian          | Marks the notification as unread                                     | notification is read        |\n\n## Linked Properties\n\n| Link          | Description                                       | Type            | Constraints           | Supported operations | Condition                                 |\n| :-----------: | ----------------------------------------          | --------------  | --------------------- | -------------------- | ----------------------------------------- |\n| self          | This notification                                 | Notification    | not null              | READ                 |                                           |\n| project       | The project containing the resource               | Project         | not null              | READ                 |                                           |\n| actor         | The user that caused the notification             | User            |                       | READ                 | optional                                  |\n| resource      | The resource the notification belongs to          | Polymorphic     | not null              | READ                 |                                           |\n| activity      | The journal the notification belongs to           | Polymorphic     |                       | READ                 | optional                                  |\n| details       | A list of objects including detailed information  | Polymorphic     |                       | READ                 | optional                                  |\n\n## Local Properties\n\n| Property     | Description                                               | Type          | Constraints                                          | Supported operations | Condition                                                   |\n| :----------: | --------------------------------------------------------- | --------      | ---------------------------------------------------- | -------------------- | ----------------------------------------------------------- |\n| id           | Primary key                                               | Integer       |                                                      | READ                 |                                                             |\n| subject      | The subject of the notification                           | String        |                                                      | READ                 |                                                             |\n| reason       | The reason causing the notification                       | String        |                                                      | READ                 |                                                             |\n| readIAN      | Whether the notification is read                          | Boolean       |                                                      | READ                 |                                                             |","name":"Notifications"},{"description":"TBD","name":"OAuth 2"},{"description":"Portfolios are one of the types of [workspaces](https://www.openproject.org/docs/api/endpoints/workspaces) in OpenProject structuring the information (e.g. work packages, wikis) into smaller sets. They are typically used to group, structure and manage sub-portfolios, programs and projects that\ntarget similar strategic goals of the organization. \n\nAs containers, they also control behaviour of the elements within them. One of the most important aspects of this is that portfolios limit permissions by having members with a certain permission set (roles) assigned to them.\n\n## Actions\n\n| Link                         | Description                                                          | Condition                                                                                      |\n|:--------------------------:  |----------------------------------------------------------------------| ---------------------------------                                                              |\n| update                       | Form endpoint that aids in updating this portfolio                   | **Permission**: edit workspace                                                                 |\n| updateImmediately            | Directly update this portfolio                                       | **Permission**: edit workspace                                                                 |\n| delete                       | Delete this portfolio                                                | **Permission**: admin                                                                          |\n| favor                        | Mark this portfolio as favorited by the current user                 | **Permission**: none but login is required, only present if the portfolio is not yet favorited |\n| disfavor                     | Mark this portfolio as no longer favorited by the current user       | **Permission**: none but login is required, only present if the portfolio is favorited         |\n| createWorkPackage            | Form endpoint that aids in preparing and creating a work package     | **Permission**: add work packages                                                              |\n| createWorkPackageImmediately | Directly creates a work package in the portfolio                     | **Permission**: add work packages                                                              |\n\n## Linked Properties\n\n| Link         | Description                                                                                                         | Type            | Constraints | Supported operations |Condition                                                                                        |\n| :----------: | -------------                                                                                                       | ----            | ----------- | -------------------- |-----------------------------------------                                                        |\n| self         | This portfolio                                                                                                      | Portfolio       | not null    | READ                 |                                                                                                 |\n| ancestors    | Array of all ancestors of the portfolio, down from the root node (first element) to the parent (last element).      | Collection      | not null    | READ                 | **Permission** view portfolio on the ancestor portfolio. Non visible portfolios will be omitted |\n| categories   | Categories available in this portfolio                                                                              | Collection      | not null    | READ                 |                                                                                                 |\n| types        | Types available in this portfolio                                                                                   | Collection      | not null    | READ                 | **Permission**: view work packages or manage types                                              |\n| versions     | Versions available in this portfolio                                                                                | Collection      | not null    | READ                 | **Permission**: view work packages or manage versions                                           |\n| memberships  | Memberships in the portfolio                                                                                        | Collection      | not null    | READ                 | **Permission**: view members                                                                    |\n| workPackages | Work Packages of this portfolio                                                                                     | Collection      | not null    | READ                 |                                                                                                 |\n| parent       | Parent portfolio of the portfolio                                                                                   | Portfolio       |             | READ/WRITE           | **Permission** edit workspace                                                                   |\n| status       | Denotes the status of the portfolio, so whether the portfolio is on track, at risk or is having trouble.            | PortfolioStatus |             | READ/WRITE           | **Permission** edit workspace                                                                   |\n\nDepending on custom fields defined for portfolios, additional links might exist.\n\nNote, that the parent and ancestor links may contain the \"undisclosed uri\" `urn:openportfolio-org:api:v3:undisclosed` in case an\nancestor portfolio is defined but the client lacks permission to see it. See the\n[general introduction into links' properties](https://www.openportfolio.org/docs/api/basic-objects/#local-properties) for more information.\n\n## Local Properties\n\n| Property               | Description                                                                                           | Type              | Constraints                          | Supported operations |\n| :---------------------:| -------------                                                                                         | ----              | -----------                          | -------------------- |\n| id                     | Portfolios' id                                                                                        | Integer           | x > 0                                | READ/WRITE           |\n| identifier             |                                                                                                       | String            |                                      | READ/WRITE           |\n| name                   |                                                                                                       | String            |                                      | READ/WRITE           |\n| active                 | Indicates whether the portfolio is currently active or already archived                               | Boolean           |                                      | READ/WRITE           |\n| favorited              | Indicates whether the portfolio is favorited by the current user                                      | Boolean           |                                      | READ                 |\n| statusExplanation      | A text detailing and explaining why the portfolio has the reported status                             | Formattable       |                                      | READ/WRITE           |\n| public                 | Indicates whether the portfolio is accessible for everybody                                           | Boolean           |                                      | READ/WRITE           |\n| description            |                                                                                                       | Formattable       |                                      | READ/WRITE           |\n| createdAt              | Time of creation                                                                                      | DateTime          |                                      | READ                 |\n| updatedAt              | Time of the most recent change to the portfolio                                                       | DateTime          |                                      | READ                 |\n\nDepending on custom fields defined for portfolios, additional properties might exist.","name":"Portfolios"},{"description":"Represents a post in a board. Posts are also referred to as messages in the application.\n\n*This resource is currently a stub*\n\n## Actions\n\n| Link                | Description                    | Condition                                                                                                                        |\n|:-------------------:|--------------------------------| ---------------------------------------                                                                                          |\n| addAttachment       | Attach a file to the post      | **Permission**: edit messages           |\n\n## Linked Properties\n\n| Property         | Description                                            | Type        | Constraints    | Supported operations |\n| :--------------: | ------------------------------------------------------ | ----------- | -------------- | -------------------- |\n| self             | This post                                              | Post        | not null       | READ                 |\n| attachments      | The files attached to this post                        | Collection  |                | READ                 |\n| project          | The project the post belongs to                        | Project     | not null       | READ                 |\n\n## Local Properties\n\n| Property         | Description                                 | Type                  | Constraints                          | Supported operations |\n| :--------------: | ------------------------------------------- | -----------           | ------------------------------------ | -------------------- |\n| id               | Identifier of this post                     | Integer               | x > 0                                | READ                 |\n| subject          | The post's subject                          | String                | not null                             | READ                 |","name":"Posts"},{"description":"Principals are the superclass of users, groups and placeholder users. This endpoint returns all principals\nwithin a joined collection but can be filtered to e.g. only return groups or users.","name":"Principals"},{"description":"The priorities endpoints return collections or single entities of type `Priority`. The following tables list the different properties\nof `Priority` entities.\n\n## Linked Properties\n\n|  Link     | Description                                 | Type          | Constraints           | Supported operations |\n|:---------:|-------------------------------------------- | ------------- | --------------------- | -------------------- |\n| self      | This priority                               | Priority      | not null              | READ                 |\n\n## Local Properties\n\n| Property    | Description                                 | Type       | Constraints | Supported operations |\n| :---------: | ------------------------------------------- | ---------- | ----------- | -------------------- |\n| id          | Priority id                                 | Integer    | x > 0       | READ                 |\n| name        | Priority name                               | String     | not empty   | READ                 |\n| position    | Sort index of the priority                  | Integer    | x > 0       | READ                 |\n| isDefault   | Indicates whether this is the default value | Boolean    |             | READ                 |\n| isActive    | Indicates whether the priority is available | Boolean    |             | READ                 |","name":"Priorities"},{"description":"Programs are one of the types of [workspaces](https://www.openproject.org/docs/api/endpoints/workspaces) in OpenProject structuring the information \n(e.g. work packages, wikis) into smaller sets. They are typically used to group, structure and manage projects that \ntarget similar strategic goals of the organization and belong to a portfolio. \n\nAs containers, they also control behaviour of the elements within them. One of the most important aspects of this is that programs limit permissions by having members with a certain permission set (roles) assigned to them.\n\n## Actions\n\n| Link                         | Description                                                          | Condition                                                                                    |\n|:--------------------------:  |----------------------------------------------------------------------| ---------------------------------                                                            |\n| update                       | Form endpoint that aids in updating this program                     | **Permission**: edit workspace                                                               |\n| updateImmediately            | Directly update this program                                         | **Permission**: edit workspace                                                               |\n| delete                       | Delete this program                                                  | **Permission**: admin                                                                        |\n| favor                        | Mark this program as favorited by the current user                   | **Permission**: none but login is required, only present if the program is not yet favorited |\n| disfavor                     | Mark this program as no longer favorited by the current user         | **Permission**: none but login is required, only present if the program is favorited         |\n| createWorkPackage            | Form endpoint that aids in preparing and creating a work package     | **Permission**: add work packages                                                            |\n| createWorkPackageImmediately | Directly creates a work package in the program                       | **Permission**: add work packages                                                            |\n\n## Linked Properties\n\n| Link         | Description                                                                                                     | Type          | Constraints | Supported operations |Condition                                                                                        |\n| :----------: | -------------                                                                                                   | ----          | ----------- | -------------------- |-----------------------------------------                                                        |\n| self         | This program                                                                                                    | Program       | not null    | READ                 |                                                                                                 |\n| ancestors    | Array of all ancestors of the program, down from the root node (first element) to the parent (last element).    | Collection    | not null    | READ                 | **Permission** view program on the ancestor program. Non visible programs will be omitted |\n| categories   | Categories available in this program                                                                            | Collection    | not null    | READ                 |                                                                                                 |\n| types        | Types available in this program                                                                                 | Collection    | not null    | READ                 | **Permission**: view work packages or manage types                                              |\n| versions     | Versions available in this program                                                                              | Collection    | not null    | READ                 | **Permission**: view work packages or manage versions                                           |\n| memberships  | Memberships in the program                                                                                      | Collection    | not null    | READ                 | **Permission**: view members                                                                    |\n| workPackages | Work Packages of this program                                                                                   | Collection    | not null    | READ                 |                                                                                                 |\n| parent       | Parent program of the program                                                                                   | Program       |             | READ/WRITE           | **Permission** edit workspace                                                                   |\n| status       | Denotes the status of the program, so whether the program is on track, at risk or is having trouble.            | ProgramStatus |             | READ/WRITE           | **Permission** edit workspace                                                                   |\n\nDepending on custom fields defined for programs, additional links might exist.\n\nNote, that the parent and ancestor links may contain the \"undisclosed uri\" `urn:openprogram-org:api:v3:undisclosed` in case an\nancestor program is defined but the client lacks permission to see it. See the\n[general introduction into links' properties](https://www.openproject.org/docs/api/basic-objects/#local-properties) for more information.\n\n## Local Properties\n\n| Property               | Description                                                                                         | Type              | Constraints                          | Supported operations |\n| :---------------------:| -------------                                                                                       | ----              | -----------                          | -------------------- |\n| id                     | Programs' id                                                                                        | Integer           | x > 0                                | READ/WRITE           |\n| identifier             |                                                                                                     | String            |                                      | READ/WRITE           |\n| name                   |                                                                                                     | String            |                                      | READ/WRITE           |\n| active                 | Indicates whether the program is currently active or already archived                               | Boolean           |                                      | READ/WRITE           |\n| favorited              | Indicates whether the program is favorited by the current user                                      | Boolean           |                                      | READ                 |\n| statusExplanation      | A text detailing and explaining why the program has the reported status                             | Formattable       |                                      | READ/WRITE           |\n| public                 | Indicates whether the program is accessible for everybody                                           | Boolean           |                                      | READ/WRITE           |\n| description            |                                                                                                     | Formattable       |                                      | READ/WRITE           |\n| createdAt              | Time of creation                                                                                    | DateTime          |                                      | READ                 |\n| updatedAt              | Time of the most recent change to the program                                                       | DateTime          |                                      | READ                 |\n\nDepending on custom fields defined for programs, additional properties might exist.","name":"Programs"},{"description":"Project phases separate the whole of the project's duration into smaller, distinct parts where each phase has its own start and end date.\nSuch a phase will then have different focus on certain aspects of project management. E.g. while the first phase might be about gathering requirements, the second phase might be about implementing the requirements\nand the third phase might be about testing the implementation.\n\nPhases within a project are concrete instances of a phase definition. That way, one or a number of project life cycles can be defined throughout the OpenProject instance and then be reused in different projects.\nProjects can enable or disable the use of a phase definition in a project and assign dates to the phase instances.\n\n## Actions\n\n* None currently\n\n## Linked Properties\n\n| Link         | Description                                                                                  | Type                   | Constraints | Supported operations |Condition                                                                                  |\n| :----------: | -------------                                                                                | ----                   | ----------- | -------------------- |-----------------------------------------                                                  |\n| self         | This project phase                                                                           | ProjectPhase           | not null    | READ                 |                                                                                           |\n| definition   | This definition this phase relies on                                                         | ProjectPhaseDefinition | not null    | READ                 |                                                                                           |\n| project      | This project this phase is instantiated in                                                   | Project                | not null    | READ                 |                                                                                           |\n\n## Local Properties\n\n| Property               | Description                                                                        | Type              | Constraints                          | Supported operations |\n| :---------------------:| -------------                                                                      | ----              | -----------                          | -------------------- |\n| id                     | Project phase's id                                                                 | Integer           | x > 0                                | READ                 |\n| name                   |                                                                                    | String            |                                      | READ                 |\n| active                 | Indicates whether the project phase is currently active within the project         | Boolean           |                                      | READ                 |\n| createdAt              | Time of creation                                                                   | DateTime          |                                      | READ                 |\n| updatedAt              | Time of the most recent change to the project phase                                | DateTime          |                                      | READ                 |","name":"Project Phases"},{"description":"Project phases separate the whole of the project's duration into smaller, distinct parts.\nSuch a phase will then have different focus on certain aspects of project management. E.g. while the first phase might be about gathering requirements, the second phase might be about implementing the requirements\nand the third phase might be about testing the implementation.\n\nThe phases within the projects rely on an abstract definition of the project life cycle valid in a number of projects within the OpenProject instance.\nThat definition is a set of ProjectPhaseDefinitions.\n\n## Actions\n\n* None currently\n\n## Linked Properties\n\n| Link         | Description                                                                                  | Type                   | Constraints | Supported operations |Condition                                                                                  |\n| :----------: | -------------                                                                                | ----                   | ----------- | -------------------- |-----------------------------------------                                                  |\n| self         | This project phase definition                                                                | ProjectPhaseDefinition | not null    | READ                 |                                                                                           |\n\n## Local Properties\n\n| Property               | Description                                                 | Type      | Constraints | Supported operations |\n|---------------         |-------------------------------------------------------------|-----------|-------------|----------------------|\n| id                     | Project phase definition's id                               | Integer   | x > 0       | READ                 |\n| name                   |                                                             | String    |             | READ                 |\n| startGate              | Indicates whether the project phase has a gate at the start | Boolean   |             | READ                 |\n| startGateName          | The name of the gate at the start of the phase              | String    |             | READ                 |\n| finishGate             | Indicates whether the project phase has a gate at the end   | Boolean   |             | READ                 |\n| finishGateName         | The name of the gate at the end of the phase                | String    |             | READ                 |\n| createdAt              | Time of creation                                            | DateTime  |             | READ                 |\n| updatedAt              | Time of the most recent change to the project phase         | DateTime  |             | READ                 |","name":"Project Phase Definitions"},{"description":"Projects are one of the types of [workspaces](https://www.openproject.org/docs/api/endpoints/workspaces) in OpenProject structuring the information (e.g. work packages, wikis) into smaller sets. They can be used in a classic project management approach but also when structuring work by departments.\n\nAs containers, they also control behaviour of the elements within them. One of the most important aspects of this is that projects limit permissions by having members with a certain permission set (roles) assigned to them.\n\nPrior 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 might be returned in places where before, only projects were.\n\n## Actions\n\n| Link                         | Description                                                          | Condition                                                                                     |\n|:--------------------------:  |----------------------------------------------------------------------| ---------------------------------                                                             |\n| update                       | Form endpoint that aids in updating this project                     | **Permission**: edit workspace                                                                |\n| updateImmediately            | Directly update this project                                         | **Permission**: edit workspace                                                                |\n| delete                       | Delete this project                                                  | **Permission**: admin                                                                         |\n| favor                        | Mark this project as favorited by the current user                   | **Permission**: none but login is required, only present if the project is not yet favorited  |\n| disfavor                     | Mark this project as no longer favorited by the current user         | **Permission**: none but login is required, only present if the project is favorited          |\n| createWorkPackage            | Form endpoint that aids in preparing and creating a work package     | **Permission**: add work packages                                                             |\n| createWorkPackageImmediately | Directly creates a work package in the project                       | **Permission**: add work packages                                                             |\n\n## Linked Properties\n\n| Link         | Description                                                                                                         | Type          | Constraints | Supported operations |Condition                                                                                    |\n| :----------: | -------------                                                                                                       | ----          | ----------- | -------------------- |-----------------------------------------                                                    |\n| self         | This project                                                                                                        | Project       | not null    | READ                 |                                                                                             |\n| ancestors    | Array of all ancestors of the project, down from the root node (first element) to the parent (last element).        | Collection    | not null    | READ                 | **Permission** any permission on the ancestor project. Non visible projects will be omitted |\n| categories   | Categories available in this project                                                                                | Collection    | not null    | READ                 |                                                                                             |\n| types        | Types available in this project                                                                                     | Collection    | not null    | READ                 | **Permission**: view work packages or manage types                                          |\n| versions     | Versions available in this project                                                                                  | Collection    | not null    | READ                 | **Permission**: view work packages or manage versions                                       |\n| memberships  | Memberships in the project                                                                                          | Collection    | not null    | READ                 | **Permission**: view members                                                                |\n| workPackages | Work Packages of this project                                                                                       | Collection    | not null    | READ                 |                                                                                             |\n| parent       | Parent project of the project                                                                                       | Project       |             | READ/WRITE           | **Permission** edit workspace                                                               |\n| status       | Denotes the status of the project, so whether the project is on track, at risk or is having trouble.                | ProjectStatus |             | READ/WRITE           | **Permission** edit workspace                                                               |\n\nDepending on custom fields defined for projects, additional links might exist.\n\nNote, that the parent and ancestor links may contain the \"undisclosed uri\" `urn:openproject-org:api:v3:undisclosed` in case an\nancestor project is defined but the client lacks permission to see it. See the\n[general introduction into links' properties](https://www.openproject.org/docs/api/basic-objects/#local-properties) for more information.\n\n## Local Properties\n\n| Property               | Description                                                                                           | Type              | Constraints                          | Supported operations |\n| :---------------------:| -------------                                                                                         | ----              | -----------                          | -------------------- |\n| id                     | Projects' id                                                                                          | Integer           | x > 0                                | READ/WRITE           |\n| identifier             |                                                                                                       | String            |                                      | READ/WRITE           |\n| name                   |                                                                                                       | String            |                                      | READ/WRITE           |\n| active                 | Indicates whether the project is currently active or already archived                                 | Boolean           |                                      | READ/WRITE           |\n| favorited              | Indicates whether the project is favorited by the current user                                        | Boolean           |                                      | READ                 |\n| statusExplanation      | A text detailing and explaining why the project has the reported status                               | Formattable       |                                      | READ/WRITE           |\n| public                 | Indicates whether the project is accessible for everybody                                             | Boolean           |                                      | READ/WRITE           |\n| description            |                                                                                                       | Formattable       |                                      | READ/WRITE           |\n| createdAt              | Time of creation                                                                                      | DateTime          |                                      | READ                 |\n| updatedAt              | Time of the most recent change to the project                                                         | DateTime          |                                      | READ                 |\n\nDepending on custom fields defined for projects, additional properties might exist.","name":"Projects"},{"description":"A query defines how work packages can be filtered and displayed.\nClients can define a query once, store it, and use it later on to load the same set of filters and display options.\n\n## Actions\n\n| Link                | Description                                                          | Condition                                                                                                                        |\n|:-------------------:|----------------------------------------------------------------------| ---------------------------------------                                                                                          |\n| star                | Elevates the query to the status of 'starred'                        | **Permission**: save queries for own queries, manage public queries for public queries; Only present if query is not yet starred |\n| unstar              | Removes the 'starred' status                                         | **Permission**: save queries for own queries, manage public queries for public queries; Only present if query is starred         |\n| update              | Use the Form based process to verify the query before persisting     | **Permission**: view work packages                                                                                               |\n| updateImmediately   | Persist the query without using a Form based process for guidance    | **Permission**: save queries for own queries, manage public queries for public queries;                                          |\n\n## Linked Properties\n\n| Property               | Description                                                                                                                                    | Type                  | Constraints                                 | Supported operations |\n| :--------------------: | ------------------------------------------------------                                                                                         | --------------------- | ------------------------------------------- | -------------------- |\n| self                   | This query                                                                                                                                     | Query                 | not null                                    | READ                 |\n| user                   | The user that owns this query                                                                                                                  | User                  | not null                                    | READ                 |\n| project                | The project on which this query operates                                                                                                       | Project               |                                             | READ                 |\n| columns                | Ordered list of QueryColumns. The columns, when mapped to WorkPackage properties determine which WorkPackage properties to display             | []QueryColumn         |                                             | READ                 |\n| highlightedAttributes  | **Only with valid Enterprise Token available:** List of QueryColumns that should get highlighted when `highlightingMode` is set to `inline`.   | []QueryColumn         |                                             | READ                 |\n| sortBy                 | Ordered list of QuerySortBys. Indicates the WorkPackage property the results will be ordered by as well as the direction                       | []QuerySortBy         |                                             | READ                 |\n| groupBy                | The WorkPackage property results of this query are grouped by                                                                                  | String                |                                             | READ                 |\n| results                | The list of work packages returned by applying the filters, sorting and grouping defined in the query                                          | WorkPackageCollection |                                             | READ                 |\n| schema                 | This query's schema                                                                                                                            | Schema                |                                             | READ                 |\n\nPlease note, that all the properties listed above will also be embedded when individual queries are returned but will not be embedded when a list of queries is returned. Whether the properties are embedded or not may be subject to change in the future.\n\nThe `columns` and `highlightedAttributes` properties will be moved into `Views::WorkPackagesTable` so it is deprecated to have it listed within the Query directly.\n\n## Local Properties\n\n| Property         | Description                                                                                              | Type                  | Constraints                                                                         | Supported operations |\n| :--------------: | -------------------------------------------------------------------------------------------------------- | --------------------- | ----------------------------------------------------------------------------------- | -------------------- |\n| id               | Query id                                                                                                 | Integer               | x > 0                                                                               | READ                 |\n| name             | Query name                                                                                               | String                |                                                                                     | READ/WRITE           |\n| filters          | A set of QueryFilters which will be applied to the work packages to determine the resulting work packages| []QueryFilterInstance |                                                                                     | READ/WRITE           |\n| sums             | Should sums (of supported properties) be shown?                                                          | Boolean               |                                                                                     | READ/WRITE           |\n| timelineVisible  | Should the timeline mode be shown?                                                                       | Boolean               |                                                                                     | READ/WRITE           |\n| timelineLabels   | Which labels are shown in the timeline, empty when default                                               | QueryTimelineLabels   |                                                                                     | READ/WRITE           |\n| timelineZoomLevel| Which zoom level should the timeline be rendered in?                                                     | String                | days, weeks, months, quarters, years                                                | READ/WRITE           |\n| timestamps       | The timestamps to filter by when showing changed attributes on work packages.| []Timestamp               |                       | **Values older than 1 day are accepted only with valid Enterprise Token available.**| READ/WRITE           |\n| highlightingMode | Which highlighting mode should the table have?                                                           | String                | none, inline, status, priority, type                                                | READ/WRITE           |\n| showHierarchies  | Should the hierarchy mode be enabled?                                                                    | Boolean               |                                                                                     | READ/WRITE           |\n| hidden           | Should the query be hidden from the query list?                                                          | Boolean               |                                                                                     | READ/WRITE           |\n| public           | Can users besides the owner see the query?                                                               | Boolean               |                                                                                     | READ/WRITE           |\n| starred          | Should the query be highlighted to the user?                                                             | Boolean               |                                                                                     | READ                 |\n| createdAt        | Time of creation                                                                                         | DateTime              | not null                                                                            | READ                 |\n| updatedAt        | Time of the most recent change to the query                                                              | DateTime              | not null                                                                            | READ                 |\n\nA query that is not assigned to a project (`\"project\": null`) is called a global query. Global queries filter work packages regardless of the project they are assigned to. As such, a different set of filters exists for those queries.\n\nThe `hidden` property is deprecated as it is replaced by the `Views` concept. A query that isn't hidden will have a `View` while a query that is hidden won't.\n\nThe `timelineVisible`, `timelineLabels`, `timelineZoomLevel`, `highlightingMode` and `showHierarchies` properties will be moved into the more appropriate Views (probably `Views::WorkPackagesTable`) so it is deprecated to have them within the Query directly.\n\n## Query Filter Instance\n\nA QueryFilterInstance defines a filtering applied to the list of work packages. As such it contains:\n\n* the filter type (`QueryFilter`) used\n\n* the operator (`QueryOperator`) used\n\n* the list of values\n\nThe list of values can either consist of a list of links or of a list of strings. If the values are primitive (e.g. Integer, Boolean, Date) they will be displayed as strings and the QueryFilterInstance will have a `values` property.\n\n```json\n  {\n    \"_type\": \"DueDateQueryFilter\",\n    \"name\": \"Finish date\",\n    \"values\": [\n      \"1\"\n    ],\n    \"_links\": {\n      \"filter\": {\n        \"href\": \"/api/v3/queries/filters/dueDate\",\n        \"title\": \"Finish date\"\n      },\n      \"operator\": {\n        \"href\": \"/api/v3/queries/operators/<t+\",\n        \"title\": \"in less than\"\n      }\n      \"schema\": {\n        \"href\": \"/api/v3/queries/filter_instance_schemas/dueDate\"\n      }\n    }\n  }\n```\n\nIf the values are nonprimitive (e.g. User, Project), they will be listed as objects and the QueryFilterInstance will have a `values` link.\n\n```json\n  {\n    \"_type\": \"AssigneeQueryFilter\",\n    \"name\": \"Assignee\",\n    \"_links\": {\n      \"filter\": {\n        \"href\": \"/api/v3/queries/filters/assignee\",\n        \"title\": \"Assignee\"\n      },\n      \"operator\": {\n        \"href\": \"/api/v3/queries/operators/=\",\n        \"title\": \"is\"\n      },\n      \"schema\": {\n        \"href\": \"/api/v3/queries/filter_instance_schemas/assignee\"\n      },\n      \"values\": [\n        {\n          \"href\": \"/api/v3/users/1\",\n          \"title\": \"OpenProject Admin\"\n        }\n      ]\n    }\n  }\n\n```\n","name":"Queries"},{"description":"A QueryColumn can be referenced by a Query to denote the work package properties the client should display for the work packages returned as query results. The columns maps to the WorkPackage by the id property. QueryColumns exist in three types: `QueryColumn::Property`, `QueryColumn::RelationToType` and `QueryColumn::RelationOfType`.\n\n## Actions\n\nAs of now, no actions are defined.\n\n## Linked Properties\n\n| Property         | Description                                            | Type                                                                              | Constraints                                    | Supported operations |\n| :--------------: | ------------------------------------------------------ | -----------                                                                       | --------------------------------               | -------------------- |\n| self             | This query column                                      | QueryColumn::Property, QueryColumn::RelationToType or QueryColumn::RelationOfType | not null                                       | READ                 |\n|  type            | The type relations point to                            | Type                                                                              | not null, exists only on QueryColumn::Relation | READ                 |\n\n## Local Properties\n\n| Property         | Description                                            | Type        | Constraints                      | Supported operations |\n| :--------------: | ------------------------------------------------------ | ----------- | -------------------------------- | -------------------- |\n| id               | Query column id                                        | String      | not null                         | READ                 |\n| name             | Query column name                                      | String      | not null                         | READ                 |","name":"Query Columns"},{"description":"A QueryFilter can be referenced by a filter instance defined for a Query to denote the filtering applied to the query's work package results. This resource is not an instance of an applicable filter but rather the type an applicable filter can have.\n\n## Actions\n\nAs of now, no actions are defined.\n\n## Linked Properties\n\n| Property         | Description                                            | Type        | Constraints                      | Supported operations |\n| :--------------: | ------------------------------------------------------ | ----------- | -------------------------------- | -------------------- |\n| self             | This query filter                                      | QueryFilter | not null                         | READ                 |\n\n## Local Properties\n\n| Property         | Description                                            | Type        | Constraints                      | Supported operations |\n| :--------------: | ------------------------------------------------------ | ----------- | -------------------------------- | -------------------- |\n| id               | QueryFilter id                                         | String      | not null                         | READ                 |","name":"Query Filters"},{"description":"A QueryOperator can be referenced by a QueryFilter to denote the operator to be applied to the filter relation.\n\n## Actions\n\nAs of now, no actions are defined.\n\n## Linked Properties\n\n| Property         | Description                                            | Type          | Constraints                      | Supported operations |\n| :--------------: | ------------------------------------------------------ | -----------   | -------------------------------- | -------------------- |\n| self             | This query operator                                    | QueryOperator | not null                         | READ                 |\n\n## Local Properties\n\n| Property         | Description                                            | Type        | Constraints                      | Supported operations |\n| :--------------: | ------------------------------------------------------ | ----------- | -------------------------------- | -------------------- |\n| id               | Query operator id                                      | String      | not null                         | READ                 |\n| name             | Query operator name                                    | String      | not null                         | READ                 |","name":"Query Operators"},{"description":"A QuerySortBy can be referenced by a Query to denote the sorting applied to the query's work package results. It consists of the columns to sort by as well as the direction (ascending/descending)\n\n## Actions\n\nAs of now, no actions are defined.\n\n## Linked Properties\n\n| Property         | Description                                                                                                                                                                                                               | Type        | Constraints                      | Supported operations |\n| :--------------: | ------------------------------------------------------                                                                                                                                                                    | ----------- | -------------------------------- | -------------------- |\n| self             | This query sort by                                                                                                                                                                                                        | QuerySortBy | not null                         | READ                 |\n| column           | The QueryColumn to sort on.                                                                                                                                                                                               | QueryColumn | not null                         | READ                 |\n| direction        | The direction the QueryColumn is to be sorted in. This property is identified by a URI (`urn:openproject-org:api:v3:queries:directions:asc` or `urn:openproject-org:api:v3:queries:directions:desc`) instead of by a URL. |             | not null                         | READ                 |\n\n## Local Properties\n\n| Property         | Description                                            | Type        | Constraints                      | Supported operations |\n| :--------------: | ------------------------------------------------------ | ----------- | -------------------------------- | -------------------- |\n| id               | QuerySortBy id                                         | String      | not null                         | READ                 |\n| name             | QuerySortBy name                                       | String      | not null                         | READ                 |","name":"Query Sort Bys"},{"description":"A QueryFilterInstanceSchema is a Schema specifically for describing QueryFilterInstances. Because the behaviour of FilterInstances, with regards to the `values` property, differs from one another depending on the chosen Filter, the QueryFilterInstanceSchema explicitly lists the dependencies in its `_dependencies` property. As the property causing the difference is the selected Filter, that property is linked. Apart from that, a QueryFilterInstanceSchema has the same structure a Schema does.\n\n## Linked Properties\n\n| Link                  | Description                                         | Type                      | Constraints | Supported operations |\n| :-------------------: | ----------------------------------------            | -------------             | --------    | -------------------- |\n| self                  | This QueryFilterInstanceSchema (same as for schema) | QueryFilterInstanceSchema | not null    | READ                 |\n| filter                | The filter for which this schema is specific        | Filter                    | not null    | READ                 |\n\n## Local Properties\n\n| Property         | Description                                            | Type         | Constraints                      | Supported operations |\n| :--------------: | ------------------------------------------------------ | ------------ | -------------------------------- | -------------------- |\n| name             | Describes the name attribute                           | Field schema | not null                         | READ                 |\n| filter           | QuerySortBy name                                       | Field schema | not null                         | READ                 |","name":"Query Filter Instance Schema"},{"description":"Work packages may be related to each other in different ways.\n\n```\n+--------------+                            +--------------+\n|              | 1                        1 |              |\n| Work package +-------------+--------------+ Work package |\n|              | from        |           to |              |\n+--------------+             |              +--------------+\n                      +------+-------+\n                      |   Relation   |\n                      +--------------+\n                      | type         |\n                      | reverseType  |\n                      | description  |\n                      | lag        |\n                      +--------------+\n```\n\n## Actions\n\n| Link                | Description                                                          | Condition                                     |\n|:-------------------:| -------------------------------------------------------------------- | --------------------------------------------- |\n| update              | Updates the relation between two work packages via a form            | **Permission**: manage work package relations |\n| updateImmediately   | Updates the relation between two work packages                       | **Permission**: manage work package relations |\n| delete              | Destroys the relation between the two work packages                  | **Permission**: manage work package relations |\n\n## Linked Properties\n\n| Link          | Description                           | Type          | Constraints | Supported operations | Condition                                     |\n|:-------------:|-------------------------------------- | ------------- | ----------- | -------------------- | --------------------------------------------- |\n| self          | This relation                         | Relation      | not null    | READ                 | **Permission**: view work packages            |\n| schema        | The schema of this relation           | Schema        | not null    | READ                 |                                               |\n| from          | The emanating work package            | WorkPackage   | not null    | READ                 | **Permission**: view work packages            |\n| to            | The work package the relation ends in | WorkPackage   | not null    | READ                 | **Permission**: view work packages            |\n\n## Local Properties\n\n| Property         | Description                                                   | Type    | Constraints                                                                                                   | Supported operations |\n| :---------------:| ------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------- | -------------------- |\n| id               | Relation ID                                                   | Integer | x > 0                                                                                                         | READ                 |\n| name             | The internationalized name of this kind of relation           | String  |                                                                                                               | READ\n| type             | Which kind of relation (blocks, precedes, etc.)               | String  | in: relates, duplicates, duplicated, blocks, blocked, precedes, follows, includes, partof, requires, required | READ / WRITE         |\n| reverseType      | The kind of relation from the other WP's perspective          | String  | in: relates, duplicates, duplicated, blocks, blocked, precedes, follows, includes, partof, requires, required | READ                 |\n| description      | Short text further describing the relation                    | String  |                                                                                                               | READ / WRITE         |\n| lag*             | The number of days between closing of `from` and start of `to`| Integer | x >= 0                                                                                                        | READ / WRITE         |\n\n\\* Only applicable for some relation types such as \"follows\". You can check using the relation by schema\nendpoint at `/api/v3/relations/schema/{type}`.","name":"Relations"},{"description":"Throughout OpenProject user input for many properties can be formatted using *Markdown*.\nUsing the appropriate rendering endpoint it is possible to render custom formatted inputs into HTML and thus\nreceive a preview of the rendered text.\n\nThe request to a rendering endpoint must always have a MIME-Type of `text/plain`.\nThe request body is the actual string that shall be rendered as HTML string.","name":"Previewing"},{"description":"Revisions are sets of updates to files in the context of repositories linked in OpenProject.\n\n## Linked Properties\n\n|  Link            | Description                                                                                       | Type          | Constraints | Supported operations |\n|:----------------:| --------------------------------------------------------------------------------------------------| ------------- | ----------- | -------------------- |\n| self             | This revision                                                                                     | Revision      | not null    | READ                 |\n| project          | The project to which the revision belongs                                                         | Project       | not null    | READ                 |\n| author           | The user that added this revision, if the authorName was mapped to a user in OpenProject          | User          |             | READ                 |\n| showRevision     | A URL to the repository view (outside APIv3) showing this revision                                | -             | not null    | READ                 |\n\n## Local Properties\n\n| Property                | Description                                                                                                                                                 | Type        | Constraints | Supported operations |\n|:-----------------------:| ------------------------------------------------------------------------------------------------------------------------------------------------------------| ----------- | ----------- | -------------------- |\n| id                      | Revision's id, assigned by OpenProject                                                                                                                      | Integer     | x > 0       | READ                 |\n| identifier              | The raw SCM identifier of the revision (e.g. full SHA hash)                                                                                                 | String      | not null    | READ                 |\n| formattedIdentifier     | The SCM identifier of the revision, formatted (e.g. shortened unambiguous SHA hash). May be identical to identifier in many cases                           | String      | not null    | READ                 |\n| authorName              | The name of the author that committed this revision. Note that this name is retrieved from the repository and does not identify a user in OpenProject.      | String      | not null    | READ                 |\n| message                 | The commit message of the revision                                                                                                                          | Formattable | not null    | READ                 |\n| createdAt               | The time this revision was committed to the repository                                                                                                      | DateTime    | not null    | READ                 |","name":"Revisions"},{"description":"When principals (groups or users) are assigned to a project, they are receive roles in that project. Roles regulate access to specific resources by having permissions configured for them.\n\nCurrently, this is only a stub.\n\n## Linked Properties\n\n| Link                  | Description                               | Type          | Constraints                    | Supported operations |\n| :-------------------: | ----------------------------------------- | ------------- | -------------------------------| -------------------- |\n| self                  | This role                                 | Role          | not null                       | READ                 |\n\n## Local Properties\n\n| Property    | Description                                   | Type        | Constraints | Supported operations |\n| :---------: | --------------------------------------------- | ----------- | ----------- | -------------------- |\n| id          | Role id                                       | Integer     | x > 0       | READ                 |\n| name        | Role name                                     | String      | not null    | READ                 |","name":"Roles"},{"description":"The root resource contains links to available resources in the API. By following these links\na client should be able to discover further resources in the API.\n\n*Note: Currently there is no list action for projects available.*\n*A client will therefore have to know links to projects and can't (yet) discover them.*\n\n| Link                  | Description                                      | Type            | Nullable | Supported operations | Condition                                        |\n| :-------------------: | ------------------------------------------------ | --------------- | -------- | -------------------- | ---------                                        |\n| configuration         | The configuration of this OpenProject instance   | Configuration   |          | READ                 |                                                  |\n| user                  | The user currently logged-in                     | User            |          | READ                 | logged in                                        |\n| userPreferences       | The preferences of the logged-in user            | UserPreference  |          | READ                 | logged in                                        |\n| priorities            | List of available priorities                     | Collection      |          | READ                 | **Permission** View work packages in any project |\n| statuses              | List of available work package statuses          | Collection      |          | READ                 | **Permission** View work packages in any project |\n| types                 | List of available work package types             | Collection      |          | READ                 | **Permission** View work packages in any project |\n| workPackages          | List of all work packages                        | Collection      |          | READ                 | **Permission** View work packages in any project |\n| users                 | List of all users                                | Collection      |          | READ                 | **Permission** Administrator                     |\n\n## Local Properties\n\n| Property                  | Description                                          | Type       | Condition                                | Supported operations |\n| :-----------------------: | ---------------------------------------------------- | ---------- | ---------------------------------        | -------------------- |\n| instanceName              | The name of the OpenProject instance                 | String     |                                          | READ                 |\n| coreVersion               | The OpenProject core version number for the instance | String     | **Permission** requires admin privileges | READ                 |","name":"Root"},{"description":"The schema provides detailed information about the properties of a resource.\n\nThe schema is represented by a dictionary where keys are names of resource properties and values are\nobjects describing the corresponding property.\n\nThese objects are called **field schema** and form the core of the schema representation.\nEach of them can contain its own `_links` and `_embedded` section.\n\n## Linked Properties\n\n| Link                | Description                              | Type          | Nullable | Supported operations |\n|:-------------------:| ---------------------------------------- | ------------- | -------- | -------------------- |\n| self                | This schema                              | Schema        |          | READ                 |\n\n## Local Properties\n\n| Property            | Description                                                                        | Type             |\n| :-----------------: | ---------------------------------------------------------------------------------- | ---------------- |\n| _dependencies       | A list of dependencies between one property's value and another property           | SchemaDependency |\n\nThe `_dependencies` property contains the list of dependencies that exist between the value selected for one of the properties of the described resource and the resource's structure. Depending on the value, additional properties might exist or properties might have other values allowed to be assigned. See [SchemaDependency](https://www.openproject.org/docs/api/endpoints/schemas/#schema-dependencies) for more information.\n\n## Field schema\n\n### Linked Properties\n\n| Property             | Description                                                    | Conditions                                           |\n| :--------------:     | -------------------------------------------------------------- | ---------------------------------------------        |\n| allowedValues        | List of resources that are assignable by the current user.     | Will not exist if `allowedValuesSchemas` is present. |\n| allowedValuesSchemas | Link to schemas further describing the property.               | Will not exist if `allowedValues` is present.        |\n\nThe `allowedValues` can either contain a list of canonical links or just a single link to a collection resource.\nThis is an optimization to allow efficient handling of both small resource lists (that can be enumerated inline) and large\nresource lists (requiring one or more separate requests).\n\nThe `allowedValuesSchemas` will on rare occasions (e.g. for a [Query](https://www.openproject.org/docs/api/endpoints/queries/)) replace `allowedValues`. This is done when there is no fixed set of allowed values. Instead, the allowed values will have to follow a schema, or one of a list of schemas, in its own right.\n\nOnly one of the links (`allowedValues`, `allowedValuesSchemas`) will exist for any given property.\n\n### Local Properties\n\n| Property          | Description                                                                        | Type         | Default |\n|:-----------------:| ---------------------------------------------------------------------------------- | ------------ | ------- |\n| type              | The data type of the property                                                      | MetaType     |         |\n| name              | Human readable name of the property as it could be displayed in a UI               | String       |         |\n| required          | If true this property is not nullable                                              | Boolean      | true    |\n| hasDefault        | If true this property will have a default value if none is provided                | Boolean      | false   |\n| writable          | If false it is not allowed to **change** the property value                        | Boolean      | true    |\n| minLength         | The value of the property must at least contain the specified amount of characters | Integer      | 0       |\n| maxLength         | The value of the property must at most contain the specified amount of characters  | Integer      | ∞       |\n| regularExpression | The value of the property must match the given regular expression (if not null)    | String       | null    |\n| formula           | If present, contains a formula that is used to calculate the value of the property | String       | null    |\n| location          | If present, contains a reference to the location of the property in the JSON       | String       | null    |\n| description       | If present, contains a formattable, human readable description                     | Formattable  | null    |\n| deprecated        | If present, the client should consider the existence of the property deprecated    | Boolean      | false   |\n\nAll of the above properties that do not have a default value *must* be present in the schema.\nFor properties that have a default value, the client can assume the default value, if the property is missing.\n\nNote that regular expressions used in the API follow the rules of [Ruby Regular Expressions](https://ruby-doc.org/core-2.2.6/Regexp.html).\n\n### Location property\n\nThe location property gives a hint as to where to find the resource property:\n\n  * when not set, it is in the resource top level attributes;\n  * when set to `_links`, it is under the path `_links.propertyName`;\n  * when set to `_meta`, it is under the path `_meta.propertyName`.\n\nFor example, for a work package schema, the field schema of the `user` property has a location\nproperty set to `_links`. This means that the `user` property will be found under the path\n`_links.user` of the json payload of the work package resource.\n\n## Schema Dependencies\n\nA `SchemaDependency` describes the dependencies between a value chosen for a resource's property\nand the resource's structure. By that, additional properties or changes in a property are\ndescribed.\n\nA `SchemaDependency` will never describe a property to disappear, only to appear. As such it\nalways provides additional information. For a property that is depending on another property's\nvalue, this can result in not being listed in the resource's schema itself at all. This will be\nthe case if the existence of the property as a whole will be dependent. If only one of the aspects\n(e.g. *writable*) of the property changes with the selected value, the property itself will\nalready be listed in the schema, but it will lack the dependent aspect.\n\nGiven that SchemaDependencies will only add information, and the content type of JSON, a client should be able to join the two objects, the schema and the dependency, into one object easily.\n\nSchemaDependencies are always embedded inside a Schema's `_dependencies` attribute. As such, they are not independently existing resources. Consequently, they do not have a `self` reference.\n\n### Linked Properties\n\nA SchemaDependency does not have any links.\n\n### Local Properties\n\n| Property            | Description                                                                        | Type             |\n| :-----------------: | ---------------------------------------------------------------------------------- | ---------------- |\n| on                  | The name of the property on which the dependency exists                            | string           |\n| dependencies        | The additions to a schema grouped by the value of the depending property           | object           |\n\nThe following excerpt exemplifies the objects that can be found as a value of the `dependencies` property:\n\n```json\n{\n  \"_type\": \"SchemaDependency\",\n  \"on\": \"someProperty\",\n  \"dependencies\": {\n    \"1\": {\n      \"loremIpsum\": {\n        \"type\": \"User\",\n        \"name\": \"Lorem ipsum\",\n        \"required\": true,\n        \"hasDefault\": false,\n        \"writable\": true,\n        \"location\": \"_links\",\n        \"description\": {\n            \"format\": \"markdown\",\n            \"raw\": \"A description for field Lorem ipsum. This may contain [links](https://example.com).\",\n            \"html\": \"<p>A description for field Lorem ipsum. This may contain <a href=\\\"https://example.com\\\">links</a>.</p>\"\n        };\n        \"_links\": {\n          \"allowedValues\": {\n            \"href\": \"/api/v3/some/path/to/users\"\n          }\n        }\n      }\n    },\n    \"2\": {\n      \"loremIpsum\": {\n        \"type\": \"User\",\n        \"name\": \"Lorem ipsum\",\n        \"required\": true,\n        \"hasDefault\": false,\n        \"writable\": true,\n        \"location\": \"_links\",\n        \"_links\": {\n          \"allowedValues\": {\n            \"href\": \"/api/v3/a/totally/different/path/to/other/users\"\n          }\n        }\n      }\n    },\n    \"3\": {\n      \"loremIpsum\": {\n        \"type\": \"User\",\n        \"name\": \"Lorem ipsum\",\n        \"required\": true,\n        \"hasDefault\": false,\n        \"writable\": false,\n        \"location\": \"_links\",\n      }\n    },\n    \"4\": {}\n  }\n}\n```\n\nGiven the example above:\n  * If the depending property is `1`, `2` or `3`:\n    * The client must set the property `loremIpsum`, because of `\"required\": true` for all three field schemas\n    * When the depending property is `1` or `2`, the values allowed to be set for `loremIpsum` property differ\n    * When the depending property is `3`, the `loremIpsum` property will not be writable\n  * If the depending property is `4`, the `loremIpsum` property does not exist\n\nBecause of the limitation of JSON objects, all keys will be strings, even when the depending value is actually something different (e.g. Integer, Date).\nThis is also true for resources where the resource url is used as the key.","name":"Schemas"},{"name":"Statuses","description":"The statuses endpoints return collections or single entities of type `Status`. The following tables list the different properties\nof `Status` entities.\n\n## Linked Properties\n\n| Link | Description | Type   | Constraints | Supported operations |\n|:----:|-------------|--------|-------------|----------------------|\n| self | This status | Status | not null    | READ                 |\n\n## Local Properties\n\n|      Property      | Description                                                                                                                                | Type    | Constraints   | Supported operations |\n|:------------------:|--------------------------------------------------------------------------------------------------------------------------------------------|---------|---------------|----------------------|\n|         id         | Status id                                                                                                                                  | Integer | x > 0         | READ                 |\n|        name        | Status name                                                                                                                                | String  |               | READ                 |\n|      isClosed      | Indicates, whether work package of this status are considered closed                                                                       | Boolean |               | READ                 |\n|       color        | A Hex-coded value of the color assigned to the status.                                                                                     | String  |               | READ                 |\n|     isDefault      | True, if this status is the default status for new work packages                                                                           | Boolean |               | READ                 |\n|     isReadonly     | Indicates, whether work package of this status are readonly                                                                                | Boolean |               | READ                 |\n| excludedFromTotals | Indicates, whether work package of this status are excluded from totals of<br/>`Work`, `Remaining work`, and  `% Complete` in a hierarchy. | Boolean |               | READ                 |\n|  defaultDoneRatio  | The percentageDone being applied when changing to this status                                                                              | Integer | 0 <= x <= 100 | READ                 |\n|      position      | Sort index of the status                                                                                                                   | Integer |               | READ                 |"},{"description":"The time entries endpoints return collections or single entities of type `TimeEntry`. The following tables list the different properties\nof `TimeEntry` entities.\n\n## Actions\n\n| Link                | Description                                                                | Condition                                                                                           |\n|:-------------------:| -------------------------------------------------------------------------- | ----------------------------------------------------------------                                    |\n| updateImmediately   | Directly perform edits on this time entry                                  | **Permission**: 'edit time entries' or 'edit own time entries' if the time entry belongs to the user, or 'log own time' if the time entry is ongoing |\n| update              | Form endpoint that aids in preparing and performing edits on a TimeEntry   | **Permission**: 'edit time entries' or 'edit own time entries' if the time entry belongs to the user, or 'log own time' if the time entry is ongoing |\n| delete              | Delete this time entry                                                     | **Permission**: 'edit time entries' or 'edit own time entries' if the time entry belongs to the user, or 'log own time' if the time entry is ongoing |\n\n## Linked Properties\n\n| Link          | Description                                                                                                                             | Type                | Constraints           | Supported operations | Condition                                                 |\n| :-----------: | --------------------------------------------------------------                                                                          | -------------       | --------------------- | -------------------- | --------------------------------------------------------- |\n| self          | This time entry                                                                                                                         | TimeEntry           | not null              | READ                 |                                                           |\n| project       | The project the time entry is bundled in. The project might be different from the work package's project once the workPackage is moved. | Project             | not null              | READ / WRITE         |                                                           |\n| workPackage   | **DEPRECATED** The work package the time entry is created on                                                                                           | WorkPackage         |                       | READ / WRITE         |                                                           |\n| entity   | The entity for which the time entry is created on                                                                                           | WorkPackage|Meeting         |                       | READ / WRITE         |                                                           |\n| user          | The user the time entry tracks expenditures for                                                                                         | User                | not null              | READ / WRITE          | **Permission**: Log time for other users permission      |\n| activity      | The time entry activity the time entry is categorized as                                                                                | TimeEntriesActivity |                       | READ / WRITE         |                                                           |\n\nDepending on custom fields defined for time entries, additional links might exist.\n\nTime entries are either linked to a work package or a meeting, the project reference is filled up automatically to point to the entity's project.\n\n## Local Properties\n\n| Property     | Description                                               | Type     | Constraints                                          | Supported operations | Condition                                                   |\n| :----------: | --------------------------------------------------------- | -------- | ---------------------------------------------------- | -------------------- | ----------------------------------------------------------- |\n| id           | Time entries' id                                          | Integer  | x > 0                                                | READ                 |                                                             |\n| comment      | A text provided by the user detailing the time entry      | String   |                                                      | READ / WRITE         |                                                             |\n| spentOn      | The date the expenditure is booked for                    | Date     |                                                      | READ / WRITE         |                                                             |\n| hours        | The time quantifying the expenditure                      | Time     |                                                      | READ / WRITE         |                                                             |\n| ongoing      | Whether the time entry is actively tracking               | Boolean  |                                                      | READ / WRITE         |                                                             |\n| createdAt    | The time the time entry was created                       | DateTime |                                                      | READ                 |                                                             |\n| updatedAt    | The time the time entry was last updated                  | DateTime |                                                      | READ                 |                                                             |\n\nDepending on custom fields defined for time entries, additional properties might exist.","name":"Time entries"},{"description":"Time entries are classified by an activity which is one item of a set of user defined activities (e.g. Design, Specification, Development).\n\n## Actions\n\nNone\n\n## Linked Properties\n\n| Link          | Description                                                    | Type                | Constraints           | Supported operations | Condition                                 |\n| :-----------: | -------------------------------------------------------------- | -------------       | --------------------- | -------------------- | ----------------------------------------- |\n| self          | This time entry activity                                       | TimeEntriesActivity | not null              | READ                 |                                           |\n| projects      | List of projects the time entry is active in                   | []Project           | not null              | READ / WRITE         |                                           |\n\n## Local Properties\n\n| Property     | Description                                                  | Type     | Constraints                                          | Supported operations | Condition                                                   |\n| :----------: | ---------------------------------------------------------    | -------- | ---------------------------------------------------- | -------------------- | ----------------------------------------------------------- |\n| id           | Time entries' id                                             | Integer  | x > 0                                                | READ                 |                                                             |\n| name         | The human readable name chosen for this activity             | String   | max 30 characters                                    | READ                 |                                                             |\n| position     | The rank the activity has in a list of activities            | Date     |                                                      | READ                 |                                                             |\n| default      | Flag to signal whether this activity is the default activity | Boolean  |                                                      | READ                 |                                                             |","name":"Time entry activities"},{"description":"Work package types represented in the system.\n\nTypes exist globally and are then activated for projects.\n\n## Linked Properties\n\n|  Link         | Description               | Type          | Constraints | Supported operations |\n|:-------------:|-------------------------- | ------------- | ----------- | -------------------- |\n| self          | This type                 | Type          | not null    | READ                 |\n\n## Local Properties\n\n| Property         | Description                                          | Type     | Constraints | Supported operations |\n|:----------------:| ---------------------------------------------------- | -------- | ----------- | -------------------- |\n| id               | Type id                                              | Integer  | x > 0       | READ                 |\n| name             | Type name                                            | String   |             | READ                 |\n| color            | The color used to represent this type                | Color    |             | READ                 |\n| position         | Sort index of the type                               | Integer  |             | READ                 |\n| isDefault        | Is this type active by default in new projects?      | Boolean  |             | READ                 |\n| isMilestone      | Do work packages of this type represent a milestone? | Boolean  |             | READ                 |\n| createdAt        | Time of creation                                     | DateTime |             | READ                 |\n| updatedAt        | Time of the most recent change to the user           | DateTime |             | READ                 |","name":"Types"},{"description":"The user preferences endpoints return collections or single entities of type `UserPreferences`. The following tables list the different properties\nof `UserPreferences` entities.\n\n## Linked Properties\n\n|  Link     | Description                                              | Type           | Constraints           | Supported operations |\n|:---------:|----------------------------------------------------------| -------------- | --------------------- | -------------------- |\n| self      | This UserPreferences                                     | UserPreferences| not null              | READ                 |\n| user      | The user that this preference belongs to                 | User           | not null              | READ                 |\n\n## Local Properties\n\n| Property               | Description                                                                     | Type                | Constraints | Supported operations |\n|:----------------------:| -----------------------------------------------------------                     | ----------          | ----------- | -------------------- |\n| autoHidePopups         | Whether to hide popups (e.g. success messages) after 5 seconds                  | Boolean             |             | READ / WRITE         |\n| notifications          | The settings for the notifications to be received by the user                   | NotificationSetting |             | READ / WRITE         |\n| timeZone               | Current selected time zone                                                      | String              |             | READ / WRITE         |\n| commentSortDescending  | Sort comments in descending order                                               | Boolean             |             | READ / WRITE         |\n| warnOnLeavingUnsaved   | Issue warning when leaving a page with unsaved text                             | Boolean             |             | READ / WRITE         |","name":"UserPreferences"},{"name":"Users","description":"The users endpoints return collections or single entities of type `User`. The following tables list the different properties\nof `User` entities.\n\n## Actions\n\n| Link                | Description                                                          | Condition                                                        |\n|:-------------------:| -------------------------------------------------------------------- | ---------------------------------------------------------------- |\n| lock                | Restrict the user from logging in and performing any actions         | not locked; **Permission**: Administrator                        |\n| show                | Link to the OpenProject user page (HTML)                             |                                                                  |\n| unlock              | Allow a locked user to login and act again                           | locked; **Permission**: Administrator                            |\n| updateImmediately   | Updates the user's attributes.                                       | **Permission**: Administrator, manage_user global permission     |\n| delete              | Permanently remove a user from the instance                          | **Permission**: Administrator, self-delete                       |\n\n## Linked Properties\n\n|  Link       | Description                                                                                                                                                          | Type              | Constraints           | Supported operations | Condition                                                     |\n|:-----------:|--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | --------------------- | -------------------- | -----------------------------------------                     |\n| self        | This user                                                                                                                                                            | User              | not null              | READ                 |                                                               |\n| auth_source | Link to the user's auth source (endpoint not yet implemented)                                                                                                        | LdapAuthSource    |                       | READ / WRITE         | **Permission**: Administrator                                 |\n| members     | Link to collection of all the user's memberships. The list will only include the memberships in projects in which the requesting user has the necessary permissions. | MemberCollection  |                       | READ                 | **Permission**: view members or manage members in any project |\n\nDepending on custom fields defined for users, additional links might exist.\n\n## Local Properties\n\n| Property     | Description                                               | Type     | Constraints                                          | Supported operations | Condition                                                                               |\n| :----------: | --------------------------------------------------------- | -------- | ---------------------------------------------------- | -------------------- | -----------------------------------------------------------                             |\n| id           | User's id                                                 | Integer  | x > 0                                                | READ                 |                                                                                         |\n| login        | User's login name                                         | String   | unique, 256 max length                               | READ / WRITE         | **Permission**: Administrator, manage_user global permission                            |\n| firstName    | User's first name                                         | String   | 30 max length                                        | READ / WRITE         | **Permission**: Administrator, manage_user global permission                            |\n| lastName     | User's last name                                          | String   | 30 max length                                        | READ / WRITE         | **Permission**: Administrator, manage_user global permission                            |\n| name         | User's full name, formatting depends on instance settings | String   |                                                      | READ                 |                                                                                         |\n| email        | User's email address                                      | String   | unique, 60 max length                                | READ / WRITE         | E-Mail address not hidden, **Permission**: Administrator, manage_user global permission |\n| admin        | Flag indicating whether or not the user is an admin       | Boolean  | in: [true, false]                                    | READ / WRITE         | **Permission**: Administrator                                                           |\n| avatar       | URL to user's avatar                                      | Url      |                                                      | READ                 |                                                                                         |\n| status       | The current activation status of the user (see below)     | String   | in: [\"active\", \"registered\", \"locked\", \"invited\"]    | READ                 |                                                                                         |\n| language     | User's language                                           | String   | ISO 639-1                                            | READ / WRITE         | **Permission**: Administrator, manage_user global permission                            |\n| password     | User's password for the default password authentication   | String   |                                                      | WRITE                | **Permission**: Administrator                                                           |\n| identity_url | User's identity_url for OmniAuth authentication           | String   |                                                      | READ / WRITE         | **Permission**: Administrator                                                           |\n| createdAt    | Time of creation                                          | DateTime |                                                      | READ                 |                                                                                         |\n| updatedAt    | Time of the most recent change to the user                | DateTime |                                                      | READ                 |                                                                                         |\n\nDepending on custom fields defined for users, additional properties might exist.\n\nThe `status` of a user can be one of:\n\n* `active` - the user can log in with the account right away\n\n* `invited` - the user is invited and is pending registration\n\nIf the user's `status` is set to `active` during creation a means of authentication\nhas to be provided which is one of the following:\n\n* `password` - The password with which the user logs in.\n\n* `auth_source` - Link to an LDAP auth source.\n\n* `identity_url` - The identity URL of an OmniAuth authentication provider.\n\nIf all of these are missing the creation will fail with an \"missing password\" error.\n\nThe `language` is limited to those activated in the system.\n\nDue to data privacy, the user's properties are limited to reveal as little about the user as possible.\nThus `login`, `firstName`, `lastName`, `language`, `createdAt` and `updatedAt` are hidden for all\nusers except for admins or the user themselves.\n\nPlease note that custom fields are not yet supported by the api although the backend supports them."},{"description":"`Values::Property` represents a single key - value pair. That pair typically is an\nexcerpt of the properties of a resource. `Values::Property` itself is not an independent resource. It will always be nested and as such\nwill only exist as part of another resource.\n\nIt is currently used e.g. in the Notification resource.\n\n## Linked Properties\n\n| Property         | Description                 | Type                | Constraints           | Supported operations | Condition                 |\n| :--------------: | ----------------------------| -----------         | --------------------- | -------------------- | ------------------------- |\n| self             | This value                  | Values::Property    | not null              | READ                 |                           |\n| schema           | This value's schema         | Schema              | not null              | READ                 |                           |\n\n## Local Properties\n\n| Property         | Description                                            | Type         | Constraints    | Supported operations | Condition                    |\n| :--------------: | ------------------------------------------------------ | -----------  | -------------- | -------------------- | ---------------------------- |\n| property         | The pairs' key name                                    | String       | not null       | READ                 |                              |\n| value            | The pairs' value                                       | Polymorphic  |                | READ                 |                              |","name":"Values::Property"},{"description":"Work Packages can be assigned to a version. As such, versions serve to group Work Packages into logical units where each group comprises all the work packages that needs to be finished in order for the version to be finished.\n\n## Actions\n\n| Link                | Description                                                              | Condition                              |\n|:-------------------:|--------------------------------------------------------------------------| ---------------------------------------|\n| update              | Form endpoint that aids in preparing and performing edits on the version | **Permission**: manage versions        |\n| updateImmediately   | Directly perform edits on the version                                    | **Permission**: manage versions        |\n\n## Linked Properties\n\n|  Link               | Description                                | Type          | Constraints                                                    | Supported operations |\n|:-------------------:|-----------------------------------------   | ------------- | -------------------------------------------------------------- | -------------------- |\n| self                | This version                               | Version       | not null                                                       | READ                 |\n| definingProject     | The workspace to which the version belongs | Workspace     | only present if the workspace is visible for the current user  | READ                 |\n| availableInProjects | Workspaces where this version can be used  | Workspaces    | not null                                                       | READ                 |\n\nDepending on custom fields defined for versions, additional linked properties might exist.\n\n## Local Properties\n\n| Property    | Description                                   | Type        | Constraints                                        | Supported operations |\n| :---------: | --------------------------------------------- | ----------- | -----------                                        | -------------------- |\n| id          | Version id                                    | Integer     | x > 0                                              | READ                 |\n| name        | Version name                                  | String      | not null, may not exceed 60 characters             | READ / WRITE         |\n| description |                                               | Formattable |                                                    | READ / WRITE         |\n| startDate   |                                               | Date        |                                                    | READ / WRITE         |\n| endDate     |                                               | Date        |                                                    | READ / WRITE         |\n| status      | The current status of the version             | String      | not null, only 'open', 'finished', 'closed'        | READ / WRITE         |\n| sharing     | The current status of the version             | String      | not null, limited to fixed set as defined by form  | READ / WRITE         |\n| createdAt   | Time of creation                              | DateTime    | not null                                           | READ                 |\n| updatedAt   | Time of the most recent change to the version | DateTime    | not null                                           | READ                 |\n\nDepending on custom fields defined for versions, additional properties might exist.","name":"Versions"},{"description":"A View is a representation of some information. That information might be a query (currently it always is).\nThe view will store the configuration on how to display the information but not the information itself.\n\nA View might then be a graph, a table, a gantt chart or something completely different.\nThe client will have to choose how to represenent in the view. \n\nA View instance will always be of a subtype of `Views`, e.g. `Views::WorkPackageslist`. The properties between each `Views` type might differ a lot.\n\n**The View is a new concept so it is prone to change.**\n\nCurrently a lot of restrictions still apply:\n  * There will always be a query associated to the view when in the complete concept, this limitation should not be necessary.\n  * A query can only have one view associated.\n  * There is neither an update nor a delete endpoint and the schema and form endpoints are also missing. \n    To delete a view, simply delete the query.\n  * Most of the properties are deduced from the associated query and can thus only be updated via updating the query.\n  * The properties are not different between `Views` subtypes.\n\n## Linked Properties\n\n| Link                  | Description                                                                                                               | Type                      | Constraints            | Supported operations |\n| :-------------------: | ----------------------------------------                                                                                  | -------------             | --------               | -------------------- |\n| self                  | This view                                                                                                                 | View (a subtype of it)    | not null               | READ                 |\n| query                 | This query from which to fetch the data                                                                                   | Query                     | not null               | READ/WRITE           |\n| project               | This project the view is defined in (deduces from the query). If no project is specified, the View is considered global.  | Project                   | Deduced from the query | READ                 |\n\n## Local Properties\n\n| Property         | Description                                           | Type                  | Constraints                               | Supported operations|\n| :--------------: | ------------------------------------------------------| -----------           | ------------------------------------      | --------------------|\n| _type            | The subtype chosen                                    | String                |                                           | READ                |\n| id               | View id                                               | Integer               | x > 0                                     | READ                |\n| name             | View name                                             | String                | Deduced from the query                    | READ                |\n| public           | Can users besides the owner see the view?             | Boolean               | Deduced from the query                    | READ                |\n| starred          | Should the view be highlighted to the user?           | Boolean               | Deduced from the query                    | READ                |\n| createdAt        | Time of creation                                      | DateTime              | not null                                  | READ                |\n| updatedAt        | Time of the most recent change to the view            | DateTime              | not null                                  | READ                |","name":"Views"},{"description":"Represents an individual page in a project's wiki.\n\n*This resource is currently a stub*\n\n## Actions\n\n| Link                | Description                                                          | Condition                                                                                                                        |\n|:-------------------:|----------------------------------------------------------------------| ---------------------------------------                                                                                          |\n| addAttachment       | Attach a file to the wiki page                                       | **Permission**: edit wiki page      |\n\n## Linked Properties\n\n| Property         | Description                                            | Type        | Constraints    | Supported operations |\n| :--------------: | ------------------------------------------------------ | ----------- | -------------- | -------------------- |\n| self             | This wiki page                                         | WikiPage    | not null       | READ                 |\n| attachments      | The files attached to this wiki page                   | Collection  |                | READ                 |\n| project          | The project the wiki page belongs to                   | Project     | not null       | READ                 |\n\n## Local Properties\n\n| Property         | Description                                 | Type                  | Constraints                          | Supported operations |\n| :--------------: | ------------------------------------------- | -----------           | ------------------------------------ | -------------------- |\n| id               | Identifier of this wiki page                | Integer               | x > 0                                | READ                 |\n| title            | The wiki page's title                       | String                | not null                             | READ                 |","name":"Wiki Pages"},{"description":"The work packages endpoints return collections or single entities of type `WorkPackage`. The following tables list the different properties\nof `WorkPackage` entities.\n\n## Actions\n\n| Link                | Description                                                              | Condition                              |\n|:-------------------:|--------------------------------------------------------------------------| ---------------------------------------|\n| addAttachment       | Attach a file to the WP                                                  | **Permission**: edit work package      |\n| addComment          | Post comment to WP                                                       | **Permission**: add work package notes |\n| addRelation         | Adds a relation to this work package.                                    | **Permission**: manage wp relations    |\n| addWatcher          | Add any user to WP watchers                                              | **Permission**: add watcher            |\n| customActions       | Collection of predefined changes that can be applied to the work package |                                        |\n| logTime             | Log time on the work package                                             | **Permission**: Log time, Log own time |\n| previewMarkup       | Post markup (in markdown) here to receive an HTML-rendered response      |                                        |\n| removeWatcher       | Remove any user from WP watchers                                         | **Permission**: delete watcher         |\n| unwatch             | Remove current user from WP watchers                                     | logged in; watching                    |\n| update              | Form endpoint that aids in preparing and performing edits on a WP        | **Permission**: edit work package      |\n| updateImmediately   | Directly perform edits on a work package                                 | **Permission**: edit work package      |\n| watch               | Add current user to WP watchers                                          | logged in; not watching                |\n| delete              | Delete this work package                                                 | **Permission**: delete work package    |\n\n## Linked Properties\n\n| Link                   | Description                                                                                                                                           | Type                   | Constraints                               | Supported operations  | Condition                                                                                   |\n| :--------------------: | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | ----------------------------------------- | --------------------- | -----------------------------------------                                                   |\n| self                   | This work package                                                                                                                                     | WorkPackage            | not null                                  | READ                  |                                                                                             |\n| schema                 | The schema of this work package                                                                                                                       | Schema                 | not null                                  | READ                  |                                                                                             |\n| ancestors              | Array of all visible ancestors of the work package, with the root node being the first element                                                        | Collection             | not null                                  | READ                  | **Permission** view work packages                                                           |\n| attachments            | The files attached to this work package                                                                                                               | Collection             | not null                                  | READ / WRITE          |                                                                                             |\n| author                 | The person that created the work package                                                                                                              | User                   | not null                                  | READ                  |                                                                                             |\n| assignee               | The person that is intended to work on the work package                                                                                               | User                   |                                           | READ / WRITE          |                                                                                             |\n| availableWatchers      | All users that can be added to the work package as watchers.                                                                                          | User                   |                                           | READ                  | **Permission** add work package watchers                                                    |\n| budget                 | The budget this work package is associated to                                                                                                         | Budget                 |                                           | READ / WRITE          | **Permission** view cost objects                                                            |\n| category               | The category of the work package                                                                                                                      | Category               |                                           | READ / WRITE          |                                                                                             |\n| children               | Array of all visible children of the work package                                                                                                     | Collection             | not null                                  | READ                  | **Permission** view work packages                                                           |\n| parent                 | Parent work package                                                                                                                                   | WorkPackage            | Needs to be visible (to the current user) | READ / WRITE          |                                                                                             |\n| priority               | The priority of the work package                                                                                                                      | Priority               | not null                                  | READ / WRITE          |                                                                                             |\n| project                | The project to which the work package belongs                                                                                                         | Project                | not null                                  | READ / WRITE          |                                                                                             |\n| projectPhase           | The project phase this work package is assigned to                                                                                                    | ProjectPhase           |                                           | READ / WRITE          | **Permission** view project phases. There has to be a project phase active in the project.  |\n| projectPhaseDefinition | The project phase definition for the project phase of this work package.                                                                              | ProjectPhaseDefinition |                                           | READ                  | **Permission** view project phases. The associated project phase has to be active.          |\n| responsible            | The person that is responsible for the overall outcome                                                                                                | User                   |                                           | READ / WRITE          |                                                                                             |\n| relations              | Relations this work package is involved in                                                                                                            | Relation               |                                           | READ                  | **Permission** view work packages                                                           |\n| revisions              | Revisions that are referencing the work package                                                                                                       | Revision               |                                           | READ                  | **Permission** view changesets                                                              |\n| status                 | The current status of the work package                                                                                                                | Status                 | not null                                  | READ / WRITE          |                                                                                             |\n| timeEntries            | All time entries logged on the work package. Please note that this is a link to an HTML resource for now and as such, the link is subject to change.  | N/A                    |                                           | READ                  | **Permission** view time entries                                                            |\n| type                   | The type of the work package                                                                                                                          | Type                   | not null                                  | READ / WRITE          |                                                                                             |\n| version                | The version associated to the work package                                                                                                            | Version                |                                           | READ / WRITE          |                                                                                             |\n| watchers               | All users that are currently watching this work package                                                                                               | Collection             |                                           | READ                  | **Permission** view work package watchers                                                   |\n\n## Local Properties\n\n| Property                | Description                                                                                                                                                                   | Type        | Constraints                                                                                                                                                                                  | Supported operations | Condition                        |\n| :--------------:        | ------------------------------------------------------                                                                                                                        | ----------- | ------------------------------------------------------------------------------------------------------                                                                                       | -------------------- | -------------------------------- |\n| id                      | Work package id                                                                                                                                                               | Integer     | x > 0                                                                                                                                                                                        | READ                 |                                  |\n| lockVersion             | The version of the item as used for optimistic locking                                                                                                                        | Integer     |                                                                                                                                                                                              | READ                 |                                  |\n| subject                 | Work package subject                                                                                                                                                          | String      | not null; 1 <= length <= 255                                                                                                                                                                 | READ / WRITE         |                                  |\n| type                    | Name of the work package's type                                                                                                                                               | String      | not null                                                                                                                                                                                     | READ                 |                                  |\n| description             | The work package description                                                                                                                                                  | Formattable |                                                                                                                                                                                              | READ / WRITE         |                                  |\n| scheduleManually        | Uses manual scheduling mode when true (default). Uses automatic scheduling mode when false. Can be automatic only when predecessors or children are present.                  | Boolean     |                                                                                                                                                                                              | READ / WRITE         |                                  |\n| startDate               | Scheduled beginning of a work package                                                                                                                                         | Date        | Cannot be set for parent work packages unless it is scheduled manually; must be equal or greater than the earliest possible start date; Exists only on work packages of a non milestone type | READ / WRITE         |                                  |\n| dueDate                 | Scheduled end of a work package                                                                                                                                               | Date        | Cannot be set for parent work packages unless it is scheduled manually; must be greater than or equal to the start date; Exists only on work packages of a non milestone type                | READ / WRITE         |                                  |\n| date                    | Date on which a milestone is achieved                                                                                                                                         | Date        | Exists only on work packages of a milestone type                                                                                                                                             | READ / WRITE         |                                  |\n| derivedStartDate        | Similar to start date but is not set by a client but rather deduced by the work packages' descendants. If manual scheduleManually is active, the two dates can deviate.       | Date        |                                                                                                                                                                                              | READ                 |                                  |\n| derivedDueDate          | Similar to due date but is not set by a client but rather deduced by the work packages' descendants. If manual scheduleManually is active, the two dates can deviate.         | Date        |                                                                                                                                                                                              | READ                 |                                  |\n| duration                | The amount of time in hours the work package needs to be completed.                                                                                                           | Duration    | Not available for milestone type of work packages.                                                                                                                                           | READ / WRITE         |                                  |\n| estimatedTime           | Corresponds to work. Time a work package likely needs to be completed.                                                                                                        | Duration    |                                                                                                                                                                                              | READ / WRITE         |                                  |\n| derivedEstimatedTime    | Corresponds to total work. Time a work package likely needs to be completed including itself and its descendants.                                                             | Duration    |                                                                                                                                                                                              | READ                 |                                  |\n| remainingTime           | Corresponds to remaining work. Remaining time a work package likely needs to be completed.                                                                                    | Duration    |                                                                                                                                                                                              | READ / WRITE         |                                  |\n| derivedRemainingTime    | Corresponds to total remaining work. Remaining time a work package likely needs to be completed including itself and its descendants.                                         | Duration    |                                                                                                                                                                                              | READ                 |                                  |\n| ignoreNonWorkingDays    | 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.  | Boolean     | Cannot be set for parent work packages unless it is scheduled manually                                                                                                                       | READ                 |                                  |\n| spentTime               | The time booked for this work package by users working on it                                                                                                                  | Duration    |                                                                                                                                                                                              | READ                 | **Permission** view time entries |\n| percentageDone          | Corresponds to % complete. Amount of total completion for a work package.                                                                                                     | Integer     | 0 <= x <= 100; can be null                                                                                                                                                                   | READ                 |                                  |\n| derivedPercentageDone   | Corresponds to total % complete. Amount of total completion for a work package and its descendants.                                                                           | Integer     | 0 <= x <= 100; can be null                                                                                                                                                                   | READ                 |                                  |\n| readonly                | If true, the work package is in a readonly status so with the exception of the status, no other property can be altered.                                                      | Boolean     |                                                                                                                                                                                              | READ                 | Enterprise edition only          |\n| createdAt               | Time of creation                                                                                                                                                              | DateTime    |                                                                                                                                                                                              | READ                 |                                  |\n| updatedAt               | Time of the most recent change to the work package                                                                                                                            | DateTime    |                                                                                                                                                                                              | READ                 |                                  |\n\nNote that the properties listed here only cover the built-in properties of the OpenProject Core.\nUsing plug-ins and custom fields a work package might contain various additional properties.\nA client can consult the schema information to which the work package links. The schema will contain information about\nall properties of the linking work package, including properties added by plug-ins and custom fields.\n\nCustom fields are identified by a key in the form of `customFieldN`, where `N` is an integer. Depending on their type,\nthey can occur as properties or as linked properties. A client has to consult the schema to resolve\nthe human readable name of custom fields.\n\nProperties that cannot be set directly on parent work packages are inferred from their children instead:\n\n* `startDate` is the earliest start date from its children if automatic scheduling is activated.\n\n* `dueDate` is the latest finish date from its children if automatic scheduling is activated.\n\n* `derivedEstimatedTime` is the sum of estimated times from its children and the work package's own estimated time.\n\n* `derivedRemainingTime` is the sum of remaining times from its children and the work package's own remaining time\n\n* `derivedPercentageDone` is computed by the work package's derivedEstimatedTime and derivedRemainingTime.\n\n`startDate` can also not be earlier than a finish date of any predecessor.\n\nWhile attachments are returned as a link whose content is to be fetched separately, clients can choose to\nreplace the work package's attachments by providing an array of already uploaded [Attachment resources](https://www.openproject.org/docs/api/endpoints/attachments/)\non [create](https://www.openproject.org/docs/api/endpoints/work-packages/#create-work-package)\nand [update](https://www.openproject.org/docs/api/endpoints/work-packages/#update-a-work-package). The attachments the work package has had prior to the request will be removed.","name":"Work Packages"},{"name":"Work Schedule","description":"The work schedule defines if days are working days or non-working days.\n\nA day can be a non-working day if any of these two conditions are met:\n\n  - the day is a recurring non-working week day: a weekend day. For instance\n    Sunday is not worked in most countries;\n  - the day has been defined as a non-working day: national bank holidays or\n    other days deemed special. For instance the 1st of January is New Year's\n    day and is a bank holiday in most countries.\n\nEndpoints can define which week days are working/non-working days, and which\ndates are non-working days.\n\nTo represent the work schedule, `Day`, `WeekDay`, and `NonWorkingDay` models are used.\n\n## Day Actions\n\nNone\n\n## Day Linked Properties\n\n| Link              | Description                                                      | Type                      | Constraints | Supported operations |\n| :---------------: | ---------------------------------------------------------------- | ------------------------- | ----------- | -------------------- |\n| self              | This day                                                         | Day                       | not null    | READ                 |\n| nonWorkingReasons | A list of resources describing why this day is a non-working day | (WeekDay/NonWorkingDay)[] |             | READ                 |\n| weekDay           | The week day for this day                                        | WeekDay                   | not null    | READ                 |\n\n## Day Local Properties\n\n| Property   | Description                                 | Type    | Constraints    | Supported operations |\n| :--------: | ------------------------------------------- | ------- | -------------- | -------------------- |\n| date       | The date in ISO8601 format (YYYY-MM-DD)     | Date    | not null       | READ                 |\n| name       | The name of the day                         | String  | not null       | READ                 |\n| working    | `true` for a working day, `false` otherwise | Boolean | not null       | READ                 |\n\n\n## WeekDay Actions\n\n| Link   | Description          | Condition                          |\n| :----: | -------------------- | ---------------------------------- |\n| update | Update this week day | **Permission**: edit work schedule |\n\n## WeekDay Linked Properties\n\n| Link | Description   | Type    | Constraints | Supported operations |\n| :--: | ------------- | ------- | ----------- | -------------------- |\n| self | This week day | WeekDay | not null    | READ                 |\n\n## WeekDay Local Properties\n\n| Property | Description                                         | Type    | Constraints    | Supported operations |\n| :------: | --------------------------------------------------- | ------- | -------------- | -------------------- |\n| day      | The week day from 1 to 7. 1 is Monday. 7 is Sunday. | Integer | x >= 1, x <= 7 | READ                 |\n| name     | The name of the week day                            | String  | not null       | READ                 |\n| working  | `true` for a working week day, `false` otherwise    | Boolean | not null       | READ/WRITE           |\n\n\n## NonWorkingDay Actions\n\n| Link   | Description                 | Condition                          |\n| :----: | --------------------------- | ---------------------------------- |\n| update | Update this non-working day | **Permission**: edit work schedule |\n\n## NonWorkingDay Linked Properties\n\n| Link | Description          | Type          | Constraints | Supported operations |\n| :--: | -------------------- | ------------- | ----------- | -------------------- |\n| self | This non-working day | NonWorkingDay | not null    | READ                 |\n\n## NonWorkingDay Local Properties\n\n| Property | Description                             | Type   | Constraints | Supported operations |\n| :------: | --------------------------------------- | ------ | ----------- | -------------------- |\n| date     | The date in ISO8601 format (YYYY-MM-DD) | Date   | not null    | READ                 |\n| name     | The name of the non-working day day     | String | not null    | READ/WRITE           |"},{"name":"Workspaces","description":"Workspaces are containers for resources to be worked on and people with sets of permissions that work on the former. There is no actual workspace resource\nin OpenProject. Rather, it is the generic term describing:\n* [Portfolio](https://www.openproject.org/docs/api/endpoints/portfolios)\n* [Program](https://www.openproject.org/docs/api/endpoints/programs)\n* [Project](https://www.openproject.org/docs/api/endpoints/projects)\n\nA lot of resources reference the workspaces they are valid in, e.g. [Work package](https://www.openproject.org/docs/api/endpoints/work-packages/#linked-properties) and\n[Memberships](https://www.openproject.org/docs/api/endpoints/memberships/#linked-properties).\n\nBefore OP 17.0 only projects existed. At that point, the API v3 was already established. That is the reason why quite a number of\nresource have links called \"project\" or similar when they are in fact contained in a different type of workspace. To not break the API, the name of the link was kept. \nBut those links can contain the other types of workspaces as well. It can thus be possible for a work package to have the following:\n\n```\n  {\n     \"_links\": {\n       \"project\": {\n         \"href\": \"/api/v3/portfolios/48\",\n         \"title: \"A portfolio\"\n       },\n       ...\n     },\n     ...\n  }\n```\n\nAccordingly, to set the workspace a resource is in, sending any workspace link to the link property will be accepted by the API.\n\nThe concept of workspaces is planned to be extended to include further types."}],"security":[{"BasicAuth":[]}]}
