diff --git a/docs/content/docs/reference/components/bitbucket.mdx b/docs/content/docs/reference/components/bitbucket.mdx
new file mode 100644
index 0000000000..edc4939824
--- /dev/null
+++ b/docs/content/docs/reference/components/bitbucket.mdx
@@ -0,0 +1,532 @@
+---
+title: "Bitbucket"
+description: "Elevate your software delivery from planning to production and beyond, with built-in AI, CI/CD, and a best-in-class Jira integration."
+---
+
+
+Categories: Project Management
+
+
+Type: bitbucket/v1
+
+
+
+
+
+## Connections
+
+Version: 1
+
+
+### API Key Authorization
+
+#### Properties
+
+| Name | Label | Type | Description | Required |
+|:---------------:|:--------------:|:------------:|:-------------------:|:--------:|
+| username | Username | STRING | `Email address of your Bitbucket account.` | true |
+| password | API Key | STRING | `API key creation steps in documentation.` | true |
+
+
+
+
+
+
+
+
+
+## Actions
+
+
+### Create Repository
+Name: createRepository
+
+`Creates a repository in a selected workspace.`
+
+#### Properties
+
+| Name | Label | Type | Description | Required |
+|:---------------:|:--------------:|:------------:|:-------------------:|:--------:|
+| workspace | Workspace | STRING | `Workspace in which repository will be created.` | true |
+| repo_slug | Repository Slug | STRING | `Repository slug that is used as identifier for the repository.` | true |
+| name | Name | STRING | `The name of the repository.` | true |
+| scm | Source Control Management. | STRING Options
git | `Specifies the version control system that your repository will use.` | true |
+| project | Project | OBJECT Properties
{STRING\(key)} | `Parent project of the repository.` | true |
+| is_private | Is Private | BOOLEAN Options
true, false | `Whether the repository is private or not.` | false |
+| description | Description | STRING | `The description of repository.` | false |
+| fork_policy | Fork Policy | STRING Options
allow_forks, no_public_forks, no_forks | `Specifies the fork policy for the repository.` | false |
+| language | Language | STRING | `Main programming language of the repository` | false |
+
+#### Example JSON Structure
+```json
+{
+ "label" : "Create Repository",
+ "name" : "createRepository",
+ "parameters" : {
+ "workspace" : "",
+ "repo_slug" : "",
+ "name" : "",
+ "scm" : "",
+ "project" : {
+ "key" : ""
+ },
+ "is_private" : false,
+ "description" : "",
+ "fork_policy" : "",
+ "language" : ""
+ },
+ "type" : "bitbucket/v1/createRepository"
+}
+```
+
+#### Output
+
+
+
+Type: OBJECT
+
+
+#### Properties
+
+| Name | Type | Description |
+|:------------:|:------------:|:-------------------:|
+| type | STRING | The type of the object (usually "repository"). |
+| links | OBJECT Properties
{{STRING\(href), STRING\(name)}\(self), {STRING\(href), STRING\(name)}\(html), {STRING\(href), STRING\(name)}\(avatar), {STRING\(href), STRING\(name)}\(pullrequests), {STRING\(href), STRING\(name)}\(commits), {STRING\(href), STRING\(name)}\(forks), {STRING\(href), STRING\(name)}\(watchers), {STRING\(href), STRING\(name)}\(downloads), [{STRING\(href), STRING\(name)}]\(clone), {STRING\(href), STRING\(name)}\(hooks)} | A collection of relevant resource links. |
+| uuid | STRING | The globally unique identifier for the repository. |
+| full_name | STRING | The full name of the repository (workspace/repo_slug). |
+| is_private | BOOLEAN Options
true, false | Indicates whether the repository is private. |
+| scm | STRING | The source control system (only "git" is supported). |
+| owner | OBJECT Properties
{STRING\(type)} | The user or team that owns the repository. |
+| name | STRING | The display name of the repository. |
+| description | STRING | A short description of the repository. |
+| created_on | STRING | Timestamp of when the repository was created. |
+| updated_on | STRING | Timestamp of the last repository update. |
+| size | INTEGER | Total size of the repository in bytes. |
+| language | STRING | The primary programming language of the repository. |
+| has_issues | BOOLEAN Options
true, false | Indicates whether the issue tracker is enabled. |
+| has_wiki | BOOLEAN Options
true, false | Indicates whether the wiki is enabled. |
+| fork_policy | STRING | Repository fork policy. |
+| project | OBJECT Properties
{STRING\(type)} | Project that the repository belongs to. |
+| mainbranch | OBJECT Properties
{STRING\(type)} | The default branch of the repository. |
+
+
+
+
+#### Output Example
+```json
+{
+ "type" : "",
+ "links" : {
+ "self" : {
+ "href" : "",
+ "name" : ""
+ },
+ "html" : {
+ "href" : "",
+ "name" : ""
+ },
+ "avatar" : {
+ "href" : "",
+ "name" : ""
+ },
+ "pullrequests" : {
+ "href" : "",
+ "name" : ""
+ },
+ "commits" : {
+ "href" : "",
+ "name" : ""
+ },
+ "forks" : {
+ "href" : "",
+ "name" : ""
+ },
+ "watchers" : {
+ "href" : "",
+ "name" : ""
+ },
+ "downloads" : {
+ "href" : "",
+ "name" : ""
+ },
+ "clone" : [ {
+ "href" : "",
+ "name" : ""
+ } ],
+ "hooks" : {
+ "href" : "",
+ "name" : ""
+ }
+ },
+ "uuid" : "",
+ "full_name" : "",
+ "is_private" : false,
+ "scm" : "",
+ "owner" : {
+ "type" : ""
+ },
+ "name" : "",
+ "description" : "",
+ "created_on" : "",
+ "updated_on" : "",
+ "size" : 1,
+ "language" : "",
+ "has_issues" : false,
+ "has_wiki" : false,
+ "fork_policy" : "",
+ "project" : {
+ "type" : ""
+ },
+ "mainbranch" : {
+ "type" : ""
+ }
+}
+```
+
+
+### Create Project
+Name: createProject
+
+`Creates a project in selected workspace.`
+
+#### Properties
+
+| Name | Label | Type | Description | Required |
+|:---------------:|:--------------:|:------------:|:-------------------:|:--------:|
+| workspace | Workspace | STRING | `Workspace where the project will be added.` | true |
+| name | Name | STRING | `The name of the project.` | true |
+| key | Key | STRING | `Key of the project (eg. AT, for a project named Atlassian). Project keys must start with a letter and may only consist of ASCII letters, numbers and underscores (A-Z, a-z, 0-9, _).` | true |
+| description | Description | STRING | `The description of project.` | false |
+| is_private | Is Private | BOOLEAN Options
true, false | `Whether the project is private or not.` | false |
+
+#### Example JSON Structure
+```json
+{
+ "label" : "Create Project",
+ "name" : "createProject",
+ "parameters" : {
+ "workspace" : "",
+ "name" : "",
+ "key" : "",
+ "description" : "",
+ "is_private" : false
+ },
+ "type" : "bitbucket/v1/createProject"
+}
+```
+
+#### Output
+
+
+
+Type: OBJECT
+
+
+#### Properties
+
+| Name | Type | Description |
+|:------------:|:------------:|:-------------------:|
+| metrics | OBJECT Properties
{INTEGER\(org_keywords)} | |
+
+
+
+
+#### Output Example
+```json
+{
+ "metrics" : {
+ "org_keywords" : 1
+ }
+}
+```
+
+
+### List Projects
+Name: listProjects
+
+`Returns list of projects from workspace.`
+
+#### Properties
+
+| Name | Label | Type | Description | Required |
+|:---------------:|:--------------:|:------------:|:-------------------:|:--------:|
+| workspace | Workspace | STRING | `Workspace from which projects are to be listed.` | true |
+
+#### Example JSON Structure
+```json
+{
+ "label" : "List Projects",
+ "name" : "listProjects",
+ "parameters" : {
+ "workspace" : ""
+ },
+ "type" : "bitbucket/v1/listProjects"
+}
+```
+
+#### Output
+
+
+
+Type: ARRAY
+
+
+Items Type: OBJECT
+
+
+#### Properties
+| Name | Type | Description |
+|:------------:|:------------:|:-------------------:|
+| type | STRING | The type of the object (typically 'project'). |
+| links | OBJECT Properties
{{STRING\(href), STRING\(name)}\(html), {STRING\(href), STRING\(name)}\(avatar)} | Relevant links for the project. |
+| uuid | STRING | Globally unique identifier for the project. |
+| key | STRING | Unique key identifying the project within the workspace. |
+| owner | OBJECT Properties
{STRING\(type)} | The workspace or user who owns the project. |
+| name | STRING | Human-readable name of the project. |
+| description | STRING | Description of the project. |
+| is_private | BOOLEAN Options
true, false | Indicates whether the project is private. |
+| created_on | DATE_TIME | Timestamp of when the project was created. |
+| updated_on | DATE_TIME | Timestamp of the last update to the project. |
+| has_publicly_visible_repos | BOOLEAN Options
true, false | Indicates if the project contains any public repositories. |
+
+
+
+
+
+#### Output Example
+```json
+[ {
+ "type" : "",
+ "links" : {
+ "html" : {
+ "href" : "",
+ "name" : ""
+ },
+ "avatar" : {
+ "href" : "",
+ "name" : ""
+ }
+ },
+ "uuid" : "",
+ "key" : "",
+ "owner" : {
+ "type" : ""
+ },
+ "name" : "",
+ "description" : "",
+ "is_private" : false,
+ "created_on" : "2021-01-01T00:00:00",
+ "updated_on" : "2021-01-01T00:00:00",
+ "has_publicly_visible_repos" : false
+} ]
+```
+
+
+### List Repositories
+Name: listRepositories
+
+`Returns list of repositories from workspace.`
+
+#### Properties
+
+| Name | Label | Type | Description | Required |
+|:---------------:|:--------------:|:------------:|:-------------------:|:--------:|
+| workspace | Workspace | STRING | `Workspace from which repositories are to be listed.` | true |
+
+#### Example JSON Structure
+```json
+{
+ "label" : "List Repositories",
+ "name" : "listRepositories",
+ "parameters" : {
+ "workspace" : ""
+ },
+ "type" : "bitbucket/v1/listRepositories"
+}
+```
+
+#### Output
+
+
+
+Type: ARRAY
+
+
+Items Type: OBJECT
+
+
+#### Properties
+| Name | Type | Description |
+|:------------:|:------------:|:-------------------:|
+| type | STRING | The type of the object (usually "repository"). |
+| links | OBJECT Properties
{{STRING\(href), STRING\(name)}\(self), {STRING\(href), STRING\(name)}\(html), {STRING\(href), STRING\(name)}\(avatar), {STRING\(href), STRING\(name)}\(pullrequests), {STRING\(href), STRING\(name)}\(commits), {STRING\(href), STRING\(name)}\(forks), {STRING\(href), STRING\(name)}\(watchers), {STRING\(href), STRING\(name)}\(downloads), [{STRING\(href), STRING\(name)}]\(clone), {STRING\(href), STRING\(name)}\(hooks)} | A collection of relevant resource links. |
+| uuid | STRING | The globally unique identifier for the repository. |
+| full_name | STRING | The full name of the repository (workspace/repo_slug). |
+| is_private | BOOLEAN Options
true, false | Indicates whether the repository is private. |
+| scm | STRING | The source control system (only "git" is supported). |
+| owner | OBJECT Properties
{STRING\(type)} | The user or team that owns the repository. |
+| name | STRING | The display name of the repository. |
+| description | STRING | A short description of the repository. |
+| created_on | STRING | Timestamp of when the repository was created. |
+| updated_on | STRING | Timestamp of the last repository update. |
+| size | INTEGER | Total size of the repository in bytes. |
+| language | STRING | The primary programming language of the repository. |
+| has_issues | BOOLEAN Options
true, false | Indicates whether the issue tracker is enabled. |
+| has_wiki | BOOLEAN Options
true, false | Indicates whether the wiki is enabled. |
+| fork_policy | STRING | Repository fork policy. |
+| project | OBJECT Properties
{STRING\(type)} | Project that the repository belongs to. |
+| mainbranch | OBJECT Properties
{STRING\(type)} | The default branch of the repository. |
+
+
+
+
+
+#### Output Example
+```json
+[ {
+ "type" : "",
+ "links" : {
+ "self" : {
+ "href" : "",
+ "name" : ""
+ },
+ "html" : {
+ "href" : "",
+ "name" : ""
+ },
+ "avatar" : {
+ "href" : "",
+ "name" : ""
+ },
+ "pullrequests" : {
+ "href" : "",
+ "name" : ""
+ },
+ "commits" : {
+ "href" : "",
+ "name" : ""
+ },
+ "forks" : {
+ "href" : "",
+ "name" : ""
+ },
+ "watchers" : {
+ "href" : "",
+ "name" : ""
+ },
+ "downloads" : {
+ "href" : "",
+ "name" : ""
+ },
+ "clone" : [ {
+ "href" : "",
+ "name" : ""
+ } ],
+ "hooks" : {
+ "href" : "",
+ "name" : ""
+ }
+ },
+ "uuid" : "",
+ "full_name" : "",
+ "is_private" : false,
+ "scm" : "",
+ "owner" : {
+ "type" : ""
+ },
+ "name" : "",
+ "description" : "",
+ "created_on" : "",
+ "updated_on" : "",
+ "size" : 1,
+ "language" : "",
+ "has_issues" : false,
+ "has_wiki" : false,
+ "fork_policy" : "",
+ "project" : {
+ "type" : ""
+ },
+ "mainbranch" : {
+ "type" : ""
+ }
+} ]
+```
+
+
+
+
+## Triggers
+
+
+### Repository Push
+Name: repositoryPush
+
+`Triggers whenever a repository push occurs.`
+
+Type: DYNAMIC_WEBHOOK
+
+#### Properties
+
+| Name | Label | Type | Description | Required |
+|:---------------:|:--------------:|:------------:|:-------------------:|:--------:|
+| workspace | Workspace | STRING | `Workspace where the repository is located.` | true |
+| repository | Repository | STRING Depends On
workspace | `Repository that will be connected to the trigger.` | true |
+
+
+#### Output
+
+The output for this action is dynamic and may vary depending on the input parameters. To determine the exact structure of the output, you need to execute the action.
+
+#### JSON Example
+```json
+{
+ "label" : "Repository Push",
+ "name" : "repositoryPush",
+ "parameters" : {
+ "workspace" : "",
+ "repository" : ""
+ },
+ "type" : "bitbucket/v1/repositoryPush"
+}
+```
+
+
+
+
+
+
+# Additional instructions
+
+
+## Connection Setup
+
+### Bitbucket API Token Creation
+
+1. Go to the [Bitbucket website](https://bitbucket.org).
+2. Click **Settings**.
+3. Click **Atlassian account settings**.
+4. Click **Security**.
+5. Click **Create and manage API tokens**.
+6. Click **Create API token with scopes**.
+7. Enter name of your API token.
+8. Choose expiry date of your API token.
+9. Click **Next**.
+10. Select **Bitbucket**.
+11. Click **Next**.
+12. Find and select these scopes:
+ - admin:project:bitbucket
+ - admin:repository:bitbucket
+ - read:project:bitbucket
+ - read:repository:bitbucket
+ - read:user:bitbucket
+ - read:webhook:bitbucket
+ - read:workspace:bitbucket
+ - write:webhook:bitbucket
+13. After you have selected scopes click **Next**.
+14. Click **Create token**.
+15. Click on **Copy**. Make sure to save your newly created API token because after this step you won’t be able to view it again.
+16. Click **Close**.
+
+
+
+
diff --git a/server/apps/server-app/build.gradle.kts b/server/apps/server-app/build.gradle.kts
index 428efb88e1..aea1a19b1a 100644
--- a/server/apps/server-app/build.gradle.kts
+++ b/server/apps/server-app/build.gradle.kts
@@ -168,6 +168,7 @@ dependencies {
implementation(project(":server:libs:modules:components:bash"))
implementation(project(":server:libs:modules:components:beamer"))
implementation(project(":server:libs:modules:components:binance"))
+ implementation(project(":server:libs:modules:components:bitbucket"))
implementation(project(":server:libs:modules:components:bolna"))
implementation(project(":server:libs:modules:components:box"))
implementation(project(":server:libs:modules:components:brevo"))
diff --git a/server/ee/apps/worker-app/build.gradle.kts b/server/ee/apps/worker-app/build.gradle.kts
index 7b9e29443d..231999a9b9 100644
--- a/server/ee/apps/worker-app/build.gradle.kts
+++ b/server/ee/apps/worker-app/build.gradle.kts
@@ -110,6 +110,7 @@ dependencies {
implementation(project(":server:libs:modules:components:bash"))
implementation(project(":server:libs:modules:components:beamer"))
implementation(project(":server:libs:modules:components:binance"))
+ implementation(project(":server:libs:modules:components:bitbucket"))
implementation(project(":server:libs:modules:components:bolna"))
implementation(project(":server:libs:modules:components:box"))
implementation(project(":server:libs:modules:components:brevo"))
diff --git a/server/libs/modules/components/bitbucket/openapi.yaml b/server/libs/modules/components/bitbucket/openapi.yaml
new file mode 100644
index 0000000000..f3b935c4dd
--- /dev/null
+++ b/server/libs/modules/components/bitbucket/openapi.yaml
@@ -0,0 +1,306 @@
+---
+openapi: "3.0.1"
+info:
+ title: "Bitbucket"
+ description: "Elevate your software delivery from planning to production and beyond, with built-in AI, CI/CD, and a best-in-class Jira integration."
+ version: "v0"
+servers:
+ - url: "https://api.bitbucket.org/2.0"
+paths:
+ /repositories/{workspace}/{repo_slug}:
+ post:
+ summary: "Create Repository"
+ description: "Creates a repository in a selected workspace."
+ operationId: "createRepository"
+ x-ai-agent-tool: true
+ parameters:
+ - name: "workspace"
+ description: "Workspace in which repository will be created."
+ in: "path"
+ required: true
+ schema:
+ title: "Workspace"
+ type: "string"
+ x-dynamic-options: true
+ - name: "repo_slug"
+ description: "Repository slug that is used as identifier for the repository."
+ in: "path"
+ required: true
+ schema:
+ title: "Repository Slug"
+ type: "string"
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: "object"
+ title: "repository"
+ required:
+ - "name"
+ - "project"
+ - "scm"
+ properties:
+ name:
+ type: "string"
+ description: "The name of the repository."
+ title: "Name"
+ scm:
+ type: "string"
+ description: "Specifies the version control system that your repository will use."
+ title: "Source Control Management."
+ enum:
+ - "git"
+ project:
+ type: "object"
+ description: "Parent project of the repository."
+ title: "Project"
+ properties:
+ key:
+ type: "string"
+ description: "The key of the parent project."
+ title: "Key"
+ x-dynamic-options: true
+ x-dynamic-options-dependency:
+ - "workspace"
+ is_private:
+ type: "boolean"
+ description: "Whether the repository is private or not."
+ title: "Is Private"
+ description:
+ type: "string"
+ description: "The description of repository."
+ title: "Description"
+ fork_policy:
+ type: "string"
+ description: "Specifies the fork policy for the repository."
+ title: "Fork Policy"
+ enum:
+ - "allow_forks"
+ - "no_public_forks"
+ - "no_forks"
+ language:
+ type: "string"
+ description: "Main programming language of the repository"
+ title: "Language"
+ responses:
+ 200:
+ description: "Successful operation"
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/RepositoryObject'
+ /workspaces/{workspace}/projects:
+ post:
+ summary: "Create Project"
+ description: "Creates a project in selected workspace."
+ operationId: "createProject"
+ x-ai-agent-tool: true
+ parameters:
+ - name: "workspace"
+ description: "Workspace where the project will be added."
+ in: "path"
+ required: true
+ schema:
+ title: "Workspace"
+ type: "string"
+ x-dynamic-options: true
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: "object"
+ title: "project"
+ required:
+ - "name"
+ - "key"
+ properties:
+ name:
+ type: "string"
+ description: "The name of the project."
+ title: "Name"
+ key:
+ type: "string"
+ description: "Key of the project (eg. AT, for a project named Atlassian). Project keys must start with a letter and may only consist of ASCII letters, numbers and underscores (A-Z, a-z, 0-9, _)."
+ title: "Key"
+ description:
+ type: "string"
+ description: "The description of project."
+ title: "Description"
+ is_private:
+ type: "boolean"
+ description: "Whether the project is private or not."
+ title: "Is Private"
+ responses:
+ 200:
+ description: "Successful operation"
+ content:
+ application/json:
+ schema:
+ type: "object"
+ properties:
+ metrics:
+ type: "object"
+ properties:
+ org_keywords:
+ type: "integer"
+ description: "The total number of keywords that your target ranks for in the top 100 organic search results."
+components:
+ securitySchemes:
+ basicAuth:
+ type: http
+ scheme: basic
+ schemas:
+ RepositoryObject:
+ type: object
+ description: "Bitbucket repository object returned from the API."
+ properties:
+ type:
+ type: "string"
+ description: "The type of the object (usually \"repository\")."
+ links:
+ type: "object"
+ description: "A collection of relevant resource links."
+ properties:
+ self:
+ $ref: '#/components/schemas/LinkObject'
+ html:
+ $ref: '#/components/schemas/LinkObject'
+ avatar:
+ $ref: '#/components/schemas/LinkObject'
+ pullrequests:
+ $ref: '#/components/schemas/LinkObject'
+ commits:
+ $ref: '#/components/schemas/LinkObject'
+ forks:
+ $ref: '#/components/schemas/LinkObject'
+ watchers:
+ $ref: '#/components/schemas/LinkObject'
+ downloads:
+ $ref: '#/components/schemas/LinkObject'
+ clone:
+ type: "array"
+ description: "List of clone URLs (HTTPS and/or SSH)."
+ items:
+ $ref: '#/components/schemas/LinkObject'
+ hooks:
+ $ref: '#/components/schemas/LinkObject'
+ uuid:
+ type: "string"
+ description: "The globally unique identifier for the repository."
+ full_name:
+ type: "string"
+ description: "The full name of the repository (workspace/repo_slug)."
+ is_private:
+ type: "boolean"
+ description: "Indicates whether the repository is private."
+ scm:
+ type: "string"
+ description: "The source control system (only \"git\" is supported)."
+ owner:
+ type: "object"
+ description: "The user or team that owns the repository."
+ properties:
+ type:
+ type: "string"
+ description: "The type of the owner (usually \"user\" or \"team\")."
+ name:
+ type: "string"
+ description: "The display name of the repository."
+ description:
+ type: "string"
+ description: "A short description of the repository."
+ created_on:
+ type: "string"
+ description: "Timestamp of when the repository was created."
+ updated_on:
+ type: "string"
+ description: "Timestamp of the last repository update."
+ size:
+ type: "integer"
+ description: "Total size of the repository in bytes."
+ language:
+ type: "string"
+ description: "The primary programming language of the repository."
+ has_issues:
+ type: "boolean"
+ description: "Indicates whether the issue tracker is enabled."
+ has_wiki:
+ type: "boolean"
+ description: "Indicates whether the wiki is enabled."
+ fork_policy:
+ type: "string"
+ description: "Repository fork policy."
+ project:
+ type: "object"
+ description: "Project that the repository belongs to."
+ properties:
+ type:
+ type: "string"
+ description: "Type of the project object."
+ mainbranch:
+ type: "object"
+ description: "The default branch of the repository."
+ properties:
+ type:
+ type: "string"
+ description: "Type of the branch object."
+ LinkObject:
+ type: "object"
+ description: "A hyperlink reference with optional name."
+ properties:
+ href:
+ type: "string"
+ description: "The URL of the link."
+ name:
+ type: "string"
+ description: "A human-readable name for the link."
+ ProjectObject:
+ type: "object"
+ description: "Bitbucket project object returned from the API."
+ properties:
+ type:
+ type: "string"
+ description: "The type of the object (typically 'project')."
+ links:
+ type: "object"
+ description: "Relevant links for the project."
+ properties:
+ html:
+ $ref: "#/components/schemas/LinkObject"
+ avatar:
+ $ref: "#/components/schemas/LinkObject"
+ uuid:
+ type: "string"
+ description: "Globally unique identifier for the project."
+ key:
+ type: "string"
+ description: "Unique key identifying the project within the workspace."
+ owner:
+ type: "object"
+ description: "The workspace or user who owns the project."
+ properties:
+ type:
+ type: "string"
+ description: "Type of the owner (usually 'user' or 'workspace')."
+ name:
+ type: "string"
+ description: "Human-readable name of the project."
+ description:
+ type: "string"
+ description: "Description of the project."
+ is_private:
+ type: "boolean"
+ description: "Indicates whether the project is private."
+ created_on:
+ type: "string"
+ format: "date-time"
+ description: "Timestamp of when the project was created."
+ updated_on:
+ type: "string"
+ format: "date-time"
+ description: "Timestamp of the last update to the project."
+ has_publicly_visible_repos:
+ type: "boolean"
+ description: "Indicates if the project contains any public repositories."
diff --git a/server/libs/modules/components/bitbucket/src/main/java/com/bytechef/component/bitbucket/AbstractBitbucketComponentHandler.java b/server/libs/modules/components/bitbucket/src/main/java/com/bytechef/component/bitbucket/AbstractBitbucketComponentHandler.java
new file mode 100644
index 0000000000..92ac54acad
--- /dev/null
+++ b/server/libs/modules/components/bitbucket/src/main/java/com/bytechef/component/bitbucket/AbstractBitbucketComponentHandler.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2025 ByteChef
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.bytechef.component.bitbucket;
+
+import static com.bytechef.component.definition.ComponentDsl.component;
+
+import com.bytechef.component.OpenApiComponentHandler;
+import com.bytechef.component.bitbucket.action.BitbucketCreateProjectAction;
+import com.bytechef.component.bitbucket.action.BitbucketCreateRepositoryAction;
+import com.bytechef.component.bitbucket.connection.BitbucketConnection;
+import com.bytechef.component.definition.ComponentDefinition;
+
+/**
+ * Provides the base implementation for the REST based component.
+ *
+ * @generated
+ */
+public abstract class AbstractBitbucketComponentHandler implements OpenApiComponentHandler {
+ private final ComponentDefinition componentDefinition = modifyComponent(
+ component("bitbucket")
+ .title("Bitbucket")
+ .description(
+ "Elevate your software delivery from planning to production and beyond, with built-in AI, CI/CD, and a best-in-class Jira integration."))
+ .actions(modifyActions(BitbucketCreateRepositoryAction.ACTION_DEFINITION,
+ BitbucketCreateProjectAction.ACTION_DEFINITION))
+ .connection(modifyConnection(BitbucketConnection.CONNECTION_DEFINITION))
+ .triggers(getTriggers());
+
+ @Override
+ public ComponentDefinition getDefinition() {
+ return componentDefinition;
+ }
+}
diff --git a/server/libs/modules/components/bitbucket/src/main/java/com/bytechef/component/bitbucket/BitbucketComponentHandler.java b/server/libs/modules/components/bitbucket/src/main/java/com/bytechef/component/bitbucket/BitbucketComponentHandler.java
new file mode 100644
index 0000000000..a8b35b6294
--- /dev/null
+++ b/server/libs/modules/components/bitbucket/src/main/java/com/bytechef/component/bitbucket/BitbucketComponentHandler.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2025 ByteChef
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.bytechef.component.bitbucket;
+
+import static com.bytechef.component.definition.Authorization.PASSWORD;
+import static com.bytechef.component.definition.Authorization.USERNAME;
+import static com.bytechef.component.definition.ComponentDsl.authorization;
+import static com.bytechef.component.definition.ComponentDsl.string;
+import static com.bytechef.component.definition.ComponentDsl.tool;
+
+import com.bytechef.component.OpenApiComponentHandler;
+import com.bytechef.component.bitbucket.action.BitbucketListProjectsAction;
+import com.bytechef.component.bitbucket.action.BitbucketListRepositoriesAction;
+import com.bytechef.component.bitbucket.trigger.BitbucketRepositoryPushTrigger;
+import com.bytechef.component.definition.Authorization.AuthorizationType;
+import com.bytechef.component.definition.ClusterElementDefinition;
+import com.bytechef.component.definition.ComponentCategory;
+import com.bytechef.component.definition.ComponentDsl.ModifiableActionDefinition;
+import com.bytechef.component.definition.ComponentDsl.ModifiableComponentDefinition;
+import com.bytechef.component.definition.ComponentDsl.ModifiableConnectionDefinition;
+import com.bytechef.component.definition.ComponentDsl.ModifiableTriggerDefinition;
+import com.google.auto.service.AutoService;
+import java.util.List;
+
+/**
+ * @author Nikolina Spehar
+ */
+@AutoService(OpenApiComponentHandler.class)
+public class BitbucketComponentHandler extends AbstractBitbucketComponentHandler {
+
+ @Override
+ public List extends ModifiableActionDefinition> getCustomActions() {
+ return List.of(
+ BitbucketListProjectsAction.ACTION_DEFINITION,
+ BitbucketListRepositoriesAction.ACTION_DEFINITION);
+ }
+
+ @Override
+ public List getTriggers() {
+ return List.of(BitbucketRepositoryPushTrigger.TRIGGER_DEFINITION);
+ }
+
+ @Override
+ public List>
+ modifyClusterElements(ClusterElementDefinition>... clusterElementDefinitions) {
+ return List.of(
+ tool(BitbucketListProjectsAction.ACTION_DEFINITION),
+ tool(BitbucketListRepositoriesAction.ACTION_DEFINITION));
+ }
+
+ @Override
+ public ModifiableComponentDefinition modifyComponent(ModifiableComponentDefinition modifiableComponentDefinition) {
+ return modifiableComponentDefinition
+ .icon("path:assets/bitbucket.svg")
+ .categories(ComponentCategory.PROJECT_MANAGEMENT)
+ .customAction(true);
+ }
+
+ @Override
+ public ModifiableConnectionDefinition
+ modifyConnection(ModifiableConnectionDefinition modifiableConnectionDefinition) {
+
+ return modifiableConnectionDefinition
+ .baseUri((connectionParameters, context) -> "https://api.bitbucket.org/2.0")
+ .authorizations(
+ authorization(AuthorizationType.BASIC_AUTH)
+ .title("API Key Authorization")
+ .properties(
+ string(USERNAME)
+ .label("Username")
+ .description("Email address of your Bitbucket account.")
+ .required(true),
+ string(PASSWORD)
+ .label("API Key")
+ .description("API key creation steps in documentation.")
+ .required(true)));
+ }
+}
diff --git a/server/libs/modules/components/bitbucket/src/main/java/com/bytechef/component/bitbucket/action/BitbucketCreateProjectAction.java b/server/libs/modules/components/bitbucket/src/main/java/com/bytechef/component/bitbucket/action/BitbucketCreateProjectAction.java
new file mode 100644
index 0000000000..57a8b39a75
--- /dev/null
+++ b/server/libs/modules/components/bitbucket/src/main/java/com/bytechef/component/bitbucket/action/BitbucketCreateProjectAction.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2025 ByteChef
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.bytechef.component.bitbucket.action;
+
+import static com.bytechef.component.OpenApiComponentHandler.PropertyType;
+import static com.bytechef.component.definition.ComponentDsl.action;
+import static com.bytechef.component.definition.ComponentDsl.bool;
+import static com.bytechef.component.definition.ComponentDsl.integer;
+import static com.bytechef.component.definition.ComponentDsl.object;
+import static com.bytechef.component.definition.ComponentDsl.outputSchema;
+import static com.bytechef.component.definition.ComponentDsl.string;
+import static com.bytechef.component.definition.Context.Http.BodyContentType;
+import static com.bytechef.component.definition.Context.Http.ResponseType;
+
+import com.bytechef.component.bitbucket.util.BitbucketUtils;
+import com.bytechef.component.definition.ComponentDsl;
+import com.bytechef.component.definition.OptionsDataSource;
+import java.util.Map;
+
+/**
+ * Provides a list of the component actions.
+ *
+ * @generated
+ */
+public class BitbucketCreateProjectAction {
+ public static final ComponentDsl.ModifiableActionDefinition ACTION_DEFINITION = action("createProject")
+ .title("Create Project")
+ .description("Creates a project in selected workspace.")
+ .metadata(
+ Map.of(
+ "method", "POST",
+ "path", "/workspaces/{workspace}/projects", "bodyContentType", BodyContentType.JSON, "mimeType",
+ "application/json"
+
+ ))
+ .properties(string("workspace").label("Workspace")
+ .description("Workspace where the project will be added.")
+ .required(true)
+ .options((OptionsDataSource.ActionOptionsFunction) BitbucketUtils::getWorkspaceOptions)
+ .metadata(
+ Map.of(
+ "type", PropertyType.PATH)),
+ string("name").metadata(
+ Map.of(
+ "type", PropertyType.BODY))
+ .label("Name")
+ .description("The name of the project.")
+ .required(true),
+ string("key").metadata(
+ Map.of(
+ "type", PropertyType.BODY))
+ .label("Key")
+ .description(
+ "Key of the project (eg. AT, for a project named Atlassian). Project keys must start with a letter and may only consist of ASCII letters, numbers and underscores (A-Z, a-z, 0-9, _).")
+ .required(true),
+ string("description").metadata(
+ Map.of(
+ "type", PropertyType.BODY))
+ .label("Description")
+ .description("The description of project.")
+ .required(false),
+ bool("is_private").metadata(
+ Map.of(
+ "type", PropertyType.BODY))
+ .label("Is Private")
+ .description("Whether the project is private or not.")
+ .required(false))
+ .output(outputSchema(object()
+ .properties(object("metrics")
+ .properties(integer("org_keywords").description(
+ "The total number of keywords that your target ranks for in the top 100 organic search results.")
+ .required(false))
+ .required(false))
+ .metadata(
+ Map.of(
+ "responseType", ResponseType.JSON))));
+
+ private BitbucketCreateProjectAction() {
+ }
+}
diff --git a/server/libs/modules/components/bitbucket/src/main/java/com/bytechef/component/bitbucket/action/BitbucketCreateRepositoryAction.java b/server/libs/modules/components/bitbucket/src/main/java/com/bytechef/component/bitbucket/action/BitbucketCreateRepositoryAction.java
new file mode 100644
index 0000000000..3d9831443a
--- /dev/null
+++ b/server/libs/modules/components/bitbucket/src/main/java/com/bytechef/component/bitbucket/action/BitbucketCreateRepositoryAction.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2025 ByteChef
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.bytechef.component.bitbucket.action;
+
+import static com.bytechef.component.OpenApiComponentHandler.PropertyType;
+import static com.bytechef.component.definition.ComponentDsl.action;
+import static com.bytechef.component.definition.ComponentDsl.bool;
+import static com.bytechef.component.definition.ComponentDsl.object;
+import static com.bytechef.component.definition.ComponentDsl.option;
+import static com.bytechef.component.definition.ComponentDsl.outputSchema;
+import static com.bytechef.component.definition.ComponentDsl.string;
+import static com.bytechef.component.definition.Context.Http.BodyContentType;
+import static com.bytechef.component.definition.Context.Http.ResponseType;
+
+import com.bytechef.component.bitbucket.property.BitbucketRepositoryObjectProperties;
+import com.bytechef.component.bitbucket.util.BitbucketUtils;
+import com.bytechef.component.definition.ComponentDsl;
+import com.bytechef.component.definition.OptionsDataSource;
+import java.util.Map;
+
+/**
+ * Provides a list of the component actions.
+ *
+ * @generated
+ */
+public class BitbucketCreateRepositoryAction {
+ public static final ComponentDsl.ModifiableActionDefinition ACTION_DEFINITION = action("createRepository")
+ .title("Create Repository")
+ .description("Creates a repository in a selected workspace.")
+ .metadata(
+ Map.of(
+ "method", "POST",
+ "path", "/repositories/{workspace}/{repo_slug}", "bodyContentType", BodyContentType.JSON, "mimeType",
+ "application/json"
+
+ ))
+ .properties(string("workspace").label("Workspace")
+ .description("Workspace in which repository will be created.")
+ .required(true)
+ .options((OptionsDataSource.ActionOptionsFunction) BitbucketUtils::getWorkspaceOptions)
+ .metadata(
+ Map.of(
+ "type", PropertyType.PATH)),
+ string("repo_slug").label("Repository Slug")
+ .description("Repository slug that is used as identifier for the repository.")
+ .required(true)
+ .metadata(
+ Map.of(
+ "type", PropertyType.PATH)),
+ string("name").metadata(
+ Map.of(
+ "type", PropertyType.BODY))
+ .label("Name")
+ .description("The name of the repository.")
+ .required(true),
+ string("scm").metadata(
+ Map.of(
+ "type", PropertyType.BODY))
+ .label("Source Control Management.")
+ .description("Specifies the version control system that your repository will use.")
+ .options(option("Git", "git"))
+ .required(true),
+ object("project").properties(string("key").label("Key")
+ .description("The key of the parent project.")
+ .required(false)
+ .options((OptionsDataSource.ActionOptionsFunction) BitbucketUtils::getKeyOptions)
+ .optionsLookupDependsOn("workspace"))
+ .metadata(
+ Map.of(
+ "type", PropertyType.BODY))
+ .label("Project")
+ .description("Parent project of the repository.")
+ .required(true),
+ bool("is_private").metadata(
+ Map.of(
+ "type", PropertyType.BODY))
+ .label("Is Private")
+ .description("Whether the repository is private or not.")
+ .required(false),
+ string("description").metadata(
+ Map.of(
+ "type", PropertyType.BODY))
+ .label("Description")
+ .description("The description of repository.")
+ .required(false),
+ string("fork_policy").metadata(
+ Map.of(
+ "type", PropertyType.BODY))
+ .label("Fork Policy")
+ .description("Specifies the fork policy for the repository.")
+ .options(option("Allow_forks", "allow_forks"), option("No_public_forks", "no_public_forks"),
+ option("No_forks", "no_forks"))
+ .required(false),
+ string("language").metadata(
+ Map.of(
+ "type", PropertyType.BODY))
+ .label("Language")
+ .description("Main programming language of the repository")
+ .required(false))
+ .output(outputSchema(object().properties(BitbucketRepositoryObjectProperties.PROPERTIES)
+ .description("Bitbucket repository object returned from the API.")
+ .metadata(
+ Map.of(
+ "responseType", ResponseType.JSON))));
+
+ private BitbucketCreateRepositoryAction() {
+ }
+}
diff --git a/server/libs/modules/components/bitbucket/src/main/java/com/bytechef/component/bitbucket/action/BitbucketListProjectsAction.java b/server/libs/modules/components/bitbucket/src/main/java/com/bytechef/component/bitbucket/action/BitbucketListProjectsAction.java
new file mode 100644
index 0000000000..1bc85fda96
--- /dev/null
+++ b/server/libs/modules/components/bitbucket/src/main/java/com/bytechef/component/bitbucket/action/BitbucketListProjectsAction.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2025 ByteChef
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.bytechef.component.bitbucket.action;
+
+import static com.bytechef.component.bitbucket.constant.BitbucketConstants.WORKSPACE;
+import static com.bytechef.component.bitbucket.util.BitbucketUtils.getPaginationList;
+import static com.bytechef.component.definition.ComponentDsl.action;
+import static com.bytechef.component.definition.ComponentDsl.array;
+import static com.bytechef.component.definition.ComponentDsl.object;
+import static com.bytechef.component.definition.ComponentDsl.outputSchema;
+import static com.bytechef.component.definition.ComponentDsl.string;
+
+import com.bytechef.component.bitbucket.property.BitbucketProjectObjectProperties;
+import com.bytechef.component.bitbucket.util.BitbucketUtils;
+import com.bytechef.component.definition.ComponentDsl.ModifiableActionDefinition;
+import com.bytechef.component.definition.Context;
+import com.bytechef.component.definition.OptionsDataSource.ActionOptionsFunction;
+import com.bytechef.component.definition.Parameters;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Nikolina Spehar
+ */
+public class BitbucketListProjectsAction {
+ public static final ModifiableActionDefinition ACTION_DEFINITION = action("listProjects")
+ .title("List Projects")
+ .description("Returns list of projects from workspace.")
+ .properties(
+ string(WORKSPACE)
+ .label("Workspace")
+ .description("Workspace from which projects are to be listed.")
+ .required(true)
+ .options((ActionOptionsFunction) BitbucketUtils::getWorkspaceOptions))
+ .output(
+ outputSchema(
+ array()
+ .label("Projects")
+ .description("List of Bitbucket projects returned from the API.")
+ .items(
+ object()
+ .label("Project")
+ .description("Bitbucket project.")
+ .properties(
+ BitbucketProjectObjectProperties.PROPERTIES))))
+ .perform(BitbucketListProjectsAction::perform);
+
+ private BitbucketListProjectsAction() {
+ }
+
+ public static List