OpenProject Documents API

A document is a file containing a list of attachments. *Please note, that the endpoint is only a stub for now.* ## Actions None yet ## Linked Properties | Link | Description | Type | Constraints | Supported operations | Condition | | :-----------: | ------------------------------------- | ------------- | --------------------- | -------------------- | ----------------------------------------- | | self | This document | Document | not null | READ | | | project | The project the document is in | Project | not null | READ / WRITE | | | attachments | The attachments belonging to the document | []Attachment | not null | READ / WRITE | | ## Local Properties | Property | Description | Type | Constraints | Supported operations | Condition | | :----------: | --------------------------------------------------------- | -------- | ---------------------------------------------------- | -------------------- | ----------------------------------------------------------- | | id | Document's id | Integer | x > 0 | READ | | | title | The title chosen for the collection of documents | String | max 60 characters | READ | | | description | A text describing the documents | String | | READ | | | createdAt | The time the document was created at | DateTime | | READ | |

Operations 3

GET /api/v3/documents List Documents #
GET /api/v3/documents/{id} View document #
PATCH /api/v3/documents/{id} Update document #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/openproject-documents-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

openproject-documents-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: You're looking at the current **stable** documentation of the OpenProject APIv3.
  title: OpenProject API V3 (Stable) Documents API
  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
security:
- BasicAuth: []
tags:
- description: A document is a file containing a list of attachments.
  name: Documents
paths:
  /api/v3/documents:
    get:
      parameters:
      - description: Page number inside the requested collection.
        example: '25'
        in: query
        name: offset
        required: false
        schema:
          default: 1
          type: integer
      - description: Number of elements to display per page.
        example: '25'
        in: query
        name: pageSize
        required: false
        schema:
          type: integer
      - description: 'JSON specifying sort criteria.

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


          + id: Sort by primary key


          + created_at: Sort by document creation datetime'
        example: '[["created_at", "asc"]]'
        in: query
        name: sortBy
        required: false
        schema:
          type: string
      responses:
        '200':
          content:
            application/hal+json:
              examples:
                response:
                  value:
                    _embedded:
                      elements:
                      - _links:
                          addAttachment:
                            href: /api/v3/documents/1/attachments
                            method: post
                          attachments:
                            href: /api/v3/documents/1/attachments
                          project:
                            href: /api/v3/projects/19
                            title: Some project
                          self:
                            href: /api/v3/documents/1
                            title: Some document
                        _type: Document
                        createdAt: '2018-12-10T20:53:39.184Z'
                        description:
                          format: markdown
                          html: <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.


            **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.


            **Required permission** `manage documents` in the project the document belongs to'
          headers: {}
        '404':
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                response:
                  value:
                    _type: Error
                    errorIdentifier: urn:openproject-org:api:v3:errors:NotFound
                    message: The requested resource could not be found.
          description: 'Returned if the document does not exist or if the user does not have permission to view it.


            **Required permission** `view documents` in the project the document belongs to'
          headers: {}
        '422':
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                response:
                  value:
                    _type: Error
                    errorIdentifier: urn:openproject-org:api:v3:errors:PropertyConstraintViolation
                    message: Title can't be blank.
                    _embedded:
                      details:
                        attribute: title
          description: Returned if the request body contains validation errors.
          headers: {}
      tags:
      - Documents
      description: Updates a document's attributes.
      operationId: Update_document
      summary: Update document
components:
  schemas:
    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
    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!
    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
    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.
    DocumentModel:
      type: object
      properties:
        id:
          type: integer
          description: Document's id
          readOnly: true
          exclusiveMinimum: 0
        title:
          type: string
          description: The title chosen for the document
        description:
          allOf:
          - $ref: '#/components/schemas/Formattable'
          - description: A text describing the document
        createdAt:
          type: string
          format: date-time
          description: The time the document was created at
          readOnly: true
        _links:
          type: object
          required:
          - self
          - project
          - attachments
          properties:
            self:
              allOf:
              - $ref: '#/components/schemas/Link'
              - description: 'This document


                  **Resource**: Document'
                readOnly: true
            project:
              allOf:
              - $ref: '#/components/schemas/Link'
              - description: 'The project the document is in


                  **Resource**: Project'
            attachments:
              allOf:
              - $ref: '#/components/schemas/Link'
              - description: 'The attachments belonging to the document


                  **Resource**: []Attachment'
      example:
        _type: Document
        id: 1
        title: Some other document
        description:
          format: markdown
          raw: Videlicet deserunt aequitas cognatus. Concedo quia est quia pariatur vorago vallum. Calco autem atavus accusamus conscendo cornu ulterius. Tam patria ago consectetur ventito sustineo nihil caecus. Supra officiis eos velociter somniculosus tonsor qui. Suffragium aduro arguo angustus cogito quia tolero vulnus. Supplanto sortitus cresco apud vestrum qui.
          html: <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
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic