Skip to content
All Posts
Customs

CN22 vs CP72: Why USPS Chooses the Customs Form

·7 min read·By RevAddress·Customs

CN22 and CP72 look like forms a sender should choose. In the USPS international-label API, they are output.

The request does not expose a customsFormType field. It asks for the facts that drive the form: the package’s customs content type, weight, export-filing value, and item list. USPS then generates the customs form based on the content type and weight and integrates it with the label.

That distinction settles most “CN22 vs CP72” implementation questions. The useful engineering question is not which form do I request? It is which shipment facts must be correct so USPS selects and prints the right form?

What the caller controls

The international customs block requires three things:

  1. customsContentType — what kind of shipment this is;
  2. contents — the actual items, quantities, values, weights, origins, and tariff numbers; and
  3. AESITN — either the export filing number or the correct exemption legend.

The content type is a package-level category. USPS accepts values including MERCHANDISE, GIFT, DOCUMENT, COMMERCIAL_SAMPLE, RETURNED_GOODS, HUMANITARIAN_DONATIONS, DANGEROUS_GOODS, MEDICAL_SUPPLIES, and PHARMACEUTICALS.

Weight sits outside the customs block as part of the package. The API specification says the customs form is generated based on Customs Content Type and Weight. It does not publish a caller-facing switch that forces CN22 or CP72.

If your interface asks the customer to pick a form before it has collected the contents and weight, the interface is modeling USPS backward.

The package type is not the item description

This is the easiest validation failure to create.

GIFT and MERCHANDISE are valid values for customsContentType. The same words are invalid in itemDescription. USPS explicitly rejects these item descriptions regardless of case:

  • None
  • Not Applicable
  • N/A
  • Null
  • Gift
  • Merchandise

The package may be a gift. The item still needs to say what it is.

Package-level content type Invalid item description Useful item description
GIFT Gift Wool scarf
MERCHANDISE Merchandise Leather wallet
COMMERCIAL_SAMPLE Sample Cotton fabric swatch
RETURNED_GOODS Returned goods Ceramic mug

The item description accepts 1 to 30 characters. That is enough for a concrete noun plus material, which is also the strongest starting point for tariff classification. “Handmade premium artisan winter scarf” is marketing copy. “Wool scarf” is customs data.

What prints when the order has more than five items

The contents array accepts between 1 and 30 items. USPS prints the first five on the customs form. Items six through thirty move to a separate continuation page.

That behavior has two implementation consequences.

First, do not truncate the request at five items just because the form mockup shows five lines. The API accepts the rest and creates the continuation output.

Second, preserve a deterministic item order. Put the same array in the request, the order record, and any customer-facing packing view. A support agent should be able to explain why an item appears on the continuation page without reconstructing a differently sorted catalog.

The API treats each entry as a shipment-content line, not necessarily one physical unit. itemQuantity states the count. itemTotalValue and itemTotalWeight state the totals for all units matching that description. The older per-item value and weight fields are deprecated in the current specification.

The tariff number belongs to the item

Each content line can carry HSTariffNumber, a 6-to-14-character Harmonized System value. USPS calls it strongly recommended for faster processing and says that when the field is absent USPS will attempt to look it up, which may increase response time.

That is why a free single-item lookup and a catalog workflow are different products.

  • If one parcel is open in front of you, use the free HS, HTS, and Schedule B lookup and inspect the classification path.
  • If the same catalog ships repeatedly, classify the SKU file once and keep the code, customs description, origin, value, and review flag with the product record.

Do not copy the first six-digit heading that contains a familiar noun and call the work finished. The six-digit HS root is internationally shared, but US import and export schedules extend it. Material, construction, value, and intended use can move the item to a different ten-digit line. The guide to finding an HS code for a product walks those forks with worked examples.

AESITN is required even when the shipment is exempt

The field name suggests one kind of value. The actual contract accepts two:

  • a 14-digit AES Internal Transaction Number proving the export was filed; or
  • an exemption legend explaining why an ITN is not required.

The USPS specification uses NO EEI 30.37(a) as its sample exemption for shipments valued at $2,500 or less. That example is not permission to paste the legend into every small-parcel request. Commodity, destination, license, and other export-control rules still matter. The correct principle for software is simpler: never leave the field blank and never invent the exemption in presentation code. Store the filing decision as shipment data.

A request model that matches USPS

The shape below keeps form selection out of the caller’s hands and puts the actual decision inputs in one place:

{
  "weight": 2.4,
  "weightUnit": "lb",
  "customsForm": {
    "customsContentType": "MERCHANDISE",
    "AESITN": "NO EEI 30.37(a)",
    "contents": [
      {
        "itemDescription": "Wool scarf",
        "itemQuantity": 2,
        "itemTotalValue": 80,
        "itemTotalWeight": 1.2,
        "HSTariffNumber": "6214200000",
        "countryofOrigin": "US"
      }
    ]
  }
}

The tariff number here demonstrates the field shape, not a classification ruling for every wool scarf. Fiber composition, construction, and product details still control the code. A binding customs ruling always wins.

Four production checks before generating the label

  1. Require a real item description. Reject the six prohibited placeholder values and enforce the 30-character maximum before the request reaches USPS.
  2. Reconcile totals. Quantity, total item value, total item weight, and package weight should tell a coherent story.
  3. Record tariff evidence. Keep the chosen code, the classification path, confidence or review state, and the catalog revision together.
  4. Keep all items. Send up to thirty lines and preserve their order; let USPS create the continuation page after line five.

Those checks are more reliable than teaching a customer to recognize a CN22 or CP72 thumbnail. They also survive a label-format change because they are built on the request contract rather than the appearance of the output.

Where the paid work starts

The HS code lookup is the proof path for one product. It searches the USITC HTS and Census Schedule B catalogs without a signup.

For a working catalog, Catalog Classification returns a CSV with the selected code, Schedule B number, duty fields, confidence, runner-up candidates, a 30-character contents description, and review flags. That is the fitting paid outcome when the same products will produce customs forms more than once.

Source contract

This guide is based on the checked-in USPS International Labels 4.0 OpenAPI specification reviewed August 25, 2026: InternationalCustomsForm, InternationalShippingContents, ShippingContents, and AESITN. The relevant implementation summary is maintained in the repo’s USPS 3.0 specification catalog. Exporters remain responsible for classification and filing decisions.

Questions

Can I choose CN22 or CP72 in a USPS API request?
No form-selection field exists in the USPS international-label request. USPS generates the customs form from the customs content type and package weight. The caller supplies the shipment and contents facts; USPS chooses the form that prints with the label.
How many customs items can I send in one USPS label request?
The international contents array accepts 1 to 30 items. The first five print on the customs form, and items after the fifth print on a separate continuation page.
Can the item description just say Gift or Merchandise?
No. GIFT and MERCHANDISE are valid values for the package-level customsContentType, but Gift and Merchandise are explicitly invalid as itemDescription values. Describe the actual item in 1 to 30 characters instead.
Is an HS tariff number required?
The field accepts 6 to 14 characters and USPS describes it as strongly recommended for faster processing. If it is omitted, USPS may attempt the lookup itself, which the specification says can increase response time.
Does a small shipment still need an AES value?
The request requires either an AES Internal Transaction Number or an exemption legend in AESITN. The USPS specification gives NO EEI 30.37(a) as the sample exemption for shipments valued at $2,500 or less. Export rules have exceptions, so the sender remains responsible for the correct filing or exemption.