Recommended Free Tools
Cypress Cloud webhooks let you send selected run events as JSON HTTP POST requests to a service you control or a workflow tool. To build a workflow, configure a publicly reachable HTTPS endpoint, choose an event, map its payload fields into the downstream action, and make the receiver verify and deduplicate deliveries. Use a custom webhook when Cypress’s built-in Slack or GitHub integrations do not provide the message, routing logic, or destination you need.
When a custom webhook is the right choice
Start by checking whether a built-in integration already covers the job. Cypress’s Slack integration supports channel or direct-message notifications, run-status preferences, flaky-test alerts, tag and run-group filters, and configurable content sections. Cypress’s GitHub integration reports results through commit checks and pull-request comments. A custom webhook makes sense when you need different message wording or fields, conditional routing, or an action or destination those integrations do not cover.
Typical webhook workflows include sending a custom Slack or Teams message, creating a ticket after a failed run, triggering an incident workflow after a timeout, gating a deployment on a passing run, or forwarding run status to an internal dashboard. Cypress describes these as patterns; confirm the receiving service’s own prerequisites and plan limits.
Choose the event and destination
Available Cypress Cloud events
Cypress Cloud documents three webhook event types: run.completed, run.accessibility.completed, and run.uiCoverage.completed. A completed run can have status passed, failed, errored, timedOut, or cancelled. Decide which event contains the data your workflow needs before configuring the receiver. See the Cypress Webhooks Integration documentation.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Repair Windows errors before they cause bigger problems3Scan for outdated or missing drivers - takes under a minute#1 Best Overall
The accessibility and UI Coverage events include nested report data. Some workflow builders, including Slack Workflow Builder, do not map arrays or nested objects directly; add an intermediate transformation service or a small receiver if you need those fields.
Match the endpoint to the action
- Chat: use a webhook-triggered workflow in Slack or Teams, then map run details into a message.
- GitHub status: forward fields such as
commitSha,status, andrunUrlthrough an automation tool such as Zapier, Make, or n8n; a GitHub Actionsrepository_dispatchworkflow can then post the status. - Deployment: send the event to a deployment provider’s build hook and allow the action only when the run passed.
- Ticket or incident: route failures to a Jira incoming-webhook automation or send failures and timeouts to a PagerDuty integration URL.
- Custom system: receive the POST in an endpoint you host or route it through an automation platform. Cypress also documents an Apps Script pattern for Google Chat.
These examples describe integration patterns, not a guarantee that every destination supports every action or plan.
Configure the webhook in Cypress Cloud
- In Cypress Cloud, open the project and go to Settings → General → Webhooks.
- Select Add webhook.
- Enter the destination’s inbound URL. Use HTTPS and ensure it is publicly reachable and accepts POST requests.
- Select one or more event types:
run.completed,run.accessibility.completed, orrun.uiCoverage.completed. - Set a signing secret and, if your endpoint requires it, a custom authorization header.
- Save the webhook, then use its test control to confirm the destination can receive and parse a request.
Only Owners, Admins, and Team Admins can create, edit, enable, disable, test, or redeliver project webhooks. Cypress documents a maximum of five webhooks per project. It blocks private, loopback, and internal destinations and does not follow redirects, so use the final public endpoint URL.
Rank #2
Map fields and define workflow conditions
For run.completed, useful top-level fields include status, projectName, runNumber, runUrl, commitBranch, totalTests, and totalFailed. In Slack Workflow Builder, create a workflow triggered by an incoming webhook, define variables using the payload’s top-level keys, compose the message, and link the run label to runUrl.
Make the downstream condition explicit. For example, a ticket workflow might run only when status is failed, while an incident workflow might also include errored and timedOut. Do not assume every unsuccessful run uses the failed status; decide deliberately whether cancelled should trigger an action too.
Example message mapping
A concise notification can include the project and run number, status, branch, failed-test count, and a link to the run. Map each value from the received event rather than hard-coding project-specific data. If a field is absent for an event type, handle that case in the destination instead of assuming all events share the same schema.
Rank #3
Test the workflow and prevent duplicate actions
Use Cypress Cloud’s Send test control to exercise the delivery and signing path. Cypress says the sample is realistic but fabricated, and test sends are attempted once without retries. A successful test confirms connectivity and basic parsing; it does not prove the workflow handles your actual project’s payload or every status branch. Verify the behavior with a real run before relying on it.
Inspect recent deliveries in Cypress Cloud for attempt history and status. Failed or exhausted deliveries can be manually redelivered. Redelivery retains the original event ID, so treat it as the same logical event and avoid repeating downstream actions such as opening duplicate tickets.
Secure the receiver and handle retries
Verify authenticity
Set a signing secret and validate X-Cypress-Signature against the raw request body, using a constant-time comparison. Cypress’s example handlers also reject stale timestamps. A manually entered signing secret must be at least 16 characters; Cypress shows the secret only once, so store it securely when configuring the receiver. Consult the official webhook documentation for the signature format and current verification examples.
Rank #4
Some no-code tools cannot verify an HMAC over the unmodified raw request body. If signature verification is unavailable, keep the generated URL secret and use any authentication controls the destination provides. This is weaker than validating the signature.
Deduplicate by event, not request attempt
Delivery headers include X-Cypress-Event, X-Cypress-Event-Id, X-Cypress-Event-Version, X-Cypress-Request-Id, X-Cypress-Timestamp, and X-Cypress-Idempotency-Key; X-Cypress-Signature is included when a secret is configured. The event ID and idempotency key remain stable across retries, while the request ID changes on each attempt. Store the stable event identifier with the action or job you create, and ignore a repeat event that has already been processed.
Return promptly and account for retry behavior
Cypress times out an attempt after 10 seconds. It retries transport or network errors and HTTP 408, 429, and 5xx responses, using exponential backoff and jitter, for up to 10 total attempts: the initial request plus as many as nine retries. A completed 3xx response, other 4xx responses, and blocked URLs are permanent failures. Have the endpoint validate and enqueue work quickly, then return an appropriate response rather than waiting for a lengthy downstream action.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Troubleshooting common failures
- The webhook cannot be saved or deliveries are blocked: confirm the URL is public and reachable, uses the final endpoint rather than a redirect, and is not private, loopback, or internal.
- The destination receives no useful fields: confirm the selected event type and inspect the actual payload shape. Nested or array report data may need an intermediate transformation.
- Slack or another workflow rejects the payload: check whether the destination’s webhook trigger expects a specific schema, and map the top-level variables it supports.
- One run creates duplicate tickets or alerts: deduplicate on
X-Cypress-Event-IdorX-Cypress-Idempotency-Key, not the per-attempt request ID. - Deliveries repeatedly time out: make the receiver respond within Cypress’s 10-second attempt timeout; move longer processing to a queue or background job.
- A test succeeds but a real run does not behave as expected: test payloads are fabricated. Inspect a real delivery and exercise each status branch your workflow handles.
- Signature checks fail: verify against the raw body before parsing or transforming it, confirm the configured secret, and check the timestamp handling.
Or skip the browser setup
If the workflow also needs a page capture—for example, to attach a visual snapshot to an alert—ScreenshotNeo offers a website screenshot API and MCP server for developers. One GET request returns a PNG, JPEG, WebP, or PDF:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the ScreenshotNeo API documentation for the request options. ScreenshotNeo accepts cookie and consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; those steps can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and responses identify page verdict and billing status in headers. Its MCP server provides take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients. The free plan includes 1,000 screenshots per month without a card; paid plans start at $5 for 3,000.
Sign up for ScreenshotNeo’s free plan: 1,000 screenshots a month, no card required.
Quick Recap
References
- Cypress Cloud Webhooks Integration
- Cypress Cloud Slack Integration
- Cypress Cloud GitHub Integration
- Cypress webhook workflow examples
- ScreenshotNeo
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




