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 */
});
});
})();
Track Delhivery Packages with ClickPost Tracking Page
Locate your Delhivery tracking number.
Visit the ClickPost tracking website.
Input your Delhivery tracking number into the tracking field.
Hit the "Track" button to check the current status of your shipment.
Track Delhivery Packages on the Official Page
Visit the Delhivery website and enter the Air waybill number in the box
Enter the AWB number or multiple ones, each separated by commas. Enter mobile number, order ID or a valid LRN alternatively.
Click on the “TRACK” button.
In a few seconds, you can see the latest shipment status on the screen.
List of Delhivery APIs
API
Description
Manifestation and Label Generation API
Fast-forward your shipping operations with bulk shipping label and AWB number generation.
Track Shipment API
Track orders on a centralized dashboard.
Cancellation API
Cancel orders effortlessly with this API
EDD API
Keep customers informed about their order arrival by displaying accurate EDDs on product and checkout pages.
NDR Action Update
Slash RTO% and tackle failed deliveries with AI NDR manager, Parth.
Return Webhooks
Handle returns smoothly with Delhivery-integrated webhooks.
API & Description
Manifestation and Label Generation API
Fast-forward your shipping operations with bulk shipping label and AWB number generation.
Track Shipment API
Track orders on a centralized dashboard.
Cancellation API
Cancel orders effortlessly with this API
EDD API
Keep customers informed about their order arrival by displaying accurate EDDs on product and checkout pages.
NDR Action Update
Slash RTO% and tackle failed deliveries with AI NDR manager, Parth.
Return Webhooks
Handle returns smoothly with Delhivery-integrated webhooks.
Frequently asked questions
Everything you need to know about Delhivery Carriers Integration
What is Delhivery API integration with ClickPost?
The Delhivery API integration with Clickpost is a secure connection between Delhivery and ClickPost. It enables the data flow between the two, allowing businesses to streamline logistics. This API integration enables order creation, label generation, real-time tracking, EDD prediction, and more.
Does ClickPost support both forward and return shipments with Delhivery?
Yes. ClickPost supports both forward and reverse logistics with Delhivery. It offers capable APIs to integrate with Delhivery, allowing businesses to manage their shipping process from start to end. For example, ClickPost’s Return Pro platform provides a self-serve portal to initiate returns and exchanges efficiently.
Is branded tracking available for Delhivery shipments via ClickPost?
Businesses can create a customized tracking page with ClickPost to reflect their brand identity. They can include the logo and change the colors to offer a consistent brand experience. It allows them to send branded notifications, track their Delhivery shipments, and increase selling opportunities.
Does ClickPost send delivery notifications for Delhivery orders?
Yes, it does. ClickPost sends real-time notifications for Delhivery orders to customers via multiple channels. These notifications include milestone-specific information such as order, dispatched, in transit, and order delivered to keep customers informed and updated about their orders. By doing so, ClickPost helps brands become more transparent with their customers.
What is Delhivery API?
Delhivery is one of the leading integrated logistics solutions providers with pan-India coverage across remote and urban areas. It began operations in 2011 and has since transformed into a shipping giant in the country. Delhivery has fulfilled over 2 billion orders nationwide and established its presence by covering over 18,700 pin codes.The parcel delivery specialist has 24 automated sort centers, 2880 distribution centers, and 94 gateways. Its extensive suite of services comprises Express Parcel delivery, Warehousing, Partial Truckload, Full Truckload, Cross-border shipping, and Data Intelligence. Delhivery uses powerful APIs (Address Standardization, Address Validation, and Geocoding) and provides GPS tracking to deliver orders domestically and internationally. With these offerings, domestic and international brands can ship high volumes of orders and send real-time notifications to customers, improving customer transparency.In January 2025, Delhivery introduced its ‘Rapid Commerce’ service to fulfill quick deliveries within 2 hours. It has launched this service in Bengaluru and currently handles 300 orders every day.