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 */
});
});
})();
Centralize DHL shipping operations with ClickPost’s unified logistics platform for real-time tracking, automated workflows, and improved delivery visibility across domestic and international shipments.
Trusted by 600+ global brands
Benefits of Connecting with DHL through ClickPost
Connecting DHL with ClickPost enables brands to achieve:
40% reduction in RTOs with automated NDR management and delivery exception handling.
47% higher NPS by improving the post-purchase customer experience.
31% faster deliveries through intelligent carrier allocation and performance monitoring.
Track DHL Packages with ClickPost Tracking API Page
Open the ClickPost tracking page.
Enter your DHL AWB number or tracking ID in the tracking field.
Submit the tracking request to fetch the latest shipment details.
View real-time shipment milestones, transit updates, and delivery status on a single tracking dashboard.
Track DHL Packages on the Official Tracking Page
Open the official DHL tracking page.
Enter your tracking number / AWB number/shipment ID in the tracking field.
Click on the Track button to retrieve shipment details.
View real-time shipment updates including current location, transit milestones, delivery progress, and final delivery status.
List of DHL APIs
API
Description
Manifestation and shipping label generation API
Generate shipment labels and create shipment manifests using order information.
Tracking Shipment API
Retrieve real-time tracking events and shipment delivery milestones.
Cancellation API
Cancel shipment requests and automate order cancellation workflows.
EDD API
Calculate estimated delivery timelines based on destination and serviceability.
NDR Action Update
Automate failed delivery communication and exception resolution workflows.
Return Webhooks
Enable automated returns processing and reverse logistics management.
API & Description
Manifestation and shipping label generation API
Generate shipment labels and create shipment manifests using order information.
Tracking Shipment API
Retrieve real-time tracking events and shipment delivery milestones.
Cancellation API
Cancel shipment requests and automate order cancellation workflows.
EDD API
Calculate estimated delivery timelines based on destination and serviceability.
NDR Action Update
Automate failed delivery communication and exception resolution workflows.
Return Webhooks
Enable automated returns processing and reverse logistics management.
Frequently asked questions
What is the difference between DHL Parcel API and DHL Express API for international tracking?
DHL Parcel runs on a standard postal network with milestone-based updates that can go quiet once handed to a local carrier in the destination country. DHL Express uses DHL's own end-to-end network with real-time granular scans, deep customs visibility, and 1 to 3 business day delivery. If you need a single endpoint for both, DHL's Unified Shipment Tracking API normalizes data across Parcel, Express, and Global Forwarding into one interface.
How can I add DHL shipment tracking to my Shopify store without custom coding?
The easiest route is a no-code tracking app from the Shopify App Store. Install one that supports DHL, and it automatically detects fulfilled orders with DHL tracking numbers, builds a branded tracking page, and keeps customers updated without redirecting them to DHL's website. ClickPost also integrates directly with Shopify and supports DHL tracking alongside 600+ other carriers from one place.
What are the best alternatives to DHL API for multi-carrier tracking on a global logistics platform?
If you don't want to integrate individual carrier APIs one by one, a multi-carrier aggregator API normalizes tracking statuses from hundreds of carriers into a single webhook format. ClickPost is a strong option here, particularly if your platform needs advanced exception handling, AI-based delay prediction, NDR automation, and customer communication workflows on top of standard tracking.
Can ClickPost automate carrier allocation for DHL shipments?
Yes. ClickPost’s carrier allocation engine automatically assigns shipments based on predefined business rules, carrier performance, shipping cost, serviceability, and SLA commitments.
Can I use ClickPost to analyze DHL delivery performance?
Yes. ClickPost provides centralized analytics and reporting for DHL shipments, including carrier performance, SLA adherence, shipment exceptions, and delivery outcomes to support logistics optimization.
Can DHL APIs be used for reverse logistics?
Yes. Return Webhooks and reverse logistics APIs support return initiation, pickup coordination, and end-to-end return tracking for shipments.
What analytics does ClickPost provide for DHL shipments?
ClickPost provides visibility into shipping costs, return trends, carrier performance, delivery timelines, shipment exceptions, and operational efficiency metrics to help businesses improve logistics performance.