Skip to navigation

Introduction

The TaskForce REST API, in short.

Everything the app does goes through a REST API described in OpenAPI 3.1. The API reference, at the end of this menu, is generated from that description, and the guides of this section give the rules that apply to every endpoint.

Base address

The API of an instance is served at its API address followed by /api. On a self-hosted instance with the default settings, that is http://localhost:8080/api (TF_API_URL in .env).

Requests and responses are JSON. There is no version in the path: the OpenAPI description of the release you run is the contract.

Most paths start with the workspace’s slug, then the resource:

/api/workspaces/{slug}/projects/{projectId}/issues/{issueId}

Responses

A successful response wraps its payload in an envelope, and the payload is in data:

{
"success": true,
"message": "Issue created",
"data": { "id": 42, "identifier": "WEB-42", "title": "Fix login" },
"timestamp": "2026-10-19T14:12:00"
}

Errors are described in Conventions.

A first call

curl -X POST http://localhost:8080/api/workspaces/acme/projects/12/issues \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{ "title": "Fix login", "priority": "HIGH" }'

The access token comes from signing in: see Authentication.

The OpenAPI description

The description is in the repository, at fern/openapi/openapi.json. Give it to a client generator or to Postman, Insomnia or Bruno rather than writing each call by hand.