Classification + Tariff Calculation API API 文件

一次呼叫,拿到 HTS 稅號和關稅。

兩個 POST 端點,單筆一項、批次預設120項,每個欄位、錯誤碼和 curl 範例都在這裡。

Classification + Tariff Calculation API 文件
本頁內容
  1. 總覽
  2. 整合步驟
  3. 單筆
    1. 請求標頭
    2. 回應標頭
    3. 請求本文
    4. 成功回應
    5. 錯誤回應
    6. 錯誤碼
    7. 用 curl 試試
  4. 批次
    1. 標頭
    2. 請求本文
    3. 成功回應
    4. 錯誤回應
    5. 錯誤碼
    6. 用 curl 試試
  5. 速率限制與配額
  6. 錯誤與重試
  7. 金鑰安全
  8. 聯絡我們

API 版本 v1 · Base URL api.gingercontrol.com

Classification + Tariff Calculation API 會回傳什麼?

Classification + Tariff Calculation API(稅號判定加關稅試算 API)是 GingerControl 的 REST API,用來判定美國 HTS 稅號和查詢關稅。您用 POST 送出一段產品描述和原產地,API 回傳 HTS 稅號、一般稅率和優惠稅率,以及每一層第99章關稅的稅號和稅率。一項產品用單筆端點;批次端點預設每次120項(可依您的處理量另行調整)。金鑰由我們另行發放,結果用於報關準備,由持照報關行覆核。

  • Base URL:https://api.gingercontrol.com
  • 端點:POST /openapi/v1/tariff 處理一項產品,POST /openapi/v1/tariff/batch 最多處理120項
  • 身分驗證:在 X-Api-Key 標頭帶入 API 金鑰,金鑰由 GingerControl 另行發放
  • 格式:請求本文和回應都是 JSON

怎麼取得使用權限並完成整合?

先讀完下面的 API 規格,預約通話取得依您流量設定的 API 金鑰,再把結果接進您自己的系統。

閱讀 API 規格

開始前,請完整讀過下面各端點的說明。內容涵蓋請求方式、輸入和輸出結構、錯誤的意義和速率限制,能縮短整合和除錯的時間。

申請 API 金鑰

預約一通電話。我們會詢問您的呼叫模式、IP 白名單、尖峰 QPS 和延遲時間要求,再透過 Email 等管道另行交付金鑰。

整合

多數團隊很快就完成基本整合,之後的時間多半花在把回傳資料接進自己的系統。

請妥善保管正式環境金鑰。現階段,API 金鑰是計費的唯一依據。

單筆端點

送出一段產品描述和原產地,拿回這項產品的 HTS 稅號和關稅資料。

POST/openapi/v1/tariffhttps://api.gingercontrol.com

請求標頭

標頭必填意義用途
Content-Type是請求本文的格式,由呼叫端設定必須是 application/json
X-Api-Key是呼叫端憑證,由 GingerControl 另行發放身分驗證、速率限制和配額控管
X-Request-Id否請求追蹤 ID,最好由您的系統產生疑難排解、日誌追蹤和調查;沒帶的話由伺服器產生

回應標頭

標頭說明用途
Content-Type一律是 application/json回應本文的格式
X-Request-Id回傳您帶的值,或伺服器產生的值記下來,方便疑難排解
Retry-After只在 429 Too Many Requests 時回傳重試前要等幾秒

請求本文

欄位型別必填說明
descriptionstring是產品描述。不可為空,最多10,000個字元
country_of_originstring是ISO 3166-1 alpha-2 國家代碼(代碼清單)。也接受 EU(歐盟)和 UK(英國);GB 會當成 UK 處理
extraobject否額外輸入。只讀取 steel_pour_country 和 aluminum_pour_country,其他欄位會略過
extra.steel_pour_countrystring否鋼材澆鑄國,規則同 country_of_origin
extra.aluminum_pour_countrystring否鋁材澆鑄國,規則同 country_of_origin
JSON請求範例
{
  "description": "Cotton knit short sleeve T-shirt",
  "country_of_origin": "DE",
  "extra": {
    "steel_pour_country": "IT",
    "aluminum_pour_country": "FR"
  }
}

成功回應

欄位型別說明
hts_codestring產品的 HTS 稅號。通常是10碼;拆分稅號的產品可能回傳8碼上層稅號,例如 9101.11.40
tariffsobject 或 null產品的關稅資料。拆分稅號的產品可能是 null
tariffs.general_ratestring 或 null一般稅率,可視為最惠國待遇稅率(MFN)
tariffs.special_ratestring 或 null優惠稅率,經過簡單整理(例如拿掉結尾括號裡的附註)
tariffs.<module_key>array該模組的第99章條目,每一筆是 {code, rate}
tariffs.<module_key>[].codestring第99章稅號,例如 9903.85.08
tariffs.<module_key>[].ratestring以百分比字串表示的稅率,例如 25%
componentsarray拆分稅號產品的組件;一般產品不會有這個欄位
components[].hts_codestring組件的 HTS 稅號,一律10碼
components[].tariffsobject 或 null組件的關稅資料
JSON回應範例
{
  "hts_code": "6109.10.0012",
  "tariffs": {
    "general_rate": "16.5%",
    "special_rate": "Free",
    "Section 301": [],
    "Section 232 - Metals": []
  }
}

tariffs 裡的每個模組鍵(這裡是 Section 301 和 Section 232 - Metals)各是一份 {code, rate} 清單。清單是空的,代表這個模組沒有適用這項產品的第99章條目。

錯誤回應

欄位型別說明
detailobject錯誤物件
detail.codestring錯誤碼,供程式判斷處理
detail.messagestring錯誤訊息,供記錄和疑難排解
JSON錯誤範例
{
  "detail": {
    "code": "invalid_request",
    "message": "Invalid request body."
  }
}

錯誤碼

HTTP 狀態碼錯誤碼意義
401 Unauthorizedmissing_api_key請求標頭沒有帶 X-Api-Key
401 Unauthorizedinvalid_api_keyAPI 金鑰驗證失敗
403 Forbiddenapi_key_revokedAPI 金鑰已撤銷
403 Forbiddenclient_disabled呼叫端帳號已停用
422 Unprocessable Entityinvalid_request請求本文格式錯誤、缺少欄位、欄位型別錯誤,或值不符合規格
429 Too Many Requestsrequest_rate_limited觸發請求層級保護
429 Too Many Requestsitem_rate_limited觸發品項層級配額保護
500 Internal Server Errorclassification_failedHTS 稅號判定失敗
500 Internal Server Errorcalculator_failed關稅試算失敗
500 Internal Server Errorinternal_error發生其他內部錯誤

用 curl 試試

把 YOUR_API_KEY 換成我們另行發給您的金鑰,指令照原樣執行即可。

cURL單筆呼叫
curl -X POST 'https://api.gingercontrol.com/openapi/v1/tariff' \
  -H 'Content-Type: application/json' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'X-Request-Id: manual-single-001' \
  -d '{
    "description": "Cotton knit short sleeve T-shirt",
    "country_of_origin": "DE",
    "extra": {
      "steel_pour_country": "IT",
      "aluminum_pour_country": "FR"
    }
  }'

批次端點

一次呼叫最多送120項產品,每一項帶您自己的 item_id;結果照您送出的順序回傳,每一項有自己的狀態。

POST/openapi/v1/tariff/batchhttps://api.gingercontrol.com

標頭

批次端點接受的請求標頭和回傳的回應標頭,都和單筆端點相同:送出 Content-Type、X-Api-Key 和選填的 X-Request-Id;回傳 Content-Type、X-Request-Id,遇到429時另有 Retry-After。

請求本文

欄位型別必填說明
itemsarray是要處理的產品;目前版本最多120項
items[].item_idstring是您自己的識別碼,用來把每筆結果對回您的紀錄。同一個請求內不可重複
items[].descriptionstring是產品描述。不可為空,最多10,000個字元
items[].country_of_originstring是ISO 3166-1 alpha-2 國家代碼。也接受 EU 和 UK;GB 會當成 UK 處理
items[].extraobject否只讀取 steel_pour_country 和 aluminum_pour_country,其他欄位會略過
items[].extra.steel_pour_countrystring否鋼材澆鑄國,規則同 country_of_origin
items[].extra.aluminum_pour_countrystring否鋁材澆鑄國,規則同 country_of_origin
JSON批次請求
{
  "items": [
    {
      "item_id": "SKU-DE-001",
      "description": "Cotton knit short sleeve T-shirt",
      "country_of_origin": "DE",
      "extra": {
        "steel_pour_country": "IT"
      }
    },
    {
      "item_id": "SKU-FR-002",
      "description": "Cotton crew neck T-shirt",
      "country_of_origin": "FR",
      "extra": {}
    }
  ]
}

成功回應

欄位型別說明
itemsarray結果,順序和請求相同
items[].item_idstring您的識別碼,用來對回您的紀錄
items[].statusstringok 或 failed
items[].hts_codestring成功品項的 HTS 稅號。通常是10碼;拆分稅號的產品可能回傳8碼上層稅號。只在 status 是 ok 時出現
items[].tariffsobject 或 null成功品項的關稅資料;拆分稅號的產品可能是 null。只在 status 是 ok 時出現
items[].tariffs.general_ratestring 或 null一般稅率,可視為最惠國待遇稅率(MFN)
items[].tariffs.special_ratestring 或 null優惠稅率,經過簡單整理
items[].tariffs.<module_key>array模組條目,每一筆是 {code, rate}
items[].tariffs.<module_key>[].codestring第99章稅號
items[].tariffs.<module_key>[].ratestring稅率
items[].componentsarray拆分稅號產品的組件;一般產品不會有這個欄位。只在 status 是 ok 時出現
items[].components[].hts_codestring組件的 HTS 稅號,一律10碼
items[].components[].tariffsobject 或 null組件的關稅資料
items[].codestring失敗品項的錯誤碼。只在 status 是 failed 時出現
summaryobject批次請求的摘要
summary.totalinteger這次請求的品項數
summary.succeededinteger成功的品項數
summary.failedinteger失敗的品項數
JSON批次回應
{
  "items": [
    {
      "item_id": "SKU-DE-001",
      "status": "ok",
      "hts_code": "6109.10.0012",
      "tariffs": {
        "general_rate": "16.5%",
        "special_rate": "Free",
        "Section 301": [],
        "Section 232 - Metals": []
      }
    },
    {
      "item_id": "SKU-FR-002",
      "status": "ok",
      "hts_code": "6109.10.0004",
      "tariffs": {
        "general_rate": "16.5%",
        "special_rate": "Free",
        "Section 301": [],
        "Section 232 - Metals": []
      }
    }
  ],
  "summary": {
    "total": 2,
    "succeeded": 2,
    "failed": 0
  }
}

錯誤回應

批次層級的錯誤使用和單筆端點相同的 detail 物件,含 detail.code 和 detail.message。

JSON批次錯誤
{
  "detail": {
    "code": "item_rate_limited",
    "message": "Item quota exceeded."
  }
}

錯誤碼

批次層級的錯誤會讓整個請求失敗:

HTTP 狀態碼錯誤碼意義
401 Unauthorizedmissing_api_key請求標頭沒有帶 X-Api-Key
401 Unauthorizedinvalid_api_keyAPI 金鑰驗證失敗
403 Forbiddenapi_key_revokedAPI 金鑰已撤銷
403 Forbiddenclient_disabled呼叫端帳號已停用
422 Unprocessable Entityinvalid_request頂層結構無效、item_id 重複、缺少欄位、欄位型別錯誤,或值不符合規格
429 Too Many Requestsrequest_rate_limited觸發請求層級保護
429 Too Many Requestsitem_rate_limited觸發品項層級配額保護
500 Internal Server Errorinternal_error發生其他批次層級內部錯誤

品項層級的失敗會包在成功的回應裡,該品項標示 status: failed 並附上 code:

錯誤碼意義
classification_failed該品項的 HTS 稅號判定失敗
calculator_failed該品項的關稅試算失敗
internal_error該品項發生其他內部錯誤

用 curl 試試

把 YOUR_API_KEY 換成我們另行發給您的金鑰,指令照原樣執行即可。

cURL批次呼叫
curl -X POST 'https://api.gingercontrol.com/openapi/v1/tariff/batch' \
  -H 'Content-Type: application/json' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'X-Request-Id: manual-batch-001' \
  -d '{
    "items": [
      {
        "item_id": "SKU-DE-001",
        "description": "Cotton knit short sleeve T-shirt",
        "country_of_origin": "DE",
        "extra": {
          "steel_pour_country": "IT"
        }
      },
      {
        "item_id": "SKU-FR-002",
        "description": "Cotton crew neck T-shirt",
        "country_of_origin": "FR",
        "extra": {}
      }
    ]
  }'

速率限制和配額怎麼運作?

每次呼叫都要通過請求層級保護;每處理一項產品,就從綁在您 API 金鑰上的品項配額扣除。

  • 請求太頻繁時,API 會回傳 429 Too Many Requests。
  • 配額依產品計算:單筆端點扣1,批次端點扣 items 裡的筆數。
  • 同一把 API 金鑰下,兩個端點共用同一份品項配額。
  • 每把金鑰依該客戶的流量模型設定,所以每位客戶的配額不同。

錯誤和重試該怎麼處理?

遇到422先檢查請求本文,遇到429依 Retry-After 的秒數等待,並記下每次呼叫的 X-Request-Id。

  • 422 Unprocessable Entity:通常是本文結構、欄位型別或欄位值不符合規格。請先檢查請求本文。
  • 429 Too Many Requests:觸發了請求層級保護或品項配額。請依回應標頭 Retry-After 重試。
  • 請求 ID:在您自己的系統保留請求日誌,記下每次呼叫的 X-Request-Id,整合和維運時能縮短疑難排解的時間。
  • 逾時和警示:設定合理的逾時、重試和失敗警示,遇到網路波動或上游服務不穩時,才能妥善處理。

怎麼保護我的 API 金鑰?

金鑰只放在您的伺服器上,不要出現在使用者看得到的地方;金鑰可能外洩時,請馬上通知我們。

  • 絕對不要把 API 金鑰寫進前端程式碼、瀏覽器端程式,或任何會暴露給最終使用者的地方。
  • 把金鑰存在安全的設定系統,例如機密管理工具(secret manager),或嚴格控管的環境變數。
  • 金鑰遺失、可能外洩或需要更換時,請盡快另行通知我們。

API 支援要找誰?

整合、上線或日常維運需要協助,請寫信到 chen@gingercontrol.com。

看看這支 API 能做什麼。

API 介紹頁有使用對象、完整的回應範例,以及申請金鑰的方式。

想要一套照您的流程運作的 AI 系統?

看看 GingerOS。

GingerOS 是照您自己的流程建置的貿易合規系統:每個稅號都附判定理由,公司裡一有變動,就自動重新檢查合規(關稅、稅則分類、出口管制等)。

點我!

看看 GingerOS 怎麼運作