> Note: This page is part of the DataDoe Docs. You can find the root of the documentation at `https://www.datadoe.com/hub/docs/basics/introduction-to-datadoe`.
> JSON Table of Contents: `https://www.datadoe.com/hub/docs/toc.json`.
> Data Scheme (Markdown index, one page per table): https://api.datadoe.com/api/v1/spec/data-scheme.md. Full JSON: https://api.datadoe.com/api/v1/spec/data-scheme.
> Actions (Markdown, every Action type with limits and group guides): https://api.datadoe.com/api/v1/spec/action-scheme.md. Full JSON with input schemas: https://api.datadoe.com/api/v1/spec/action-scheme.
> Other pages in the DataDoe Docs:
> - DataDoe Basics/Benefits: `https://www.datadoe.com/hub/docs/basics/benefits.md`
> - DataDoe Basics/Connecting Accounts: `https://www.datadoe.com/hub/docs/basics/connecting-accounts.md`
> - DataDoe Basics/External Invitation Links: `https://www.datadoe.com/hub/docs/basics/external-invitation-links.md`
> - DataDoe Basics/Groups: `https://www.datadoe.com/hub/docs/basics/groups.md`
> - DataDoe Basics/Integrations: `https://www.datadoe.com/hub/docs/basics/integration-customization.md`
> - DataDoe Basics/Introduction to DataDoe: `https://www.datadoe.com/hub/docs/basics/introduction-to-datadoe.md`
> - DataDoe Basics/Keys and service accounts: `https://www.datadoe.com/hub/docs/basics/keys-and-service-accounts.md`
> - DataDoe Basics/Roles and permissions: `https://www.datadoe.com/hub/docs/basics/roles-and-permissions.md`
> - DataDoe Basics/Subscription and pricing: `https://www.datadoe.com/hub/docs/basics/subscription-pricing.md`
> - DataDoe Basics/Users and access: `https://www.datadoe.com/hub/docs/basics/access-user-management.md`
> - DataDoe Data/Ads Product Catalog: `https://www.datadoe.com/hub/docs/datadoe-data/ads-product-catalog.md`
> - DataDoe Data/Amazon Ads Partner Opportunities: `https://www.datadoe.com/hub/docs/datadoe-data/amazon-ads-partner-opportunities.md`
> - DataDoe Data/Data Fetch Periods: `https://www.datadoe.com/hub/docs/datadoe-data/data-fetch-periods.md`
> - DataDoe Data/Data Sources: `https://www.datadoe.com/hub/docs/datadoe-data/data-sources.md`
> - DataDoe Data/Initial Loads: `https://www.datadoe.com/hub/docs/datadoe-data/initial-loads.md`
> - DataDoe Data/Managing Data Tables: `https://www.datadoe.com/hub/docs/datadoe-data/managing-data-tables.md`
> - DataDoe Data/Migrating from SellerBoard: `https://www.datadoe.com/hub/docs/datadoe-data/migrating-from-sellerboard.md`
> - DataDoe Data/SAT migration to profit tables: `https://www.datadoe.com/hub/docs/datadoe-data/sat-migration-to-profit-tables.md`
> - DataDoe Data/SQP Data: `https://www.datadoe.com/hub/docs/datadoe-data/search-query-performance.md`
> - DataDoe Data/Timezones: `https://www.datadoe.com/hub/docs/datadoe-data/orders-purchase-date-timezones.md`
> - DataDoe Data/Uploading COGS: `https://www.datadoe.com/hub/docs/datadoe-data/uploading-cogs.md`
> - DataDoe Data/Uploading KDP Royalty Parameters: `https://www.datadoe.com/hub/docs/datadoe-data/uploading-kdp-royalty-parameters.md`
> - DataDoe Data/Uploading Vendor Codes: `https://www.datadoe.com/hub/docs/datadoe-data/uploading-vendor-codes.md`
> - DataDoe Features/Amazon Marketing Cloud: `https://www.datadoe.com/hub/docs/datadoe-features/amc.md`
> - DataDoe Features/AMC query templates: `https://www.datadoe.com/hub/docs/datadoe-features/amc-query-templates.md`
> - DataDoe Features/Features Overview: `https://www.datadoe.com/hub/docs/datadoe-features/overview.md`
> - DataDoe Features/Files: `https://www.datadoe.com/hub/docs/datadoe-features/files.md`
> - DataDoe Features/Plugins: `https://www.datadoe.com/hub/docs/datadoe-features/plugins.md`
> - DataDoe Features/Usage Logs: `https://www.datadoe.com/hub/docs/datadoe-features/usage-logs.md`
> - DataDoe Actions/Actions: External Fulfillment: `https://www.datadoe.com/hub/docs/datadoe-actions/external-fulfillment.md`
> - DataDoe Actions/Actions: FBA eligibility: `https://www.datadoe.com/hub/docs/datadoe-actions/fba-eligibility.md`
> - DataDoe Actions/Actions: FBA inbound: `https://www.datadoe.com/hub/docs/datadoe-actions/fba-inbound.md`
> - DataDoe Actions/Actions: Introduction: `https://www.datadoe.com/hub/docs/datadoe-actions/introduction.md`
> - DataDoe Actions/Actions: KDP authors: `https://www.datadoe.com/hub/docs/datadoe-actions/kdp-authors.md`
> - DataDoe Actions/Actions: Listing images: `https://www.datadoe.com/hub/docs/datadoe-actions/listing-images.md`
> - DataDoe Webhooks/Webhooks: Business: `https://www.datadoe.com/hub/docs/datadoe-webhooks/business.md`
> - DataDoe Webhooks/Webhooks: Introduction: `https://www.datadoe.com/hub/docs/datadoe-webhooks/introduction.md`
> - DataDoe MCP/Overview: `https://www.datadoe.com/hub/docs/datadoe-mcp/overview.md`
> - DataDoe MCP/Using Antigravity: `https://www.datadoe.com/hub/docs/datadoe-mcp/antigravity.md`
> - DataDoe MCP/Using ChatGPT: `https://www.datadoe.com/hub/docs/datadoe-mcp/chatgpt.md`
> - DataDoe MCP/Using Claude: `https://www.datadoe.com/hub/docs/datadoe-mcp/claude.md`
> - DataDoe MCP/Using Claude Agent SDK: `https://www.datadoe.com/hub/docs/datadoe-mcp/claude-agents-sdk.md`
> - DataDoe MCP/Using Claude Code: `https://www.datadoe.com/hub/docs/datadoe-mcp/claude-code.md`
> - DataDoe MCP/Using Codex: `https://www.datadoe.com/hub/docs/datadoe-mcp/codex.md`
> - DataDoe MCP/Using Codex Sites: `https://www.datadoe.com/hub/docs/datadoe-mcp/codex-sites.md`
> - DataDoe MCP/Using CrewAI: `https://www.datadoe.com/hub/docs/datadoe-mcp/crewai.md`
> - DataDoe MCP/Using Cursor: `https://www.datadoe.com/hub/docs/datadoe-mcp/cursor.md`
> - DataDoe MCP/Using Excel + Claude: `https://www.datadoe.com/hub/docs/datadoe-mcp/excel.md`
> - DataDoe MCP/Using Gemini CLI: `https://www.datadoe.com/hub/docs/datadoe-mcp/gemini-cli.md`
> - DataDoe MCP/Using Genspark: `https://www.datadoe.com/hub/docs/datadoe-mcp/genspark.md`
> - DataDoe MCP/Using Glama: `https://www.datadoe.com/hub/docs/datadoe-mcp/glama-chat.md`
> - DataDoe MCP/Using Glama MCP Inspector: `https://www.datadoe.com/hub/docs/datadoe-mcp/glama.md`
> - DataDoe MCP/Using Grok: `https://www.datadoe.com/hub/docs/datadoe-mcp/grok.md`
> - DataDoe MCP/Using GrokBot: `https://www.datadoe.com/hub/docs/datadoe-mcp/grokbot.md`
> - DataDoe MCP/Using Gumloop: `https://www.datadoe.com/hub/docs/datadoe-mcp/gumloop.md`
> - DataDoe MCP/Using Hermes Agent: `https://www.datadoe.com/hub/docs/datadoe-mcp/hermes.md`
> - DataDoe MCP/Using Littlebird: `https://www.datadoe.com/hub/docs/datadoe-mcp/littlebird.md`
> - DataDoe MCP/Using n8n: `https://www.datadoe.com/hub/docs/datadoe-mcp/n8n.md`
> - DataDoe MCP/Using NanoClaw: `https://www.datadoe.com/hub/docs/datadoe-mcp/nanoclaw.md`
> - DataDoe MCP/Using OpenAI Agents SDK: `https://www.datadoe.com/hub/docs/datadoe-mcp/openai-agents-sdk.md`
> - DataDoe MCP/Using OpenClaw: `https://www.datadoe.com/hub/docs/datadoe-mcp/openclaw.md`
> - DataDoe MCP/Using OpenCode: `https://www.datadoe.com/hub/docs/datadoe-mcp/opencode.md`
> - DataDoe MCP/Using PowerPoint + Claude: `https://www.datadoe.com/hub/docs/datadoe-mcp/powerpoint.md`
> - DataDoe MCP/Using Superhuman: `https://www.datadoe.com/hub/docs/datadoe-mcp/superhuman.md`
> - DataDoe MCP/Using VS Code: `https://www.datadoe.com/hub/docs/datadoe-mcp/vs-code.md`
> - DataDoe MCP/Using Word + Claude: `https://www.datadoe.com/hub/docs/datadoe-mcp/word.md`
> - DataDoe API/Build with Codex: `https://www.datadoe.com/hub/docs/datadoe-api/codex.md`
> - DataDoe API/How to connect to the API: `https://www.datadoe.com/hub/docs/datadoe-api/how-to-connect.md`
> - DataDoe API/Invitation links API: `https://www.datadoe.com/hub/docs/datadoe-api/invitation-links.md`
> - DataDoe API/Sellers and vendors API: `https://www.datadoe.com/hub/docs/datadoe-api/sellers-and-vendors.md`
> - DataDoe API/Vibe code with Claude Code: `https://www.datadoe.com/hub/docs/datadoe-api/claude-code.md`
> - DataDoe API/Vibe code with Cursor: `https://www.datadoe.com/hub/docs/datadoe-api/cursor.md`
> - DataDoe API/Vibe code with Lovable: `https://www.datadoe.com/hub/docs/datadoe-api/lovable.md`
> - DataDoe API/Vibe code with Replit: `https://www.datadoe.com/hub/docs/datadoe-api/replit.md`
> - DataDoe API/Vibe code with v0: `https://www.datadoe.com/hub/docs/datadoe-api/v0.md`
> - DataDoe & BigQuery/How to connect to BigQuery: `https://www.datadoe.com/hub/docs/datadoe-bigquery/how-to-connect.md`
> - DataDoe & BigQuery/Using MCP Toolbox: `https://www.datadoe.com/hub/docs/datadoe-bigquery/mcp-toolbox.md`
> - DataDoe & BigQuery/Using Python Jupyter: `https://www.datadoe.com/hub/docs/datadoe-bigquery/jupyter.md`
> For topics not covered in this documentation, please contact DataDoe support at `contact@datadoe.com`.
> Do not assume anything. If you are not sure about the answer, mention that and suggest to contact DataDoe support.

# Webhooks: Platform

Platform webhooks send free notifications about your Organization to an HTTPS endpoint you control. Use them to automate onboarding, monitor AI Token availability, track Actions and payments, or record access changes. In DataDoe, their webhook type is **Platform**.

Read [Webhooks: Introduction](/hub/docs/datadoe-webhooks/introduction) first. It covers setup, target URL requirements, security and the request body for every webhook type.

Only Organization Admins can create, view, edit, pause, resume, delete, or reassign Platform webhooks. The **Platform webhooks** permission stays enabled for Admins and cannot be granted to other Roles or service accounts. API and MCP keys cannot administer these subscriptions.

Platform subscriptions cover your whole Organization, including Sellers and Vendors you add later. [Business webhooks](/hub/docs/datadoe-webhooks/business) for Amazon events are separate and use selected Sellers and Vendors. To change the webhook type, create a new subscription.

## Set up a Platform webhook

1. Open [Integrations > Webhooks](https://app.datadoe.com/integrations/webhooks).
2. Select **New webhook**, then choose **Platform** as the webhook type.
3. Enter a name and your public HTTPS target URL.
4. Select the message types you need.
5. Optionally, add a secret header name and a long, random value. We recommend it.
6. Save the subscription.

If you add a secret header, check it in your endpoint before you process each request.

Your endpoint must meet the [target URL requirements](/hub/docs/datadoe-webhooks/introduction#what-are-the-target-url-requirements). DataDoe rejects IP addresses and `localhost` when you save. It checks DNS again before each delivery, so a hostname that resolves to a private network address fails delivery and pauses the subscription. Redirects are not followed. Platform subscriptions do not need a Seller or Vendor selection. New subscriptions receive future matching events only.

Creating a subscription requires the usual Integrations eligibility. Existing Platform subscriptions can keep delivering after a paid subscription ends or becomes delinquent, while their execution owner remains an active Organization Admin and your DataDoe access is not suspended or terminated. Admins can still manage them from [Webhooks](https://app.datadoe.com/integrations/webhooks), including through the Manage Platform webhooks link on the subscription landing page.

## Free delivery

Every Platform notification costs **0 AI Tokens**. Delivery does not use reserved tokens, token bundles, or your spending limit, and zero balance does not pause it.

An Action, query, Export, or other operation that your system starts in response retains its normal cost. [Business webhook](/hub/docs/datadoe-webhooks/business) delivery costs 0.05 AI Tokens per delivered message. See [Subscription and pricing](/hub/docs/basics/subscription-pricing).

## Event catalog

All 28 message types below have the **Platform (free)** label in the [webhook catalog](/hub/webhooks). Expand a type there to see every field and download its JSON Schema. The [machine-readable catalog](https://api.datadoe.com/api/v1/spec/webhook-scheme) includes the same contracts.

| Event                                       | Message type                                   | When it is sent                                                                       |
| ------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------- |
| Initial load phase 1 completed              | `PLATFORM_INITIAL_LOAD_PHASE_1_COMPLETED`      | Sent when every participating connection completes initial-load phase 1.              |
| Initial load phase 2 completed              | `PLATFORM_INITIAL_LOAD_PHASE_2_COMPLETED`      | Sent when every participating connection completes initial-load phase 2.              |
| Seller/vendor added                         | `PLATFORM_SELLER_OR_VENDOR_ADDED`              | Sent when a seller or vendor has been added.                                          |
| Seller/vendor edited                        | `PLATFORM_SELLER_OR_VENDOR_EDITED`             | Sent when a seller or vendor setting changes.                                         |
| Seller/vendor removed                       | `PLATFORM_SELLER_OR_VENDOR_REMOVED`            | Sent when a seller or vendor has been removed.                                        |
| Amazon connection reauthorization required  | `PLATFORM_CONNECTION_REAUTH_REQUIRED`          | Sent when an Amazon connection needs reauthorization.                                 |
| Amazon connection reauthorization succeeded | `PLATFORM_CONNECTION_REAUTH_SUCCEEDED`         | Sent when an Amazon connection has been successfully reauthorized.                    |
| 50% tokens remaining                        | `PLATFORM_TOKEN_BALANCE_50_PERCENT_REMAINING`  | Sent when available AI Tokens fall to 50% or less of capacity.                        |
| 30% tokens remaining                        | `PLATFORM_TOKEN_BALANCE_30_PERCENT_REMAINING`  | Sent when available AI Tokens fall to 30% or less of capacity.                        |
| 10% tokens remaining                        | `PLATFORM_TOKEN_BALANCE_10_PERCENT_REMAINING`  | Sent when available AI Tokens fall to 10% or less of capacity.                        |
| No tokens remaining                         | `PLATFORM_TOKEN_BALANCE_EXHAUSTED`             | Sent when no spendable AI Tokens remain.                                              |
| Token balance replenished                   | `PLATFORM_TOKEN_BALANCE_REPLENISHED`           | Sent when funding, a plan reset or a spending-limit increase adds spendable capacity. |
| Webhook subscription paused                 | `PLATFORM_WEBHOOK_SUBSCRIPTION_PAUSED`         | Sent when an active webhook subscription is paused.                                   |
| Webhook subscription resumed                | `PLATFORM_WEBHOOK_SUBSCRIPTION_RESUMED`        | Sent when a paused webhook subscription is resumed.                                   |
| Action completed                            | `PLATFORM_ACTION_COMPLETED`                    | Sent when an Action completes, including completion with warnings only.               |
| Action partially completed                  | `PLATFORM_ACTION_PARTIALLY_COMPLETED`          | Sent when an Action completes with a mix of successful and failed or partial items.   |
| Action failed                               | `PLATFORM_ACTION_FAILED`                       | Sent when an Action ends in an error or a terminal invalid-input state.               |
| Payment failed                              | `PLATFORM_PAYMENT_FAILED`                      | Sent when a verified payment obligation first fails.                                  |
| Payment recovered                           | `PLATFORM_PAYMENT_RECOVERED`                   | Sent when the same previously failed payment obligation is paid.                      |
| Subscription changed                        | `PLATFORM_SUBSCRIPTION_CHANGED`                | Sent when effective subscription settings or access change.                           |
| Subscription cancellation scheduled         | `PLATFORM_SUBSCRIPTION_CANCELLATION_SCHEDULED` | Sent when cancellation is scheduled or its effective time changes.                    |
| Subscription ended                          | `PLATFORM_SUBSCRIPTION_ENDED`                  | Sent when a subscription ends.                                                        |
| User permissions changed                    | `PLATFORM_USER_PERMISSIONS_CHANGED`            | Sent when a user's effective permissions or resource access change.                   |
| API key created                             | `PLATFORM_API_KEY_CREATED`                     | Sent when a usable API key is created.                                                |
| API key revoked                             | `PLATFORM_API_KEY_REVOKED`                     | Sent when a usable API key is deactivated, revoked or deleted.                        |
| MCP key created                             | `PLATFORM_MCP_KEY_CREATED`                     | Sent when a usable MCP key is created.                                                |
| MCP key revoked                             | `PLATFORM_MCP_KEY_REVOKED`                     | Sent when a usable MCP key is deactivated, revoked or deleted.                        |
| MCP OAuth authorization completed           | `PLATFORM_MCP_OAUTH_AUTHORIZATION_COMPLETED`   | Sent when a new MCP OAuth authorization first issues usable access.                   |

### Initial load and account changes

Initial-load notifications describe the seller or vendor account, rather than each underlying connection. They cover the participating Seller Central, Vendor Central, and Amazon Ads sources used by the account's initial-load phases. They do not claim that Amazon Ads DSP or Amazon Marketing Cloud has completed.

A phase completes when all participating sources reach it. An account with no participating sources has no completion event. Connecting or replacing a participating source starts a new load generation. Removing a source can complete an outstanding phase without repeating a phase already completed in that generation. Routine refreshes and temporary readiness changes do not start another generation.

Reauthorization events describe explicit Amazon connection authorization. Refreshing an access token does not produce a reauthorization success event. Shared connections can produce one contextual message per affected account, with the same operation identifiers.

An edited-account event includes only the names of changed AI instruction or file fields, never their contents. Removed-account events retain a safe account snapshot even though that account can no longer be retrieved.

### Tokens and replenishment

The four downward alerts fire at **50%**, **30%**, **10%**, and **0** spendable tokens. Repeated consumption below a threshold does not repeat its alert. Availability rising above that threshold arms it again. One balance change can cross several thresholds and produce several messages.

The balance includes your plan, unexpired purchased bundles, and token capacity available through your spending limit. Reservations reduce spendable availability. Committing a reservation does not deduct that availability twice.

The calculation uses the unrounded token amounts:

```text
available = max(0,
  plan.remaining - plan.reserved
  + bundles.remaining - bundles.reserved
  + max(0, spendingLimit.tokenCapacity - spendingLimit.used - spendingLimit.reserved))
capacity = plan.limit + bundles.capacity + spendingLimit.tokenCapacity
remainingPercent = clamp(100 * available / capacity, 0, 100)
```

When capacity is zero, `remainingPercent` is `null`. Exhaustion still means that spendable availability reached zero. Bundle capacity includes exhausted bundles until they expire, so spending a bundle's last token does not shrink the percentage denominator. Spending-limit capacity is converted to tokens, not treated as a currency amount.

Replenishment reports an actual increase in availability after a renewal, reset, plan change, bundle credit, spending-limit increase, credit, or adjustment. A successful payment alone is not replenishment until tokens are available. Releasing a reservation can arm an alert again but is not a replenishment event. Demo balances do not generate token alerts.

A new subscription does not receive old low-balance alerts. Replenishment never automatically resumes Amazon webhooks that paused for low tokens.

### Actions, billing, access, and credentials

Action events describe a stored terminal outcome. Queued, waiting, token-blocked, canceled, and unstored dry-run Actions do not produce these outcome notifications. The payload preserves the Action's status and distinguishes warning-only completion from partial success. It contains safe counts and identifiers, not raw requests, provider responses, or buyer information.

A failed-payment event identifies one confirmed payment obligation. Recovery refers to payment of that same obligation, not another successful purchase. Subscription changes report effective changes rather than identical refreshes. Scheduling cancellation does not mean the subscription has ended. A specific cancellation or end event can accompany a subscription-changed event from the same operation.

Permission events describe effective access changes for each affected user. Large changes have several parts. Collect every part for the `changeId` before applying it. If a part is missing, or you detect a version gap, refresh access state through an authorized DataDoe interface.

Key events contain safe metadata only. Natural key expiry is not a revocation event. MCP OAuth completion means a successful first authorization-code exchange for a new authorization, including the granted scopes. Unused consent codes and token refreshes do not produce it.

## Delivery envelope

Each HTTP POST contains one Platform message in the `messages` array. Each matching subscription receives its own delivery attempt.

This synthetic example reports an API key creation:

```json
{
    "deliveryId": "11111111-1111-4111-8111-111111111111",
    "organizationId": "22222222-2222-4222-8222-222222222222",
    "webhookId": "33333333-3333-4333-8333-333333333333",
    "messages": [
        {
            "organizationId": "22222222-2222-4222-8222-222222222222",
            "sellerOrVendorId": null,
            "messageId": "44444444-4444-4444-8444-444444444444",
            "messageType": "PLATFORM_API_KEY_CREATED",
            "messageSummary": {
                "schemaVersion": 1,
                "category": "PLATFORM",
                "occurredAt": "2026-11-11T10:00:00.000Z",
                "subjectType": "API_KEY",
                "subjectId": "55555555-5555-4555-8555-555555555555",
                "subjectVersion": "1",
                "correlationId": "66666666-6666-4666-8666-666666666666",
                "actor": { "type": "USER", "id": "77777777-7777-4777-8777-777777777777" }
            },
            "messageData": {
                "key": {
                    "keyId": "55555555-5555-4555-8555-555555555555",
                    "keyType": "API",
                    "name": "Example automation",
                    "owner": { "type": "USER", "id": "77777777-7777-4777-8777-777777777777" },
                    "createdAt": "2026-11-11T10:00:00.000Z",
                    "expiresAt": "2027-11-11T10:00:00.000Z"
                }
            }
        }
    ]
}
```

`webhookId` identifies the receiving subscription. For pause or resume events, the subject webhook in `messageData` can be another subscription.

Account, initial-load, connection, and Action events have the affected account's UUID in `sellerOrVendorId`. Organization events use `null`. The subject ID identifies the account, connection, Action, payment failure, subscription, user, key, authorization, or token-balance Organization described by the event.

For example, a synthetic pause payload can contain:

```json
{
    "webhook": {
        "id": "33333333-3333-4333-8333-333333333333",
        "name": "Example endpoint",
        "kind": "PLATFORM"
    },
    "previousStatus": "ACTIVE",
    "status": "PAUSED",
    "reason": "DELIVERY_FAILED",
    "changedAt": "2026-11-11T10:00:00.000Z",
    "httpStatusCode": 503
}
```

The Platform contracts use explicit allowed fields. They exclude credentials, OAuth codes and tokens, key values and hashes, payment-card details, and buyer information.

## Event timing and duplicate handling

Events describe successful completed changes. Their `occurredAt` records when that change occurred. Initial-load, payment, and asynchronous Action events follow the confirmed state, rather than the start of a request. Arrival is asynchronous and has no global ordering guarantee.

Use `messageId` to deduplicate messages. It stays the same if a message is delivered again. `deliveryId` changes for each HTTP attempt. A request accepted by your endpoint can be delivered again if its success could not be recorded, so delivery is not exactly once.

`subjectVersion` is a decimal integer encoded as a string. It orders snapshots for the same Organization, subject type, and subject ID. Several event types or permission-change parts from one operation can share that version. Process each event type, even when it shares a version with another type. Collect every permission-change part for its `changeId` before applying that change. Use `correlationId` to associate events from the same operation.

## Pausing, resuming, and delivery limits

A non-2xx response, a timeout after 30 seconds, or a network failure records a failure and pauses that subscription. DataDoe emails the active Organization Admins. Recorded HTTP failures are not automatically retried or replayed. Delivery is not guaranteed while your endpoint is unavailable.

Return a successful 2xx response promptly and process the accepted message separately. Check the secret header before accepting it.

Manual pauses and loss of the execution owner's Admin membership stop future delivery. DataDoe does not send an email when the owner loses Admin membership. Another Admin can choose an active Admin in **Run as** and resume the subscription. Resuming starts future delivery and does not replay canceled messages.

Pending deliveries are canceled if the subscription is deleted or paused, its target, secret, owner, or delivery settings changes, or the event's message type is removed. Renaming the subscription or adding unrelated message types does not cancel pending events. Delivery logs show the cancellation reason.

A paused webhook cannot receive its own pause notification. Other active Platform subscriptions can receive it. A resumed webhook can receive its resume event if it subscribes to that type. Repeating a command that leaves the status unchanged does not produce another transition event.

Organization deletion stops all deliveries. See [Roles and permissions](/hub/docs/basics/roles-and-permissions) for access management.
