diff --git a/apps/portal/src/app/features/licensing/pages/ApplicationRedirectPage.tsx b/apps/portal/src/app/features/licensing/pages/ApplicationRedirectPage.tsx
new file mode 100644
index 000000000..2c7589fcb
--- /dev/null
+++ b/apps/portal/src/app/features/licensing/pages/ApplicationRedirectPage.tsx
@@ -0,0 +1,32 @@
+import { Center, Loader } from '@mantine/core';
+import { Navigate, useParams } from 'react-router-dom';
+import { useGetApplicationQuery } from '@ema-platform/api';
+
+/**
+ * Resolves `/applications/:applicationId` deep links (notification
+ * callbackUrl, emails) to the canonical `/licensing/:typeCode/applications/:id`
+ * route, which needs the licence type key to load its config.
+ */
+export function ApplicationRedirectPage() {
+ const { applicationId } = useParams();
+ const { data, isLoading, isError } = useGetApplicationQuery(applicationId!, {
+ skip: !applicationId,
+ });
+
+ if (!applicationId || isError) {
+ return ;
+ }
+
+ if (isLoading) {
+ return (
+
+
+
+ );
+ }
+
+ const typeCode = data?.application.licenseType?.key ?? 'FREIGHT_FORWARDER';
+ return ;
+}
+
+export default ApplicationRedirectPage;
diff --git a/apps/portal/src/app/router.tsx b/apps/portal/src/app/router.tsx
index 8bdaa519f..7de646e6f 100644
--- a/apps/portal/src/app/router.tsx
+++ b/apps/portal/src/app/router.tsx
@@ -42,6 +42,7 @@ import { PaymentCheckPage } from './features/payments/pages/PaymentCheckPage';
import { PaymentSuccessPage } from './features/payments/pages/PaymentSuccessPage';
import { PaymentFailurePage } from './features/payments/pages/PaymentFailurePage';
import { LicenseApplicationPage } from './features/licensing/pages/LicenseApplicationPage';
+import { ApplicationRedirectPage } from './features/licensing/pages/ApplicationRedirectPage';
import { WaiverPage } from './features/waiver/pages/WaiverPage';
@@ -98,6 +99,9 @@ export const router = createBrowserRouter([
path: '/licensing/:typeCode/applications/:applicationId',
element: ,
},
+ // Notification / email deep links arrive as /applications/; resolve the
+ // licence type and forward to the canonical route.
+ { path: '/applications/:applicationId', element: },
// Seafarer
{ path: '/seafarer-registration', element: },