UPS icon

UPS mobile data API: tracking, rates, and claims

UPS · Transport

The UPS app (version 10.34.1.8) signs in with a Bearer access token, then serves tracking, rating and claims over JSON. The home list loads from /v1/shipments/home; package pages call /v1/shipments/{trackingNumber} for scan activity, declared value and ship-to fields.

The ship flow posts /v1/rates/quotes and reads ratedShipment.totalCharges. Claims start at /v1/claims/{trackingNumber}/eligibility (isEligible, maximumPaymentAmount) and submit through /v1/claims/{claim_type}. Saved tracking nicknames load from /v1/shipments/history.

UPS (package com.ups.mobile.android, versionName 10.34.1.8) is United Parcel Service's Android client for tracking inbound and outbound packages, quoting rates, creating labels, managing UPS My Choice enrollments, and filing claims. Signed-in calls use a Bearer access token issued by the app's account token service. The home screen hydrates from a shipment list call whose trackTab and deliveredTab rows carry trackingNumber, milestoneCode, currentStatusDescription and shipToAddress. Package pages load a tracking detail view with scan activity, shipFrom/shipTo fields, declaredValueAmount and deliveryDetailDate. The ship flow posts a rate quote and reads ratedShipment.totalCharges, including negotiatedRateCharges when the profile has a shipperNumber. Claims gate on an eligibility check (isEligible, maximumPaymentAmount, accountNumber) before a damage or loss submission returns claimNumber and status, and a saved-history call returns the user's inquiryNumber nicknames.

Screenshots

  • UPS screenshot 1
  • UPS screenshot 2
  • UPS screenshot 3
  • UPS screenshot 4
  • UPS screenshot 5
  • UPS screenshot 6
  • UPS screenshot 7

API surface

  • List homepage shipments

    GET /v1/shipments/home opendata

    Returns the signed-in home trackTab and deliveredTab lists (trackingNumber, milestone, status, ship-to address, delivery window) used by the UPS home screen and widgets.

    Auth: Bearer access token issued by the app's account token service (Authorization: Bearer). Guest track-by-number still works without a UPS profile.

    • trackTab
    • deliveredTab
    • trackingNumber
    • milestoneCode
    • milestoneDescription
    • currentStatusCode
    • currentStatusDescription
    • shipToAddress
    • addressLine
    • city
    • stateProvinceCode
    • postalCode
    • countryCode
    • lastActivityDateTime
    • displayDateValue
    • deliveryLocation
    • shipFromName
    • nickName
    • consolidatedDcoEligibility

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/shipments/home HTTP/1.1
    Authorization: Bearer <accessToken>
    Accept: application/json
    {
      "response": {"statusCode": "1"},
      "trackTab": [{
        "trackingNumber": "1Z999AA10123456784",
        "milestoneCode": "I",
        "milestoneDescription": "In Transit",
        "currentStatusCode": "I",
        "currentStatusDescription": "On the way",
        "shipToAddress": {
          "name": "Alex Rivera",
          "attentionName": "Receiving",
          "type": "DESTINATION",
          "address": {
            "addressLine": ["55 Glenlake Pkwy NE"],
            "city": "Atlanta",
            "stateProvinceCode": "GA",
            "postalCode": "30328",
            "countryCode": "US"
          }
        },
        "lastActivityDateTime": "2026-09-25T14:22:00Z",
        "displayDateValue": "Thu, Sep 26",
        "displayTimeValue": "By 8:00 PM",
        "deliveryDateType": "SCHEDULED",
        "deliveryLocation": "Front door",
        "shipFromName": "Acme Warehouse",
        "nickName": "Office monitors",
        "type": "1Z",
        "isHidden": false,
        "consolidatedDcoEligibility": true,
        "securityCodeEligible": false
      }],
      "deliveredTab": []
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the app's home screen shipment list and widget feed.
    • Field set matches the track and delivered tabs rendered for a signed-in account.
  • Get tracking details

    GET /v1/shipments/{trackingNumber} opendata

    Hydrates the Track Details screen: current status, service level, declared value, ship-from/ship-to address parts, and the activity scan timeline.

    Auth: Bearer access token issued by the app's account token service. Public tracking-number lookup is allowed; delivery-change and claims fields need a signed-in UPS ID.

    • trackingNumber
    • currentStatusCode
    • currentStatusDescription
    • serviceLevelCode
    • serviceLevelDescription
    • packageWeight
    • declaredValueAmount
    • declaredValueCurrencyCode
    • deliveryDetailDate
    • deliveryDetailTime
    • signedForByName
    • leaveAtLocation
    • shipFromCity
    • shipFromPostalCode
    • shipToCity
    • shipToPostalCode
    • activity
    • activityCode
    • description
    • gmtDate

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/shipments/1Z999AA10123456784 HTTP/1.1
    Authorization: Bearer <accessToken>
    Accept: application/json
    {
      "trackingNumber": "1Z999AA10123456784",
      "currentStatusCode": "I",
      "currentStatusDescription": "On the way",
      "serviceLevelCode": "03",
      "serviceLevelDescription": "UPS Ground",
      "brandedServiceLevelCode": "GND",
      "brandedServiceLevelDescription": "Ground",
      "packageWeight": "12.4",
      "packageWeightUnits": "LBS",
      "declaredValueAmount": "250.00",
      "declaredValueCurrencyCode": "USD",
      "deliveryDetailDate": "20260926",
      "deliveryDetailTime": "200000",
      "deliveryDetailTypeCode": "DEL",
      "signedForByName": "",
      "leaveAtLocation": "Front Door",
      "shipFromCity": "Louisville",
      "shipFromStateProvinceCode": "KY",
      "shipFromPostalCode": "40213",
      "shipFromCountryCode": "US",
      "shipFromCompanyName": "Acme Warehouse",
      "shipToCity": "Atlanta",
      "shipToStateProvinceCode": "GA",
      "shipToPostalCode": "30328",
      "shipToCountryCode": "US",
      "activity": [{
        "activityCode": "OR",
        "description": "Origin Scan",
        "city": "Louisville",
        "stateProvinceCode": "KY",
        "postalCode": "40213",
        "countryCode": "US",
        "displayDate": "09/24/2026",
        "displayTime": "6:14 PM",
        "gmtDate": "20260924",
        "gmtTime": "221400"
      }]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the app's track details screen and its scan activity timeline.
    • Reflects the status, service-level, declared-value and address blocks on that screen.
  • Quote shipment rates

    POST /v1/rates/quotes openfinance

    Returns ratedShipment quotes (transportationCharges, totalCharges, negotiatedRateCharges, time-in-transit) for the ship-services picker.

    Auth: Bearer access token issued by the app's account token service. NegotiatedRateCharges appear when the profile has a shipperNumber.

    • rateRequest
    • shipment
    • shipFrom
    • shipTo
    • shipmentPackage
    • pickUpDate
    • shipperNumber
    • ratedShipment
    • code
    • description
    • billingWeight
    • transportationCharges
    • baseServiceCharge
    • totalCharges
    • currencyCode
    • monetaryValue
    • negotiatedRateCharges
    • guaranteedDelivery

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/rates/quotes HTTP/1.1
    Authorization: Bearer <accessToken>
    Content-Type: application/json
    
    {
      "rateRequest": {
        "shipment": {
          "shipFrom": {"city": "Atlanta", "stateProvinceCode": "GA", "postalCode": "30328", "countryCode": "US"},
          "shipTo": {"city": "New York", "stateProvinceCode": "NY", "postalCode": "10001", "countryCode": "US"},
          "shipmentPackage": {
            "packagingType": {"code": "02"},
            "packageWeight": {"unitOfMeasurement": {"code": "LBS"}, "weight": "5.0"},
            "dimensions": {"unitOfMeasurement": {"code": "IN"}, "length": "12", "width": "8", "height": "4"}
          },
          "pickUpDate": "20260926",
          "shipperNumber": "A1B2C3",
          "promoAliasCode": "",
          "estimatedQuote": true,
          "service": {"code": "03"}
        }
      }
    }
    {
      "ratedShipment": [{
        "service": {"code": "03", "description": "UPS Ground"},
        "billingWeight": {"unitOfMeasurement": {"code": "LBS"}, "weight": "5.0"},
        "transportationCharges": {"currencyCode": "USD", "monetaryValue": "14.82"},
        "baseServiceCharge": {"currencyCode": "USD", "monetaryValue": "12.40"},
        "serviceOptionsCharges": {"currencyCode": "USD", "monetaryValue": "0.00"},
        "totalCharges": {"currencyCode": "USD", "monetaryValue": "14.82"},
        "negotiatedRateCharges": {"totalCharge": {"currencyCode": "USD", "monetaryValue": "11.10"}},
        "guaranteedDelivery": {"businessDaysInTransit": "2"},
        "timeInTransit": {"serviceSummary": {"estimatedArrival": {"date": "20260929", "time": "230000"}}},
        "upSellTag": ""
      }],
      "alert": [],
      "response": null
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the app's ship flow service-and-price picker.
    • Field set matches the per-service charge cards shown before label creation.
  • Check claim eligibility

    GET /v1/claims/{trackingNumber}/eligibility openfinance

    Gates the Create Claim flow: whether the package can be filed, shipper accountNumber, maximumPaymentAmount, and currency.

    Auth: Bearer access token issued by the app's account token service. Requires the UPS profile that shipped or received the package.

    • isEligible
    • isUpsStoreAccount
    • isRedirect
    • isSppPhotoExists
    • shipperDefaultCurrency
    • maximumPaymentAmount
    • accountNumber
    • accountCountry
    • shipmentData
    • eligibilityMessages

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/claims/1Z999AA10123456784/eligibility HTTP/1.1
    Authorization: Bearer <accessToken>
    Accept: application/json
    {
      "isEligible": true,
      "isUpsStoreAccount": false,
      "isRedirect": false,
      "isSppPhotoExists": true,
      "shipperDefaultCurrency": "USD",
      "maximumPaymentAmount": 100.0,
      "accountNumber": "A1B2C3",
      "accountCountry": "US",
      "shipmentData": {
        "trackingNumber": "1Z999AA10123456784",
        "serviceLevelDescription": "UPS Ground"
      },
      "eligibilityMessages": []
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the app's create-claim gate that runs before the claim form opens.
    • Reflects the eligibility flags and payout cap shown to the shipper.
  • Submit a package claim

    POST /v1/claims/{claim_type} openfinance

    Creates a damage or loss claim and returns claimNumber, claimId, registrationID and status for the claims dashboard.

    Auth: Bearer access token issued by the app's account token service. Claim type in the path is damage or loss after the eligibility check succeeds.

    • trackingNumber
    • iobb
    • endUserIP
    • claimRequesterType
    • claimType
    • accountNumber
    • accountCountry
    • phoneNumber
    • claimNumber
    • claimId
    • registrationID
    • status
    • message
    • transId

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/claims/damage HTTP/1.1
    Authorization: Bearer <accessToken>
    Content-Type: application/json
    
    {
      "trackingNumber": "1Z999AA10123456784",
      "iobb": "N",
      "endUserIP": "203.0.113.10",
      "claimRequesterType": "SHIPPER",
      "claimType": "DAMAGE",
      "accountNumber": "A1B2C3",
      "accountCountry": "US",
      "phoneNumber": "4045550100",
      "shipFromAddress": {"city": "Louisville", "stateProvinceCode": "KY", "postalCode": "40213", "countryCode": "US"},
      "shipToAddress": {"city": "Atlanta", "stateProvinceCode": "GA", "postalCode": "30328", "countryCode": "US"}
    }
    {
      "claimNumber": "CLM-2026-88421",
      "claimId": "c8f1e2a0-4b11-4d22-9c33-11aa22bb33cc",
      "trackingNumber": "1Z999AA10123456784",
      "registrationID": "REG-441902",
      "accountNumber": "A1B2C3",
      "status": "SUBMITTED",
      "message": "Claim accepted",
      "transId": "trx-9f2c"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the app's damage and loss claim submission flow.
    • Field set matches the confirmation screen's claim number and status.
  • Retrieve saved track history

    POST /v1/shipments/history opendata

    Loads the signed-in user's saved tracking list (inquiryNumber, nickname, lastTrackedTimeStamp, status) used by Track History and nickname save/delete.

    Auth: Bearer access token issued by the app's account token service. Bound to the UPS ID that saved the inquiryNumber list.

    • request
    • userData
    • updateNicknameOnlyIndicator
    • trackHistoryData
    • inquiryNickname
    • inquiryNumber
    • lastTrackedTimeStamp
    • statusCode
    • statusDescription

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/shipments/history HTTP/1.1
    Authorization: Bearer <accessToken>
    Content-Type: application/json
    
    {
      "request": {"requestAction": "Retrieve"},
      "userData": {"userId": "ups-uuid-4419"},
      "updateNicknameOnlyIndicator": "N"
    }
    {
      "trackHistoryData": [{
        "inquiryNickname": "Office monitors",
        "inquiryNumber": "1Z999AA10123456784",
        "lastTrackedTimeStamp": "2026-09-25T14:22:00Z",
        "statusCode": "I",
        "statusDescription": "In Transit"
      }],
      "response": {"statusCode": "1"}
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the app's saved tracking list with nickname editing.
    • Reflects the per-number nickname, last-tracked time and status rows.

Data categories

  • shipment tracking
  • delivery status
  • shipping rates
  • claims
  • saved track history
  • ship-to addresses

Where teams use this data

  • Inbound exception desk

    A receiving desk polls the shipment list and tracking detail calls to flag delayed milestoneCode values, compare deliveryDetailDate against PO due dates, and open a claim when isEligible is true.

  • Landed-cost quoting

    A checkout service posts origin/destination and packageWeight to the rate quote call and stores totalCharges.monetaryValue plus negotiatedRateCharges for the shipperNumber on the order.

  • Claims intake from WMS

    When a warehouse marks a carton damaged, it runs the eligibility check, then submits a damage claim with trackingNumber, claimType DAMAGE and accountNumber, and files claimNumber back onto the ASN.

  • Nickname sync for shared mailrooms

    A mailroom app retrieves the saved track history, maps inquiryNickname onto inquiryNumber, and hides packages the front desk already processed using lastTrackedTimeStamp and statusCode.

Frequently asked questions

Which UPS call lists packages on the home screen?

GET /v1/shipments/home returns trackTab and deliveredTab arrays. Each item carries trackingNumber, milestoneCode, currentStatusDescription, shipToAddress, lastActivityDateTime and nickName.

How does the UPS app quote a shipment?

POST /v1/rates/quotes with shipment origin/destination, package weight and dimensions, pickup date and shipperNumber. The ratedShipment list returns transportationCharges, totalCharges and negotiatedRateCharges as currencyCode plus monetaryValue.

Can you file a UPS claim from the same API surface?

Yes. GET /v1/claims/{trackingNumber}/eligibility reports isEligible and maximumPaymentAmount. POST /v1/claims/{claim_type} then returns claimNumber, claimId and status.

Where are saved tracking numbers stored?

POST /v1/shipments/history returns trackHistoryData rows of inquiryNumber, inquiryNickname, lastTrackedTimeStamp, statusCode and statusDescription for the signed-in UPS ID.

Topics

  • UPS API
  • UPS tracking API
  • UPS shipment rating
  • UPS claims API
  • UPS My Choice
  • package tracking api
  • inquiryNumber
  • ratedShipment
  • shipping rates api

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

Get a quote