Skip to content

Webhooks V2#280

Merged
danciaclara merged 6 commits into
masterfrom
update-webhooks
Jul 23, 2026
Merged

Webhooks V2#280
danciaclara merged 6 commits into
masterfrom
update-webhooks

Conversation

@danciaclara

@danciaclara danciaclara commented May 28, 2026

Copy link
Copy Markdown
Collaborator

Description

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • Feature (non-breaking change which adds functionality)
  • Improvement (change that would cause existing functionality to not work as expected)
  • Code refactoring
  • Performance improvements
  • Documentation update

Screenshots and Media (if applicable)

Test Scenarios

References

Summary by CodeRabbit

  • Documentation
    • Added comprehensive Webhooks v2 documentation, including workspace-scoped behavior and the v2 payload schema
    • Included a V1 → V2 migration guide with clear payload comparisons and differences
    • Expanded webhook setup, management (enable/disable/edit/delete), and secret key regeneration instructions
    • Updated security guidance for HMAC-SHA256 signing, required raw-body verification, and expected signature headers
    • Clarified delivery semantics, retry rules, failure handling, and how to read delivery logs

@vercel

vercel Bot commented May 28, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
developer-docs Ready Ready Preview, Comment Jul 23, 2026 10:48am

Request Review

@coderabbitai

coderabbitai Bot commented May 28, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@danciaclara, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 9 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7a936297-1b4b-42b8-b069-e0bc8f5d5fc3

📥 Commits

Reviewing files that changed from the base of the PR and between 50de0ef and e6a3019.

📒 Files selected for processing (1)
  • docs/dev-tools/intro-webhooks.md
📝 Walkthrough

Walkthrough

This pull request rewrites Plane webhook documentation for v2 workspace-scoped webhooks. It covers creation, filtering, lifecycle operations, HMAC-SHA256 security, asynchronous delivery and retries, event references, payload schemas, and JSON examples.

Changes

Webhooks v2 Complete Documentation

Layer / File(s) Summary
Webhooks v2 Introduction and Creation
docs/dev-tools/intro-webhooks.md
Introduces workspace-scoped Webhooks v2, documents v1 migration, and explains webhook creation, URL constraints, configuration, and secret-key visibility.
Work-Item Filtering Modes
docs/dev-tools/intro-webhooks.md
Documents delivery-time filtering with Basic and PQL modes, supported fields, and expression syntax.
Webhook Lifecycle Management
docs/dev-tools/intro-webhooks.md
Describes editing, enabling, disabling, deleting, viewing, copying, and regenerating webhook secret keys.
Request Security and Delivery Monitoring
docs/dev-tools/intro-webhooks.md
Defines HMAC-SHA256 verification, raw-body requirements, signature headers, asynchronous delivery, retry behavior, failure handling, and delivery logs.
Event and Payload Reference
docs/dev-tools/intro-webhooks.md
Adds dot-notation event references, required headers, the v2 payload schema, field definitions, and JSON examples for multiple event types.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers: sriramveeraghanta

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and directly matches the main change: the docs were updated for Webhooks v2.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch update-webhooks

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Comment thread docs/dev-tools/intro-webhooks.md Outdated
project_id = "<project-uuid>" Specific project
```

## Securing requests

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can move this to or nearby delivery and monitoring section

Whenever an issue is added to the module, the corresponding issue webhook will be triggered. Similarly, any updates made to the cycle issue will also activate the issue webhook.
:::
**workitem.link.created**

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's add a workitem.updated event as sample as it has previous_attributes also

{
   "version":"v2",
   "delivery_id":"2a0d0510-9052-446e-a1c7-a704bbd68cba",
   "event_id":"9d508cd9-36c2-44a5-928d-7ee2f2a3b8a8",
   "entity_id":"775c5716-5302-4617-bb9f-2cd843911268",
   "entity_type":"issue",
   "event":"WebhookScope.ScopeChoices.WORK_ITEM_UPDATED",
   "webhook_id":"8944ed18-1331-4eae-b9bb-7c40864b8abd",
   "workspace_id":"b54ecb0d-e3eb-4986-b238-f83fd8665e65",
   "data":{
      "id":"775c5716-5302-4617-bb9f-2cd843911268",
      "name":"webhook test 3",
      "point":"None",
      "type_id":"None",
      "is_draft":false,
      "priority":"none",
      "state_id":"067b88e5-304b-4221-ba09-94340dcc36e5",
      "label_ids":[],
      "parent_id":"None",
      "created_at":"2026-03-31T11:44:41.249292+00:00",
      "deleted_at":"None",
      "project_id":"59e3be42-87ec-4950-99a3-ae639cf2b089",
      "sort_order":75535,
      "start_date":"None",
      "updated_at":"2026-03-31T11:44:41.249304+00:00",
      "archived_at":"None",
      "external_id":"None",
      "sequence_id":3,
      "target_date":"None",
      "assignee_ids":[ ],
      "completed_at":"None",
      "workspace_id":"b54ecb0d-e3eb-4986-b238-f83fd8665e65",
      "created_by_id":"754009ab-3fb5-424e-909a-b46e9c9d0c4f",
      "updated_by_id":"None",
      "external_source":"None",
      "description_json":{},
      "last_activity_at":"2026-03-31T11:44:41.346305+00:00",
      "estimate_point_id":"None"
   },
   "previous_attributes":{
      "last_activity_at":"2026-03-31 11:44:41.242868+00"
   }
}


Webhooks in Plane work at the workspace level. A single webhook can subscribe to events from every project in the workspace. There is no per-project webhook configuration. Only Workspace Owners and Admins can create or manage them.

The current webhook system is v2. V2 payloads use dot-notation event names (e.g., `workitem.created`) and include structured fields for deduplication, diffing, and filtering that were not available in the original version. If you have webhooks created before v2, they appear in the list with a **(deprecated)** tag. They still deliver but do not receive any v2 fields. Recreate them as new webhooks to get the full v2 feature set.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can highlight about v1 deprecation and how to switch to v2 as it needs some attention

@danciaclara danciaclara Jun 4, 2026

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you mean as callout @Saurabhkmr98 or you want to add more information to this? i have updated that area. check again

@Saurabhkmr98 Saurabhkmr98 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

somethings that we can improve

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/dev-tools/intro-webhooks.md (1)

1-426: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Prettier CI is currently failing for this file and must be fixed before merge.

CI / Prettier reports --check failure on docs/dev-tools/intro-webhooks.md. Please run Prettier and commit the formatted output so the pipeline is green.

As per coding guidelines, "**/*.{ts,tsx,js,jsx,vue,json,md,mts}: Prettier formatting checks must pass in CI, with 120 character line width, 2-space indent, semicolons, double quotes, and ES5 trailing commas".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/dev-tools/intro-webhooks.md` around lines 1 - 426, Prettier check is
failing for docs/dev-tools/intro-webhooks.md; run Prettier with the repo's
formatting rules (120 char printWidth, 2-space indent, semicolons, double
quotes, trailingComma: "es5") on that markdown file (or run the project's
preconfigured formatter script), stage the updated
docs/dev-tools/intro-webhooks.md and commit the formatted output so CI Prettier
--check passes.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/dev-tools/intro-webhooks.md`:
- Around line 380-390: The example payload labeled workitem.link.updated is
inconsistent with the v2 contract: replace the current event value
WebhookScope.ScopeChoices.WORK_ITEM_UPDATED and the entity_type "issue" with the
v2 event key and matching entity semantics (set "event" to
"workitem.link.updated" and use the v2 entity name for links, e.g.,
"entity_type": "workitem_link"), ensure the entity_id refers to the link
resource id (not an issue id), keep "version":"v2" and valid UUIDs for
delivery_id/event_id/webhook_id, and remove the non-dot-notation enum reference
so the JSON matches the documented v2 schema.
- Around line 103-109: The fenced code block under "Expression syntax"
containing lines like priority = "urgent", priority in ["urgent", "high"],
state_group = "started", assignee_id = "<user-uuid>", and project_id =
"<project-uuid>" lacks a language identifier; add a language tag (e.g., ```text)
to the opening fence so the block becomes ```text to satisfy markdown linting.

---

Outside diff comments:
In `@docs/dev-tools/intro-webhooks.md`:
- Around line 1-426: Prettier check is failing for
docs/dev-tools/intro-webhooks.md; run Prettier with the repo's formatting rules
(120 char printWidth, 2-space indent, semicolons, double quotes, trailingComma:
"es5") on that markdown file (or run the project's preconfigured formatter
script), stage the updated docs/dev-tools/intro-webhooks.md and commit the
formatted output so CI Prettier --check passes.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 8a39cbcd-254a-4601-80ba-bd6a70e8a49d

📥 Commits

Reviewing files that changed from the base of the PR and between 3b1d721 and e01aaa0.

📒 Files selected for processing (2)
  • docs/dev-tools/intro-webhooks.md
  • docs/public/images/webhooks/create-webhook.webp

Comment on lines +103 to 109
```
priority = "urgent" Single value
priority in ["urgent", "high"] Multiple values
state_group = "started" State group match
assignee_id = "<user-uuid>" Specific assignee
project_id = "<project-uuid>" Specific project
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add a language identifier to the fenced code block.

The block under Expression syntax should specify a language (e.g., text) to satisfy markdown linting.

Suggested patch
-```
+```text
 priority = "urgent"                         Single value
 priority in ["urgent", "high"]              Multiple values
 state_group = "started"                     State group match
 assignee_id = "<user-uuid>"                 Specific assignee
 project_id = "<project-uuid>"               Specific project
</details>

<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

```suggestion

🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 103-103: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/dev-tools/intro-webhooks.md` around lines 103 - 109, The fenced code
block under "Expression syntax" containing lines like priority = "urgent",
priority in ["urgent", "high"], state_group = "started", assignee_id =
"<user-uuid>", and project_id = "<project-uuid>" lacks a language identifier;
add a language tag (e.g., ```text) to the opening fence so the block becomes
```text to satisfy markdown linting.

Comment thread docs/dev-tools/intro-webhooks.md Outdated
Comment on lines +380 to +390
**workitem.link.updated**

```json
{
"version":"v2",
"delivery_id":"2a0d0510-9052-446e-a1c7-a704bbd68cba",
"event_id":"9d508cd9-36c2-44a5-928d-7ee2f2a3b8a8",
"entity_id":"775c5716-5302-4617-bb9f-2cd843911268",
"entity_type":"issue",
"event":"WebhookScope.ScopeChoices.WORK_ITEM_UPDATED",
"webhook_id":"8944ed18-1331-4eae-b9bb-7c40864b8abd",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

workitem.link.updated example is internally inconsistent with the documented v2 contract.

This sample mixes incompatible values: heading says workitem.link.updated, but event is WebhookScope.ScopeChoices.WORK_ITEM_UPDATED (non-dot notation and different event), and entity_type is issue. Please replace this with a payload that matches the stated v2 event key and entity semantics.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/dev-tools/intro-webhooks.md` around lines 380 - 390, The example payload
labeled workitem.link.updated is inconsistent with the v2 contract: replace the
current event value WebhookScope.ScopeChoices.WORK_ITEM_UPDATED and the
entity_type "issue" with the v2 event key and matching entity semantics (set
"event" to "workitem.link.updated" and use the v2 entity name for links, e.g.,
"entity_type": "workitem_link"), ensure the entity_id refers to the link
resource id (not an issue id), keep "version":"v2" and valid UUIDs for
delivery_id/event_id/webhook_id, and remove the non-dot-notation enum reference
so the JSON matches the documented v2 schema.

@danciaclara
danciaclara merged commit 59ed1f4 into master Jul 23, 2026
5 checks passed
@danciaclara
danciaclara deleted the update-webhooks branch July 23, 2026 11:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants