Bitbucket
Bitbucket Cloud is a Git-based code and CI/CD tool optimized for teams using Jira.
Utilities · Bitbucket
Details
| ID | Bitbucket |
|---|---|
| Provider | Atlassian |
| Category | Utilities |
| From Version | 6.5.0 |
| Docker Image | demisto/python3:3.12.13.11753038 |
| Supported Modules | Agentix XSIAM |
README
Bitbucket Cloud is a Git-based code and CI/CD tool optimized for teams using Jira.
This integration was integrated and tested with version 7.21.0 of Bitbucket.
Deprecation Notes
According to the Bitbucket announcement from February 18, 2026, regarding the sunset of Bitbucket Issues, all issue-related commands have been deprecated. It is recommended to use the equivalent commands in the Atlassian Jira v3 integration instead.
Bitbucket Cloud has deprecated app passwords (from June 9, 2026) in favor of scoped API tokens. For more information, see the Bitbucket Cloud documentation.
Authenticate with an API Token
-
Go to Atlassian account settings -> Security -> API tokens (https://id.atlassian.com/manage-profile/security/api-tokens).
-
Create an API token with scopes.
-
In the integration instance settings, configure:
-
User Name = your Atlassian account email address.
-
API Token = the token you copied.
-
Authenticate with OAuth 2.0 Client Credentials
Create an OAuth consumer in the Bitbucket workspace and enable the client-credentials grant:
-
In Bitbucket Cloud, go to Workspace settings -> under Apps and features select OAuth clients.
-
Select the required Permissions/scopes (e.g., read access to Account, Repositories, Projects, Pull requests, and Issues, matching the commands you intend to run).
-
In the integration instance settings, configure:
-
Client ID = the consumer Key.
-
Client Secret = the consumer Secret.
-
Configure Bitbucket on Cortex XSOAR
- Navigate to Settings > Integrations > Servers & Services.
- Search for Bitbucket.
- Click Add instance to create and configure a new integration instance.
| Parameter | Description | Required |
|---|---|---|
| Workspace | The Bitbucket workspace slug or UUID to connect to. | True |
| Server URL | The base URL of the Bitbucket API. | True |
| User Name | The User Name is your Atlassian account email address, and the API Token is a scoped API token created at https://id.atlassian.com/manage-profile/security/api-tokens. | False |
| API Token | False | |
| Client ID | The Client ID and Client Secret are the key and secret of an OAuth consumer created in the Bitbucket workspace settings (Apps and features -> OAuth clients). | False |
| Client Secret | False | |
| Repository | The default Bitbucket repository slug to use for commands. | False |
| Trust any certificate (not secure) | Whether to trust any TLS certificate when connecting to the server. | False |
| Use system proxy settings | Whether to use the system proxy settings when connecting to the server. | False |
- Click Test to validate the URLs, token, and connection.
Commands
You can execute these commands from the Cortex XSOAR CLI, as part of an automation, or in a playbook.
After you successfully execute a command, a DBot message appears in the War Room with the command details.
- Note: The test button uses the ‘bitbucket-project-list’ command. In order to perform it, add to the app password, Read permissions to Projects.
bitbucket-project-list
If a project_key is given, returns the requested project. Else, returns a list of the projects in the workspace.
Base Command
bitbucket-project-list
Input
| Argument Name | Description | Required |
|---|---|---|
| project_key | The “id” of the project. Must be uppercase. | Optional |
| limit | The maximum number of projects to return. The default value is 50. | Optional |
| page | The specific result page to display. | Optional |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.Project.type | String | The type of the object. |
| Bitbucket.Project.owner.display_name | String | The project owner name. |
| Bitbucket.Project.owner.links | String | Links with information about the project owner. |
| Bitbucket.Project.owner.type | String | The type of the project owner. |
| Bitbucket.Project.owner.uuid | String | The project owner universal unique ID. |
| Bitbucket.Project.owner.account_id | String | The project owner account ID. |
| Bitbucket.Project.owner.nickname | String | The project owner nickname. |
| Bitbucket.Project.workspace.type | String | The type of the workspace. |
| Bitbucket.Project.workspace.uuid | String | The project workspace universal unique ID. |
| Bitbucket.Project.workspace.name | String | The name of the project workspace. |
| Bitbucket.Project.workspace.slug | String | The slug of the project workspace. |
| Bitbucket.Project.workspace.links | String | Links to information about the workspace. |
| Bitbucket.Project.key | String | The project key. |
| Bitbucket.Project.uuid | String | The project universal unique ID. |
| Bitbucket.Project.is_private | Boolean | Whether the project is private. |
| Bitbucket.Project.name | String | The project name. |
| Bitbucket.Project.description | String | The project description. |
| Bitbucket.Project.links | String | Links to information about the project. |
| Bitbucket.Project.created_on | String | The date the project was created. |
| Bitbucket.Project.updated_on | String | The date the project was updated. |
| Bitbucket.Project.has_publicly_visible_repos | Boolean | Whether the project has publicly visible repositories. |
Command example
#### Context Example
```json
{
"Bitbucket": {
"Project": [
{
"created_on": "2022-08-24T09:25:07.11111111+00:00",
"description": "description",
"has_publicly_visible_repos": false,
"is_private": true,
"key": "AP",
"links": {
"avatar": {
"href": "https://bitbucket.org/account/user/workspace/projects/AP/avatar/11?ts=111111111"
},
"html": {
"href": "https://bitbucket.org/workspace/workspace/projects/AP"
},
"repositories": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace?q=project.key=\"AP\""
},
"self": {
"href": "https://api.bitbucket.org/2.0/workspaces/workspace/projects/AP"
}
},
"name": "Another Project",
"owner": {
"account_id": "111111111111111111111111",
"display_name": "Display Name",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/avatar-management--avatars.us-west-2.prod.public.atl-paas.net1111.png"
},
"html": {
"href": "https://bitbucket.org/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users"
}
},
"nickname": "Nickname",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"type": "project",
"updated_on": "2022-08-24T09:25:07.11111111+00:00",
"uuid": "{11111111-1111-1111-1111-111111111111}",
"workspace": {
"links": {
"avatar": {
"href": "https://bitbucket.org/workspaces/workspace/avatar/?ts=11111111"
},
"html": {
"href": "https://bitbucket.org/workspace/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/workspaces/workspace"
}
},
"name": "Name",
"slug": "name",
"type": "workspace",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
{
"created_on": "2022-08-21T13:19:18.1111111+00:00",
"description": null,
"has_publicly_visible_repos": false,
"is_private": false,
"key": "TES",
"links": {
"avatar": {
"href": "https://bitbucket.org/account/user/workspace/projects/TES/avatar/11?ts=11111111"
},
"html": {
"href": "https://bitbucket.org/workspace/workspace/projects/TES"
},
"repositories": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace?q=project.key=\"TES\""
},
"self": {
"href": "https://api.bitbucket.org/2.0/workspaces/workspace/projects/TES"
}
},
"name": "testId",
"owner": {
"account_id": "111111111111111111111111",
"display_name": "Display Name",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/1111111111111?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net1111.png"
},
"html": {
"href": "https://bitbucket.org/%11111111-1111-1111-1111-11111111111%11"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/"
}
},
"nickname": "nickname",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"type": "project",
"updated_on": "2022-08-21T13:19:18.111111+00:00",
"uuid": "{11111111-1111-1111-1111-111111111111}",
"workspace": {
"links": {
"avatar": {
"href": "https://bitbucket.org/workspaces/workspace/avatar/?ts=11111111"
},
"html": {
"href": "https://bitbucket.org/workspace/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/workspaces/workspace"
}
},
"name": "Name",
"slug": "name",
"type": "workspace",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
}
]
}
}
Human Readable Output
List of projects in workspace
Key Name Description IsPrivate AP Another Project description true TES testId false
bitbucket-open-branch-list
Returns a list of the open branches.
Base Command
bitbucket-open-branch-list
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| limit | The maximum number of items in the list. The default value is 50. | Optional |
| page | The specific result page to display. | Optional |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.Branch.name | String | The branch name. |
| Bitbucket.Branch.target.type | String | The type of the last action in the branch. |
| Bitbucket.Branch.target.hash | String | The hash of the last action in the branch. |
| Bitbucket.Branch.target.date | Date | The creation date of the last action in the branch. |
| Bitbucket.Branch.target.author.type | String | The type of the author of the last action. |
| Bitbucket.Branch.target.author.raw | String | The raw information about the author of the last action. |
| Bitbucket.Branch.target.author.user.display_name | String | The display name of the author of the last action. |
| Bitbucket.Branch.target.author.user.links | String | Links to information about the user. |
| Bitbucket.Branch.target.author.user.type | String | The user type of the user who made the last action in the branch. |
| Bitbucket.Branch.target.author.user.uuid | String | The unique user ID of the user who made the last action in the branch. |
| Bitbucket.Branch.target.author.user.account_id | String | The account ID of the user who made the last action in the branch. |
| Bitbucket.Branch.target.author.user.nickname | String | The nickname of the user who made the last action in the branch. |
| Bitbucket.Branch.target.message | String | The message assigned to the last action in the branch. |
| Bitbucket.Branch.target.links | String | The links associated with this command. |
| Bitbucket.Branch.target.parents.type | String | The type of the parent who created the branch. |
| Bitbucket.Branch.target.parents.hash | String | The hash of the parent who created the branch. |
| Bitbucket.Branch.target.parents.links | String | The links associated with the parents of the command. |
| Bitbucket.Branch.target.repository.type | String | The repository type. |
| Bitbucket.Branch.target.repository.full_name | String | The full name of the repository. |
| Bitbucket.Branch.target.repository.links | String | Links with information about the relevant repository. |
| Bitbucket.Branch.target.repository.name | String | The name of the repository |
| Bitbucket.Branch.target.repository.uuid | String | The repository unique ID. |
| Bitbucket.Branch.links | String | Links with information about the branch. |
| Bitbucket.Branch.type | String | The type of the branch. |
| Bitbucket.Branch.merge_strategies | String | The merge strategy of the branch. |
| Bitbucket.Branch.default_merge_strategy | String | The default merge strategy in the branch. |
Command example
#### Context Example
```json
{
"Bitbucket": {
"Branch": [
{
"default_merge_strategy": "merge_commit",
"links": {
"commits": {
"href": "https://api.bitbucket.org/2.0/repositories/workspae/start_repo/commits/master"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/branch/master"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/refs/branches/master"
}
},
"merge_strategies": [
"merge_commit",
"squash",
"fast_forward"
],
"name": "master",
"target": {
"author": {
"raw": "Some User <someuser@gmail.com>",
"type": "author",
"user": {
"account_id": "11111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%1111%.png"
},
"html": {
"href": "https://bitbucket.org/111111111/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/11111111111"
}
},
"nickname": "nickname",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
"date": "2022-09-18T08:00:00+00:00",
"hash": "1111111111111111111111111111111111111111",
"links": {
"approve": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/approve"
},
"comments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/comments"
},
"diff": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/diff/1111111111111111111111111111111111111111"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/1111111111111111111111111111111111111111"
},
"patch": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/patch/1111111111111111111111111111111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111"
},
"statuses": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/statuses"
}
},
"message": "delete the new file",
"parents": [
{
"hash": "1111111111111111111111111111111111111111",
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/1111111111111111111111111111111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111"
}
},
"type": "commit"
}
],
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%11111111-1111-1111-1111-11111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"type": "commit"
},
"type": "branch"
},
{
"default_merge_strategy": "merge_commit",
"links": {
"commits": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commits/branch"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/branch/branch"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/refs/branches/branch"
}
},
"merge_strategies": [
"merge_commit",
"squash",
"fast_forward"
],
"name": "branch",
"target": {
"author": {
"raw": "Some User <someuser@gmail.com>",
"type": "author",
"user": {
"account_id": "1111111111111111111111",
"display_name": "Display Name",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/avatar-management--avatars.us-west-2.prod.public.atl-paas.net%1Finitials%1111-1.png"
},
"html": {
"href": "https://bitbucket.org/%11111111111%11/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%11111111-1111-1111-1111-111111111%11"
}
},
"nickname": "nickname",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
"date": "2022-09-08T00:00:00+00:00",
"hash": "1111111111111111111111111111111111111111",
"links": {
"approve": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/approve"
},
"comments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/comments"
},
"diff": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/diff/1111111111111111111111111111111111111111"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/1111111111111111111111111111111111111111"
},
"patch": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/patch/1111111111111111111111111111111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111"
},
"statuses": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/statuses"
}
},
"message": "something",
"parents": [
{
"hash": "1111111111111111111111111111111111111111",
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/1111111111111111111111111111111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111"
}
},
"type": "commit"
}
],
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%111111111-1111-1111-1111-1111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"type": "commit"
},
"type": "branch"
}
]
}
}
Human Readable Output
Open Branches
Name LastCommitCreatedBy LastCommitCreatedAt LastCommitHash master Some User 2022-09-18T08:00:00+00:00 1111111111111111111111111111111111111111 branch Some User 2022-09-08T14:00:00+00:00 1111111111111111111111111111111111111111
bitbucket-branch-get
Returns the information of the requested branch.
Base Command
bitbucket-branch-get
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name. Should be given here or in the instance arguments. | Optional |
| branch_name | The name of the branch for which to retrieve the information. | Required |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.Branch.name | String | The name of the branch. |
| Bitbucket.Branch.target.type | String | The last action type. |
| Bitbucket.Branch.target.hash | String | The hash of the last action in the branch. |
| Bitbucket.Branch.target.date | Date | The date of the last action in the branch. |
| Bitbucket.Branch.target.author.type | String | The type of the author. |
| Bitbucket.Branch.target.author.raw | String | The raw information about the author of the last action in the branch. |
| Bitbucket.Branch.target.author.user.display_name | String | The display name of the author of the last action in the branch. |
| Bitbucket.Branch.target.author.user.links | String | Links about the author of the last action in the branch. |
| Bitbucket.Branch.target.author.user.type | String | The user type of the author of the last action in the branch. |
| Bitbucket.Branch.target.author.user.uuid | String | The unique universal ID of the author of the last action in the branch. |
| Bitbucket.Branch.target.author.user.account_id | String | The account ID of the author of the last action in the branch. |
| Bitbucket.Branch.target.author.user.nickname | String | The nickname of the author of the last action in the branch. |
| Bitbucket.Branch.target.message | String | The message associated with the last action in the branch. |
| Bitbucket.Branch.target.links | String | The links of the last action in the branch. |
| Bitbucket.Branch.target.parents.type | String | The type of the parents of the last action in the branch. |
| Bitbucket.Branch.target.parents.hash | String | The hash of the parents of the last action in the branch. |
| Bitbucket.Branch.target.parents.links | String | The link associated with the parents of the last action in the branch. |
| Bitbucket.Branch.target.repository.type | String | The type of the branch repository. |
| Bitbucket.Branch.target.repository.full_name | String | The name of the branch repository. |
| Bitbucket.Branch.target.repository.links | String | Links with information about the branch repository. |
| Bitbucket.Branch.target.repository.name | String | The name of the repository. |
| Bitbucket.Branch.target.repository.uuid | String | The unique ID of the repository. |
| Bitbucket.Branch.links | String | Links with information about the branch. |
| Bitbucket.Branch.type | String | The type of the branch. |
| Bitbucket.Branch.merge_strategies | String | The merge strategy of the branch. |
| Bitbucket.Branch.default_merge_strategy | String | The default merge strategy. |
Command example
!bitbucket-branch-get branch_name=master
Context Example
{
"Bitbucket": {
"Branch": {
"default_merge_strategy": "merge_commit",
"links": {
"commits": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commits/master"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/branch/master"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/refs/branches/master"
}
},
"merge_strategies": [
"merge_commit",
"squash",
"fast_forward"
],
"name": "master",
"target": {
"author": {
"raw": "Some user <someuser@gmail.com>",
"type": "author",
"user": {
"account_id": "1111111111111111111111",
"display_name": "Display Name",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net%11initials%1111-1.png"
},
"html": {
"href": "https://bitbucket.org/%11111111-1111-1111-1111-11111111111%11/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%11111111-1111-1111-1111-11111111111%11"
}
},
"nickname": "nickname",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
"date": "2022-09-18T00:00:00+00:00",
"hash": "1111111111111111111111111111111111111111",
"links": {
"approve": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/approve"
},
"comments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/comments"
},
"diff": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/diff/1111111111111111111111111111111111111111"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/1111111111111111111111111111111111111111"
},
"patch": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/patch/1111111111111111111111111111111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111"
},
"statuses": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/statuses"
}
},
"message": "delete the new file",
"parents": [
{
"hash": "1111111111111111111111111111111111111111",
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/1111111111111111111111111111111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111"
}
},
"type": "commit"
}
],
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%11111111-1111-1111-1111-11111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"type": "commit"
},
"type": "branch"
}
}
}
Human Readable Output
Information about the branch: master
Name LastCommitCreatedAt LastCommitHash master Some User 2022-09-18T08:07:00+00:00 1111111111111111111111111111111111111111
bitbucket-branch-create
Creates a new branch in Bitbucket.
Base Command
bitbucket-branch-create
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| name | The name of the new branch. | Required |
| target_branch | The name of the branch from which the new branch will be created. | Required |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.Branch.name | String | The name of the new branch. |
| Bitbucket.Branch.target.type | String | The type of the last action in the target branch. |
| Bitbucket.Branch.target.hash | String | The hash of the last action in the target branch. |
| Bitbucket.Branch.target.date | Date | The date of the last action in the target branch. |
| Bitbucket.Branch.target.author.type | String | The type of the author of the last action in the target branch. |
| Bitbucket.Branch.target.author.raw | String | The raw information about the author of the last action in the target branch. |
| Bitbucket.Branch.target.author.user.display_name | String | The display name of the author of the last action in the target branch. |
| Bitbucket.Branch.target.author.user.links | String | The links with the information about the author of the last action in the target branch. |
| Bitbucket.Branch.target.author.user.type | String | The user type of the author of the last action in the target branch. |
| Bitbucket.Branch.target.author.user.uuid | String | The unique ID of the author of the last action in the target branch. |
| Bitbucket.Branch.target.author.user.account_id | String | The account ID of the author of the last action in the target branch. |
| Bitbucket.Branch.target.author.user.nickname | String | The nickname of the author of the last action in the target branch. |
| Bitbucket.Branch.target.message | String | The message in the last action in the target branch. |
| Bitbucket.Branch.target.links | String | The links with the information about the target branch. |
| Bitbucket.Branch.target.parents.type | String | The type of the parent action of the last action in the target branch. |
| Bitbucket.Branch.target.parents.hash | String | The hash of the parent action of the last action in the target branch. |
| Bitbucket.Branch.target.parents.links | String | The links associated with the parents of the command. |
| Bitbucket.Branch.target.repository.type | String | The type of the repository of the target branch. |
| Bitbucket.Branch.target.repository.full_name | String | The full name of the repository of the target branch. |
| Bitbucket.Branch.target.repository.links | String | The links with the information about the repository of the target branch. |
| Bitbucket.Branch.target.repository.name | String | The name of the repository of the target branch. |
| Bitbucket.Branch.target.repository.uuid | String | The unique ID of the repository of the target branch. |
| Bitbucket.Branch.links | String | The links with the information about the new branch. |
| Bitbucket.Branch.type | String | The type of the new branch. |
| Bitbucket.Branch.merge_strategies | String | The merge strategies of the new branch. |
| Bitbucket.Branch.default_merge_strategy | String | The default merge strategy in the new branch. |
Command example
!bitbucket-branch-create name=testing target_branch=master
Context Example
{
"Bitbucket": {
"Branch": {
"default_merge_strategy": "merge_commit",
"links": {
"commits": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commits/testing"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/branch/testing"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/refs/branches/testing"
}
},
"merge_strategies": [
"merge_commit",
"squash",
"fast_forward"
],
"name": "testing",
"target": {
"author": {
"raw": "Some User <someuser@gmail.com>",
"type": "author",
"user": {
"account_id": "1111111111111111111111",
"display_name": "Some user",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=https1avatar-management--avatars.us-west-2.prod.public.atl-paas.net%initials%1111-1.png"
},
"html": {
"href": "https://bitbucket.org/%11111111-1111-1111-1111-111111111111%11/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%11111111-1111-1111-1111-1111111111%11"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
"date": "2022-09-18T08:00:00+00:00",
"hash": "1111111111111111111111111111111111111111",
"links": {
"approve": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/approve"
},
"comments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/comments"
},
"diff": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/diff/1111111111111111111111111111111111111111"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/1111111111111111111111111111111111111111"
},
"patch": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/patch/1111111111111111111111111111111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111"
},
"statuses": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/statuses"
}
},
"message": "delete the new file",
"parents": [
{
"hash": "1111111111111111111111111111111111111111",
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/1111111111111111111111111111111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111"
}
},
"type": "commit"
}
],
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"type": "commit"
},
"type": "branch"
}
}
}
Human Readable Output
The branch “testing” was created successfully.
bitbucket-branch-delete
Deletes the given branch from Bitbucket.
Base Command
bitbucket-branch-delete
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| branch_name | The name of the branch to delete. | Required |
Context Output
There is no context output for this command.
Command example
!bitbucket-branch-delete branch_name=testing
Human Readable Output
The branch testing was deleted successfully.
bitbucket-commit-create
Creates a new commit in Bitbucket.
Base Command
bitbucket-commit-create
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| message | Commit a message with the file. | Required |
| branch | This branch will be associated with the committed file. | Required |
| file_name | The name of the file to commit. | Optional |
| file_content | The content of the file to commit. | Optional |
| entry_id | The entry_id of the file to commit. This is the EntryId from uploading a file to the War Room. | Optional |
| author_name | The name of the author of the file. | Optional |
| author_email | The email of the author of the file. | Optional |
Context Output
There is no context output for this command.
Command example
!bitbucket-commit-create branch=master message="checking master" file_name="new_file.txt" file_content="some new content"
Human Readable Output
The commit was created successfully.
bitbucket-commit-list
Returns a list of the commit in accordance with the included and excluded branches.
Base Command
bitbucket-commit-list
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| file_path | Will limit the results to commits that affect that path. | Optional |
| excluded_branches | A comma-separated list of branches to exclude from the commits that are returned. | Optional |
| included_branches | A comma-separated list of branches to include in the commits that are returned. | Optional |
| limit | The maximum number of items in the list. The default value is 50. | Optional |
| page | The specific result page to display. | Optional |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.Commit.type | String | The type of the commit. |
| Bitbucket.Commit.hash | String | The commit hash. |
| Bitbucket.Commit.date | Date | The creation date of the commit. |
| Bitbucket.Commit.author.type | String | The type of the author. |
| Bitbucket.Commit.author.raw | String | The raw information about the author, including the display name and user email. |
| Bitbucket.Commit.author.user.display_name | String | The display name of the author. |
| Bitbucket.Commit.author.user.links | String | Links with information about the author. |
| Bitbucket.Commit.author.user.type | String | The user type of the author. |
| Bitbucket.Commit.author.user.uuid | String | The user unique key of the author. |
| Bitbucket.Commit.author.user.account_id | String | The user account ID of the author. |
| Bitbucket.Commit.author.user.nickname | String | The user nickname of the author. |
| Bitbucket.Commit.message | String | The commit message. |
| Bitbucket.Commit.summary.type | String | The type of the summary. |
| Bitbucket.Commit.summary.raw | String | The raw summary of the commit. |
| Bitbucket.Commit.summary.markup | String | The text styling type, such as markdown. |
| Bitbucket.Commit.summary.html | String | The summary in HTML format. |
| Bitbucket.Commit.links | String | Links with information about the commit. |
| Bitbucket.Commit.parents.type | String | The type of the commit parents. |
| Bitbucket.Commit.parents.hash | String | The hash of the commit parents. |
| Bitbucket.Commit.parents.links | String | Links with information about the parents. |
| Bitbucket.Commit.repository.type | String | The type of the repository. |
| Bitbucket.Commit.repository.full_name | String | The full name of the repository. |
| Bitbucket.Commit.repository.links.self.href | String | Links with information about the repository. |
| Bitbucket.Commit.repository.name | String | The name of the repository. |
| Bitbucket.Commit.repository.uuid | String | The unique ID of the repository. |
Command example
!bitbucket-commit-list limit=2
Context Example
{
"Bitbucket": {
"Commit": [
{
"author": {
"raw": "Some User <someuser@gmail.com>",
"type": "author",
"user": {
"account_id": "111111111111",
"display_name": "Display Name",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/111111111111111111111111111?d=httpsFavatar-management--avatars.us-west-2.prod.public.atl-paas.net%initials%1111-1.png"
},
"html": {
"href": "https://bitbucket.org/%11111111-1111-1111-1111-111111111111%11/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%11111111-1111-1111-1111-111111111111%11"
}
},
"nickname": "nickname",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
"date": "2022-09-18T08:00:00+00:00",
"hash": "1111111111111111111111111111111111111111",
"links": {
"approve": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/approve"
},
"comments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/comments"
},
"diff": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/diff/1111111111111111111111111111111111111111"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/1111111111111111111111111111111111111111"
},
"patch": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/patch/1111111111111111111111111111111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111"
},
"statuses": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/statuses"
}
},
"message": "checking master",
"parents": [
{
"hash": "1111111111111111111111111111111111111111",
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/1111111111111111111111111111111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111"
}
},
"type": "commit"
}
],
"rendered": {
"message": {
"html": "<p>checking master</p>",
"markup": "markdown",
"raw": "checking master",
"type": "rendered"
}
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-1111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"summary": {
"html": "<p>checking master</p>",
"markup": "markdown",
"raw": "checking master",
"type": "rendered"
},
"type": "commit"
},
{
"author": {
"raw": "Some User <someuser@gmail.com>",
"type": "author",
"user": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsFavatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%1111-1.png"
},
"html": {
"href": "https://bitbucket.org/%%11/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%%11"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
"date": "2022-09-18T08:07:38+00:00",
"hash": "1111111111111111111111111111111111111111",
"links": {
"approve": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/approve"
},
"comments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/comments"
},
"diff": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/diff/1111111111111111111111111111111111111111"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/1111111111111111111111111111111111111111"
},
"patch": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/patch/1111111111111111111111111111111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111"
},
"statuses": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111/statuses"
}
},
"message": "delete the new file",
"parents": [
{
"hash": "1111111111111111111111111111111111111111",
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/1111111111111111111111111111111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/1111111111111111111111111111111111111111"
}
},
"type": "commit"
}
],
"rendered": {
"message": {
"html": "<p>delete the new file</p>",
"markup": "markdown",
"raw": "delete the new file",
"type": "rendered"
}
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%7D?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"summary": {
"html": "<p>delete the new file</p>",
"markup": "markdown",
"raw": "delete the new file",
"type": "rendered"
},
"type": "commit"
}
]
}
}
Human Readable Output
The list of commits
Author Commit Message CreatedAt Some User someuser@gmail.com 1111111111111111111111111111111111111111 checking master 2022-09-18T08:56:51+00:00 Some User someuser@gmail.com 1111111111111111111111111111111111111111 delete the new file 2022-09-18T08:07:38+00:00
bitbucket-file-delete
Deletes the given file from Bitbucket.
Base Command
bitbucket-file-delete
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| message | Commit a message with the file. | Required |
| branch | The branch of the file to delete. | Required |
| file_name | The name of the file to delete. | Required |
| author_name | The name of the author of the file. | Optional |
| author_email | The email of the author of the file. | Optional |
Context Output
There is no context output for this command.
Command example
!bitbucket-file-delete branch=master file_name=new_file.txt message="delete the new file"
Human Readable Output
The file was deleted successfully.
bitbucket-raw-file-get
Returns the content of the given file, along with the option to download it.
Base Command
bitbucket-raw-file-get
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| file_path | The path of the needed file. | Required |
| branch | The branch of the file. If a branch isn’t given, by default the command will return the content of the last edited file with the same file_path. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.RawFile.file_path | String | The path of the file. |
| Bitbucket.RawFile.file_content | String | The content of the file. |
| InfoFile.Size | Number | The size of the file. |
| InfoFile.Name | String | The name of the file. |
| InfoFile.EntryID | String | The entry ID of the file. |
| InfoFile.Info | String | File information. |
| InfoFile.Type | String | The file type. |
Command example
!bitbucket-raw-file-get file_path=new.txt branch=branch
Context Example
{
"Bitbucket": {
"RawFile": {
"file_content":"Hi I am a new file.",
"file_path": "new.txt"
}
},
"File": {
"EntryID": "111111111111-1111-1111-1111-111111111111",
"Extension": "txt",
"Info": "txt",
"MD5": "11111111111111111111111111111111",
"Name": "new.txt",
"SHA1": "1111111111111111111111111111111111111111",
"SHA256": "111111111111111111111111111111111111111111111111111111111111111111",
"SHA512": "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",
"SSDeep": "11:1111111111111111111111111111111111111111111111111111111111111111111111111111111111",
"Size": 19,
"Type": "text/plain; charset=utf-8"
}
}
Human Readable Output
The content of the file “new.txt” is: Hi I am a new file.
bitbucket-issue-create
Deprecated. Issues are fully removed from Bitbucket Cloud by Atlassian as of Mid-August 2026. Use the jira-create-issue command in the Atlassian Jira v3 integration instead. Creates an issue in Bitbucket.
Required Permissions
In order to perform this command, please create an issue tracker by clicking on the relevant repo -> Repository settings -> Issue tracker
Base Command
bitbucket-issue-create
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| title | The title of the new issue. | Required |
| state | The state of the issues to create. Possible values are: new, open, resolved, on hold, invalid, duplicate, wontfix, closed. Default is new. | Optional |
| type | The type of the issues to create. Possible values are: bug, enhancement, proposal, task. Default is bug. | Optional |
| priority | The priority of the issues to create. Possible values are: trivial, minor, major, critical, blocker. Default is major. | Optional |
| content | The content of the issue to create. | Optional |
| assignee_id | The ID of the assignee of the issue to create. To get the assignee_id, use the !bitbucket-workspace-member-list command, and use the field AccountId. | Optional |
| assignee_user_name | The user name of the assignee of the issue to create. | Optional |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.Issue.type | String | The action type. |
| Bitbucket.Issue.id | Number | The ID of the issue. |
| Bitbucket.Issue.repository.type | String | The type of the repository. |
| Bitbucket.Issue.repository.full_name | String | The full name of the repository. |
| Bitbucket.Issue.repository.links | String | Links with information about the repository related to the issue. |
| Bitbucket.Issue.repository.name | String | The name of the repository. |
| Bitbucket.Issue.repository.uuid | String | The unique ID of the repository. |
| Bitbucket.Issue.links.self.href | String | An API link to the issue. |
| Bitbucket.Issue.title | String | The title of the issue |
| Bitbucket.Issue.content.type | String | The type of the content. |
| Bitbucket.Issue.content.raw | String | The content of the issue. |
| Bitbucket.Issue.content.markup | String | The type of markup (like markdown). |
| Bitbucket.Issue.content.html | String | The content of the issue in HTML format. |
| Bitbucket.Issue.reporter.display_name | String | The display name of the reporter of the issue. |
| Bitbucket.Issue.reporter.links | String | Links with information about the reporter. |
| Bitbucket.Issue.reporter.type | String | The type of the reporter. |
| Bitbucket.Issue.reporter.uuid | String | The unique ID of the reporter |
| Bitbucket.Issue.reporter.account_id | String | The account ID of the reporter. |
| Bitbucket.Issue.reporter.nickname | String | The nickname of the reporter. |
| Bitbucket.Issue.assignee.display_name | String | The display name of the assignee to the issue. |
| Bitbucket.Issue.assignee.links | String | Links with information about the assignee. |
| Bitbucket.Issue.assignee.type | String | The type of the assignee. |
| Bitbucket.Issue.assignee.uuid | String | The unique ID of the assignee. |
| Bitbucket.Issue.assignee.account_id | String | The account ID of the assignee. |
| Bitbucket.Issue.assignee.nickname | String | The nickname of the assignee. |
| Bitbucket.Issue.created_on | String | The creation date of the issue. |
| Bitbucket.Issue.edited_on | Unknown | The edit date of the issue. |
| Bitbucket.Issue.updated_on | String | The update date of the issue. |
| Bitbucket.Issue.state | String | The state of the issue. |
| Bitbucket.Issue.kind | String | The kind of the issue. |
| Bitbucket.Issue.milestone | Unknown | The milestones in the issue. |
| Bitbucket.Issue.component | Unknown | The different components of the issue. |
| Bitbucket.Issue.priority | String | The priority of the issue. |
| Bitbucket.Issue.version | Unknown | The version of the issue. |
| Bitbucket.Issue.votes | Number | The votes of approval of the issue. |
| Bitbucket.Issue.watches | Unknown | The watchers of the issue. |
Command example
!bitbucket-issue-create title="a new issue"
Context Example
{
"Bitbucket": {
"Issue": {
"assignee": null,
"component": null,
"content": {
"html": "",
"markup": "markdown",
"raw": "",
"type": "rendered"
},
"created_on": "2022-09-18T08:00:00.000000+00:00",
"edited_on": null,
"id": 92,
"kind": "bug",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/92"
}
},
"milestone": null,
"priority": "major",
"reporter": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%1111-1.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"state": "new",
"title": "a new issue",
"type": "issue",
"updated_on": "2022-09-18T08:00:00.000000+00:00",
"version": null,
"votes": 0,
"watches": null
}
}
}
Human Readable Output
The issue “a new issue” was created successfully
bitbucket-issue-list
Deprecated. Issues are fully removed from Bitbucket Cloud by Atlassian as of Mid-August 2026. Use the jira-get-issue command (for a single issue) or the jira-issue-query command (to list issues using JQL) in the Atlassian Jira v3 integration instead. If an issue_id is given, returns the information about it. Otherwise, returns a list of all the issues, according to the limit parameter.
Base Command
bitbucket-issue-list
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| issue_id | The ID of the requested issue. To get the issue_id, use the !bitbucket-issue-list command. | Optional |
| limit | The maximum number of items in the list. The default value is 50. | Optional |
| page | The specific result page to display. | Optional |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.Issue.type | String | The action type. |
| Bitbucket.Issue.id | Number | The ID of the issue. |
| Bitbucket.Issue.repository.type | String | The type of the repository. |
| Bitbucket.Issue.repository.full_name | String | The full name of the repository. |
| Bitbucket.Issue.repository.links | String | Links with information about the repository related to the issue. |
| Bitbucket.Issue.repository.name | String | The name of the repository. |
| Bitbucket.Issue.repository.uuid | String | The unique ID of the repository. |
| Bitbucket.Issue.links | String | Links with information about the issue. |
| Bitbucket.Issue.title | String | The title of the issue. |
| Bitbucket.Issue.content.type | String | The type of the content. |
| Bitbucket.Issue.content.raw | String | The content of the issue. |
| Bitbucket.Issue.content.markup | String | The type of markup (like markdown). |
| Bitbucket.Issue.content.html | String | The content of the issue in HTML format. |
| Bitbucket.Issue.reporter.display_name | String | The display name of the reporter of the issue. |
| Bitbucket.Issue.reporter.links | String | Links with information about the reporter. |
| Bitbucket.Issue.reporter.type | String | The type of the reporter. |
| Bitbucket.Issue.reporter.uuid | String | The unique ID of the reporter |
| Bitbucket.Issue.reporter.account_id | String | The account ID of the reporter. |
| Bitbucket.Issue.reporter.nickname | String | The nickname of the reporter. |
| Bitbucket.Issue.assignee.display_name | String | The display name of the assignee to the issue. |
| Bitbucket.Issue.assignee.links | String | Links with information about the assignee. |
| Bitbucket.Issue.assignee.type | String | The type of the assignee. |
| Bitbucket.Issue.assignee.uuid | String | The unique ID of the assignee. |
| Bitbucket.Issue.assignee.account_id | String | The account ID of the assignee. |
| Bitbucket.Issue.assignee.nickname | String | The nickname of the assignee. |
| Bitbucket.Issue.created_on | String | The creation date of the issue. |
| Bitbucket.Issue.edited_on | Unknown | The edit date of the issue. |
| Bitbucket.Issue.updated_on | String | The update date of the issue. |
| Bitbucket.Issue.state | String | The state ID of the issue. |
| Bitbucket.Issue.kind | String | The kind of the issue. |
| Bitbucket.Issue.milestone | Unknown | The milestones in the issue. |
| Bitbucket.Issue.component | Unknown | The different components of the issue. |
| Bitbucket.Issue.priority | String | The priority of the issue. |
| Bitbucket.Issue.version | Unknown | The version of the issue. |
| Bitbucket.Issue.votes | Number | The votes of approval of the issue. |
| Bitbucket.Issue.watches | Number | The watchers of the issue. |
Command example
!bitbucket-issue-list limit=2
Context Example
{
"Bitbucket": {
"Issue": [
{
"assignee": null,
"component": null,
"content": {
"html": "",
"markup": "markdown",
"raw": "",
"type": "rendered"
},
"created_on": "2022-09-18T08:00:00.000000+00:00",
"edited_on": null,
"id": 92,
"kind": "bug",
"links": {
"attachments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/92/attachments"
},
"comments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/92/comments"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/issues/92/a-new-issue"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/92"
},
"vote": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/92/vote"
},
"watch": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/92/watch"
}
},
"milestone": null,
"priority": "major",
"reporter": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net%1Finitials%1111-1.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"state": "new",
"title": "a new issue",
"type": "issue",
"updated_on": "2022-09-18T08:57:05.560996+00:00",
"version": null,
"votes": 0,
"watches": 1
},
{
"assignee": null,
"component": null,
"content": {
"html": "",
"markup": "markdown",
"raw": "",
"type": "rendered"
},
"created_on": "2022-09-18T08:00:00.000000+00:00",
"edited_on": null,
"id": 91,
"kind": "bug",
"links": {
"attachments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/91/attachments"
},
"comments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/91/comments"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/issues/91/a-new-issue"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/91"
},
"vote": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/91/vote"
},
"watch": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/91/watch"
}
},
"milestone": null,
"priority": "major",
"reporter": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net%initials%1111-1.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"state": "resolved",
"title": "a new issue",
"type": "issue",
"updated_on": "2022-09-18T08:00:00.000000+00:00",
"version": null,
"votes": 0,
"watches": 1
}
]
}
}
Human Readable Output
Issues List
Id Title Type Priority Status Votes CreatedAt UpdatedAt 92 a new issue bug major new 0 2022-09-18T08:00:00.000000+00:00 2022-09-18T08:00:00.000000+00:00 91 a new issue bug major resolved 0 2022-09-18T08:00:00.000000+00:00 2022-09-18T08:00:00.000000+00:00
bitbucket-issue-update
Deprecated. Issues are fully removed from Bitbucket Cloud by Atlassian as of Mid-August 2026. Use the jira-edit-issue command in the Atlassian Jira v3 integration instead. Updates an issue in Bitbucket.
Required Permissions
In order to perform this command, please create an issue tracker by clicking on the relevant repo -> Repository settings -> Issue tracker.
Base Command
bitbucket-issue-update
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| title | The title of the new issue. | Required |
| issue_id | The ID of the issue to update. To get the issue_id, use the !bitbucket-issue-list command. | Required |
| state | The state of the issues to create. Possible values are: new, open, resolved, on hold, invalid, duplicate, wontfix, closed. | Optional |
| type | The type of the issues to create. Possible values are: bug, enhancement, proposal, task. | Optional |
| priority | The priority of the issues to create. Possible values are: trivial, minor, major, critical, blocker. | Optional |
| content | The content of the issue to create. | Optional |
| assignee_id | The ID of the assignee of the issue to create. To get the assignee_id, use the !bitbucket-workspace-member-list command, and use the field AccountId. | Optional |
| assignee_user_name | The user name of the assignee of the issue to create. | Optional |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.Issue.type | String | The action type. |
| Bitbucket.Issue.id | Number | The ID of the issue. |
| Bitbucket.Issue.repository.type | String | The type of the repository. |
| Bitbucket.Issue.repository.full_name | String | The full name of the repository. |
| Bitbucket.Issue.repository.links | String | Links with information about the repository related to the issue. |
| Bitbucket.Issue.repository.name | String | The name of the repository. |
| Bitbucket.Issue.repository.uuid | String | The unique ID of the repository. |
| Bitbucket.Issue.links | String | Links with information about the issue. |
| Bitbucket.Issue.title | String | The title of the issue. |
| Bitbucket.Issue.content.type | String | The type of the content. |
| Bitbucket.Issue.content.raw | String | The content of the issue. |
| Bitbucket.Issue.content.markup | String | The type of markup (like markdown). |
| Bitbucket.Issue.content.html | String | The content of the issue in HTML format. |
| Bitbucket.Issue.reporter.display_name | String | The display name of the reporter of the issue. |
| Bitbucket.Issue.reporter.links | String | Links with information about the reporter. |
| Bitbucket.Issue.reporter.type | String | The type of the reporter. |
| Bitbucket.Issue.reporter.uuid | String | The unique ID of the reporter. |
| Bitbucket.Issue.reporter.account_id | String | The account ID of the reporter. |
| Bitbucket.Issue.reporter.nickname | String | The nickname of the reporter. |
| Bitbucket.Issue.assignee.display_name | String | The display name of the assignee to the issue. |
| Bitbucket.Issue.assignee.links | String | Links with information about the assignee. |
| Bitbucket.Issue.assignee.type | String | The type of the assignee. |
| Bitbucket.Issue.assignee.uuid | String | The unique ID of the assignee. |
| Bitbucket.Issue.assignee.account_id | String | The account ID of the assignee. |
| Bitbucket.Issue.assignee.nickname | String | The nickname of the assignee. |
| Bitbucket.Issue.created_on | String | The creation date of the issue. |
| Bitbucket.Issue.edited_on | Unknown | The edit date of the issue. |
| Bitbucket.Issue.updated_on | String | The update date of the issue. |
| Bitbucket.Issue.state | String | The state ID of the issue. |
| Bitbucket.Issue.kind | String | The kind of the issue. |
| Bitbucket.Issue.milestone | Unknown | The milestones in the issue. |
| Bitbucket.Issue.component | Unknown | The different components of the issue. |
| Bitbucket.Issue.priority | String | The priority of the issue. |
| Bitbucket.Issue.version | Unknown | The version of the issue. |
| Bitbucket.Issue.votes | Number | The votes of approval of the issue. |
| Bitbucket.Issue.watches | Number | The watchers of the issue. |
Command example
!bitbucket-issue-update issue_id=91 title="a new issue" state=resolved
Context Example
{
"Bitbucket": {
"Issue": {
"assignee": null,
"component": null,
"content": {
"html": "",
"markup": "markdown",
"raw": "",
"type": "rendered"
},
"created_on": "2022-09-18T08:00:00.000000+00:00",
"edited_on": null,
"id": 91,
"kind": "bug",
"links": {
"attachments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/91/attachments"
},
"comments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/91/comments"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/issues/91/a-new-issue"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/91"
},
"vote": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/91/vote"
},
"watch": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/91/watch"
}
},
"milestone": null,
"priority": "major",
"reporter": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net%Finitials%1111-1.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"state": "resolved",
"title": "a new issue",
"type": "issue",
"updated_on": "2022-09-18T08:00:00.000000+00:00",
"version": null,
"votes": 0,
"watches": 1
}
}
}
Human Readable Output
The issue with id “91” was updated successfully
bitbucket-pull-request-create
Creates a pull request in Bitbucket.
Base Command
bitbucket-pull-request-create
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| title | The title of the new pull request. | Required |
| source_branch | The branch that contains the proposed changes. | Required |
| destination_branch | The branch that will contain the changes after the merge process. | Optional |
| reviewer_id | A comma-separated list of account_ids of the person to review the pull request. To get the reviewer_id, use the !bitbucket-workspace-member-list command, and use the field AccountId. | Optional |
| description | A description of the pull request. | Optional |
| close_source_branch | Whether the source branch should be closed after the pull request. Possible values are: yes, no. | Optional |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.PullRequest.comment_count | Number | The number of comments there are in the pull request. |
| Bitbucket.PullRequest.task_count | Number | The number of tasks there are in the pull request. |
| Bitbucket.PullRequest.type | String | The type of the request. |
| Bitbucket.PullRequest.id | Number | The pull request ID. |
| Bitbucket.PullRequest.title | String | The title of the pull request. |
| Bitbucket.PullRequest.description | String | The description of the pull request. |
| Bitbucket.PullRequest.rendered.title.type | String | The type of the title of the request. |
| Bitbucket.PullRequest.rendered.title.raw | String | The content of the rendered title. |
| Bitbucket.PullRequest.rendered.title.markup | String | The text styling type, such as markdown. |
| Bitbucket.PullRequest.rendered.title.html | String | The HTML format of the pull request title. |
| Bitbucket.PullRequest.rendered.description.type | String | The type of the pull request description |
| Bitbucket.PullRequest.rendered.description.raw | String | The content of the description of the pull request. |
| Bitbucket.PullRequest.rendered.description.markup | String | The text styling type, such as markdown. |
| Bitbucket.PullRequest.rendered.description.html | String | HTML format of the description content. |
| Bitbucket.PullRequest.state | String | The status of the pull request. |
| Bitbucket.PullRequest.merge_commit | Unknown | Whether it is a merge commit. |
| Bitbucket.PullRequest.close_source_branch | Boolean | Whether the branch should be closed after the merge. |
| Bitbucket.PullRequest.closed_by | Unknown | The user who closed the pull request. |
| Bitbucket.PullRequest.author.display_name | String | The display name of the author of the pull request. |
| Bitbucket.PullRequest.author.links | String | Links with information about the author of the pull request. |
| Bitbucket.PullRequest.author.type | String | The type of the author |
| Bitbucket.PullRequest.author.uuid | String | The unique universal ID of the author. |
| Bitbucket.PullRequest.author.account_id | String | The account ID of the author of the pull request. |
| Bitbucket.PullRequest.author.nickname | String | The nickname of the author. |
| Bitbucket.PullRequest.reason | String | The reason to create the request. |
| Bitbucket.PullRequest.created_on | String | The creation date of the request. |
| Bitbucket.PullRequest.updated_on | String | The date of the last update of the pull request. |
| Bitbucket.PullRequest.destination.branch.name | String | The name of the destination branch. This is the branch to merge to. |
| Bitbucket.PullRequest.destination.commit.type | String | The type of the commit. |
| Bitbucket.PullRequest.destination.commit.hash | String | The hash of the commit. |
| Bitbucket.PullRequest.destination.commit.links | String | Links with information about the commit. |
| Bitbucket.PullRequest.destination.repository.type | String | The type of the repository. |
| Bitbucket.PullRequest.destination.repository.full_name | String | The full name of the repository of the destination branch. |
| Bitbucket.PullRequest.destination.repository.links | String | Links with information about the repository of the destination branch. |
| Bitbucket.PullRequest.destination.repository.name | String | The name of the repository. |
| Bitbucket.PullRequest.destination.repository.uuid | String | The unique ID of the repository. |
| Bitbucket.PullRequest.source.branch.name | String | The name of the source branch. This is the branch with the changes that will be merged. |
| Bitbucket.PullRequest.source.commit.type | String | The type of the commit in the source branch. |
| Bitbucket.PullRequest.source.commit.hash | String | The hash of the commit in the source branch |
| Bitbucket.PullRequest.source.commit.links | String | Links with information about the commit in the source branch. |
| Bitbucket.PullRequest.source.repository.type | String | The type of the repository of the source branch. |
| Bitbucket.PullRequest.source.repository.full_name | String | The full name of the repository of the source branch. |
| Bitbucket.PullRequest.source.repository.links.self.href | String | Links with information about the repository of the source branch. |
| Bitbucket.PullRequest.source.repository.links | String | Links with information about the repository of the source branch. |
| Bitbucket.PullRequest.source.repository.name | String | The name of the repository of the source branch. |
| Bitbucket.PullRequest.source.repository.uuid | String | The unique ID of the repository of the source branch. |
| Bitbucket.PullRequest.reviewers.display_name | String | The display name of the reviewer. |
| Bitbucket.PullRequest.reviewers.links | String | Links with information about the reviewer. |
| Bitbucket.PullRequest.reviewers.type | String | The type of the reviewer. |
| Bitbucket.PullRequest.reviewers.uuid | String | The unique id of the reviewer. |
| Bitbucket.PullRequest.reviewers.account_id | String | The account id of the reviewer. |
| Bitbucket.PullRequest.reviewers.nickname | String | The nickname of the reviewer. |
| Bitbucket.PullRequest.participants.type | String | The type of the participant. |
| Bitbucket.PullRequest.participants.user.display_name | String | The display name of the participant. |
| Bitbucket.PullRequest.participants.user.links | String | Links with information about the user. |
| Bitbucket.PullRequest.participants.user.type | String | The type of the participant. |
| Bitbucket.PullRequest.participants.user.uuid | String | The unique id of the participant. |
| Bitbucket.PullRequest.participants.user.account_id | String | The account id of the participant. |
| Bitbucket.PullRequest.participants.user.nickname | String | The nickname of the participant. |
| Bitbucket.PullRequest.participants.role | String | The role of the participant. |
| Bitbucket.PullRequest.participants.approved | String | The approval status of the pull request. |
| Bitbucket.PullRequest.participants.state | String | The state of the participant. |
| Bitbucket.PullRequest.participants.participated_on | Unknown | The date of participation. |
| Bitbucket.PullRequest.links | String | Links to information about the pull request. |
| Bitbucket.PullRequest.summary.type | String | The type of the pull request. |
| Bitbucket.PullRequest.summary.raw | String | The description of the pull request. |
| Bitbucket.PullRequest.summary.markup | String | The text styling type, such as markdown. |
| Bitbucket.PullRequest.summary.html | String | The description of the pull request in HTML format. |
Command example
!bitbucket-pull-request-create source_branch=test title="pull_request"
Context Example
{
"Bitbucket": {
"PullRequest": {
"author": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net%Finitials%1111-1.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"close_source_branch": false,
"closed_by": null,
"comment_count": 12,
"created_on": "2022-09-12T09:00:00.000000+00:00",
"description": "",
"destination": {
"branch": {
"name": "master"
},
"commit": {
"hash": "111111111111",
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/111111111111"
}
},
"type": "commit"
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
"id": 8,
"links": {
"activity": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/activity"
},
"approve": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/approve"
},
"comments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/comments"
},
"commits": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/commits"
},
"decline": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/decline"
},
"diff": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/diff/workspace/start_repo:0111111111111111111111111?from_pullrequest_id=8&topic=true"
},
"diffstat": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/diffstat/workspace/start_repo:01111111111%0D111111111111?from_pullrequest_id=8&topic=true"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/pull-requests/8"
},
"merge": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/merge"
},
"request-changes": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/request-changes"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8"
},
"statuses": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/statuses"
}
},
"merge_commit": null,
"participants": [
{
"approved": false,
"participated_on": "2022-09-15T12:00:00.000000+00:00",
"role": "PARTICIPANT",
"state": null,
"type": "participant",
"user": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net%initials.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
}
],
"reviewers": [
{
"display_name": "Some User",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/users/"
},
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net.png"
},
"html": {
"href": "https://bitbucket.org/"
}
},
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}",
"account_id": "111111111111111111111111",
"nickname": "Some User"
}
],
"reason": "",
"rendered": {
"description": {
"html": "",
"markup": "markdown",
"raw": "",
"type": "rendered"
},
"title": {
"html": "<p>pull_request</p>",
"markup": "markdown",
"raw": "pull_request",
"type": "rendered"
}
},
"source": {
"branch": {
"name": "test"
},
"commit": {
"hash": "111111111111",
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/111111111111"
}
},
"type": "commit"
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
"state": "OPEN",
"summary": {
"html": "",
"markup": "markdown",
"raw": "",
"type": "rendered"
},
"task_count": 0,
"title": "pull_request",
"type": "pullrequest",
"updated_on": "2022-09-18T08:00:00.000000+00:00"
}
}
}
Human Readable Output
The pull request was created successfully
bitbucket-pull-request-update
Updates a pull request in Bitbucket.
Base Command
bitbucket-pull-request-update
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| pull_request_id | The ID of the pull request to update. To get the pull_request_id, use the !bitbucket-pull-request-list command. | Required |
| title | The title of the new pull request. | Optional |
| source_branch | The branch that contains the proposed changes. | Optional |
| destination_branch | The branch that will contain the changes after the merge process. | Optional |
| reviewer_id | The ID of the account of the person to review the pull request. To get the reviewer_id, use the bitbucket-workspace-member-list command, and use the field AccountId. | Optional |
| description | A description of the pull request. | Optional |
| close_source_branch | Whether the source branch should be closed after the pull request. Possible values are: yes, no. | Optional |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.PullRequest.comment_count | Number | The number of comments in the pull request. |
| Bitbucket.PullRequest.task_count | Number | The number of tasks in the pull request. |
| Bitbucket.PullRequest.type | String | The type of the request. |
| Bitbucket.PullRequest.id | Number | The pull request ID. |
| Bitbucket.PullRequest.title | String | The title of the pull request. |
| Bitbucket.PullRequest.description | String | The description of the pull request. |
| Bitbucket.PullRequest.rendered.title.type | String | The type of the title of the request. |
| Bitbucket.PullRequest.rendered.title.raw | String | The content of the rendered title. |
| Bitbucket.PullRequest.rendered.title.markup | String | The text styling type, such as markdown. |
| Bitbucket.PullRequest.rendered.title.html | String | The HTML format of the pull request title. |
| Bitbucket.PullRequest.rendered.description.type | String | The type of the pull request description. |
| Bitbucket.PullRequest.rendered.description.raw | String | The content of the description of the pull request. |
| Bitbucket.PullRequest.rendered.description.markup | String | The text styling type, such as markdown. |
| Bitbucket.PullRequest.rendered.description.html | String | HTML format of the description content. |
| Bitbucket.PullRequest.state | String | The status of the pull request. |
| Bitbucket.PullRequest.merge_commit | Unknown | Whether it is a merge commit. |
| Bitbucket.PullRequest.close_source_branch | Boolean | Whether the branch should be closed after the merge. |
| Bitbucket.PullRequest.closed_by | Unknown | The user who closed the pull request. |
| Bitbucket.PullRequest.author.display_name | String | The display name of the author of the pull request. |
| Bitbucket.PullRequest.author.links | String | Links with information about the author of the pull request. |
| Bitbucket.PullRequest.author.type | String | The type of the author. |
| Bitbucket.PullRequest.author.uuid | String | The unique universal ID of the author. |
| Bitbucket.PullRequest.author.account_id | String | The account ID of the author of the pull request. |
| Bitbucket.PullRequest.author.nickname | String | The nickname of the author. |
| Bitbucket.PullRequest.reason | String | The reason to create the request. |
| Bitbucket.PullRequest.created_on | String | The creation date of the request. |
| Bitbucket.PullRequest.updated_on | String | The date of the last update of the pull request. |
| Bitbucket.PullRequest.destination.branch.name | String | The name of the destination branch. This is the branch to merge to. |
| Bitbucket.PullRequest.destination.commit.type | String | The type of the commit. |
| Bitbucket.PullRequest.destination.commit.hash | String | The hash of the commit. |
| Bitbucket.PullRequest.destination.commit.links | String | Links with information about the commit. |
| Bitbucket.PullRequest.destination.repository.type | String | The type of the repository of the destination branch. |
| Bitbucket.PullRequest.destination.repository.full_name | String | The full name of the repository of the destination branch. |
| Bitbucket.PullRequest.destination.repository.links | String | Links with information about the repository of the destination branch. |
| Bitbucket.PullRequest.destination.repository.name | String | The name of the repository of the destination branch. |
| Bitbucket.PullRequest.destination.repository.uuid | String | The unique ID of the repository of the destination branch. |
| Bitbucket.PullRequest.source.branch.name | String | The name of the source branch. That is the branch with the changes that will be merged. |
| Bitbucket.PullRequest.source.commit.type | String | The type of the commit in the source branch. |
| Bitbucket.PullRequest.source.commit.hash | String | The hash of the commit in the source branch. |
| Bitbucket.PullRequest.source.commit.links | String | Links with information about the commit in the source branch. |
| Bitbucket.PullRequest.source.repository.type | String | The type of the repository of the source branch. |
| Bitbucket.PullRequest.source.repository.full_name | String | The full name of the repository of the source branch. |
| Bitbucket.PullRequest.source.repository.links | String | Links with information about the repository of the source branch. |
| Bitbucket.PullRequest.source.repository.name | String | The name of the repository of the source branch. |
| Bitbucket.PullRequest.source.repository.uuid | String | The unique ID of the repository of the source branch. |
| Bitbucket.PullRequest.reviewers.display_name | String | The display name of the reviewer. |
| Bitbucket.PullRequest.reviewers.links | String | Links with information about the reviewer. |
| Bitbucket.PullRequest.reviewers.type | String | The type of the reviewer. |
| Bitbucket.PullRequest.reviewers.uuid | String | The unique id of the reviewer. |
| Bitbucket.PullRequest.reviewers.account_id | String | The account id of the reviewer. |
| Bitbucket.PullRequest.reviewers.nickname | String | The nickname of the reviewer. |
| Bitbucket.PullRequest.participants.type | String | The type of the participant. |
| Bitbucket.PullRequest.participants.user.display_name | String | The display name of the participant. |
| Bitbucket.PullRequest.participants.user.links | String | Links with information about the user. |
| Bitbucket.PullRequest.participants.user.type | String | The type of the participant. |
| Bitbucket.PullRequest.participants.user.uuid | String | The unique id of the participant. |
| Bitbucket.PullRequest.participants.user.account_id | String | The account id of the participant. |
| Bitbucket.PullRequest.participants.user.nickname | String | The nickname of the participant. |
| Bitbucket.PullRequest.participants.role | String | The role of the participant. |
| Bitbucket.PullRequest.participants.approved | String | The approval status of the pull request. |
| Bitbucket.PullRequest.participants.state | String | The state of the participant. |
| Bitbucket.PullRequest.participants.participated_on | String | The date of participation. |
| Bitbucket.PullRequest.links | String | Links to information about the pull request. |
| Bitbucket.PullRequest.summary.type | String | The type of the pull request. |
| Bitbucket.PullRequest.summary.raw | String | The description of the pull request. |
| Bitbucket.PullRequest.summary.markup | String | The text styling type, such as markdown. |
| Bitbucket.PullRequest.summary.html | String | The description of the pull request in HTML format. |
Command example
!bitbucket-pull-request-update pull_request_id=8 description="updating description"
Context Example
{
"Bitbucket": {
"PullRequest": {
"author": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net%Finitials%1111-1.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"close_source_branch": false,
"closed_by": null,
"comment_count": 12,
"created_on": "2022-09-12T09:00:00.000000+00:00",
"description": "updating description",
"destination": {
"branch": {
"name": "master"
},
"commit": {
"hash": "111111111111",
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/111111111111"
}
},
"type": "commit"
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
"id": 8,
"links": {
"activity": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/activity"
},
"approve": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/approve"
},
"comments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/comments"
},
"commits": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/commits"
},
"decline": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/decline"
},
"diff": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/diff/workspace/start_repo:0111111111111111111111111?from_pullrequest_id=8&topic=true"
},
"diffstat": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/diffstat/workspace/start_repo:01111111111%0D111111111111?from_pullrequest_id=8&topic=true"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/pull-requests/8"
},
"merge": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/merge"
},
"request-changes": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/request-changes"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8"
},
"statuses": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/statuses"
}
},
"merge_commit": null,
"participants": [
{
"approved": false,
"participated_on": "2022-09-15T12:00:00.000000+00:00",
"role": "PARTICIPANT",
"state": null,
"type": "participant",
"user": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net%initials.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
}
],
"reviewers": [
{
"display_name": "Some User",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/users/"
},
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net.png"
},
"html": {
"href": "https://bitbucket.org/"
}
},
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}",
"account_id": "111111111111111111111111",
"nickname": "Some User"
}
],
"reason": "",
"rendered": {
"description": {
"html": "<p>updating description</p>",
"markup": "markdown",
"raw": "updating description",
"type": "rendered"
},
"title": {
"html": "<p>pull_request</p>",
"markup": "markdown",
"raw": "pull_request",
"type": "rendered"
}
},
"source": {
"branch": {
"name": "test"
},
"commit": {
"hash": "111111111111",
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/111111111111"
}
},
"type": "commit"
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
"state": "OPEN",
"summary": {
"html": "",
"markup": "markdown",
"raw": "",
"type": "rendered"
},
"task_count": 0,
"title": "pull_request",
"type": "pullrequest",
"updated_on": "2022-09-18T08:00:00.000000+00:00"
}
}
}
bitbucket-pull-request-list
Returns a list of the pull requests. If a state is provided than the list will contain only PRs with the wanted status. If a state is not provided, by default a list of the open pull requests will return.
Base Command
bitbucket-pull-request-list
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| pull_request_id | The ID of the pull request to update. To get the pull_request_id, use the !bitbucket-pull-request-list command. | Optional |
| state | The state of the pull requests to see. Possible values are: OPEN, MERGED, DECLINED, SUPERSEDED, ALL. | Optional |
| limit | The maximum number of items in the list. The default value is 50. | Optional |
| page | The specific result page to display. | Optional |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.PullRequest.comment_count | Number | The number of comments in the pull request. |
| Bitbucket.PullRequest.task_count | Number | The number of tasks in the pull request. |
| Bitbucket.PullRequest.type | String | The type of the request. |
| Bitbucket.PullRequest.id | Number | The pull request ID. |
| Bitbucket.PullRequest.title | String | The title of the pull request. |
| Bitbucket.PullRequest.description | String | The description of the pull request. |
| Bitbucket.PullRequest.state | String | The status of the pull request. |
| Bitbucket.PullRequest.merge_commit.type | String | The type of the merge commit. |
| Bitbucket.PullRequest.merge_commit.hash | String | The hash of the merged commit. |
| Bitbucket.PullRequest.merge_commit.links | String | Links with information about the merged commit. |
| Bitbucket.PullRequest.close_source_branch | Boolean | Whether the branch should be closed after the merge. |
| Bitbucket.PullRequest.closed_by.display_name | String | The display name of the user who closed the pull request. |
| Bitbucket.PullRequest.closed_by.links | String | Links with information about the user who closed the pull request. |
| Bitbucket.PullRequest.closed_by.type | String | The type of user who closed the pull request. |
| Bitbucket.PullRequest.closed_by.uuid | String | The unique ID of the user who closed the pull request. |
| Bitbucket.PullRequest.closed_by.account_id | String | The account ID of the user who closed the pull request. |
| Bitbucket.PullRequest.closed_by.nickname | String | The nickname of the user who closed the pull request. |
| Bitbucket.PullRequest.author.display_name | String | The display name of the author of the pull request. |
| Bitbucket.PullRequest.author.links.self.href | String | Links with information about the author of the pull request. |
| Bitbucket.PullRequest.author.type | String | The type of the author. |
| Bitbucket.PullRequest.author.uuid | String | The unique universal ID of the author. |
| Bitbucket.PullRequest.author.account_id | String | The account ID of the author of the pull request. |
| Bitbucket.PullRequest.author.nickname | String | The nickname of the author. |
| Bitbucket.PullRequest.reason | String | The reason to create the request. |
| Bitbucket.PullRequest.created_on | String | The creation date of the request. |
| Bitbucket.PullRequest.updated_on | String | The date of the last update of the pull request. |
| Bitbucket.PullRequest.destination.branch.name | String | The name of the destination branch. That is the branch to merge to. |
| Bitbucket.PullRequest.destination.commit.type | String | The type of the commit. |
| Bitbucket.PullRequest.destination.commit.hash | String | The hash of the commit. |
| Bitbucket.PullRequest.destination.commit.links | String | Links with information about the commit. |
| Bitbucket.PullRequest.destination.repository.type | String | The type of the repository of the destination branch. |
| Bitbucket.PullRequest.destination.repository.full_name | String | The full name of the repository of the destination branch. |
| Bitbucket.PullRequest.destination.repository.links | String | Links with information about the repository of the destination branch. |
| Bitbucket.PullRequest.destination.repository.name | String | The name of the repository of the destination branch. |
| Bitbucket.PullRequest.destination.repository.uuid | String | The unique ID of the repository of the destination branch. |
| Bitbucket.PullRequest.source.branch.name | String | The name of the source branch. The branch with the changes that will be merged. |
| Bitbucket.PullRequest.source.commit.type | String | The type of the commit in the source branch. |
| Bitbucket.PullRequest.source.commit.hash | String | The hash of the commit in the source branch. |
| Bitbucket.PullRequest.source.commit.links | String | Links with information about the commit in the source branch. |
| Bitbucket.PullRequest.source.repository.type | String | The type of the repository of the source branch. |
| Bitbucket.PullRequest.source.repository.full_name | String | The full name of the repository of the source branch. |
| Bitbucket.PullRequest.source.repository.links | String | Links with information about the repository of the source branch. |
| Bitbucket.PullRequest.source.repository.name | String | The name of the repository of the source branch. |
| Bitbucket.PullRequest.source.repository.uuid | String | The unique ID of the repository of the source branch. |
| Bitbucket.PullRequest.reviewers.display_name | String | The display name of the reviewer. |
| Bitbucket.PullRequest.reviewers.links | String | Links with information about the reviewer. |
| Bitbucket.PullRequest.reviewers.type | String | The type of the reviewer. |
| Bitbucket.PullRequest.reviewers.uuid | String | The unique id of the reviewer. |
| Bitbucket.PullRequest.reviewers.account_id | String | The account id of the reviewer. |
| Bitbucket.PullRequest.reviewers.nickname | String | The nickname of the reviewer. |
| Bitbucket.PullRequest.participants.type | String | The type of the participant. |
| Bitbucket.PullRequest.participants.user.display_name | String | The display name of the participant. |
| Bitbucket.PullRequest.participants.user.links | String | Links with information about the user. |
| Bitbucket.PullRequest.participants.user.type | String | The type of the participant. |
| Bitbucket.PullRequest.participants.user.uuid | String | The unique id of the participant. |
| Bitbucket.PullRequest.participants.user.account_id | String | The account id of the participant. |
| Bitbucket.PullRequest.participants.user.nickname | String | The nickname of the participant. |
| Bitbucket.PullRequest.participants.role | String | The role of the participant. |
| Bitbucket.PullRequest.participants.approved | String | The approval status of the pull request. |
| Bitbucket.PullRequest.participants.state | String | The state of the participant. |
| Bitbucket.PullRequest.participants.participated_on | Unknown | The date of participation. |
| Bitbucket.PullRequest.links | String | Links to information about the pull request. |
| Bitbucket.PullRequest.summary.type | String | The type of the pull request. |
| Bitbucket.PullRequest.summary.raw | String | The description of the pull request. |
| Bitbucket.PullRequest.summary.markup | String | The text styling type, such as markdown. |
| Bitbucket.PullRequest.summary.html | String | The description of the pull request in HTML format. |
Command example
#### Context Example
```json
{
"Bitbucket": {
"PullRequest": [
{
"author": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.ne.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"close_source_branch": false,
"closed_by": null,
"comment_count": 12,
"created_on": "2022-09-12T09:00:00.000000+00:00",
"description": "",
"destination": {
"branch": {
"name": "master"
},
"commit": {
"hash": "111111111111",
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/111111111111"
}
},
"type": "commit"
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
"participants": [
{
"approved": false,
"participated_on": "2022-09-15T12:00:00.000000+00:00",
"role": "PARTICIPANT",
"state": null,
"type": "participant",
"user": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net%initials.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
}
],
"reviewers": [
{
"display_name": "Some User",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/users/"
},
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net.png"
},
"html": {
"href": "https://bitbucket.org/"
}
},
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}",
"account_id": "111111111111111111111111",
"nickname": "Some User"
}
],
"id": 8,
"links": {
"activity": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/activity"
},
"approve": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/approve"
},
"comments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/comments"
},
"commits": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/commits"
},
"decline": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/decline"
},
"diff": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/diff/workspace/start_repo:111111111111%111111111111?from_pullrequest_id=8&topic=true"
},
"diffstat": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/diffstat/workspace/start_repo:111111111111%111111111111?from_pullrequest_id=8&topic=true"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/pull-requests/8"
},
"merge": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/merge"
},
"request-changes": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/request-changes"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8"
},
"statuses": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/8/statuses"
}
},
"merge_commit": null,
"reason": "",
"source": {
"branch": {
"name": "test"
},
"commit": {
"hash": "111111111111",
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/111111111111"
}
},
"type": "commit"
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
"state": "OPEN",
"summary": {
"html": "",
"markup": "markdown",
"raw": "",
"type": "rendered"
},
"task_count": 0,
"title": "pull_request",
"type": "pullrequest",
"updated_on": "2022-09-18T08:00:00.000000+00:00"
},
{
"author": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"close_source_branch": true,
"closed_by": null,
"comment_count": 10,
"created_on": "2022-09-08T12:00:00.000000+00:00",
"description": "updates description",
"destination": {
"branch": {
"name": "master"
},
"commit": {
"hash": "111111111111",
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/111111111111"
}
},
"type": "commit"
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
"id": 6,
"links": {
"activity": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/6/activity"
},
"approve": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/6/approve"
},
"comments": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/6/comments"
},
"commits": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/6/commits"
},
"decline": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/6/decline"
},
"diff": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/diff/workspace/start_repo:1111111111%111111111111?from_pullrequest_id=6&topic=true"
},
"diffstat": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/diffstat/workspace/start_repo:1111111111%111111111111?from_pullrequest_id=6&topic=true"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo/pull-requests/6"
},
"merge": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/6/merge"
},
"request-changes": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/6/request-changes"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/6"
},
"statuses": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/6/statuses"
}
},
"merge_commit": null,
"reason": "",
"source": {
"branch": {
"name": "branch"
},
"commit": {
"hash": "111111111111",
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/commits/111111111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/commit/111111111111"
}
},
"type": "commit"
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
"state": "OPEN",
"summary": {
"html": "<p>updates description</p>",
"markup": "markdown",
"raw": "updates description",
"type": "rendered"
},
"task_count": 0,
"title": "uuuupdate",
"type": "pullrequest",
"updated_on": "2022-09-15T12:00:00.000000+00:00"
}
]
}
}
Human Readable Output
List of the pull requests
Id Title Description SourceBranch DestinationBranch State CreatedBy CreatedAt UpdatedAt 8 pull_request test master OPEN Some User 2022-09-12T09:51:55.458494+00:00 2022-09-18T08:57:20.815479+00:00 6 uuuupdate updates description branch master OPEN Some User 2022-09-08T12:23:04.303626+00:00 2022-09-15T12:44:45.785951+00:00
bitbucket-issue-comment-create
Deprecated. Issues are fully removed from Bitbucket Cloud by Atlassian as of Mid-August 2026. Use the jira-issue-add-comment command in the Atlassian Jira v3 integration instead. Creates a comment on an issue in Bitbucket.
Base Command
bitbucket-issue-comment-create
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| issue_id | The ID of the issue to comment on. To get the issue_id, use the !bitbucket-issue-list command. | Required |
| content | The content of the comment. | Required |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.IssueComment.type | String | The action type. |
| Bitbucket.IssueComment.id | Number | The ID of the comment on the issue. |
| Bitbucket.IssueComment.created_on | String | The creation date of the comment. |
| Bitbucket.IssueComment.updated_on | Unknown | When the comment was updated. |
| Bitbucket.IssueComment.content.type | String | The type of the content. |
| Bitbucket.IssueComment.content.raw | String | The content of the comment. |
| Bitbucket.IssueComment.content.markup | String | The text styling type, such as markdown. |
| Bitbucket.IssueComment.content.html | String | The content of the comment in HTML format. |
| Bitbucket.IssueComment.user.display_name | String | The display name of the user who created the comment. |
| Bitbucket.IssueComment.user.links | String | Links with information about the user who created the comment. |
| Bitbucket.IssueComment.user.type | String | The type of the user who created the comment. |
| Bitbucket.IssueComment.user.uuid | String | The unique ID of the user who created the comment. |
| Bitbucket.IssueComment.user.account_id | String | The account ID of the user who created the comment. |
| Bitbucket.IssueComment.user.nickname | String | The nickname of the user who created the comment. |
| Bitbucket.IssueComment.issue.type | String | The type of the issue. |
| Bitbucket.IssueComment.issue.id | Number | The ID of the issue. |
| Bitbucket.IssueComment.issue.repository.type | String | The type of the repository connected to the relevant issue. |
| Bitbucket.IssueComment.issue.repository.full_name | String | The full name of the repository connected to the relevant issue. |
| Bitbucket.IssueComment.issue.repository.links | String | Links to information about the relevant repository. |
| Bitbucket.IssueComment.issue.repository.name | String | The name of the relevant repository. |
| Bitbucket.IssueComment.issue.repository.uuid | String | The unique ID of the relevant repository. |
| Bitbucket.IssueComment.issue.links | String | Links with information about the issue. |
| Bitbucket.IssueComment.issue.title | String | The title of the issue. |
| Bitbucket.IssueComment.links | String | Links to information about the comment. |
Command example
!bitbucket-issue-comment-create content="some comment" issue_id=1
Context Example
{
"Bitbucket": {
"IssueComment": {
"content": {
"html": "<p>some comment</p>",
"markup": "markdown",
"raw": "some comment",
"type": "rendered"
},
"created_on": "2022-09-18T08:00:00.000000+00:00",
"id": 11111111,
"issue": {
"id": 1,
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/1"
}
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"title": "new issue",
"type": "issue"
},
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/issues/1#comment-11111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/1/comments/11111111"
}
},
"type": "issue_comment",
"updated_on": null,
"user": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
}
}
}
Human Readable Output
The comment was created successfully
bitbucket-issue-comment-delete
Deprecated. Issues are fully removed from Bitbucket Cloud by Atlassian as of Mid-August 2026. Use the jira-issue-delete-comment command in the Atlassian Jira v3 integration instead. Deletes a comment on an issue in Bitbucket.
Base Command
bitbucket-issue-comment-delete
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| issue_id | The ID of the issue to comment on. To get the issue_id, use the !bitbucket-issue-list command. | Required |
| comment_id | The ID of the comment to delete. To get the comment_id, use the !bitbucket-issue-comment-list command. | Required |
Context Output
There is no context output for this command.
Human Readable Output
The comment was deleted successfully
bitbucket-issue-comment-list
Deprecated. Issues are fully removed from Bitbucket Cloud by Atlassian as of Mid-August 2026. Use the jira-get-comments command in the Atlassian Jira v3 integration instead. Returns a list of comments on a specific issue. If a comment_id is given it will return information only about the specific comment.
Base Command
bitbucket-issue-comment-list
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| issue_id | The ID of the issue to comment on. To get the issue_id, use the bitbucket-issue-list command. | Required |
| comment_id | The ID of the comment to delete. To get the comment_id, use the !bitbucket-issue-comment-list command without any parameters. | Optional |
| limit | The maximum number of items in the list. The default value is 50. | Optional |
| page | The specific result page to display. | Optional |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.IssueComment.type | String | The action type. |
| Bitbucket.IssueComment.id | Number | The ID of comment on the issue. |
| Bitbucket.IssueComment.created_on | String | The creation date of the comment. |
| Bitbucket.IssueComment.updated_on | Unknown | When the comment was updated. |
| Bitbucket.IssueComment.content.type | String | The type of the content. |
| Bitbucket.IssueComment.content.raw | String | The content of the comment. |
| Bitbucket.IssueComment.content.markup | String | The text styling type, such as markdown. |
| Bitbucket.IssueComment.content.html | String | The content of the comment in HTML format. |
| Bitbucket.IssueComment.user.display_name | String | The display name of the user who created the comment. |
| Bitbucket.IssueComment.user.links | String | Links with information about the user who created the comment. |
| Bitbucket.IssueComment.user.type | String | The type of the user who created the comment. |
| Bitbucket.IssueComment.user.uuid | String | The unique ID of the user who created the comment. |
| Bitbucket.IssueComment.user.account_id | String | The account ID of the user who created the comment. |
| Bitbucket.IssueComment.user.nickname | String | The nickname of the user who created the comment. |
| Bitbucket.IssueComment.issue.type | String | The type of the issue. |
| Bitbucket.IssueComment.issue.id | Number | The ID of the issue. |
| Bitbucket.IssueComment.issue.repository.type | String | The type of the repository connected to the relevant issue. |
| Bitbucket.IssueComment.issue.repository.full_name | String | The full name of the repository connected to the relevant issue. |
| Bitbucket.IssueComment.issue.repository.links | String | Links to information about the relevant repository. |
| Bitbucket.IssueComment.issue.repository.name | String | The name of the relevant repository. |
| Bitbucket.IssueComment.issue.repository.uuid | String | The unique ID of the relevant repository. |
| Bitbucket.IssueComment.issue.links | String | Links with information about the issue. |
| Bitbucket.IssueComment.issue.title | String | The title of the issue. |
| Bitbucket.IssueComment.links | String | Links to information about the comment. |
Command example
!bitbucket-issue-comment-list issue_id=1
Context Example
{
"Bitbucket": {
"IssueComment": [
{
"content": {
"html": "<p>new bug</p>",
"markup": "markdown",
"raw": "new bug",
"type": "rendered"
},
"created_on": "2022-09-06T14:00:00.000000+00:00",
"id": 11111111,
"issue": {
"id": 1,
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/1"
}
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"title": "new issue",
"type": "issue"
},
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/issues/1#comment-11111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/1/comments/11111111"
}
},
"type": "issue_comment",
"updated_on": null,
"user": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
{
"content": {
"html": "<p>just a comment</p>",
"markup": "markdown",
"raw": "just a comment",
"type": "rendered"
},
"created_on": "2022-09-11T10:00:00.000000+00:00",
"id": 11111111,
"issue": {
"id": 1,
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/1"
}
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"title": "new issue",
"type": "issue"
},
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/issues/1#comment-11111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/1/comments/11111111"
}
},
"type": "issue_comment",
"updated_on": null,
"user": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
}
]
}
}
Human Readable Output
List of the comments on issue “1”
Id Content CreatedBy CreatedAt UpdatedAt IssueId IssueTitle 11111111 new bug Some User 2022-09-06T14:23:03.776275+00:00 1 new issue 11111111 just a comment Some User 2022-09-11T10:54:14.356238+00:00 1 new issue
bitbucket-issue-comment-update
Deprecated. Issues are fully removed from Bitbucket Cloud by Atlassian as of Mid-August 2026. Use the jira-issue-edit-comment command in the Atlassian Jira v3 integration instead. Updates a specific comment on a given issue.
Base Command
bitbucket-issue-comment-update
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| issue_id | The ID of the issue to comment on. To get the issue_id, use the !bitbucket-issue-list command. | Required |
| comment_id | The ID of the comment to delete. To get the issue_id, use the !bitbucket-issue-comment-list command. | Required |
| content | The new content of the comment. | Required |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.IssueComment.type | String | The action type. |
| Bitbucket.IssueComment.id | Number | The ID of the comment on the issue. |
| Bitbucket.IssueComment.created_on | String | The creation date of the comment. |
| Bitbucket.IssueComment.updated_on | Unknown | When the comment was updated. |
| Bitbucket.IssueComment.content.type | String | The type of the content. |
| Bitbucket.IssueComment.content.raw | String | The content of the comment. |
| Bitbucket.IssueComment.content.markup | String | The text styling type, such as markdown. |
| Bitbucket.IssueComment.content.html | String | The content of the comment in HTML format. |
| Bitbucket.IssueComment.user.display_name | String | The display name of the user who created the comment. |
| Bitbucket.IssueComment.user.links | String | Links with information about the user who created the comment. |
| Bitbucket.IssueComment.user.type | String | The type of the user who created the comment. |
| Bitbucket.IssueComment.user.uuid | String | The unique ID of the user who created the comment. |
| Bitbucket.IssueComment.user.account_id | String | The account ID of the user who created the comment. |
| Bitbucket.IssueComment.user.nickname | String | The nickname of the user who created the comment. |
| Bitbucket.IssueComment.issue.type | String | The type of the issue. |
| Bitbucket.IssueComment.issue.id | Number | The ID of the issue. |
| Bitbucket.IssueComment.issue.repository.type | String | The type of the repository connected to the relevant issue. |
| Bitbucket.IssueComment.issue.repository.full_name | String | The full name of the repository connected to the relevant issue. |
| Bitbucket.IssueComment.issue.repository.links | String | Links to information about the relevant repository. |
| Bitbucket.IssueComment.issue.repository.name | String | The name of the relevant repository. |
| Bitbucket.IssueComment.issue.repository.uuid | String | The unique ID of the relevant repository. |
| Bitbucket.IssueComment.issue.links | String | Links with information about the issue. |
| Bitbucket.IssueComment.issue.title | String | The title of the issue. |
| Bitbucket.IssueComment.links | String | Links to information about the comment. |
Command example
!bitbucket-issue-comment-update issue_id=1 comment_id=11111111 content="updating content info"
Context Example
{
"Bitbucket": {
"IssueComment": {
"content": {
"html": "<p>updating content info</p>",
"markup": "markdown",
"raw": "updating content info",
"type": "rendered"
},
"created_on": "2022-09-14T15:00:00.000000+00:00",
"id": 11111111,
"issue": {
"id": 1,
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/1"
}
},
"repository": {
"full_name": "workspace/start_repo",
"links": {
"avatar": {
"href": "https://bytebucket.org/ravatar/%1111111111-1111-1111-1111-111111111111%11?ts=default"
},
"html": {
"href": "https://bitbucket.org/workspace/start_repo"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo"
}
},
"name": "start_repo",
"type": "repository",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"title": "new issue",
"type": "issue"
},
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/issues/1#comment-11111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/issues/1/comments/11111111"
}
},
"type": "issue_comment",
"updated_on": "2022-09-18T08:00:00.000000+00:00",
"user": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
}
}
}
Human Readable Output
The comment “11111111” on issue “1” was updated successfully
bitbucket-pull-request-comment-create
Creates a new comment on a pull request.
Base Command
bitbucket-pull-request-comment-create
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| pull_request_id | The ID of the pull request to comment on. To get the pull request ID, use the !bitbucket-pull-request-list command. | Required |
| content | The content of the comment. | Required |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.PullRequestComment.id | Number | The ID of the comment in the pull request. |
| Bitbucket.PullRequestComment.created_on | String | The creation date of the pull request comment. |
| Bitbucket.PullRequestComment.updated_on | String | The update date of the pull request comment. |
| Bitbucket.PullRequestComment.content.type | String | The type of the content, such as rendered. |
| Bitbucket.PullRequestComment.content.raw | String | The actual content of the comment. |
| Bitbucket.PullRequestComment.content.markup | String | The text styling type, such as markdown. |
| Bitbucket.PullRequestComment.content.html | String | The content of the comment in HTML format. |
| Bitbucket.PullRequestComment.user.display_name | String | The display name of the user who created the comment. |
| Bitbucket.PullRequestComment.user.links | String | Links to information about the user |
| Bitbucket.PullRequestComment.user.type | String | The type of the user. |
| Bitbucket.PullRequestComment.user.uuid | String | The unique ID of the user. |
| Bitbucket.PullRequestComment.user.account_id | String | The account ID of the user. |
| Bitbucket.PullRequestComment.user.nickname | String | The nickname of the user. |
| Bitbucket.PullRequestComment.deleted | Boolean | Whether the comment was deleted. |
| Bitbucket.PullRequestComment.type | String | The type of the action. |
| Bitbucket.PullRequestComment.links | String | Links to information about the pull request. |
| Bitbucket.PullRequestComment.pullrequest.type | String | The type of the pull request. |
| Bitbucket.PullRequestComment.pullrequest.id | Number | The ID of the pull request. |
| Bitbucket.PullRequestComment.pullrequest.title | String | The title of the pull request. |
| Bitbucket.PullRequestComment.pullrequest.links | String | Links to information about the pull request. |
Command example
!bitbucket-pull-request-comment-create content="new comment on a pull request" pull_request_id=1
Context Example
{
"Bitbucket": {
"PullRequestComment": [
{
"content": {
"html": "<p>new comment on a pull request</p>",
"markup": "markdown",
"raw": "new comment on a pull request",
"type": "rendered"
},
"created_on": "2022-09-18T08:00:00.000000+00:00",
"deleted": false,
"id": 11111111,
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/pull-requests/1/_/diff#comment-11111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/1/comments/11111111"
}
},
"pullrequest": {
"id": 1,
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/pull-requests/1"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/1"
}
},
"title": "change 2",
"type": "pullrequest"
},
"type": "pullrequest_comment",
"updated_on": "2022-09-18T08:00:00.000000+00:00",
"user": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
}
]
}
}
Human Readable Output
The comment was created successfully
bitbucket-pull-request-comment-list
Returns a list of comments of a specific pull request.
Base Command
bitbucket-pull-request-comment-list
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| pull_request_id | The ID of the pull request. To get the pull_request_id, use the !bitbucket-pull-request-list command. | Required |
| comment_id | The ID of the comment. To get the comment_id, use the !bitbucket-pull-request-comment-list command. | Optional |
| limit | The maximum number of items in the list. The default value is 50. | Optional |
| page | The specific result page to display. | Optional |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.PullRequestComment.id | Number | The ID of the comment in the pull request. |
| Bitbucket.PullRequestComment.created_on | String | The creation date of the pull request comment. |
| Bitbucket.PullRequestComment.updated_on | String | The update date of the pull request comment. |
| Bitbucket.PullRequestComment.content.type | String | The type of the content, such as rendered. |
| Bitbucket.PullRequestComment.content.raw | String | The actual content of the comment. |
| Bitbucket.PullRequestComment.content.markup | String | The text styling type, such as markdown. |
| Bitbucket.PullRequestComment.content.html | String | The content of the comment in HTML format. |
| Bitbucket.PullRequestComment.user.display_name | String | The display name of the user who created the comment. |
| Bitbucket.PullRequestComment.user.links | String | Links to information about the user. |
| Bitbucket.PullRequestComment.user.type | String | The type of the user. |
| Bitbucket.PullRequestComment.user.uuid | String | The unique ID of the user. |
| Bitbucket.PullRequestComment.user.account_id | String | The account ID of the user. |
| Bitbucket.PullRequestComment.user.nickname | String | The nickname of the user. |
| Bitbucket.PullRequestComment.deleted | Boolean | Whether the comment was deleted. |
| Bitbucket.PullRequestComment.type | String | The type of the action. |
| Bitbucket.PullRequestComment.links | String | Links to information about the pull request. |
| Bitbucket.PullRequestComment.pullrequest.type | String | The type of the pull request. |
| Bitbucket.PullRequestComment.pullrequest.id | Number | The ID of the pull request. |
| Bitbucket.PullRequestComment.pullrequest.title | String | The title of the pull request. |
| Bitbucket.PullRequestComment.pullrequest.links | String | Links to information about the pull request. |
Command example
!bitbucket-pull-request-comment-list pull_request_id=1
Context Example
{
"Bitbucket": {
"PullRequestComment": [
{
"content": {
"html": "<p>new comment on a pull request</p>",
"markup": "markdown",
"raw": "new comment on a pull request",
"type": "rendered"
},
"created_on": "2022-09-18T08:00:00.000000+00:00",
"deleted": false,
"id": 11111111,
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/pull-requests/1/_/diff#comment-11111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/1/comments/11111111"
}
},
"pullrequest": {
"id": 1,
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/pull-requests/1"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/1"
}
},
"title": "change 2",
"type": "pullrequest"
},
"type": "pullrequest_comment",
"updated_on": "2022-09-18T08:00:00.000000+00:00",
"user": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
}
]
}
}
Human Readable Output
List of the comments on pull request “1”
Id Content CreatedBy CreatedAt UpdatedAt 11111111 new comment on a pull request Some User 2022-09-18T08:57:13.848266+00:00 2022-09-18T08:57:13.848309+00:00
bitbucket-pull-request-comment-update
Updates a specific comment in a specific pull request.
Base Command
bitbucket-pull-request-comment-update
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| pull_request_id | The ID of the pull request. To get the pull request_id use, the !bitbucket-pull-request-list command. | Required |
| comment_id | The ID of the comment. To get the comment_id, use the !bitbucket-pull-request-comment-list command. | Required |
| content | The ID of the comment. | Required |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.PullRequestComment.id | Number | The ID of the comment in the pull request. |
| Bitbucket.PullRequestComment.created_on | String | The creation date of the pull request comment. |
| Bitbucket.PullRequestComment.updated_on | String | The update date of the pull request comment. |
| Bitbucket.PullRequestComment.content.type | String | The type of the content, such as rendered. |
| Bitbucket.PullRequestComment.content.raw | String | The actual content of the comment. |
| Bitbucket.PullRequestComment.content.markup | String | The text styling type, such as markdown. |
| Bitbucket.PullRequestComment.content.html | String | The content of the comment in HTML format. |
| Bitbucket.PullRequestComment.user.display_name | String | The display name of the user who created the comment. |
| Bitbucket.PullRequestComment.user.links | String | Links to information about the user. |
| Bitbucket.PullRequestComment.user.type | String | The type of the user. |
| Bitbucket.PullRequestComment.user.uuid | String | The unique ID of the user. |
| Bitbucket.PullRequestComment.user.account_id | String | The account ID of the user. |
| Bitbucket.PullRequestComment.user.nickname | String | The nickname of the user. |
| Bitbucket.PullRequestComment.deleted | Boolean | Whether the comment was deleted. |
| Bitbucket.PullRequestComment.type | String | The type of the action. |
| Bitbucket.PullRequestComment.links | String | Links to information about the pull request. |
| Bitbucket.PullRequestComment.pullrequest.type | String | The type of the pull request. |
| Bitbucket.PullRequestComment.pullrequest.id | Number | The ID of the pull request. |
| Bitbucket.PullRequestComment.pullrequest.title | String | The title of the pull request. |
| Bitbucket.PullRequestComment.pullrequest.links | String | Links to information about the pull request. |
Command example
!bitbucket-pull-request-comment-update comment_id=111111111 content="hi you" pull_request_id=1
Context Example
{
"Bitbucket": {
"PullRequestComment": [
{
"content": {
"html": "<p>new comment on a pull request</p>",
"markup": "markdown",
"raw": "new comment on a pull request",
"type": "rendered"
},
"created_on": "2022-09-18T08:00:00.000000+00:00",
"deleted": false,
"id": 11111111,
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/pull-requests/1/_/diff#comment-11111111"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/1/comments/11111111"
}
},
"pullrequest": {
"id": 1,
"links": {
"html": {
"href": "https://bitbucket.org/workspace/start_repo/pull-requests/1"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/workspace/start_repo/pullrequests/1"
}
},
"title": "change 2",
"type": "pullrequest"
},
"type": "pullrequest_comment",
"updated_on": "2022-09-18T08:00:00.000000+00:00",
"user": {
"account_id": "111111111111111111111111",
"display_name": "Some User",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net.png"
},
"html": {
"href": "https://bitbucket.org/%7B11111111-1111-1111-1111-111111111111%7D/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "Some User",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
}
]
}
}
Human Readable Output
The comment was updated successfully
bitbucket-pull-request-comment-delete
Deletes a specific comment in a specific pull request.
Base Command
bitbucket-pull-request-comment-delete
Input
| Argument Name | Description | Required |
|---|---|---|
| repo | The repository name or slug. | Optional |
| pull_request_id | The ID of the pull request. To get the pull_request_id, use the !bitbucket-pull-request-list command. | Required |
| comment_id | The ID of the comment. To get the comment_id, use the !bitbucket-pull-request-comment-list command. | Required |
Context Output
There is no context output for this command.
Command example
!bitbucket-pull-request-comment-delete comment_id=331372169 pull_request_id=1
Human Readable Output
The comment was deleted successfully.
bitbucket-workspace-member-list
Returns a list of all the members in the workspace.
Base Command
bitbucket-workspace-member-list
Input
| Argument Name | Description | Required |
|---|---|---|
| limit | The maximum number of items in the list. The default value is 50. | Optional |
| page | The specific result page to display. | Optional |
| partial_response | Return a partial response if true, else return the full API response. Possible values are: true, false. Default is true. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| Bitbucket.WorkspaceMember.type | String | The action type. |
| Bitbucket.WorkspaceMember.user.display_name | String | The display name of the user. |
| Bitbucket.WorkspaceMember.user.links | String | Links with information about the user. |
| Bitbucket.WorkspaceMember.user.type | String | The type of the user. |
| Bitbucket.WorkspaceMember.user.uuid | String | The unique ID of the user. |
| Bitbucket.WorkspaceMember.user.account_id | String | The account ID of the user. |
| Bitbucket.WorkspaceMember.user.nickname | String | The nickname of the user. |
| Bitbucket.WorkspaceMember.workspace.type | String | The type of the workspace. |
| Bitbucket.WorkspaceMember.workspace.uuid | String | The unique ID of the workspace. |
| Bitbucket.WorkspaceMember.workspace.name | String | The name of the workspace. |
| Bitbucket.WorkspaceMember.workspace.slug | String | The slug of the workspace. |
| Bitbucket.WorkspaceMember.workspace.links | String | Links to information about the workspace. |
Command example
#### Context Example
```json
{
"Bitbucket": {
"WorkspaceMember": [
{
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/workspaces/workspace/members/%111111111111-1111-1111-1111-111111111111%11"
}
},
"type": "workspace_membership",
"user": {
"account_id": "111111111111111111111111",
"display_name": "Display Name",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net.png"
},
"html": {
"href": "https://bitbucket.org/%111111111111-1111-1111-1111-111111111111%11/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%7B11111111-1111-1111-1111-111111111111%7D"
}
},
"nickname": "nixkname",
"type": "user",
"uuid": "{11111111-1111-1111-1111-111111111111}"
},
"workspace": {
"links": {
"avatar": {
"href": "https://bitbucket.org/workspaces/workspace/avatar/?ts=1111111111"
},
"html": {
"href": "https://bitbucket.org/workspace/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/workspaces/workspace"
}
},
"name": "Some User",
"slug": "workspace",
"type": "workspace",
"uuid": "{11111111-1111-1111-1111-111111111111}"
}
},
{
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/workspaces/workspace/members/%11111111-1111-1111-1111-111111111111%11"
}
},
"type": "workspace_membership",
"user": {
"account_id": "222222222222222222222222",
"display_name": "Display Name",
"links": {
"avatar": {
"href": "https://secure.gravatar.com/avatar/?d=httpsavatar-management--avatars.us-west-2.prod.public.atl-paas.net.png"
},
"html": {
"href": "https://bitbucket.org/%22222222-2222-2222-2222-222222222222%11/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/users/%22222222-2222-2222-2222-222222222222%22"
}
},
"nickname": "nickname",
"type": "user",
"uuid": "{22222222-2222-2222-2222-222222222222}"
},
"workspace": {
"links": {
"avatar": {
"href": "https://bitbucket.org/workspaces/workspace/avatar/?ts=22222222"
},
"html": {
"href": "https://bitbucket.org/workspace/"
},
"self": {
"href": "https://api.bitbucket.org/2.0/workspaces/workspace"
}
},
"name": "Another User",
"slug": "workspace",
"type": "workspace",
"uuid": "{222222222-2222-2222-2222-222222222222}"
}
}
]
}
}
Human Readable Output
The list of all the workspace members
Name AccountId Some User 111111111111111111111111 Another User 222222222222222222222222
Configuration parameters
server_url— Server URL (required)workspace— Workspace (required)credentials— User Nameclient_credentials— Client IDrepository— Repositoryinsecure— Trust any certificate (not secure)proxy— Use system proxy settings
Commands (24)
-
bitbucket-branch-createCreates a new branch in Bitbucket.
-
bitbucket-branch-deleteDeletes the given branch from Bitbucket.
-
bitbucket-branch-getReturns the information of the requested branch.
-
bitbucket-commit-createCreates a new commit in Bitbucket.
-
bitbucket-commit-listReturns a list of the commit in accordance with the included and excluded branches.
-
bitbucket-file-deleteDeletes the given file from Bitbucket.
-
bitbucket-issue-comment-createDeprecatedDeprecated. Issues are fully removed from Bitbucket Cloud by Atlassian as of Mid-August 2026. Use the ***jira-issue-add-comment*** command in the Atlassian Jira v3 integration instead. Creates a comment on an issue in Bitbucket.
-
bitbucket-issue-comment-deleteDeprecatedDeprecated. Issues are fully removed from Bitbucket Cloud by Atlassian as of Mid-August 2026. Use the ***jira-issue-delete-comment*** command in the Atlassian Jira v3 integration instead. Deletes a comment on an issue in Bitbucket.
-
bitbucket-issue-comment-listDeprecatedDeprecated. Issues are fully removed from Bitbucket Cloud by Atlassian as of Mid-August 2026. Use the ***jira-get-comments*** command in the Atlassian Jira v3 integration instead. Returns a list of comments on a specific issue. If a comment_id is given it will return information only about the specific comment.
-
bitbucket-issue-comment-updateDeprecatedDeprecated. Issues are fully removed from Bitbucket Cloud by Atlassian as of Mid-August 2026. Use the ***jira-issue-edit-comment*** command in the Atlassian Jira v3 integration instead. Updates a specific comment on a given issue.
-
bitbucket-issue-createDeprecatedDeprecated. Issues are fully removed from Bitbucket Cloud by Atlassian as of Mid-August 2026. Use the ***jira-create-issue*** command in the Atlassian Jira v3 integration instead. Creates an issue in Bitbucket. To perform this command, create an issue tracker by clicking on the relevant repo > Repository settings > Issue tracker.
-
bitbucket-issue-listDeprecatedDeprecated. Issues are fully removed from Bitbucket Cloud by Atlassian as of Mid-August 2026. Use the ***jira-get-issue*** command (for a single issue) or the ***jira-issue-query*** command (to list issues using JQL) in the Atlassian Jira v3 integration instead. If an issue_id is given, returns the information about it. Otherwise, returns a list of all the issues, according to the limit parameter.
-
bitbucket-issue-updateDeprecatedDeprecated. Issues are fully removed from Bitbucket Cloud by Atlassian as of Mid-August 2026. Use the ***jira-edit-issue*** command in the Atlassian Jira v3 integration instead. Updates an issue in Bitbucket. To perform this command, create an issue tracker by clicking on the relevant repo > Repository settings > Issue tracker.
-
bitbucket-open-branch-listReturns a list of the open branches.
-
bitbucket-project-listIf a project_key is given, returns the requested project. Else, returns a list of the projects in the workspace.
-
bitbucket-pull-request-comment-createCreates a new comment on a pull request.
-
bitbucket-pull-request-comment-deleteDeletes a specific comment in a specific pull request.
-
bitbucket-pull-request-comment-listReturns a list of comments of a specific pull request.
-
bitbucket-pull-request-comment-updateUpdates a specific comment in a specific pull request.
-
bitbucket-pull-request-createCreates a pull request in Bitbucket.
-
bitbucket-pull-request-listReturns a list of the pull requests. If a state is provided than the list will contain only PRs with the wanted status. If a state is not provided, by default a list of the open pull requests will return.
-
bitbucket-pull-request-updateUpdates a pull request in Bitbucket.
-
bitbucket-raw-file-getReturns the content of the given file, along with the option to download it.
-
bitbucket-workspace-member-listReturns a list of all the members in the workspace.
import time import urllib3 from CommonServerPython import * # noqa # pylint: disable=unused-wildcard-import from requests import Response from CommonServerUserPython import * # noqa # Disable insecure warnings urllib3.disable_warnings() # pylint: disable=no-member """ CONSTANTS """ DATE_FORMAT = "%Y-%m-%dT%H:%M:%SZ" # ISO8601 format with UTC, default in XSOAR TOKEN_URL = "https://bitbucket.org/site/oauth2/access_token" # The OAuth 2.0 token endpoint, a different host than the API. TOKEN_SAFETY_MARGIN = 60 # Seconds subtracted from the token expiration time, to avoid using an almost expired token. """ CLIENT CLASS """ class Client(BaseClient): def __init__( self, workspace: str, server_url: str, auth: tuple | None = None, repository: str = "", proxy: bool = False, verify: bool = True, client_id: str = "", client_secret: str = "", ): """Bitbucket API client, supporting either basic authentication or OAuth 2.0 client credentials. Args: workspace: str - The Bitbucket workspace. server_url: str - The Bitbucket API base URL. auth: tuple | None - (user name, API token) for basic authentication. Not used in OAuth mode. repository: str - The default repository. proxy: bool - Whether to use the system proxy settings. verify: bool - Whether to verify the certificate. client_id: str - The OAuth consumer key. Given together with client_secret to use OAuth mode. client_secret: str - The OAuth consumer secret. Given together with client_id to use OAuth mode. """ self.repository = repository self.workspace = workspace self.server_url = server_url self.client_id = client_id self.client_secret = client_secret self.use_oauth = bool(client_id and client_secret) super().__init__(base_url=server_url, auth=auth, proxy=proxy, verify=verify, headers={"Accept": "application/json"}) def get_access_token(self) -> str: """Returns a valid OAuth 2.0 access token, reusing the cached one while it is still valid. Returns: The access token to use in the Authorization header. """ integration_context = get_integration_context() access_token = integration_context.get("access_token") valid_until = integration_context.get("valid_until") cached_client_id = integration_context.get("client_id") now = int(time.time()) if access_token and valid_until and now < valid_until and cached_client_id == self.client_id: demisto.debug("Using cached OAuth access token.") return access_token response = super()._http_request( method="POST", full_url=TOKEN_URL, auth=(self.client_id, self.client_secret), headers={"Content-Type": "application/x-www-form-urlencoded"}, data={"grant_type": "client_credentials"}, ) access_token = response.get("access_token", "") expires_in = arg_to_number(response.get("expires_in")) or 0 valid_until = now + expires_in - TOKEN_SAFETY_MARGIN set_integration_context({"access_token": access_token, "valid_until": valid_until, "client_id": self.client_id}) demisto.debug(f"Generated a new OAuth access token, expires at {valid_until}.") return access_token def _http_request(self, *args: Any, **kwargs: Any) -> Any: """Adds an up to date Authorization Bearer header when using OAuth, and performs the request. Args: args: The positional arguments of BaseClient._http_request. kwargs: The keyword arguments of BaseClient._http_request. Returns: The response of BaseClient._http_request. """ if self.use_oauth: kwargs["headers"] = { **(self._headers or {}), **(kwargs.get("headers") or {}), "Authorization": f"Bearer {self.get_access_token()}", } return super()._http_request(*args, **kwargs) def get_full_url(self, full_url: str) -> dict: """Makes a general GET request according to the given full_url. Args: full_url: str - The full url for the GET method. Returns: A dictionary, response object from the given full_url. """ return self._http_request(method="GET", full_url=full_url) def get_project_list_request(self, page: int, page_size: int, project_key: str = None) -> dict: """Gets a list of all the project in Bitbucket. If a specific project_key is given, it will return the information about this project. Args: project_key: str - A key to a specific project. page: int - The specific result's page. page_size: int - The number of wanted results in a results page. Returns: A response object in a form of a dictionary. """ params = {"page": page, "pagelen": page_size} if not project_key: full_url = f"{self.server_url}/workspaces/{self.workspace}/projects/" else: project_key = project_key.upper() full_url = f"{self.server_url}/workspaces/{self.workspace}/projects/{project_key}" return self._http_request(method="GET", full_url=full_url, params=params) def get_open_branch_list_request(self, repo: str, page: int, page_size: int) -> dict: """Gets a list of all the open branches in Bitbucket. Args: repo: str - The repository the user entered if he did. page: int - The specific result's page. page_size: int - The number of wanted results in a results page. Returns: A response object in a form of a dictionary. """ params = {"page": page, "pagelen": page_size} url_suffix = f"/repositories/{self.workspace}/{repo}/refs/branches" return self._http_request(method="GET", url_suffix=url_suffix, params=params) def get_branch_request(self, branch_name: str, repo: str) -> dict: """Gets the information of a specific branch in Bitbucket. Args: repo: str - The repository the user entered if he did. branch_name: str - The name of the branch to create. Returns: A response object in a form of a dictionary. """ url_suffix = f"/repositories/{self.workspace}/{repo}/refs/branches/{branch_name}" return self._http_request(method="GET", url_suffix=url_suffix) def branch_create_request(self, name: str, target_branch: str, repo: str) -> dict: """Creates a branch in Bitbucket. Args: repo: str - The repository the user entered if he did. name: str - The name of the branch to create. target_branch: str - The branch from which to create the new branch. Returns: A response object in a form of a dictionary. """ url_suffix = f"/repositories/{self.workspace}/{repo}/refs/branches" body = {"target": {"hash": target_branch}, "name": name} return self._http_request(method="POST", url_suffix=url_suffix, json_data=body) def branch_delete_request(self, branch_name: str, repo: str) -> Response: """Deletes a branch in Bitbucket. Args: repo: str - The repository the user entered if he did. branch_name: str - The name of the branch to delete. Returns: A response object. """ url_suffix = f"/repositories/{self.workspace}/{repo}/refs/branches/{branch_name}" return self._http_request(method="DELETE", url_suffix=url_suffix, resp_type="response") def commit_create_request(self, body: dict, repo: str) -> Response: """Creates a commit in Bitbucket. Args: repo: str - The repository the user entered if he did. body: Dict - additional information to the api call. Returns: A Response object. """ url_suffix = f"/repositories/{self.workspace}/{repo}/src" return self._http_request(method="POST", url_suffix=url_suffix, data=body, resp_type="response") def commit_list_request( self, repo: str, file_path: str, page: int, page_size: int, included_list: list, excluded_list: list = [] ) -> dict: """Gets a list of commits from Bitbucket. Args: repo: str - The repository the user entered if he did. file_path: str - A file name, in order to return commits that are relevant to this file (if given). page: int - The specific result's page. page_size: int - The number of wanted results in a results page. excluded_list: list - A list of branches that the user wants to filter there related commits away from the list. included_list: list - A list of branches that the user wants to have in the list of commits. Returns: A response object in a form of a dictionary. """ params = {"path": file_path, "page": page, "pagelen": page_size} url_suffix = f"/repositories/{self.workspace}/{repo}/commits" param_list = "" for branch in excluded_list: param_list = f"{param_list}exclude={branch}&" for branch in included_list: param_list = f"{param_list}include={branch}&" if param_list: url_suffix = f"{url_suffix}?{param_list[:-1]}" return self._http_request(method="POST", url_suffix=url_suffix, params=params) def file_delete_request(self, body: dict, repo: str) -> Response: """Deletes a file in Bitbucket. Args: repo: str - The repository the user entered if he did. body: Dict - additional information to the api call. Returns: A Response object. """ url_suffix = f"/repositories/{self.workspace}/{repo}/src" return self._http_request(method="POST", url_suffix=url_suffix, data=body, resp_type="response") def raw_file_get_request(self, repo: str, file_path: str, commit_hash: str) -> Response: """Gets a content of a file in Bitbucket. Args: repo: str - The repository the user entered, if he did. file_path: str - The name of the file commit_hash: str - The hash of the relevant commit. Returns: A Response object. """ url_suffix = f"/repositories/{self.workspace}/{repo}/src/{commit_hash}/{file_path}" return self._http_request(method="GET", url_suffix=url_suffix, resp_type="response") def issue_create_request(self, repo: str, body: dict) -> dict: """Creates an issue in Bitbucket. Args: repo: str - The repository the user entered if he did. body: Dict - additional information to the api call Returns: A response object in a form of a dictionary. """ url_suffix = f"/repositories/{self.workspace}/{repo}/issues" return self._http_request(method="POST", url_suffix=url_suffix, json_data=body) def issue_list_request(self, repo: str, page: int, page_size: int, issue_id: str) -> dict: """Gets a list of all the issues, or in case that issue_id has been given, it will return the information of the specific issue. Args: repo: str - The repository the user entered if he did. page: int - The specific result's page. page_size: int - The number of wanted results in a results page. issue_id: str - an id to a specific issue to get. Returns: A response object in a form of a dictionary. """ params = {"page": page, "pagelen": page_size} url_suffix = f"/repositories/{self.workspace}/{repo}/issues/" if issue_id: url_suffix = f"{url_suffix}{issue_id}" return self._http_request(method="GET", url_suffix=url_suffix, params=params) def issue_update_request(self, repo: str, body: dict, issue_id: str) -> dict: """Updates an issue. Args: repo: str - The repository the user entered if he did. body: Dict - the params to the api call issue_id: str - an id to a specific issue to update. Returns: A response object in a form of a dictionary. """ url_suffix = f"/repositories/{self.workspace}/{repo}/issues/{issue_id}/" return self._http_request(method="PUT", url_suffix=url_suffix, json_data=body) def pull_request_create_request(self, repo: str, body: dict) -> dict: """Creates a pull request. Args: repo: str - The repository the user entered if he did. body: Dict - the params to the api call Returns: A response object in a form of a dictionary. """ url_suffix = f"/repositories/{self.workspace}/{repo}/pullrequests" return self._http_request(method="POST", url_suffix=url_suffix, json_data=body) def pull_request_update_request(self, repo: str, body: dict, pr_id: str) -> dict: """Updates a pull request. Args: repo: str - The repository the user entered if he did. body: Dict - the params to the api call pr_id: str - an id to a specific pull request to update. Returns: A response object in a form of a dictionary. """ url_suffix = f"/repositories/{self.workspace}/{repo}/pullrequests/{pr_id}" return self._http_request(method="PUT", url_suffix=url_suffix, json_data=body) def pull_request_list_request(self, repo: str, pr_id: str, page: int, page_size: int, state: str) -> dict: """Gets information about a specific pull request. If there isn't a pull request id, gets a list of pull requests. Args: repo: str - The repository the user entered if he did. pr_id: str - an id to a specific pull request to update. page: int - The specific result's page. page_size: int - The number of wanted results in a results page. state: str - If a state is provided than the list will contain only PR with the wanted status. Returns: A response object in a form of a dictionary. """ params: dict = {"page": page, "pagelen": page_size} if state: params["state"] = state url_suffix = f"/repositories/{self.workspace}/{repo}/pullrequests" if pr_id: url_suffix = f"{url_suffix}/{pr_id}" return self._http_request(method="GET", url_suffix=url_suffix, params=params) def issue_comment_create_request(self, repo: str, issue_id: str, body: dict) -> dict: """Creates a comment on an issue. Args: repo: str - The repository the user entered if he did. body: Dict - The content of the comment, in a dictionary form. issue_id: str - an id to a specific issue to comment on. Returns: A response object in a form of a dictionary. """ url_suffix = f"/repositories/{self.workspace}/{repo}/issues/{issue_id}/comments" return self._http_request(method="POST", url_suffix=url_suffix, json_data=body) def issue_comment_delete_request(self, repo: str, issue_id: str, comment_id: str) -> Response: """Deletes a comment in an issue. Args: repo: str - The repository the user entered, if he did. issue_id: str - an id to a specific issue to delete one of its comments. comment_id: str - an id of a specific comment to delete. Returns: A Response object. """ url_suffix = f"/repositories/{self.workspace}/{repo}/issues/{issue_id}/comments/{comment_id}" return self._http_request(method="DELETE", url_suffix=url_suffix, resp_type="response") def issue_comment_update_request(self, repo: str, issue_id: str, comment_id: str, body: dict) -> dict: """Updates a comment in an issue. Args: repo: str - The repository the user entered, if he did. issue_id: str - an id to a specific issue to update one of its comments. comment_id: str - an id of a specific comment to update. body: Dict - an id of a specific comment to update. Returns: A response object in a form of a dictionary. """ url_suffix = f"/repositories/{self.workspace}/{repo}/issues/{issue_id}/comments/{comment_id}" return self._http_request(method="PUT", url_suffix=url_suffix, json_data=body) def issue_comment_list_request(self, repo: str, issue_id: str, comment_id: str, page: int, page_size: int) -> dict: """Gets information about a specific comment in an issue. if there is no comment_id, then gets all the comments on a specific issue. Args: repo: str - The repository the user entered, if he did. issue_id: str - an id to a specific issue to get its comments. comment_id: str - an id of a specific comment. page: int - The specific result's page. page_size: int - The number of wanted results in a results page. Returns: A response object in a form of a dictionary. """ params = {"page": page, "pagelen": page_size} url_suffix = f"/repositories/{self.workspace}/{repo}/issues/{issue_id}/comments/" if comment_id: url_suffix = f"{url_suffix}{comment_id}" return self._http_request(method="GET", url_suffix=url_suffix, params=params) def pull_request_comment_create_request(self, repo: str, pr_id: str, body: dict) -> dict: """Creates a new pull request. Args: repo: str - The repository the user entered, if he did. pr_id: str - an id to a specific pull request to add a comment to. body: Dict - a dictionary containing information about the content of the comment. Returns: A response object in a form of a dictionary. """ url_suffix = f"/repositories/{self.workspace}/{repo}/pullrequests/{pr_id}/comments" return self._http_request(method="POST", url_suffix=url_suffix, json_data=body) def pull_request_comment_list_request(self, repo: str, pr_id: str, page: int, page_size: int, comment_id: str) -> dict: """Gets information about a specific comment of a pull request. If there isn't a comment_id than gets all the comments on a specific pull request. Args: repo: str - The repository the user entered, if he did. pr_id: str - an id to a specific pull request in order to return the list of its comments. page: int - The specific result's page. page_size: int - The number of wanted results in a results page. comment_id: str - an id to a specific comment, in order to get info about it. Returns: A response object in a form of a dictionary. """ params = {"page": page, "pagelen": page_size} url_suffix = f"/repositories/{self.workspace}/{repo}/pullrequests/{pr_id}/comments" if comment_id: url_suffix = f"{url_suffix}/{comment_id}" return self._http_request(method="GET", url_suffix=url_suffix, params=params) def pull_request_comment_update_request(self, repo: str, pr_id: str, body: dict, comment_id: str) -> dict: """Updates a specific comment in a pull request. Args: repo: str - The repository the user entered, if he did. pr_id: str - an id to a specific pull request. body: Dict - a dictionary with the updated content of the comment. comment_id: str - an id to a specific comment to update. Returns: A response object in a form of a dictionary. """ url_suffix = f"/repositories/{self.workspace}/{repo}/pullrequests/{pr_id}/comments/{comment_id}" return self._http_request(method="PUT", url_suffix=url_suffix, json_data=body) def pull_request_comment_delete_request(self, repo: str, pr_id: str, comment_id: str) -> Response: """Deletes a specific comment in a pull request. Args: repo: str - The repository the user entered, if he did. pr_id: str - an id to a specific pull request to add a comment to. comment_id: str - an id to a specific comment to delete. Returns: a Response object. """ url_suffix = f"/repositories/{self.workspace}/{repo}/pullrequests/{pr_id}/comments/{comment_id}" return self._http_request(method="DELETE", url_suffix=url_suffix, resp_type="response") def workspace_member_list_request(self, page: int, page_size: int) -> dict: """Gets a list of the members in the workspace. Args: page: int - The specific result's page. page_size: int - The number of wanted results in a results page. Returns: A response object in a form of a dictionary. """ params = {"page": page, "pagelen": page_size} url_suffix = f"/workspaces/{self.workspace}/members" return self._http_request(method="GET", url_suffix=url_suffix, params=params) def get_exception_message(e: DemistoException) -> dict: """extract the dictionary with the message about the exception. Args: e: DemistoException - the exception string. Returns: A json object containing the error message. """ message_arr = e.message.split("\n") m_json = json.loads(message_arr[1]) m_json["message_arr"] = message_arr[0] return m_json def check_pagination(client: Client, response: dict, limit: int) -> List: """Check if pagination is needed. Args: client: A Bitbucket client. response: A response from the API call. limit: A limit to the list. Returns: An array of all the relevant results. """ arr: List[dict] = response.get("values", []) is_next = response.get("next", None) pagelen = response.get("pagelen", 50) if is_next and limit > int(pagelen): return get_paged_results(client, response, limit) else: return arr def get_paged_results(client: Client, response: dict, limit: int) -> List: """Uses pagination and returns a list of results. Args: client: A Bitbucket client. response: A response from the API call. limit: A limit to the list Returns: Returns a list of results through pagination.. """ results = [] arr: List[dict] = response.get("values", []) is_next = response.get("next", None) while response: results += arr limit = limit - len(arr) if limit > 0 and is_next: response = client.get_full_url(full_url=is_next) is_next = response.get("next", None) arr = response.get("values", []) if len(arr) > limit: arr = arr[:limit] else: return results return results def create_pull_request_body( title: str, source_branch: str, destination_branch: str, reviewer_id: str, description: str, close_source_branch: str ) -> dict: """Creates a body for the pull request commands. Args: title: the title of the pull request. source_branch: the source branch in Bitbucket. destination_branch: the destination branch in Bitbucket. reviewer_id: a list of account_id of the people who should make a review to the pull request. description: the description of the pull request. close_source_branch: should the branch close after the merging of the pull request. Returns: A dictionary - a body to the pull request commands. """ body = {} if title: body["title"] = title if source_branch: body["source"] = {"branch": {"name": source_branch}} # type: ignore[assignment] if destination_branch: body["destination"] = {"branch": {"name": destination_branch}} # type: ignore[assignment] if reviewer_id: reviewers_arr = reviewer_id.split(",") account_id_list = [] for id in reviewers_arr: dict = {"account_id": id} account_id_list.append(dict) body["reviewers"] = account_id_list # type: ignore[assignment] if description: body["description"] = description if close_source_branch: body["close_source_branch"] = argToBoolean(close_source_branch) return body def branch_partial_result(response: dict) -> dict: """Creates a limited result for the branch commands. Args: response: the response from the Bitbucket API. Returns: A dictionary - a limited result to the branch commands. """ return { "name": response.get("name"), "target": { "hash": response.get("target", {}).get("hash"), "date": response.get("target", {}).get("date"), "author": { "user": { "display_name": response.get("target", {}).get("author", {}).get("user", {}).get("display_name"), "account_id": response.get("target", {}).get("author", {}).get("user", {}).get("account_id"), } }, }, } def issue_partial_result(response: dict) -> dict: """Creates a limited result for the issue commands. Args: response: the response from the Bitbucket API. Returns: A dictionary - a limited result to the issue commands. """ return { "id": response.get("id"), "title": response.get("title"), "content": {"raw": response.get("content", {}).get("raw")}, "reporter": { "display_name": response.get("reporter", {}).get("display_name"), "account_id": response.get("reporter", {}).get("account_id"), }, "assignee": { "display_name": response.get("assignee", {}).get("display_name") if response.get("assignee") else "", "account_id": response.get("assignee", {}).get("account_id") if response.get("assignee") else "", }, "created_on": response.get("created_on"), "updated_on": response.get("updated_on"), "state": response.get("state"), "kind": response.get("kind"), "priority": response.get("priority"), } def pull_request_partial_result(response: dict) -> dict: """Creates a limited result for the PR commands. Args: response: the response from the Bitbucket API. Returns: A dictionary - a limited result to the PR commands. """ return { "id": response.get("id"), "title": response.get("title"), "description": response.get("description"), "state": response.get("state"), "author": { "display_name": response.get("author", {}).get("display_name"), "account_id": response.get("author", {}).get("account_id"), }, "created_on": response.get("created_on"), "updated_on": response.get("updated_on"), "destination": {"branch": {"name": response.get("destination", {}).get("branch", {}).get("name")}}, "source": {"branch": {"name": response.get("source", {}).get("branch", {}).get("name")}}, } def comment_partial_result(response: dict, pr_or_issue: str) -> dict: """Creates a limited result for the comment commands. Args: response: the response from the Bitbucket API. pr_or_issue: an indicator that will tell if this is an issue comment or a pr comment Returns: A dictionary - a limited result to the comment commands. """ result = { "id": response.get("id"), "created_on": response.get("created_on"), "content": {"raw": response.get("content", {}).get("raw")}, "user": { "display_name": response.get("user", {}).get("display_name"), "account_id": response.get("user", {}).get("account_id"), }, } if pr_or_issue == "pr": result["pullrequest"] = { "id": response.get("pullrequest", {}).get("id"), "title": response.get("pullrequest", {}).get("title"), } else: result["issue"] = { "id": response.get("issue", {}).get("id"), "title": response.get("issue", {}).get("title"), } return result """ COMMAND FUNCTIONS """ def test_module(client: Client) -> str: """Test the connection to bitbucket. Args: client: A Bitbucket client. Returns: 'ok' if the connection was successful, else throws exception. """ try: client.get_project_list_request(page=1, page_size=1) return "ok" except DemistoException as e: raise Exception(e.message) def project_list_command(client: Client, args: dict) -> CommandResults: """Returns a list of all the projects in Bitbucket. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a success message, in case of a successful action. """ limit = arg_to_number(args.get("limit", 50)) or 50 project_key = args.get("project_key") page = arg_to_number(args.get("page", 1)) or 1 page_size = min(limit, 100) partial_response = argToBoolean(args.get("partial_response", True)) response = client.get_project_list_request(page, page_size, project_key) if project_key: results = [response] readable_name = f"The information about project {project_key.upper()}" else: results = check_pagination(client, response, limit) readable_name = f"List of projects in {client.workspace}" human_readable = [] for value in results: d = { "Key": value.get("key"), "Name": value.get("name"), "Description": value.get("description"), "IsPrivate": value.get("is_private"), } human_readable.append(d) headers = ["Key", "Name", "Description", "IsPrivate"] readable_output = tableToMarkdown(name=readable_name, t=human_readable, removeNull=True, headers=headers) outputs = results if partial_response: outputs = [] for result in results: temp = { "key": result.get("key"), "uuid": result.get("uuid"), "is_private": result.get("is_private"), "name": result.get("name"), "description": result.get("description"), "created_on": result.get("created_on"), "updated_on": result.get("updated_on"), "owner": { "display_name": result.get("owner", {}).get("display_name"), "account_id": result.get("owner", {}).get("account_id"), }, "workspace": {"name": result.get("workspace", {}).get("name"), "slug": result.get("workspace", {}).get("slug")}, } outputs.append(temp) return CommandResults( readable_output=readable_output, outputs_prefix="Bitbucket.Project", outputs=outputs, raw_response=results, outputs_key_field="key", ) def open_branch_list_command(client: Client, args: dict) -> CommandResults: """Returns a list of all the open branches in Bitbucket. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with the list of the branches. """ limit = arg_to_number(args.get("limit", 50)) or 50 repo = args.get("repo", client.repository) page = arg_to_number(args.get("page", 1)) or 1 page_size = min(limit, 100) partial_response = argToBoolean(args.get("partial_response", True)) response = client.get_open_branch_list_request(repo, page, page_size) results = check_pagination(client, response, limit) human_readable = [] for value in results: d = { "Name": value.get("name"), "LastCommitHash": value.get("target").get("hash"), "LastCommitCreatedAt": value.get("target").get("date"), } user = value.get("target").get("author").get("user") if user: d["LastCommitCreatedBy"] = user.get("display_name") else: d["LastCommitCreatedBy"] = value.get("target").get("author").get("raw") human_readable.append(d) headers = ["Name", "LastCommitCreatedBy", "LastCommitCreatedAt", "LastCommitHash"] readable_output = tableToMarkdown(name="Open Branches", t=human_readable, removeNull=True, headers=headers) outputs = results if partial_response: outputs = [] for result in results: temp = branch_partial_result(result) outputs.append(temp) return CommandResults( readable_output=readable_output, outputs_prefix="Bitbucket.Branch", outputs=outputs, raw_response=results, outputs_key_field="name", ) def branch_get_command(client: Client, args: dict) -> CommandResults: """Returns the information on a given branch in Bitbucket. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with the information about the branch. """ repo = args.get("repo", client.repository) branch_name = args.get("branch_name", "") partial_response = argToBoolean(args.get("partial_response", True)) response: dict = client.get_branch_request(branch_name, repo) human_readable = { "Name": response.get("name"), "LastCommitHash": response.get("target", {}).get("hash"), "LastCommitCreatedBy": response.get("target", {}).get("author", {}).get("user", {}).get("display_name"), "LastCommitCreatedAt": response.get("target", {}).get("date"), } headers = ["Name", "LastCommitCreatedBy", "LastCommitCreatedAt", "LastCommitHash"] readable_output = tableToMarkdown( name=f"Information about the branch: {branch_name}", t=human_readable, removeNull=True, headers=headers ) outputs = response if partial_response: outputs = branch_partial_result(response) return CommandResults( readable_output=readable_output, outputs_prefix="Bitbucket.Branch", outputs=outputs, raw_response=response, outputs_key_field="name", ) def branch_create_command(client: Client, args: dict) -> CommandResults: """creates a branch in Bitbucket. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a success message, in case of a successful action. """ repo = args.get("repo", client.repository) name = args.get("name", "") target_branch = args.get("target_branch", "") partial_response = argToBoolean(args.get("partial_response", True)) response = client.branch_create_request(name, target_branch, repo) outputs = response if partial_response: outputs = branch_partial_result(response) return CommandResults( readable_output=f'The branch "{name}" was created successfully.', outputs_prefix="Bitbucket.Branch", outputs=outputs, raw_response=response, outputs_key_field="name", ) def branch_delete_command(client: Client, args: dict) -> CommandResults: """Deletes a branch in Bitbucket. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a success message, in case of a successful action. """ repo = args.get("repo", client.repository) branch_name = args.get("branch_name", "") try: client.branch_delete_request(branch_name, repo) return CommandResults(readable_output=f"The branch {branch_name} was deleted successfully.") except DemistoException as e: m_json = get_exception_message(e) raise Exception(f'{m_json.get("message_arr")} , branch "{m_json.get("error", {}).get("message")}"') def commit_create_command(client: Client, args: dict) -> CommandResults: """creates a commit in Bitbucket. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a success message, in case of a successful action. """ repo = args.get("repo", client.repository) message = args.get("message", "") branch = args.get("branch", "") file_name = args.get("file_name", None) file_content = args.get("file_content", None) entry_id = args.get("entry_id", None) author_name = args.get("author_name", None) author_email = args.get("author_email", None) if not file_name and not entry_id: raise Exception('You must specify either the "file_name" and "file_content" or the "entry_id" of the file.') if file_name and entry_id: raise Exception('You must specify the "file_name" and "file_content" or the "entry_id" of the file, not both.') elif entry_id: file_path = demisto.getFilePath(entry_id).get("path") file_name = demisto.getFilePath(entry_id).get("name") with open(file_path, "rb") as f: file_content = f.read() body = {"message": message, "branch": branch, file_name: file_content} if author_name and author_email: body["author"] = f"{author_name} <{author_email}>" elif (author_name and not author_email) or (not author_name and author_email): raise Exception("Both author email and author name should be given") client.commit_create_request(body, repo) return CommandResults(readable_output="The commit was created successfully.") def commit_list_command(client: Client, args: dict) -> CommandResults: """Returns a list of all the commits according to the given params. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with the list of commits. """ repo = args.get("repo", client.repository) file_path = args.get("file_path", None) excluded_branches = argToList(args.get("excluded_branches", None)) included_branches = argToList(args.get("included_branches", None)) limit = arg_to_number(args.get("limit")) or 50 page = arg_to_number(args.get("page", 1)) or 1 partial_response = argToBoolean(args.get("partial_response")) page_size = min(limit, 100) response = client.commit_list_request(repo, file_path, page, page_size, included_branches, excluded_branches) results = check_pagination(client, response, limit) human_readable = [] for value in results: d = { "Author": value.get("author").get("raw"), "Commit": value.get("hash"), "Message": value.get("message"), "CreatedAt": value.get("date"), } human_readable.append(d) headers = ["Author", "Commit", "Message", "CreatedAt"] readable_output = tableToMarkdown(name="The list of commits", t=human_readable, removeNull=True, headers=headers) outputs = results if partial_response: outputs = [] for res in results: temp = { "hash": res.get("hash"), "date": res.get("date"), "author": { "user": { "display_name": res.get("author", {}).get("user", {}).get("display_name"), "account_id": res.get("author", {}).get("user", {}).get("account_id"), } }, "message": res.get("message"), } outputs.append(temp) return CommandResults( readable_output=readable_output, outputs_prefix="Bitbucket.Commit", outputs=outputs, raw_response=results, outputs_key_field="hash", ) def file_delete_command(client: Client, args: dict) -> CommandResults: """Deletes a file in Bitbucket. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a success message, in case of a successful action. """ repo = args.get("repo", client.repository) message = args.get("message", "") branch = args.get("branch", "") file_name = args.get("file_name", "") author_name = args.get("author_name", None) author_email = args.get("author_email", None) body = {"message": message, "branch": branch, "files": file_name} if author_name and author_email: body["author"] = f"{author_name} <{author_email}>" elif (author_name and not author_email) or (not author_name and author_email): raise Exception("Both author email and author name should be given") client.file_delete_request(body, repo) return CommandResults(readable_output="The file was deleted successfully.") def raw_file_get_command(client: Client, args: dict) -> List[CommandResults]: """Returns the content of a given file. Args: client: A Bitbucket client. args: Demisto args. Returns: A list containing a CommandResult object and a fileResult object. """ repo = args.get("repo", client.repository) file_path = args.get("file_path", "") branch = args.get("branch", None) including_list = [] if branch: including_list = [branch] try: commit_list = client.commit_list_request( repo=repo, file_path=file_path, page=1, page_size=100, included_list=including_list ) except DemistoException as e: m_json = get_exception_message(e) raise Exception(f'{m_json.get("message_arr")} , branch {m_json.get("data", {}).get("shas")}') values: List = commit_list.get("values", []) if len(values) == 0: raise Exception(f'The file "{file_path}" does not exist') commit_hash = values[0].get("hash") response = client.raw_file_get_request(repo, file_path, commit_hash) output = {"file_path": file_path, "file_content": response.text} file_ = fileResult(filename=file_path, data=response.text, file_type=entryTypes["entryInfoFile"]) return [ CommandResults( readable_output=f'The content of the file "{file_path}" is: {response.text}', outputs_prefix="Bitbucket.RawFile", outputs=output, ), file_, ] def issue_create_command(client: Client, args: dict) -> CommandResults: """creates an issue in Bitbucket. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a success message, in case of a successful action. """ repo = args.get("repo", client.repository) title = args.get("title", "") state = args.get("state", "new") issue_type = args.get("type", "bug") priority = args.get("priority", "major") content = args.get("content", None) assignee_id = args.get("assignee_id", None) assignee_user_name = args.get("assignee_user_name", None) partial_response = argToBoolean(args.get("partial_response", True)) body = {"title": title, "state": state, "kind": issue_type, "priority": priority} if content: body["content"] = {"raw": content} if assignee_id: body["assignee"] = {"account_id": assignee_id, "username": assignee_user_name} response = client.issue_create_request(repo, body) outputs = response if partial_response: outputs = issue_partial_result(response) return CommandResults( readable_output=f'The issue "{title}" was created successfully', outputs_prefix="Bitbucket.Issue", outputs=outputs, raw_response=response, outputs_key_field="id", ) def issue_list_command(client: Client, args: dict) -> CommandResults: """Retrieves issues from Bitbucket. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with the array of issues as output. """ repo = args.get("repo", client.repository) issue_id = args.get("issue_id", None) limit = arg_to_number(args.get("limit", 50)) or 50 page = arg_to_number(args.get("page", 1)) or 1 page_size = min(limit, 100) partial_response = argToBoolean(args.get("partial_response", True)) response = client.issue_list_request(repo, page, page_size, issue_id) if issue_id: results = [response] hr_title = f'The information about issue "{issue_id}"' else: results = check_pagination(client, response, limit) hr_title = "Issues List" human_readable = [] for value in results: d = { "Id": value.get("id"), "Title": value.get("title"), "Type": value.get("kind"), "Priority": value.get("priority"), "Status": value.get("state"), "Votes": value.get("votes"), "CreatedAt": value.get("created_on"), "UpdatedAt": value.get("updated_on"), } assignee = value.get("assignee", {}) d["assignee"] = assignee.get("display_name") if assignee else None human_readable.append(d) headers = ["Id", "Title", "Type", "Priority", "Status", "Votes", "Assignee", "CreatedAt", "UpdatedAt"] readable_output = tableToMarkdown(name=hr_title, t=human_readable, removeNull=True, headers=headers) outputs = results if partial_response: outputs = [] for res in results: temp = issue_partial_result(res) outputs.append(temp) return CommandResults( readable_output=readable_output, outputs_prefix="Bitbucket.Issue", outputs=outputs, raw_response=results, outputs_key_field="id", ) def issue_update_command(client: Client, args: dict) -> CommandResults: """Updates an issue from Bitbucket. If a certain argument isn't given, don't update it on the issue. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a dictionary contains the updated issue. """ repo = args.get("repo", client.repository) issue_id = args.get("issue_id", "") title = args.get("title", "") state = args.get("state") issue_type = args.get("type") priority = args.get("priority") content = args.get("content", None) assignee_id = args.get("assignee_id", None) assignee_user_name = args.get("assignee_user_name", None) partial_response = argToBoolean(args.get("partial_response", True)) body = {"title": title} if state: body["state"] = state if issue_type: body["kind"] = issue_type if priority: body["priority"] = priority if content: body["content"] = {"raw": content} if assignee_id: body["assignee"] = {"account_id": assignee_id, "username": assignee_user_name} response = client.issue_update_request(repo, body, issue_id) outputs = response if partial_response: outputs = issue_partial_result(response) return CommandResults( readable_output=f'The issue with id "{issue_id}" was updated successfully', outputs_prefix="Bitbucket.Issue", outputs=outputs, raw_response=response, outputs_key_field="id", ) def pull_request_create_command(client: Client, args: dict) -> CommandResults: """Creates a pull request in Bitbucket. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a dictionary contains information about the new pull request. """ repo = args.get("repo", client.repository) title = args.get("title", "") source_branch = args.get("source_branch", "") destination_branch = args.get("destination_branch", "") reviewer_id = args.get("reviewer_id", None) description = args.get("description", None) close_source_branch = args.get("close_source_branch", None) partial_response = argToBoolean(args.get("partial_response", True)) body = create_pull_request_body(title, source_branch, destination_branch, reviewer_id, description, close_source_branch) response = client.pull_request_create_request(repo, body) outputs = response if partial_response: outputs = pull_request_partial_result(response) return CommandResults( readable_output="The pull request was created successfully", outputs_prefix="Bitbucket.PullRequest", outputs=outputs, raw_response=response, outputs_key_field="id", ) def pull_request_update_command(client: Client, args: dict) -> CommandResults: """Updates a pull request from Bitbucket. If a certain argument isn't given, don't update it on the issue. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a dictionary contains information about the updated pull request. """ repo = args.get("repo", client.repository) pull_request_id = args.get("pull_request_id", "") title = args.get("title", None) source_branch = args.get("source_branch", None) destination_branch = args.get("destination_branch", None) reviewer_id = args.get("reviewer_id", None) description = args.get("description", None) close_source_branch = args.get("close_source_branch", None) partial_response = argToBoolean(args.get("partial_response", True)) body = create_pull_request_body(title, source_branch, destination_branch, reviewer_id, description, close_source_branch) response = client.pull_request_update_request(repo, body, pull_request_id) outputs = response if partial_response: outputs = pull_request_partial_result(response) return CommandResults( readable_output=f"The pull request {pull_request_id} was updated successfully", outputs_prefix="Bitbucket.PullRequest", outputs=outputs, raw_response=response, outputs_key_field="id", ) def pull_request_list_command(client: Client, args: dict) -> CommandResults: """Returns a list of pull requests. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a dictionary contains a list of pull request. If a state is provided than the list will contain only PR with the wanted status. If a state is not provided, by default a list of the open pull requests will return. """ repo = args.get("repo", client.repository) pull_request_id = args.get("pull_request_id", None) state = args.get("state", None) limit = arg_to_number(args.get("limit", 50)) or 50 page = arg_to_number(args.get("page", 1)) or 1 page_size = min(limit, 50) partial_response = argToBoolean(args.get("partial_response", True)) response = client.pull_request_list_request(repo, pull_request_id, page, page_size, state) if pull_request_id: results = [response] hr_title = f'The information about pull request "{pull_request_id}"' else: results = check_pagination(client, response, limit) hr_title = "List of the pull requests" human_readable = [] for value in results: d = { "Id": value.get("id"), "Title": value.get("title"), "Description": value.get("description"), "SourceBranch": value.get("source", {}).get("branch", {}).get("name"), "DestinationBranch": value.get("destination", {}).get("branch", {}).get("name"), "State": value.get("state"), "CreatedBy": value.get("author", {}).get("display_name"), "CreatedAt": value.get("created_on"), "UpdatedAt": value.get("updated_on"), } human_readable.append(d) headers = ["Id", "Title", "Description", "SourceBranch", "DestinationBranch", "State", "CreatedBy", "CreatedAt", "UpdatedAt"] readable_output = tableToMarkdown(name=hr_title, t=human_readable, removeNull=True, headers=headers) outputs = results if partial_response: outputs = [] for res in results: temp = pull_request_partial_result(res) outputs.append(temp) return CommandResults( readable_output=readable_output, outputs_prefix="Bitbucket.PullRequest", outputs=outputs, raw_response=results, outputs_key_field="id", ) def issue_comment_create_command(client: Client, args: dict) -> CommandResults: """Creates a comment on a specific issue in Bitbucket. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a success message and information about the newly created comment. """ repo = args.get("repo", client.repository) issue_id = args.get("issue_id", "") content = args.get("content", "") body = {"content": {"raw": content}} partial_response = argToBoolean(args.get("partial_response", True)) response = client.issue_comment_create_request(repo, issue_id, body) outputs = response if partial_response: outputs = comment_partial_result(response, "issue") return CommandResults( readable_output="The comment was created successfully", outputs_prefix="Bitbucket.IssueComment", outputs=outputs, raw_response=response, outputs_key_field="id", ) def issue_comment_delete_command(client: Client, args: dict) -> CommandResults: """Deletes a comment on a specific issue in Bitbucket. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a success message, in case of a successful deletion. """ repo = args.get("repo", client.repository) issue_id = args.get("issue_id", "") comment_id = args.get("comment_id", "") client.issue_comment_delete_request(repo, issue_id, comment_id) return CommandResults(readable_output="The comment was deleted successfully") def issue_comment_update_command(client: Client, args: dict) -> CommandResults: """Updates a comment on a specific issue in Bitbucket. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a success message, in case of a successful update. """ repo = args.get("repo", client.repository) issue_id = args.get("issue_id", "") comment_id = args.get("comment_id", "") content = args.get("content", "") partial_response = argToBoolean(args.get("partial_response", True)) body = {"content": {"raw": content}} response = client.issue_comment_update_request(repo, issue_id, comment_id, body) outputs = response if partial_response: outputs = comment_partial_result(response, "issue") return CommandResults( readable_output="The comment was updated successfully", outputs_prefix="Bitbucket.IssueComment", outputs=outputs, raw_response=response, outputs_key_field="id", ) def issue_comment_list_command(client: Client, args: dict) -> CommandResults: """Returns a list of comments, or a single comment if a commit_id is given, on a specific issue. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a list of the comments, or a single comment if a commit_id is given on a specific issue. """ repo = args.get("repo", client.repository) issue_id = args.get("issue_id", "") comment_id = args.get("comment_id", None) limit = arg_to_number(args.get("limit", 50)) or 50 page = arg_to_number(args.get("page", 1)) or 1 page_size = min(limit, 100) partial_response = argToBoolean(args.get("partial_response", True)) response = client.issue_comment_list_request(repo, issue_id, comment_id, page, page_size) if comment_id: results = [response] hr_title = f'The information about the comment "{comment_id}"' else: results = check_pagination(client, response, limit) hr_title = f'List of the comments on issue "{issue_id}"' human_readable = [] for value in results: d = { "Id": value.get("id"), "Content": value.get("content", {}).get("raw"), "CreatedBy": value.get("user", {}).get("display_name"), "CreatedAt": value.get("created_on"), "UpdatedAt": value.get("updated_on"), "IssueId": value.get("issue", {}).get("id"), "IssueTitle": value.get("issue", {}).get("title"), } human_readable.append(d) headers = ["Id", "Content", "CreatedBy", "CreatedAt", "UpdatedAt", "IssueId", "IssueTitle"] readable_output = tableToMarkdown(name=hr_title, t=human_readable, removeNull=True, headers=headers) outputs = results if partial_response: outputs = [] for res in results: temp = comment_partial_result(res, "issue") outputs.append(temp) return CommandResults( readable_output=readable_output, outputs_prefix="Bitbucket.IssueComment", outputs=outputs, raw_response=results, outputs_key_field="id", ) def pull_request_comment_create_command(client: Client, args: dict) -> CommandResults: """Creates a comment in a pull request. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a success message, in case of a successful creation of a comment. """ repo = args.get("repo", client.repository) pr_id = args.get("pull_request_id", "") content = args.get("content", "") partial_response = argToBoolean(args.get("partial_response", True)) body = {"content": {"raw": content}} response = client.pull_request_comment_create_request(repo, pr_id, body) outputs = response if partial_response: outputs = comment_partial_result(response, "pr") return CommandResults( readable_output="The comment was created successfully", outputs_prefix="Bitbucket.PullRequestComment", outputs=outputs, raw_response=response, outputs_key_field="id", ) def pull_request_comment_list_command(client: Client, args: dict) -> CommandResults: """Returns a list of comments of a specific pull request, or a single comment on a specific pull request, if a comment_id is given. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a list of the comments of a pull request or a single comment on a specific pull request, if a comment_id is given. """ repo = args.get("repo", client.repository) pr_id = args.get("pull_request_id", "") comment_id = args.get("comment_id", None) limit = arg_to_number(args.get("limit", 50)) or 50 page = arg_to_number(args.get("page", 1)) or 1 page_size = min(limit, 100) partial_response = argToBoolean(args.get("partial_response", True)) response = client.pull_request_comment_list_request(repo, pr_id, page, page_size, comment_id) if comment_id: results = [response] hr_title = f'The information about the comment "{comment_id}"' else: results = check_pagination(client, response, limit) hr_title = f'List of the comments on pull request "{pr_id}"' human_readable = [] # After a comment on a pull request is deleted it will still appear on the response from the api. # Those comments can be recognized when their 'deleted' value is True. # In order not to show the deleted comments, they are saved in records_to_delete array, and then are deleted. records_to_delete = [] for value in results: if not value.get("deleted"): d = { "Id": value.get("id"), "Content": value.get("content", {}).get("raw"), "CreatedBy": value.get("user", {}).get("display_name"), "CreatedAt": value.get("created_on"), "UpdatedAt": value.get("updated_on"), "PullRequestId": value.get("pullrequest", {}).get("id"), "PullRequestTitle": value.get("pullrequest", {}).get("title"), } human_readable.append(d) else: records_to_delete.append(value) if len(records_to_delete) > 0: for item in records_to_delete: results.remove(item) headers = ["Id", "Content", "CreatedBy", "CreatedAt", "UpdatedAt", "PullRequestId", "PullRequestTitle"] readable_output = tableToMarkdown(name=hr_title, t=human_readable, removeNull=True, headers=headers) outputs = results if partial_response: outputs = [] for res in results: temp = comment_partial_result(res, "pr") outputs.append(temp) return CommandResults( readable_output=readable_output, outputs_prefix="Bitbucket.PullRequestComment", outputs=outputs, raw_response=results, outputs_key_field="id", ) def pull_request_comment_update_command(client: Client, args: dict) -> CommandResults: """Updates a comment in a pull request. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a success message. """ repo = args.get("repo", client.repository) pr_id = args.get("pull_request_id", "") comment_id = args.get("comment_id", "") content = args.get("content") partial_response = argToBoolean(args.get("partial_response", True)) body = {"content": {"raw": content}} response = client.pull_request_comment_update_request(repo, pr_id, body, comment_id) outputs = response if partial_response: outputs = comment_partial_result(response, "pr") return CommandResults( readable_output="The comment was updated successfully", outputs_prefix="Bitbucket.PullRequestComment", outputs=outputs, raw_response=response, outputs_key_field="id", ) def pull_request_comment_delete_command(client: Client, args: dict) -> CommandResults: """Deletes a comment in a pull request. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with a success message. """ repo = args.get("repo", client.repository) pr_id = args.get("pull_request_id", "") comment_id = args.get("comment_id", "") try: client.pull_request_comment_delete_request(repo, pr_id, comment_id) return CommandResults(readable_output="The comment was deleted successfully.") except DemistoException as e: raise Exception(f"Could not delete the comment in the pull request - {e.message}") def workspace_member_list_command(client: Client, args: dict) -> CommandResults: """Returns a list of all the members in the requested workspace. Args: client: A Bitbucket client. args: Demisto args. Returns: A CommandResult object with the requested list. """ limit = arg_to_number(args.get("limit", 50)) or 50 page = arg_to_number(args.get("page", 1)) or 1 page_size = min(limit, 100) partial_response = argToBoolean(args.get("partial_response", True)) response = client.workspace_member_list_request(page, page_size) results = check_pagination(client, response, limit) human_readable = [] for value in results: d = {"Name": value.get("user").get("display_name"), "AccountId": value.get("user").get("account_id")} human_readable.append(d) headers = ["Name", "AccountId"] readable_output = tableToMarkdown( name="The list of all the workspace members", t=human_readable, removeNull=True, headers=headers ) outputs = results if partial_response: outputs = [] for res in results: temp = { "user": { "display_name": res.get("user", {}).get("display_name"), "account_id": res.get("user", {}).get("account_id"), }, "workspace": {"name": res.get("workspace", {}).get("name"), "slug": res.get("workspace", {}).get("slug")}, } outputs.append(temp) return CommandResults( readable_output=readable_output, outputs_prefix="Bitbucket.WorkspaceMember", outputs=outputs, raw_response=results, outputs_key_field="user.account_id", ) """ MAIN FUNCTION """ def main() -> None: # pragma: no cover params = demisto.params() workspace = params.get("workspace") server_url = params.get("server_url") user_name = params.get("credentials", {}).get("identifier", "") api_token = params.get("credentials", {}).get("password", "") client_id = params.get("client_credentials", {}).get("identifier", "") client_secret = params.get("client_credentials", {}).get("password", "") repository = params.get("repository", "") verify_certificate = not params.get("insecure", False) proxy = params.get("proxy", False) basic_auth_given = bool(user_name or api_token) oauth_given = bool(client_id or client_secret) use_basic_auth = bool(user_name and api_token) use_oauth = bool(client_id and client_secret) if basic_auth_given and oauth_given: return_error( "Both authentication methods were configured. Please configure only one method, either " "User Name + API Token, or Client ID + Client Secret." ) if not basic_auth_given and not oauth_given: return_error( "No authentication method was configured. Please configure either User Name + API Token, " "or Client ID + Client Secret." ) if basic_auth_given and not use_basic_auth: missing_field = "API Token" if user_name else "User Name" return_error(f"The API Token authentication method is missing the {missing_field}. Please configure it.") if oauth_given and not use_oauth: missing_field = "Client Secret" if client_id else "Client ID" return_error(f"The OAuth 2.0 authentication method is missing the {missing_field}. Please configure it.") demisto.debug(f"Command being called is {demisto.command()}") try: client = Client( workspace=workspace, server_url=server_url, auth=(user_name, api_token) if use_basic_auth else None, proxy=proxy, verify=verify_certificate, repository=repository, client_id=client_id if use_oauth else "", client_secret=client_secret if use_oauth else "", ) if demisto.command() == "test-module": # This is the call made when pressing the integration Test button. str_result: str = test_module(client) return_results(str_result) elif demisto.command() == "bitbucket-project-list": result: CommandResults = project_list_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-open-branch-list": result = open_branch_list_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-branch-get": result = branch_get_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-branch-create": result = branch_create_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-branch-delete": result = branch_delete_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-commit-create": result = commit_create_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-commit-list": result = commit_list_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-file-delete": result = file_delete_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-raw-file-get": result_list = raw_file_get_command(client, demisto.args()) return_results(result_list) elif demisto.command() == "bitbucket-issue-create": result = issue_create_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-issue-list": result = issue_list_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-issue-update": result = issue_update_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-pull-request-create": result = pull_request_create_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-pull-request-update": result = pull_request_update_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-pull-request-list": result = pull_request_list_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-issue-comment-create": result = issue_comment_create_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-issue-comment-delete": result = issue_comment_delete_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-issue-comment-update": result = issue_comment_update_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-issue-comment-list": result = issue_comment_list_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-pull-request-comment-create": result = pull_request_comment_create_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-pull-request-comment-list": result = pull_request_comment_list_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-pull-request-comment-update": result = pull_request_comment_update_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-pull-request-comment-delete": result = pull_request_comment_delete_command(client, demisto.args()) return_results(result) elif demisto.command() == "bitbucket-workspace-member-list": result = workspace_member_list_command(client, demisto.args()) return_results(result) else: raise NotImplementedError("This command is not implemented yet.") # Log exceptions and return errors except Exception as e: return_error(f"Failed to execute {demisto.command()} command.\nError:\n{e!s}") """ ENTRY POINT """ if __name__ in ("__main__", "__builtin__", "builtins"): main()