This is an automated email from the ASF dual-hosted git repository.

davidzollo pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new 6fc40c206c [Feature][Connector-V2][Zendesk] Add Zendesk source 
connector (#11030)
6fc40c206c is described below

commit 6fc40c206c7c4eda8a29725400bd84546da39188
Author: Gabriel Baldez <[email protected]>
AuthorDate: Tue Jul 7 12:47:47 2026 -0300

    [Feature][Connector-V2][Zendesk] Add Zendesk source connector (#11030)
---
 .../connectors/changelog/connector-http-zendesk.md |   6 ++
 docs/en/connectors/source/Zendesk.md               | 108 +++++++++++++++++++++
 .../connectors/changelog/connector-http-zendesk.md |   6 ++
 docs/zh/connectors/source/Zendesk.md               | 108 +++++++++++++++++++++
 plugin-mapping.properties                          |   1 +
 .../{ => connector-http-zendesk}/pom.xml           |  30 +++---
 .../seatunnel/zendesk/source/ZendeskSource.java    |  54 +++++++++++
 .../zendesk/source/ZendeskSourceFactory.java       |  53 ++++++++++
 .../source/config/ZendeskSourceOptions.java        |  41 ++++++++
 .../source/config/ZendeskSourceParameter.java      |  45 +++++++++
 .../seatunnel/zendesk/ZendeskFactoryTest.java      |  31 ++++++
 .../zendesk/ZendeskSourceParameterTest.java        |  61 ++++++++++++
 seatunnel-connectors-v2/connector-http/pom.xml     |   1 +
 seatunnel-dist/pom.xml                             |   6 ++
 14 files changed, 532 insertions(+), 19 deletions(-)

diff --git a/docs/en/connectors/changelog/connector-http-zendesk.md 
b/docs/en/connectors/changelog/connector-http-zendesk.md
new file mode 100644
index 0000000000..1cf41e674b
--- /dev/null
+++ b/docs/en/connectors/changelog/connector-http-zendesk.md
@@ -0,0 +1,6 @@
+<details><summary> Change Log </summary>
+
+| Change | Commit | Version |
+| --- | --- | --- |
+
+</details>
diff --git a/docs/en/connectors/source/Zendesk.md 
b/docs/en/connectors/source/Zendesk.md
new file mode 100644
index 0000000000..94b7382a8d
--- /dev/null
+++ b/docs/en/connectors/source/Zendesk.md
@@ -0,0 +1,108 @@
+import ChangeLog from '../changelog/connector-http-zendesk.md';
+
+# Zendesk
+
+> Zendesk source connector
+
+## Description
+
+Used to read data from the [Zendesk REST 
API](https://developer.zendesk.com/api-reference/). It authenticates with a 
Zendesk account email and API token (sent as an HTTP Basic `Authorization` 
header) and reads a Zendesk endpoint such as tickets, users, or organizations 
into SeaTunnel rows.
+
+## Key features
+
+- [x] [batch](../../introduction/concepts/connector-v2-features.md)
+- [ ] [stream](../../introduction/concepts/connector-v2-features.md)
+- [ ] [exactly-once](../../introduction/concepts/connector-v2-features.md)
+- [x] [column projection](../../introduction/concepts/connector-v2-features.md)
+- [ ] [parallelism](../../introduction/concepts/connector-v2-features.md)
+- [ ] [support user-defined 
split](../../introduction/concepts/connector-v2-features.md)
+
+## Options
+
+|            name             |  type   | required | default value |
+|-----------------------------|---------|----------|---------------|
+| url                         | String  | Yes      | -             |
+| email                       | String  | Yes      | -             |
+| api_token                   | String  | Yes      | -             |
+| method                      | String  | No       | get           |
+| schema                      | Config  | No       | -             |
+| format                      | String  | No       | text          |
+| params                      | Map     | No       | -             |
+| body                        | String  | No       | -             |
+| json_field                  | Config  | No       | -             |
+| content_field                | String  | No       | -             |
+| poll_interval_millis        | int     | No       | -             |
+| retry                       | int     | No       | -             |
+| retry_backoff_multiplier_ms | int     | No       | 100           |
+| retry_backoff_max_ms        | int     | No       | 10000         |
+| enable_multi_lines          | boolean | No       | false         |
+| common-options              | config  | No       | -             |
+
+### url [String]
+
+The Zendesk REST API endpoint to read from, for example 
`https://your-subdomain.zendesk.com/api/v2/tickets.json`.
+
+### email [String]
+
+The Zendesk account email used for API token authentication. It is combined 
with `api_token` as `{email}/token:{api_token}` and sent as an HTTP Basic 
`Authorization` header.
+
+### api_token [String]
+
+The Zendesk API token. See the [Zendesk API token 
docs](https://support.zendesk.com/hc/en-us/articles/4408889192858) for how to 
generate one.
+
+### method [String]
+
+http request method, only supports GET, POST method.
+
+### schema [Config]
+
+The structure of the data, including field names and field types. For more 
details, please refer to [Schema 
Feature](../../introduction/concepts/schema-feature.md).
+
+### format [String]
+
+the format of upstream data, now only support `json` `text`, default `text`.
+
+### params [Map]
+
+http params
+
+### json_field [Config]
+
+This parameter helps you configure the schema, so this parameter must be used 
with schema. It maps JSON paths in the response to schema fields. See the [Http 
source](./Http.md) connector for details and examples.
+
+### content_field [String]
+
+This parameter can extract a sub-section of the JSON response (for example the 
array under a top-level key such as `tickets` or `users`) before mapping to 
rows. See the [Http source](./Http.md) connector for details and examples.
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common 
Options](../common-options/source-common-options.md) for details.
+
+## Example
+
+```hocon
+source {
+  Zendesk {
+    url = "https://your-subdomain.zendesk.com/api/v2/tickets.json";
+    email = "[email protected]"
+    api_token = "${ZENDESK_API_TOKEN}"
+    method = "GET"
+    format = "json"
+    content_field = "$.tickets.*"
+    schema = {
+      fields {
+        id = bigint
+        subject = string
+        status = string
+        priority = string
+        created_at = string
+        updated_at = string
+      }
+    }
+  }
+}
+```
+
+## Changelog
+
+<ChangeLog />
diff --git a/docs/zh/connectors/changelog/connector-http-zendesk.md 
b/docs/zh/connectors/changelog/connector-http-zendesk.md
new file mode 100644
index 0000000000..1cf41e674b
--- /dev/null
+++ b/docs/zh/connectors/changelog/connector-http-zendesk.md
@@ -0,0 +1,6 @@
+<details><summary> Change Log </summary>
+
+| Change | Commit | Version |
+| --- | --- | --- |
+
+</details>
diff --git a/docs/zh/connectors/source/Zendesk.md 
b/docs/zh/connectors/source/Zendesk.md
new file mode 100644
index 0000000000..963c4f1b57
--- /dev/null
+++ b/docs/zh/connectors/source/Zendesk.md
@@ -0,0 +1,108 @@
+import ChangeLog from '../changelog/connector-http-zendesk.md';
+
+# Zendesk
+
+> Zendesk 数据源连接器
+
+## 描述
+
+用于从 [Zendesk REST API](https://developer.zendesk.com/api-reference/) 读取数据。它使用 
Zendesk 账号邮箱和 API token 进行认证(以 HTTP Basic `Authorization` 请求头发送),并将某个 Zendesk 
接口(如 tickets、users、organizations)读取为 SeaTunnel 的行数据。
+
+## 主要特性
+
+- [x] [批处理](../../introduction/concepts/connector-v2-features.md)
+- [ ] [流处理](../../introduction/concepts/connector-v2-features.md)
+- [ ] [精确一次](../../introduction/concepts/connector-v2-features.md)
+- [x] [列投影](../../introduction/concepts/connector-v2-features.md)
+- [ ] [并行度](../../introduction/concepts/connector-v2-features.md)
+- [ ] [支持用户自定义分片](../../introduction/concepts/connector-v2-features.md)
+
+## 选项
+
+|            名称             |  类型   | 是否必填 |   默认值   |
+|-----------------------------|---------|----------|-----------|
+| url                         | String  | 是       | -         |
+| email                       | String  | 是       | -         |
+| api_token                   | String  | 是       | -         |
+| method                      | String  | 否       | get       |
+| schema                      | Config  | 否       | -         |
+| format                      | String  | 否       | text      |
+| params                      | Map     | 否       | -         |
+| body                        | String  | 否       | -         |
+| json_field                  | Config  | 否       | -         |
+| content_field                | String  | 否       | -         |
+| poll_interval_millis        | int     | 否       | -         |
+| retry                       | int     | 否       | -         |
+| retry_backoff_multiplier_ms | int     | 否       | 100       |
+| retry_backoff_max_ms        | int     | 否       | 10000     |
+| enable_multi_lines          | boolean | 否       | false     |
+| common-options              | config  | 否       | -         |
+
+### url [String]
+
+要读取的 Zendesk REST API 接口地址,例如 
`https://your-subdomain.zendesk.com/api/v2/tickets.json`。
+
+### email [String]
+
+用于 API token 认证的 Zendesk 账号邮箱。它会与 `api_token` 组合为 `{email}/token:{api_token}` 
并以 HTTP Basic `Authorization` 请求头发送。
+
+### api_token [String]
+
+Zendesk API token。获取方式请参考 [Zendesk API token 
文档](https://support.zendesk.com/hc/en-us/articles/4408889192858)。
+
+### method [String]
+
+http 请求方法,仅支持 GET、POST 方法。
+
+### schema [Config]
+
+数据的结构,包括字段名称和字段类型。更多详情请参考 [Schema 
Feature](../../introduction/concepts/schema-feature.md)。
+
+### format [String]
+
+上游数据的格式,目前仅支持 `json` 和 `text`,默认 `text`。
+
+### params [Map]
+
+http 请求参数。
+
+### json_field [Config]
+
+该参数用于配置 schema,因此必须与 schema 一起使用。它将响应中的 JSON 路径映射到 schema 字段。详情和示例请参考 [Http 
source](./Http.md) 连接器。
+
+### content_field [String]
+
+该参数可以在映射为行之前,提取 JSON 响应中的某个子部分(例如顶层键 `tickets` 或 `users` 下的数组)。详情和示例请参考 [Http 
source](./Http.md) 连接器。
+
+### common options
+
+数据源插件通用参数,详情请参考 [Source Common 
Options](../common-options/source-common-options.md)。
+
+## 示例
+
+```hocon
+source {
+  Zendesk {
+    url = "https://your-subdomain.zendesk.com/api/v2/tickets.json";
+    email = "[email protected]"
+    api_token = "${ZENDESK_API_TOKEN}"
+    method = "GET"
+    format = "json"
+    content_field = "$.tickets.*"
+    schema = {
+      fields {
+        id = bigint
+        subject = string
+        status = string
+        priority = string
+        created_at = string
+        updated_at = string
+      }
+    }
+  }
+}
+```
+
+## 变更日志
+
+<ChangeLog />
diff --git a/plugin-mapping.properties b/plugin-mapping.properties
index 838c9fa4d4..e33882e199 100644
--- a/plugin-mapping.properties
+++ b/plugin-mapping.properties
@@ -96,6 +96,7 @@ seatunnel.sink.Tablestore = connector-tablestore
 seatunnel.source.Tablestore = connector-tablestore
 seatunnel.source.Lemlist = connector-http-lemlist
 seatunnel.source.Klaviyo = connector-http-klaviyo
+seatunnel.source.Zendesk = connector-http-zendesk
 seatunnel.sink.Slack = connector-slack
 seatunnel.source.OneSignal = connector-http-onesignal
 seatunnel.source.Jira = connector-http-jira
diff --git a/seatunnel-connectors-v2/connector-http/pom.xml 
b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/pom.xml
similarity index 59%
copy from seatunnel-connectors-v2/connector-http/pom.xml
copy to seatunnel-connectors-v2/connector-http/connector-http-zendesk/pom.xml
index 6842f7c413..cac65b0721 100644
--- a/seatunnel-connectors-v2/connector-http/pom.xml
+++ b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/pom.xml
@@ -22,27 +22,19 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.seatunnel</groupId>
-        <artifactId>seatunnel-connectors-v2</artifactId>
+        <artifactId>connector-http</artifactId>
         <version>${revision}</version>
     </parent>
-    <artifactId>connector-http</artifactId>
-    <packaging>pom</packaging>
-    <name>SeaTunnel : Connectors V2 : Http :</name>
 
-    <modules>
-        <module>connector-http-base</module>
-        <module>connector-http-feishu</module>
-        <module>connector-http-wechat</module>
-        <module>connector-http-myhours</module>
-        <module>connector-http-lemlist</module>
-        <module>connector-http-klaviyo</module>
-        <module>connector-http-onesignal</module>
-        <module>connector-http-jira</module>
-        <module>connector-http-gitlab</module>
-        <module>connector-http-github</module>
-        <module>connector-http-notion</module>
-        <module>connector-http-persistiq</module>
-        <module>connector-http-airtable</module>
-    </modules>
+    <artifactId>connector-http-zendesk</artifactId>
+    <name>SeaTunnel : Connectors V2 : Http : Zendesk</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.seatunnel</groupId>
+            <artifactId>connector-http-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 
 </project>
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/ZendeskSource.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/ZendeskSource.java
new file mode 100644
index 0000000000..5d3a9ffcc9
--- /dev/null
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/ZendeskSource.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ *
+ *    http://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 org.apache.seatunnel.connectors.seatunnel.zendesk.source;
+
+import org.apache.seatunnel.api.configuration.ReadonlyConfig;
+import org.apache.seatunnel.api.table.type.SeaTunnelRow;
+import 
org.apache.seatunnel.connectors.seatunnel.common.source.AbstractSingleSplitReader;
+import 
org.apache.seatunnel.connectors.seatunnel.common.source.SingleSplitReaderContext;
+import org.apache.seatunnel.connectors.seatunnel.http.source.HttpSource;
+import org.apache.seatunnel.connectors.seatunnel.http.source.HttpSourceReader;
+import 
org.apache.seatunnel.connectors.seatunnel.zendesk.source.config.ZendeskSourceParameter;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class ZendeskSource extends HttpSource {
+    private final ZendeskSourceParameter zendeskSourceParameter = new 
ZendeskSourceParameter();
+
+    public ZendeskSource(ReadonlyConfig pluginConfig) {
+        super(pluginConfig);
+        this.zendeskSourceParameter.buildWithConfig(pluginConfig);
+    }
+
+    @Override
+    public String getPluginName() {
+        return "Zendesk";
+    }
+
+    @Override
+    public AbstractSingleSplitReader<SeaTunnelRow> createReader(
+            SingleSplitReaderContext readerContext) throws Exception {
+        return new HttpSourceReader(
+                this.zendeskSourceParameter,
+                readerContext,
+                this.deserializationSchema,
+                jsonField,
+                contentField);
+    }
+}
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/ZendeskSourceFactory.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/ZendeskSourceFactory.java
new file mode 100644
index 0000000000..52d37b67d3
--- /dev/null
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/ZendeskSourceFactory.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ *
+ *    http://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 org.apache.seatunnel.connectors.seatunnel.zendesk.source;
+
+import org.apache.seatunnel.api.configuration.util.OptionRule;
+import org.apache.seatunnel.api.source.SeaTunnelSource;
+import org.apache.seatunnel.api.source.SourceSplit;
+import org.apache.seatunnel.api.table.connector.TableSource;
+import org.apache.seatunnel.api.table.factory.Factory;
+import org.apache.seatunnel.api.table.factory.TableSourceFactoryContext;
+import org.apache.seatunnel.connectors.seatunnel.http.source.HttpSourceFactory;
+import 
org.apache.seatunnel.connectors.seatunnel.zendesk.source.config.ZendeskSourceOptions;
+
+import com.google.auto.service.AutoService;
+
+import java.io.Serializable;
+
+@AutoService(Factory.class)
+public class ZendeskSourceFactory extends HttpSourceFactory {
+    @Override
+    public String factoryIdentifier() {
+        return "Zendesk";
+    }
+
+    @Override
+    public <T, SplitT extends SourceSplit, StateT extends Serializable>
+            TableSource<T, SplitT, StateT> 
createSource(TableSourceFactoryContext context) {
+        return () -> (SeaTunnelSource<T, SplitT, StateT>) new 
ZendeskSource(context.getOptions());
+    }
+
+    @Override
+    public OptionRule optionRule() {
+        return getHttpBuilder()
+                .required(ZendeskSourceOptions.EMAIL)
+                .required(ZendeskSourceOptions.API_TOKEN)
+                .build();
+    }
+}
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/config/ZendeskSourceOptions.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/config/ZendeskSourceOptions.java
new file mode 100644
index 0000000000..1a02832d66
--- /dev/null
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/config/ZendeskSourceOptions.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ *
+ *    http://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 org.apache.seatunnel.connectors.seatunnel.zendesk.source.config;
+
+import org.apache.seatunnel.api.configuration.Option;
+import org.apache.seatunnel.api.configuration.Options;
+import org.apache.seatunnel.connectors.seatunnel.http.config.HttpCommonOptions;
+
+public class ZendeskSourceOptions extends HttpCommonOptions {
+    public static final String AUTHORIZATION = "Authorization";
+    public static final String BASIC = "Basic ";
+    public static final String ACCEPT = "Accept";
+    public static final String APPLICATION_JSON = "application/json";
+
+    public static final Option<String> EMAIL =
+            Options.key("email")
+                    .stringType()
+                    .noDefaultValue()
+                    .withDescription("Zendesk account email used for API token 
authentication");
+
+    public static final Option<String> API_TOKEN =
+            Options.key("api_token")
+                    .stringType()
+                    .noDefaultValue()
+                    .withDescription("Zendesk API token");
+}
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/config/ZendeskSourceParameter.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/config/ZendeskSourceParameter.java
new file mode 100644
index 0000000000..2bc6505c0f
--- /dev/null
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/config/ZendeskSourceParameter.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ *
+ *    http://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 org.apache.seatunnel.connectors.seatunnel.zendesk.source.config;
+
+import org.apache.seatunnel.api.configuration.ReadonlyConfig;
+import org.apache.seatunnel.connectors.seatunnel.http.config.HttpParameter;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+import java.util.HashMap;
+
+public class ZendeskSourceParameter extends HttpParameter {
+
+    @Override
+    public void buildWithConfig(ReadonlyConfig pluginConfig) {
+        super.buildWithConfig(pluginConfig);
+        // Zendesk API token authentication uses HTTP Basic auth with the form
+        // "{email}/token:{api_token}", see 
https://developer.zendesk.com/api-reference
+        this.headers = this.getHeaders() == null ? new HashMap<>() : 
this.getHeaders();
+        this.headers.put(ZendeskSourceOptions.ACCEPT, 
ZendeskSourceOptions.APPLICATION_JSON);
+        String credentials =
+                pluginConfig.get(ZendeskSourceOptions.EMAIL)
+                        + "/token:"
+                        + pluginConfig.get(ZendeskSourceOptions.API_TOKEN);
+        String encoded =
+                
Base64.getEncoder().encodeToString(credentials.getBytes(StandardCharsets.UTF_8));
+        this.headers.put(ZendeskSourceOptions.AUTHORIZATION, 
ZendeskSourceOptions.BASIC + encoded);
+        this.setHeaders(this.headers);
+    }
+}
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/test/java/org/apache/seatunnel/connectors/seatunnel/zendesk/ZendeskFactoryTest.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/test/java/org/apache/seatunnel/connectors/seatunnel/zendesk/ZendeskFactoryTest.java
new file mode 100644
index 0000000000..7e91fde694
--- /dev/null
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/test/java/org/apache/seatunnel/connectors/seatunnel/zendesk/ZendeskFactoryTest.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ *
+ *    http://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 org.apache.seatunnel.connectors.seatunnel.zendesk;
+
+import 
org.apache.seatunnel.connectors.seatunnel.zendesk.source.ZendeskSourceFactory;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+class ZendeskFactoryTest {
+
+    @Test
+    void optionRule() {
+        Assertions.assertNotNull((new ZendeskSourceFactory()).optionRule());
+    }
+}
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/test/java/org/apache/seatunnel/connectors/seatunnel/zendesk/ZendeskSourceParameterTest.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/test/java/org/apache/seatunnel/connectors/seatunnel/zendesk/ZendeskSourceParameterTest.java
new file mode 100644
index 0000000000..649af63a16
--- /dev/null
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/test/java/org/apache/seatunnel/connectors/seatunnel/zendesk/ZendeskSourceParameterTest.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ *
+ *    http://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 org.apache.seatunnel.connectors.seatunnel.zendesk;
+
+import org.apache.seatunnel.api.configuration.ReadonlyConfig;
+import 
org.apache.seatunnel.connectors.seatunnel.zendesk.source.config.ZendeskSourceParameter;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.Map;
+
+class ZendeskSourceParameterTest {
+
+    @Test
+    void buildWithConfigSetsBasicAuthHeaderAndPreservesExistingHeaders() {
+        Map<String, String> customHeaders = new HashMap<>();
+        customHeaders.put("X-Custom-Header", "custom-value");
+
+        Map<String, Object> options = new HashMap<>();
+        options.put("url", 
"https://your-subdomain.zendesk.com/api/v2/tickets.json";);
+        options.put("email", "[email protected]");
+        options.put("api_token", "secret-token");
+        options.put("headers", customHeaders);
+
+        ZendeskSourceParameter parameter = new ZendeskSourceParameter();
+        parameter.buildWithConfig(ReadonlyConfig.fromMap(options));
+
+        Map<String, String> headers = parameter.getHeaders();
+        String expected =
+                "Basic "
+                        + Base64.getEncoder()
+                                .encodeToString(
+                                        "[email protected]/token:secret-token"
+                                                
.getBytes(StandardCharsets.UTF_8));
+        // Zendesk API-token auth uses HTTP Basic with 
{email}/token:{api_token}
+        Assertions.assertEquals(expected, headers.get("Authorization"));
+        // requests ask for a JSON response
+        Assertions.assertEquals("application/json", headers.get("Accept"));
+        // existing custom headers are preserved
+        Assertions.assertEquals("custom-value", 
headers.get("X-Custom-Header"));
+    }
+}
diff --git a/seatunnel-connectors-v2/connector-http/pom.xml 
b/seatunnel-connectors-v2/connector-http/pom.xml
index 6842f7c413..a3bddc1c59 100644
--- a/seatunnel-connectors-v2/connector-http/pom.xml
+++ b/seatunnel-connectors-v2/connector-http/pom.xml
@@ -43,6 +43,7 @@
         <module>connector-http-notion</module>
         <module>connector-http-persistiq</module>
         <module>connector-http-airtable</module>
+        <module>connector-http-zendesk</module>
     </modules>
 
 </project>
diff --git a/seatunnel-dist/pom.xml b/seatunnel-dist/pom.xml
index afe4ca33f7..a318daa163 100644
--- a/seatunnel-dist/pom.xml
+++ b/seatunnel-dist/pom.xml
@@ -232,6 +232,12 @@
                     <version>${project.version}</version>
                     <scope>provided</scope>
                 </dependency>
+                <dependency>
+                    <groupId>org.apache.seatunnel</groupId>
+                    <artifactId>connector-http-zendesk</artifactId>
+                    <version>${project.version}</version>
+                    <scope>provided</scope>
+                </dependency>
                 <dependency>
                     <groupId>org.apache.seatunnel</groupId>
                     <artifactId>connector-http-onesignal</artifactId>

Reply via email to