Developer docs
REST APIPro and up
Read and update boards, posts and comments.
Authentication
Create a key under Developers and send it in the Authorization header. A key belongs to one workspace and can read and change everything in it, including private boards, so keep it on your server. Replies and status changes are recorded as the person who created the key.
curl https://fdbk.online/api/v1/boards \
-H "Authorization: Bearer fdbk_your_key"Errors and limits
Bodies are JSON and dates are ISO 8601 in UTC. Each workspace gets 60 requests a minute on Pro and 300 on Business; past that you get 429 with a Retry-After header.
{
"error": {
"code": "invalid_request",
"message": "title: Too small: expected string to have >=4 characters"
}
}| Code | Description |
|---|---|
unauthorized401 | Missing, wrong or revoked key. |
plan_required403 | The workspace's plan doesn't include the API. |
not_found404 | No such board, post or comment in this workspace. |
invalid_json400 | The body isn't valid JSON. |
invalid_request400 | A field is missing or wrong; the message says which. |
rate_limited429 | Too many requests this minute. Wait for Retry-After. |
server_error500 | Our side failed. Retry later. |
Boards
GET/api/v1/boards
Every board in the workspace.
curl https://fdbk.online/api/v1/boards -H "Authorization: Bearer fdbk_your_key"{
"data": [
{
"id": "…",
"slug": "app",
"name": "Acme App",
"description": null,
"public": true,
"url": "https://fdbk.online/acme/app"
}
]
}Posts
GET/api/v1/posts
Lists posts, newest first. Filters go in the query string.
| Parameter | Description |
|---|---|
boardstring | A board's slug. Default: every board. |
statusstring | open, planned, in_progress, done or closed. |
qstring | Search in titles and descriptions. |
sortstring | new (default) or top. |
include_mergedboolean | Include posts merged into others. Default: false. |
limitnumber | 1 to 100. Default: 25. |
offsetnumber | Where to start. Use next_offset from the last page. |
curl "https://fdbk.online/api/v1/posts?board=app&status=planned&sort=top&limit=10" \
-H "Authorization: Bearer fdbk_your_key"{
"data": [
{
"id": 22,
"board": { "id": "…", "slug": "app", "name": "Acme App" },
"title": "Export to CSV",
"body": "Need it for reports",
"category": "feature",
"status": "planned",
"votes": 4,
"comments": 1,
"pinned": false,
"merged_into": null,
"author": { "name": "Carla" },
"url": "https://fdbk.online/acme/app/p/22-export-to-csv",
"admin_url": "https://fdbk.online/admin/p/22",
"created_at": "2026-10-03T03:07:24.721Z",
"updated_at": "2026-10-03T03:19:04.810Z"
}
],
"has_more": false,
"next_offset": null
}POST/api/v1/posts
Creates a post. The author's vote counts, as on the board.
| Parameter | Description |
|---|---|
boardstringrequired | The board's slug. |
titlestringrequired | 4 to 120 characters. |
bodystring | The description, up to 5,000 characters. |
categorystring | feature (default), bug or improvement. |
authorobject | { name, email }. A known email posts as that person; otherwise a guest with that name is created. Without it, the post is the key creator's. |
curl https://fdbk.online/api/v1/posts \
-H "Authorization: Bearer fdbk_your_key" \
-H "Content-Type: application/json" \
-d '{
"board": "app",
"title": "Dark mode",
"body": "From a support ticket",
"category": "feature",
"author": { "name": "Dana", "email": "dana@example.com" }
}'201 Created
{
"data": {
"id": 22,
"board": { "id": "…", "slug": "app", "name": "Acme App" },
"title": "Export to CSV",
"body": "Need it for reports",
"category": "feature",
"status": "planned",
"votes": 4,
"comments": 1,
"pinned": false,
"merged_into": null,
"author": { "name": "Carla" },
"url": "https://fdbk.online/acme/app/p/22-export-to-csv",
"admin_url": "https://fdbk.online/admin/p/22",
"created_at": "2026-10-03T03:07:24.721Z",
"updated_at": "2026-10-03T03:19:04.810Z"
}
}GET/api/v1/posts/{id}
One post.
curl https://fdbk.online/api/v1/posts/22 -H "Authorization: Bearer fdbk_your_key"{
"data": {
"id": 22,
"board": { "id": "…", "slug": "app", "name": "Acme App" },
"title": "Export to CSV",
"body": "Need it for reports",
"category": "feature",
"status": "planned",
"votes": 4,
"comments": 1,
"pinned": false,
"merged_into": null,
"author": { "name": "Carla" },
"url": "https://fdbk.online/acme/app/p/22-export-to-csv",
"admin_url": "https://fdbk.online/admin/p/22",
"created_at": "2026-10-03T03:07:24.721Z",
"updated_at": "2026-10-03T03:19:04.810Z"
}
}PATCH/api/v1/posts/{id}
Changes the status and answers with the post. Voters get the usual email if the board has them on.
| Parameter | Description |
|---|---|
statusstringrequired | open, planned, in_progress, done or closed. |
curl -X PATCH https://fdbk.online/api/v1/posts/22 \
-H "Authorization: Bearer fdbk_your_key" \
-H "Content-Type: application/json" \
-d '{ "status": "in_progress" }'Comments
GET/api/v1/posts/{id}/comments
A post's comments, oldest first.
curl https://fdbk.online/api/v1/posts/22/comments -H "Authorization: Bearer fdbk_your_key"{
"data": [
{
"id": 12,
"post_id": 22,
"body": "On it",
"official": true,
"author": { "name": "Ana" },
"created_at": "2026-10-03T14:20:00.000Z"
}
]
}POST/api/v1/posts/{id}/comments
Posts an official team reply.
| Parameter | Description |
|---|---|
bodystringrequired | Up to 2,000 characters. |
curl https://fdbk.online/api/v1/posts/22/comments \
-H "Authorization: Bearer fdbk_your_key" \
-H "Content-Type: application/json" \
-d '{ "body": "Shipping this next week." }'Want to hear about changes instead of asking? Use webhooks.