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 */
});
});
})();
Near real-time visibility with FedEx Advanced Integrated Visibility. 12x fewer API calls, 5B+ monthly shipments processed, live in 1.5 weeks.
Trusted by 600+ global brands
Benefits of Connecting FedEx with ClickPost
The first post-purchase platform integrated with FedEx Advanced Integrated Visibility. Real outcomes, backed by 600+ global brands.
Near real-time shipment visibility with FedEx AIV. ClickPost is one of the first post-purchase platforms live on FedEx Advanced Integrated Visibility (March 2026). Webhook-driven updates replace polling — no latency, no manual refresh.
12x reduction in API calls per shipment. Reduced infrastructure strain and eliminated token generation overhead, saving engineering hours weekly. Scales to 50M+ shipments monthly.
Recover 28% of revenue through returns, convert 21% into exchanges. ClickPost's post-purchase intelligence turns FedEx tracking data into revenue recovery — not just delivery confirmations.
Track FedEx Packages with the ClickPost Tracking Page
ClickPost pulls FedEx tracking events in near real time via the Advanced Integrated Visibility webhook — no polling delay, no refresh needed.
Keep your FedEx tracking ID from your order confirmation or shipping label.
Visit the ClickPost Tracking Page for your brand.
Enter the tracking ID in the designated field.
Click Track to view real-time shipment status, expected delivery date, and milestones.
Track FedEx Packages with the Official Page
Head to the FedEx official tracking portal.
Choose your tracking method, tracking number, reference number, or door tag.
Enter up to 30 tracking numbers at once. If using a reference number, add the destination country or territory.
Click Track to get real-time updates on your consignments.
List of FedEx APIs
API
Description
Shipping Label Generation API
Bulk-generate FedEx shipping labels through ClickPost. Compatible with FedEx Express, Ground, Home Delivery, and Freight.
Track Shipment API
Real-time FedEx tracking synced to your dashboard via webhook (FedEx AIV) — no polling delays.
Cancellation API
Cancel FedEx shipments programmatically. No manual carrier requests.
EDD API
Show accurate expected delivery dates at checkout and on product pages to reduce cart abandonment and improve conversion.
Delivery Exception Management API
Automatically handle FedEx delivery exceptions, re-route where possible, and push corrected instructions back to the carrier.
Return Webhooks
Automate the full FedEx returns and refund flow. Webhooks trigger reverse logistics workflows the moment a return is initiated.
API & Description
Shipping Label Generation API
Bulk-generate FedEx shipping labels through ClickPost. Compatible with FedEx Express, Ground, Home Delivery, and Freight.
Track Shipment API
Real-time FedEx tracking synced to your dashboard via webhook (FedEx AIV) — no polling delays.
Cancellation API
Cancel FedEx shipments programmatically. No manual carrier requests.
EDD API
Show accurate expected delivery dates at checkout and on product pages to reduce cart abandonment and improve conversion.
Delivery Exception Management API
Automatically handle FedEx delivery exceptions, re-route where possible, and push corrected instructions back to the carrier.
Return Webhooks
Automate the full FedEx returns and refund flow. Webhooks trigger reverse logistics workflows the moment a return is initiated.
Frequently asked questions
What is FedEx, and what makes it a leading global carrier?
FedEx is one of the world's largest logistics networks — annual revenue of $90 billion, delivering across 220+ countries and territories. FedEx's US network of Express, Ground, Home Delivery, and Freight services makes it the default carrier for retail and D2C brands operating at scale.
How does ClickPost integrate with FedEx?
ClickPost integrates with FedEx via API for order creation, label generation, tracking, pickup scheduling, delivery exception management, and returns. In March 2026, ClickPost became one of the first post-purchase platforms to implement webhook-based tracking through FedEx Advanced Integrated Visibility (AIV) — replacing polling with event-driven updates.
What is FedEx Advanced Integrated Visibility, and why does it matter?
FedEx AIV is FedEx's real-time shipment tracking framework. Instead of periodically polling FedEx for updates, ClickPost receives webhook events as they occur — every scan, exception, and delivery milestone. For brands, t
How quickly can I go live with FedEx via ClickPost?
Average 1.5 weeks from credentialing to production. ClickPost's implementation with FedEx AIV was completed in this window and is now the reference implementation for brands scaling FedEx integrations.
Which FedEx services does ClickPost support in the US?
FedEx Express, FedEx Ground, FedEx Home Delivery, FedEx Freight, FedEx International Priority, FedEx International Economy, FedEx SmartPost, and FedEx One Rate — all managed through a single ClickPost integration with unified tracking, labeling, and returns handling.
How does ClickPost handle FedEx delivery exceptions and returns?
ClickPost captures FedEx delivery exception events in real time via AIV webhooks, contacts customers via email/SMS/WhatsApp to resolve issues (wrong address, missed delivery, refused package), and pushes corrected instructions back to FedEx. For returns, ClickPost's returns engine converts 21% of returns into exchanges and recovers 28% of revenue that would otherwise refund.