> ## Documentation Index
> Fetch the complete documentation index at: https://docs.paradime.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Getting Started

> Setup Paradime Webhooks: Configure webhooks for dbt™ project events. Ensure efficient event management and integration.

export const Arcade = ({src, title}) => <div style={{
  position: 'relative',
  paddingBottom: 'calc(56.2225% + 41px)',
  height: 0,
  width: '100%'
}}>
    <iframe src={src} title={title} frameBorder="0" loading="lazy" allow="clipboard-write" allowFullScreen style={{
  position: 'absolute',
  top: 0,
  left: 0,
  width: '100%',
  height: '100%',
  colorScheme: 'light'
}} />
  </div>;

## **How to setup your first webhook**

Paradime's webhook system supports JSON payloads to your application's endpoint URL when your webhook is triggered.

Paradime supports the below events for Bolt runs:

* `bolt.run.started` — Triggered when a Bolt run is started
* `bolt.run.completed` — Triggered when a Bolt run is completed. This can be a run that has failed or succeeded.

<Arcade src="https://demo.arcade.software/bNf3AKjW6tjLkS9cuSWb?embed&embed_mobile=tab&embed_desktop=inline&show_copy_link=true" title="Getting Started" />

## Examples of JSON payloads

### An example of a webhook payload for a completed run:

The `bolt.run.completed` event provide all the data required to see the details of the execution for a schedule. This event also enables you to query additional metadata for each dbt™️ command using a pre-populate graphql endpoint provided in the fields:

* **`api_query`** - this endpoint will allow you to query and extract for each command in the schedule the raw console logs
* **`resource_query`** - this endpoint will allow you to query and extract for each command the relate resources generated by the execution of the command, for example the `run_results.json` or the `manifest.json`

<Info>
  See Also: [bolt-api.md](/products/bolt/bolt-api "mention")
</Info>

```json theme={"system"}
{
  "api_url": "https://api.paradime.io/api/v1/abc/graphql",
  "commands": [
    {
      "api_query": "query BoltCommand {\n    boltCommand(commandId: 92363) {\n        command\n        startDttm\n        endDttm\n        stdout\n        stderr\n        returnCode\n        scheduleRunId\n        resources {\n            id\n            path\n        }\n    }\n}",
      "command": "git clone ...",
      "end_dttm": "2023-06-06 11:00:14.648628",
      "id": 92363,
      "json_resources": [],
      "return_code": 0,
      "start_dttm": "2023-06-06 11:00:12.621312",
      "status": "succeeded"
    },
    {
      "api_query": "query BoltCommand {\n    boltCommand(commandId: 92375) {\n        command\n        startDttm\n        endDttm\n        stdout\n        stderr\n        returnCode\n        scheduleRunId\n        resources {\n            id\n            path\n        }\n    }\n}",
      "command": "dbt run",
      "end_dttm": "2023-06-06 11:00:44.677818",
      "id": 92375,
      "json_resources": [
        {
          "id": 7525717,
          "path": "target/manifest.json",
          "resource_query": "query BoltResourceUrl {\n    boltResourceUrl(resourceId: 7525717) {\n        ok\n        url\n    }\n}"
        }
      ],
      "return_code": 0,
      "start_dttm": "2023-06-06 11:00:23.246926",
      "status": "succeeded"
    }
  ],
  "end_dttm": "2023-06-06 11:00:47.780816",
  "environment": {
    "actor": "Scheduler",
    "branch": "dbt-run",
    "commit_hash": "cbe09ae8b090f165e366501d0ccc164ab4019ca2",
    "email": "None"
  },
  "error_string": "None",
  "id": 1234,
  "run_url": "https://app.paradime.io/bolt/run_id/1234",
  "schedule": {
    "commands": [
      "dbt run"
    ],
    "deferred_schedule": "None",
    "description": "None",
    "env_overrides": "None",
    "environment": "production",
    "git_branch": "dbt-run",
    "hightouch": "None",
    "name": "Hourly Run",
    "notifications": "None",
    "owner_email": "fabio@paradime.io",
    "schedule": "@hourly",
    "sla_minutes": "None",
    "slug": "hourly-run",
    "turbo_ci": "None"
  },
  "schedule_name": "Hourly Run",
  "slug": "hourly-run",
  "start_dttm": "2023-06-06 11:00:12.296501",
  "status": "failed",
  "uuid": "b922fa9b-ca80-3dbd-8136-7b8be966088d",
  "workspace": {
    "name": "dbt",
    "uid": "foo"
  }
}
```

### An example of a webhook payload for a started run:

```json theme={"system"}
{
  "api_url": "https://api.paradime.io/api/v1/abc/graphql",
  "environment": {
    "actor": "Scheduler",
    "branch": "dbt-run",
    "commit_hash": "cbe09ae8b090f165e366501d0ccc164ab4019ca2",
    "email": "None"
  },
  "id": 1234,
  "run_url": "https://app.paradime.io/bolt/run_id/1234",
  "schedule": {
    "commands": [
      "dbt run"
    ],
    "deferred_schedule": "None",
    "description": "None",
    "env_overrides": "None",
    "environment": "production",
    "git_branch": "dbt-run",
    "hightouch": "None",
    "name": "Hourly Run",
    "notifications": "None",
    "owner_email": "fabio@paradime.io",
    "schedule": "@hourly",
    "sla_minutes": "None",
    "slug": "hourly-run",
    "turbo_ci": "None"
  },
  "schedule_name": "Hourly Run",
  "slug": "hourly-run",
  "start_dttm": "2023-06-06 11:00:12.296501",
  "uuid": "b922fa9b-ca80-3dbd-8136-7b8be966088d",
  "workspace": {
    "name": "dbt",
    "uid": "foo"
  }
}
```

## Webhook Payload Transformations

Payload transformations let you filter or modify webhook events **before they are delivered**. The transformation runs inside Paradime — if you cancel the event, no request is sent to your destination.

***

### When to use transformations

Use a transformation to suppress webhook deliveries you don't need to act on. Two common cases:

| Case                                            | Why skip it                                  |
| ----------------------------------------------- | -------------------------------------------- |
| `bolt.run.completed` with `status: "passed"`    | Only failures need alerting                  |
| Turbo CI runs (`schedule.turbo_ci` is non-null) | CI jobs are not production schedule failures |

***

### Example: Skip passed runs and Turbo CI

The handler below cancels delivery for both categories above.

```javascript theme={"system"}
function handler(webhook) {
  var payload = webhook.payload;

  // Skip passed runs — only failed runs need alerting
  if (payload.status === "passed") {
    webhook.cancel = true;
    return webhook;
  }

  // Skip Turbo CI jobs — these are CI runs, not production schedule failures
  if (payload.schedule && payload.schedule.turbo_ci !== null) {
    webhook.cancel = true;
    return webhook;
  }

  return webhook;
}
```

Setting `webhook.cancel = true` stops delivery entirely. The event is dropped — no HTTP request is made to your endpoint.

***

### How to apply a transformation

1. Go to **Webhooks** and click the webhook you want to configure.
2. Open the **Advanced** tab.
3. Toggle **Enable transformation** on.
4. Click **Edit transformation** and paste your handler function.
5. Save.

> **Tip:** Changes take effect immediately on the next event. Test with a manual run before relying on it in production.

<Arcade src="https://demo.arcade.software/7YL6KA5OSV6ON7xmhXjQ?embed&embed_mobile=tab&embed_desktop=inline&show_copy_link=true" title="Getting Started" />


## Related topics

- [Getting Started](/developers/paradime-cli/getting-started.md)
- [Paradime Setup and Configuration](/integrations/pre-commit/paradime-setup-and-configuration.md)
- [Copilot](/products/dino-ai/copilot/index.md)
- [Create Azure DevOps Items](/products/bolt/creating-schedules/templates/ticketing-templates/create-azure-devops-items.md)
