HTTP Request workflows
1,200 results — 3 downloadable workflow files, 1,197 source-linked n8n references
Send AI study reports and spaced-repetition reminders via OpenAI, Sheets and Gmail
Quick overview This dual-trigger workflow logs daily study sessions from an n8n Form, analyzes them with OpenAI, stores results in Google Sheets, and emails a full coaching report via Gmail; it also runs daily at 7 AM to email each student revision reminders based on spaced-repetition dates. How it works Receives a study-session submission through an n8n Form. Validates the submitted fields and calculates spaced-repetition revision dates (Day+1, +3, +7, +14). Sends the session details to OpenAI Chat Completions and parses the returned JSON coaching analysis (score, feedback, plan, and quiz). Reads the existing Google Sheets Daily Log to find any prior sessions for the same student that are due for revision on the submitted date. Builds an HTML email combining the AI report, today’s revision-due items, and the new revision schedule, then appends the new session to Google Sheets. Sends the full daily study report to the student via Gmail. Runs every day at 7 AM, reads all Google Sheets logs, finds revision items due today per student, and emails each student a morning revision reminder via Gmail. Setup Add an OpenAI API credential and ensure the Chat Completions request is authorized
Edit and post TikTok videos with Gemini Omni Flash and OpenAI
Quick overview This workflow receives a webhook request with a video URL and edit prompt, sends the job to Fal.run’s Gemini Omni Flash for video editing, generates a title with OpenAI, downloads the rendered file, and uploads it to TikTok via the Upload-Post API. How it works Receives a webhook request containing a video_url and an editing prompt. Submits the video edit job to Fal.run’s Gemini Omni Flash queue API. Polls Fal.run every 60 seconds to check the job status until it returns COMPLETED. Fetches the completed job details from Fal.run to obtain the final rendered video URL. Uses OpenAI (GPT-5) to generate an SEO-friendly title from the original prompt. Downloads the rendered video file from the provided URL and uploads it to TikTok using the Upload-Post.com upload API. Returns the Upload-Post.com API response to the original webhook caller. Setup Create and add Fal.run API header-auth credentials, and ensure the Gemini Omni Flash endpoints are accessible from your n8n instance. Add an OpenAI API credential for the title generation step and select the model you want to use. Create an Upload-Post.com account, add its API header-auth credentials, and replace YOUR_USERNAME with
Draft bookkeeping entries from Trello cards with OpenRouter and Xero
Quick overview This workflow triggers from Trello card activity to draft bookkeeping entries by extracting transaction details with OpenRouter and enriching them with live Xero chart-of-accounts, tax rates, contacts, and bill context, then posts a review-ready summary and embedded JSON back to the Trello card. How it works Triggers from Trello when a card is moved to the Ready list or when the Retry AI label is added. Fetches the current Xero chart of accounts, bank accounts, and tax rates to use as live reference data. Loads the Trello card details, recent comments, and attachment metadata and stops with an error note if the text lacks enough detail for extraction. Sends the card title/description/comments to OpenRouter to extract a structured bookkeeping draft and normalizes key fields like dates, line items, and payment reference. Uses Xero Contacts (and, for bill payments, Xero Invoices) to resolve the vendor and refine PAY_BILL vs SPEND_MONEY before optionally asking OpenRouter to classify expense line items to Xero account codes. Validates and maps any suggested account codes against the live Xero chart of accounts, embeds Xero configuration needed for posting later, and reco
Qualify and route free signups with Twain, Claude, Slack, HubSpot and Gmail
Quick overview This workflow receives free-signup events via webhook, enriches the contact with Twain research (and optional Findymail LinkedIn lookup), uses Anthropic Claude to score ICP fit, then routes outcomes to Slack and, for high-fit leads, to HubSpot and Gmail. How it works Receives a POST webhook request for a new signup and authenticates it via a required header. Normalizes the signup fields (uid, email, name, LinkedIn URL) and deduplicates records across runs to avoid reprocessing the same user. If the signup has no LinkedIn URL but has an email, optionally calls Findymail reverse-email lookup to resolve a LinkedIn profile URL and merges it back into the contact. If the lead has neither a work email nor a LinkedIn URL, posts a “skipped” message to Slack and stops. Sends the contact to the Twain Generate/Research API to create research and add the contact to the specified Twain campaign, and posts a Slack alert if the research request fails. If Twain flags a hard disqualification (persona mismatch or incomplete profile), posts a disqualification message to Slack; otherwise, Anthropic Claude evaluates the research against the defined ICP tiers and returns a structured fit
Notify Slack about new marketplace templates with the n8n Templates API
Quick overview This workflow runs every two hours to check the n8n public Templates API for the latest workflows in a chosen category, tracks which template IDs have already been seen using workflow static data, and posts a Slack digest when new templates appear. How it works Runs on a schedule every 2 hours. Loads configuration values such as the template category slug, the Slack channel, how many templates to check, and whether to report when none are new. Calls the n8n Templates search API to fetch the most recent templates for the configured category. Extracts key metadata (ID, title, description snippet, creator, date, and URL) from the API response. Compares the fetched template IDs against previously seen IDs stored in workflow static data and updates the cache with the latest IDs. If new templates are found, formats a Slack digest and posts it to the configured Slack channel. If no new templates are found and reporting is enabled, posts a “no new templates” all-clear message to Slack. Setup Add Slack credentials in n8n with permission to post messages to your target channel. Update the Configuration values for categorySlug and slackChannel (and optionally templatesToCheck a
Screen and route candidate CVs with OpenRouter, Google Drive, Sheets, and Gmail
Quick overview This workflow receives candidate CVs via a webhook, extracts text from PDF, DOCX files, looks up the matching job description in Google Sheets, runs a three-agent evaluation using OpenRouter models, then uploads the CV to Google Drive, logs results to Google Sheets, and sends or drafts emails in Gmail. How it works Receives a CV submission via a POST webhook that includes candidate details, an applied job ID, and a CV file. Normalizes the intake data, timestamps the submission, and fetches the matching job description from Google Sheets using the applied job ID. Extracts CV text by either parsing the PDF directly or converting a DOCX/DOC to a Google Doc in Google Drive and exporting it as plain text. Detects whether the CV is Vietnamese or not and uses OpenRouter (Qwen for Vietnamese or Google Gemini for others) to parse the CV into a structured Candidate Profile JSON. Uses OpenRouter (Anthropic Claude Sonnet) to compare the Candidate Profile against the job description, then generates a hiring-manager style review and recommendation based on the ATS evaluation. Uploads the original CV to a recommendation-based Google Drive folder, logs the full screening record (inc
Generate Telegram image-to-video clips with AtlasCloud WAN 2.7 and post via Blotato to TikTok, Instagram, Facebook
Quick overview This workflow listens for a Telegram message containing a photo and caption, generates an image-to-video clip via AtlasCloud (WAN 2.7), then publishes the resulting video to TikTok, Instagram, and Facebook using Blotato and sends a confirmation back on Telegram. How it works Triggers when a Telegram bot receives a message with a photo and caption. Extracts the caption as the video prompt/caption, sets duration and resolution, and downloads the attached photo from Telegram. Uploads the photo to AtlasCloud and starts an image-to-video generation job using the WAN 2.7 model. Waits briefly, then polls AtlasCloud for the generation status until it returns completed/succeeded. Uses the returned video URL and caption to publish the video to TikTok, Instagram, and a Facebook page via Blotato. Sends a Telegram message back to the original chat confirming publishing and includes the generated video link. Setup Create/select Telegram bot credentials and use the bot to receive photo messages and send confirmations. Add an AtlasCloud API key as an HTTP Header Auth credential (Bearer token) and select it on the two AtlasCloud HTTP Request steps. Install and enable the Blotato comm
Dub Telegram video links with ElevenLabs and publish to YouTube and TikTok
Quick overview This workflow accepts a video URL from Telegram, sends it to the ElevenLabs Dubbing API to generate a dubbed version in a target language, then uploads the result to Blotato to publish it on YouTube and TikTok and confirms completion back in Telegram. How it works Triggers when a Telegram bot receives a message containing a video link. Reads configuration values such as source/target language, speaker count, watermark/background-audio options, and default YouTube title and caption. Creates an ElevenLabs dubbing job for the provided source URL and periodically checks the job status until it is complete or failed. Stops with an error if ElevenLabs reports the dubbing job as failed. Downloads the dubbed video/audio file from ElevenLabs and uploads the binary file to Blotato to get a public media URL. Publishes the dubbed media to YouTube and TikTok via Blotato (marked as AI/synthetic media) and sends a success message back to the originating Telegram chat. Setup Create a Telegram bot with BotFather, add a Telegram API credential in n8n, and select it for both the Telegram trigger and the Telegram notification step. Create an ElevenLabs API key and configure an HTTP Head
Send signed WooCommerce orders to KSeF via a self-hosted KSeF Gateway
Quick overview This workflow receives WooCommerce order webhooks, verifies the WooCommerce signature, converts eligible orders into a KSeF invoice payload, and submits them to a self-hosted KSeF Gateway API, skipping consumer orders that do not include a buyer NIP. How it works Receives a WooCommerce order webhook request and keeps the raw request body for signature validation. Verifies the X-WC-Webhook-Signature HMAC against your shared webhook secret and rejects invalid requests with a 401 response. Extracts the buyer NIP from WooCommerce order meta data and maps the order (seller, buyer, line items, VAT rates, and payment details) into a KSeF invoice payload. Skips processing and responds to WooCommerce with a success message when the order has no buyer NIP (consumer purchase). Sends the invoice payload to your self-hosted KSeF Gateway endpoint over HTTP with an X-Api-Key header. Responds to WooCommerce with the resulting KSeF number (when available) or an error from the gateway. Setup Deploy a KSeF Gateway instance and note its base URL. Update the workflow configuration values for the gateway URL and API key, seller NIP/name/address, and the WooCommerce webhook secret. In WooC
Create KSeF invoices from completed Sellf purchases via KSeF Gateway
Quick overview This workflow receives signed Sellf purchase webhooks, validates the HMAC signature, and when the buyer requests an invoice with a NIP it builds a KSeF-ready invoice and submits it to a self-hosted KSeF Gateway, capturing the returned KSeF number or an error. How it works Receives a POST webhook from Sellf with the raw request body and the X-Sellf-Signature header. Verifies the webhook signature using HMAC-SHA256 and rejects the request with a 401 response if the signature is invalid. Responds immediately with a JSON OK response and continues processing in the background. Filters the event to purchase.completed and extracts the customer, order, and invoice details from the webhook payload. Continues only if the customer requested an invoice and provided a non-empty NIP. Builds a KSeF invoice payload using your seller details and the purchase data, then posts it to your KSeF Gateway /ksef/invoice endpoint with an X-Api-Key header. Stores the KSeF submission result by extracting the ksefNumber and status on success, or capturing the returned error details on failure. Setup Set up Sellf webhooks to send purchase.completed events to this workflow’s production webhook URL
Poll and download received invoice PDFs with KSeF Gateway to disk storage
Quick overview This workflow runs every 20 minutes to poll a self-hosted KSeF Gateway for newly received KSeF invoices, maintains a cursor checkpoint in n8n static data, downloads each new invoice PDF via the gateway API, and saves the files to local disk. How it works Runs every 20 minutes on a schedule. Reads the last successful polling checkpoint from the workflow’s static data and calls the KSeF Gateway /ksef/invoices/received/new endpoint with the since cursor. If the gateway response is unsuccessful, records the error details for alerting and leaves the checkpoint unchanged so the next run retries the same window. If the response is successful, stores the returned nextSince value as the new checkpoint. If new invoices are returned, processes each invoice summary individually. Downloads each invoice PDF from the KSeF Gateway /ksef/invoice/{ksefNumber}/pdf endpoint and saves it to the configured local folder. Outputs invoice metadata (number, seller, amount, and saved file path) as a placeholder where you can plug in notifications (Slack, email, or Discord). Setup Deploy and configure a self-hosted KSeF Gateway (https://github.com/jurczykpawel/ksef-gateway) with a token or cert
Generate SEO-friendly robots.txt with OpenAI and Google Drive
Quick overview This workflow runs manually to check a website’s existing robots.txt, detect the site’s CMS from the homepage HTML using OpenAI, and generate an optimized robots.txt (including the provided sitemap URL) that is saved as a file and uploaded to Google Drive. How it works Starts when you click “Execute workflow” and sets the target website URL and sitemap URL. Requests the site’s existing robots.txt via HTTP and checks whether the response returns status code 200. If robots.txt exists, the workflow stops without making changes. If robots.txt is missing, it fetches the website homepage HTML via HTTP. Sends the HTML to OpenAI to detect the CMS and parses the model output into structured JSON. Uses OpenAI again to generate a production-ready robots.txt tailored to the detected CMS and including the sitemap directive. Converts the generated text into a robots.txt file and uploads it to a chosen folder in Google Drive. Setup Add an OpenAI API credential and ensure the selected chat model is available for both CMS detection and robots.txt generation. Add a Google Drive OAuth2 credential and choose the target Drive and folder for the uploaded robots.txt file. Update the websit
Route patients to the best nearby hospital using Google Maps, GPT-4.1 and Twilio
Quick overview This workflow accepts emergency location requests (or runs on a 5-minute schedule), finds and ranks nearby hospitals/clinics using Google Places, capacity data, and Google Distance Matrix, generates a routing message with OpenAI, sends the recommendation via Twilio SMS, logs the event to Google Sheets, and returns a JSON response. How it works Receives an emergency request via a webhook POST (or runs every 5 minutes on a schedule) and normalizes latitude, longitude, severity, phone number, and a request ID. Validates the GPS coordinates, maps severity to a numeric score, and sets a search radius, returning an error response if the location is invalid. Queries the Google Places API for nearby hospitals and clinics, then merges and deduplicates the results into a single facility list. Looks up each facility’s ED capacity metrics from a capacity API and calculates real-time driving time to each facility with the Google Distance Matrix API. Scores and ranks facilities using a severity-adjusted composite score (travel time, available beds, wait time, and ED diversion penalties) and selects the best match plus two alternatives. Uses OpenAI to generate a calm routing messag
Validate startup ideas and generate business plans with Claude and SendGrid
Quick overview This workflow receives a startup idea via webhook, uses Anthropic Claude to expand it, run market research, competitor analysis, and demand validation, then generates a structured business plan, emails it through SendGrid, logs a summary row to Google Sheets, and returns a JSON response to the webhook caller. How it works Receives a startup idea via an HTTP POST webhook request. Normalizes the submission details (idea, founder, industry, budget) and uses Anthropic Claude to expand the idea into a structured concept with an initial score. Filters out ideas below the viability threshold (ideaScore < 4) to stop low-quality submissions early. Uses Anthropic Claude to produce market sizing and persona research, then parses the results into structured market data. Uses Anthropic Claude to analyze direct and indirect competitors and compute a competitive position score. Uses Anthropic Claude to validate demand signals, risks, and go-to-market recommendations, then calculates a composite score and PROCEED/VALIDATE_FURTHER/PIVOT_OR_ABANDON recommendation. Uses Anthropic Claude to generate a 10-section business plan, appends a tracking row to Google Sheets, emails the report v
Send AI market briefings to email and Discord with AlphaAI and GPT-4
Quick Overview This workflow runs every 15 minutes to fetch AlphaAI’s trending market news, filter for new high-relevance, ticker-linked stories, and post them to a Discord channel via webhook as rich embed cards with sentiment and impact details. How it works Runs every 15 minutes on a schedule trigger. Requests the current trending news feed from the AlphaAI API using Bearer authentication. Filters out already-posted articles, keeps only stories with relevance score ≥ 8 and at least one ticker, and formats up to 10 items into Discord embed cards with AlphaAI sentiment, confidence, actionability, and likely price impact. Posts a single Discord webhook message containing a header and the generated embeds, and stores the posted article IDs to prevent duplicates in future runs. Setup Create an AlphaAI API key and add it as an n8n HTTP Bearer Auth credential used by the AlphaAI request. Create a Discord channel webhook and paste its URL into the Discord webhook HTTP request node. Activate the workflow and keep it running on the same n8n instance so its stored posted-article IDs can be reused across executions.
Process signed DocuSign contracts with Supabase, Claude, Stripe, Outlook and Gmail
Quick overview This workflow listens for DocuSign Connect envelope-completed events, looks up the related assessment in Supabase, updates contract and client records, sends a welcome email (optionally drafted with Anthropic), creates an onboarding session and invite, and for non-pilot clients creates a Stripe Checkout payment link and emails it. How it works Receives a POST webhook from DocuSign Connect and continues only when the envelope status indicates the contract is completed. Queries Supabase for the assessment record matching the DocuSign envelope ID and normalizes the returned data to a single assessment object. Updates the assessment in Supabase to mark the contract as completed, upserts a client record in Supabase, and calls an internal webhook to fetch the signed contract. Sends either a pilot welcome email or a standard welcome email via Microsoft Outlook, with the standard email body drafted by Anthropic and optionally logged to a separate cost-tracking workflow. Generates a resume token, creates an onboarding session in Supabase, waits 24 hours, then sends the onboarding questionnaire invite via Microsoft Outlook and emails an internal notification via Gmail. For non
Send DocuSign envelopes with Supabase contract data
Quick overview This workflow is triggered by another n8n workflow, fetches an assessment record from Supabase, generates an HTML contract, and sends it as a DocuSign envelope using JWT authentication in either production or sandbox based on the recipient email, then writes the envelope ID and status back to Supabase. How it works Receives an execution request from another workflow with an assessment ID (and optional contract title). Retrieves the matching assessment record from the Supabase assessments table. Generates a styled contract HTML document from the assessment data and Base64-encodes it for DocuSign. Chooses the DocuSign sandbox or production path based on whether the contact email contains a specific marker string. Calls a Supabase Edge Function to create a DocuSign JWT assertion, exchanges it for a DocuSign access token, and creates a “sent” envelope with two signers and anchor-based signature tabs. Updates the Supabase assessment record with the DocuSign envelopeId and sets the contract status to envelope_sent. Setup Create and connect Supabase credentials in n8n, and update the Supabase project URL for the Edge Function endpoint (/functions/v1/docusign-sign-jwt). Conf
Research Reddit trends and publish LinkedIn posts with Gemini and PostPeer
Quick overview This workflow runs daily, scrapes a selected subreddit with Apify, researches sources via Brave Search and Jina Reader, and uses Eden AI (DeepSeek) plus Google Gemini to draft a LinkedIn post with an image. It logs state in Google Sheets/Drive, sends approval emails, and publishes via PostPeer. How it works Runs daily on a schedule, loads Global Constants, and picks an ACTIVE subreddit row from Google Sheets using a random ID. Scrapes recent posts from that subreddit using an Apify Reddit scraper, then normalizes, scores, and deduplicates candidates. Uses an Eden AI (DeepSeek) agent to vet the candidates and either selects one post idea or stops and records a NO_VIABLE_IDEA entry in Google Sheets and emails the rationale. For a selected idea, a second Eden AI (DeepSeek) agent generates a research brief and up to five Brave Search queries, then Brave Search and Jina Reader collect and extract a small set of non-social sources. A third Eden AI (DeepSeek) agent writes the LinkedIn draft and an accompanying image prompt, then Google Gemini generates the image. Uploads the image to Google Drive, writes the draft and metadata to a Google Sheets post log, and emails a two-s
Review GitHub pull requests with Mistral and send decisions to Slack
Quick overview This workflow receives GitHub webhook events for pull requests, pushes, and branch/tag creates, filters out actions from the repo owner, and posts alerts to Slack (optionally Discord). For pull requests, it uses Mistral to generate an AI review from the PR diff and supports a human approval form. How it works Receives a GitHub webhook request and filters for push, create, and pull_request events coming from non-owner accounts (and non-deleted branches). Routes the event by type and, for push and create events, extracts key details and posts a notification to Slack (optionally Discord). For pull request opened, reopened, or synchronize events, extracts PR metadata such as title, URLs, branch refs, and change counts. Uses Mistral (via an AI agent) to fetch the PR unified diff over HTTP and generate a structured JSON review, optionally consulting existing GitHub PR reviews for synchronize re-reviews. Posts the AI recommendation to Slack with a link to a hosted PR review form (optionally Discord) and waits up to 24 hours for a reviewer decision. Applies the reviewer decision back to GitHub by approving the PR and merging it, requesting changes with a comment, or closing
Upload CSV test cases to Qase and send completion alerts to Slack
Quick overview This workflow upload test cases from a CSV file into Qase App and sends a confirmation message to your Slack channel. How it works Receives a form submission containing a public CSV URL and a selected Qase project option. Downloads the CSV file from the provided URL and extracts its rows into individual test-case items. Maps each row into the JSON payload Qase expects (including project code, fields like severity/priority/type, and optional parsed steps). Creates the test cases in Qase by sending a POST request per item to the Qase Cases API for the mapped project. Aggregates the upload responses into a single result. Sends a Slack incoming-webhook message confirming the test case upload is complete. Setup Create a Qase API token and add it to the Qase HTTP Header Auth credentials used for the Qase API request. Create a Slack Incoming Webhook, paste the webhook URL into the Slack notification HTTP request node, and customize the message text if needed. Ensure the uploaded CSV is publicly accessible via URL and uses the expected columns (for example: title, description, preconditions, postconditions, severity, priority, type, layer, behavior, automation, and optional
Triage and deduplicate GitHub issues with Claude Sonnet 4.5
Quick overview Detect and merge duplicate GitHub issues automatically using Claude AI. This n8n automation triggers on new GitHub issues, checks them against open issues for duplicates, merges duplicate reports into the original, and applies AI-generated labels or requests missing reproduction steps. How it works Triggers automatically when a new GitHub issue is opened, kicking off AI-powered issue triage. Fetches up to 30 currently open GitHub issues from the same repository as duplicate-detection candidates. Sends the new issue and the candidate list to Claude AI, which assigns labels, detects duplicate issues, and drafts a reproduction-request comment when needed. If Claude AI flags the issue as a duplicate, the automation labels the new issue, links it to the original GitHub issue, and comments with a reference back to it. For duplicate issues, the workflow also updates the original issue's body with a tracked "reported by N users" summary and posts a comment merging in the new report's details — keeping duplicate GitHub issues consolidated instead of scattered across separate threads. If the issue isn't a duplicate, Claude AI applies the right labels and, when reproduction ste
Triage and retry failed workflow executions with Anthropic, Jira and OpenTelemetry
Quick overview This workflow triggers on n8n execution errors, uses Anthropic (Claude) to classify the failure as transient or logic, and then either retries the failed execution via the n8n API with exponential backoff or creates a Jira issue, while also sending incident telemetry to an OpenTelemetry collector. How it works Triggers automatically when an n8n workflow execution errors. Extracts key telemetry like workflow name, failing node, error message/stack, execution URL, and any detected HTTP status code. Sends the error context to Anthropic (Claude) to return structured JSON with a category, confidence, and remediation guidance. Combines the AI diagnostics with telemetry and tracks a per-incident retry counter (up to three attempts) to decide if the failure is eligible for automated retry. If the error is transient with sufficient confidence and retry budget remains, waits using exponential backoff and calls the n8n API to retry the failed execution, then records the retry outcome. If the error is not retry-eligible (or the retry budget is exhausted), creates a Jira issue with the diagnostics, execution link, and failure details. Posts an OpenTelemetry trace span to your col
Monitor target account funding, acquisitions, and exec moves with Datahyena and Slack
Quick overview This workflow runs every morning and checks Datahyena for funding events, acquisitions, and executive moves from the last 24 hours, then posts matching updates for your target account domains to a Slack channel. How it works Runs every day at 9:00 AM. Loads a list of target company domains to monitor. Fetches the last 24 hours of funding events from the Datahyena API, filters to events where the company domain matches your target list, and posts each match to Slack. Fetches the last 24 hours of acquisition events from the Datahyena API, filters to deals where either the acquirer or target domain matches your list, and posts each match to Slack. Fetches the last 24 hours of executive move events from the Datahyena API, filters to moves where the current or previous company domain matches your list, and posts each match to Slack. Setup Create a Datahyena API key and configure an HTTP Header Auth credential with header name X-API-Key for the three Datahyena HTTP requests. Update the target domain list in the workflow’s target accounts step (the domains array). Connect your Slack credential and select the channel for the three Slack message steps.
Predict sprint slip risk in Jira with OpenAI via OpenRouter and Slack alerts
Quick Overview This workflow runs on a weekday morning schedule (or manually) to pull the active Jira sprint and its issues, compute sprint health metrics, use an OpenRouter-hosted OpenAI model to assess slip risk, and post a motivating alert to a Slack channel when the sprint is behind. How it works Runs every weekday at 08:00 (or when executed manually). Calls the Jira Software Cloud Agile API to fetch the board’s active sprint and all issues in that sprint, including status, labels, and story points. Calculates sprint timing, completion percentage, slip margin, velocity gap, and a list of potentially blocked issues based on labels or status. Sends the computed metrics to an OpenRouter (OpenAI) chat model to return a structured JSON risk assessment (on_track, at_risk, or critical) with recommendations and tickets to watch. Parses the model output into JSON and merges it with the computed sprint metrics for reporting. If the risk level is not on_track, a second OpenRouter (OpenAI) agent drafts a team-focused status update and posts it to the configured Slack channel. If the risk level is on_track (or parsing fails and defaults to on_track), the workflow ends without posting to Sla