UPS API: Track package
Tracks a UPS package by tracking number, with its status, delivery details and shipment history when available.
Unofficial. Not affiliated with or endorsed by UPS.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Tracking Number, required
tracking_number UPS tracking number, with or without spaces, for example 1Z999AA10123456784.
1Z999AA10123456784
Input as JSON
{ "tracking_number": "1Z999AA10123456784"}Output
{ "origin": "Germany", "status": "Delivered", "weight": null, "history": [ { "location": "LONGVIEW, TX, US", "date_time": "2025-12-05T10:29:38-06:00", "description": "DELIVERED" }, { "location": "Longview, TX, United States", "date_time": "2025-12-05T10:20:03-06:00", "description": "Out For Delivery Today" }, { "location": "Longview, TX, United States", "date_time": "2025-12-05T09:26:36-06:00", "description": "Processing at UPS Facility" } ], "left_at": "Other", "destination": "LONGVIEW, TX, US", "delivered_at": "2025-12-05T10:29:38-06:00", "service_type": "UPS Express™ 12:00", "tracking_link": "https://www.ups.com/track?loc=en_US&tracknum=1Z999AA10123456784" , "tracking_number": "1Z999AA10123456784", "scheduled_delivery_date": null, "scheduled_delivery_window_end": null, "scheduled_delivery_window_start": null}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"ups.com/track_package","input":{"tracking_number":"1Z999AA10123456784"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "ups.com/track_package" , "input": { "tracking_number": "1Z999AA10123456784" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "ups.com/track_package" , "input": { "tracking_number": "1Z999AA10123456784" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run ups.com/track_package# with {"tracking_number":"1Z999AA10123456784"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "tracking_number" ], "properties": { "tracking_number": { "type": "string", "description": "UPS tracking number, with or without spaces, for example 1Z999AA10123456784." } }}Output schema
{ "type": "object", "required": [ "tracking_number", "status", "scheduled_delivery_date", "scheduled_delivery_window_start", "scheduled_delivery_window_end", "delivered_at", "left_at", "service_type", "origin", "destination", "weight", "history", "tracking_link" ], "properties": { "origin": { "type": [ "string", "null" ] }, "status": { "type": "string" }, "weight": { "type": [ "string", "null" ] }, "history": { "type": "array", "items": { "type": "object", "required": [ "date_time", "location", "description" ], "properties": { "location": { "type": [ "string", "null" ] }, "date_time": { "type": [ "string", "null" ], "format": "date-time" }, "description": { "type": "string" } }, "additionalProperties": false } }, "left_at": { "type": [ "string", "null" ] }, "destination": { "type": [ "string", "null" ] }, "delivered_at": { "type": [ "string", "null" ], "format": "date-time" }, "service_type": { "type": [ "string", "null" ] }, "tracking_link": { "type": "string" }, "tracking_number": { "type": "string" }, "scheduled_delivery_date": { "type": [ "string", "null" ], "format": "date" }, "scheduled_delivery_window_end": { "type": [ "string", "null" ], "format": "date-time" }, "scheduled_delivery_window_start": { "type": [ "string", "null" ], "format": "date-time" } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
ups.com/track_package- Returns
- tracking number, status, scheduled delivery, delivered time, left at, service, origin, destination, weight, history, tracking link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method ups.com/track_package with the inputs above.
Ask your agent
- Where is my package 1Z8V92A40342187635 right now?
- Can you check the UPS status for tracking number 1Z 4F7 E31 03 9182 5527 and tell me when it's supposed to arrive?
- Was shipment 1ZA6W1150367720419 delivered yet, and if so, where was it left?
- Pull the full scan history and origin/destination for 1Z2X38R90198456023 on ups.com
- I need the service level, weight, and expected delivery date for UPS tracking 1Z05E7Y20427319846
See more
Estimates domestic USPS Post Office retail postage between two ZIP Codes for a letter, large envelope, package or flat-rate packaging, by weight and mailing date. Media Mail is left out; a zero-weight letter counts as one ounce. Prices are retail, cheapest first, with each service's estimated delivery.
usps.com/estimate_postageTracks a Maersk ocean container or shipment by container, bill of lading or booking number. Returns container milestones, vessel details and estimated arrival, with times in the local time of each location when its time zone can be identified.
maersk.com/track_containerLooks up a NuGet package by name or nuget.org link. Inexact names match the top search result. Returns the latest stable release's details and the 10 most recent versions, including prereleases.
nuget.org/get_packageGets a PyPI package's current version, release date, metadata, project links and its 10 most recently published versions from a package name or PyPI link.
pypi.org/get_packageChecks a flight's public status and times on Flightradar24 by flight number and the departure date at the origin airport.
flightradar24.com/check_flight_statusLooks up a public npm package by name or npm link. Returns its latest version, weekly downloads, maintainers, links, dates and version count.
npmjs.com/get_packageFinds OfferUp items for sale near a US city or ZIP code, with prices, condition, seller names, distance and links. Distances use approximate listing locations.
offerup.com/search_listingsChecks in-store pickup availability for an exact Apple product configuration (name or part number) near a ZIP, postal code or city, listing nearby Apple Stores by distance with their pickup messages. No reservation is made.
apple.com/check_store_pickup