and runs during HTML parse, but hubspotutk is set by js.hs-analytics.net, measured loading at ~834ms. On a first visit the cookie does not exist yet, so a single read returns nothing and the visitor gets no external ID at all — and a first visit is exactly what an ad click is. So poll briefly until HubSpot sets it. The SDK loads lazily (~4.5s) and replays a queue, so an init queued a second or two in still lands before any events are transmitted. */ (function attachExternalId() { var attempts = 0; var MAX_ATTEMPTS = 40; /* 40 x 200ms = 8s, then give up quietly */ var timer = null; function tryAttach() { var raw = getExternalId(); if (!raw) { if (++attempts >= MAX_ATTEMPTS && timer) clearInterval(timer); return; } if (timer) clearInterval(timer); sha256Hex(raw).then(function (hash) { oaiq("init", { user: { external_id_sha256: hash } }); }).catch(function () {}); } tryAttach(); /* returning visitor: immediate */ if (!getExternalId()) timer = setInterval(tryAttach, 200); })(); /* --------------------------------------------------------------------------- 2. Load the SDK off the critical path Whichever comes first: the main thread going idle after load, or the first sign of real user intent. No preconnect on purpose — a TLS handshake during LCP for a script we deliberately deferred is a net loss. Measured on clickpost.ai: load event 3614ms, SDK fetched 4508ms. ------------------------------------------------------------------------ */ var loaded = false; var INTENT = ["pointerdown", "keydown", "scroll"]; function loadSdk() { if (loaded) return; loaded = true; INTENT.forEach(function (t) { removeEventListener(t, loadSdk, { passive: true }); }); var s = document.createElement("script"); s.src = SDK; s.async = true; s.fetchPriority = "low"; document.head.appendChild(s); } INTENT.forEach(function (t) { addEventListener(t, loadSdk, { passive: true, once: true }); }); addEventListener("load", function () { window.requestIdleCallback ? requestIdleCallback(loadSdk, { timeout: 2500 }) : setTimeout(loadSdk, 1500); }, { once: true }); /* --------------------------------------------------------------------------- 3. Conversion id sha256(lowercase(email) + "|" + formId + "|" + ISO-hour), first 20 hex, "lead_" prefix. - email lowercased/trimmed so casing does not fork the id - formId keeps two different forms in the same hour from colliding - the hour bucket is only the server's fallback; the id computed here is sent to the relay verbatim, so the two paths cannot disagree even when a submit straddles an hour boundary Ads Manager's own sample omits event_id. We send it so the pixel event and the relay event collapse into one conversion instead of counting twice. ------------------------------------------------------------------------ */ function buildEventId(email, formId) { var seed = [ String(email || "").trim().toLowerCase(), String(formId || ""), new Date().toISOString().slice(0, 13) ].join("|"); return crypto.subtle.digest("SHA-256", new TextEncoder().encode(seed)).then(function (buf) { var hex = Array.prototype.map.call(new Uint8Array(buf), function (b) { return b.toString(16).padStart(2, "0"); }).join(""); return "lead_" + hex.slice(0, 20); }); } /* Guards a re-fire from the history.pushState that book-a-demo-core.js runs after submit, and from back-navigation onto the same state. */ function firedOnce(id) { try { if (sessionStorage.getItem("oaiq_" + id)) return true; sessionStorage.setItem("oaiq_" + id, "1"); return false; } catch (e) { return false; /* private mode / blocked storage: fire rather than lose it */ } } /* Path 2. keepalive lets the request finish even if the page navigates away. Failures are swallowed deliberately: a reporting call must never surface an error to someone who just submitted a form. The relay hashes the email server-side into user.emails_sha256 and adds the caller's IP and user agent, so this event carries the same match signals the pixel gets for free. */ function sendToRelay(email, formId, eventType, eventId) { try { var payload = { token: RELAY_TOKEN, email: email, form_id: formId || "", event_type: eventType, event_id: eventId, /* verbatim, so both paths always match */ source_url: location.href }; var oppref = getOppref(); if (oppref) payload.oppref = oppref; var externalId = getExternalId(); if (externalId) payload.external_id = externalId; fetch(RELAY_URL, { method: "POST", keepalive: true, headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }).catch(function () {}); } catch (e) {} } /* Capture the email while the form is still on the page. onFormSubmitted does not reliably carry submissionValues, and by then the form may be removed. */ var lastEmail = ""; document.addEventListener("submit", function (e) { var f = e.target; if (!f || !f.querySelector) return; var i = f.querySelector('input[name="email"], input[type="email"]'); if (i && i.value) lastEmail = i.value; }, true); /* Every HubSpot form on the site reports through this one message event, so no module or theme JS needs editing to add coverage. */ window.addEventListener("message", function (e) { var d = e.data; if (!d || d.type !== "hsFormCallback" || d.eventName !== "onFormSubmitted") return; var email = (d.data && d.data.submissionValues && d.data.submissionValues.email) || lastEmail; if (!email) return; /* without an email there is no stable id to dedupe on */ var eventType = EVENT_BY_FORM[d.id] || EVENT_DEFAULT; buildEventId(email, d.id).then(function (id) { if (firedOnce(id)) return; oaiq("measure", eventType, { type: DATA_TYPE }, { event_id: id }); /* path 1 */ sendToRelay(email, d.id, eventType, id); /* path 2 */ }); }); })();

91ÊÓƵ

See where your logistics stands on automation Start assessment

UPS Tracking and API Integration with ClickPost

Integrate UPS with ClickPost for automated tracking and smart shipping solutions. Take control of your logistics today!

ups-integration

Trusted by 600+ global brands

puma
decathlon-logo
nykaa-logo
herbalife-logo
lenskart-logo
dogtra-logo
the-body-shop-logo
Birkenstock-logo
New-Me-logo
palome
Tata-1mg-logo
Adidas-logo
Jackery-logo
Oriflame-logo
Giva-logo
mars-logo
Sotheby-logo
ABFRL-logo
ups-clickpost

Benefits of Connecting with UPS through ClickPost

Leverage the combined strength of UPS and ClickPost to elevate your logistics game. 

  • Unlock end-to-end efficiency with 100% automated logistics workflows. 
  • Streamline your multi-carrier shipping with a universal API that supports 500+ other carriers, along with UPS. 
  • Improve customer NPS by 40% with automated branded tracking. 



Check the integration library

Partner ID Order Creation Cancellation Tracking via Polling Tracking via Webhook Proof of Delivery (POD) Non Delivery Report (NDR) Create Pickup Request AWB Generation Flow Label Generation Country
UPS-svg
UPS
✓ ✓ ✓ ✓ ✓ ✓ ✓ Clickpost Generated India

How to Track UPS Packages

Track UPS Packages with the ClickPost Tracking Page

  • Get the order IDs from UPS. 
  • Head over to ClickPost’s tracking portal.
  • Insert the IDs in the box.
  • Hit “Track” for real-time status updates. 

Track UPS Packages on the Official Page

  • Head to the official tracking portal of UPS. 
  • Enter the tracking numbers in the box. You can add up to 25 tracking numbers at once, each per line. 
  • Hit the “Track” button.
  • The live shipment statuses will be updated on the screen shortly. 

List of UPS APIs

API Description
Manifestation and shipping label generation API Enhance delivery operations by generating bulk shipping and AWB numbers automatically.
Track Shipment API Track and manage shipments across carriers on a unified dashboard.
Cancellation API Easily cancel shipment manifests with this API.
EDD API Show the delivery timelines to shoppers and improve their shopping experience.
NDR Action Update Sync the latest NDR cases with the carriers’ dashboard and take action on them immediately to reduce RTO%.
Return Webhooks Keep track of customer returns and refunds with UPS-integrated webhooks.
API & Description
Manifestation and shipping label generation API
Enhance delivery operations by generating bulk shipping and AWB numbers automatically.
Track Shipment API
Track and manage shipments across carriers on a unified dashboard.
Cancellation API
Easily cancel shipment manifests with this API.
EDD API
Show the delivery timelines to shoppers and improve their shopping experience.
NDR Action Update
Sync the latest NDR cases with the carriers’ dashboard and take action on them immediately to reduce RTO%.
Return Webhooks
Keep track of customer returns and refunds with UPS-integrated webhooks.

Frequently asked questions

Everything you need to know about ClickPost’s Carriers Integration

Can ClickPost integrate seamlessly with UPS’s tracking and shipping APIs for automated logistics?

Yes! ClickPost already comes pre-integrated with UPS’s tracking and shipping APIs and offers a universal API for it. This universal API supports 500+ other carriers along with UPS. It’ll just take a few configuration changes to integrate with this API. Once you connect with this API, you can automatically manage the entire journey of UPS shipments—from order creation and tracking to NDR management and returns management.

What types of tracking updates does ClickPost support when connected to UPS?

After connecting with UPS through ClickPost, merchants will get a unified portal where they can view milestone-specific delivery updates. These mostly include Order Created, Picked Up, In Transit, Out for Delivery, Delivered, etc. They will also get chronological timestamps along with milestone-specific updates. Plus, they will get updates on delivery delays, exceptions, and reattempts.

Is UPS-compatible shipping label generation possible within ClickPost’s unified dashboard?

Of course! After you integrate UPS with ClickPost, you can automatically generate UPS-compatible shipping labels within ClickPost’s dashboard. ClickPost mainly leverages its order manifestation & label generation API to interact with UPS’s platform and auto-generate shipping labels.

How does ClickPost help enterprises track international and domestic UPS deliveries in one place?

ClickPost uses its tracking APIs to directly interact with UPS’s API. It then displays real-time shipment updates on its multi-carrier tracking platform. Once you integrate UPS with ClickPost, every type of UPS shipment—be it UPS Express, Ground, Freight, or international shipments—can all be tracked in one place, along with other carriers.

What is UPS?

UPS is a leading American multinational shipping and supply chain company, founded in 1907. Initially, it was started as an American messenger company, which has now evolved into one of the largest shipping companies in the world. UPS operates a vast domestic network in the U.S. It serves almost every address in 50 cities throughout the United States, including Alaska, Hawaii, and Puerto Rico. Alongside this, UPS is available in 220+ countries around the world. UPS takes care of end-to-end e-commerce supply chain management—inbound receiving, storage & inventory management, picking & packing, shipping, and reverse logistics management. It also offers additional services like multi-channel order fulfillment, weekend delivery, COD solutions, and more. Under the domestic shipping services, UPS offers a range of solutions. These include 2-day shipping, 3-day shipping, next-day shipping, etc. It also offers same-day delivery service for time-sensitive, critical items. Through the UPS Worldwide Express Plus service, merchants can reach their international customers within 1-3 business days. In addition, it also offers standard, day-definite international delivery service. Its freight management services include solutions like air freight, ocean freight, multimodal freight, freight consolidation, etc. Every day, UPS ships ocean freight across 2,300+ lanes. UPS Ground Saver (formerly known as UPS SurePost) is a cost-effective service that has been designed for businesses looking to save on shipping costs. To make shipping and logistics simpler and more efficient, UPS has launched various technology solutions, such as UPS Forwarding Hub, UPS Supply Chain Symphony Portal, Quantum View (shipment tracking & management tool), and more.

Streamline your shipping experience with ClickPost

image (3)-3
. window.disableHubSpotCookieBanner = true; function killNative() { var n = document.getElementById("hs-eu-cookie-confirmation"); if (n && n.parentNode) { n.parentNode.removeChild(n); return true; } return false; } killNative(); if (window.MutationObserver) { var mo = new MutationObserver(function () { killNative(); }); mo.observe(document.documentElement, { childList: true, subtree: true }); setTimeout(function () { mo.disconnect(); }, 15000); } var COOKIE = "cp_cookie_consent"; var EU = ["at","be","bg","hr","cy","cz","dk","ee","fi","fr","de","gr","hu","ie","it","lv","lt","lu","mt","nl","pl","pt","ro","sk","si","es","se","gb","uk","is","li","no","ch"]; function readCookie(nm) { var m = document.cookie.match(new RegExp("(?:^|; )" + nm + "=([^;]*)")); return m ? decodeURIComponent(m[1]) : null; } function writeCookie(nm, val, days) { var d = new Date(); d.setTime(d.getTime() + (days * 864e5)); document.cookie = nm + "=" + encodeURIComponent(val) + ";expires=" + d.toUTCString() + ";path=/;SameSite=Lax" + (location.protocol === "https:" ? ";Secure" : ""); } function stored() { var raw = readCookie(COOKIE); if (!raw) return null; try { var o = JSON.parse(raw); if (typeof o.analytics === "boolean") return o; } catch (e) {} return null; } function apply(state, revoke) { window._hsp = window._hsp || []; window._hsp.push(["setHubSpotConsent", { analytics: !!state.analytics, advertisement: !!state.advertisement, functionality: !!state.functionality }]); if (revoke && !state.analytics && !state.advertisement && !state.functionality) { window._hsp.push(["revokeCookieConsent"]); } window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: "cp_cookie_consent", cp_consent_analytics: !!state.analytics, cp_consent_advertisement: !!state.advertisement, cp_consent_functionality: !!state.functionality }); document.documentElement.setAttribute("data-cp-consent", "set"); } function inScope(banner) { if (banner.getAttribute("data-scope") !== "eu_only") return true; var geo = (document.body.getAttribute("data-geo_location") || "").toLowerCase(); if (!geo) return true; return EU.indexOf(geo) !== -1; } function init(banner) { var days = parseInt(banner.getAttribute("data-days"), 10) || 180; var prefs = banner.querySelector("[data-cpcb-prefs]"); var compact = banner.querySelector('[data-cpcb-actions="compact"]'); var expanded = banner.querySelector('[data-cpcb-actions="expanded"]'); var toggles = banner.querySelectorAll("[data-cpcb-toggle]"); function show() { banner.hidden = false; requestAnimationFrame(function () { banner.classList.add("is-visible"); }); } function hide() { banner.classList.remove("is-visible"); setTimeout(function () { banner.hidden = true; }, 300); } function collapse() { if (!prefs) return; prefs.hidden = true; if (expanded) expanded.hidden = true; if (compact) compact.hidden = false; } function expand() { if (!prefs) return; prefs.hidden = false; if (compact) compact.hidden = true; if (expanded) expanded.hidden = false; } function paint(state) { Array.prototype.forEach.call(toggles, function (t) { var key = t.getAttribute("data-cpcb-toggle"); if (key === "necessary") { t.setAttribute("aria-checked", "true"); return; } t.setAttribute("aria-checked", state[key] ? "true" : "false"); }); } function fromToggles() { var state = { analytics: false, advertisement: false, functionality: false }; Array.prototype.forEach.call(toggles, function (t) { var key = t.getAttribute("data-cpcb-toggle"); if (key in state) state[key] = t.getAttribute("aria-checked") === "true"; }); return state; } function commit(state, revoke) { writeCookie(COOKIE, JSON.stringify({ analytics: !!state.analytics, advertisement: !!state.advertisement, functionality: !!state.functionality, v: 1, ts: Date.now() }), days); apply(state, revoke); hide(); } Array.prototype.forEach.call(toggles, function (t) { if (t.disabled) return; t.addEventListener("click", function () { t.setAttribute("aria-checked", t.getAttribute("aria-checked") === "true" ? "false" : "true"); }); }); banner.addEventListener("click", function (e) { if (!e.target || !e.target.closest) return; var btn = e.target.closest("[data-cpcb-action]"); if (!btn) return; var action = btn.getAttribute("data-cpcb-action"); if (action === "customise") { expand(); return; } if (action === "accept") { commit({ analytics: true, advertisement: true, functionality: true }, false); return; } if (action === "reject") { commit({ analytics: false, advertisement: false, functionality: false }, true); return; } if (action === "save") { commit(fromToggles(), true); return; } }); var existing = stored(); if (existing) { apply(existing, false); paint(existing); collapse(); } else if (!inScope(banner)) { // Out of the consent-required region: implied consent, banner never shown. commitSilently(); } else { collapse(); show(); } function commitSilently() { var all = { analytics: true, advertisement: true, functionality: true }; writeCookie(COOKIE, JSON.stringify({ analytics: true, advertisement: true, functionality: true, v: 1, ts: Date.now(), implied: true }), days); apply(all, false); } // Public re-open hook for a footer "Cookie settings" link. window.cpCookieBanner = window.cpCookieBanner || {}; window.cpCookieBanner.open = function () { var s = stored() || { analytics: false, advertisement: false, functionality: false }; paint(s); expand(); show(); }; } function boot() { var banners = document.querySelectorAll("[data-cpcb]"); if (!banners.length) return; init(banners[0]); document.addEventListener("click", function (e) { if (!e.target || !e.target.closest) return; var trigger = e.target.closest("[data-cp-cookie-settings]"); if (!trigger) return; e.preventDefault(); if (window.cpCookieBanner && window.cpCookieBanner.open) window.cpCookieBanner.open(); }); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", boot); } else { boot(); } })();