Skip to main content
Discount codes overview cover
Mã giảm giá cho phép bạn triển khai các chương trình khuyến mãi và ưu đãi có mục tiêu. Tạo các mức giảm theo phần trăm, đặt giới hạn và thời hạn, giới hạn theo sản phẩm, rồi áp dụng chúng khi thanh toán.

Checkout Sessions

Áp dụng một hoặc nhiều mã chồng trong quá trình thanh toán lưu trữ với discount_codes và các điều khiển UI.

Get Discount

Truy xuất một mã giảm giá theo ID để kiểm tra trạng thái và các hạn chế của mã.

Get Discount by Code

Tra cứu và xác thực mã giảm giá bằng tên mã (ví dụ: “SAVE20”).

Create Discount (API)

Tạo mã giảm giá mới theo chương trình.

List & Update Discounts

Duyệt và quản lý các mã giảm giá hiện có; cập nhật hoặc xóa theo nhu cầu.

Plan Change Discounts

Áp dụng mã giảm giá khi nâng cấp hoặc hạ cấp gói đăng ký.

Mã giảm giá là gì?

Mã giảm giá là các token khuyến mãi giúp giảm tổng giá trị đơn hàng khi thanh toán. Sử dụng chúng cho các chiến dịch theo mùa, ưu đãi cho lần mua đầu tiên, ưu đãi thu hút lại khách hàng hoặc mức giá B2B được thương lượng. Mã có thể giảm theo phần trăm (ví dụ: giảm 15%) hoặc theo số tiền cố định (ví dụ: giảm $5). Bạn có thể kết hợp tối đa 20 mã cho mỗi lần checkout, payment hoặc subscription, vì vậy khách hàng có thể cùng đổi cả ưu đãi chào mừng và mã chiến dịch trong một giao dịch. Giới hạn mã cho các sản phẩm cụ thể, giới hạn số lần mỗi khách hàng có thể sử dụng, đặt ngày hết hạn và kiểm soát những ai đủ điều kiện đổi mã.

Lợi ích chính

  • Giảm giá linh hoạt: Giảm theo phần trăm hoặc theo số tiền cố định
  • Mã có thể kết hợp: Áp dụng tối đa 20 mã cho mỗi lần checkout, payment hoặc subscription
  • Kiểm soát có mục tiêu: Giới hạn theo sản phẩm, chu kỳ subscription và điều kiện đủ tư cách của khách hàng
  • Quản trị chiến dịch: Ngày bắt đầu theo lịch, ngày hết hạn, giới hạn sử dụng tổng thể và theo từng khách hàng
  • Định giá theo từng currency: Đặt số tiền giảm cố định, giới hạn số tiền và subtotal tối thiểu cho từng currency

Tạo mã giảm giá

Tạo mã giảm giá trong bảng điều khiển Dodo Payments, sau đó áp dụng chúng trong thanh toán được lưu trữ hoặc qua API.
Danh sách Discounts trong dashboard Dodo Payments hiển thị các discount code hiện có

Thiết lập trên Dashboard

  • Tên mã giảm giá (bắt buộc): Nhãn nội bộ cho dashboard.
  • Mã (bắt buộc): Chuỗi khách hàng nhập khi checkout. Tạo mã ngẫu nhiên hoặc nhập mã của riêng bạn (tối thiểu 3 ký tự, tự động chuyển thành chữ hoa).
  • Loại (bắt buộc): Percentage (giảm theo phần trăm) hoặc Amount (khấu trừ một khoản cố định).
  • Số tiền (bắt buộc): Với percentage, phần trăm giảm hiển thị trong dashboard (ví dụ: 15 cho 15%). Qua API, cùng giá trị này được biểu diễn theo basis points (1500). Với amount, đây là khoản khấu trừ cố định theo loại tiền tệ mặc định của mã.
  • Ngày bắt đầu (không bắt buộc): Lên lịch để mã được kích hoạt vào một ngày trong tương lai. Để trống để kích hoạt ngay lập tức.
  • Ngày hết hạn (không bắt buộc): Ngày sau đó mã không còn có thể được sử dụng.
  • Giới hạn sử dụng (không bắt buộc, trong Advanced): Tổng số lần sử dụng tối đa trên tất cả khách hàng. Một giỏ hàng nhiều subscription được tính là một lần sử dụng.
  • Giới hạn sử dụng cho mỗi khách hàng (không bắt buộc, trong Advanced): Số lần sử dụng tối đa của một khách hàng bất kỳ. Khi cả hai giới hạn được thiết lập, giá trị này phải nhỏ hơn hoặc bằng giới hạn sử dụng tổng thể.
  • Điều kiện khách hàng (không bắt buộc): Giới hạn đối tượng được sử dụng mã — tất cả khách hàng, khách hàng lần đầu, khách hàng hiện tại hoặc danh sách được chọn thủ công.
  • Tùy chọn tiền tệ (không bắt buộc): Số tiền giảm giá cho từng loại tiền tệ bạn bán. Xem Tùy chọn theo từng loại tiền tệ.
  • Giới hạn sản phẩm (không bắt buộc): Giới hạn mã cho các sản phẩm cụ thể.
  • Giới hạn chu kỳ subscription (không bắt buộc, trong Advanced): Số chu kỳ thanh toán mà mã giảm giá được áp dụng. Để trống để áp dụng vô thời hạn.
  • Bảo lưu khi thay đổi gói (không bắt buộc): Giữ mã giảm giá hoạt động khi subscription thay đổi gói (preserve_on_plan_change).
  • Metadata (không bắt buộc): Đính kèm các cặp key–value tùy chỉnh để theo dõi nội bộ.
  • Yêu cầu giá trị đơn hàng tối thiểu (không bắt buộc, trong Advanced): Tổng phụ tối thiểu của giỏ hàng (theo từng loại tiền tệ) để áp dụng mã.
Biểu mẫu hiển thị Summary cập nhật liên tục về mã bạn đang tạo trong một panel bên cạnh. Chuyển sang Preview để xem giảm giá sẽ hiển thị như thế nào khi checkout:
Biểu mẫu New Discount Code với bảng điều khiển bên Summary và Preview bên cạnh thông tin chi tiết về mã giảm giá
Các phần bên dưới biểu mẫu — đối tượng đủ điều kiện, hạn chế và tùy chọn nâng cao:
Đối tượng đủ điều kiện, hạn chế và tùy chọn nâng cao cho mã giảm giá
Sử dụng giới hạn chu kỳ cho mức giá ưu đãi mở đầu của subscription (ví dụ: “giảm 50% trong 3 tháng”).
Một amount phần trăm được biểu diễn bằng basis points trong API — 1500 tương đương 15%. Một amount cố định là một giá trị tiền tệ và được tính theo các tùy chọn tiền tệ của mã.

Loại mã giảm giá

Cả hai loại có thể được kết hợp trong cùng mảng discount_codes và được áp dụng theo thứ tự trong mảng.
Trình chỉnh sửa mã giảm giá với loại Amount được chọn, hiển thị khoản khấu trừ cố định 500 INR

Đối tượng khách hàng đủ điều kiện

Thiết lập customer_eligibility để kiểm soát những người có thể đổi mã:
Menu thả xuống về đối tượng khách hàng đủ điều kiện, hiển thị các tùy chọn Any, First-time, Existing và Specific customer
Một mã specific bắt đầu với zero khách hàng đủ điều kiện và từ chối mọi lần đổi mã cho đến khi bạn thêm khách hàng vào mã. Thêm khách hàng trong dashboard hoặc bằng discount customers API.
Kết hợp điều kiện khách hàng với Giới hạn sử dụng mỗi khách hàng để giới hạn số lần từng khách hàng có thể đổi mã, độc lập với giới hạn sử dụng tổng thể.

Tùy chọn theo tiền tệ

Khi bán hàng bằng nhiều currency, hãy thiết lập hành vi theo từng currency cho mỗi mã. Trong Currency options, mỗi mục chỉ định:
  • Amount — với giảm giá Amount, đây là khoản giảm cố định theo currency đó; với giảm giá Percentage, đây là giới hạn giảm tối đa. Ánh xạ tới max_amount_possible trong API.
  • Default — đánh dấu một currency là mặc định. Các currency chưa được cấu hình sẽ được quy đổi từ currency mặc định này.
Đặt mức tối thiểu theo từng currency riêng trong Require a minimum order value thuộc Advanced:
  • Minimum subtotal — mã chỉ được áp dụng khi giỏ hàng đạt subtotal này theo currency đó. 0 có nghĩa là không có mức tối thiểu.
Bảng currency options với amount và minimum subtotal theo từng currency cho INR và USD
Giảm giá Amount yêu cầu ít nhất một tùy chọn currency có giá trị mặc định có thể xác định, vì khoản giảm cố định không có ý nghĩa nếu không gắn với một currency. Giảm giá Percentage không yêu cầu tùy chọn currency.
Tổng phụ tối thiểu luôn được tính dựa trên giá gốc của giỏ hàng, không phải tổng đang tính sau các mã giảm giá trước đó trong chuỗi. Thứ tự áp dụng mã không bao giờ làm thay đổi việc có đạt mức tối thiểu hay không.Đối với subscription, mức tối thiểu được kiểm tra một lần dựa trên tổng sản phẩm và các add-on của sản phẩm đó. Ví dụ, sản phẩm có giá $0 cùng add-on $5 đáp ứng mức tối thiểu $4. Mã Amount (flat) vẫn chỉ được áp dụng cho sản phẩm subscription, không áp dụng cho các add-on của sản phẩm.

Trải nghiệm Checkout

Khách hàng nhập mã giảm giá vào trường tại checkout. Các mã đủ điều kiện được áp dụng ngay lập tức và tổng tiền được cập nhật.
Trang checkout hiển thị mã giảm giá đã được áp dụng vào tổng tiền đơn hàng
Trong Checkout Sessions, truyền discount_codes (một array) để áp dụng trước một hoặc nhiều mã. Trường nhập mã giảm giá được hiển thị theo mặc định. Đặt feature_flags.allow_discount_code thành false để ẩn trường này. Các mã được áp dụng theo thứ tự trong array, tối đa 20 mã.

Xếp chồng mã giảm giá

Checkout sessions, payments và subscriptions chấp nhận tối đa 20 mã được xếp chồng thông qua array discount_codes. Các mã được áp dụng theo thứ tự trong array: mã đủ điều kiện đầu tiên giảm giá khởi điểm, mã tiếp theo giảm trên mức giá đã được giảm, và tiếp tục như vậy. Khi Purchasing Power Parity được bật, giá khởi điểm là số tiền đã điều chỉnh theo PPP. Response bao gồm discount_ids (trên payments/subscriptions) và discounts (thông tin chi tiết hơn cho từng mã giảm giá, bao gồm vị trí và số chu kỳ subscription còn lại).
Field đơn discount_code đã deprecated nhưng vẫn được hỗ trợ đầy đủ để đảm bảo backward compatibility. Không thể kết hợp field này với discount_codes trong cùng một request. Hãy chuyển sang discount_codes (dạng array) để sử dụng tính năng xếp chồng và response chi tiết hơn.
Với giá subscription đã bật Card-Optional at Zero Price, một chuỗi mã giảm giá làm giảm toàn bộ số tiền phải trả hôm nay xuống 0 cũng sẽ bỏ qua yêu cầu thẻ — khách hàng checkout mà không cần lưu payment method, giống như mức giá 0 gốc.

Quản lý API

Tạo mã giảm giá theo chương trình với loại và số tiền cụ thể.

API Reference

Xem API tạo mã giảm giá.
Liệt kê tất cả mã giảm giá hoặc truy xuất thông tin chi tiết để quản lý và audit.

API Reference

Duyệt các API liệt kê và truy xuất.
Tra cứu mã giảm giá bằng mã dễ đọc (ví dụ: “SAVE20”) thay vì ID nội bộ.

API Reference

Truy xuất mã giảm giá theo tên mã.
Sửa đổi cấu hình mã giảm giá, chẳng hạn như số tiền, thời hạn hoặc các giới hạn.

API Reference

Tìm hiểu cách cập nhật thông tin chi tiết của mã giảm giá.
Lấy mã giảm giá theo ID để kiểm tra trạng thái, số lần sử dụng và các giới hạn trước khi áp dụng.

API Reference

Lấy mã giảm giá theo ID.
Vô hiệu hóa hoặc xóa các mã giảm giá không còn cần thiết.

API Reference

Xóa mã giảm giá.
Với mã giảm giá có customer_eligibility được đặt thành specific, hãy quản lý những khách hàng được phép sử dụng mã:
  • GET /discounts/{discount_id}/customers — liệt kê các khách hàng đã gắn (có phân trang, tối đa 100 khách hàng mỗi trang).
  • POST /discounts/{discount_id}/customers — gắn khách hàng theo ID. Lệnh gọi này có tính idempotent và chấp nhận tối đa 1000 ID; tất cả ID phải tồn tại trước trong business của bạn. Response chỉ trả về các ID được gửi trong request đó, vì vậy hãy gọi endpoint list để đọc toàn bộ allow list.
  • DELETE /discounts/{discount_id}/customers/{customer_id} — bỏ gắn một khách hàng.

Các trường hợp sử dụng phổ biến

  • Ưu đãi giới thiệu: Chương trình khuyến mãi ra mắt có thời hạn cho sản phẩm mới
  • Mua số lượng lớn hoặc B2B: Giảm giá theo hợp đồng cho các nhóm sản phẩm được chọn
  • Chiến lược giữ chân: Mã ưu đãi thu hút lại khách hàng trong quy trình ngăn ngừa churn
  • Chiến dịch theo mùa: Chương trình khuyến mãi theo dịp lễ hoặc sự kiện

Ví dụ tích hợp

Tạo mã giảm giá với Metadata

Đính kèm các cặp key–value tùy chỉnh để theo dõi nội bộ.
Sử dụng metadata để gắn thẻ mã giảm giá theo campaign, nguồn hoặc ID tham chiếu nội bộ, từ đó đối soát việc sử dụng và đo lường ROI sau này.

Áp dụng mã giảm giá trong Checkout Sessions

Áp dụng trước một hoặc nhiều mã giảm giá được xếp chồng và hiển thị UI nhập mã.

Áp dụng mã giảm giá khi thay đổi gói

Cung cấp mức giá khuyến mãi khi khách hàng nâng cấp hoặc hạ cấp subscription.
Tham số discount_codes kiểm soát cách xử lý mã giảm giá:
Đọc tất cả mã giảm giá đã áp dụng từ array discounts của subscription trong response. Mỗi mục bao gồm discount_id, position, cycles_remaining và mã gốc.

Ẩn trường mã giảm giá

Trường nhập mã giảm giá được hiển thị theo mặc định. Đặt allow_discount_code thành false để ẩn trường này.

Thực tiễn tốt nhất

  • Đặt tên rõ ràng: Sử dụng các mã dễ nhận biết và phù hợp với tên campaign.
  • Giới hạn thời gian: Thêm ngày hết hạn để tạo cảm giác cấp bách và ngăn chặn việc sử dụng sai mục đích.
  • Giới hạn hợp lý: Giới hạn mã cho các sản phẩm cụ thể để tránh thất thoát biên lợi nhuận.
  • Xác thực sớm: Kiểm tra khả năng áp dụng của mã trước khi xác nhận checkout.
  • Theo dõi tác động: Theo dõi mức sử dụng và tỷ lệ chuyển đổi theo từng campaign.
Lần sửa đổi cuối 8 tháng 10, 2026