Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .optimize-cache.json
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,7 @@
"images/blog/announcing-timestamp-overrides/cover.png": "5bfc2ba16b8ca4a82188c0f67b300ed0a7f38b4abc04b06a10ee52b2832fa65b",
"images/blog/announcing-transactions-api/cover.png": "604a7721b7bf0a752460a721ffcaff10598abc5f398e7b16a8a58195c2ebf7ea",
"images/blog/announcing-user-impersonation/cover.png": "0d637f5d3a748e033945741a9e926a001b84c51854077ac5de4fedbc8801a40a",
"images/blog/announcing-webhooks-api/cover.png": "a029dca7fc776d3d81ec0502a8fe3fb0d3e170e474a515b4ad9d61c9854ca745",
"images/blog/apply-appwrite-how/cover.png": "d23f45ced245b42c8712c021f5d2068c17aebd94fd049cb90222cb9647a41a4a",
"images/blog/appwrite-1-8-0-self-hosted-release/cover.png": "c15a9d88ccd16c2dc8333dc74e715e1f4a6c7818d3b4a05f4d68342eacdc0523",
"images/blog/appwrite-1-8-1-self-hosted-release/cover.png": "82f0a396c56b6b299b24133079acc6a317c66b2bf02fd91f4862bd3be0f8f373",
Expand Down Expand Up @@ -1400,8 +1401,10 @@
"images/docs/network/regions-map.png": "c65f1423ab19c3048bf8bf93117e8f2e1d13a2bc705c00307de7ee821e5668a1",
"images/docs/platform/add-platform.png": "5a05bb9d75a8d5270bfa5e67df7e6de20a9fad174476a112b5bdab72e7bdad30",
"images/docs/platform/create-api-key.png": "36a80b363e6ba8ebd271e830a3b2d0bc766b2ec3e7d46ff481516f1e50ea5b7d",
"images/docs/platform/create-webhook.png": "77e08173da6ac534524e025433cf75e532d853a135944a7c6ba2278357d88b2d",
"images/docs/platform/dark/add-platform.png": "1bb0e7dba22556e64064951882d625532285fa80bed43fd77774f31545a15b0f",
"images/docs/platform/dark/create-api-key.png": "dbc3ce919f849d09ef7789676d00e954bf364b9b23126b551767b86891c83fb2",
"images/docs/platform/dark/create-webhook.png": "88f7f5c857fe986b5803c7df003c4db55faa79e3fa3135cf9491073d0b2736be",
"images/docs/platform/dark/execution-details.png": "c0481ddc206447460f9d317ba8d421615066f67a50bc9ef41a8f71766ecffb14",
"images/docs/platform/execution-details.png": "ece1364b8b00254bbd982421b6eed6d7f519d34c4e80377fcaaa4cb5d5dd3f89",
"images/docs/quick-starts/add-platform.png": "3b13ba983ea1d2529a1f34a719acef903ec0b58879ed511012280a28ccbde17e",
Expand Down
98 changes: 98 additions & 0 deletions src/routes/blog/post/announcing-webhooks-api/+page.markdoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
---
layout: post
title: "Announcing the Webhooks API: Manage webhooks programmatically with Server SDKs"
description: Webhooks are no longer console-only. Create, update, and delete webhooks using the Appwrite Server SDKs and API keys with the new webhooks.read and webhooks.write scopes.
date: 2026-04-10
cover: /images/blog/announcing-webhooks-api/cover.png
timeToRead: 4
author: matej-baco
category: announcement
featured: false
callToAction: true
---

Webhooks have always been a core part of how developers integrate Appwrite into their workflows. Subscribe to an event, receive an HTTP POST, and let your server handle the rest. Until now, managing those webhooks meant logging into the Appwrite Console and configuring them by hand.

Today, we are announcing the **Webhooks API**, a fully programmable interface for managing webhooks through Server SDKs and API keys.

# Why this matters

If you have ever needed to set up webhooks across multiple projects, automate webhook provisioning as part of a deployment pipeline, or manage webhook lifecycles from code, you know the friction of doing it through a UI.

The Webhooks API removes that friction entirely. Webhooks become just another resource you can create, update, and delete programmatically, the same way you already manage databases, functions, and storage buckets.

This is especially valuable for:

- **CI/CD pipelines** that need to register webhooks as part of environment setup
Comment thread
Meldiron marked this conversation as resolved.
- **Multi-tenant platforms** that provision webhooks per customer or workspace
- **Migration and seeding scripts** that replicate webhook configurations across environments
- **Admin dashboards** that let non-technical team members manage webhooks without Console access

# How it works
Comment thread
atharvadeosthale marked this conversation as resolved.

The Webhooks API introduces two new [API key scopes](/docs/advanced/platform/api-keys#scopes):

- **`webhooks.read`** for listing and retrieving webhooks
- **`webhooks.write`** for creating, updating, and deleting webhooks

Once your API key has the appropriate scopes, you can manage webhooks through any Appwrite Server SDK.

## Create a webhook
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Might be worth having some more examples:

  • showcase of ability to set httpUser and httpPass
  • showcase ability to list webhooks (filter, paginate, maybe)
  • Ability to rotate signature key

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

It might be better to have a separate blog on this showcasing a real-world use-case

cc @atharvadeosthale


```server-nodejs
const sdk = require('node-appwrite');
Comment thread
atharvadeosthale marked this conversation as resolved.
Outdated

const client = new sdk.Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1')
.setProject('<PROJECT_ID>')
.setKey('<YOUR_API_KEY>');

const webhooks = new sdk.Webhooks(client);

const result = await webhooks.create({
webhookId: sdk.ID.unique(),
url: 'https://example.com/webhook',
name: 'My Webhook',
events: ['users.*.create', 'users.*.update'],
security: true
});
Comment thread
atharvadeosthale marked this conversation as resolved.
```

## Update a webhook

```server-nodejs
const result = await webhooks.update({
webhookId: '<WEBHOOK_ID>',
name: 'Updated Webhook',
url: 'https://example.com/webhook-v2',
events: ['users.*.create', 'users.*.update', 'users.*.delete'],
security: true
});
```

## Delete a webhook

```server-nodejs
await webhooks.delete({
webhookId: '<WEBHOOK_ID>'
});
```

Comment thread
atharvadeosthale marked this conversation as resolved.
The API supports all the same configuration options available in the Console, including event selection, SSL/TLS certificate verification, and HTTP basic authentication.

# Get started

The Webhooks API is available on **Appwrite Cloud** today.

1. Navigate to **Overview** > **Integration** > **API keys** and create or update an API key with the `webhooks.read` and `webhooks.write` scopes.
2. Initialize a Server SDK with your API key.
3. Use the `Webhooks` service to manage your webhooks from code.
Comment on lines +587 to +593
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not sure if this makes sense after the code examples


Full documentation, including examples for all supported SDKs, is available on the [webhooks documentation page](/docs/advanced/platform/webhooks).

# Resources

- [Webhooks documentation](/docs/advanced/platform/webhooks)
- [API keys and scopes](/docs/advanced/platform/api-keys)
- [Webhook events reference](/docs/advanced/platform/events)
- [Appwrite Webhooks: triggering events the right way](/blog/post/appwrite-webhooks)
14 changes: 14 additions & 0 deletions src/routes/changelog/(entries)/2026-04-10.markdoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
layout: changelog
title: "Webhooks API: manage webhooks with Server SDKs"
date: 2026-04-10
Comment thread
atharvadeosthale marked this conversation as resolved.
cover: /images/blog/announcing-webhooks-api/cover.png
---

Webhooks can now be created, updated, and deleted programmatically using the Appwrite Server SDKs. Two new API key scopes, `webhooks.read` and `webhooks.write`, control access to the new endpoints.

This makes it possible to provision webhooks as part of CI/CD pipelines, migration scripts, or any workflow where managing webhooks through the Console is not practical.

{% arrow_link href="/blog/post/announcing-webhooks-api" %}
Read the announcement
{% /arrow_link %}
2 changes: 2 additions & 0 deletions src/routes/docs/advanced/platform/api-keys/+page.markdoc
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,8 @@ If you need to replace your API Key, create a new key, update your app credentia
| `subscribers.write` | Access to create, update, and delete your project's subscribers |
| `targets.read` | Access to read your project's targets |
| `targets.write` | Access to create, update, and delete your project's targets |
| `webhooks.read` | Access to read your project's webhooks |
| `webhooks.write` | Access to create, update, and delete your project's webhooks |
| `rules.read` | Access to read your project's proxy rules |
| `rules.write` | Access to create, update, and delete your project's proxy rules |
| `migrations.read` | Access to read your project's migrations |
Expand Down
Loading
Loading