OpenProject website screenshot

OpenProject

OpenProject is an open source project management platform offering work package tracking, Gantt charts, agile boards, time tracking, BIM, and enterprise project portfolio management. The OpenProject APIv3 is a hypermedia (HAL+JSON) REST API that exposes work packages, projects, users, attachments, custom fields, and many other resources.

1 APIs 0 Features
AgileGanttOpen SourceProject ManagementTime TrackingWork Packages

APIs

OpenProject API v3

The OpenProject API v3 is a hypermedia REST API (HATEOAS, HAL+JSON) for managing work packages, projects, users, time entries, attachments, custom fields, and other OpenProject ...

Collections

Pricing Plans

Rate Limits

Openproject Rate Limits

5 limits

RATE LIMITS

FinOps

Resources

🔗
VulnerabilityDisclosure
VulnerabilityDisclosure
🔗
DomainSecurity
DomainSecurity
🔑
Authentication
Authentication
🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Documentation
Documentation
🔗
API
API
👥
GitHub
GitHub
💰
Pricing
Pricing
🔗
SelfHosting
SelfHosting
🔗
Login
Login
💬
Support
Support
📰
Blog
Blog

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: OpenProject API V3 (Stable)
  version: '3'
request:
  auth:
    type: basic
    username: '{{username}}'
    password: '{{password}}'
items:
- info:
    name: Root
    type: folder
  items:
  - info:
      name: View root
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3
    docs: Returns the root resource, containing basic information about the server instance and a collection of useful links.
- info:
    name: Actions & Capabilities
    type: folder
  items:
  - info:
      name: List actions
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/actions
      params:
      - name: filters
        value: '[{ "id": { "operator": "=", "values": ["memberships/create"] }" }]'
        type: query
        description: 'JSON specifying filter conditions.

          Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint.

          Currently supported filters are:


          + id: Returns only the action having the id or all actions except those having the id(s).'
      - name: sortBy
        value: '[["id", "asc"]]'
        type: query
        description: 'JSON specifying sort criteria.

          Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint.
          Currently supported sorts are:


          + *No sort supported yet*'
    docs: 'Returns a collection of actions. The client can choose to filter the actions similar to how work packages are filtered.

      In addition to the provided filters, the server will reduce the result set to only contain actions, for which the requesting
      client

      has sufficient permissions.'
  - info:
      name: View action
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/actions/:id
      params:
      - name: id
        value: work_packages/create
        type: path
        description: action id which is the name of the action
    docs: Returns an individual action.
  - info:
      name: List capabilities
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/capabilities
      params:
      - name: filters
        value: '[{ "principal": { "operator": "=", "values": ["1"] }" }]'
        type: query
        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."
      - name: sortBy
        value: '[["id", "asc"]]'
        type: query
        description: 'JSON specifying sort criteria.

          Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint.
          Currently supported sorts are:


          + id: Sort by the capabilities id'
    docs: 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
  - info:
      name: View global context
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/capabilities/context/global
    docs: Returns the global capability context. This context is necessary to consistently link to a context even if the context
      is not a project.
  - info:
      name: View capabilities
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/capabilities/:id
      params:
      - name: id
        value: work_packages/create/p123-567
        type: path
        description: capability id
    docs: View capabilities
- info:
    name: Activities
    type: folder
  items:
  - info:
      name: Get an activity
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/activities/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Activity id
    docs: Returns the requested activity resource identified by its unique id.
  - info:
      name: Update activity
      type: http
    http:
      method: PATCH
      url: https://qa.openproject-edge.com/api/v3/activities/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Activity id
      body:
        type: json
        data: '{}'
    docs: Updates an activity's comment and, on success, returns the updated activity.
  - info:
      name: List attachments by activity
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/activities/:id/attachments
      params:
      - name: id
        value: '1'
        type: path
        description: ID of the activity whose attachments will be listed
    docs: List all attachments of a single activity.
  - info:
      name: Add attachment to activity
      type: http
    http:
      method: POST
      url: https://qa.openproject-edge.com/api/v3/activities/:id/attachments
      params:
      - name: id
        value: '1'
        type: path
        description: ID of the activity to receive the attachment
      body:
        type: multipart-form
        data: []
    docs: Adds an attachment to the specified activity.
  - info:
      name: List emoji reactions by activity
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/activities/:id/emoji_reactions
      params:
      - name: id
        value: '1'
        type: path
        description: ID of the activity whose emoji reactions will be listed
    docs: List all emoji reactions of a single activity.
  - info:
      name: Toggle emoji reaction for an activity
      type: http
    http:
      method: PATCH
      url: https://qa.openproject-edge.com/api/v3/activities/:id/emoji_reactions
      params:
      - name: id
        value: '1'
        type: path
        description: ID of the activity to toggle emoji reaction for
      body:
        type: json
        data: '{}'
    docs: 'Toggle an emoji reaction for a given activity. If the user has already reacted with the given emoji,

      the reaction will be removed. Otherwise, a new reaction will be created.


      **Note:** The response contains the complete collection of all emoji reactions for this activity.


      **Required permission:**

      - `add_work_package_comments`

      - for internal comments: `add_internal_comments`'
- info:
    name: Attachments
    type: folder
  items:
  - info:
      name: Create Attachment
      type: http
    http:
      method: POST
      url: https://qa.openproject-edge.com/api/v3/attachments
    docs: 'Clients can create attachments without a container first and attach them later on.

      This is useful if the container does not exist at the time the attachment is uploaded.

      After the upload, the client can then claim such containerless attachments for any resource eligible (e.g. WorkPackage)
      on subsequent requests.

      The upload and the claiming *must* be done for the same user account. Attachments uploaded by another user cannot be
      claimed and

      once claimed for a resource, they cannot be claimed by an'
  - info:
      name: View attachment
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/attachments/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Attachment id
    docs: View attachment
  - info:
      name: Delete attachment
      type: http
    http:
      method: DELETE
      url: https://qa.openproject-edge.com/api/v3/attachments/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Attachment id
    docs: Permanently deletes the specified attachment.
  - info:
      name: List attachments by meeting
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/meetings/:id/attachments
      params:
      - name: id
        value: '1'
        type: path
        description: ID of the meeting whose attachments will be listed
    docs: List attachments by meeting
  - info:
      name: Add attachment to meeting
      type: http
    http:
      method: POST
      url: https://qa.openproject-edge.com/api/v3/meetings/:id/attachments
      params:
      - name: id
        value: '1'
        type: path
        description: ID of the meeting to receive the attachment
    docs: Adds an attachment with the meeting as its container.
  - info:
      name: List attachments by post
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/posts/:id/attachments
      params:
      - name: id
        value: '1'
        type: path
        description: ID of the post whose attachments will be listed
    docs: List attachments by post
  - info:
      name: Add attachment to post
      type: http
    http:
      method: POST
      url: https://qa.openproject-edge.com/api/v3/posts/:id/attachments
      params:
      - name: id
        value: '1'
        type: path
        description: ID of the post to receive the attachment
    docs: Adds an attachment with the post as its container.
  - info:
      name: List attachments by wiki page
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/wiki_pages/:id/attachments
      params:
      - name: id
        value: '1'
        type: path
        description: ID of the wiki page whose attachments will be listed
    docs: List attachments by wiki page
  - info:
      name: Add attachment to wiki page
      type: http
    http:
      method: POST
      url: https://qa.openproject-edge.com/api/v3/wiki_pages/:id/attachments
      params:
      - name: id
        value: '1'
        type: path
        description: ID of the wiki page to receive the attachment
    docs: Adds an attachment with the wiki page as its container.
  - info:
      name: List attachments by work package
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/work_packages/:id/attachments
      params:
      - name: id
        value: '1'
        type: path
        description: ID of the work package whose attachments will be listed
    docs: List attachments by work package
  - info:
      name: Create work package attachment
      type: http
    http:
      method: POST
      url: https://qa.openproject-edge.com/api/v3/work_packages/:id/attachments
      params:
      - name: id
        value: '1'
        type: path
        description: ID of the work package to receive the attachment
    docs: 'To add an attachment to a work package, a client needs to issue a request of type `multipart/form-data`

      with exactly two parts.


      The first part *must* be called `metadata`. Its content type is expected to be `application/json`,

      the body *must* be a single JSON object, containing at least the `fileName` and optionally the attachments `description`.


      The second part *must* be called `file`, its content type *should* match the mime type of the file.

      The body *must* be the raw content of the file.

      N'
- info:
    name: Budgets
    type: folder
  items:
  - info:
      name: view Budget
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/budgets/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Budget id
    docs: view Budget
  - info:
      name: view Budgets of a Project
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/projects/:id/budgets
      params:
      - name: id
        value: '1'
        type: path
        description: Project id
    docs: view Budgets of a Project
- info:
    name: Categories
    type: folder
  items:
  - info:
      name: View Category
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/categories/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Category id
    docs: View Category
  - info:
      name: List categories of a project
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/projects/:id/categories
      params:
      - name: id
        value: '1'
        type: path
        description: ID of the project whose categories will be listed
    docs: 'List all categories of a project

      This endpoint is deprecated and replaced by [`/api/v3/workspaces/{id}/categories`](https://www.openproject.org/docs/api/endpoints/categories/#list-categories-of-a-workspace) '
  - info:
      name: List categories of a workspace
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/workspaces/:id/categories
      params:
      - name: id
        value: '1'
        type: path
        description: ID of the workspace whose categories will be listed
    docs: List all categories of a project
- info:
    name: Configuration
    type: folder
  items:
  - info:
      name: View configuration
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/configuration
    docs: View configuration
  - info:
      name: View project configuration
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/projects/:id/configuration
      params:
      - name: id
        value: '1'
        type: path
        description: Project id
    docs: 'Returns the configuration scoped to a specific project, including all global

      configuration properties plus project-specific settings.'
- info:
    name: Custom actions
    type: folder
  items:
  - info:
      name: Get a custom action
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/custom_actions/:id
      params:
      - name: id
        value: '42'
        type: path
        description: The id of the custom action to fetch
    docs: Retrieves a custom action by id.
  - info:
      name: Execute custom action
      type: http
    http:
      method: POST
      url: https://qa.openproject-edge.com/api/v3/custom_actions/:id/execute
      params:
      - name: id
        value: '1'
        type: path
        description: The id of the custom action to execute
      body:
        type: json
        data: '{}'
    docs: "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."
- info:
    name: Default
    type: folder
  items:
  - info:
      name: Get the custom field hierarchy items
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/custom_fields/:id/items
      params:
      - name: id
        value: '42'
        type: path
        description: The custom field's unique identifier
      - name: parent
        value: '1337'
        type: query
        description: The identifier of the parent hierarchy item
      - name: depth
        value: '1'
        type: query
        description: The level of hierarchy depth
    docs: 'Retrieves the hierarchy of custom fields.


      The hierarchy is a tree structure of hierarchy items. It is represented as a flat list of items, where each item

      has a reference to its parent and children. The list is ordered in a depth-first manner. The first item is the

      requested parent. If parent was unset, the root item is returned as first element.


      Passing the `depth` query parameter allows to limit the depth of the hierarchy. If the depth is unset, the full

      hierarchy tree is returned. If the de'
  - info:
      name: Get a custom field hierarchy item
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/custom_field_items/:id
      params:
      - name: id
        value: '42'
        type: path
        description: The custom field item's unique identifier
    docs: Retrieves a single custom field item specified by its unique identifier.
  - info:
      name: Get a custom field hierarchy item's branch
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/custom_field_items/:id/branch
      params:
      - name: id
        value: '42'
        type: path
        description: The custom field item's unique identifier
    docs: 'Retrieves the branch of a single custom field item specified by its unique identifier.


      A branch is list of all ancestors, starting with the root item and finishing with the item itself.'
- info:
    name: Custom Options
    type: folder
  items:
  - info:
      name: View Custom Option
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/custom_options/:id
      params:
      - name: id
        value: '1'
        type: path
        description: The custom option's identifier
    docs: View Custom Option
- info:
    name: Work Schedule
    type: folder
  items:
  - info:
      name: Lists all non working days
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/days/non_working
      params:
      - name: filters
        value: '[{ "date": { "operator": "<>d", "values": ["2022-05-02","2022-05-26"] } }]'
        type: query
        description: "JSON specifying filter conditions.\n\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/)\n\
          endpoint. 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."
    docs: 'Lists all one-time non working days, such as holidays.

      It does not lists the non working weekdays, such as each Saturday, Sunday.

      For listing the weekends, the `/api/v3/days` endpoint should be used.


      All days from current year are returned by default.'
  - info:
      name: Creates a non-working day (NOT IMPLEMENTED)
      type: http
    http:
      method: POST
      url: https://qa.openproject-edge.com/api/v3/days/non_working
      body:
        type: json
        data: '{}'
    docs: '**(NOT IMPLEMENTED)**

      Marks a day as being a non-working day.


      Note: creating a non-working day will not affect the start and finish dates

      of work packages but will affect their duration.'
  - info:
      name: View a non-working day
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/days/non_working/:date
      params:
      - name: date
        value: '2022-05-06'
        type: path
        description: The date of the non-working day to view in ISO 8601 format.
    docs: Returns the non-working day information for a given date.
  - info:
      name: Update a non-working day attributes (NOT IMPLEMENTED)
      type: http
    http:
      method: PATCH
      url: https://qa.openproject-edge.com/api/v3/days/non_working/:date
      params:
      - name: date
        value: '2022-05-06'
        type: path
        description: The date of the non-working day to view in ISO 8601 format.
      body:
        type: json
        data: '{}'
    docs: '**(NOT IMPLEMENTED)**

      Update the non-working day information for a given date.'
  - info:
      name: Removes a non-working day (NOT IMPLEMENTED)
      type: http
    http:
      method: DELETE
      url: https://qa.openproject-edge.com/api/v3/days/non_working/:date
      params:
      - name: date
        value: '2022-05-06'
        type: path
        description: The date of the non-working day to view in ISO 8601 format.
    docs: '**(NOT IMPLEMENTED)**

      Removes the non-working day at the given date.


      Note: deleting a non-working day will not affect the start and finish dates

      of work packages but will affect their duration.'
  - info:
      name: Lists week days
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/days/week
    docs: Lists week days with work schedule information.
  - info:
      name: Update week days (NOT IMPLEMENTED)
      type: http
    http:
      method: PATCH
      url: https://qa.openproject-edge.com/api/v3/days/week
      body:
        type: json
        data: '{}'
    docs: '**(NOT IMPLEMENTED)**

      Update multiple week days with work schedule information.'
  - info:
      name: View a week day
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/days/week/:day
      params:
      - name: day
        value: ''
        type: path
        description: The week day from 1 to 7. 1 is Monday. 7 is Sunday.
    docs: View a week day and its attributes.
  - info:
      name: Update a week day attributes (NOT IMPLEMENTED)
      type: http
    http:
      method: PATCH
      url: https://qa.openproject-edge.com/api/v3/days/week/:day
      params:
      - name: day
        value: ''
        type: path
        description: The week day from 1 to 7. 1 is Monday. 7 is Sunday.
      body:
        type: json
        data: '{}'
    docs: '**(NOT IMPLEMENTED)**

      Makes a week day a working or non-working day.


      Note: changing a week day working attribute will not affect the start and

      finish dates of work packages but will affect their duration attribute.'
  - info:
      name: Lists days
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/days
      params:
      - name: filters
        value: '[{ "date": { "operator": "<>d", "values": ["2022-05-02","2022-05-26"] } }, { "working": { "operator": "=",
          "values": ["f"] } }]'
        type: query
        description: "JSON specifying filter conditions.\n\nAccepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/)\n\
          endpoint. 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."
    docs: 'Lists days information for a given date interval.


      All days from the beginning of current month to the end of following month

      are returned by default.'
  - info:
      name: View day
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/days/:date
      params:
      - name: date
        value: '2022-05-06'
        type: path
        description: The date of the non-working day to view in ISO 8601 format.
    docs: View the day information for a given date.
- info:
    name: Documents
    type: folder
  items:
  - info:
      name: List Documents
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/documents
      params:
      - name: offset
        value: '25'
        type: query
        description: Page number inside the requested collection.
      - name: pageSize
        value: '25'
        type: query
        description: Number of elements to display per page.
      - name: sortBy
        value: '[["created_at", "asc"]]'
        type: query
        description: 'JSON specifying sort criteria.

          Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint.
          Currently supported sorts are:


          + id: Sort by primary key


          + created_at: Sort by document creation datetime'
    docs: The documents returned depend on the provided parameters and also on the requesting user's permissions.
  - info:
      name: View document
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/documents/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Document id
    docs: View document
  - info:
      name: Update document
      type: http
    http:
      method: PATCH
      url: https://qa.openproject-edge.com/api/v3/documents/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Document id
      body:
        type: json
        data: '{}'
    docs: Updates a document's attributes.
- info:
    name: Forms
    type: folder
  items:
  - info:
      name: show or validate form
      type: http
    http:
      method: POST
      url: https://qa.openproject-edge.com/api/v3/example/form
      body:
        type: json
        data: '{}'
    docs: This is an example of how a form might look like. Note that this endpoint does not exist in the actual implementation.
- info:
    name: Schemas
    type: folder
  items:
  - info:
      name: view the schema
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/example/schema
    docs: This is an example of how a schema might look like. Note that this endpoint does not exist in the actual implementation.
- info:
    name: Collections
    type: folder
  items:
  - info:
      name: view aggregated result
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/examples
      params:
      - name: groupBy
        value: status
        type: query
        description: 'The column to group by.

          Note: Aggregation is as of now only supported by the work package collection.

          You can pass any column name as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/)
          endpoint.'
      - name: showSums
        value: 'true'
        type: query
    docs: view aggregated result
- info:
    name: File links
    type: folder
  items:
  - info:
      name: Gets a file link.
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/file_links/:id
      params:
      - name: id
        value: '42'
        type: path
        description: File link id
    docs: Gets a single file link resource of a work package.
  - info:
      name: Removes a file link.
      type: http
    http:
      method: DELETE
      url: https://qa.openproject-edge.com/api/v3/file_links/:id
      params:
      - name: id
        value: '42'
        type: path
        description: File link id
    docs: 'Removes a file link on a work package.


      The request contains only the file link identifier as a path parameter. No request body is needed.'
  - info:
      name: Creates an opening uri of the linked file.
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/file_links/:id/open
      params:
      - name: id
        value: '42'
        type: path
        description: File link id
      - name: location
        value: 'true'
        type: query
        description: Boolean flag indicating, if the file should be opened directly or rather the directory location.
    docs: 'Creates a uri to open the origin file linked by the given file link. This uri depends on the storage type and

      is always located on the origin storage itself.'
  - info:
      name: Creates a download uri of the linked file.
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/file_links/:id/download
      params:
      - name: id
        value: '42'
        type: path
        description: File link id
    docs: 'Creates a uri to download the origin file linked by the given file link. This uri depends on the storage type and

      is always located on the origin storage itself.'
  - info:
      name: Get Storages
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/storages
    docs: Returns a collection of storages.
  - info:
      name: Creates a storage.
      type: http
    http:
      method: POST
      url: https://qa.openproject-edge.com/api/v3/storages
      body:
        type: json
        data: '{}'
    docs: 'Creates a storage resource. When creating a storage, a confidential OAuth 2 provider application is created

      automatically. The oauth client id and secret of the created OAuth application are returned in the response.


      **IMPORTANT:** This is the only time, the oauth client secret is visible to the consumer. After that, the secret is

      hidden.


      To update the storage with OAuth client credentials, which enable the storage resource to behave as an OAuth 2

      client against an external OAuth 2 provider ap'
  - info:
      name: Get a storage
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/storages/:id
      params:
      - name: id
        value: '1337'
        type: path
        description: Storage id
    docs: 'Gets a storage resource. As a side effect, a live connection to the storages origin is established to retrieve

      connection state data.'
  - info:
      name: Update a storage
      type: http
    http:
      method: PATCH
      url: https://qa.openproject-edge.com/api/v3/storages/:id
      params:
      - name: id
        value: '1337'
        type: path
        description: Storage id
      body:
        type: json
        data: '{}'
    docs: 'Updates a storage resource. Only data that is not generated by the server can be updated. This excludes the OAuth
      2

      application data.'
  - info:
      name: Delete a storage
      type: http
    http:
      method: DELETE
      url: https://qa.openproject-edge.com/api/v3/storages/:id
      params:
      - name: id
        value: '1337'
        type: path
        description: Storage id
    docs: 'Deletes a storage resource. This also deletes all related records, like the created oauth application, client,
      and

      any file links created within this storage.'
  - info:
      name: Gets files of a storage.
      type: http
    http:
      method: GET
      url: https://qa.openproject-edge.com/api/v3/storages/:id/files
      params:
      - name: id
        value: '1337'
        type: path
        description: Storage id
      - name: parent
        value: /my/data
        type: query
        description: Parent file identification
    docs: 'Gets a collection of files from a storage.


      If no `parent` context is given, the result is the content of the document root. With `parent` context given, the

      result contains the collections of files/directories from within the given parent file id.


      If given `parent` context is no directory, `400 Bad Request` is returned.'
  - info:
      name: Preparation of a direct upload of a file to the given storage.
      type: http
    http:
      method: POST
      url: https://qa.openproject-edge.com/api/v3/storages/:id/files/prepare_upload
      params:
      - name: id
        value: '1337'
        type: path
        description: Storage id
      body:
        type: json
        data: '{}'
    docs: 'Executes a request that prepares a link for a direct upload to the storage.


      The background here is, that the client needs to make a direct request to the storage instance for file uploading,

      but shou

# --- truncated at 32 KB (180 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/openproject/refs/heads/main/apis.yml