Webhook Integration Guide
Set up real-time notifications to keep your team informed about test activities across Slack, Discord, Teams, Google Chat, or any custom endpoint.
Overview
TestKase webhook notifications deliver real-time updates about your testing activities directly to your team's communication channels. When events occur -- like a test case being created, a test cycle completing, or a bulk execution finishing -- TestKase sends a formatted notification to the webhook URL you configure.
Real-time delivery
Notifications sent instantly when events occur
5 platforms supported
Slack, Discord, Teams, Google Chat & Custom
9 event types
Cover test cases, cycles, plans & executions
Auto-retries
Up to 4 retries with exponential backoff
Prerequisites
Webhook notifications are available on every plan, including Always Free.
Before setting up webhook notifications, make sure you have:
- A TestKase account with an active project
- Admin or project-level permissions to manage notification integrations
- A webhook URL from your target platform (see setup guides below)
Platform Setup Guides
Follow the guide for your platform to obtain a webhook URL. TestKase automatically formats notifications for each platform.
Slack
- Go to api.slack.com/apps and click Create New App -> From scratch.
- Name your app (e.g. "TestKase Notifications") and select your workspace.
- Navigate to Incoming Webhooks in the sidebar and toggle it On.
- Click Add New Webhook to Workspace, select the target channel, and authorize.
- Copy the generated Webhook URL.
Your Slack webhook URL will look like: https://hooks.slack.com/services/T00000/B00000/XXXXXXXX
Discord
- Open Discord and navigate to your target channel.
- Click the gear icon (Edit Channel) -> Integrations -> Webhooks.
- Click New Webhook, give it a name (e.g. "TestKase"), and optionally set an avatar.
- Click Copy Webhook URL.
Your Discord webhook URL will look like: https://discord.com/api/webhooks/000000/XXXXXXXX
Microsoft Teams
- In Microsoft Teams, navigate to the target channel.
- Click the ... menu -> Connectors (or Workflows in new Teams).
- Search for Incoming Webhook and click Configure.
- Give the webhook a name and optionally upload an icon, then click Create.
- Copy the generated Webhook URL.
Your Teams webhook URL will look like: https://outlook.office.com/webhook/... or https://your-org.webhook.office.com/...
Google Chat
- Open the Google Chat space where you want notifications.
- Click the space name at the top -> Apps & integrations.
- Click Webhooks -> Add webhook.
- Enter a name (e.g. "TestKase") and optionally set an avatar URL, then click Save.
- Copy the generated Webhook URL.
Your Google Chat webhook URL will look like: https://chat.googleapis.com/v1/spaces/XXXXX/messages?key=...&token=...
Custom Webhook
You can send notifications to any HTTPS endpoint that accepts POST requests with a JSON body.
This is useful for integrating with monitoring tools, custom dashboards, or internal systems.
TestKase sends a JSON payload with three top-level keys — event, timestamp and data. There is no
top-level project object; the project fields live inside data. For test_case.created:
{
"event": "test_case.created",
"timestamp": "2026-03-01T12:00:00Z",
"data": {
"project_id": "PRJ-123",
"project_name": "My Project",
"testcase_id": "TEST-456",
"title": "Login page validation",
"testcase_url": "https://www.testkase.com/PRJ-123/testcases/TEST-456"
}
}The contents of data differ per event. test_execution.completed, for example, carries cycle and
roll-up fields instead:
{
"event": "test_execution.completed",
"timestamp": "2026-03-01T12:00:00Z",
"data": {
"project_id": "PRJ-123",
"project_name": "My Project",
"cycle_id": "TCYCLE-5",
"cycle_title": "Sprint 14 Regression",
"cycle_url": "https://www.testkase.com/PRJ-123/testcycles/TCYCLE-5",
"total": 42,
"succeeded": 38,
"failed": 4,
"summary": { "total": 42, "pass": 38, "fail": 4, "blocked": 0, "not_executed": 0 }
}
}Write your handler to switch on event and read data defensively rather than assuming a fixed shape.
Deliveries are sent with Content-Type: application/json and no signature header — there is no HMAC
or shared-secret header to verify. Treat the payload as unauthenticated: put an unguessable path segment
or query token in the webhook URL itself, and do not act on the payload without re-checking against the
TestKase API.
Your endpoint must respond with a 2xx status code within 10 seconds,
or the delivery will be marked as failed and retried.
Configure in TestKase
Once you have your webhook URL, follow these steps to connect it in TestKase:
Connect a New Webhook
- Log in to TestKase and open your project dashboard.
- Open the project's Settings, then select the Notification Integration tab.
- Click Connect on the platform card you want to set up (Slack, Discord, Teams, Google Chat, or Custom).
- Enter a name for the integration (e.g. "#engineering-alerts").
- Paste the webhook URL you copied from your platform.
- Select the events you want to be notified about.
- Click Save. TestKase will validate the URL and create the integration.
Edit an Existing Integration
Click the Edit button on any connected integration card to update the name, URL, or subscribed events. Changes take effect immediately.
Reset / Disconnect
To disconnect an integration, click the Reset button on the integration card. This will stop all notifications to that webhook. You can reconnect at any time.
Events Reference
TestKase supports the following webhook events. You can subscribe to any combination when configuring your integration.
| Event | Description |
|---|---|
test_case.created | New test case created in the project |
test_case.deleted | A test case was deleted from the project |
test_cycle.created | New test cycle created |
test_cycle.deleted | A test cycle was deleted |
test_cycle.completed | All executions in a test cycle have finished |
test_plan.created | New test plan created |
test_plan.deleted | A test plan was deleted |
test_plan.completed | A test plan was marked as complete |
test_execution.completed | A bulk execution run has finished |
Delivery & Retries
TestKase tracks the delivery status of every notification:
| Status | Meaning |
|---|---|
| Pending | Notification is queued for delivery |
| Delivered | Successfully delivered (received 2xx response) |
| Failed | Delivery attempt failed, will be retried |
| Exhausted | All retry attempts have been used |
| Cancelled | Delivery was cancelled (e.g. integration was reset) |
Retry Schedule
When a delivery fails, TestKase retries it up to 4 times with exponential backoff — 5 delivery attempts in total, spanning about 2 hours 36 minutes:
| Attempt | Delay after previous attempt |
|---|---|
| Initial delivery | — |
| Retry 1 | 1 min |
| Retry 2 | 5 min |
| Retry 3 | 30 min |
| Retry 4 | 2 hr |
After the 4th retry fails, the delivery is marked Exhausted and is not attempted again.
Each delivery attempt has a 10-second timeout. If your endpoint does not respond within 10 seconds, the attempt is marked as failed.
What counts as a failed delivery
- Any response outside
2xx. - No response within 10 seconds.
- A redirect. TestKase does not follow
301/302responses — a redirect is treated as a failed delivery. Configure the final URL, not one that redirects to it. - A webhook URL that no longer resolves to a public address. The URL is re-checked on every delivery, not only when you save it, so a hostname later pointed at a private IP starts failing.
Only the HTTP status code your endpoint returned is recorded. The response body is deliberately not stored or shown, so put anything you need to debug into your own logs.
Delivery history retention
Delivery records — including their status, attempt count and error — are kept for 30 days and then deleted automatically. Older delivery history cannot be recovered.
Troubleshooting
Common questions and solutions for webhook integration issues:
▶I'm not receiving any notifications
Check these common causes:
- Verify the webhook URL is correct and the integration is connected (not reset).
- Make sure you've subscribed to the correct events.
- Check if the platform channel still exists and hasn't been archived.
- Look at the integration card in TestKase for any error indicators.
▶I see an 'HTTPS required' error
TestKase requires all webhook URLs to use HTTPS for security. Plain HTTP URLs (http://)
are not accepted. If you're testing locally, use a tunneling service like ngrok to get an HTTPS URL.
▶My URL is being blocked (SSRF protection)
TestKase blocks webhook URLs that resolve to private/internal IP addresses (e.g. 127.0.0.1,
10.x.x.x, 192.168.x.x) to prevent SSRF attacks.
Use a publicly-accessible URL for your webhook endpoint.
▶Notifications stopped after multiple failures
After 5 consecutive failed delivery attempts (the initial delivery plus 4 retries), the notification status becomes "exhausted" and no further retries are attempted for that specific notification. New events will still trigger new delivery attempts. If your endpoint was temporarily down, notifications will resume automatically for new events once it's back online.
▶How can I test without triggering real events?
Create a test project and perform actions like creating a test case or test cycle. These will trigger real notifications to your webhook, letting you verify the setup works end-to-end.
▶What format are notifications sent in for each platform?
TestKase automatically formats notifications for each platform:
- Slack -- Block Kit format with rich text sections
- Discord -- Embed format with colored sidebars
- Teams -- Adaptive Card format
- Google Chat -- Card v2 format
- Custom -- Raw JSON payload (see example above)
