# Create an account Source: https://developers.dock.us/api-reference/endpoint/accounts/create-an-account post /accounts Create an account # Retrieve a list of accounts Source: https://developers.dock.us/api-reference/endpoint/accounts/retrieve-a-list-of-accounts get /accounts Retrieve a list of accounts # Retrieve an account Source: https://developers.dock.us/api-reference/endpoint/accounts/retrieve-an-account get /accounts/{id} Retrieve an account by ID # Update an account Source: https://developers.dock.us/api-reference/endpoint/accounts/update-an-account patch /accounts/{id} Update an account by ID. Currently this endpoint only supports updating workspace custom field values. # Retrieve an asset share link Source: https://developers.dock.us/api-reference/endpoint/asset-share-link/retrieve-an-asset-share-link get /asset-share-link/{id} Retrieve an asset share link by ID # Retrieve asset share links Source: https://developers.dock.us/api-reference/endpoint/asset-share-link/retrieve-asset-share-links get /asset-share-link Retrieve the trackable and non-trackable share links for an asset, attributed to a user. Creates the links if they do not exist yet. # Create an asset Source: https://developers.dock.us/api-reference/endpoint/assets/create-an-asset post /assets Create an asset. For file-backed types (pdf, image, video, audio, docx, ppt, xlsx, htmlPage), first create a file via POST /files and PUT the bytes to its upload URL, then pass the file id here. Link and embed assets are created from a URL (or custom embed code) directly. Office documents (docx, ppt, xlsx) are converted to a PDF rendition asynchronously and are returned as the corresponding `microsoft*EmbedPdf` asset type — poll GET /files/{id} on the asset's file to track conversion. See [Uploading files](/api-reference/uploading-files) for the end-to-end upload flow. # Delete an asset Source: https://developers.dock.us/api-reference/endpoint/assets/delete-an-asset delete /assets/{id} Delete an asset by ID # Retrieve a list of assets Source: https://developers.dock.us/api-reference/endpoint/assets/retrieve-a-list-of-assets get /assets Retrieve a list of assets # Retrieve an asset Source: https://developers.dock.us/api-reference/endpoint/assets/retrieve-an-asset get /assets/{id} Retrieve an asset by ID # Update an asset Source: https://developers.dock.us/api-reference/endpoint/assets/update-an-asset patch /assets/{id} Update an asset by ID. All properties are optional, and omitted properties remain unchanged. # Retrieve a custom field Source: https://developers.dock.us/api-reference/endpoint/custom-fields/retrieve-a-custom-field get /custom-fields/{id} Retrieve a custom field by ID # Retrieve a list of custom fields Source: https://developers.dock.us/api-reference/endpoint/custom-fields/retrieve-a-list-of-custom-fields get /custom-fields Retrieve a list of custom fields # Retrieve a deal Source: https://developers.dock.us/api-reference/endpoint/deals/retrieve-a-deal get /deals/{id} Retrieve a deal by ID # Retrieve a list of deals Source: https://developers.dock.us/api-reference/endpoint/deals/retrieve-a-list-of-deals get /deals Retrieve a list of deals # Update a deal Source: https://developers.dock.us/api-reference/endpoint/deals/update-a-deal patch /deals/{id} Update a deal by ID. Currently this endpoint only supports updating deal custom field values. # Create a file Source: https://developers.dock.us/api-reference/endpoint/files/create-a-file post /files Create a file and receive a presigned upload URL. PUT the raw file bytes to the returned upload URL (with the matching Content-Type header), then pass the file id to POST /assets to create an asset from it. # Retrieve a file Source: https://developers.dock.us/api-reference/endpoint/files/retrieve-a-file get /files/{id} Retrieve a file by ID # Retrieve a form Source: https://developers.dock.us/api-reference/endpoint/forms/retrieve-a-form get /forms/{id} Retrieve a form by ID. Accepts the ID of a published form, or the ID of its draft, which resolves to the published form # Retrieve a list of forms Source: https://developers.dock.us/api-reference/endpoint/forms/retrieve-a-list-of-forms get /forms Retrieve a list of published forms. Draft forms are not returned # Retrieve form responses Source: https://developers.dock.us/api-reference/endpoint/forms/retrieve-form-responses get /forms/{id}/responses Retrieve the completed submissions of a form, newest first. Each submission includes the questions the respondent answered and their answers. File answers include presigned download URLs that expire after one hour # Create a meeting Source: https://developers.dock.us/api-reference/endpoint/meetings/create-a-meeting post /meetings Create a meeting with a call transcript on an account. Identify the account with exactly one of accountId, accountDomain, hubspotCompanyId or salesforceAccountId — the account must already exist (create one with POST /accounts). Provide the transcript as raw text (the meeting is created completed), or as a fileId referencing an uploaded pdf/docx file (max 25MB) from POST /files — the transcript text is then extracted asynchronously: the meeting is created with status processing and transitions to completed once extraction finishes, or to failed with the reason in processingError. Poll GET /meetings/{id}?properties=status&properties=processingError to track it. Dock asynchronously generates an AI summary and search embeddings for the meeting once the transcript is available. ## Identifying the account Identify the account with exactly one of `accountId`, `accountDomain`, `hubspotCompanyId` or `salesforceAccountId`. The account must already exist — this endpoint never creates accounts. Use [Create an account](/api-reference/endpoint/accounts/create-an-account) first, or find one with the `filters` on [Retrieve a list of accounts](/api-reference/endpoint/accounts/retrieve-a-list-of-accounts). `accountDomain` is matched against the account's website after normalization (protocol, `www.` prefix and paths are stripped) — subdomains and apex domains are distinct. ## Providing the transcript Provide the transcript as raw text (`transcript`), or as a `fileId` referencing an uploaded `.pdf` or `.docx` document (max 25MB) — see [Uploading files](/api-reference/uploading-files). The transcript text is extracted from the document when the meeting is created, so the file upload must be completed first. After creation, Dock asynchronously generates an AI summary and search embeddings for the meeting. Email participants that don't exist yet are created as contacts on the account. # Retrieve a meeting Source: https://developers.dock.us/api-reference/endpoint/meetings/retrieve-a-meeting get /meetings/{id} Retrieve a meeting by its ID The transcript can be large, so it is only included when explicitly requested via `properties=transcript`. # Ping the API Source: https://developers.dock.us/api-reference/endpoint/status-check/ping get /ping Ping the API to check if it's up # Create a tag Source: https://developers.dock.us/api-reference/endpoint/tags/create-a-tag post /tags Create a tag # Delete a tag Source: https://developers.dock.us/api-reference/endpoint/tags/delete-a-tag delete /tags/{id} Delete a tag by ID # Retrieve a list of tags Source: https://developers.dock.us/api-reference/endpoint/tags/retrieve-a-list-of-tags get /tags Retrieve a list of tags # Retrieve a tag Source: https://developers.dock.us/api-reference/endpoint/tags/retrieve-a-tag get /tags/{id} Retrieve a tag by ID # Update a tag Source: https://developers.dock.us/api-reference/endpoint/tags/update-a-tag patch /tags/{id} Update a tag by ID # Retrieve a list of templates Source: https://developers.dock.us/api-reference/endpoint/templates/retrieve-a-list-of-templates get /templates Retrieve a list of templates # Retrieve a template Source: https://developers.dock.us/api-reference/endpoint/templates/retrieve-a-template get /templates/{id} Retrieve a template by ID # Retrieve a list of users Source: https://developers.dock.us/api-reference/endpoint/users/retrieve-a-list-of-users get /users Retrieve a list of users # Retrieve a user Source: https://developers.dock.us/api-reference/endpoint/users/retrieve-a-user get /users/{id} Retrieve a user by ID # Create a workspace domain Source: https://developers.dock.us/api-reference/endpoint/workspace-domains/create-a-workspace-domain POST /workspace-domains Create a workspace domain # Delete a workspace domain Source: https://developers.dock.us/api-reference/endpoint/workspace-domains/delete-a-workspace-domain delete /workspace-domains/{id} Delete a workspace domain by ID # Retrieve a list of workspace domains Source: https://developers.dock.us/api-reference/endpoint/workspace-domains/retrieve-a-list-of-workspace-domains get /workspace-domains Retrieve a list of workspace domains # Retrieve a workspace domain Source: https://developers.dock.us/api-reference/endpoint/workspace-domains/retrieve-a-workspace-domain get /workspace-domains/{id} Retrieve a workspace domain by ID # Update a workspace domain Source: https://developers.dock.us/api-reference/endpoint/workspace-domains/update-a-workspace-domain PATCH /workspace-domains/{id} Update a workspace domain # Retrieve a list of workspace iframe embeds Source: https://developers.dock.us/api-reference/endpoint/workspace-iframe-embeds/retrieve-a-list-of-workspace-iframe-embeds get /workspace-iframe-embeds Retrieve a list of workspace iframe embeds. Only embeds whose iframe is placed in a section on an existing workspace page (or that back a task action) are included — orphaned embeds are omitted. # Retrieve a workspace iframe embed Source: https://developers.dock.us/api-reference/endpoint/workspace-iframe-embeds/retrieve-a-workspace-iframe-embed get /workspace-iframe-embeds/{id} Retrieve a workspace iframe embed by ID. Returns 404 if the embed's iframe is no longer placed in a section on an existing workspace page (unless it backs a task action). # Update a workspace iframe embed Source: https://developers.dock.us/api-reference/endpoint/workspace-iframe-embeds/update-a-workspace-iframe-embed patch /workspace-iframe-embeds/{id} Update a workspace iframe embed by ID, from an embed snippet (JSON `customCode`), raw HTML (JSON `html`), or an HTML file sent as the request body (`Content-Type: text/html`). HTML input behaves exactly like the in-app Upload HTML button: full documents are wrapped in a sandboxed srcdoc iframe. Updates the embed code rendered in the workspace and directly in the published workspace view — no new publication is created and no publish side effects run. Returns 404 if the embed's iframe is no longer placed in a section on an existing workspace page (unless it backs a task action). # Retrieve a list of workspace pages Source: https://developers.dock.us/api-reference/endpoint/workspace-pages/retrieve-a-list-of-workspace-pages get /workspace-pages Retrieve a list of workspace pages # Retrieve a workspace page Source: https://developers.dock.us/api-reference/endpoint/workspace-pages/retrieve-a-workspace-page get /workspace-pages/{id} Retrieve a workspace page by ID # Update a workspace page Source: https://developers.dock.us/api-reference/endpoint/workspace-pages/update-a-workspace-page patch /workspace-pages/{id} Update a workspace page by ID # Create a workspace plan task Source: https://developers.dock.us/api-reference/endpoint/workspace-plan-tasks/create-a-workspace-plan-task post /workspace-plan-tasks Create a workspace plan task. Pass parentTaskId to create a subtask # Retrieve a list of workspace plan tasks Source: https://developers.dock.us/api-reference/endpoint/workspace-plan-tasks/retrieve-a-list-of-workspace-plan-tasks get /workspace-plan-tasks Retrieve a list of workspace plan tasks # Retrieve a workspace plan task Source: https://developers.dock.us/api-reference/endpoint/workspace-plan-tasks/retrieve-a-workspace-plan-task get /workspace-plan-tasks/{id} Retrieve a workspace plan task by ID # Update a workspace plan task Source: https://developers.dock.us/api-reference/endpoint/workspace-plan-tasks/update-a-workspace-plan-task patch /workspace-plan-tasks/{id} Update a workspace plan task by ID # Retrieve a list of workspace plans Source: https://developers.dock.us/api-reference/endpoint/workspace-plans/retrieve-a-list-of-workspace-plans get /workspace-plans Retrieve a list of workspace plans # Retrieve a workspace plan Source: https://developers.dock.us/api-reference/endpoint/workspace-plans/retrieve-a-workspace-plan get /workspace-plans/{id} Retrieve a workspace plan by ID # Retrieve a list of workspace sections Source: https://developers.dock.us/api-reference/endpoint/workspace-sections/retrieve-a-list-of-workspace-sections get /workspace-sections Retrieve a list of workspace sections # Retrieve a workspace section Source: https://developers.dock.us/api-reference/endpoint/workspace-sections/retrieve-a-workspace-section get /workspace-sections/{id} Retrieve a workspace section by ID # Update a workspace section Source: https://developers.dock.us/api-reference/endpoint/workspace-sections/update-a-workspace-section patch /workspace-sections/{id} Update a workspace section by ID # Create a workspace user Source: https://developers.dock.us/api-reference/endpoint/workspace-users/create-a-workspace-user POST /workspace-users Create a workspace user # Delete a workspace user Source: https://developers.dock.us/api-reference/endpoint/workspace-users/delete-a-workspace-user delete /workspace-users/{id} Delete a workspace user by ID # Retrieve a list of workspace users Source: https://developers.dock.us/api-reference/endpoint/workspace-users/retrieve-a-list-of-workspace-users get /workspace-users Retrieve a list of workspace users # Retrieve a workspace user Source: https://developers.dock.us/api-reference/endpoint/workspace-users/retrieve-a-workspace-user get /workspace-users/{id} Retrieve a workspace user by ID # Update a workspace user Source: https://developers.dock.us/api-reference/endpoint/workspace-users/update-a-workspace-user PATCH /workspace-users/{id} Update a workspace user by ID # Archive a workspace Source: https://developers.dock.us/api-reference/endpoint/workspaces/archive-a-workspace post /workspaces/{id}/archive Archive a workspace # Create a workspace Source: https://developers.dock.us/api-reference/endpoint/workspaces/create-a-workspace post /workspaces Create a workspace. Companies on the free plan are limited to 10 workspaces total (active and archived combined); once the limit is reached, this endpoint returns 403 FORBIDDEN. # Get an authenticated embed url Source: https://developers.dock.us/api-reference/endpoint/workspaces/get-an-authenticated-embed-url post /workspaces/{id}/authenticated-embed-url Get authenticated embed url Once an authenticated embed url is generated it remains valid for 2 minutes. # Retrieve a list of workspaces Source: https://developers.dock.us/api-reference/endpoint/workspaces/retrieve-a-list-of-workspaces get /workspaces Retrieve a list of workspaces # Retrieve a workspace Source: https://developers.dock.us/api-reference/endpoint/workspaces/retrieve-a-workspace get /workspaces/{id} Retrieve a workspace by ID # Set workspace access Source: https://developers.dock.us/api-reference/endpoint/workspaces/set-workspace-access post /workspaces/{id}/access Set workspace access # Update a workspace Source: https://developers.dock.us/api-reference/endpoint/workspaces/update-a-workspace patch /workspaces/{id} Update a workspace by ID # Errors Source: https://developers.dock.us/api-reference/errors Troubleshoot problems with this comprehensive breakdown of all error codes. Dock API returns machine readable error codes, human readable error messages and a link to the docs for more information. Here is how an error response looks like: ```json theme={null} { "error": { "code": "NOT_FOUND", "message": "The requested resource was not found." } } ``` ## Error Codes Here is a list of all error codes Dock API returns: ### `BAD_REQUEST` * **Status:** 400 * **Problem:** The request is malformed, either missing required fields, using wrong datatypes, or being syntactically incorrect. * **Solution:** Check the request and make sure it is properly formatted. ### `UNAUTHORIZED` * **Status:** 401 * **Problem:** The client is unauthenticated, meaning it has not provided valid credentials to access the resource. * **Solution:** Provide valid authentication credentials. ### `FORBIDDEN` * **Status:** 403 * **Problem:** The client is authenticated but does not have permission to access the requested resource. * **Solution:** Verify that the client has the necessary access rights to the resource. ### `NOT_FOUND` * **Status:** 404 * **Problem:** The requested resource could not be found on the server. * **Solution:** Ensure the requested URL or resource identifier is correct. ### `RATE_LIMIT_EXCEEDED` * **Status:** 429 * **Problem:** The client has sent too many requests in a short period, triggering rate limiting. * **Solution:** Wait for a while before sending more requests, or adjust the request rate. ### `INTERNAL_SERVER_ERROR` * **Status:** 500 * **Problem:** The server encountered an unexpected condition that prevented it from fulfilling the request. * **Solution:** This is a server-side issue. Try again later or contact support if the problem persists. # Introduction Source: https://developers.dock.us/api-reference/introduction Fundamental concepts of Dock's API. ## Base URL Dock's API is built on REST principles and is served over HTTPS. To ensure data privacy, unencrypted HTTP is not supported. The Base URL for all API endpoints is: ```bash Terminal theme={null} https://api.dock.us ``` ## Authentication Authentication to Dock's API is performed via the Authorization header with a Bearer token. To authenticate, you need to include the Authorization header with the word `Bearer` followed by your API key in your requests like so: ```bash Terminal theme={null} Authorization: Bearer ``` Learn more about [how to get your API key](/api-reference/tokens). ## Selecting returned properties Endpoints that return a resource accept a `properties` query parameter that controls which fields are included in the response. If you omit it, the response contains **only** the resource's `id`, `object`, and `url` — no other fields are returned by default: ```bash Request theme={null} curl https://api.dock.us/v1/workspaces/ \ -H "Authorization: Bearer " ``` ```json Response theme={null} { "data": { "workspace": { "id": "", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/" } } } ``` To receive any other field, request it explicitly by repeating the `properties` parameter once per field: ```bash Request theme={null} curl "https://api.dock.us/v1/workspaces/?properties=name&properties=workspaceUrl" \ -H "Authorization: Bearer " ``` Each endpoint's reference page lists the property names available for that resource under the `properties` parameter. ## Response Codes The API returns standard HTTP response codes to indicate the success or failure of an API request. Here are a few examples: | Code | Description | | ----- | ---------------------------------------------------------------------------------------------- | | `200` | The request was successful. | | `400` | The request was invalid or cannot be served. | | `401` | The request requires user authentication. | | `403` | The server understood the request, but refuses to authorize it. | | `404` | The requested resource could not be found. | | `408` | The server received the request but did not process it yet. | | `429` | Too many requests. | | `500` | The server encountered an unexpected condition which prevented it from fulfilling the request. | # Pagination Source: https://developers.dock.us/api-reference/pagination Learn how to paginate through resources in the API. The pagination feature allows you to retrieve a subset of resources from the API. This is useful when you have a large number of resources and you want to retrieve them in smaller chunks. These list API methods share a common set of parameters that allow you to control the number of items returned and the page number. For example, you can: * [retrieve a list of accounts](/api-reference/endpoint/accounts/retrieve-a-list-of-accounts) * [retrieve a list of users](/api-reference/endpoint/users/retrieve-a-list-of-users) * [retrieve a list of workspaces](/api-reference/endpoint/workspaces/retrieve-a-list-of-workspaces) ## Parameters The page number to retrieve. By default, the first page is returned. The number of items to retrieve per page. The default value varies by endpoint. Here is how pagination response data looks like: ```json theme={null} { "pageInfo": { "page": 1, "pages": 10, "total": 100, "pageTotal": 10, "hasNextPage": true, "hasPrevPage": false } } ``` ## Example The following example demonstrates how to retrieve the first page of 10 links: ```bash cURL theme={null} curl --request GET \ --url 'https://api.dock.us/v1/accounts?page=1&limit=10' \ --header 'Authorization: Bearer ' ``` ```javascript JavaScript theme={null} const options = { method: 'GET', headers: { Authorization: 'Bearer ' } }; fetch('https://api.dock.us/v1/accounts?page=1&limit=10', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err)); ``` ```python Python theme={null} import requests url = "https://api.dock.us/v1/accounts" querystring = {"page":"1","limit":"10"} headers = {"Authorization": "Bearer "} response = requests.request("GET", url, headers=headers, params=querystring) print(response.text) ``` ```go Go theme={null} package main import ( "fmt" "net/http" "io/ioutil" ) func main() { url := "https://api.dock.us/v1/accounts?page=1&limit=10" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "Bearer ") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := ioutil.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` # Rate limits Source: https://developers.dock.us/api-reference/rate-limits Learn about Dock's API rate limits. Dock API rate limiting is in conformance with the [IETF standard](https://datatracker.ietf.org/doc/html/draft-ietf-httpapi-ratelimit-headers): | Header Name | Description | | ----------------------- | ------------------------------------------------------------------------------- | | `X-RateLimit-Limit` | The maximum number of requests that the consumer is permitted to make per hour. | | `X-RateLimit-Remaining` | The number of requests remaining in the current rate limit window. | | `X-RateLimit-Reset` | The time at which the current rate limit window resets in UTC epoch seconds. | | `Retry-After` | The number of seconds to wait before retrying the request again. | Dock's API is capped at **120 requests per minute** per company except for the following endpoints: * [`POST /v1/workspaces` (30 requests per minute)](api-reference/endpoint/workspaces/create-a-workspace) * [`GET /v1/files/{id}` (60 requests per minute)](api-reference/endpoint/files/retrieve-a-file) This is implemented to ensure a fair usage policy so that excessive use by a single user does not adversely affect the performance and usage of the API by others. You'll receive a `429 Too Many Requests` response code if the rate limit is exceeded. # API Keys Source: https://developers.dock.us/api-reference/tokens Learn how to get your Dock API key. API keys on Dock allow you to access your data programmatically. This is useful for integrating Dock into your application or with other tools and services. Each API key is tied to your company – meaning you can use it to access your company's resources without having to worry about "leaking" access to other companies. ## Secret keys API keys on Dock – **Secret keys**. | Type | Format (Example) | When to use | | :--------- | :------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Secret** | `69b005b71e69-4f38-9ld9-9789592a3dfe` | Use this key to authenticate requests on your server. By default, you can use this key to perform any API request without restriction, so it must be stored securely in your app's server-side code (such as in an environment variable or credential management system). Don’t expose this key on a website. | ## Create a secret API key You must be an account `admin` to create an API key. You can create an API key by following these steps: Go to **Settings** > **API** in your Dock account. Workspace API keys on Dock Click on the "Create new secret key" button and give the API key a name. Workspace API keys on Dock Click on the "Copy" button and store it in a safe place since you won't be able to see it again. Workspace API keys on Dock Now that you have your API key, you can use it to access your workspace's resources programmatically via SDKs or within any API request as a bearer token. ``` Authorization: Bearer xxxxxxxx ``` # Uploading files Source: https://developers.dock.us/api-reference/uploading-files Learn how to upload files using API. Creating an asset from a file is a two-step process: upload the file, then create the asset from it. Link and embed assets skip the upload entirely — create them directly with a `url` (or `customCode`). ## 1. Create a file and upload the bytes Call [Create a file](/api-reference/endpoint/files/create-a-file) with the file's name and MIME type. The response contains the file `id` and a presigned `upload` target: ```bash theme={null} curl -X POST https://api.dock.us/v1/files \ -H "Authorization: Bearer $DOCK_API_KEY" \ -H "Content-Type: application/json" \ -d '{"fileName": "sales-deck.pdf", "mimeType": "application/pdf"}' ``` ```json theme={null} { "data": { "file": { "id": "f9Ghw2n0Ju3D", "uploadStatus": "in_progress", "url": null }, "upload": { "url": "https://storage.googleapis.com/...", "method": "PUT", "headers": { "Content-Type": "application/pdf" }, "expiresAt": "" } } } ``` Then `PUT` the raw bytes directly to `upload.url` with the returned `Content-Type` header, before `expiresAt` (1 hour): ```bash theme={null} curl -X PUT "" \ -H "Content-Type: application/pdf" \ --data-binary @sales-deck.pdf ``` The `Content-Type` header on the PUT request must exactly match the `mimeType` the file was created with, or Google Cloud Storage rejects the upload. ## 2. Create the asset Call [Create an asset](/api-reference/endpoint/assets/create-an-asset) with the file id. Dock verifies the upload completed, marks the file ready, and creates the asset — optionally tagged with existing [tags](/api-reference/endpoint/tags/create-a-tag): ```bash theme={null} curl -X POST https://api.dock.us/v1/assets \ -H "Authorization: Bearer $DOCK_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "type": "pdf", "name": "Sales deck", "fileId": "f9Ghw2n0Ju3D", "tagIds": ["RiHO4e0Ju3DS"] }' ``` Calling this before the bytes are uploaded returns a `400` — retry after the PUT completes. A file can back exactly one asset. ## Supported asset types | `type` | Source | Notes | | ---------- | --------------------- | ----------------------------------------------------------- | | `pdf` | `fileId` | Page count and document metadata extracted automatically | | `image` | `fileId` | Dimensions extracted automatically | | `video` | `fileId` | Pass `metadata.width/height/duration` if available | | `audio` | `fileId` | Pass `metadata.duration` if available | | `docx` | `fileId` | Converted to PDF; returned as `microsoftWordEmbedPdf` | | `ppt` | `fileId` | Converted to PDF; returned as `microsoftPowerPointEmbedPdf` | | `xlsx` | `fileId` | Converted to PDF; returned as `microsoftExcelEmbedPdf` | | `htmlPage` | `fileId` | Standalone HTML file rendered as a page | | `link` | `url` | Link preview metadata resolved automatically | | `embed` | `url` or `customCode` | Exactly one of the two | ## Office documents convert asynchronously Uploaded office documents (`docx`, `ppt`, `xlsx`) are rendered to PDF in the background. The asset is created immediately, but its backing file reports `uploadStatus: "in_progress"` until conversion finishes. Poll [Retrieve a file](/api-reference/endpoint/files/retrieve-a-file) with `properties[]=uploadStatus` to track it. # Data model Source: https://developers.dock.us/data-model A quick overview of how Dock's data model is structured. Whether you are using Dock's [API](/api-reference/introduction) or not, this page is a quick way to understand how Dock's data is structured. When interacting with Dock's API, you'll also need to create an [API key](/api-reference/tokens) to authenticate your requests. ## Account Account represents any external relationships, typically another company. The most common use case for an Account is your customer or sales prospect. Integration with external systems like Salesforce and HubSpot allows for seamless synchronization of account data, enhancing the management of client relationships and related business processes. All the accounts are associated with a company that can be accessed via the [API](/api-reference/endpoint/accounts/retrieve-a-list-of-accounts). An account can also be [created](/api-reference/endpoint/accounts/create-an-account), [updated](/api-reference/endpoint/accounts/update-an-account) via the API. The name of the account. The website of the account. The ID of the user who owns the account. The logo of the account. The ID of the Salesforce account. The ID of the Hubspot company. ## Deal Deals are a way to track and manage your sales pipeline. If you have a CRM integration, you can sync your deals(HubSpot deals, Salesforce opportunities, etc.) with Dock. The name of the deal. The Hubspot deal ID (when deal is from Hubspot). The Salesforce opportunity ID (when deal is from Salesforce). Monetary value of the deal. Expected or actual closing date of the deal.
Example format: "2021-01-01T00:00:00.000Z"
Date when the deal was created in the source system.
Example format: "2021-01-01T00:00:00.000Z"
Current stage of the deal. Type of the deal.
## User User represents an individual who interacts with the Dock platform. Each user can be associated with a [company](/data-model#company), create or manage [workspaces](/data-model#workspace), and perform various tasks within the system. Users have roles, permissions, and can participate in collaborations, making them key actors in the product’s ecosystem. The first name of the user. The last name of the user. The avatar of the user. The email of the user. The name of the user. ## Template Template represents a pre-defined group of pages & sections. Templates can be turned into [Workspaces](/data-model#workspace). Templates are a powerful way to build scalable processes across the organization. As your team members start to create their own [Workspaces](/data-model#workspace), templates can help them save time configuring and ultimately help ensure that everyone is following a similar framework. Read more about [templates](https://help.dock.us/en/articles/8404524-what-are-templates). The types of the template. The title of the template. Whether a Slack channel is enabled for the template. Whether messages are enabled for the template. Whether stages are enabled for the template. ## Workspace Workspaces are a shared space between your organization and an external organization. Since they are built on a flexible editor, they can be used for a variety of cases. You can create a workspace with a [template](/data-model#template) too. Workspaces can be managed with the [Workspaces API](/api-reference/endpoint/workspaces/retrieve-a-list-of-workspaces). Read more about [workspaces](https://help.dock.us/en/articles/6867240-what-are-workspaces). The name of the workspace. The URL of the workspace. The ID of the template. The start date of the workspace. The target end date of the workspace. The actual end date of the workspace. The age of the project. The progress of the task. The last client view of the workspace. The total views of the workspace. The total actions of the workspace. The total time spent of the workspace. The number of clients per workspace. The account associated with the workspace. The name of the account. The website of the account. The ID of the user who owns the account. The logo of the account. The ID of the Salesforce account. The ID of the Hubspot company. Workspace domains associated with the workspace. The domain name in the email addresses that are associated with this workspace. The role of the user in the workspace. Workspace users associated with the workspace. The role of the user in the workspace. The user associated with the workspace user. The first name of the user. The last name of the user. The avatar of the user. The email of the user. The name of the user. The deal associated with the workspace. The name of the deal. The amount of the deal. The close date of the deal.
Example format: "2021-01-01T00:00:00.000Z"
The created date of the deal.
Example format: "2021-01-01T00:00:00.000Z"
The type of the deal. The stage of the deal. The ID of the Hubspot deal. Cannot be used together with salesforceOpportunityId. The ID of the Salesforce opportunity. Cannot be used together with hubspotDealId.
## Workspace user Workspace users are users who are associated with a workspace. The role of the user in the workspace. The user associated with the workspace user. The first name of the user. The last name of the user. The avatar of the user. The email of the user. The name of the user. ## Workspace domain Workspace domains are domains that are associated with a workspace. The domain name in the email addresses that are associated with this workspace. The role of the user in the workspace. ## Workspace page [Workspaces](/data-model#workspace) can be composed of multiple pages to help you organize your content. Each tab at the top of a [workspace](/data-model#workspace) is a page. Workspace pages can be ordered, hidden, and have custom names. This allows you to organize your [workspace](/data-model#workspace) in a way that makes sense for your team. Read more about [workspace pages](https://help.dock.us/en/articles/8253951-pages-in-a-workspace). The name of the workspace page. The navigation name of the workspace page. Whether the workspace page is hidden. The index of the workspace page. ## Workspace section Workspace pages are made up of a collection of Workspace Sections. Sections contain text, PDFs, images, links, widgets, and embeds. Sections are the building blocks of a workspace. Read more about [workspace sections](https://help.dock.us/en/articles/6867258-creating-sections). The name of the workspace section. The navigation name of the workspace section. Whether the workspace section is hidden. The index of the workspace section. Whether the workspace section is synced. Whether the workspace section is collaborative. Whether the workspace section is hidden from navigation. ## Workspace plan Workspace plan is a project plan that organizes a group of tasks. Dock enables you to collaborate hands-on with customers and prospects through mutual action plans. You can customize Checklists, Timelines and Kanbans to help ensure you're moving that customer relationship forward. You can also using them internally within a [Workspace](/data-model#workspace), to make sure you're aligned with your team on your to-do's! Read more about [workspace plans](https://help.dock.us/en/articles/6858708-what-are-project-plans). The status of the workspace plan. The title of the workspace plan. Whether the workspace plan allows collaboration. Whether the workspace plan allows collapse. The view type of the workspace plan. ## Workspace plan task Workspace plan tasks represent an action item. These checklists are composed of tasks and can be helpful in assigning out responsibilities or tracking a "to-do" list of sorts. They are highly customizable — you can assign ownership, update the status of that item, and add a due date that sends out notifications automatically. Tasks include assignees, due dates, start dates, action buttons, descriptions, and comments. Read more about [workspace plan tasks](https://help.dock.us/en/articles/6858715-tasks-in-project-plans). Whether the task is internal. The status of the task. The date and time when the task was completed. The URL of the action link. The name of the action link. The text of the action. The type of the action. Whether the action text is shown. The start date of the task. The title of the task. The due date of the task. The index of the task. ## Custom field Custom fields are a way to add custom data to your deals, accounts, and workspaces. The name of the custom field. The variable name of the custom field. The type of the custom field. The options of the custom field. The index of the option. The label of the option. The value of the option. ## Asset Assets are typically a piece of content (PDFs, links, images, or videos). Assets are found in Dock’s content library and can be tagged. Read more about [assets](https://help.dock.us/en/articles/6885248-intro-to-content-management). The type of the resource. The name of the asset. The description of the asset. The number of views of the asset. The number of shares of the asset. The type of the asset. The URL of the asset. Whether the asset is restricted to internal use. The tags associated with the asset. The name of the tag. ## Asset share link Asset share links are the shareable URLs for an asset, attributed to a user. Each link comes in a trackable variant (engagement is attributed to the user) and a non-trackable public variant. You can retrieve them with the [Asset share links API](/api-reference/endpoint/asset-share-link/retrieve-asset-share-links). The type of the resource. The ID of the asset the share links belong to. The ID of the user the share links are attributed to. The trackable share URL. Views and engagement are attributed to the user. The non-trackable (public) share URL. Always `null` for internal assets. ## File Files represent uploaded files and downloadable attachments in Dock. You can retrieve a file with the [Files API](/api-reference/endpoint/files/retrieve-a-file). The name of the file. The thumbnail URL of the file when available. The size of the file in bytes. The expiration date and time of the signed download URL.
Example format: "2021-01-01T00:00:00.000Z"
## Tag Tags are labels you can use to organize and filter your content [assets](/data-model#asset). For example, you might have a tag called "Integrations." Searching for a tag returns all content [assets](/data-model#asset) associated with it. You can create and manage tags with the [Tags API](/api-reference/endpoint/tags/create-a-tag). Read more about content management in Dock's Help Center. The title of the tag. # Dock MCP Source: https://developers.dock.us/dock-mcp/dock-mcp Connect AI agents to Dock using the Model Context Protocol. ## Dock MCP Server Dock’s MCP server can be found here: [https://api.dock.us/mcp](https://api.dock.us/mcp) When connected, your AI agent can create workspaces & playbooks, find content, answer enablement questions, and more. ## Where can I use Dock MCP? Dock MCP works anywhere that accepts an MCP server like Claude, ChatGPT, Gemini, CoPilot, and Cursor. Quick setup links can be found here: * [Claude](https://claude.ai/directory/dock) * [ChatGPT](https://help.dock.us/en/articles/15435827-using-dock-with-chatgpt-codex-via-mcp) * [Gemini](https://help.dock.us/en/articles/15435990-using-dock-with-gemini-via-mcp) ## What can I do with Dock MCP? Dock MCP supports a variety of workflows, including: * Create and edit workspaces * Create and edit playbooks * Manage your library (add/remove tags, archive assets, etc) * Ask questions about your workspaces and customers * Ask questions about library assets * Ask questions to custom Dock agents # Embedding workspace Source: https://developers.dock.us/embedding-workspace A quick overview of how to embed Dock's workspace in your app. ## How to embed a Dock workspace into your app You’re a developer who has a SaaS application and you want to embed Dock within your application. The following guide will explain how to set up an onboarding experience for your customers. Your “onboarding experience“ is an onboarding Dock workspace that’s associated with an account that has signed up for your app. Once you create the workspace template, you can now create workspaces for new accounts that sign up for your app. Account represents any external relationships, typically another company. The most common use case for an Account is your customer or sales prospect. Integration with external systems like Salesforce and HubSpot allows for seamless synchronization of account data, enhancing the management of client relationships and related business processes. All the accounts are associated with a company that can be accessed via the [API](/api-reference/endpoint/accounts/retrieve-a-list-of-accounts). An account can also be [created](/api-reference/endpoint/accounts/create-an-account), [updated](/api-reference/endpoint/accounts/update-an-account) via the API. Example: * OpenAI has signed up for your app. * After they signup you can create an onboarding workspace for them. * If you’re using Salesforce and OpenAI is associated with an account: * [Documentation](/api-reference/endpoint/workspaces/create-a-workspace) to create workspace with Salesforce account Id * If you’re using HubSpot and OpenAI is associated with a company: * [Documentation](/api-reference/endpoint/workspaces/create-a-workspace) to create workspace with HubSpot company Id * If you are using neither CRM you can manually create an Dock account: * [Documentation](/api-reference/endpoint/accounts/create-an-account) to create Dock account * [Documentation](/api-reference/endpoint/workspaces/create-a-workspace) to create workspace with Dock account * In your application, you have a page where you want to embed the Dock workspace. * There’s a user signed in to your app ([sam@openai.com](mailto:sam@openai.com)). They are associated with the account, OpenAI. * You want to create an Authenticated Embed Url, for [sam@openai.com](mailto:sam@openai.com), for the workspace you created for the account, OpenAI. [documentation](/api-reference/endpoint/workspaces/create-a-workspace) * This generated url will automatically log in [sam@openai.com](mailto:sam@openai.com) to the Dock workspace. In order to embed a workspace in your app you must have access to the Dock API and the workspace that you want to embed must be published ## To embed a workspace in your app, you'll need to follow these steps: Implement a business logic in your app that hits the [authenticated embed url api end point](api-reference/endpoint/workspaces/get-an-authenticated-embed-url) with the **email** of the user that you want to log in and the **workspace id** Use the url received in the response and embed it in an iframe in your app. ```iframe theme={null} ``` Once an authenticated embed url is generated it remains valid for 2 minutes. So, make sure to use it within 2 minutes. Once the iframe is loaded the **authToken** in the url is exchanged with the server in order to authenticate the user. Once verified the user can access and interact with the workspace. # Programmatic iFrame Updates Source: https://developers.dock.us/iframe-updates Use an iFrame API ID to identify and update the corresponding iFrame widget in any workspace created from a template. This allows you to programmatically populate personalized or dynamic content across many workspaces. Common use cases * Client dashboards * HTML Slides * ROI calculators * Custom content ## Setup Instructions ### Get iFrame API ID 1. In Dock, open the relevant workspace template. 2. Select **Add content**, then choose **iFrame**. 3. Add an empty iFrame widget to the template. 4. Hover over the iFrame widget and select the three-dot menu. 5. Select **Copy API ID**. Copy API ID for iFrame embed ### Populate or update the iFrame 1. [Find an existing Workspace](https://developers.dock.us/api-reference/endpoint/workspaces/retrieve-a-workspace) or [create new Workspace](https://developers.dock.us/api-reference/endpoint/workspaces/create-a-workspace) from the template 2. [Find the iFrame embed](https://developers.dock.us/api-reference/endpoint/workspace-iframe-embeds/retrieve-a-workspace-iframe-embed) using its API ID 3. [Update the iFrame embed](https://developers.dock.us/api-reference/endpoint/workspace-iframe-embeds/update-a-workspace-iframe-embed) with your code or HTML file # Welcome to Dock Source: https://developers.dock.us/introduction Dock is a revenue enablement platform for collaborating with buyers, managing your content, and training your team.
The Dock Platform
## Core Concepts Three key concepts that relate to the Dock API: * **Workspaces**: Where you collaborate with customers. Common use cases include sales rooms, customer implementations, and client portals. * **Accounts**: Your customers. Typically synced with Salesforce or HubSpot * **Library**: Content repository for your team. Upload all your assets and share with customers. ## Getting Started To get started with Dock, you can do any of the following: Sign up for an account Learn how to use Dock API to create and manage links programmatically Learn how to use Dock Webhooks to receive real-time notifications on events happening across your Dock workspace Read our latest product updates # Create a subscription Source: https://developers.dock.us/webhooks/create-subscription Create a subscription to receive real-time notifications on events happening across your Dock workspace. ## Subscribing to events To subscribe to events, you'll need to follow these steps: You can subscribe to workspace lifecycle events (for example `workspace.created`), course lifecycle events (`course.completed`, `course.reviewed`), and presentation link events (`presentation.viewed`, `presentation.downloaded`), as well as asset activity (`asset.viewed`, `asset.shared`, `asset.downloaded`). Click on **Create subscription** and choose a subscription type from the dropdown list to create a subscription. Create a webhook subscription Once you've created a subscription, you'll be able to view the subscription details on the **Subscriptions** page. Select subscription type A subscription can be **viewed in detail**, **paused** or **unsubscribed** from the **Webhook** page. Select subscription type # Event types Source: https://developers.dock.us/webhooks/event-types Event types are the types of events that can be subscribed to. Webhooks are a great way to get real-time notifications on events that happen in your Dock workspace. Webhooks on Dock follow the following format: ```json webhook-payload.json theme={null} { "id": "SI5UTJ7dqKoQ", // Event ID "object": "webhook-event", // Event type "webhookId": "MTmjIOBDZAI9", // Webhook ID "subscriptionType": "workspace.viewed", // Subscription type "subscriptionId": "LPovP9OvQoZi", // Subscription ID "occurredAt": "2024-08-30T09:53:50.343Z", // Timestamp of when the event was created "propertyName": null, // Name of the property that changed (if any) "propertyPreviousValue": null, // The previous value of the property (if any) "propertyValue": null, "associatedObjects": { // Associated objects "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" } } } ``` These are the types of events you can listen to: * [**Workspace-level events**](#workspace-level-events) * [**Asset events**](#asset-events) * [**Course events**](#course-events) * [**Presentation events**](#presentation-events) File events (`workspace.file.downloaded`, `workspace.file.viewed`, `workspace.file_widget.file.uploaded`, `workspace.plan.task.action.file.*`, and `workspace.plan.task.file.uploaded`) include a `file` object in `associatedObjects` with a short-lived presigned download `url`. The URL expires at `expiresAt` (one hour); re-fetch the event or generate a new link if it has expired. ## Workspace-level events These events are triggered in the context of your entire workspace: * [`Workspace created`](#workspace-created) * [`Workspace viewed`](#workspace-viewed) * [`Workspace plan task created`](#workspace-plan-task-created) * [`Workspace plan task title changed`](#workspace-plan-task-title-changed) * [`Workspace plan task description changed`](#workspace-plan-task-description-changed) * [`Workspace plan task status changed`](#workspace-plan-task-status-changed) * [`Workspace plan task completed`](#workspace-plan-task-completed) * [`Workspace plan task uncompleted`](#workspace-plan-task-uncompleted) * [`Workspace plan task deleted`](#workspace-plan-task-deleted) * [`Workspace plan task due date changed`](#workspace-plan-task-due-date-changed) * [`Workspace plan task comment created`](#workspace-plan-task-comment-created) * [`Workspace plan task assignee added`](#workspace-plan-task-assignee-added) * [`Workspace plan task assignee removed`](#workspace-plan-task-assignee-removed) * [`Workspace plan task action link clicked`](#workspace-plan-task-action-link-clicked) * [`Workspace plan task action file downloaded`](#workspace-plan-task-action-file-downloaded) * [`Workspace plan task action file uploaded`](#workspace-plan-task-action-file-uploaded) * [`Workspace plan task action pdf viewed`](#workspace-plan-task-action-pdf-viewed) * [`Workspace plan task action video viewed`](#workspace-plan-task-action-video-viewed) * [`Workspace plan task action form interacted`](#workspace-plan-task-action-form-interacted) * [`Workspace plan task action calendar interacted`](#workspace-plan-task-action-calendar-interacted) * [`Workspace plan task action embed interacted`](#workspace-plan-task-action-embed-interacted) * [`Workspace plan task action custom code embed interacted`](#workspace-plan-task-action-custom-code-embed-interacted) * [`Workspace plan task file uploaded`](#workspace-plan-task-file-uploaded) * [`Workspace comment created`](#workspace-comment-created) * [`Workspace comment edited`](#workspace-comment-edited) * [`Workspace comment deleted`](#workspace-comment-deleted) * [`Workspace embed interacted`](#workspace-embed-interacted) * [`Workspace custom code interacted`](#workspace-custom-code-interacted) * [`Workspace file downloaded`](#workspace-file-downloaded) * [`Workspace file viewed`](#workspace-file-viewed) * [`Workspace message created`](#workspace-message-created) * [`Workspace message commented`](#workspace-message-commented) * [`Workspace security profile document downloaded`](#workspace-security-profile-document-downloaded) * [`Workspace security profile document viewed`](#workspace-security-profile-document-viewed) * [`Workspace security profile document link clicked`](#workspace-security-profile-document-link-clicked) * [`Workspace order form signed`](#workspace-order-form-signed) * [`Workspace order form fully signed`](#workspace-order-form-fully-signed) * [`Workspace order form viewed`](#workspace-order-form-viewed) * [`Workspace order form downloaded`](#workspace-order-form-downloaded) * [`Workspace NDA signed`](#workspace-NDA-signed) * [`Workspace link clicked`](#workspace-link-clicked) * [`Workspace text link clicked`](#workspace-text-link-clicked) * [`Workspace page viewed`](#workspace-page-viewed) * [`Workspace section navigation clicked`](#workspace-section-navigation-clicked) * [`Workspace file widget file uploaded`](#workspace-file-widget-file-uploaded) * [`Workspace form submitted`](#workspace-form-submitted) ### Workspace created This event is triggered when a workspace is created. Here’s an example payload: ```json workspace.created theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.created", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": null, "propertyPreviousValue": null, "propertyValue": null, "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" } } } ``` ### Workspace viewed This event is triggered when a workspace is viewed. Here’s an example payload: ```json workspace.viewed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.viewed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": null, "propertyPreviousValue": null, "propertyValue": null, "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" } }, } ``` ### Workspace plan task created This event is triggered when a workspace plan task is created. Here’s an example payload: ```json workspace.plan.task.created theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.created", "occurredAt": "2025-01-28T20:54:43.412Z", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } }, } ``` ### Workspace plan task title changed This event is triggered when a workspace plan task title is changed. Here’s an example payload: ```json workspace.plan.task.title.changed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.title.changed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "title", "propertyPreviousValue": "Old title", "propertyValue": "New title", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } } } ``` ### Workspace plan task description changed This event is triggered when a workspace plan task description is changed. Here’s an example payload: ```json workspace.plan.task.description.changed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.description.changed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "description", "propertyPreviousValue": "Old description", "propertyValue": "New description", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } }, } ``` ### Workspace plan task status changed This event is triggered when a workspace plan task status is changed. Here’s an example payload: ```json workspace.plan.task.status.changed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.status.changed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "status", "propertyPreviousValue": "To do", "propertyValue": "In progress", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } }, } ``` ### Workspace plan task completed This event is triggered when a workspace plan task is completed. Here’s an example payload: ```json workspace.plan.task.completed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.completed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": null, "propertyPreviousValue": null, "propertyValue": null, "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } }, } ``` ### Workspace plan task uncompleted This event is triggered when a workspace plan task is uncompleted. Here’s an example payload: ```json workspace.plan.task.uncompleted theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.uncompleted", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": null, "propertyPreviousValue": null, "propertyValue": null, "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } } } ``` ### Workspace plan task deleted This event is triggered when a workspace plan task is deleted. Here’s an example payload: ```json workspace.plan.task.deleted theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.deleted", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": null, "propertyPreviousValue": null, "propertyValue": null, "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } } } ``` ### Workspace plan task due date changed This event is triggered when a workspace plan task due date is changed. Here’s an example payload: ```json workspace.plan.task.due_date.changed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.due_date.changed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "dueDate", "propertyPreviousValue": "2025-01-27", "propertyValue": "2025-01-28", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } } } ``` ### Workspace plan task comment created This event is triggered when a workspace plan task comment is created. Here’s an example payload: ```json workspace.plan.task.comment.created theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.comment.created", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "comment", "propertyPreviousValue": null, "propertyValue": "This is a comment", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } } } ``` ### Workspace plan task assignee added This event is triggered when a workspace plan task assignee is added. Here’s an example payload: ```json workspace.plan.task.assignee.added theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.assignee.added", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "name", "propertyPreviousValue": null, "propertyValue": "John Doe", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } } } ``` ### Workspace plan task assignee removed This event is triggered when a workspace plan task assignee is removed. Here’s an example payload: ```json workspace.plan.task.assignee.removed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.assignee.removed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "name", "propertyPreviousValue": "John Doe", "propertyValue": null, "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } } } ``` ### Workspace plan task action link clicked This event is triggered when a workspace plan task action link is clicked. Here’s an example payload: ```json workspace.plan.task.action.link.clicked theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.action.link.clicked", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "url", "propertyPreviousValue": null, "propertyValue": "https://dock.us", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } } } ``` ### Workspace plan task action file downloaded This event is triggered when a workspace plan task action file is downloaded. Here’s an example payload: ```json workspace.plan.task.action.file.downloaded theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.action.file.downloaded", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "name", "propertyPreviousValue": null, "propertyValue": "file.pdf", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } } } ``` ### Workspace plan task action file uploaded This event is triggered when a file is uploaded to a workspace plan task action. Here’s an example payload: ```json workspace.plan.task.action.file.uploaded theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.action.file.uploaded", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "name", "propertyPreviousValue": null, "propertyValue": "file.pdf", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "file": { "id": "fL4mN6oP8qRs", "object": "file", "name": "proposal.pdf", "url": "https://storage.googleapis.com/dock-production-private/...signed...", "expiresAt": "2025-01-28T21:54:43.412Z" } } } ``` ### Workspace plan task action pdf viewed This event is triggered when a PDF in a workspace plan task action is viewed. Here’s an example payload: ```json workspace.plan.task.action.pdf.viewed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.action.pdf.viewed", "occurredAt": "2025-01-28T20:54:43.412Z", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } } } ``` ### Workspace plan task action video viewed This event is triggered when a video in a workspace plan task action is viewed. Here’s an example payload: ```json workspace.plan.task.action.video.viewed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.action.video.viewed", "occurredAt": "2025-01-28T20:54:43.412Z", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } } } ``` ### Workspace plan task action form interacted This event is triggered when a form in a workspace plan task action is interacted with. Here’s an example payload: ```json workspace.plan.task.action.form.interacted theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.action.form.interacted", "occurredAt": "2025-01-28T20:54:43.412Z", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } } } ``` ### Workspace plan task action calendar interacted This event is triggered when a calendar in a workspace plan task action is interacted with. Here’s an example payload: ```json workspace.plan.task.action.calendar.interacted theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.action.calendar.interacted", "occurredAt": "2025-01-28T20:54:43.412Z", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } } } ``` ### Workspace plan task action embed interacted This event is triggered when an embed in a workspace plan task action is interacted with. Here’s an example payload: ```json workspace.plan.task.action.embed.interacted theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.action.embed.interacted", "occurredAt": "2025-01-28T20:54:43.412Z", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } } } ``` ### Workspace plan task action custom code embed interacted This event is triggered when a custom code embed in a workspace plan task action is interacted with. Here’s an example payload: ```json workspace.plan.task.action.custom_code_embed.interacted theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.action.custom_code_embed.interacted", "occurredAt": "2025-01-28T20:54:43.412Z", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "templatePlanStepId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" } } } ``` ### Workspace plan task file uploaded This event is triggered when a file is uploaded via the file manager inside a plan/task description. The payload includes a `file` object with a short-lived presigned download URL. ```json workspace.plan.task.file.uploaded theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.plan.task.file.uploaded", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "name", "propertyPreviousValue": null, "propertyValue": "proposal.pdf", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePlanTask": { "id": "XycKxQP2Zfva", "object": "workspace-plan-task", "url": "https://api.dock.us/v1/workspace-plan-tasks/XycKxQP2Zfva", "title": "Task title", "templatePlanTaskId": "R6EfdsZwWuKc" }, "workspacePlan": { "id": "751gZMeRAScD", "object": "workspace-plan", "url": "https://api.dock.us/v1/workspace-plans/751gZMeRAScD", "title": "Plan title" }, "file": { "id": "fL4mN6oP8qRs", "object": "file", "name": "proposal.pdf", "url": "https://storage.googleapis.com/dock-production-private/...signed...", "expiresAt": "2025-01-28T21:54:43.412Z" } } } ``` ### Workspace comment created This event is triggered when a workspace comment is created. Here’s an example payload: ```json workspace.comment.created theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.comment.created", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "comment", "propertyPreviousValue": null, "propertyValue": "This is a comment", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" } } } ``` ### Workspace comment edited This event is triggered when a workspace comment is edited. Here’s an example payload: ```json workspace.comment.edited theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.comment.edited", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "comment", "propertyPreviousValue": null, "propertyValue": "This is a comment", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" } } } ``` ### Workspace comment deleted This event is triggered when a workspace comment is deleted. Here’s an example payload: ```json workspace.comment.deleted theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.comment.deleted", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "comment", "propertyPreviousValue": null, "propertyValue": "This is a comment", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" } } } ``` ### Workspace embed interacted This event is triggered when a workspace embed is interacted with. Here’s an example payload: ```json workspace.embed.interacted theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.embed.interacted", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "url", "propertyPreviousValue": null, "propertyValue": "https://dock.us", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace custom code interacted This event is triggered when a workspace custom code is interacted with. Here’s an example payload: ```json workspace.custom.code.interacted theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.custom_code.interacted", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "code", "propertyPreviousValue": null, "propertyValue": "console.log(\"Hello, world!\");", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace file downloaded This event is triggered when a workspace file is downloaded. Here’s an example payload: ```json workspace.file.downloaded theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.file.downloaded", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "name", "propertyPreviousValue": null, "propertyValue": "file.pdf", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace file viewed This event is triggered when a workspace file is viewed. Here’s an example payload: ```json workspace.file.viewed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.file.viewed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "name", "propertyPreviousValue": null, "propertyValue": "file.pdf", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace message created This event is triggered when a workspace message is created. Here’s an example payload: ```json workspace.message.created theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.message.created", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "messageBody", "propertyPreviousValue": null, "propertyValue": "This is a message", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" } } } ``` ### Workspace message commented This event is triggered when a workspace message is commented on. Here’s an example payload: ```json workspace.message.comment.created theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.message.comment.created", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "comment", "propertyPreviousValue": null, "propertyValue": "This is a comment", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" } } } ``` ### Workspace security profile document downloaded This event is triggered when a workspace security profile document is downloaded. Here’s an example payload: ```json workspace.security_profile_document.downloaded theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.security_profile_document.downloaded", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "name", "propertyPreviousValue": null, "propertyValue": "file.pdf", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace security profile document viewed This event is triggered when a workspace security profile document is viewed. Here’s an example payload: ```json workspace.security_profile_document.viewed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.security_profile_document.viewed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "name", "propertyPreviousValue": null, "propertyValue": "file.pdf", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } }, } ``` ### Workspace security profile document link clicked This event is triggered when a workspace security profile document link is clicked. Here’s an example payload: ```json workspace.security_profile_document.link.clicked theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.security_profile_document.link.clicked", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "url", "propertyPreviousValue": null, "propertyValue": "https://dock.us", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace order form signed This event is triggered when a workspace order form is signed. Here’s an example payload: ```json workspace.order_form.signed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.order_form.signed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "title", "propertyPreviousValue": null, "propertyValue": "Order form", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace order form fully signed This event is triggered when a workspace order form is fully signed. Here’s an example payload: ```json workspace.order_form.fully_signed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.order_form.fully_signed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "title", "propertyPreviousValue": null, "propertyValue": "Order form", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace order form viewed This event is triggered when a workspace order form is viewed. Here’s an example payload: ```json workspace.order_form.viewed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.order_form.viewed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "title", "propertyPreviousValue": null, "propertyValue": "Order form", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace order form downloaded This event is triggered when a workspace order form is downloaded. Here’s an example payload: ```json workspace.order_form.downloaded theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.order_form.downloaded", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "title", "propertyPreviousValue": null, "propertyValue": "Order form", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace NDA signed This event is triggered when a workspace NDA is signed. Here’s an example payload: ```json workspace.nda.signed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.nda.signed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "name", "propertyPreviousValue": null, "propertyValue": "Workspace NDA", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace link clicked ```json workspace.link.clicked theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.link.clicked", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "url", "propertyPreviousValue": null, "propertyValue": "https://dock.us", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace text link clicked This event is triggered when a workspace text link is clicked. Here’s an example payload: ```json workspace.text_link.clicked theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.text_link.clicked", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "url", "propertyPreviousValue": null, "propertyValue": "https://dock.us", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace page viewed This event is triggered when a workspace page is viewed. Here’s an example payload: ```json workspace.page.viewed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.page.viewed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": null, "propertyPreviousValue": null, "propertyValue": null, "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace section navigation clicked This event is triggered when a workspace section navigation is clicked. Here’s an example payload: ```json workspace.section_navigation.clicked theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.section_navigation.clicked", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "name", "propertyPreviousValue": null, "propertyValue": "Section 1", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace file widget file uploaded This event is triggered when a file is uploaded from a file widget. Here’s an example payload: ```json workspace.file_widget.file.uploaded theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "workspace.file_widget.file.uploaded", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "name", "propertyPreviousValue": null, "propertyValue": "file.pdf", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "workspaceSection": { "id": "mITE6OX6b8vd", "object": "workspace-section", "url": "https://api.dock.us/v1/workspace-sections/mITE6OX6b8vd", "templateSectionId": "ZZnXcAAYZxL5" }, "workspacePage": { "id": "ShCzALeE7ZRj", "object": "workspace-page", "url": "https://api.dock.us/v1/workspace-pages/ShCzALeE7ZRj", "templatePageId": "f6lAhd09H9au" } } } ``` ### Workspace form submitted This event is triggered when a workspace form is submitted. For `file_upload` questions, each `formQuestionResponses` item can include an optional `files` array with temporary download links. `files[].url` is a presigned URL and may be `null` if link generation fails; links expire at `files[].expiresAt`. Here’s an example payload: ```json workspace.form.submitted theme={null} { "id": "E2Q4LtRLrFqK", "object": "webhook-event", "webhookId": "2KpNX8mSPGNz", "subscriptionType": "workspace.form.submitted", "subscriptionId": "aq74qC2rzADt", "occurredAt": "2025-05-06T17:25:38.930Z", "propertyName": null, "propertyPreviousValue": null, "propertyValue": null, "associatedObjects": { "workspace": { "id": "b6lnIUNYBkPL", "object": "workspace", "url": "https://api.dock.us/workspaces/b6lnIUNYBkPL", "name": "Test webhook form" }, "account": { "id": "o069gCV0WkQe", "object": "account", "url": "https://api.dock.us/accounts/o069gCV0WkQe", "hubspotCompanyId": "18639617835" }, "user": { "id": "tzmDEEZy1bvq", "object": "user", "url": "https://api.dock.us/users/tzmDEEZy1bvq", "email": "test@dock.us" }, "workspacePage": { "id": "3TGNkB8Gopo3", "object": "workspace-page", "url": "https://api.dock.us/workspace-pages/3TGNkB8Gopo3", "name": "Test webhook form" }, "workspaceSection": { "id": "lVwwuS0noQQv", "object": "workspace-section", "url": "https://api.dock.us/workspace-sections/lVwwuS0noQQv", "name": null }, "workspaceForm": { "id": "9NdExtsz05Fi", "formId": "vaQprFfsdF71", "object": "workspace-form", "title": "Test survey form " }, "formQuestions": [ { "id": "pN8QbxezAlja", "object": "form-question", "title": "What are the areas of your interest?", "type": "checkbox" }, { "id": "ijhXFq3GCZDJ", "object": "form-question", "title": "Choose any one framework?", "type": "dropdown" }, { "id": "EXC2Hni0vbsm", "object": "form-question", "title": "Fileupload Question Title", "type": "file_upload" }, { "id": "TVuJd4msyAp0", "object": "form-question", "title": "Explain what the product does?", "type": "paragraph" }, { "id": "T0aLHfaCkZFR", "object": "form-question", "title": "Office Address?", "type": "single_line" }, { "id": "kku1qvevzwx4", "object": "form-question", "title": "Website for the product", "type": "url" }, { "id": "0gMsa9Uw0Nff", "object": "form-question", "title": "Focus area of the product?", "type": "checkbox" } ], "formQuestionResponses": [ { "id": "MYpTNXp1jL7I", "object": "form-question-response", "formQuestionId": "pN8QbxezAlja", "value": [ "SaaS", "AI/ML", "Other answer" ] }, { "id": "UiU2o7z4xHQr", "object": "form-question-response", "formQuestionId": "ijhXFq3GCZDJ", "value": [ "Laravel" ] }, { "id": "nVP1ce5LJI1H", "object": "form-question-response", "formQuestionId": "EXC2Hni0vbsm", "value": [ "akasa.jpg" ], "files": [ { "id": "3EoaD0z8Y3dN", "object": "file", "name": "akasa.jpg", "url": "https://storage.googleapis.com/example/signed-url", "expiresAt": "2025-05-06T18:25:38.930Z" } ] }, { "id": "a9Pzhsyy2kKS", "object": "form-question-response", "formQuestionId": "TVuJd4msyAp0", "value": "Organizes all customer-shared content in one workspace.\nCreate sales rooms, onboarding plans, & client portals that delight customers.\nWith a little help from AI to write business cases, project plans, and more." }, { "id": "hJHAE1PNCGJR", "object": "form-question-response", "formQuestionId": "T0aLHfaCkZFR", "value": "4, 14, Kamal Park Society, B/h Geb Office, Race Course" }, { "id": "krVO6hdL9cZe", "object": "form-question-response", "formQuestionId": "kku1qvevzwx4", "value": "https://acme.com" }, { "id": "ObwEWzdGzQGC", "object": "form-question-response", "formQuestionId": "0gMsa9Uw0Nff", "value": [ "Fintech", "Saas" ] } ] } } ``` ### Workspace form question submitted This event is triggered when a workspace form is submitted. When the submitted question is a `file_upload`, `associatedObjects.formQuestionResponse` can also include the optional `files` array described above. Here’s an example payload: ```json workspace.form.question.submitted theme={null} { "id": "E2Q4LtRLrFqK", "object": "webhook-event", "webhookId": "2KpNX8mSPGNz", "subscriptionType": "workspace.form.question.submitted", "subscriptionId": "aq74qC2rzADt", "occurredAt": "2025-05-06T17:25:38.930Z", "propertyName": "value", "propertyPreviousValue": null, "propertyValue": "SaaS, AI/ML, Other answer", "associatedObjects": { "workspace": { "id": "b6lnIUNYBkPL", "object": "workspace", "url": "https://api.dock.us/workspaces/b6lnIUNYBkPL", "name": "Test webhook form" }, "account": { "id": "o069gCV0WkQe", "object": "account", "url": "https://api.dock.us/accounts/o069gCV0WkQe", "hubspotCompanyId": "18639617835" }, "user": { "id": "tzmDEEZy1bvq", "object": "user", "url": "https://api.dock.us/users/tzmDEEZy1bvq", "email": "test@dock.us" }, "workspacePage": { "id": "3TGNkB8Gopo3", "object": "workspace-page", "url": "https://api.dock.us/workspace-pages/3TGNkB8Gopo3", "name": "Test webhook form" }, "workspaceSection": { "id": "lVwwuS0noQQv", "object": "workspace-section", "url": "https://api.dock.us/workspace-sections/lVwwuS0noQQv", "name": null }, "workspaceForm": { "id": "9NdExtsz05Fi", "formId": "vaQprFfsdF71", "object": "workspace-form", "title": "Test survey form " }, "formQuestion": { "id": "pN8QbxezAlja", "object": "form-question", "title": "What are the areas of your interest?", "type": "checkbox" }, "formQuestionResponse": { "id": "MYpTNXp1jL7I", "object": "form-question-response", "formQuestionId": "pN8QbxezAlja", "value": "SaaS, AI/ML, Other answer" } } } ``` ## Asset events Asset events are emitted when a library asset is viewed, shared, or downloaded. Every event includes an `asset` snapshot with its name, type, internal library URL, internal-use flag, tags, description, and download setting. When an `AssetLink` is involved, `shareUrl` identifies that exact link and `trackingEnabled` indicates whether it is gated. Actions performed in a workspace also include `workspace` and `account`; outside-workspace actions omit them. Anonymous activity omits `user`. ### Asset viewed Triggered when someone views an asset through an asset link. ```json asset.viewed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "asset.viewed", "occurredAt": "2026-07-27T09:30:00.000Z", "associatedObjects": { "asset": { "id": "aSs3t5uVwXyZ", "object": "asset", "name": "Security Guide", "type": "pdf", "url": "https://acme.dock.us/library/asset/aSs3t5uVwXyZ", "shareUrl": "https://acme.dock.us/asset/security-guide-aSLink1", "isInternal": false, "tags": [{ "id": "cOlL3ct10nId", "title": "Security" }], "description": "Customer-facing security overview", "downloadEnabled": true, "trackingEnabled": true } } } ``` ### Asset shared Triggered when an asset share link is created or an asset is shared into a workspace. ```json asset.shared theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "asset.shared", "occurredAt": "2026-07-27T09:35:00.000Z", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "name": "Acme Security Review" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N", "name": "Acme" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "asset": { "id": "aSs3t5uVwXyZ", "object": "asset", "name": "Security Guide", "type": "pdf", "url": "https://acme.dock.us/library/asset/aSs3t5uVwXyZ", "shareUrl": "https://acme.dock.us/asset/security-guide-aSLink2", "isInternal": false, "tags": [{ "id": "cOlL3ct10nId", "title": "Security" }], "description": "Customer-facing security overview", "downloadEnabled": true, "trackingEnabled": false } } } ``` ### Asset downloaded Triggered when someone downloads a downloadable asset through an asset link. Its payload uses the same `asset` shape as `asset.viewed`; workspace, account, and user context are included when available. ```json asset.downloaded theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "asset.downloaded", "occurredAt": "2026-07-27T09:40:00.000Z", "associatedObjects": { "asset": { "id": "aSs3t5uVwXyZ", "object": "asset", "name": "Security Guide", "type": "pdf", "url": "https://acme.dock.us/library/asset/aSs3t5uVwXyZ", "shareUrl": "https://acme.dock.us/asset/security-guide-aSLink1", "isInternal": false, "tags": [{ "id": "cOlL3ct10nId", "title": "Security" }], "description": "Customer-facing security overview", "downloadEnabled": true, "trackingEnabled": true } } } ``` ## Course events These events are triggered when a learner completes coursework in a workspace-linked course. ### Course completed This event is triggered when a learner reaches the course completion state. ```json course.completed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "course.completed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "status", "propertyPreviousValue": "inProgress", "propertyValue": "completed", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com", "name": "John Doe", "firstName": "John", "lastName": "Doe" }, "learner": { "id": "bN0pQ2rT5uVw", "object": "learner", "url": "https://api.dock.us/v1/users/bN0pQ2rT5uVw", "email": "learner@example.com", "name": "Jordan Lee", "firstName": "Jordan", "lastName": "Lee" }, "reviewer": { "id": "cQ1rS3tUvWx", "object": "reviewer", "url": "https://api.dock.us/v1/users/cQ1rS3tUvWx", "email": "reviewer@example.com", "name": "Sam Rivera", "firstName": "Sam", "lastName": "Rivera" }, "course": { "id": "dR2sT4uVwXy", "object": "course", "url": "https://api.dock.us/v1/courses/dR2sT4uVwXy", "name": "Security Onboarding" }, "assignment": { "id": "eS3tU5vWxYz", "object": "assignment", "url": "https://api.dock.us/v1/course-assignments/eS3tU5vWxYz", "status": "completed", "dueDate": "2026-07-01T00:00:00.000Z", "completedAt": "2026-06-26T00:00:00.000Z", "scoreObtained": 9, "totalScore": 10 } } } ``` ### Course reviewed This event is triggered when a reviewer finalizes the course review state. ```json course.reviewed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "course.reviewed", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "status", "propertyPreviousValue": "readyForReview", "propertyValue": "completed", "associatedObjects": { "workspace": { "id": "BfkPI6fgyXQI", "object": "workspace", "url": "https://api.dock.us/v1/workspaces/BfkPI6fgyXQI", "templateId": "NNV2AWnp6AxY" }, "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "reviewer@example.com", "name": "Sam Rivera", "firstName": "Sam", "lastName": "Rivera" }, "learner": { "id": "bN0pQ2rT5uVw", "object": "learner", "url": "https://api.dock.us/v1/users/bN0pQ2rT5uVw", "email": "learner@example.com", "name": "Jordan Lee", "firstName": "Jordan", "lastName": "Lee" }, "reviewer": { "id": "cQ1rS3tUvWx", "object": "reviewer", "url": "https://api.dock.us/v1/users/cQ1rS3tUvWx", "email": "reviewer@example.com", "name": "Sam Rivera", "firstName": "Sam", "lastName": "Rivera" }, "course": { "id": "dR2sT4uVwXy", "object": "course", "url": "https://api.dock.us/v1/courses/dR2sT4uVwXy", "name": "Security Onboarding" }, "assignment": { "id": "eS3tU5vWxYz", "object": "assignment", "url": "https://api.dock.us/v1/course-assignments/eS3tU5vWxYz", "status": "completed", "dueDate": "2026-07-01T00:00:00.000Z", "completedAt": "2026-06-26T00:00:00.000Z", "scoreObtained": 9, "totalScore": 10 } } } ``` ## Presentation events These events are triggered for presentation share-link activity only. Internal workspace presentation views/downloads are not emitted as these webhook event types. ### Presentation viewed This event is triggered when a presentation is viewed through a share link. ```json presentation.viewed theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "presentation.viewed", "occurredAt": "2025-01-28T20:54:43.412Z", "associatedObjects": { "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "presentation": { "id": "pRe5enT8tioN", "object": "presentation", "name": "Q3 Pitch Deck" }, "owners": [ { "id": "gT5uH7iJ9kLm", "object": "owner", "url": "https://api.dock.us/v1/users/gT5uH7iJ9kLm", "email": "owner@example.com", "name": "Alex Kim", "firstName": "Alex", "lastName": "Kim" } ] } } ``` The top-level `propertyName` / `propertyValue` / `propertyPreviousValue` fields are only present when an event represents a property change. Events with no property change (e.g. `presentation.viewed`, `presentation.shared`) omit them. `account` is included only when an account is linked to the presentation; `owners` only when the presentation has owners. ### Presentation downloaded This event is triggered when a presentation file is downloaded through a share link. ```json presentation.downloaded theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "presentation.downloaded", "occurredAt": "2025-01-28T20:54:43.412Z", "propertyName": "fileType", "propertyPreviousValue": null, "propertyValue": "pdf", "associatedObjects": { "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "presentation": { "id": "pRe5enT8tioN", "object": "presentation", "name": "Q3 Pitch Deck" } } } ``` ### Presentation shared This event is triggered when a presentation share link is created — for both tracking and non-tracking links. Whether the link is a tracking (gated) link is exposed as `isTracking` on the `presentation` associated object. ```json presentation.shared theme={null} { "id": "SI5UTJ7dqKoQ", "object": "webhook-event", "webhookId": "MTmjIOBDZAI9", "subscriptionId": "LPovP9OvQoZi", "subscriptionType": "presentation.shared", "occurredAt": "2025-01-28T20:54:43.412Z", "associatedObjects": { "account": { "id": "uUsnaBrnTV6N", "object": "account", "url": "https://api.dock.us/v1/accounts/uUsnaBrnTV6N" }, "user": { "id": "6bxK1Cyh88EK", "object": "user", "url": "https://api.dock.us/v1/users/6bxK1Cyh88EK", "email": "john.doe@example.com" }, "presentation": { "id": "pRe5enT8tioN", "object": "presentation", "name": "Q3 Pitch Deck", "isTracking": true }, "owners": [ { "id": "gT5uH7iJ9kLm", "object": "owner", "url": "https://api.dock.us/v1/users/gT5uH7iJ9kLm", "email": "owner@example.com", "name": "Alex Kim", "firstName": "Alex", "lastName": "Kim" } ] } } ``` # Introduction Source: https://developers.dock.us/webhooks/introduction Use webhooks to get real-time notifications on events happening across your Dock workspace. Webhooks allows you to listen to real-time events happening across your Dock workspace. With webhooks, you can build custom integrations with Dock, such as: * Sending click events in real-time for further processing * Triggering a Slack notification when someone clicks on your pitch deck link * Triggering downstream automations when a workspace is created * Syncing learner lifecycle updates from `course.completed` and `course.reviewed` * Tracking library asset views, shares, and downloads `presentation.viewed` and `presentation.downloaded` are emitted for presentation share-link activity only. Asset link activity is available through `asset.viewed`, `asset.shared`, and `asset.downloaded`. In this guide, we'll show you how to configure webhooks for your Dock workspace and a list of available events you can listen to. ## Creating a webhook You must be an account `admin` to create a webhook. To create a webhook for your Dock workspace, you'll need to follow these steps: Go to **Settings** and click on **Webhooks** from the **Data Management** section in the side navigation. Create a webhook on Dock Click on **Create Webhook** button and enter a name to create a webhook in your application. Once created, it will appear in the list on the page. Create webhook secret Create webhook secret Enter the webhook target URL and click on **Save** to verify the webhook target URL. The webhook target URL must accept a POST request for verification and event delivery. Verify webhook target URL You can click on the **View Key** button to see the secret key. You can use this secret key to verify incoming webhook event from Dock incase you have a custom implementation to consume webhook events. Secret key # Retry behaviour Source: https://developers.dock.us/webhooks/retry-behaviour Retry behaviour for webhooks. ## Retry Behaviour If your webhook endpoint does not respond with a success status code (2XX), we retry the request to ensure every message will be delivered. You can see all the retry attempts in your webhook event logs. Webhooks are retried until they are successfully delivered – with an exponential backoff to avoid overwhelming your webhook endpoint (also known as the "[thundering herd problem](https://en.wikipedia.org/wiki/Thundering_herd_problem)"). The delay is capped at 5th retry attempt. | Retry attempt | Delay | | ------------- | ----- | | 1st | 0s | | 2nd | 2s | | 3rd | 4s | | 4th | 8s | | 5th | 16s | # Send test events Source: https://developers.dock.us/webhooks/test-event Send test events to your webhook URL to ensure that it's working correctly. ## Sending test events You can send test events to your webhook URL to ensure that it's working correctly. To do this: Use this flow to validate sample payloads for `workspace.created`, `course.completed`, `course.reviewed`, `presentation.viewed`, and `presentation.downloaded`, plus `asset.viewed`, `asset.shared`, and `asset.downloaded` subscriptions before going live. Click on the **Details** button to view the subcription's sample payload and details. Details page Scroll down, enter the Test URL in the input and click on **Test** button to send the event and view the response. Send test event # Verify webhook requests Source: https://developers.dock.us/webhooks/verify-webhook-requests Learn how to verify webhook requests to ensure they're coming from Dock. With signature verification, you can determine if the webhook came from Dock, and has not been tampered with in transit. All webhooks are delivered with a `X-Dock-Signature` and `X-Timestamp` header. Dock generates this header using a secret key that only you and Dock know. An example header looks like this: ``` X-Dock-Signature: c9ed6a2abf93f59d761eea69908d8de00f4437b5b6d7cd8b9bf5719cbe61bf46 X-Timestamp: 1716998400 ``` ## Finding your webhook's signing secret You can find your webhook's signing secret in the **Webhook** page by clicking on the **View Secret Key** button: Webhook signing secret Make sure to keep this secret safe by only storing it in a secure environment variable (e.g. `DOCK_WEBHOOK_SECRET`). Do not commit it to git or add it in any client-side code. ## Verifying a webhook request To verify, you can use the secret key to generate your own signature for webhook. If both signatures match then you can be sure that a received event came from Dock. The steps required are: 1. Get the raw body of the request. 2. Extract the signature from the `X-Dock-Signature` header. 3. Calculate the HMAC of the `Request Method + Target Url + Raw Body` using the `SHA-256` hash function and the secret. 4. Compare the calculated `HMAC` with the one sent in the `X-Dock-Signature` header. If they match, the webhook is verified. Here's an example of how you can verify a webhook request in different languages: ```javascript Node.js theme={null} export const POST = async (req: Request,res: Response) => { const webhookSignature = req.headers.get("X-Dock-Signature"); if (!webhookSignature) { return res.status(401).send("No signature provided."); } // Copy this from the webhook details page const secret = process.env.DOCK_WEBHOOK_SECRET; if (!secret) { return res.status(401).send("No secret provided."); } // Make sure to get the body from the request const url = `https://${req.header('host')}${req.path}`; const body = JSON.stringify(req.body); const payload = `${req.method}\n${url}\n${body}`; const computedSignature = crypto .createHmac("sha256", secret) .update(payload) .digest("hex"); if (crypto.timingSafeEqual( Buffer.from(webhookSignature, 'hex'), Buffer.from(computedSignature, 'hex'), )) { return res.status(400).send("Invalid signature"); } // Handle the webhook event // ... }; ``` ```python Python theme={null} import hmac import hashlib import os from flask import Flask, request, Response app = Flask(__name__) @app.route('/webhook', methods=['POST']) def webhook_handler(): webhook_signature = request.headers.get("X-Dock-Signature") if not webhook_signature: return Response("No signature provided.", status=401) secret = os.getenv("DOCK_WEBHOOK_SECRET") if not secret: return Response("No secret provided.", status=401) body = request.get_data(as_text=True) url = f"{request.host}{request.path}" payload = f"{request.method}\n{url}\n{body}" computed_signature = hmac.new( secret.encode('utf-8'), payload.encode('utf-8'), hashlib.sha256 ).hexdigest() if not hmac.compare_digest(webhook_signature, computed_signature): return Response("Invalid signature.", status=400) ## Handle the webhook event ## ... ``` ```go Golang theme={null} package main import ( "bytes" "crypto/hmac" "crypto/sha256" "encoding/hex" "io" "net/http" "os" ) func webhookHandler(w http.ResponseWriter, r *http.Request) { webhookSignature := r.Header.Get("X-Dock-Signature") if webhookSignature == "" { http.Error(w, "No signature provided.", http.StatusUnauthorized) return } secret := os.Getenv("DOCK_WEBHOOK_SECRET") if secret == "" { http.Error(w, "No secret provided.", http.StatusUnauthorized) return } bodyBytes, err := io.ReadAll(r.Body) if err != nil { http.Error(w, "Unable to read request body.", http.StatusInternalServerError) return } // Reconstruct the payload url := r.Host + r.URL.Path payload := r.Method + "\n" + url + "\n" + string(bodyBytes) h := hmac.New(sha256.New, []byte(secret)) h.Write([]byte(payload)) computedSignature := hex.EncodeToString(h.Sum(nil)) if !hmac.Equal([]byte(webhookSignature), []byte(computedSignature)) { http.Error(w, "Invalid signature.", http.StatusBadRequest) return } // Handle the webhook event //... } ``` ## Why is signature verification important? Signature verification is a crucial security measure that protects against request forgery and data tampering. Without verification, malicious actors could send fake webhook events to your endpoint, potentially triggering unauthorized actions. The HMAC-SHA256 signature verification process ensures that only Dock can generate valid webhook requests and that payloads haven't been modified in transit. This provides both authentication (confirming the sender is Dock) and integrity (ensuring the message hasn't been tampered with).