Posts API reference
Posts endpoints of the Quackback REST API: paths, parameters, request fields and responses.
This is the reference for the Posts endpoints of the Quackback REST API: every endpoint, its parameters, request fields and response fields. It is generated from the API's OpenAPI description, so it matches what the API accepts.
All paths are relative to /api/v1 on your workspace's address (for example https://feedback.example.com/api/v1). Authenticate with an API key in the Authorization: Bearer qb_... header. For keys, errors, pagination and rate limits, see API overview. Every workspace also serves an interactive reference at /api/v1/docs.
Endpoints
GET /posts: List postsPOST /posts: Create a postGET /posts/{postId}: Get a postPATCH /posts/{postId}: Update a postDELETE /posts/{postId}: Delete a postGET /posts/{postId}/activity: Get post activityPOST /posts/{postId}/merge: Merge a duplicate postPOST /suggestions/{suggestionId}/accept: Accept a merge suggestionPOST /suggestions/{suggestionId}/dismiss: Dismiss a merge suggestionPOST /suggestions/{suggestionId}/restore: Restore a dismissed merge suggestion
List posts
GET /api/v1/posts
Returns a paginated list of posts with optional filtering
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| query | string | No | Filter by board ID |
| query | string | No | Filter by status slug |
| query | string | No | Filter by tag IDs (comma-separated) |
| query | string | No | Search in title and content |
| query | string ( | No | Sort order |
| query | string | No | Pagination cursor from previous response |
| query | integer | No | Items per page (max 100) |
Response 200: returns id, title, content, voteCount, commentCount, boardId, boardSlug, boardName, statusId, authorName, ownerId, tags, createdAt, updatedAt.
Create a post
POST /api/v1/posts
Create a new feedback post. The post is created on behalf of the authenticated API key holder.
Request body
Field | Type | Required | Description |
|---|---|---|---|
| string | Yes | Post title |
| string | Yes | Post content (optional) |
| string | Yes | Board ID |
| string | No | Initial status ID |
| array of string | No | PostTag IDs to assign |
Response 201: returns id, title, content, voteCount, boardId, statusId, authorName, createdAt, updatedAt.
Get a post
GET /api/v1/posts/{postId}
Get a single post by ID with full details
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Post ID |
Response 200: returns id, title, content, contentJson, voteCount, commentCount, boardId, boardSlug, boardName, statusId, authorName, authorEmail, ownerId, tags, pinnedComment, eta, createdAt, updatedAt, deletedAt.
Update a post
PATCH /api/v1/posts/{postId}
Update an existing post
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Post ID |
Request body
Field | Type | Required | Description |
|---|---|---|---|
| string | No | |
| string | No | |
| string | No | Status ID (set to null to clear) |
| array of string | No | |
| string | No | Assigned team member ID (set to null to unassign) |
Response 200: returns id, title, content, contentJson, voteCount, boardId, statusId, authorName, ownerId, createdAt, updatedAt.
Delete a post
DELETE /api/v1/posts/{postId}
Delete a post by ID
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Post ID |
Get post activity
GET /api/v1/posts/{postId}/activity
Returns the 200 most recent activity entries for a post, newest first. Requires the post.view_private permission.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Post ID |
Response 200: returns id, postId, principalId, actorName, type, metadata, createdAt.
Merge a duplicate post
POST /api/v1/posts/{postId}/merge
Merges this post (the duplicate) into a canonical post. Requires the post.merge permission.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Post ID |
Request body
Field | Type | Required | Description |
|---|---|---|---|
| string | Yes | The post that survives. Votes and comments move onto it. |
Response 200: returns canonicalPost, duplicatePost.
Accept a merge suggestion
POST /api/v1/suggestions/{suggestionId}/accept
Accepts a suggested post-to-post merge. The body is optional. Requires the suggestion.manage permission.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Merge suggestion ID (post_merge_sug_...) |
Request body
Field | Type | Required | Description |
|---|---|---|---|
| boolean | No | Merge the suggestion target into the source instead of the reverse |
Response 200: returns accepted, id.
Dismiss a merge suggestion
POST /api/v1/suggestions/{suggestionId}/dismiss
Requires the suggestion.manage permission.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Merge suggestion ID (post_merge_sug_...) |
Response 200: returns dismissed, id.
Restore a dismissed merge suggestion
POST /api/v1/suggestions/{suggestionId}/restore
Returns a dismissed suggestion to pending. Requires the suggestion.manage permission.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Merge suggestion ID (post_merge_sug_...) |
Response 200: returns restored, id.
Was this helpful?
Your feedback shapes what we write next.
