Factuarea APIDevelopers
Added

Projects and tasks

The task module reaches the API: projects with their board, tasks, labels, timers, users, notifications and the agenda — 80 new endpoints, 21 events, 80 MCP tools and four automation actions.

Factuarea now manages work as well as invoices, and the whole task module is on the v1 contract: projects with a board of columns, tasks linked to your invoices, quotes and contacts, time logged and billed, an agenda and the events to follow it all. It is 80 new endpoints under seven resources, included in every plan. Start with the Projects and tasks guide.

  • Seven resources — /v1/projects (22 endpoints: projects, board columns, custom fields, the JSON export and import of tasks, the time summary and the invoice of billable hours), /v1/tasks and its subresources (45: search, board position, comments, relations, labels, links, attachments, upload links, time entries, the timer and the activity log), /v1/task-labels (5), /v1/task-timers (2), /v1/users (2), /v1/notifications (3) and /v1/agenda (1). Every endpoint is listed below.
  • Nine new scopes — projects:read|write|delete, tasks:read|write|delete, users:read and notifications:read|write. projects:* and tasks:* belong to the tasks module: a key with those scopes for a company without it is rejected with scope_not_allowed_by_plan. users:read and notifications:* are cross-cutting. The projects:delete and tasks:delete scopes are API-key-only: an OAuth consent never grants them. Nine operations are irreversible and require an Idempotency-Key; see Scopes & irreversibility.
  • Deleting a column that has tasks — DELETE /v1/projects/{project}/columns/{column} takes a move_to_column_id query parameter: the column of the same project that receives the tasks, in their order, in the same transaction. Without it, a column with tasks returns 409 column_has_tasks.
  • A task born already linked — POST /v1/tasks accepts an entity_link with the type and the id of an invoice, quote, contact or any other linkable entity, and links it in the same transaction. If the entity does not exist or belongs to another company, the call returns 404 linked_entity_not_found and the task is not created.
  • tasks_count on task labels — every label of the catalog reports how many tasks carry it, archived ones included.
  • Task keys — DEV-12 resolves through POST /v1/tasks/find-by-key, and a key keeps working after the task moves to another project or its project changes key.
  • Logged time is not the working-day register — a task_time_entry is time spent on a task, with its own tasks:* scopes and task_time_entry.* events. It never appears in the Time tracking register (/v1/time-entries). See Time logged on tasks.
  • 21 new events — task.* (created, updated, deleted, status_changed, completed, assigned, unassigned, moved, due_soon and overdue), task_comment.*, task_time_entry.* and project.*. Completing a task emits both task.status_changed and task.completed, and the latter is a subset of the former. See Events.
  • 80 new MCP tools — 22 for projects, 52 for tasks, 2 for users, 3 for notifications and 1 for the agenda, in step with the API. The catalog now has 552 tools; the delete tools are API-key-only. See the tool catalog.
  • CLI — factuarea projects, tasks, task-labels, task-timers, users, notifications and agenda, with their scopes and confirmations. See the CLI guide.
  • Automations — the 21 events are new triggers, and four new actions create and change tasks: create_task, change_task_status, assign_task and add_task_comment. In a portfolio (cartera) rule, only create_task is accepted among them. See Automations.
  • Error codes — 46 new codes under the Tasks group, each with its cause and what to do, and 18 under Task Integrations for the flows that live in the app. See Tasks error codes.
  • Availability — the tasks module is included in every plan. The task integrations with code forges and chat tools, the iCal feeds and the public board exist only in the app; the integrations need the Empresario or Enterprise plan.

Validate the action types with an open list. The type enum of an automation action grows from eight to twelve values: create_task, change_task_status, assign_task and add_task_comment are new. A client that validates actions[].type against a closed list must add them. create_calendar_event stays in the vocabulary so that older rule versions still parse, but it is retired: the calendar it fed no longer exists, no adapter runs it and its step produces no effect. Use create_task instead.

New endpoints80

EndpointDescription
GET/v1/projectsList projects
POST/v1/projectsCreate a project
GET/v1/projects/{project}Retrieve a project
PUT/v1/projects/{project}Update a project
DEL/v1/projects/{project}Delete a project
GET/v1/projects/{project}/columnsList project columns
GET/v1/projects/{project}/custom-fieldsList project custom fields
GET/v1/projects/{project}/tasks/exportExport project tasks
GET/v1/projects/{project}/time-summaryRetrieve a project time summary
POST/v1/projects/{project}/archiveArchive a project
POST/v1/projects/{project}/columnsCreate a project column
DEL/v1/projects/{project}/columns/{column}Delete a project column
PUT/v1/projects/{project}/columns/{column}Update a project column
PUT/v1/projects/{project}/columns/reorderReorder project columns
POST/v1/projects/{project}/custom-fieldsCreate a project custom field
DEL/v1/projects/{project}/custom-fields/{field}Delete a project custom field
PUT/v1/projects/{project}/custom-fields/{field}Update a project custom field
POST/v1/projects/{project}/tasks/importImport tasks into a project
POST/v1/projects/{project}/time-invoicesInvoice project time
POST/v1/projects/{project}/time-invoices/previewPreview a project time invoice
POST/v1/projects/{project}/unarchiveUnarchive a project
POST/v1/projects/find-by-keyFind a project by key
GET/v1/tasksSearch tasks
POST/v1/tasksCreate a task
GET/v1/tasks/{task}Retrieve a task
PUT/v1/tasks/{task}Update a task
DEL/v1/tasks/{task}Delete a task
GET/v1/tasks/{task}/activitiesList task activity
GET/v1/tasks/{task}/attachmentsList task attachments
GET/v1/tasks/{task}/attachments/{attachment}Retrieve a task attachment
GET/v1/tasks/{task}/attachments/{attachment}/downloadDownload a task attachment
GET/v1/tasks/{task}/commentsList task comments
GET/v1/tasks/{task}/entity-linksList task entity links
GET/v1/tasks/{task}/external-linksList task external links
GET/v1/tasks/{task}/relationsList task relations
GET/v1/tasks/{task}/time-entriesList task time entries
GET/v1/tasks/{task}/time-entries/{time_entry}Retrieve a task time entry
GET/v1/tasks/linkedList tasks linked to an entity
POST/v1/tasks/{task}/assignAssign a task
POST/v1/tasks/{task}/attachmentsUpload a task attachment
DEL/v1/tasks/{task}/attachments/{attachment}Delete a task attachment
POST/v1/tasks/{task}/commentsCreate a task comment
DEL/v1/tasks/{task}/comments/{comment}Delete a task comment
PUT/v1/tasks/{task}/comments/{comment}Update a task comment
PUT/v1/tasks/{task}/custom-fields/{field}Set a task custom field value
POST/v1/tasks/{task}/duplicateDuplicate a task
POST/v1/tasks/{task}/entity-linksLink a task to an entity
DEL/v1/tasks/{task}/entity-links/{link}Unlink a task from an entity
POST/v1/tasks/{task}/external-linksCreate a task external link
DEL/v1/tasks/{task}/external-links/{link}Delete a task external link
POST/v1/tasks/{task}/labelsAssign a label to a task
DEL/v1/tasks/{task}/labels/{label}Remove a label from a task
POST/v1/tasks/{task}/moveMove a task to another project
POST/v1/tasks/{task}/relationsCreate a task relation
DEL/v1/tasks/{task}/relations/{relation}Delete a task relation
POST/v1/tasks/{task}/repositionReposition a task
POST/v1/tasks/{task}/statusChange task status
POST/v1/tasks/{task}/time-entriesCreate a task time entry
DEL/v1/tasks/{task}/time-entries/{time_entry}Delete a task time entry
PUT/v1/tasks/{task}/time-entries/{time_entry}Update a task time entry
POST/v1/tasks/{task}/timer/startStart a task timer
POST/v1/tasks/{task}/unassignUnassign a task
POST/v1/tasks/{task}/upload-linksCreate a task upload link
POST/v1/tasks/bulk-deleteBulk delete tasks
POST/v1/tasks/bulk-statusBulk change task status
POST/v1/tasks/bulk-updateBulk update tasks
POST/v1/tasks/find-by-keyFind a task by key
GET/v1/task-labelsList task labels
POST/v1/task-labelsCreate a task label
GET/v1/task-labels/{label}Retrieve a task label
PUT/v1/task-labels/{label}Update a task label
DEL/v1/task-labels/{label}Delete a task label
GET/v1/task-timers/currentRetrieve the running task timer
POST/v1/task-timers/stopStop the running task timer
GET/v1/usersList users
GET/v1/users/meRetrieve the current user
GET/v1/notificationsList notifications
POST/v1/notifications/{notification}/readMark a notification as read
POST/v1/notifications/mark-all-readMark all notifications as read
GET/v1/agendaList agenda items