DDP vs DDU (and DAP): Choosing Who Pays US Duties at Checkout

Who is affected and why it matters
If you sell to US customers from outside the country, or build checkout for merchants who do, you have to decide who pays the import duties and when. Until recently, many low-value orders didn’t raise the question, because they entered duty-free. CBP has since suspended the de minimis exemption for couriers, freight and other non-postal shipments and for mail shipments, so nearly every cross-border order now needs an answer. Our de minimis guide for checkout developers covers what changed.
Importers and customs brokers deal with the same choice on B2B shipments, where the shipping terms in the contract decide who is the importer of record and who pays.
DDU is retired. DAP replaced it
People still search for “DDU”, and carriers still use the label, but Delivered Duty Unpaid is not a current Incoterms rule. The International Chamber of Commerce dropped DDU in Incoterms 2010 and replaced it with DAP (Delivered at Place). Incoterms 2020 kept DAP and DDP.
When a carrier or platform says “DDU”, it almost always means what DAP describes: the seller delivers, the buyer pays import duties and taxes.
DDP vs DAP/DDU at a glance
DDP (Delivered Duty Paid) DAP (formerly DDU) Who pays import duty Seller Buyer Who handles import clearance Seller (or their agent) Buyer (or their agent) What the customer sees One price at checkout, no bill at delivery Item price at checkout, duties collected later Risk to the seller Wrong duty estimates come out of your margin Refused deliveries, returns, unhappy buyers What it needs Accurate duty calculation at checkout Clear disclosure that duties may be dueThe ICC’s own comparison of DAP and DDP covers the legal side: who carries risk and cost, and where delivery happens.

What DDP shipping means for your checkout
DDP only works if the duty you collect is close to the duty actually charged. Charge too much and you lose sales. Charge too little and you pay the difference on every order.
To quote accurately, your checkout needs, for each line:
- The correct 10-digit HTS code, stored on the SKU.
- The country of origin, which is where the goods were made, not where they ship from.
- The current resolved duty rate, including any Chapter 99 additional measures for that origin.
- A customs value, generally the price of the goods.
Here is how to resolve the duty for a single line:
curl -s "https://tariffsapi.com/api/v1/tariffs/resolve?hts=6109.10.00.12&origin=BD&resolve_chapter_99=true" \
-H "Authorization: Bearer $TARIFFS_API_KEY"
For a whole cart, resolve every line in one request:
curl -s -X POST "https://tariffsapi.com/api/v1/tariffs/resolve_batch" \
-H "Authorization: Bearer $TARIFFS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"requests":[
{"hts":"6109.10.00.12","origin":"BD"},
{"hts":"9503.00.00.90","origin":"CN"}
],
"resolve_chapter_99":true}'
Each entry in results comes back with its index, its own ok flag, and the full resolution under data, so one unresolvable line doesn’t fail the whole cart. Then compute the duty line:
function dutyLine(batch, cartLines) {
let total = 0;
const review = [];
batch.results.forEach((item) => {
const line = cartLines[item.index];
const rate = item.ok ? item.data?.summary?.total_resolved_ad_valorem_rate : null;
if (rate == null) { review.push(line.sku); return; }
total += line.value * (rate / 100);
});
return { total, review }; // if review is non-empty, fall back to DAP messaging or a buffer
}
Check the API documentation for the exact batch response shape. Batch requests (up to 200 items) are available on the Developer plan.
Handle the lines you can’t resolve
Some lines won’t resolve to a single ad valorem rate. A per-unit duty needs quantity and units, and a conditional rate needs more facts. Decide on a policy in advance:
- add a buffer and absorb the variance,
- switch that order to DAP with clear messaging, or
- send it to manual review for high-value orders.
What you should never do is treat “unknown” as zero.

Choosing between DDP and DAP
Choose DDP when you sell to consumers, average order values are modest, and a smooth delivery matters to your brand. You will need accurate data and a way to act as, or appoint, the importer of record.
Choose DAP when you sell B2B to buyers with their own brokers, when catalogs have many lines that are hard to resolve, or when you can’t take on importer obligations yet. Make the duty responsibility clear before purchase.
Many merchants run both: DDP for the majority of orders they can resolve cleanly, and DAP as the fallback.
If you are building on a commerce framework, our Medusa integration shows one way to wire duty lines into checkout. If you are comparing vendors, see how we stack up against Zonos.
FAQ
What is the difference between DDP and DDU?
Under DDP (Delivered Duty Paid), the seller pays import duties and handles clearance, so the buyer pays nothing on delivery. Under DDU (Delivered Duty Unpaid), the buyer pays duties and taxes on arrival. DDU was removed from the Incoterms rules in 2010 and replaced by DAP, which works the same way.
Is DDU still a valid Incoterm?
No. The ICC removed DDU in Incoterms 2010. The closest current rule is DAP (Delivered at Place), and Incoterms 2020 kept both DAP and DDP. Some carriers still use “DDU” as a service label.
What does DDP shipping mean for US ecommerce?
It means the merchant collects import duties at checkout and pays them on import, so the customer receives the parcel with nothing left to pay. It needs accurate duty estimates per item, based on HTS code, origin, and value.
Who is the importer of record under DDP?
Under DDP the seller, or an agent acting for the seller, generally takes on the importer’s responsibilities, including paying duties. Setups vary, so confirm the arrangement with your carrier or customs broker.
Do I still need to calculate duties if I ship DAP?
It is a good idea. Showing customers an estimate of duties they will owe reduces refused deliveries and support contacts, even if you don’t collect the money yourself.
Does Tariffs API calculate taxes and carrier fees?
No. Tariffs API resolves US duty rates by HTS code and origin, including Chapter 99 additional measures. CBP processing fees, carrier brokerage fees, and AD/CVD should be handled separately. Tariffs API is a data service, not a customs broker.
Quote duties your customers won’t be surprised by. Try the tariff calculator or see pricing for API access.
This article is general information, not legal or customs advice. Confirm shipping terms and importer obligations with your carrier or a licensed customs broker.