Skip to content
· 15 min read · Reference

USPS Web Tools to v3 REST API:
Complete Endpoint Mapping

USPS retired the Web Tools XML API on January 25, 2026. Every XML endpoint now has a REST equivalent. This is the definitive mapping reference — bookmark it, share it with your team, and stop guessing which v3 route replaces your legacy call.

Master Endpoint Mapping

Every Web Tools XML API and its v3 REST equivalent. Method colors: GET for reads, POST for writes.

Address APIs

Web Tools XML API v3 REST Endpoint Method Notes
AddressValidateRequest /addresses/v3/address GET DPV data now included by default
CityStateLookupRequest /addresses/v3/city-state GET ZIP lookup included
ZipCodeLookupRequest /addresses/v3/zipcode GET Returns ZIP+4

Tracking APIs

Web Tools XML API v3 REST Endpoint Method Notes
TrackFieldRequest /tracking/v3/tracking/{trackingId} GET Real-time events, no XML parsing
TrackConfirmRequest /tracking/v3/tracking/{trackingId} GET Unified endpoint — same as TrackField

Shipping & Label APIs

Web Tools XML API v3 REST Endpoint Method Notes
eVS (Express Mail) /labels/v3/label POST Requires Payment Authorization token
eVS (Priority Mail) /labels/v3/label POST Same endpoint, different mailClass
eVS (Ground Advantage) /labels/v3/label POST New class, replaces First Class Package
eVS (Cancel) /labels/v3/label/{trackingId} DELETE Void within 24 hours of creation

Pricing APIs

Web Tools XML API v3 REST Endpoint Method Notes
RateV4Request /prices/v3/base-rates/search POST JSON body replaces XML envelope
IntlRateV2Request /international-prices/v3/base-rates/search POST International pricing, same pattern

Service Standards & Locations

Web Tools XML API v3 REST Endpoint Method Notes
SDCGetLocationsRequest /service-standards/v3/estimates GET Delivery estimates by origin/destination
POLocatorRequest /locations/v3/post-offices GET Find post offices by ZIP or coordinates

Authentication: Before & After

Web Tools embedded a plain-text USERID in every XML request body. No scopes, no expiry, no rotation. The v3 API uses standard OAuth 2.0 client credentials — tokens expire after 8 hours and support granular scopes.

Before — Web Tools Auth
<!-- Auth embedded in every XML request -->
POST https://secure.shippingapis.com
  /ShippingAPI.dll?API=Verify

<AddressValidateRequest
  USERID="YOUR_USERID">
  <Address>
    <Address1>Apt 2</Address1>
    <Address2>1600 Pennsylvania Ave</Address2>
  </Address>
</AddressValidateRequest>

<!-- USERID in plain text. No expiry.
     No scopes. No rotation. -->
After — OAuth 2.0
// Step 1: Get OAuth token (valid 8 hours)
POST https://apis.usps.com/oauth2/v3/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET
&scope=addresses tracking prices labels

// Step 2: Use Bearer token in header
GET /addresses/v3/address
Authorization: Bearer {access_token}

// Scoped. Rotatable. Standard OAuth 2.0.

Key Gotchas

These are the migration landmines that don't show up in USPS's own documentation. Every one of these has broken a production system.

01 Rate Limits: 60 req/hr

Web Tools had no documented rate limit — developers grew accustomed to unlimited calls. The v3 API caps at 60 requests per hour by default. That's 1 request per minute. A single e-commerce store doing 50 orders/day will blow through this during peak hours. You can request an increase, but plan for the constraint from day one.

02 Payment Authorization: Two-Token Dance

Label creation is the only endpoint that requires two authorization tokens: your standard OAuth Bearer token plus a separate Payment Authorization token tied to your CRID and MID. Miss this and you'll get a cryptic 401 even with a valid Bearer token.

Payment Authorization — Two-Token Flow
// Label creation requires TWO tokens:

// 1. Standard OAuth token (addresses, tracking, prices)
POST /oauth2/v3/token
  grant_type=client_credentials
  scope=addresses tracking prices

// 2. Payment Authorization token (labels only)
POST /payment-authorization/v3/payment-token
  Authorization: Bearer {standard_token}
  {
    "roles": [
      { "roleName": "PAYER",
        "CRID": "YOUR_CRID",
        "MID": "YOUR_MID" }
    ]
  }

// 3. Create label with BOTH tokens
POST /labels/v3/label
  Authorization: Bearer {standard_token}
  X-Payment-Authorization: {payment_token}

03 Address1/Address2 Semantics Are REVERSED

This is the single most common migration bug. In Web Tools XML, Address1 was the secondary line (apartment, suite) and Address2 was the primary street address. The v3 API uses sane naming: streetAddress for primary, secondaryAddress for secondary.

Field Mapping — Don't Get This Wrong
// Web Tools XML (REVERSED semantics)
<Address1>Apt 2</Address1>         ← secondary
<Address2>1600 Penn Ave</Address2>  ← primary street

// v3 REST JSON (correct semantics)
{
  "streetAddress": "1600 Penn Ave",   ← primary
  "secondaryAddress": "Apt 2"        ← secondary
}

// If you map Address1 → streetAddress, every
// apartment number becomes the street. Ask us
// how we know.

04 No More XML Entities or CDATA

Web Tools required URL-encoding of special characters and wrapping values in CDATA sections. The v3 API is standard JSON — & becomes &, < becomes <, and there's no CDATA to think about. If your parsing layer is stripping XML entities, you'll get garbled addresses on v3.

05 New Base URLs

Environment Web Tools v3 REST
Production secure.shippingapis.com apis.usps.com
Testing stg-secure.shippingapis.com apis-tem.usps.com

06 One Endpoint, Many Query Params

Web Tools used a different API name for each operation (?API=Verify, ?API=CityStateLookup), but they all hit the same ShippingAPI.dll. The v3 API uses proper REST routes — each resource gets its own path. Don't try to build a router based on the old API parameter; map each to its dedicated v3 endpoint.

Quick Reference: Field Name Changes

Beyond the endpoint mapping, many field names changed between Web Tools XML and v3 JSON. Here are the most-used fields:

Web Tools XML Field v3 REST JSON Field Watch Out
Address1 secondaryAddress Semantics reversed
Address2 streetAddress Semantics reversed
Zip5 ZIPCode Capital ZIP
Zip4 ZIPPlus4 Capital ZIP, Plus4 suffix
FirmName firm Simplified
DPVConfirmation DPV (nested object) Now includes footnotes inline
USERID (attribute) Authorization header Not in body anymore

How RevAddress Handles This

RevAddress wraps all v3 endpoints with production-grade infrastructure — so you don't have to build the OAuth token management, rate limit handling, and caching yourself.

  • 37 routes mapped — every v3 endpoint wrapped with validation, caching, and error normalization
  • OAuth abstracted — tokens cached, refreshed proactively 30 minutes before expiry, Payment Auth handled automatically
  • Rate limits managed — request queuing, burst smoothing, and automatic retry with exponential backoff
  • BYOK support — bring your own USPS credentials to use your rate limit increase, with AES-GCM encryption at rest

Open-source SDKs handle the client-side integration: Python (PyPI) and Node.js (npm).

Done mapping endpoints?

RevAddress handles the endpoint mapping, token management, rate limits, and caching. Get a REST API key and call USPS v3 in 5 minutes.