UPS Integration
Connect your UPS account to generate shipping labels and track packages from the Fulfillment module.
Overview
The UPS integration enables:
- Shipping label generation (Ground, 2-Day, Next Day)
- Rate shopping across service levels
- Automatic tracking updates
- Address validation
- Return label creation
Prerequisites
- UPS account with API access
- UPS Developer Kit credentials
- PROIGN tenant with Fulfillment module enabled
- Admin or owner role in PROIGN
Setup Steps
1. Get UPS API Credentials
- Go to UPS Developer Portal
- Sign in with your UPS account
- Create a new application
- Select APIs: Rating, Shipping, Tracking, Address Validation
- Note your Client ID and Client Secret
- Also note your UPS Account Number
2. Configure in PROIGN
- Go to Fulfillment → Settings → Shipping
- Click "Add Carrier" → "UPS"
- Enter your credentials:
| Field | Description |
|---|---|
| Client ID | From UPS Developer Portal |
| Client Secret | From UPS Developer Portal |
| Account Number | Your 6-digit UPS shipper number |
| Mode | Sandbox (testing) or Production |
3. Set Ship From Address
Configure your warehouse/origin address:
- Company name
- Street address (line 1 & 2)
- City, State, ZIP
- Phone number
- Contact name
Supported Services
| Service Code | Service Name |
|---|---|
03 | UPS Ground |
02 | UPS 2nd Day Air |
59 | UPS 2nd Day Air AM |
01 | UPS Next Day Air |
13 | UPS Next Day Air Saver |
14 | UPS Next Day Air Early |
Creating Shipments
Generate labels from the Fulfillment module or via API:
POST /api/[tenant]/orders/[id]/ship
{
"carrier": "ups",
"service": "03",
"package": {
"weight": 5.5,
"weight_unit": "LB",
"dimensions": {
"length": 12,
"width": 8,
"height": 6,
"unit": "IN"
}
},
"signature_required": false,
"saturday_delivery": false
}Label Options
| Option | Description |
|---|---|
| Label Format | PDF, ZPL (thermal), PNG |
| Label Size | 4x6" (default), 4x8" |
| Signature Required | Adult signature, indirect signature |
| Declared Value | For insurance purposes |
| Reference Fields | Up to 3 custom references |
Rate Shopping
Get rates for all available services:
POST /api/[tenant]/shipping/rates
{
"origin_zip": "75001",
"destination_zip": "90210",
"weight": 5.5,
"dimensions": {
"length": 12,
"width": 8,
"height": 6
}
}
// Response
{
"rates": [
{ "service": "03", "name": "UPS Ground", "price": 12.50, "days": 5 },
{ "service": "02", "name": "UPS 2nd Day Air", "price": 24.75, "days": 2 },
{ "service": "01", "name": "UPS Next Day Air", "price": 45.00, "days": 1 }
]
}Tracking
Tracking updates are fetched automatically. You can also query tracking status:
GET /api/[tenant]/shipments/[id]/tracking
// Response
{
"tracking_number": "1Z999AA10123456784",
"status": "in_transit",
"estimated_delivery": "2024-01-18",
"events": [
{
"timestamp": "2024-01-15T14:30:00Z",
"location": "Dallas, TX",
"description": "Departed from facility"
},
{
"timestamp": "2024-01-15T08:00:00Z",
"location": "Dallas, TX",
"description": "Package received"
}
]
}Voiding Shipments
Cancel a shipment before pickup:
POST /api/[tenant]/shipments/[id]/void
Note: Shipments can only be voided before UPS scans the package.
Troubleshooting
Invalid Address Errors
- Enable address validation in settings
- Check ZIP code matches city/state
- Ensure address format is correct
Authentication Errors
- Verify Client ID and Secret are correct
- Check account is in good standing with UPS
- Ensure you're using correct environment (sandbox vs production)
Rate Errors
- Verify package dimensions are within limits
- Check destination is serviceable
- Ensure account has negotiated rates set up