Update a feedback post
Patch any combination of fields on an existing feedback post — only present fields are applied.
Updates a feedback post. The endpoint is patch-style: any subset of the optional body fields may be present, and only those fields are applied. Omitted fields keep their current values.
Status changes (passing status_id) emit a post.status_changed webhook event in addition to post.edited. Tag changes (passing tag_ids) emit post.tag_added or post.tag_removed per tag delta.
Endpoint
POST https://api.productbridge.io/api/external/v1/feedback-posts/update
Arguments
Your organization's public API key. See Authentication.
UUID of the feedback post to update.
UUID of the user performing the update. Recorded for audit and used as the actor on derived events (e.g. post.status_changed).
New title (1–512 chars). Triggers post.edited webhook.
New body / description.
Move the post to a different feedback board. Validated to belong to your organization.
Set the post's status. Validated to belong to your organization. Triggers post.status_changed webhook.
Set the post's category. Validated to belong to your organization. Pass an empty / null value to clear.
Replace the post's tags with this exact set. Tags not in the new set are removed (post.tag_removed per tag); new tags are added (post.tag_added per tag).
Assign an owner. Pass null/empty to clear.
Expected ship date as YYYY-MM-DD.
Override the moderation state. Common values: "accepted", "pending", "rejected".
Canny-compatible field for status changes. Currently informational — ProductBridge always emits notifications when status changes.
Canny-compatible field for status changes. Currently informational only.
Returns
{ "success": true }
Example request
curl -X POST https://api.productbridge.io/api/external/v1/feedback-posts/update \
-H 'Content-Type: application/json' \
-d '{
"api_key": "pb_YOUR_PUBLIC_API_KEY",
"post_id": "aa3c3ef8-b8cd-cd15-01ba-postpost0001",
"user_id": "cc3c3ef8-b8cd-cd15-01ba-adminuser001",
"status_id": "883c3ef8-b8cd-cd15-01ba-status000002",
"eta": "2026-09-01"
}'
const res = await fetch(
"https://api.productbridge.io/api/external/v1/feedback-posts/update",
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
api_key: process.env.PRODUCTBRIDGE_API_KEY,
post_id: "aa3c3ef8-b8cd-cd15-01ba-postpost0001",
user_id: "cc3c3ef8-b8cd-cd15-01ba-adminuser001",
status_id: "883c3ef8-b8cd-cd15-01ba-status000002",
eta: "2026-09-01",
}),
}
);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
import os, httpx
resp = httpx.post(
"https://api.productbridge.io/api/external/v1/feedback-posts/update",
json={
"api_key": os.environ["PRODUCTBRIDGE_API_KEY"],
"post_id": "aa3c3ef8-b8cd-cd15-01ba-postpost0001",
"user_id": "cc3c3ef8-b8cd-cd15-01ba-adminuser001",
"status_id": "883c3ef8-b8cd-cd15-01ba-status000002",
"eta": "2026-09-01",
},
)
resp.raise_for_status()
Example response
{ "success": true }
Errors
| Status | Body | Cause |
|---|---|---|
401 | {"detail":{"error":"invalid api_key"}} | Missing / unknown / inactive api_key. |
400 | {"detail":{"error":"<resource> not found in this organization"}} | A referenced board_id, status_id, or category_id doesn't belong to your organization. |
404 | {"detail":{"error":"feedback post not found"}} | The post_id doesn't exist or belongs to another organization. |
422 | Validation error envelope | Missing required fields, wrong types, title length out of bounds. |
See Errors for the full envelope shape.
Last updated 1 week ago
Built with Documentation.AI