FDBKDocs

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.

Request
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 response
{
  "error": {
    "code": "invalid_request",
    "message": "title: Too small: expected string to have >=4 characters"
  }
}
CodeDescription
unauthorized401Missing, wrong or revoked key.
plan_required403The workspace's plan doesn't include the API.
not_found404No such board, post or comment in this workspace.
invalid_json400The body isn't valid JSON.
invalid_request400A field is missing or wrong; the message says which.
rate_limited429Too many requests this minute. Wait for Retry-After.
server_error500Our side failed. Retry later.

Boards

GET/api/v1/boards

Every board in the workspace.
Request
curl https://fdbk.online/api/v1/boards -H "Authorization: Bearer fdbk_your_key"
Response
{
  "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.
ParameterDescription
boardstringA board's slug. Default: every board.
statusstringopen, planned, in_progress, done or closed.
qstringSearch in titles and descriptions.
sortstringnew (default) or top.
include_mergedbooleanInclude posts merged into others. Default: false.
limitnumber1 to 100. Default: 25.
offsetnumberWhere to start. Use next_offset from the last page.
Request
curl "https://fdbk.online/api/v1/posts?board=app&status=planned&sort=top&limit=10" \
  -H "Authorization: Bearer fdbk_your_key"
Response
{
  "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.
ParameterDescription
boardstringrequiredThe board's slug.
titlestringrequired4 to 120 characters.
bodystringThe description, up to 5,000 characters.
categorystringfeature (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.
Request
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" }
  }'
Response
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.
Request
curl https://fdbk.online/api/v1/posts/22 -H "Authorization: Bearer fdbk_your_key"
Response
{
  "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.
ParameterDescription
statusstringrequiredopen, planned, in_progress, done or closed.
Request
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.
Request
curl https://fdbk.online/api/v1/posts/22/comments -H "Authorization: Bearer fdbk_your_key"
Response
{
  "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.
ParameterDescription
bodystringrequiredUp to 2,000 characters.
Request
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.

We use Google Analytics to see how people find and use FDBK. No ads, and never on your boards.