POST to /v2/carrier_accounts/register with type 'UpsAccount'; EasyPost will initiate the UPS OAuth handshake — do not pass raw UPS credentials directly
Complete the UPS OAuth consent redirect returned in the response to authorize EasyPost as a delegate; store the returned carrier_account id
Retrieve available CarrierTypes via GET /v2/carrier_types to confirm 'UpsAccount' fields schema before creating additional accounts
Issue a test rate request referencing the new carrier_account id to confirm negotiated rates are being returned rather than EasyPost's default rates
For FedEx accounts created after March 1 2026, use the FedEx MFA flow documented under carrier-specific guides — the standard credential fields are no longer accepted for new FedEx connections
Known gotchas
EasyPost migrated existing UPS accounts to OAuth bridge before the June 2024 UPS deadline; any new UPS account must go through the OAuth consent flow — legacy username/password fields are rejected
The carrier_account id is required in the carrier_accounts array on every Shipment object to bill against your negotiated rates; omitting it falls back to EasyPost's shared rates
FedEx MFA is required for all new FedEx connections as of March 2026; consult the EasyPost FedEx guide for the current multi-step authorization sequence
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