# Webhook Notifications https://api-docs.lumar.io/docs/notifications/webhook-notifications Webhook notifications can be requested on completion of events (Crawl finished, Role changed, ...). The webhook payload contains event-specific data useful to build custom notifications. ## Webhook notifications schemas ### Callback Failed ```typescript { eventType: "callback-failed"; eventData: { /** * Project ID */ projectId: number; /** * User's firstName if the notification is being sent to a User. */ firstName: string | null; /** * User's lastName if the notification is being sent to a User. */ lastName: string | null; /** * Project's name. */ projectName: string; /** * URL to edit Project settings, pointing at step 4. */ projectSettingsLink: string; /** * Project's sitePrimary. */ sitePrimary: string; /** * HTTP status for the failed callback response, if available. */ status: number | null; }; /** * Lumar Account ID */ accountId: number; /** * Account ID on SSO Client */ ssoClientAccountId: string; } ``` ### Crawl Finished ```typescript { eventType: "crawl-finished"; eventData: { /** * Crawl ID */ crawlId: number; /** * Formatted Crawl's crawlingAt timestamp in the Account's timezone. * @example "Nov 23, 2021 01:03PM" */ crawlingAt: string; /** * User interface URL leading to the /accounts/:accountId/projects/:projectId/crawls/:crawlId page, if the notification is being * sent to the Crawl createdByUser. Sharelink otherwise. */ crawlUrl: string; /** * Crawl createdByUser's firstName if the notification is being sent to that User. */ firstName: string | null; /** * Crawl createdByUser's lastName if the notification is being sent to that User. */ lastName: string | null; /** * Crawl Project's name. */ projectName: string; /** * Crawl Project's sitePrimary. */ sitePrimary: string; /** * Number of URLs crawled */ totalSteps: string; }; /** * Lumar Account ID */ accountId: number; /** * Account ID on SSO Client */ ssoClientAccountId: string; } ``` ### Crawl Paused (Credits) ```typescript { eventType: "crawl-paused-credits"; eventData: { /** * Crawl ID */ crawlId: number; /** * Formatted time when autofinalize will occur if no action is taken by the User. * Should be 72 hours in the future at the time the notification is being sent. * @example "Nov 23, 2021 01:03PM" */ autoFinalizeAt: string; /** * User interface URL leading to the /accounts/:accountId/projects/:projectId/crawls page. */ crawlUrl: string; /** * Crawl createdByUser's firstName if the notification is being sent to that User. */ firstName: string | null; /** * Crawl createdByUser's lastName if the notification is being sent to that User. */ lastName: string | null; /** * Crawl Project's name. */ projectName: string; /** * Crawl Project's sitePrimary. */ sitePrimary: string; /** * User interface URL leading to the /subscription page. */ subscriptionUrl: string; }; /** * Lumar Account ID */ accountId: number; /** * Account ID on SSO Client */ ssoClientAccountId: string; } ``` ### Crawl Paused (Limits) ```typescript { eventType: "crawl-paused-limits"; eventData: { /** * Crawl ID */ crawlId: number; /** * Formatted time when autofinalize will occur if no action is taken by the User. * Should be 72 hours in the future at the time the notification is being sent. * @example "Nov 23, 2021 01:03PM" */ autoFinalizeAt: string; /** * Formatted Crawl's crawlingAt timestamp in the Account's timezone. * @example "Nov 23, 2021 01:03PM" */ crawlingAt: string; /** * User interface URL leading to the /accounts/:accountId/projects/:projectId/crawls page. */ crawlUrl: string; /** * Crawl createdByUser's firstName if the notification is being sent to that User. */ firstName: string | null; /** * Crawl createdByUser's lastName if the notification is being sent to that User. */ lastName: string | null; /** * Crawl Project's name. */ projectName: string; /** * Crawl Project's sitePrimary. */ sitePrimary: string; /** * Sum of ShelveCrawlStat's progress across all levels. * The number is formatted with thousands grouped. * @example "12,345,678" */ totalSteps: string; }; /** * Lumar Account ID */ accountId: number; /** * Account ID on SSO Client */ ssoClientAccountId: string; } ``` ### Role Changed ```typescript { eventType: "role-changed"; eventData: { /** * Account name */ accountName: string; /** * Admin user's email */ adminEmail: string; /** * Admin user's first name */ adminFirstName: string; /** * Admin user's last name */ adminLastName: string; /** * User's first name */ firstName: string | null; /** * User's first name */ lastName: string | null; /** * New Role name */ newRoleName: string; } /** * Lumar Account ID */ accountId: number; /** * Account ID on SSO Client */ ssoClientAccountId: string; } ``` ### Scheduled Crawl Failed (Active Projects Limit) ```typescript { eventType: "scheduled-crawl-failed-active-projects-limit"; eventData: { /** * Project ID */ projectId: number; /** * User interface URL leading to the /accounts/:accountId/projects/:projectId/crawls page. */ crawlsUrl: string; /** * User's firstName if the notification is being sent to a User. */ firstName: string | null; /** * User's lastName if the notification is being sent to a User. */ lastName: string | null; /** * Project's name. */ projectName: string; /** * Project's sitePrimary. */ sitePrimary: string; /** * User interface URL leading to the /subscription page. */ subscriptionUrl: string; }; /** * Lumar Account ID */ accountId: number; /** * Account ID on SSO Client */ ssoClientAccountId: string; } ``` ### Scheduled Crawl Failed (Analytics) ```typescript { eventType: "scheduled-crawl-failed-analytics"; eventData: { /** * Project ID */ projectId: number; /** * User interface URL leading to the /accounts/:accountId/projects/:projectId/crawls page. */ crawlsUrl: string; /** * User's firstName if the notification is being sent to a User. */ firstName: string | null; /** * User's lastName if the notification is being sent to a User. */ lastName: string | null; /** * Project's name. */ projectName: string; /** * Project's sitePrimary. */ sitePrimary: string; }; /** * Lumar Account ID */ accountId: number; /** * Account ID on SSO Client */ ssoClientAccountId: string; } ``` ### Scheduled Crawl Failed (Crawl Running) ```typescript { eventType: "scheduled-crawl-failed-crawl-running"; eventData: { /** * Project ID */ projectId: number; /** * Crawl ID */ crawlId: number | null; /** * User interface URL leading to the /accounts/:accountId/projects/:projectId/crawls/:crawlId page. */ crawlUrl: string; /** * User's firstName if the notification is being sent to a User. */ firstName: string | null; /** * User's lastName if the notification is being sent to a User. */ lastName: string | null; /** * Project's name. */ projectName: string; /** * Project's sitePrimary. */ sitePrimary: string; }; /** * Lumar Account ID */ accountId: number; /** * Account ID on SSO Client */ ssoClientAccountId: string; } ``` ### Legacy Tasks Created ```typescript { eventType: "legacy-tasks-created; eventData: { action: "created"; dashboardUrl: string; greetingName: string | null; legacyTasks: { assignedTo: string[] | null; category: string | null; createdAt: string; deadlineAt: string | null; description: string | null; fixedAt: string | null; identified: number | null; priority: string; priorityColor: string; remaining: number | null; remainingColor: string | null; reportLink: string | null; title: string; trendGraph: string | null; }[]; projectName: string; } /** * Lumar Account ID */ accountId: number; /** * Account ID on SSO Client */ ssoClientAccountId: string; } ``` ### Legacy Tasks Updated ```typescript { eventType: "legacy-tasks-updated; eventData: { action: "updated"; dashboardUrl: string; greetingName: string | null; legacyTasks: { assignedTo: string[] | null; category: string | null; createdAt: string; deadlineAt: string | null; description: string | null; fixedAt: string | null; identified: number | null; priority: string; priorityColor: string; remaining: number | null; remainingColor: string | null; reportLink: string | null; title: string; trendGraph: string | null; }[]; projectName: string; } /** * Lumar Account ID */ accountId: number; /** * Account ID on SSO Client */ ssoClientAccountId: string; } ```