Skip to main content

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

  1. Go to UPS Developer Portal
  2. Sign in with your UPS account
  3. Create a new application
  4. Select APIs: Rating, Shipping, Tracking, Address Validation
  5. Note your Client ID and Client Secret
  6. Also note your UPS Account Number

2. Configure in PROIGN

  1. Go to Fulfillment → Settings → Shipping
  2. Click "Add Carrier" → "UPS"
  3. Enter your credentials:
FieldDescription
Client IDFrom UPS Developer Portal
Client SecretFrom UPS Developer Portal
Account NumberYour 6-digit UPS shipper number
ModeSandbox (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 CodeService Name
03UPS Ground
02UPS 2nd Day Air
59UPS 2nd Day Air AM
01UPS Next Day Air
13UPS Next Day Air Saver
14UPS 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

OptionDescription
Label FormatPDF, ZPL (thermal), PNG
Label Size4x6" (default), 4x8"
Signature RequiredAdult signature, indirect signature
Declared ValueFor insurance purposes
Reference FieldsUp 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

Related