---
updatedAt: 2026-04-17T04:41:51.000Z
agentTools:
  projectIndex: https://docs.recall.ai/llms.txt
---

# Desktop Recording SDK Webhooks

See which Desktop SDK recording and upload webhooks fire so your application can track recording progress and upload completion.

At different points in the lifecycle of a recording produced by the Desktop Recording SDK, you will receive webhook notifications about the state of the upload. Webhooks are sent through Svix and can be configured in your Recall dashboard.

> 📘 View the webhooks dashboard
>
> * <Anchor label="(US) us-east-1" target="_blank" href="https://us-east-1.recall.ai/dashboard/webhooks/">(US) us-east-1</Anchor>
> * <Anchor label="(Pay-as-you-go) us-west-2" target="_blank" href="https://us-west-2.recall.ai/dashboard/webhooks/">(Pay-as-you-go) us-west-2</Anchor>
> * <Anchor label="(EU) eu-central-1" target="_blank" href="https://eu-central-1.recall.ai/dashboard/webhooks/">(EU) eu-central-1</Anchor>
> * <Anchor label="(JP) ap-northeast-1" target="_blank" href="https://ap-northeast-1.recall.ai/dashboard/webhooks/">(JP) ap-northeast-1</Anchor>

Below is a comprehensive list of the recording lifecycle webhooks that are currently sent by the Desktop Recording SDK. Additional events will be added in the future, but we will not remove existing events from this list.

| Event                          | Description                                             |
| :----------------------------- | :------------------------------------------------------ |
| `sdk_upload.complete`          | SDK Upload has finished successfully.                   |
| `sdk_upload.failed`            | SDK Upload has finished unsuccessfully.                 |
| `sdk_upload.recording_started` | The Desktop SDK has started recording for this upload.  |
| `sdk_upload.recording_ended`   | The Desktop SDK has finished recording for this upload. |

<br />

## `sdk_upload.complete`

This webhook is sent when an SDK Upload has finished successfully.

```json Webhook Payload
{
  "data": {
    "data": {
      "code": "complete",
      "sub_code": null,
      "updated_at": "2025-05-10T15:48:24.034072Z"
    },
    "recording": {
      "id": "0206f11b-68ab-42b1-8a30-b85f60076e83",
      "metadata": {}
    },
    "sdk_upload": {
      "id": "fa08e580-d7b6-4f88-9f71-5b718c5a5f77",
      "metadata": {}
    }
  },
  "event": "sdk_upload.complete"
}
```

## `sdk_upload.failed`

This webhook is sent when an SDK Upload has finished unsuccessfully.

```json Webhook Payload
{
  "data": {
    "data": {
      "code": "failed",
      "sub_code": null,
      "updated_at": "2025-05-10T15:48:24.034072Z"
    },
    "recording": {
      "id": "0206f11b-68ab-42b1-8a30-b85f60076e83",
      "metadata": {}
    },
    "sdk_upload": {
      "id": "fa08e580-d7b6-4f88-9f71-5b718c5a5f77",
      "metadata": {}
    }
  },
  "event": "sdk_upload.failed"
}
```

## `sdk_upload.recording_started`

This webhook is sent when the Desktop SDK has started recording for this upload.

```json Webhook Payload
{
  "data": {
    "data": {
      "code": "recording_started",
      "sub_code": null,
      "updated_at": "2025-05-10T15:48:24.034072Z"
    },
    "recording": {
      "id": "0206f11b-68ab-42b1-8a30-b85f60076e83",
      "metadata": {}
    },
    "sdk_upload": {
      "id": "fa08e580-d7b6-4f88-9f71-5b718c5a5f77",
      "metadata": {}
    }
  },
  "event": "sdk_upload.recording_started"
}
```

## `sdk_upload.recording_ended`

This webhook is sent when the Desktop SDK has finished recording for this upload.

```json Webhook Payload
{
  "data": {
    "data": {
      "code": "recording_ended",
      "sub_code": null,
      "updated_at": "2025-05-10T15:48:24.034072Z"
    },
    "recording": {
      "id": "0206f11b-68ab-42b1-8a30-b85f60076e83",
      "metadata": {}
    },
    "sdk_upload": {
      "id": "fa08e580-d7b6-4f88-9f71-5b718c5a5f77",
      "metadata": {}
    }
  },
  "event": "sdk_upload.recording_ended"
}
```