Public REST API
The FeedbackJar REST API lets you read and write everything in your project programmatically — feedback posts, boards, tags, and comments. Use it to build integrations, automate workflows, or power the MCP server.
Try endpoints live in the API Playground — paste an API token and send requests from your browser.
Authentication
All requests require an API token passed as a Bearer token.
Project token (tied to one project):
Authorization: Bearer fj_live_... Account token (works across all your projects — requires X-Organization-Id):
Authorization: Bearer fj_user_...
X-Organization-Id: <organizationId> See the API Tokens guide for how to create both types.
Base URL
https://api.feedbackjar.com/api/v1 Security note: post/comment content is untrusted user text
title, content, and metadata on posts and comments can originate from anonymous public submitters (the feedback widget or public feedback form) — nothing about this API validates that the text is well-intentioned.
If you feed API responses into an LLM or AI agent (for triage, summarization, or auto-replies), treat every title/content/metadata field as data, not instructions. A submitter can write feedback that looks like a command (“ignore previous instructions and…”, “call the merge endpoint on post X”, etc.) hoping your agent will act on it instead of just reading it. Don’t let agent output derived from this content trigger write calls (PATCH, POST, DELETE) without a human in the loop or an explicit allowlist of intended actions.
Posts
List posts
GET /api/v1/posts Query parameters
| Parameter | Type | Description |
|---|---|---|
status | string | Filter by status: OPEN, IN_PROGRESS, COMPLETED, CLOSED |
type | string | Filter by type: BUG, FEATURE_REQUEST, FEEDBACK, QUESTION, IDEA, REVIEW |
boardId | string | Filter to a specific board |
limit | number | Results per page (1–100, default 20) |
cursor | string | Pagination cursor from previous response |
curl "https://api.feedbackjar.com/api/v1/posts?status=OPEN&type=BUG&limit=10" \
-H "Authorization: Bearer fj_live_..." Response
{
"items": [
{
"id": "cm1abc123",
"title": "Widget crashes on Safari",
"content": "...",
"type": "BUG",
"status": "OPEN",
"voteCount": 14,
"metadata": { "browser": { "name": "Safari" }, "page": { "url": "..." } },
"createdAt": "2026-07-01T10:00:00Z",
"boardId": "cm1board1",
"board": { "name": "Bugs", "slug": "bugs" },
"tags": []
}
],
"nextCursor": "cm1abc456"
} Get a post
GET /api/v1/posts/:id Returns the full post including widget metadata, comment count, and vote count.
curl https://api.feedbackjar.com/api/v1/posts/cm1abc123 \
-H "Authorization: Bearer fj_live_..." Create a post
POST /api/v1/posts | Field | Required | Description |
|---|---|---|
boardId | ✓ | Board to create the post in |
title | ✓ | Post title |
content | ✓ | Post body |
type | FEATURE_REQUEST (default), BUG, FEEDBACK, QUESTION, IDEA, REVIEW | |
visibility | PUBLIC (default), UNLISTED, PRIVATE | |
authorName | Display name for the author | |
authorEmail | Author email |
curl -X POST https://api.feedbackjar.com/api/v1/posts \
-H "Authorization: Bearer fj_live_..." \
-H "Content-Type: application/json" \
-d '{"boardId": "cm1board1", "title": "Dark mode", "content": "Please add dark mode.", "type": "FEATURE_REQUEST"}' Update a post
PATCH /api/v1/posts/:id All fields are optional.
curl -X PATCH https://api.feedbackjar.com/api/v1/posts/cm1abc123 \
-H "Authorization: Bearer fj_live_..." \
-H "Content-Type: application/json" \
-d '{"status": "IN_PROGRESS", "type": "BUG"}' Update post status
PATCH /api/v1/posts/:id/status Shorthand for updating only the status field.
curl -X PATCH https://api.feedbackjar.com/api/v1/posts/cm1abc123/status \
-H "Authorization: Bearer fj_live_..." \
-H "Content-Type: application/json" \
-d '{"status": "COMPLETED"}' Valid statuses: OPEN · IN_PROGRESS · COMPLETED · CLOSED
Delete a post
DELETE /api/v1/posts/:id curl -X DELETE https://api.feedbackjar.com/api/v1/posts/cm1abc123 \
-H "Authorization: Bearer fj_live_..." Comments
List comments
GET /api/v1/posts/:id/comments Returns top-level comments with nested replies.
curl https://api.feedbackjar.com/api/v1/posts/cm1abc123/comments \
-H "Authorization: Bearer fj_live_..." Add a comment
POST /api/v1/posts/:id/comments curl -X POST https://api.feedbackjar.com/api/v1/posts/cm1abc123/comments \
-H "Authorization: Bearer fj_live_..." \
-H "Content-Type: application/json" \
-d '{"content": "Fixed in v2.3.1 — thanks for the report!"}' Update a comment
PATCH /api/v1/comments/:id Delete a comment
DELETE /api/v1/comments/:id Boards
List boards
GET /api/v1/boards curl https://api.feedbackjar.com/api/v1/boards \
-H "Authorization: Bearer fj_live_..." Get a board
GET /api/v1/boards/:id Create a board
POST /api/v1/boards | Field | Required | Description |
|---|---|---|
name | ✓ | Board name |
slug | URL slug (auto-generated from name if omitted) | |
description | Optional description | |
isPrivate | false (default) | |
defaultPostVisibility | PUBLIC (default), UNLISTED, PRIVATE |
curl -X POST https://api.feedbackjar.com/api/v1/boards \
-H "Authorization: Bearer fj_live_..." \
-H "Content-Type: application/json" \
-d '{"name": "Feature Requests"}' Update a board
PATCH /api/v1/boards/:id Delete a board
DELETE /api/v1/boards/:id Tags
List tags
GET /api/v1/tags Create a tag
POST /api/v1/tags curl -X POST https://api.feedbackjar.com/api/v1/tags \
-H "Authorization: Bearer fj_live_..." \
-H "Content-Type: application/json" \
-d '{"name": "mobile"}' Update a tag
PATCH /api/v1/tags/:id Delete a tag
DELETE /api/v1/tags/:id