# Change Log Receives Dialpad Change Log (admin/audit change) events at a Monad-hosted endpoint. You register a Dialpad webhook + change-log subscription that point at this input's ingest URL; Dialpad pushes each change-log event to Monad, where it is verified against its HS256-signed JWT and emitted as the raw change-log event. **Sync Type: Push (Webhook)** ## Overview Dialpad's Change Log captures admin/audit change events — who changed what configuration in a Dialpad company: operator and user management, device and phone number changes, group/department and IVR/call-routing changes, recording policy, CallAI settings, and more. This input is a **webhook receiver**: Dialpad pushes change-log events to a Monad-hosted endpoint as they occur; Monad never polls a Dialpad API for this data. ### Why a webhook, not a poll Dialpad exposes change-log events only through its event-subscription/webhook mechanism — there is no API to list or replay historical change-log events. The webhook push is the only programmatic feed of this data. You set the integration up by creating a webhook and a change-log subscription in Dialpad (portal or API) that point at this input's Monad ingest URL. See the [Setup Walk-through](#setup-walk-through) below. This input does **not** collect Dialpad's Stats/analytics API data (call/SMS usage metrics), and it does **not** collect login/authentication events — Dialpad has no login/auth event feed exposed via event subscriptions. ## Prerequisites Before configuring this input, you need: 1. Access to create a webhook and change-log subscription in Dialpad — the portal, or `POST /api/v2/webhooks` and `POST /api/v2/subscriptions/changelog` using a **company-admin** API key or OAuth token with the **`change_log`** scope. See [Dialpad OAuth](https://developers.dialpad.com/docs/oauth). 2. This input's Monad ingest URL, to use as the webhook's `hook_url` (see the walk-through for how to build it). 3. A shared secret configured on both sides — set as the webhook's `secret` in Dialpad, and entered as this input's **Webhook Secret**. ## Authentication This input does not authenticate to Dialpad — Dialpad delivers events to Monad's ingest URL, and Monad authenticates each delivery. Dialpad webhooks support only a `hook_url` and a `secret` (no custom headers), so no Monad API key is ever embedded in a delivery. Instead: - **Endpoint access**: the per-pipeline Monad ingest URL is the access boundary Dialpad delivers to. - **Payload integrity**: when **Webhook Secret** is set, Dialpad signs every delivery as an HS256 JWT, and this input verifies the signature before emitting the event. The value entered here must match the `secret` configured on the Dialpad webhook, or every delivery is rejected as an invalid signature. Strongly recommended; if the webhook is created without a secret, Dialpad sends unencoded JSON and no signature is verified. ## Configuration | Secret | Type | Required | Description | | ------ | ---- | -------- | ----------- | | Webhook Secret | secret | Recommended | The shared secret set on the Dialpad webhook. Dialpad signs each delivery as an HS256 JWT with it, and this input verifies the signature before emitting the event. Must match the `secret` on the Dialpad webhook. Leave empty only if the webhook has no secret (unencoded JSON delivery). | ## Setup Walk-through You create the webhook and change-log subscription in Dialpad and point them at this input. 1. Create a **Dialpad — Change Log** input and add it to a pipeline. 2. Decide on a webhook secret and enter it in **Webhook Secret**. 3. Copy the **Pipeline ID** from the pipeline details page. Your ingest URL is: `https://app.monad.com/api/v2/http/send/{pipeline_id}` 4. Using a company-admin API key or OAuth token with the `change_log` scope, call Dialpad's [Webhooks — Create](https://developers.dialpad.com/reference/webhookscreate) endpoint: ```bash curl -X POST https://dialpad.com/api/v2/webhooks \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "hook_url": "https://app.monad.com/api/v2/http/send/{pipeline_id}", "secret": "" }' ``` Note the returned webhook `id` in the response — you'll need it as `endpoint_id` in the next step. 5. Call Dialpad's [Change Log Event Subscription — Create](https://developers.dialpad.com/reference/webhook_change_log_event_subscriptioncreate) endpoint: ```bash curl -X POST https://dialpad.com/api/v2/subscriptions/changelog \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "endpoint_id": "", "enabled": true }' ``` A change-log subscription captures **all** change-log events for the company — Dialpad has no server-side action-type filter, and this input emits every event. Filter by `action` downstream in your Monad pipeline if you need to narrow them. **One subscription per company** Each Dialpad company needs its own webhook, secret, and change-log subscription. If you manage multiple Dialpad companies, create a separate Monad input for each one. ## Record Fields Each record is one Dialpad change-log event, passed through close to verbatim: | Field | Description | | --- | --- | | `action` | The action-type code for the change (e.g. `operator_removed`). See [Change Log Action Types](https://developers.dialpad.com/docs/change-log-action-types). | | `additional_data` | Action-specific details. Not standardized across actions and treated as opaque — shape may change without notice. | | `changed_by` | The admin/user who made the change (`name`, `id`, `type`). Redacted when the change was made by Dialpad support. | | `date` | Unix timestamp in milliseconds (UTC) when the change occurred. Used as the record's timestamp. | | `note` | A human-readable description of the change. Not standardized — don't parse it programmatically. | | `target` | The resource that was changed (`type`, `id`). | Dialpad's change-log payload has no unique event ID field. ## Sample Record ```json { "action": "operator_removed", "additional_data": { "name": "Dialpedia Ltd", "operator_name": "Mary Sue" }, "changed_by": { "name": "John Doe", "id": 12345, "type": "User" }, "date": 1620328863056, "note": "Operator removed", "target": { "type": "Office", "id": 1111111 } } ``` ## Limitations - **No backfill.** Change-log subscriptions are forward-only; only events that occur after the subscription is created are delivered. - **No action filtering at ingest.** Dialpad delivers every change-log action to the subscription and this input emits them all; filter by `action` downstream in your Monad pipeline if you need to narrow them. - **One subscription per company.** A single webhook/subscription/secret covers one Dialpad company. Multiple companies each need their own Monad input instance. - **No Stats/analytics data.** This input covers admin/audit change events only, not Dialpad's call/SMS usage Stats API. - **No login/authentication events.** Dialpad exposes no login/auth event feed via event subscriptions. ## Troubleshooting ### Common Issues 1. **Deliveries rejected** - Confirm **Webhook Secret** in Monad exactly matches the `secret` on the Dialpad webhook. A mismatch — or a secret configured on only one side — causes every delivery to fail signature verification. 2. **No data arriving** - Confirm the change-log subscription was created with `enabled: true` and the correct `endpoint_id` (the webhook's `id`, not the pipeline ID). - Confirm the webhook's `hook_url` exactly matches this pipeline's Monad ingest URL. 3. **Missing historical events** - Expected. Change-log subscriptions have no backfill; only events after subscription creation are delivered. ## Related Articles - [Change Log Events](https://developers.dialpad.com/docs/change-log-events) - [Change Log Action Types](https://developers.dialpad.com/docs/change-log-action-types) - [Event Subscriptions](https://developers.dialpad.com/docs/event-subscriptions) - [OAuth](https://developers.dialpad.com/docs/oauth) - [Webhooks — Create](https://developers.dialpad.com/reference/webhookscreate) - [Change Log Event Subscription — Create](https://developers.dialpad.com/reference/webhook_change_log_event_subscriptioncreate)