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"
}
}
}
]
}