API: Repositories

Repository resources are issues, merge requests, branches and commits of external code hosting providers (e.g. GitLab) that were linked to work packages. They are synchronized into OpenProject by the provider integration and can only be read through the API.

A repository resource is visible to a user if it is linked to at least one work package for which the user has the permission to show repository content.

Resource types

Type Description Linked to work packages
RepositoryIssue An issue of a repository any number
RepositoryMergeRequest A merge (or pull) request any number
RepositoryPipeline A CI pipeline run for a merge request via its merge request
RepositoryBranch A branch of a repository exactly one
RepositoryCommit A commit of a repository any number

Authors are embedded as plain objects. They are not resources of their own.

Methods

View repository branch

Returns the repository branch with the given id.

id
integer

required path

Repository branch id

Example:
1

200

OK

{
  "_type": "RepositoryBranch",
  "_links": {
    "self": {
      "href": "/api/v3/repository_branches/1",
      "title": "bug/1234-crash-when-saving"
    },
    "workPackage": {
      "href": "/api/v3/work_packages/1234",
      "title": "Crash when saving"
    }
  },
  "id": 1,
  "name": "bug/1234-crash-when-saving",
  "projectName": "my-group/my-project",
  "webUrl": "https://gitlab.example.com/my-group/my-project/-/tree/bug/1234-crash-when-saving",
  "author": {
    "name": "Jane Doe",
    "username": "jdoe",
    "avatarUrl": "https://gitlab.example.com/uploads/user/avatar/1/avatar.png"
  },
  "createdAt": "2026-10-01T12:00:00.000Z",
  "updatedAt": "2026-10-01T12:00:00.000Z"
}
RepositoryBranchModel
{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Identifier of the resource within OpenProject",
      "readOnly": true
    },
    "name": {
      "type": "string",
      "description": "Name of the branch",
      "readOnly": true
    },
    "projectName": {
      "type": "string",
      "description": "Name of the project on the provider, e.g. `my-group/my-project`",
      "readOnly": true
    },
    "webUrl": {
      "type": "string",
      "format": "uri",
      "description": "URL of the branch on the provider's website",
      "readOnly": true
    },
    "author": {
      "description": "The user on the provider who created the resource. Null if unknown.",
      "oneOf": [
        {
          "$ref": "#/components/schemas/RepositoryUserModel"
        },
        {
          "type": "null"
        }
      ]
    },
    "createdAt": {
      "type": "string",
      "format": "date-time",
      "description": "Time the resource was first synchronized into OpenProject",
      "readOnly": true
    },
    "updatedAt": {
      "type": "string",
      "format": "date-time",
      "description": "Time the resource was last synchronized into OpenProject",
      "readOnly": true
    },
    "_links": {
      "type": "object",
      "required": [
        "self"
      ],
      "properties": {
        "self": {
          "allOf": [
            {
              "$ref": "#/components/schemas/Link"
            },
            {
              "description": "This branch\n\n**Resource**: RepositoryBranch",
              "readOnly": true
            }
          ]
        },
        "workPackage": {
          "allOf": [
            {
              "$ref": "#/components/schemas/Link"
            },
            {
              "description": "The work package this branch belongs to\n\n**Resource**: WorkPackage",
              "readOnly": true
            }
          ]
        }
      }
    }
  },
  "examples": [
    {
      "_type": "RepositoryBranch",
      "_links": {
        "self": {
          "href": "/api/v3/repository_branches/1",
          "title": "bug/1234-crash-when-saving"
        },
        "workPackage": {
          "href": "/api/v3/work_packages/1234",
          "title": "Crash when saving"
        }
      },
      "id": 1,
      "name": "bug/1234-crash-when-saving",
      "projectName": "my-group/my-project",
      "webUrl": "https://gitlab.example.com/my-group/my-project/-/tree/bug/1234-crash-when-saving",
      "author": {
        "name": "Jane Doe",
        "username": "jdoe",
        "avatarUrl": "https://gitlab.example.com/uploads/user/avatar/1/avatar.png"
      },
      "createdAt": "2026-10-01T12:00:00.000Z",
      "updatedAt": "2026-10-01T12:00:00.000Z"
    }
  ]
}

404

Returned if the branch does not exist or the client does not have sufficient permissions to see it.

Required permission: show repository content (on the work package linked to the branch)

{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:NotFound",
  "message": "The requested resource could not be found."
}
{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
  "message": "Project can't be blank.",
  "_embedded": {
    "details": {
      "attribute": "project"
    }
  }
}
ErrorResponse
{
  "type": "object",
  "required": [
    "_type",
    "errorIdentifier",
    "message"
  ],
  "properties": {
    "_embedded": {
      "type": "object",
      "properties": {
        "details": {
          "type": "object",
          "properties": {
            "attribute": {
              "type": "string"
            }
          }
        }
      }
    },
    "_type": {
      "type": "string",
      "enum": [
        "Error"
      ]
    },
    "errorIdentifier": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "examples": [
    {
      "_type": "Error",
      "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
      "message": "Project can't be blank.",
      "_embedded": {
        "details": {
          "attribute": "project"
        }
      }
    }
  ]
}

View repository commit

Returns the repository commit with the given id.

id
integer

required path

Repository commit id

Example:
1

200

OK

{
  "_type": "RepositoryCommit",
  "_links": {
    "self": {
      "href": "/api/v3/repository_commits/1",
      "title": "Fix crash when saving"
    }
  },
  "id": 1,
  "sha": "0a1b2c3d4e5f60718293a4b5c6d7e8f901234567",
  "message": {
    "format": "plain",
    "raw": "Fix crash when saving\n\nOP#1234",
    "html": "<p>Fix crash when saving</p><p>OP#1234</p>"
  },
  "authorName": "Jane Doe",
  "authoredAt": "2026-10-01T12:00:00.000Z",
  "projectName": "my-group/my-project",
  "webUrl": "https://gitlab.example.com/my-group/my-project/-/commit/0a1b2c3d4e5f60718293a4b5c6d7e8f901234567",
  "author": {
    "name": "Jane Doe",
    "username": "jdoe",
    "avatarUrl": "https://gitlab.example.com/uploads/user/avatar/1/avatar.png"
  },
  "createdAt": "2026-10-01T12:00:00.000Z",
  "updatedAt": "2026-10-01T12:00:00.000Z"
}
RepositoryCommitModel
{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Identifier of the resource within OpenProject",
      "readOnly": true
    },
    "sha": {
      "type": "string",
      "description": "SHA of the commit",
      "readOnly": true
    },
    "message": {
      "allOf": [
        {
          "$ref": "#/components/schemas/Formattable"
        },
        {
          "description": "Commit message",
          "readOnly": true
        }
      ]
    },
    "authorName": {
      "type": "string",
      "description": "Author name as recorded in the commit",
      "readOnly": true
    },
    "authoredAt": {
      "type": "string",
      "format": "date-time",
      "description": "Time the commit was authored",
      "readOnly": true
    },
    "projectName": {
      "type": "string",
      "description": "Name of the project on the provider, e.g. `my-group/my-project`",
      "readOnly": true
    },
    "webUrl": {
      "type": "string",
      "format": "uri",
      "description": "URL of the resource on the provider's website",
      "readOnly": true
    },
    "author": {
      "description": "The user on the provider who created the resource. Null if unknown.",
      "oneOf": [
        {
          "$ref": "#/components/schemas/RepositoryUserModel"
        },
        {
          "type": "null"
        }
      ]
    },
    "createdAt": {
      "type": "string",
      "format": "date-time",
      "description": "Time the resource was first synchronized into OpenProject",
      "readOnly": true
    },
    "updatedAt": {
      "type": "string",
      "format": "date-time",
      "description": "Time the resource was last synchronized into OpenProject",
      "readOnly": true
    },
    "_links": {
      "type": "object",
      "required": [
        "self"
      ],
      "properties": {
        "self": {
          "allOf": [
            {
              "$ref": "#/components/schemas/Link"
            },
            {
              "description": "This commit\n\n**Resource**: RepositoryCommit",
              "readOnly": true
            }
          ]
        }
      }
    }
  },
  "examples": [
    {
      "_type": "RepositoryCommit",
      "_links": {
        "self": {
          "href": "/api/v3/repository_commits/1",
          "title": "Fix crash when saving"
        }
      },
      "id": 1,
      "sha": "0a1b2c3d4e5f60718293a4b5c6d7e8f901234567",
      "message": {
        "format": "plain",
        "raw": "Fix crash when saving\n\nOP#1234",
        "html": "<p>Fix crash when saving</p><p>OP#1234</p>"
      },
      "authorName": "Jane Doe",
      "authoredAt": "2026-10-01T12:00:00.000Z",
      "projectName": "my-group/my-project",
      "webUrl": "https://gitlab.example.com/my-group/my-project/-/commit/0a1b2c3d4e5f60718293a4b5c6d7e8f901234567",
      "author": {
        "name": "Jane Doe",
        "username": "jdoe",
        "avatarUrl": "https://gitlab.example.com/uploads/user/avatar/1/avatar.png"
      },
      "createdAt": "2026-10-01T12:00:00.000Z",
      "updatedAt": "2026-10-01T12:00:00.000Z"
    }
  ]
}

404

Returned if the commit does not exist or the client does not have sufficient permissions to see it.

Required permission: show repository content (on at least one work package linked to the commit)

{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:NotFound",
  "message": "The requested resource could not be found."
}
{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
  "message": "Project can't be blank.",
  "_embedded": {
    "details": {
      "attribute": "project"
    }
  }
}
ErrorResponse
{
  "type": "object",
  "required": [
    "_type",
    "errorIdentifier",
    "message"
  ],
  "properties": {
    "_embedded": {
      "type": "object",
      "properties": {
        "details": {
          "type": "object",
          "properties": {
            "attribute": {
              "type": "string"
            }
          }
        }
      }
    },
    "_type": {
      "type": "string",
      "enum": [
        "Error"
      ]
    },
    "errorIdentifier": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "examples": [
    {
      "_type": "Error",
      "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
      "message": "Project can't be blank.",
      "_embedded": {
        "details": {
          "attribute": "project"
        }
      }
    }
  ]
}

View repository issue

Returns the repository issue with the given id.

id
integer

required path

Repository issue id

Example:
1

200

OK

{
  "_type": "RepositoryIssue",
  "_links": {
    "self": {
      "href": "/api/v3/repository_issues/1",
      "title": "Crash when saving"
    }
  },
  "id": 1,
  "displayId": "42",
  "title": "Crash when saving",
  "description": {
    "format": "markdown",
    "raw": "Steps to reproduce...",
    "html": "<p>Steps to reproduce...</p>"
  },
  "state": "opened",
  "labels": [
    {
      "title": "bug",
      "color": "#d9534f"
    }
  ],
  "projectName": "my-group/my-project",
  "webUrl": "https://gitlab.example.com/my-group/my-project/-/issues/42",
  "author": {
    "name": "Jane Doe",
    "username": "jdoe",
    "avatarUrl": "https://gitlab.example.com/uploads/user/avatar/1/avatar.png"
  },
  "externalUpdatedAt": "2026-10-01T12:00:00.000Z",
  "createdAt": "2026-10-01T12:00:00.000Z",
  "updatedAt": "2026-10-01T12:00:00.000Z"
}
RepositoryIssueModel
{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Identifier of the resource within OpenProject",
      "readOnly": true
    },
    "displayId": {
      "type": "string",
      "description": "Identifier of the issue as displayed by the provider, e.g. `42`",
      "readOnly": true
    },
    "title": {
      "type": "string",
      "description": "Title of the issue",
      "readOnly": true
    },
    "description": {
      "allOf": [
        {
          "$ref": "#/components/schemas/Formattable"
        },
        {
          "description": "Description of the issue",
          "readOnly": true
        }
      ]
    },
    "state": {
      "type": "string",
      "description": "State of the issue as reported by the provider, e.g. `opened`",
      "readOnly": true
    },
    "labels": {
      "type": "array",
      "description": "Labels attached to the resource on the provider",
      "readOnly": true,
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "color": {
            "type": "string",
            "description": "Hexadecimal color code, e.g. `#d9534f`"
          }
        }
      }
    },
    "projectName": {
      "type": "string",
      "description": "Name of the project on the provider, e.g. `my-group/my-project`",
      "readOnly": true
    },
    "webUrl": {
      "type": "string",
      "format": "uri",
      "description": "URL of the resource on the provider's website",
      "readOnly": true
    },
    "author": {
      "description": "The user on the provider who created the resource. Null if unknown.",
      "oneOf": [
        {
          "$ref": "#/components/schemas/RepositoryUserModel"
        },
        {
          "type": "null"
        }
      ]
    },
    "externalUpdatedAt": {
      "type": "string",
      "format": "date-time",
      "description": "Time the resource was last updated on the provider",
      "readOnly": true
    },
    "createdAt": {
      "type": "string",
      "format": "date-time",
      "description": "Time the resource was first synchronized into OpenProject",
      "readOnly": true
    },
    "updatedAt": {
      "type": "string",
      "format": "date-time",
      "description": "Time the resource was last synchronized into OpenProject",
      "readOnly": true
    },
    "_links": {
      "type": "object",
      "required": [
        "self"
      ],
      "properties": {
        "self": {
          "allOf": [
            {
              "$ref": "#/components/schemas/Link"
            },
            {
              "description": "This issue\n\n**Resource**: RepositoryIssue",
              "readOnly": true
            }
          ]
        }
      }
    }
  },
  "examples": [
    {
      "_type": "RepositoryIssue",
      "_links": {
        "self": {
          "href": "/api/v3/repository_issues/1",
          "title": "Crash when saving"
        }
      },
      "id": 1,
      "displayId": "42",
      "title": "Crash when saving",
      "description": {
        "format": "markdown",
        "raw": "Steps to reproduce...",
        "html": "<p>Steps to reproduce...</p>"
      },
      "state": "opened",
      "labels": [
        {
          "title": "bug",
          "color": "#d9534f"
        }
      ],
      "projectName": "my-group/my-project",
      "webUrl": "https://gitlab.example.com/my-group/my-project/-/issues/42",
      "author": {
        "name": "Jane Doe",
        "username": "jdoe",
        "avatarUrl": "https://gitlab.example.com/uploads/user/avatar/1/avatar.png"
      },
      "externalUpdatedAt": "2026-10-01T12:00:00.000Z",
      "createdAt": "2026-10-01T12:00:00.000Z",
      "updatedAt": "2026-10-01T12:00:00.000Z"
    }
  ]
}

404

Returned if the issue does not exist or the client does not have sufficient permissions to see it.

Required permission: show repository content (on at least one work package linked to the issue)

{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:NotFound",
  "message": "The requested resource could not be found."
}
{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
  "message": "Project can't be blank.",
  "_embedded": {
    "details": {
      "attribute": "project"
    }
  }
}
ErrorResponse
{
  "type": "object",
  "required": [
    "_type",
    "errorIdentifier",
    "message"
  ],
  "properties": {
    "_embedded": {
      "type": "object",
      "properties": {
        "details": {
          "type": "object",
          "properties": {
            "attribute": {
              "type": "string"
            }
          }
        }
      }
    },
    "_type": {
      "type": "string",
      "enum": [
        "Error"
      ]
    },
    "errorIdentifier": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "examples": [
    {
      "_type": "Error",
      "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
      "message": "Project can't be blank.",
      "_embedded": {
        "details": {
          "attribute": "project"
        }
      }
    }
  ]
}

View repository merge request

Returns the repository merge request with the given id.

id
integer

required path

Repository merge request id

Example:
1

200

OK

{
  "_type": "RepositoryMergeRequest",
  "_links": {
    "self": {
      "href": "/api/v3/repository_merge_requests/1",
      "title": "Fix crash when saving"
    },
    "pipelines": {
      "href": "/api/v3/repository_merge_requests/1/repository_pipelines"
    },
    "latestPipeline": {
      "href": "/api/v3/repository_pipelines/99",
      "title": "success"
    }
  },
  "id": 1,
  "displayId": "7",
  "title": "Fix crash when saving",
  "description": {
    "format": "markdown",
    "raw": "Fixes OP#1234",
    "html": "<p>Fixes OP#1234</p>"
  },
  "state": "merged",
  "labels": [],
  "projectName": "my-group/my-project",
  "webUrl": "https://gitlab.example.com/my-group/my-project/-/merge_requests/7",
  "author": {
    "name": "Jane Doe",
    "username": "jdoe",
    "avatarUrl": "https://gitlab.example.com/uploads/user/avatar/1/avatar.png"
  },
  "externalUpdatedAt": "2026-10-01T12:00:00.000Z",
  "createdAt": "2026-10-01T12:00:00.000Z",
  "updatedAt": "2026-10-01T12:00:00.000Z"
}
RepositoryMergeRequestModel
{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Identifier of the resource within OpenProject",
      "readOnly": true
    },
    "displayId": {
      "type": "string",
      "description": "Identifier of the merge request as displayed by the provider, e.g. `42`",
      "readOnly": true
    },
    "title": {
      "type": "string",
      "description": "Title of the merge request",
      "readOnly": true
    },
    "description": {
      "allOf": [
        {
          "$ref": "#/components/schemas/Formattable"
        },
        {
          "description": "Description of the merge request",
          "readOnly": true
        }
      ]
    },
    "state": {
      "type": "string",
      "description": "State of the merge request as reported by the provider, e.g. `opened`",
      "readOnly": true
    },
    "labels": {
      "type": "array",
      "description": "Labels attached to the resource on the provider",
      "readOnly": true,
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "color": {
            "type": "string",
            "description": "Hexadecimal color code, e.g. `#d9534f`"
          }
        }
      }
    },
    "projectName": {
      "type": "string",
      "description": "Name of the project on the provider, e.g. `my-group/my-project`",
      "readOnly": true
    },
    "webUrl": {
      "type": "string",
      "format": "uri",
      "description": "URL of the resource on the provider's website",
      "readOnly": true
    },
    "author": {
      "description": "The user on the provider who created the resource. Null if unknown.",
      "oneOf": [
        {
          "$ref": "#/components/schemas/RepositoryUserModel"
        },
        {
          "type": "null"
        }
      ]
    },
    "externalUpdatedAt": {
      "type": "string",
      "format": "date-time",
      "description": "Time the resource was last updated on the provider",
      "readOnly": true
    },
    "createdAt": {
      "type": "string",
      "format": "date-time",
      "description": "Time the resource was first synchronized into OpenProject",
      "readOnly": true
    },
    "updatedAt": {
      "type": "string",
      "format": "date-time",
      "description": "Time the resource was last synchronized into OpenProject",
      "readOnly": true
    },
    "_links": {
      "type": "object",
      "required": [
        "self"
      ],
      "properties": {
        "self": {
          "allOf": [
            {
              "$ref": "#/components/schemas/Link"
            },
            {
              "description": "This merge request\n\n**Resource**: RepositoryMergeRequest",
              "readOnly": true
            }
          ]
        },
        "pipelines": {
          "allOf": [
            {
              "$ref": "#/components/schemas/Link"
            },
            {
              "description": "All of the CI pipelines that ran for this merge request\n\n**Resource**: RepositoryPipelineCollectionModel",
              "readOnly": true
            }
          ]
        },
        "latestPipeline": {
          "allOf": [
            {
              "$ref": "#/components/schemas/Link"
            },
            {
              "description": "The CI pipeline that started last. A pipeline that has not started yet counts as the latest one.\nOmitted if the merge request has no pipelines.\n\n**Resource**: RepositoryPipeline",
              "readOnly": true
            }
          ]
        }
      }
    }
  },
  "examples": [
    {
      "_type": "RepositoryMergeRequest",
      "_links": {
        "self": {
          "href": "/api/v3/repository_merge_requests/1",
          "title": "Fix crash when saving"
        },
        "pipelines": {
          "href": "/api/v3/repository_merge_requests/1/repository_pipelines"
        },
        "latestPipeline": {
          "href": "/api/v3/repository_pipelines/99",
          "title": "success"
        }
      },
      "id": 1,
      "displayId": "7",
      "title": "Fix crash when saving",
      "description": {
        "format": "markdown",
        "raw": "Fixes OP#1234",
        "html": "<p>Fixes OP#1234</p>"
      },
      "state": "merged",
      "labels": [],
      "projectName": "my-group/my-project",
      "webUrl": "https://gitlab.example.com/my-group/my-project/-/merge_requests/7",
      "author": {
        "name": "Jane Doe",
        "username": "jdoe",
        "avatarUrl": "https://gitlab.example.com/uploads/user/avatar/1/avatar.png"
      },
      "externalUpdatedAt": "2026-10-01T12:00:00.000Z",
      "createdAt": "2026-10-01T12:00:00.000Z",
      "updatedAt": "2026-10-01T12:00:00.000Z"
    }
  ]
}

404

Returned if the merge request does not exist or the client does not have sufficient permissions to see it.

Required permission: show repository content (on at least one work package linked to the merge request)

{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:NotFound",
  "message": "The requested resource could not be found."
}
{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
  "message": "Project can't be blank.",
  "_embedded": {
    "details": {
      "attribute": "project"
    }
  }
}
ErrorResponse
{
  "type": "object",
  "required": [
    "_type",
    "errorIdentifier",
    "message"
  ],
  "properties": {
    "_embedded": {
      "type": "object",
      "properties": {
        "details": {
          "type": "object",
          "properties": {
            "attribute": {
              "type": "string"
            }
          }
        }
      }
    },
    "_type": {
      "type": "string",
      "enum": [
        "Error"
      ]
    },
    "errorIdentifier": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "examples": [
    {
      "_type": "Error",
      "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
      "message": "Project can't be blank.",
      "_embedded": {
        "details": {
          "attribute": "project"
        }
      }
    }
  ]
}

List pipelines of a repository merge request

Returns a paginated collection of the CI pipelines run for the given merge request, ordered from the oldest to the latest one. Pipelines that have not started yet come last.

Request it with pageSize=0 to only retrieve the total number of pipelines.

id
integer

required path

Repository merge request id

Example:
1

offset
integer

optional query

Page number inside the requested collection.

Default:
1

Example:
1

pageSize
integer

optional query

Number of elements to display per page.

Example:
25

200

OK

RepositoryPipelineCollectionModel
{
  "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 collection of repository pipelines\n\n**Resource**: RepositoryPipelineCollectionModel",
                  "readOnly": true
                }
              ]
            }
          }
        },
        "_embedded": {
          "type": "object",
          "required": [
            "elements"
          ],
          "properties": {
            "elements": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/RepositoryPipelineModel"
              }
            }
          }
        }
      }
    }
  ]
}

404

Returned if the merge request does not exist or the client does not have sufficient permissions to see it.

Required permission: show repository content (on at least one work package linked to the merge request)

{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:NotFound",
  "message": "The requested resource could not be found."
}
{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
  "message": "Project can't be blank.",
  "_embedded": {
    "details": {
      "attribute": "project"
    }
  }
}
ErrorResponse
{
  "type": "object",
  "required": [
    "_type",
    "errorIdentifier",
    "message"
  ],
  "properties": {
    "_embedded": {
      "type": "object",
      "properties": {
        "details": {
          "type": "object",
          "properties": {
            "attribute": {
              "type": "string"
            }
          }
        }
      }
    },
    "_type": {
      "type": "string",
      "enum": [
        "Error"
      ]
    },
    "errorIdentifier": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "examples": [
    {
      "_type": "Error",
      "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
      "message": "Project can't be blank.",
      "_embedded": {
        "details": {
          "attribute": "project"
        }
      }
    }
  ]
}

View repository pipeline

Returns the repository pipeline with the given id.

id
integer

required path

Repository pipeline id

Example:
1

200

OK

{
  "_type": "RepositoryPipeline",
  "_links": {
    "self": {
      "href": "/api/v3/repository_pipelines/99",
      "title": "success"
    },
    "mergeRequest": {
      "href": "/api/v3/repository_merge_requests/1",
      "title": "Fix crash when saving"
    }
  },
  "id": 99,
  "status": "success",
  "webUrl": "https://gitlab.example.com/my-group/my-project/-/pipelines/99",
  "detailsUrl": "https://gitlab.example.com/my-group/my-project/-/pipelines/99/builds",
  "author": {
    "name": "Jane Doe",
    "username": "jdoe",
    "avatarUrl": "https://gitlab.example.com/uploads/user/avatar/1/avatar.png"
  },
  "startedAt": "2026-10-01T12:00:00.000Z",
  "completedAt": "2026-10-01T12:10:00.000Z",
  "createdAt": "2026-10-01T12:00:00.000Z",
  "updatedAt": "2026-10-01T12:10:00.000Z"
}
RepositoryPipelineModel
{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Identifier of the resource within OpenProject",
      "readOnly": true
    },
    "status": {
      "type": "string",
      "description": "Status of the pipeline as reported by the provider, e.g. `success`",
      "readOnly": true
    },
    "webUrl": {
      "type": "string",
      "format": "uri",
      "description": "URL of the pipeline on the provider's website",
      "readOnly": true
    },
    "detailsUrl": {
      "type": [
        "string",
        "null"
      ],
      "format": "uri",
      "description": "URL of the pipeline's details (e.g. its jobs) on the provider's website",
      "readOnly": true
    },
    "author": {
      "description": "The user on the provider who triggered the pipeline. Null if unknown.",
      "oneOf": [
        {
          "$ref": "#/components/schemas/RepositoryUserModel"
        },
        {
          "type": "null"
        }
      ]
    },
    "startedAt": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "description": "Time the pipeline started. Null if it has not started yet.",
      "readOnly": true
    },
    "completedAt": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "description": "Time the pipeline completed. Null if it has not completed yet.",
      "readOnly": true
    },
    "createdAt": {
      "type": "string",
      "format": "date-time",
      "description": "Time the resource was first synchronized into OpenProject",
      "readOnly": true
    },
    "updatedAt": {
      "type": "string",
      "format": "date-time",
      "description": "Time the resource was last synchronized into OpenProject",
      "readOnly": true
    },
    "_links": {
      "type": "object",
      "required": [
        "self",
        "mergeRequest"
      ],
      "properties": {
        "self": {
          "allOf": [
            {
              "$ref": "#/components/schemas/Link"
            },
            {
              "description": "This pipeline\n\n**Resource**: RepositoryPipeline",
              "readOnly": true
            }
          ]
        },
        "mergeRequest": {
          "allOf": [
            {
              "$ref": "#/components/schemas/Link"
            },
            {
              "description": "The merge request the pipeline was run for\n\n**Resource**: RepositoryMergeRequest",
              "readOnly": true
            }
          ]
        }
      }
    }
  },
  "examples": [
    {
      "_type": "RepositoryPipeline",
      "_links": {
        "self": {
          "href": "/api/v3/repository_pipelines/99",
          "title": "success"
        },
        "mergeRequest": {
          "href": "/api/v3/repository_merge_requests/1",
          "title": "Fix crash when saving"
        }
      },
      "id": 99,
      "status": "success",
      "webUrl": "https://gitlab.example.com/my-group/my-project/-/pipelines/99",
      "detailsUrl": "https://gitlab.example.com/my-group/my-project/-/pipelines/99/builds",
      "author": {
        "name": "Jane Doe",
        "username": "jdoe",
        "avatarUrl": "https://gitlab.example.com/uploads/user/avatar/1/avatar.png"
      },
      "startedAt": "2026-10-01T12:00:00.000Z",
      "completedAt": "2026-10-01T12:10:00.000Z",
      "createdAt": "2026-10-01T12:00:00.000Z",
      "updatedAt": "2026-10-01T12:10:00.000Z"
    }
  ]
}

404

Returned if the pipeline does not exist or the client does not have sufficient permissions to see it.

Required permission: show repository content (on at least one work package linked to the pipeline’s merge request)

{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:NotFound",
  "message": "The requested resource could not be found."
}
{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
  "message": "Project can't be blank.",
  "_embedded": {
    "details": {
      "attribute": "project"
    }
  }
}
ErrorResponse
{
  "type": "object",
  "required": [
    "_type",
    "errorIdentifier",
    "message"
  ],
  "properties": {
    "_embedded": {
      "type": "object",
      "properties": {
        "details": {
          "type": "object",
          "properties": {
            "attribute": {
              "type": "string"
            }
          }
        }
      }
    },
    "_type": {
      "type": "string",
      "enum": [
        "Error"
      ]
    },
    "errorIdentifier": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "examples": [
    {
      "_type": "Error",
      "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
      "message": "Project can't be blank.",
      "_embedded": {
        "details": {
          "attribute": "project"
        }
      }
    }
  ]
}

List repository branches of a work package

Returns a paginated collection of the repository branches linked to the given work package.

Request it with pageSize=0 to only retrieve the total number of branches.

id
integer

required path

Work package id

Example:
1337

offset
integer

optional query

Page number inside the requested collection.

Default:
1

Example:
1

pageSize
integer

optional query

Number of elements to display per page.

Example:
25

200

OK

RepositoryBranchCollectionModel
{
  "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 collection of repository branches\n\n**Resource**: RepositoryBranchCollectionModel",
                  "readOnly": true
                }
              ]
            }
          }
        },
        "_embedded": {
          "type": "object",
          "required": [
            "elements"
          ],
          "properties": {
            "elements": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/RepositoryBranchModel"
              }
            }
          }
        }
      }
    }
  ]
}

403

Returned if the client does not have sufficient permissions.

Required permission: show repository content

Note that you will only receive this error, if you are at least allowed to see the corresponding work package.

{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:MissingPermission",
  "message": "You are not authorized to access this resource."
}
{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
  "message": "Project can't be blank.",
  "_embedded": {
    "details": {
      "attribute": "project"
    }
  }
}
ErrorResponse
{
  "type": "object",
  "required": [
    "_type",
    "errorIdentifier",
    "message"
  ],
  "properties": {
    "_embedded": {
      "type": "object",
      "properties": {
        "details": {
          "type": "object",
          "properties": {
            "attribute": {
              "type": "string"
            }
          }
        }
      }
    },
    "_type": {
      "type": "string",
      "enum": [
        "Error"
      ]
    },
    "errorIdentifier": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "examples": [
    {
      "_type": "Error",
      "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
      "message": "Project can't be blank.",
      "_embedded": {
        "details": {
          "attribute": "project"
        }
      }
    }
  ]
}

404

Returned if the work package does not exist or the client does not have sufficient permissions to see it.

Required permission: view work package

{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:NotFound",
  "message": "The requested resource could not be found."
}
{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
  "message": "Project can't be blank.",
  "_embedded": {
    "details": {
      "attribute": "project"
    }
  }
}
ErrorResponse
{
  "type": "object",
  "required": [
    "_type",
    "errorIdentifier",
    "message"
  ],
  "properties": {
    "_embedded": {
      "type": "object",
      "properties": {
        "details": {
          "type": "object",
          "properties": {
            "attribute": {
              "type": "string"
            }
          }
        }
      }
    },
    "_type": {
      "type": "string",
      "enum": [
        "Error"
      ]
    },
    "errorIdentifier": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "examples": [
    {
      "_type": "Error",
      "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
      "message": "Project can't be blank.",
      "_embedded": {
        "details": {
          "attribute": "project"
        }
      }
    }
  ]
}

List repository commits of a work package

Returns a paginated collection of the repository commits linked to the given work package.

Request it with pageSize=0 to only retrieve the total number of commits.

id
integer

required path

Work package id

Example:
1337

offset
integer

optional query

Page number inside the requested collection.

Default:
1

Example:
1

pageSize
integer

optional query

Number of elements to display per page.

Example:
25

200

OK

RepositoryCommitCollectionModel
{
  "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 collection of repository commits\n\n**Resource**: RepositoryCommitCollectionModel",
                  "readOnly": true
                }
              ]
            }
          }
        },
        "_embedded": {
          "type": "object",
          "required": [
            "elements"
          ],
          "properties": {
            "elements": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/RepositoryCommitModel"
              }
            }
          }
        }
      }
    }
  ]
}

403

Returned if the client does not have sufficient permissions.

Required permission: show repository content

Note that you will only receive this error, if you are at least allowed to see the corresponding work package.

{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:MissingPermission",
  "message": "You are not authorized to access this resource."
}
{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
  "message": "Project can't be blank.",
  "_embedded": {
    "details": {
      "attribute": "project"
    }
  }
}
ErrorResponse
{
  "type": "object",
  "required": [
    "_type",
    "errorIdentifier",
    "message"
  ],
  "properties": {
    "_embedded": {
      "type": "object",
      "properties": {
        "details": {
          "type": "object",
          "properties": {
            "attribute": {
              "type": "string"
            }
          }
        }
      }
    },
    "_type": {
      "type": "string",
      "enum": [
        "Error"
      ]
    },
    "errorIdentifier": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "examples": [
    {
      "_type": "Error",
      "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
      "message": "Project can't be blank.",
      "_embedded": {
        "details": {
          "attribute": "project"
        }
      }
    }
  ]
}

404

Returned if the work package does not exist or the client does not have sufficient permissions to see it.

Required permission: view work package

{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:NotFound",
  "message": "The requested resource could not be found."
}
{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
  "message": "Project can't be blank.",
  "_embedded": {
    "details": {
      "attribute": "project"
    }
  }
}
ErrorResponse
{
  "type": "object",
  "required": [
    "_type",
    "errorIdentifier",
    "message"
  ],
  "properties": {
    "_embedded": {
      "type": "object",
      "properties": {
        "details": {
          "type": "object",
          "properties": {
            "attribute": {
              "type": "string"
            }
          }
        }
      }
    },
    "_type": {
      "type": "string",
      "enum": [
        "Error"
      ]
    },
    "errorIdentifier": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "examples": [
    {
      "_type": "Error",
      "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
      "message": "Project can't be blank.",
      "_embedded": {
        "details": {
          "attribute": "project"
        }
      }
    }
  ]
}

List repository issues of a work package

Returns a paginated collection of the repository issues linked to the given work package.

Request it with pageSize=0 to only retrieve the total number of issues.

id
integer

required path

Work package id

Example:
1337

offset
integer

optional query

Page number inside the requested collection.

Default:
1

Example:
1

pageSize
integer

optional query

Number of elements to display per page.

Example:
25

200

OK

RepositoryIssueCollectionModel
{
  "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 collection of repository issues\n\n**Resource**: RepositoryIssueCollectionModel",
                  "readOnly": true
                }
              ]
            }
          }
        },
        "_embedded": {
          "type": "object",
          "required": [
            "elements"
          ],
          "properties": {
            "elements": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/RepositoryIssueModel"
              }
            }
          }
        }
      }
    }
  ]
}

403

Returned if the client does not have sufficient permissions.

Required permission: show repository content

Note that you will only receive this error, if you are at least allowed to see the corresponding work package.

{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:MissingPermission",
  "message": "You are not authorized to access this resource."
}
{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
  "message": "Project can't be blank.",
  "_embedded": {
    "details": {
      "attribute": "project"
    }
  }
}
ErrorResponse
{
  "type": "object",
  "required": [
    "_type",
    "errorIdentifier",
    "message"
  ],
  "properties": {
    "_embedded": {
      "type": "object",
      "properties": {
        "details": {
          "type": "object",
          "properties": {
            "attribute": {
              "type": "string"
            }
          }
        }
      }
    },
    "_type": {
      "type": "string",
      "enum": [
        "Error"
      ]
    },
    "errorIdentifier": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "examples": [
    {
      "_type": "Error",
      "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
      "message": "Project can't be blank.",
      "_embedded": {
        "details": {
          "attribute": "project"
        }
      }
    }
  ]
}

404

Returned if the work package does not exist or the client does not have sufficient permissions to see it.

Required permission: view work package

{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:NotFound",
  "message": "The requested resource could not be found."
}
{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
  "message": "Project can't be blank.",
  "_embedded": {
    "details": {
      "attribute": "project"
    }
  }
}
ErrorResponse
{
  "type": "object",
  "required": [
    "_type",
    "errorIdentifier",
    "message"
  ],
  "properties": {
    "_embedded": {
      "type": "object",
      "properties": {
        "details": {
          "type": "object",
          "properties": {
            "attribute": {
              "type": "string"
            }
          }
        }
      }
    },
    "_type": {
      "type": "string",
      "enum": [
        "Error"
      ]
    },
    "errorIdentifier": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "examples": [
    {
      "_type": "Error",
      "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
      "message": "Project can't be blank.",
      "_embedded": {
        "details": {
          "attribute": "project"
        }
      }
    }
  ]
}

List repository merge requests of a work package

Returns a paginated collection of the repository merge requests linked to the given work package.

Request it with pageSize=0 to only retrieve the total number of merge requests.

id
integer

required path

Work package id

Example:
1337

offset
integer

optional query

Page number inside the requested collection.

Default:
1

Example:
1

pageSize
integer

optional query

Number of elements to display per page.

Example:
25

200

OK

RepositoryMergeRequestCollectionModel
{
  "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 collection of repository merge requests\n\n**Resource**: RepositoryMergeRequestCollectionModel",
                  "readOnly": true
                }
              ]
            }
          }
        },
        "_embedded": {
          "type": "object",
          "required": [
            "elements"
          ],
          "properties": {
            "elements": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/RepositoryMergeRequestModel"
              }
            }
          }
        }
      }
    }
  ]
}

403

Returned if the client does not have sufficient permissions.

Required permission: show repository content

Note that you will only receive this error, if you are at least allowed to see the corresponding work package.

{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:MissingPermission",
  "message": "You are not authorized to access this resource."
}
{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
  "message": "Project can't be blank.",
  "_embedded": {
    "details": {
      "attribute": "project"
    }
  }
}
ErrorResponse
{
  "type": "object",
  "required": [
    "_type",
    "errorIdentifier",
    "message"
  ],
  "properties": {
    "_embedded": {
      "type": "object",
      "properties": {
        "details": {
          "type": "object",
          "properties": {
            "attribute": {
              "type": "string"
            }
          }
        }
      }
    },
    "_type": {
      "type": "string",
      "enum": [
        "Error"
      ]
    },
    "errorIdentifier": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "examples": [
    {
      "_type": "Error",
      "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
      "message": "Project can't be blank.",
      "_embedded": {
        "details": {
          "attribute": "project"
        }
      }
    }
  ]
}

404

Returned if the work package does not exist or the client does not have sufficient permissions to see it.

Required permission: view work package

{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:NotFound",
  "message": "The requested resource could not be found."
}
{
  "_type": "Error",
  "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
  "message": "Project can't be blank.",
  "_embedded": {
    "details": {
      "attribute": "project"
    }
  }
}
ErrorResponse
{
  "type": "object",
  "required": [
    "_type",
    "errorIdentifier",
    "message"
  ],
  "properties": {
    "_embedded": {
      "type": "object",
      "properties": {
        "details": {
          "type": "object",
          "properties": {
            "attribute": {
              "type": "string"
            }
          }
        }
      }
    },
    "_type": {
      "type": "string",
      "enum": [
        "Error"
      ]
    },
    "errorIdentifier": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "examples": [
    {
      "_type": "Error",
      "errorIdentifier": "urn:openproject-org:api:v3:errors:PropertyConstraintViolation",
      "message": "Project can't be blank.",
      "_embedded": {
        "details": {
          "attribute": "project"
        }
      }
    }
  ]
}