---
updatedAt: 2026-03-06T12:20:29.000Z
---

Fetch the complete documentation index at: https://developer.productboard.com/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# Delete webhook subscription

Permanently deletes a webhook subscription. No further notifications will be sent after deletion. **OAuth2 isolation**: returns `404` if the subscription was created by a different OAuth2 application
or by a public API access token.


# OpenAPI definition

```json
{
  "openapi": "3.1.1",
  "info": {
    "title": "Webhooks",
    "description": "Manages webhook subscriptions. Subscribe to entity change events and receive\nreal-time notifications at your endpoint.\n",
    "version": "2.0.0",
    "contact": {
      "name": "Productboard Support",
      "url": "https://support.productboard.com",
      "email": "support@productboard.com"
    },
    "license": {
      "name": "Proprietary",
      "url": "https://www.productboard.com/terms"
    }
  },
  "servers": [
    {
      "url": "https://api.productboard.com/v2",
      "description": "Production server"
    }
  ],
  "security": [
    {
      "BearerAuth": []
    },
    {
      "OAuth2": [
        "entities:read",
        "write:entities",
        "entities:delete"
      ]
    }
  ],
  "tags": [
    {
      "name": "webhooks",
      "description": "Operations for managing webhook subscriptions."
    }
  ],
  "paths": {
    "/webhooks/{webhookId}": {
      "delete": {
        "summary": "Delete webhook subscription",
        "description": "Permanently deletes a webhook subscription. No further notifications will be sent after deletion. **OAuth2 isolation**: returns `404` if the subscription was created by a different OAuth2 application\nor by a public API access token.\n",
        "operationId": "deleteWebhook",
        "security": [
          {
            "BearerAuth": [
              "webhooks:delete"
            ]
          }
        ],
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookId"
          }
        ],
        "responses": {
          "204": {
            "description": "Subscription deleted successfully."
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "403": {
            "$ref": "#/components/responses/ForbiddenResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "408": {
            "$ref": "#/components/responses/RequestTimeoutResponse"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntityResponse"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequestsResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "WebhookId": {
        "name": "webhookId",
        "in": "path",
        "required": true,
        "description": "UUID of the webhook subscription.",
        "schema": {
          "type": "string",
          "format": "uuid",
          "example": "550e8400-e29b-41d4-a716-446655440000"
        }
      }
    },
    "schemas": {
      "ErrorSource": {
        "type": "object",
        "description": "An object containing references to the source of the error. It helps with location of the problematic field or parameter.\n",
        "properties": {
          "pointer": {
            "type": "string",
            "description": "JSON Pointer [RFC6901] to the associated entity in the request document.\n",
            "example": "/data/fields/status"
          },
          "parameter": {
            "type": "string",
            "description": "Query parameter causing the error.\nUsed when the error is related to a query parameter rather than request body.\n",
            "example": "pageCursor"
          }
        }
      },
      "Error": {
        "type": "object",
        "description": "Individual error object containing the details and context.\n",
        "required": [
          "code",
          "title",
          "detail"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "A unique, machine-readable and stable code that identifies this error.\nMust be consistent across all services and provide clear categorization.\nFormat: `category.subcategory.specificError`\n",
            "examples": [
              "auth.accessDenied",
              "resource.notFound"
            ]
          },
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem that doesn't change\nfrom occurrence to occurrence of the problem. Should provide immediate\nunderstanding of the error type.\n",
            "maxLength": 255,
            "example": "Missing required field"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem.\nMay include suggestions for resolution but should not expose sensitive information.\n",
            "maxLength": 1000,
            "example": "Field 'status' is required."
          },
          "source": {
            "$ref": "#/components/schemas/ErrorSource"
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "description": "Standard error response structure.\n",
        "required": [
          "id",
          "errors"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "A unique identifier for this specific occurrence of the problem.\nIt carries unique request/response ID which allows client\nand server to reference the exact instance of the error\nin logs or support communication.\n"
          },
          "errors": {
            "type": "array",
            "description": "Array of error objects, multiple errors can be returned.",
            "items": {
              "$ref": "#/components/schemas/Error"
            },
            "minItems": 1
          }
        }
      }
    },
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "API token authentication. Use your API token as the value of the Authorization header"
      },
      "OAuth2": {
        "type": "oauth2",
        "description": "OAuth 2.0 authentication. Use this for user-authorized access to Productboard API.",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://app.productboard.com/oauth/authorize",
            "tokenUrl": "https://app.productboard.com/oauth/token",
            "scopes": {
              "entities:read": "Read access to entities (features, components, initiatives, etc.)",
              "write:entities": "Write access to create and modify entities",
              "entities:delete": "Delete entities"
            }
          }
        }
      }
    },
    "responses": {
      "BadRequestResponse": {
        "description": "Bad Request - Invalid input format or malformed request",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "examples": {
              "schemaInvalid": {
                "summary": "Request does not satisfy schema",
                "value": {
                  "id": "req-1234567890",
                  "errors": [
                    {
                      "code": "request.invalid",
                      "title": "Request schema invalid",
                      "detail": "The request does not satisfy the required schema. Field 'type' is required but was not provided.",
                      "source": {
                        "pointer": "/data/type"
                      }
                    }
                  ]
                }
              },
              "fieldInvalid": {
                "summary": "Invalid field value type",
                "value": {
                  "id": "req-1234567891",
                  "errors": [
                    {
                      "code": "request.invalid",
                      "title": "Request schema invalid",
                      "detail": "Field 'fields/name' must be a string with maximum length of 255 characters, but received a number.",
                      "source": {
                        "pointer": "/data/fields/name"
                      }
                    }
                  ]
                }
              },
              "malformedJson": {
                "summary": "Malformed JSON syntax",
                "value": {
                  "id": "req-1234567892",
                  "errors": [
                    {
                      "code": "request.malformed",
                      "title": "Request malformed",
                      "detail": "The request body contains invalid JSON syntax. Expected ',' or '}' at line 5, column 12."
                    }
                  ]
                }
              },
              "invalidContentType": {
                "summary": "Invalid content type",
                "value": {
                  "id": "req-1234567893",
                  "errors": [
                    {
                      "code": "request.malformed",
                      "title": "Request malformed",
                      "detail": "The Content-Type header must be 'application/json'. Received 'text/plain'."
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "UnauthorizedResponse": {
        "description": "Unauthorized - Missing or invalid authentication credentials",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "examples": {
              "missingCredentials": {
                "summary": "Missing authentication credentials",
                "value": {
                  "id": "req-2234567890",
                  "errors": [
                    {
                      "code": "auth.invalid",
                      "title": "Invalid authentication",
                      "detail": "Authentication credentials are missing."
                    }
                  ]
                }
              },
              "invalidToken": {
                "summary": "Invalid or expired token",
                "value": {
                  "id": "req-2234567891",
                  "errors": [
                    {
                      "code": "auth.invalid",
                      "title": "Invalid authentication",
                      "detail": "The provided authentication credentials are invalid or have expired. Please obtain new credentials and try again."
                    }
                  ]
                }
              },
              "revokedCredentials": {
                "summary": "Revoked credentials",
                "value": {
                  "id": "req-2234567892",
                  "errors": [
                    {
                      "code": "auth.invalid",
                      "title": "Invalid authentication",
                      "detail": "The authentication credentials have been revoked. Please contact your workspace administrator."
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "ForbiddenResponse": {
        "description": "Forbidden - Insufficient permissions",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "examples": {
              "permissionDenied": {
                "summary": "Permission denied for resource",
                "value": {
                  "id": "req-3234567890",
                  "errors": [
                    {
                      "code": "auth.accessDenied",
                      "title": "Access denied",
                      "detail": "You do not have permission to perform this operation on the specified resource. Contact your workspace administrator to request access."
                    }
                  ]
                }
              },
              "insufficientScope": {
                "summary": "Insufficient OAuth scopes",
                "value": {
                  "id": "req-3234567891",
                  "errors": [
                    {
                      "code": "auth.accessDenied",
                      "title": "Access denied",
                      "detail": "Your authentication token lacks the required OAuth scopes to perform this operation. Please re-authenticate with the necessary scopes."
                    }
                  ]
                }
              },
              "readOnlyRole": {
                "summary": "Read-only role restriction",
                "value": {
                  "id": "req-3234567892",
                  "errors": [
                    {
                      "code": "auth.accessDenied",
                      "title": "Access denied",
                      "detail": "Your user role does not permit this operation. Please contact your workspace administrator."
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "RequestTimeoutResponse": {
        "description": "Request Timeout - The server did not receive a complete request within the allowed time",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "examples": {
              "requestTimeout": {
                "summary": "Request timeout",
                "value": {
                  "id": "req-5234567890",
                  "errors": [
                    {
                      "code": "request.timeout",
                      "title": "Request timeout",
                      "detail": "The request took too long to process and was terminated. Try simplifying your request or try again later."
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "TooManyRequestsResponse": {
        "description": "Too Many Requests - API rate limit exceeded, reduce request frequency and retry after the indicated time",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "examples": {
              "rateLimitExceeded": {
                "summary": "Rate limit exceeded",
                "value": {
                  "id": "req-7234567890",
                  "errors": [
                    {
                      "code": "rate.limitExceeded",
                      "title": "Rate limit exceeded",
                      "detail": "You have exceeded the allowed number of API requests. Please wait before making additional requests."
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "InternalServerErrorResponse": {
        "description": "Internal Server Error - An unexpected error occurred on the server, please retry or contact support",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "examples": {
              "internalServerError": {
                "summary": "Unexpected server error",
                "value": {
                  "id": "req-8234567890",
                  "errors": [
                    {
                      "code": "internal.serverError",
                      "title": "Internal server error",
                      "detail": "An unexpected error occurred while processing your request. Please try again later. If the problem persists, contact support with the correlation ID."
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "UnprocessableEntityResponse": {
        "description": "Unprocessable Entity - Validation failed (e.g., missing required fields, unknown fields)",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "examples": {
              "validationFailed": {
                "summary": "Validation failed",
                "value": {
                  "id": "req-6234567890",
                  "errors": [
                    {
                      "code": "validation.failed",
                      "title": "Validation failed",
                      "detail": "One or more fields failed validation.",
                      "source": {
                        "pointer": "/data/type"
                      }
                    }
                  ]
                }
              },
              "validationMultipleFields": {
                "summary": "Multiple validation errors",
                "value": {
                  "id": "req-6234567891",
                  "errors": [
                    {
                      "code": "validation.failed",
                      "title": "Validation failed",
                      "detail": "The field 'name' cannot be empty.",
                      "source": {
                        "pointer": "/data/fields/name"
                      }
                    },
                    {
                      "code": "validation.failed",
                      "title": "Validation failed",
                      "detail": "The field 'type' has an unsupported value.",
                      "source": {
                        "pointer": "/data/fields/type"
                      }
                    }
                  ]
                }
              },
              "referenceNotFound": {
                "summary": "Referenced resource not found",
                "value": {
                  "id": "req-6234567892",
                  "errors": [
                    {
                      "code": "validation.referenceNotFound",
                      "title": "Referenced resource not found",
                      "detail": "The referenced resource could not be found or you do not have access to it.",
                      "source": {
                        "pointer": "/data/fields/id"
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "NotFoundResponse": {
        "description": "Not Found - The requested resource does not exist or is not accessible",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "examples": {
              "resourceNotFoundById": {
                "summary": "Resource not found by ID",
                "value": {
                  "id": "req-4234567890",
                  "errors": [
                    {
                      "code": "resource.notFound",
                      "title": "Resource not found",
                      "detail": "The requested resource could not be found or you do not have permission to access it."
                    }
                  ]
                }
              },
              "routeNotFound": {
                "summary": "API route not found",
                "value": {
                  "id": "req-4234567893",
                  "errors": [
                    {
                      "code": "route.notFound",
                      "title": "Route not found",
                      "detail": "The requested URL path does not match any defined API route. Please check the API documentation for valid endpoints."
                    }
                  ]
                }
              }
            }
          }
        }
      }
    }
  },
  "x-readme": {
    "samples-languages": [
      "shell",
      "javascript",
      "ruby"
    ]
  }
}
```