diff --git a/Project/Web/MachineBridge/MachineBridge.Customs.cs b/Project/Web/MachineBridge/MachineBridge.Customs.cs
new file mode 100644
index 0000000..308975b
--- /dev/null
+++ b/Project/Web/MachineBridge/MachineBridge.Customs.cs
@@ -0,0 +1,178 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.SqlClient;
+using System.Linq;
+using Newtonsoft.Json;
+using FCOMMON;
+
+namespace Project.Web
+{
+ public partial class MachineBridge
+ {
+ #region Customs API
+
+ ///
+ /// 업체정보 목록 조회
+ ///
+ public string Customs_GetList(string searchKey = "")
+ {
+ try
+ {
+ // 로그인 체크
+ if (string.IsNullOrEmpty(info.Login.no) || string.IsNullOrEmpty(info.Login.gcode))
+ {
+ return JsonConvert.SerializeObject(new { Success = false, Message = "로그인이 필요합니다." });
+ }
+
+ var connStr = Properties.Settings.Default.CS;
+ using (var conn = new SqlConnection(connStr))
+ {
+ conn.Open();
+ var cmd = new SqlCommand();
+ cmd.Connection = conn;
+
+ // 검색 조건이 있으면 필터링
+ if (string.IsNullOrEmpty(searchKey))
+ {
+ cmd.CommandText = @"
+ SELECT idx, grp, name, owner, ownertel, address, tel, fax, email, memo,
+ wuid, wdate, uptae, staff, stafftel, name2, gcode
+ FROM Customs WITH (nolock)
+ WHERE gcode = @gcode
+ ORDER BY name";
+ }
+ else
+ {
+ // 여러 필드에서 검색 (fCustoms.cs의 btFind_Click 로직 참고)
+ cmd.CommandText = @"
+ SELECT idx, grp, name, owner, ownertel, address, tel, fax, email, memo,
+ wuid, wdate, uptae, staff, stafftel, name2, gcode
+ FROM Customs WITH (nolock)
+ WHERE gcode = @gcode
+ AND (stafftel LIKE @search
+ OR grp LIKE @search
+ OR name2 LIKE @search
+ OR name LIKE @search
+ OR owner LIKE @search
+ OR address LIKE @search
+ OR tel LIKE @search
+ OR email LIKE @search
+ OR memo LIKE @search
+ OR staff LIKE @search)
+ ORDER BY name";
+ cmd.Parameters.Add("@search", SqlDbType.NVarChar).Value = "%" + searchKey.Replace("'", "''") + "%";
+ }
+
+ cmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
+
+ var list = new List