---
title: "Fareeqy API changelog"
description: "Every change to the Fareeqy REST API, release by release: what was added, what changed, what was removed, and what your integration has to do."
url: https://fareeqy.com/api/v1/docs/changelog/en
language: en
---

For developers

# API changelog

Every release and what it carried. The spec describes the API as it is today and has no memory of what it was; this page is that memory.

Current version v1.3.0

Contents

On this page

-   v1.3.0
-   v1.2.0
-   v1.1.0
-   v1.0.0

Endpoints

-   [Account](https://fareeqy.com/api/v1/docs/account/en)
-   [Events](https://fareeqy.com/api/v1/docs/events/en)
-   [Projects](https://fareeqy.com/api/v1/docs/projects/en)
-   [Members](https://fareeqy.com/api/v1/docs/members/en)
-   [Task lists](https://fareeqy.com/api/v1/docs/task-lists/en)
-   [Tasks](https://fareeqy.com/api/v1/docs/tasks/en)
-   [Comments](https://fareeqy.com/api/v1/docs/comments/en)
-   [Discussions](https://fareeqy.com/api/v1/docs/discussions/en)
-   [Files](https://fareeqy.com/api/v1/docs/files/en)
-   [Folders](https://fareeqy.com/api/v1/docs/folders/en)

On this page

-   v1.3.0
-   v1.2.0
-   v1.1.0
-   v1.0.0

Endpoints

-   [Account](https://fareeqy.com/api/v1/docs/account/en)
-   [Events](https://fareeqy.com/api/v1/docs/events/en)
-   [Projects](https://fareeqy.com/api/v1/docs/projects/en)
-   [Members](https://fareeqy.com/api/v1/docs/members/en)
-   [Task lists](https://fareeqy.com/api/v1/docs/task-lists/en)
-   [Tasks](https://fareeqy.com/api/v1/docs/tasks/en)
-   [Comments](https://fareeqy.com/api/v1/docs/comments/en)
-   [Discussions](https://fareeqy.com/api/v1/docs/discussions/en)
-   [Files](https://fareeqy.com/api/v1/docs/files/en)
-   [Folders](https://fareeqy.com/api/v1/docs/folders/en)

## v1.3.0

Current Breaking Released 2026-09-25

### Comment attachment reads, and a page address on every resource

An attachment inside a comment is now an object with an id, and an endpoint returns the attached file's text. Every resource now carries the address of its page in فريقي. `*_slug` fields and delete responses now name records by ref alone.

-   Added `GET` on `/lists/{ref}/comments/{comment}/attachments/{id}` and `/tasks/{ref}/comments/{comment}/attachments/{id}`, plus their nested twins under `/projects/{project}/lists/{list}`. They return the text of a file attached to a comment, with `comment_id` and `comment_url`. Only text files up to 256 KB are read; anything else is refused with a 422 that names it. Needs `comments:read`.
-   Added `url` on projects, task lists, tasks, majlis topics, comments, files, folders, events and search hits: the absolute address of the page a person opens in فريقي. A project member is the one record without it.
-   Added `widened` on the search response, always present. It names every kind where no record carried every word of the query, so its hits are near-misses.
-   Added Two error codes: `unknown_endpoint` (404) for a path that matches no endpoint, echoing the path in its message, and `project_in_use` (409) when deleting a project a connected integration feeds.
-   Changed Each item in a comment's `attachments` is now an object, `{id, name, content_type, byte_size}`. It used to be the file name alone.
-   Changed `project_slug`, `task_list_slug`, `task_slug` and `discussion_slug` in responses carry the ref, not a slug.
-   Changed Documentation fix: the flat `POST /tasks/{ref}/move` takes a ref only in `target_task_list_slug`, and the destination list may be in another project of the company. The docs used to say it stays in the same project. The nested address does stay inside its project.
-   Changed The majlis topic list returns published topics only; drafts are not listed.
-   Removed Delete responses for a task list, task and majlis topic no longer carry `slug`. The deleted record is named by `id` alone.

What your integration has to do

-   If you read `attachments` as strings, read `name` from each item.
-   If you show a `*_slug` value to a person, it is a ref now. Show `title` or `name`. Passing it to any endpoint keeps working as before.
-   If you read `slug` from a delete response, read `id` instead.
-   To move a task through the flat address, send the destination list's ref, not its slug.

## v1.2.0

Released 2026-09-11

### Time spent on a task, written and read

A task now carries one field for how long it took. It is written through its own action rather than PATCH because the permission differs, and it is read on every task response with no plan condition.

-   Added `POST /tasks/{ref}/time` and `POST /projects/{project}/lists/{list}/tasks/{task}/time`: record the duration in one of three shapes that all mean ninety minutes, `"1:30"`, `"1.5"` in decimal hours, and `"90"` in minutes, with an empty string clearing the field. The value replaces the previous total rather than adding to it, and `"0"` is refused because a caller sending it almost always meant to clear. Needs `tasks:write` and a plan that carries time tracking, 403 otherwise with nothing recorded.
-   Added `time_spent_minutes` on every task response, always present and `null` when nobody has measured the task. `null` is not zero: the first says nobody stated how long it took, the second says it took no time. Reading needs no plan, because the numbers are the customer's own record of their work.

## v1.1.0

Breaking Released 2026-08-22

### A flat address for every record, and comment reads

Every record gained a second, short address that stands on its own, without the chain of parents that used to precede it. Alongside it, `comments` gained its read half, and the task-list path segment changed.

-   Changed The task-list path segment is `lists`, not `task-lists`, across every nested path: `/projects/{project}/lists`, `/projects/{project}/lists/{list}/tasks` and everything under them.
-   Changed `id` in a response is now the record's ref: `prj-8f3kd` for a project, `lst-4m2qp` for a task list, `tsk-9wb7t` for a task, `mjl-6khz2` for a majlis topic. It used to be the slug.
-   Added A flat address for every record that carries a ref: `GET` / `PATCH` / `DELETE` on `/lists/{ref}`, `/tasks/{ref}` and `/discussions/{ref}`, plus `DELETE /files/{ref}`, and the `complete`, `incomplete` and `move` actions. It does not accept a slug, because a slug repeats across projects.
-   Added Collections under a flat parent: `GET` / `POST /lists/{ref}/tasks`, `/lists/{ref}/comments` and `/tasks/{ref}/comments`. A collection stays under its parent, but the parent may be named by its ref alone.
-   Added The `comments:read` operation, and with it `GET` on a task list's comments and a task's comments, oldest first and paginated. `comments` was the one group that could write and never read.
-   Added Two fields on a comment: `updated_at`, equal to `created_at` until the comment is edited, and `attachments`, the names of files embedded in the body that the plain-text rendering drops.
-   Changed Search hits return the ref in `id`, alongside the `*_slug` keys as before. A folder is the one hit without an `id`: its numeric folder\_id is the only handle its endpoints take.
-   Removed `/projects/{project}/task-lists` and everything under it no longer resolves. The segment is `lists`.

What your integration has to do

-   Replace `task-lists` with `lists` in every path you build. This is the only change that stops a working integration.
-   A slug is still accepted everywhere it was, and so is a file's numeric id, so nothing you stored has to be migrated. What is new is that you receive a ref instead.
-   If you show `id` to a person as a readable title, it is a ref now, not a name. Show `title` or `name`.
-   To read comments, add `comments:read` to your key's allowed operations. Keys minted before this date do not carry it.

## v1.0.0

Released 2026-08-05

### First release

The first public release of the API, in preview and switched on per company.

-   Added Projects, task lists, tasks, majlis topics, comments, files, folders, calendar events, members, unified search, and the calling key's own identity.
-   Added Bearer key authentication behind two gates: the scope as a ceiling, and an explicit allowed-operations list as the operative gate. Deletes sit outside the default grant.
-   Added Uniform response envelopes, pagination, and a per-company daily quota with headers set on every served response.

## How we number

The number here versions the **contract** these docs describe. It is not the `v1` in the base URL: that is the path version, and it moves only when a new surface stands beside the old one. The API is in preview, so every update raises the middle number and the first stays reserved for general availability. Each release here matches `info.version` in the OpenAPI file, and a build check keeps the two from drifting apart.

[Back to the overview](https://fareeqy.com/api/v1/docs/en)
