POST /v2/customs_infos with a JSON body containing 'eel_pfc' (Electronic Export License or Proof of Filing Citation, e.g., 'NOEEI 30.37(a)'), 'customs_certify' (boolean), 'customs_signer' (name), 'contents_type' (e.g., 'merchandise', 'gift', 'returned_goods'), 'restriction_type' (e.g., 'none'), and 'customs_items' (array).
Each customs item in the array should include 'description', 'quantity', 'weight', 'value', 'origin_country', and 'hs_tariff_number' (Harmonized System code).
POST /v2/customs_items for each line item first if you want reusable item objects, then reference their IDs in the customs_info 'customs_items' array.
When creating the shipment, pass the customs_info ID as 'customs_info' in the shipment POST body; EasyPost attaches it automatically when generating the international label.
The resulting label for international shipments includes a CN22 or CN23 customs form or a commercial invoice depending on carrier and destination country requirements.
Known gotchas
HS tariff codes must be valid for the destination country — incorrect codes can cause customs delays or fines, and the carrier API may not validate them at label creation time.
The 'eel_pfc' field is required for shipments from the US that may require EEI filing; using an incorrect exemption code for a controlled commodity is a legal violation, not just an API error.
'customs_certify' must be true to produce a valid customs declaration; setting it to false may generate a label but could cause customs rejection.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp