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 */
});
});
})();
Blue Dart API Integration and Tracking with ClickPost
Ship, track and handle returns on Blue Dart from one ClickPost API. Generate labels, book pickups, send live tracking to customers and act on failed deliveries without building or maintaining a Blue Dart integration yourself.
Trusted by 600+ global brands
What changes when Blue Dart runs through ClickPost
Blue Dart handles the heavy lifting with its ultra-reliable cargo fleet for fast deliveries, while ClickPost uses automation to help manage couriers and keep customers updated in real time. With both, you can:
Convert 21% returns to exchanges and store credits.
Minimize cart abandonment by 40% with accurate EDDs
Lower WISMOs by 60% with real-time tracking notifications.
Track Blue Dart Packages with the ClickPost Tracking Page
Grab your tracking number from the shipment confirmation email.
Visit the ClickPost Tracking Page.
Type your tracking number into the search bar.
Hit "Track" to see your Blue Dart shipment's live status.
Track Blue Dart Packages on the Official Page
Visit the Blue Dart tracking page.
Enter the Waybill number of the reference number or multiple waybill or reference numbers with commas after each.
Enter the Captcha below and click on the “Go” button
You will see the real-time status of your order appear on the screen.
Blue Dart APIs available through ClickPost
API
Description
Manifestation and Label Generation API
Instantly manifest large-volume Blue Dart shipments and generate compliant carrier labels natively to accelerate daily dispatch schedules.
Track Shipment API
Track large-volume Blue Dart shipments in real-time on a single dashboard.
Cancellation API
Cancel orders anytime.
EDD API
Dynamically inject precise, data-driven Blue Dart delivery timelines directly into the customer checkout experience to build buyer trust.
NDR Action Update
Instantly flag structured exception alerts when a Blue Dart delivery milestone fails, providing granular context for rapid customer re-attempts.
Return Webhooks
Execute automated reverse logistics workflows the instant a customer requests a return.
API & Description
Manifestation and Label Generation API
Instantly manifest large-volume Blue Dart shipments and generate compliant carrier labels natively to accelerate daily dispatch schedules.
Track Shipment API
Track large-volume Blue Dart shipments in real-time on a single dashboard.
Cancellation API
Cancel orders anytime.
EDD API
Dynamically inject precise, data-driven Blue Dart delivery timelines directly into the customer checkout experience to build buyer trust.
NDR Action Update
Instantly flag structured exception alerts when a Blue Dart delivery milestone fails, providing granular context for rapid customer re-attempts.
Return Webhooks
Execute automated reverse logistics workflows the instant a customer requests a return.
Frequently asked questions
Everything you need to know about ClickPost’s Carriers Integration
How does ClickPost use AI for Carrier Allocation?
ClickPost uses AI-driven algorithms to analyze multiple factors, such as cost, turnaround times, SLA Adherence for carriers, to recommend the best carrier for each shipment.
How does ClickPost use AI for Carrier Allocation?
ClickPost uses AI-driven algorithms to analyze multiple factors, such as cost, turnaround times, SLA Adherence for carriers, to recommend the best carrier for each shipment.
How does ClickPost use AI for Carrier Allocation?
ClickPost uses AI-driven algorithms to analyze multiple factors, such as cost, turnaround times, SLA Adherence for carriers, to recommend the best carrier for each shipment.
How does ClickPost use AI for Carrier Allocation?
ClickPost uses AI-driven algorithms to analyze multiple factors, such as cost, turnaround times, SLA Adherence for carriers, to recommend the best carrier for each shipment.
How do I integrate the Blue Dart API with my ecommerce store?
Link your Blue Dart account in ClickPost, connect your store or OMS, and turn on the Blue Dart services you need. ClickPost then handles shipment creation, labels, pickups and tracking for Blue Dart through one API, so your team does not build or maintain a direct Blue Dart integration.
Does ClickPost support Blue Dart tracking webhooks?
Yes. ClickPost tracks Blue Dart shipments through webhooks, with API polling as a fallback. Each Blue Dart scan is mapped to a standard ClickPost status and can trigger customer notifications or an update in your OMS.
Can I automate Blue Dart tracking in Shopify?
Yes. With the ClickPost Shopify app, Blue Dart tracking updates sync to Shopify orders automatically. Customers get WhatsApp, SMS or email updates, and a branded tracking page goes live without custom code.
Does ClickPost support Blue Dart reverse pickups and MPS shipments?
Yes. Blue Dart Reverse, B2B MPS, MPS Reverse (B2C) and MPS Reverse (B2B) are all available. A return approved in the ClickPost returns portal can book a Blue Dart reverse pickup automatically.
Do I need my own Blue Dart account to use ClickPost?
Yes. ClickPost connects to your existing Blue Dart contract, so you keep your negotiated rates and your direct relationship with Blue Dart.
How does ClickPost handle failed Blue Dart deliveries?
When Blue Dart reports a failed attempt, ClickPost flags it, reaches the buyer on WhatsApp, SMS or an AI voice call, captures the fix they choose and sends the NDR action back to Blue Dart for a reattempt.
Can ClickPost choose between Blue Dart and other carriers for each order?
Yes. AI carrier allocation compares carriers on cost, delivery speed, serviceability and past SLA performance for every order, and books Blue Dart where it is the best fit under your rules.
How many carriers can I connect through ClickPost?
ClickPost connects to 700+ carriers across 30+ countries through one API, including Blue Dart, Delhivery, DTDC, Ekart, DHL and FedEx. You manage all of them from one dashboard.
Streamline your shipping experience with ClickPost