---
description: Receive real-time webhook notifications for builds, deployments, and jobs in Capawesome Cloud. Integrate with CI/CD, Slack, and backends.
title: Webhooks for Build and Deployment Events - Capawesome
image: https://capawesome.io/docs/assets/images/social/cloud/webhooks.png
---

[ Skip to content](#webhooks) 

[ 🎉 Introducing **Capawesome Platform** — one platform for Live Updates, Native Builds, App Store Publishing, and Insider SDKs.](https://capawesome.io) 

* [  Formbricks ](/docs/plugins/formbricks/)
* [  Geocoder ](/docs/plugins/geocoder/)
* [  Google Sign-In ](/docs/plugins/google-sign-in/)
* [  libSQL ](/docs/plugins/libsql/)
* [  Live Update ](/docs/plugins/live-update/)
* [  Managed Configurations ](/docs/plugins/managed-configurations/)
* [  Media Session ](/docs/plugins/media-session/)
* [  ML Kit ](/docs/plugins/mlkit/)
* [  NFC ](/docs/plugins/nfc/)
* [  OAuth ](/docs/plugins/oauth/)
* [  Pedometer ](/docs/plugins/pedometer/)
* [  Photo Editor ](/docs/plugins/photo-editor/)
* [  PostHog ](/docs/plugins/posthog/)
* [  Printer ](/docs/plugins/printer/)
* [  Purchases ](/docs/plugins/purchases/)
* [  RealtimeKit ](/docs/plugins/realtimekit/)
* [  Screen Orientation ](/docs/plugins/screen-orientation/)
* [  Screenshot ](/docs/plugins/screenshot/)
* [  Secure Preferences ](/docs/plugins/secure-preferences/)
* [  Speech Recognition ](/docs/plugins/speech-recognition/)
* [  Speech Synthesis ](/docs/plugins/speech-synthesis/)
* [  Share Target ](/docs/plugins/share-target/)
* [  Square Mobile Payments ](/docs/plugins/square-mobile-payments/)
* [  SQLite ](/docs/plugins/sqlite/)
* [  Superwall ](/docs/plugins/superwall/)
* [  Torch ](/docs/plugins/torch/)
* [  Wifi ](/docs/plugins/wifi/)
* [  Zip ](/docs/plugins/zip/)
* [  Cloud ](/docs/cloud/)
* [  Live Updates ](/docs/cloud/live-updates/)
* Advanced
* Integrations
* [  Native Builds ](/docs/cloud/native-builds/)
* [  Configuration ](/docs/cloud/native-builds/configuration/)
* [  Environments ](/docs/cloud/native-builds/environments/)
* Guides
* [  Sample Projects ](/docs/cloud/native-builds/sample-projects/)
* [  Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [  Automations ](/docs/cloud/automations/)
* [  Assist ](/docs/cloud/assist/)
* Account
* Organizations
* [  Organization and User Management ](/docs/cloud/organizations/memberships/)
* [  Single Sign-On (SSO) ](/docs/cloud/organizations/sso/)
* [  Teams ](/docs/cloud/organizations/teams/)
* [  Two-Factor Authentication ](/docs/cloud/organizations/two-factor-authentication/)
* [  Integrations ](/docs/cloud/integrations/)
* [  License Keys ](/docs/cloud/license-keys/)
* Webhooks [  Webhooks ](/docs/cloud/webhooks/)
* [  Managing Webhooks ](#managing-webhooks)
* [  Verifying Signatures ](#verifying-signatures)
* [  Delivery History ](#delivery-history)
* [  Pricing ](https://capawesome.io/pricing/)
* [  FAQ ](/docs/cloud/faq/)
* [  Support ](/docs/cloud/support/)
* [  Contributing ](/docs/contributing/)
* [  LLMs ](/docs/llms/)
* [  Insiders ](/docs/insiders/)
* [  License ](https://capawesome.io/legal/eula/)
* [  Support ](/docs/insiders/support/)
* [  FAQ ](/docs/insiders/faq/)
* [  Blog ](/blog/)
* Categories

* [  Managing Webhooks ](#managing-webhooks)
* [  Verifying Signatures ](#verifying-signatures)
* [  Delivery History ](#delivery-history)

# Webhooks[¶](#webhooks "Permanent link")

Webhooks allow you to receive real-time notifications when specific events occur in your app. When an event is triggered, Capawesome Cloud sends an HTTP POST request to your configured endpoint, enabling integrations with external services like CI/CD pipelines, Slack, or custom backends.

## Events[¶](#events "Permanent link")

The following events are currently supported:

| Event                    | Description                                 |
| ------------------------ | ------------------------------------------- |
| app\_build\_created      | Triggered when a new app build is created.  |
| app\_deployment\_created | Triggered when a new deployment is created. |
| job\_created             | Triggered when a new job is created.        |
| job\_finished            | Triggered when a job finishes.              |

Need an event that's not listed here? [Let us know](/docs/cloud/support/) and we'll look into adding it.

### Payload[¶](#payload "Permanent link")

Each webhook request contains a JSON body with an `event` field indicating the event type and a `data` field containing the event payload. Here is an example of a `job_finished` event:

`[](#%5F%5Fcodelineno-0-1){
[](#%5F%5Fcodelineno-0-2)  "event": "job_finished",
[](#%5F%5Fcodelineno-0-3)  "data": {
[](#%5F%5Fcodelineno-0-4)    "id": "16555c02-a320-4bec-a14a-52754d783970",
[](#%5F%5Fcodelineno-0-5)    "appBuildId": "647d1fe4-9cb7-4f25-afaf-7a0c13a1bb8c",
[](#%5F%5Fcodelineno-0-6)    "appDeploymentId": null,
[](#%5F%5Fcodelineno-0-7)    "appId": "70922e93-0944-48cc-a560-61135ab291ad",
[](#%5F%5Fcodelineno-0-8)    "canceledAt": 1771143284003,
[](#%5F%5Fcodelineno-0-9)    "canceledBy": "f624e455-b19c-4f17-8282-e4a7a02597f3",
[](#%5F%5Fcodelineno-0-10)    "finishedAt": 1771143284003,
[](#%5F%5Fcodelineno-0-11)    "inProgressAt": 1771143275311,
[](#%5F%5Fcodelineno-0-12)    "inProgressTimeInSeconds": 8,
[](#%5F%5Fcodelineno-0-13)    "organizationId": "a7249949-a705-4952-a293-a06df84950dc",
[](#%5F%5Fcodelineno-0-14)    "pendingAt": 1771143256381,
[](#%5F%5Fcodelineno-0-15)    "pendingTimeInSeconds": 18,
[](#%5F%5Fcodelineno-0-16)    "queuedAt": null,
[](#%5F%5Fcodelineno-0-17)    "queueTimeInSeconds": null,
[](#%5F%5Fcodelineno-0-18)    "stack": "macos-tahoe",
[](#%5F%5Fcodelineno-0-19)    "status": "canceled",
[](#%5F%5Fcodelineno-0-20)    "totalTimeInSeconds": 27,
[](#%5F%5Fcodelineno-0-21)    "createdAt": 1771143256161,
[](#%5F%5Fcodelineno-0-22)    "createdBy": "f624e455-b19c-4f17-8282-e4a7a02597f3"
[](#%5F%5Fcodelineno-0-23)  }
[](#%5F%5Fcodelineno-0-24)}
`

## Managing Webhooks[¶](#managing-webhooks "Permanent link")

Webhooks are configured per app. To manage webhooks, navigate to **Settings > Webhooks** in your app's sidebar in the [Capawesome Cloud Console](https://console.cloud.capawesome.io/). From there, you can create, edit, and delete webhooks.

Each webhook has the following properties:

* **Name** (required): A human-readable name to identify the webhook.
* **URL** (required): The endpoint URL that receives the HTTP POST requests.
* **Format** (required): The payload format. Use `Raw` for custom integrations or one of the integration-specific formats ([Discord](/docs/cloud/integrations/discord/), [Slack](/docs/cloud/integrations/slack/), [Microsoft Teams](/docs/cloud/integrations/microsoft-teams/)) to send pre-formatted messages.
* **Events** (required): One or more events that trigger the webhook.
* **Signing Secret** (optional): A secret used to sign each request via the `X-Signature` header so the receiver can verify the payload authenticity. Only available for the `Raw` format.
Testing 

You can use [webhook.cool](https://webhook.cool/) to generate a temporary URL for testing your webhook configuration.

## Verifying Signatures[¶](#verifying-signatures "Permanent link")

If a signing secret is configured, each webhook request includes an `X-Signature` header containing an HMAC-SHA256 signature of the request body. You should verify this signature to ensure the request is authentic and has not been tampered with.

The following example shows how to verify the signature in Node.js:

`[](#%5F%5Fcodelineno-1-1)import crypto from "node:crypto";
[](#%5F%5Fcodelineno-1-2)
[](#%5F%5Fcodelineno-1-3)const secret = "SIGNING_SECRET";
[](#%5F%5Fcodelineno-1-4)const hmac = crypto.createHmac("sha256", secret);
[](#%5F%5Fcodelineno-1-5)const digest = Buffer.from(
[](#%5F%5Fcodelineno-1-6)  hmac.update(request.rawBody).digest("hex"),
[](#%5F%5Fcodelineno-1-7)  "utf8"
[](#%5F%5Fcodelineno-1-8));
[](#%5F%5Fcodelineno-1-9)const signature = Buffer.from(request.get("X-Signature") || "", "utf8");
[](#%5F%5Fcodelineno-1-10)
[](#%5F%5Fcodelineno-1-11)if (!crypto.timingSafeEqual(digest, signature)) {
[](#%5F%5Fcodelineno-1-12)  throw new Error("Invalid signature.");
[](#%5F%5Fcodelineno-1-13)}
`

## Delivery History[¶](#delivery-history "Permanent link")

Every webhook keeps a delivery log. Each delivery record includes:

* **Event**: The event that triggered the delivery.
* **Request Body**: The JSON payload sent to the endpoint.
* **Response Status Code**: The HTTP status code returned by the endpoint.
* **Response Body**: The response body returned by the endpoint.
* **Sent At**: The timestamp of the delivery attempt.

Deliveries with a `2xx` status code are marked as successful. Failed deliveries can be manually resent from the [Capawesome Cloud Console](https://console.cloud.capawesome.io/).

May 8, 2026 

 Back to top 