Subscribe to Terminal49 ETA change webhook events and alert your team automatically when a shipment’s estimated arrival date or port of discharge shifts.
Carriers frequently revise arrival estimates as vessels encounter weather, port congestion, or schedule changes. The shipment.estimated.arrival event fires every time Terminal49 detects an ETA change so you can react immediately.
Parse the incoming notification, extract the new ETA, and compare it to your stored value:
app.post("/webhooks/terminal49", async (req, res) => { const { data, included } = req.body; if (data.attributes.event !== "shipment.estimated.arrival") { return res.sendStatus(200); } const shipment = included.find((obj) => obj.type === "shipment"); const estimatedEvent = included.find((obj) => obj.type === "estimated_event"); const newEta = estimatedEvent.attributes.estimated_timestamp; const bolNumber = shipment.attributes.bill_of_lading_number; const portOfDischarge = shipment.attributes.port_of_discharge_name; // Compare against your stored ETA const previousEta = await getStoredEta(bolNumber); const changeInHours = Math.abs( (new Date(newEta) - new Date(previousEta)) / (1000 * 60 * 60) ); if (changeInHours > 12) { await notifyTeam({ message: `ETA for ${bolNumber} at ${portOfDischarge} shifted by ${Math.round(changeInHours)} hours`, newEta, previousEta, }); } await updateStoredEta(bolNumber, newEta); res.sendStatus(200);});
ETA events can fire multiple times per day as carriers update their schedules. Filter for significant changes (e.g., more than 12 hours) to avoid alert fatigue.
For shipments with an inland rail move, subscribe to container.transport.estimated.arrived_at_inland_destination as well. This event fires when the estimated arrival at the rail ramp or inland depot changes.This is a container transport event, so the payload includes a transport_event object rather than an estimated_event object. Look for the transport_event in included, then read attributes.timestamp for the estimated arrival time.
Subscribe to container.transport.estimated.vessel_arrived when you need ETA changes at the container level. This event uses the same transport event payload shape as other container.transport.* events, with the estimated vessel arrival stored on the included transport_event object.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Terminal49","description":"Developer documentation for the Terminal49 API, DataSync, SDK, and MCP server for container tracking, shipment visibility, webhooks, and integrations.","colors":{"primary":"#1A9E52","light":"#1A9E52","dark":"#2ACD6C"},"logo":{"light":"https://mintcdn.com/terminal49/vf64v0nfd3Z9JQ4O/logos/light.svg?fit=max\u0026auto=format\u0026n=vf64v0nfd3Z9JQ4O\u0026q=85\u0026s=d4e213611d22dd79c263b9d1ffa46eea","dark":"https://mintcdn.com/terminal49/vf64v0nfd3Z9JQ4O/logos/dark.svg?fit=max\u0026auto=format\u0026n=vf64v0nfd3Z9JQ4O\u0026q=85\u0026s=4458f17b851e3549033b9bedb71fe3ba"},"favicon":"https://mintcdn.com/terminal49/tUOgDh5QtR_8-BBX/logos/favicon.svg?fit=max\u0026auto=format\u0026n=tUOgDh5QtR_8-BBX\u0026q=85\u0026s=cb027195e481e03988cbd56028fc2444","appearance":{"default":"light","strict":false},"navbar":{"links":[{"href":"https://www.terminal49.com/demo","label":"Talk To Us"}],"primary":{"type":"button","label":"Get Started","href":"https://app.terminal49.com/register"}},"footer":{"socials":{"twitter":"https://twitter.com/terminal49","linkedin":"https://www.linkedin.com/company/terminal49"},"links":[{"header":"Resources","items":[{"label":"Blog","href":"https://www.terminal49.com/blog"},{"label":"Contact","href":"https://www.terminal49.com/contact"},{"label":"Book a Demo","href":"https://www.terminal49.com/demo"}]},{"header":"Product","items":[{"label":"Sign in","href":"https://app.terminal49.com/"},{"label":"Start Free Trial","href":"https://app.terminal49.com/register"}]}]},"seo":{"metatags":{"og:type":"website","og:site_name":"Terminal49 Docs","twitter:card":"summary_large_image","twitter:site":"@terminal49"},"indexing":"all"},"integrations":{"gtm":{"tagId":"GTM-K8CDPJJG"},"posthog":{"apiKey":"phc_rBNVF6dUk5HU5m3pX9yZZWoehXoqZTCeKXFXCEoJzEyq","apiHost":"https://f.terminal49.com","sessionRecording":false}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"terminal49","hasAudioNarration":false,"actualSubdomain":"terminal49","customDomains":["terminal49.com"],"gitSource":{"type":"github","owner":"terminal49","repo":"api","deployBranch":"main","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":true,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af10f832f2e026614e862e3","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"SDK Docs","count":109},{"language":"default","tag":"API Reference","count":105},{"language":"default","tag":"TypeScript API Reference","count":104},{"language":"default","tag":"Managers","count":42},{"language":"default","tag":"Developer Guide","count":35},{"language":"default","tag":"Models","count":21},{"language":"default","tag":"MCP","count":16},{"language":"default","tag":"Client","count":13},{"language":"default","tag":"Containers","count":11},{"language":"default","tag":"Documents","count":11}]},"assistantConfig":{"enableAskAiButton":true,"enableStarterQuestions":true,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"support@terminal49.com","showHelpButton":true}},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"starterQuestions":[{"_id":"6921e1f7f5047ea275ad7af0","deploymentId":"660c368041a00f5c82bccd87","questionText":"How do I get the ETA?","status":"active","generatedBy":"manual","createdAt":"2025-11-22T16:16:55.122Z","updatedAt":"2025-11-22T16:16:55.122Z","__v":0},{"_id":"6921e1caf5047ea275ad7837","deploymentId":"660c368041a00f5c82bccd87","questionText":"How do I get a containers LFD (last free day)?","status":"active","generatedBy":"manual","createdAt":"2025-11-22T16:16:10.178Z","updatedAt":"2025-11-22T16:16:10.178Z","__v":0},{"_id":"6921e1b5f5047ea275ad7732","deploymentId":"660c368041a00f5c82bccd87","questionText":"How do I start tracking a bill of lading?","status":"active","generatedBy":"manual","createdAt":"2025-11-22T16:15:49.020Z","updatedAt":"2025-11-22T16:15:49.020Z","__v":0}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-docs/webhooks/use-cases/eta-monitoring","slug":"/api-docs/webhooks/use-cases/eta-monitoring","pageMetadata":{"title":"Monitor ETA Changes with Webhooks","sidebarTitle":"ETA Monitoring","description":"Subscribe to Terminal49 ETA change webhook events and alert your team automatically when a shipment's estimated arrival date or port of discharge shifts.","keywords":["Terminal49 API","webhooks","ETA monitoring","estimated arrival","shipment visibility","arrival alerts"],"href":"/api-docs/webhooks/use-cases/eta-monitoring"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Subscribe to Terminal49 ETA change webhook events and alert your team automatically when a shipment’s estimated arrival date or port of discharge shifts.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Carriers frequently revise arrival estimates as vessels encounter weather, port congestion, or schedule changes. The `,_jsx(_components.code,{children:`shipment.estimated.arrival`}),` event fires every time Terminal49 detects an ETA change so you can react immediately.`]}),`\n`,_jsx(Heading,{level:`2`,id:`events-to-subscribe-to`,children:`Events to subscribe to`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Event`}),_jsx(_components.th,{children:`When it fires`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`shipment.estimated.arrival`})}),_jsx(_components.td,{children:`Shipment-level ETA changes for the port of discharge`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`container.transport.estimated.vessel_arrived`})}),_jsx(_components.td,{children:`Container-level ETA changes for vessel arrival at the port of discharge`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`container.transport.estimated.arrived_at_inland_destination`})}),_jsx(_components.td,{children:`Container-level ETA changes for the inland destination (rail moves)`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-the-payload-includes`,children:`What the payload includes`}),`\n`,_jsxs(_components.p,{children:[`When a `,_jsx(_components.code,{children:`shipment.estimated.arrival`}),` event fires, the `,_jsx(_components.code,{children:`included`}),` array contains:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`An `,_jsx(_components.code,{children:`estimated_event`}),` object with the new `,_jsx(_components.code,{children:`estimated_timestamp`})]}),`\n`,_jsxs(_components.li,{children:[`The full `,_jsx(_components.code,{children:`shipment`}),` object with updated `,_jsx(_components.code,{children:`pod_eta_at`}),` and related fields`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.code,{children:`port`}),` object for the port of discharge`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.code,{children:`vessel`}),` object when Terminal49 can identify the vessel`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`handle-the-webhook`,children:`Handle the webhook`}),`\n`,_jsx(_components.p,{children:`Parse the incoming notification, extract the new ETA, and compare it to your stored value:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`32`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`32`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`post`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"/webhooks/terminal49\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`req`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`res`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`included`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` req`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`body`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`attributes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`event`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !==`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"shipment.estimated.arrival\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` res`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`sendStatus`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`200`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` shipment`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` included`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`find`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`((`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`obj`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` obj`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ===`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"shipment\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` estimatedEvent`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` included`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`find`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`((`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`obj`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` obj`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ===`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"estimated_event\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` newEta`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` estimatedEvent`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`attributes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`estimated_timestamp`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` bolNumber`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` shipment`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`attributes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`bill_of_lading_number`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` portOfDischarge`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` shipment`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`attributes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`port_of_discharge_name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Compare against your stored ETA`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` previousEta`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` getStoredEta`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`bolNumber`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` changeInHours`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Math`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`abs`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Date`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`newEta`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Date`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`previousEta`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1000`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` *`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 60`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` *`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 60`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` );`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`changeInHours`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` >`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 12`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` notifyTeam`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` message:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `ETA for \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`bolNumber`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` at `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`portOfDischarge`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` shifted by `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Math`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`round`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`changeInHours`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" hours`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` newEta`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` previousEta`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` updateStoredEta`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`bolNumber`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`newEta`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` res`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`sendStatus`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`200`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`ETA events can fire multiple times per day as carriers update their schedules. Filter for significant changes (e.g., more than 12 hours) to avoid alert fatigue.`})}),`\n`,_jsx(Heading,{level:`2`,id:`inland-destination-etas`,children:`Inland destination ETAs`}),`\n`,_jsxs(_components.p,{children:[`For shipments with an inland rail move, subscribe to `,_jsx(_components.code,{children:`container.transport.estimated.arrived_at_inland_destination`}),` as well. This event fires when the estimated arrival at the rail ramp or inland depot changes.`]}),`\n`,_jsxs(_components.p,{children:[`This is a container transport event, so the payload includes a `,_jsx(_components.code,{children:`transport_event`}),` object rather than an `,_jsx(_components.code,{children:`estimated_event`}),` object. Look for the `,_jsx(_components.code,{children:`transport_event`}),` in `,_jsx(_components.code,{children:`included`}),`, then read `,_jsx(_components.code,{children:`attributes.timestamp`}),` for the estimated arrival time.`]}),`\n`,_jsx(Heading,{level:`2`,id:`container-level-vessel-arrival-etas`,children:`Container-level vessel arrival ETAs`}),`\n`,_jsxs(_components.p,{children:[`Subscribe to `,_jsx(_components.code,{children:`container.transport.estimated.vessel_arrived`}),` when you need ETA changes at the container level. This event uses the same transport event payload shape as other `,_jsx(_components.code,{children:`container.transport.*`}),` events, with the estimated vessel arrival stored on the included `,_jsx(_components.code,{children:`transport_event`}),` object.`]}),`\n`,_jsx(Heading,{level:`2`,id:`common-patterns`,children:`Common patterns`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Threshold alerts`}),` — only notify when the ETA shifts by more than N hours`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Direction tracking`}),` — distinguish delays (ETA moved later) from early arrivals (ETA moved earlier)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Customer notifications`}),` — forward ETA changes to your customers with a human-readable message`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Planning updates`}),` — adjust warehouse receiving schedules or drayage bookings automatically`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`related`,children:`Related`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/api-docs/webhooks/event-catalog`,children:`Event catalog`}),` — full list of available events`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/api-docs/useful-info/webhook-events-examples`,children:`Payload examples`}),` — complete JSON payloads`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/api-docs/in-depth-guides/event-timestamps`,children:`Event timestamps`}),` — how Terminal49 stores and returns timestamps in UTC`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Monitor ETA Changes with Webhooks","sidebarTitle":"ETA Monitoring","description":"Subscribe to Terminal49 ETA change webhook events and alert your team automatically when a shipment's estimated arrival date or port of discharge shifts.","keywords":["Terminal49 API","webhooks","ETA monitoring","estimated arrival","shipment visibility","arrival alerts"],"href":"/api-docs/webhooks/use-cases/eta-monitoring"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Events to subscribe to","slug":"events-to-subscribe-to","depth":2,"children":[]},{"title":"What the payload includes","slug":"what-the-payload-includes","depth":2,"children":[]},{"title":"Handle the webhook","slug":"handle-the-webhook","depth":2,"children":[]},{"title":"Inland destination ETAs","slug":"inland-destination-etas","depth":2,"children":[]},{"title":"Container-level vessel arrival ETAs","slug":"container-level-vessel-arrival-etas","depth":2,"children":[]},{"title":"Common patterns","slug":"common-patterns","depth":2,"children":[]},{"title":"Related","slug":"related","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/terminal49/bf5953d390eb98ad/segment.js","/docs/_mintlify/custom/terminal49/6a1836b84932e871/webmcp.js"],"subdomain":"terminal49","siteName":"Terminal49","title":"Monitor ETA Changes with Webhooks - Terminal49","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-02T18:10:02.594Z","originalFileLocation":"api-docs/webhooks/use-cases/eta-monitoring.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Subscribe to Terminal49 ETA change webhook events and alert your team automatically when a shipment\u0026#x27;s estimated arrival date or port of discharge shifts.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Terminal49\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/terminal49/_9u2Tikn6cczLICg/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/terminal49/_9u2Tikn6cczLICg/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/terminal49/_9u2Tikn6cczLICg/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/terminal49/_9u2Tikn6cczLICg/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/terminal49/_9u2Tikn6cczLICg/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/terminal49/_9u2Tikn6cczLICg/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/terminal49/_9u2Tikn6cczLICg/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/terminal49/_9u2Tikn6cczLICg/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/terminal49/_9u2Tikn6cczLICg/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Monitor ETA Changes with Webhooks - Terminal49\">\u003cmeta data-mint-head property=\"og:description\" content=\"Subscribe to Terminal49 ETA change webhook events and alert your team automatically when a shipment\u0026#x27;s estimated arrival date or port of discharge shifts.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Terminal49 Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://terminal49.com/docs/api-docs/webhooks/use-cases/eta-monitoring\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://terminal49.mintlify.site/docs/_mintlify/api/og/v2?division=Use+Cases\u0026amp;title=Monitor+ETA+Changes+with+Webhooks\u0026amp;description=Subscribe+to+Terminal49+ETA+change+webhook+events+and+alert+your+team+automatically+when+a+shipment%27s+estimated+arrival+date+or+port+of+discharge+shifts.\u0026amp;theme=7be098b423a76a1dd960de64\u0026amp;signature=9fee86a9e72eaaeb95587ae738ed4889eba7291fddd2e7bfd27d29c3cbe004b7\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Monitor ETA Changes with Webhooks - Terminal49\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Subscribe to Terminal49 ETA change webhook events and alert your team automatically when a shipment\u0026#x27;s estimated arrival date or port of discharge shifts.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://terminal49.mintlify.site/docs/_mintlify/api/og/v2?division=Use+Cases\u0026amp;title=Monitor+ETA+Changes+with+Webhooks\u0026amp;description=Subscribe+to+Terminal49+ETA+change+webhook+events+and+alert+your+team+automatically+when+a+shipment%27s+estimated+arrival+date+or+port+of+discharge+shifts.\u0026amp;theme=7be098b423a76a1dd960de64\u0026amp;signature=9fee86a9e72eaaeb95587ae738ed4889eba7291fddd2e7bfd27d29c3cbe004b7\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/terminal49/_9u2Tikn6cczLICg/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Terminal49\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1A9E52\">\u003clink data-mint-head rel=\"canonical\" href=\"https://terminal49.com/docs/api-docs/webhooks/use-cases/eta-monitoring\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-docs/webhooks/use-cases/eta-monitoring.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://terminal49.com/#organization\",\"name\":\"Terminal49\",\"url\":\"https://terminal49.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/terminal49/vf64v0nfd3Z9JQ4O/logos/light.svg?fit=max\u0026auto=format\u0026n=vf64v0nfd3Z9JQ4O\u0026q=85\u0026s=d4e213611d22dd79c263b9d1ffa46eea\"}},{\"@type\":\"WebSite\",\"@id\":\"https://terminal49.com/docs#website\",\"name\":\"Terminal49\",\"url\":\"https://terminal49.com/docs\",\"publisher\":{\"@id\":\"https://terminal49.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://terminal49.com/docs/api-docs/webhooks/use-cases/eta-monitoring#webpage\",\"url\":\"https://terminal49.com/docs/api-docs/webhooks/use-cases/eta-monitoring\",\"name\":\"Monitor ETA Changes with Webhooks\",\"description\":\"Subscribe to Terminal49 ETA change webhook events and alert your team automatically when a shipment's estimated arrival date or port of discharge shifts.\",\"dateModified\":\"2026-07-02T18:10:02.594Z\",\"isPartOf\":{\"@id\":\"https://terminal49.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://terminal49.com/docs/api-docs/webhooks/use-cases/eta-monitoring#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://terminal49.com/docs/api-docs/webhooks/use-cases/eta-monitoring#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Webhooks \u0026 Events\",\"item\":\"https://terminal49.com/docs/api-docs/webhooks/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Monitor ETA Changes with Webhooks\",\"item\":\"https://terminal49.com/docs/api-docs/webhooks/use-cases/eta-monitoring\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://terminal49.com/docs/api-docs/webhooks/use-cases/eta-monitoring#article\",\"headline\":\"Monitor ETA Changes with Webhooks\",\"name\":\"Monitor ETA Changes with Webhooks\",\"description\":\"Subscribe to Terminal49 ETA change webhook events and alert your team automatically when a shipment's estimated arrival date or port of discharge shifts.\",\"url\":\"https://terminal49.com/docs/api-docs/webhooks/use-cases/eta-monitoring\",\"mainEntityOfPage\":{\"@id\":\"https://terminal49.com/docs/api-docs/webhooks/use-cases/eta-monitoring#webpage\"},\"dateModified\":\"2026-07-02T18:10:02.594Z\",\"keywords\":\"Terminal49 API, webhooks, ETA monitoring, estimated arrival, shipment visibility, arrival alerts\",\"publisher\":{\"@id\":\"https://terminal49.com/#organization\"},\"isPartOf\":{\"@id\":\"https://terminal49.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Terminal49\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Terminal49","nav":{"global":{},"tabs":[{"tab":"Developer Guide","icon":"book","groups":[{"group":" ","pages":[{"title":"Terminal49 Developer Documentation","sidebarTitle":"Home","mode":"frame","href":"/home"}]},{"group":"Getting Started","icon":"play","pages":[{"title":"Start Here: Track Shipments with the Terminal49 API","sidebarTitle":"1. Start Here","href":"/api-docs/getting-started/start-here"},{"title":"Track Shipments and Containers","sidebarTitle":"2. Tracking Shipments \u0026 Containers","href":"/api-docs/getting-started/tracking-shipments-and-containers"},{"title":"List Shipments and Containers","sidebarTitle":"3. List Shipments \u0026 Containers","href":"/api-docs/getting-started/list-shipments-and-containers"},{"title":"Receive shipment status updates with webhooks","sidebarTitle":"4. Status Updates","href":"/api-docs/getting-started/receive-status-updates"}]},{"group":"Tracking Fundamentals","icon":"compass","pages":[{"title":"Tracking request lifecycle","href":"/api-docs/in-depth-guides/tracking-request-lifecycle"},{"title":"Terminal49 Container Statuses","href":"/api-docs/in-depth-guides/container-statuses"},{"title":"Event Timestamps","href":"/api-docs/in-depth-guides/event-timestamps"},{"title":"Container Holds, Fees, and Release Readiness","href":"/api-docs/in-depth-guides/holds-and-fees"},{"title":"Identify your carrier with Infer Tracking Number","sidebarTitle":"Infer Tracking Number 🆕","href":"/api-docs/in-depth-guides/auto-detect-carrier"},{"title":"Add a Customer to a Tracking Request","href":"/api-docs/in-depth-guides/adding-customer"},{"title":"Assign Shipper, Consignee, and Other Parties","href":"/api-docs/in-depth-guides/assigning-parties"}]},{"group":"Webhooks \u0026 Events","icon":"webhook","pages":[{"title":"Why Webhooks","sidebarTitle":"Overview","href":"/api-docs/webhooks/overview"},{"title":"Set up webhooks","sidebarTitle":"Set Up Webhooks","href":"/api-docs/in-depth-guides/webhooks"},{"title":"Webhook event catalog","sidebarTitle":"Event Catalog","href":"/api-docs/webhooks/event-catalog"},{"title":"Webhook Payloads","sidebarTitle":"Payloads","href":"/api-docs/webhooks/payloads"},{"title":"Terminal49 Webhook Event Examples","description":"Review sample Terminal49 webhook payloads for shipment, container, and tracking request events to build, test, and debug your webhook consumer.","href":"/api-docs/useful-info/webhook-events-examples"},{"group":"Use Cases","pages":[{"title":"Monitor ETA Changes with Webhooks","sidebarTitle":"ETA Monitoring","href":"/api-docs/webhooks/use-cases/eta-monitoring"},{"title":"Alert on LFD Changes and Container Availability","sidebarTitle":"LFD \u0026 Availability Alerts","description":"Use Terminal49 webhooks to monitor Last Free Day changes and container availability so you can dispatch pickups before demurrage charges begin.","href":"/api-docs/webhooks/use-cases/lfd-alerts"},{"title":"Track container milestones with webhooks","sidebarTitle":"Milestone Tracking","href":"/api-docs/webhooks/use-cases/milestone-tracking"}]},{"title":"Webhook best practices","sidebarTitle":"Best Practices","href":"/api-docs/webhooks/best-practices"}]},{"group":"Integrations \u0026 Embeds","icon":"puzzle-piece","pages":[{"title":"Integrate rail container tracking data","mode":"wide","href":"/api-docs/in-depth-guides/rail-integration-guide"},{"title":"Vessel and Container Route Data","mode":"wide","href":"/api-docs/in-depth-guides/routing"},{"title":"Terminal49 Map Embed Guide","href":"/api-docs/in-depth-guides/terminal49-map"},{"title":"Tracking widget embed guide","href":"/api-docs/in-depth-guides/terminal49-widget"},{"title":"Direct Links to Shipments and Containers","sidebarTitle":"Tracking Page Links","href":"/api-docs/in-depth-guides/dashboard-deep-linking"},{"title":"Document processing workflows","sidebarTitle":"Document Processing Workflows","href":"/api-docs/in-depth-guides/document-processing-workflows"}]},{"group":"Platform \u0026 Reference","icon":"book-open","pages":[{"title":"Rate Limiting","href":"/api-docs/in-depth-guides/rate-limiting"},{"title":"Include related resources in API responses","href":"/api-docs/in-depth-guides/including-resources"},{"title":"Filter shipments and containers with the API","href":"/api-docs/in-depth-guides/filtering-shipments-and-containers"},{"title":"Terminal49 API Quickstart","sidebarTitle":"Quick Start Guide","href":"/api-docs/in-depth-guides/quickstart"},{"title":"Terminal49 API Pricing","href":"/api-docs/useful-info/pricing"},{"title":"Entitlements and Paid Features","href":"/api-docs/useful-info/entitlements"},{"title":"Terminal49 Test Tracking Numbers","href":"/api-docs/useful-info/test-numbers"},{"title":"Tracking request retry behavior","href":"/api-docs/useful-info/tracking-request-retrying"}]}]},{"tab":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/api-docs/api-reference/introduction"}]},{"tab":"Data Coverage","icon":"globe","pages":[{"title":"Data Coverage","href":"/coverage/home"}]},{"tab":"Migrate to T49","icon":"arrow-right-arrow-left","pages":[{"title":"Migrate to T49","href":"/migrate/home"}]},{"tab":"SDK Docs","icon":"rectangle-terminal","pages":[{"title":"SDK Docs","href":"/sdk/introduction"}]},{"tab":"MCP","icon":"plug","pages":[{"title":"MCP","href":"/mcp/home"}]},{"tab":"DataSync","icon":"database","pages":[{"title":"DataSync","href":"/datasync/home"}]},{"tab":"Changelog","icon":"clock-rotate-left","pages":[{"title":"Changelog","href":"/updates/home"}]}]},"basePath":"","title":"Monitor ETA Changes with Webhooks - Terminal49","buildId":"dpl_6dVqRXFR2Go5vF5RLvAdHuv189oT","deploymentId":"dpl_6dVqRXFR2Go5vF5RLvAdHuv189oT","dynamics":[],"chunks":[]}