Factuarea APIDevelopers
Contract

Recent operations join the axis

The operations released since 21 September — projects and tasks, the purchase scanner, notifications, users, VeriFactu representation, issuing without sending and series editing — live under /v1/companies/{company}, and eight partial updates move from PUT to PATCH.

5 October 2026 — the operations that reached the API since 21 September were published on flat paths, before the company axis existed. They now live where every other company resource lives, under /v1/companies/{company}/…: the operations of the tables below. This is the same migration as the axis window, applied to what came after it, and it needs no second step.

  • No flat alias. A call to the old path answers the standard 404 of a route that does not exist. Use the path in the Now column.
  • Nothing else changes by default. Route names (public-api.v1.*), scopes, bodies and responses stay as published, except what the sections below state: eight verbs, a few paths that change more than the prefix, a handful of error statuses and one webhook payload version.
  • The company comes from the credential. The {company} segment is validated against the scope of the credential: 403 company_inactive if the tax ID is inactive, and 404 profile_not_found if it is outside the scope, does not exist or belongs to the other environment. The three 404 look the same on purpose.
  • Location carries the axis. The creations of POST …/tasks, …/tasks/{task}/duplicate, …/projects, …/task-labels and POST …/verifactu/representation answer /v1/companies/{company}/<resource>/<id>.

Adapt once. Replace the path, send PATCH where the table says so, read the new statuses, and your client is done. There is no compatibility mode for the old paths and verbs.

Verbs: PUT becomes PATCH

The partial updates of the new families follow the convention of the rest of the API: PATCH changes only the fields you send. PUT stays where the whole resource is replaced by design.

OperationBeforeNow
public-api.v1.projects.updatePUT /v1/projects/{project}PATCH /v1/companies/{company}/projects/{project}
public-api.v1.projects.columns.updatePUT /v1/projects/{project}/columns/{column}PATCH /v1/companies/{company}/projects/{project}/columns/{column}
public-api.v1.projects.custom_fields.updatePUT /v1/projects/{project}/custom-fields/{field}PATCH /v1/companies/{company}/projects/{project}/custom-fields/{field}
public-api.v1.task_labels.updatePUT /v1/task-labels/{label}PATCH /v1/companies/{company}/task-labels/{label}
public-api.v1.tasks.updatePUT /v1/tasks/{task}PATCH /v1/companies/{company}/tasks/{task}
public-api.v1.tasks.time_entries.updatePUT /v1/tasks/{task}/time-entries/{time_entry}PATCH /v1/companies/{company}/tasks/{task}/time-entries/{time_entry}
public-api.v1.purchase_scans.reviewPUT /v1/purchase_scans/{purchase_scan}/reviewPATCH /v1/companies/{company}/purchase-scans/{purchase_scan}/review
public-api.v1.series.updatePUT /v1/series/{series}PATCH /v1/companies/{company}/series/{series}

Still PUT, because they replace the whole resource: projects.columns.reorder, tasks.comments.update and tasks.custom_fields.set. A PUT to one of the eight migrated paths answers 405.

Editing a series keeps the same partial body and the same fiscal guards (BR-SER-020, BR-SER-021, 422 with its subcode). On …/series/{series} the 405 series_immutable now carries Allow: GET, PATCH and its message points to PATCH /v1/companies/{company}/series/{id} and to POST …/archive; PUT and DELETE answer 405. The MCP tool update_series is the same tool, described as a partial PATCH; its arguments do not change.

Paths that change more than the prefix

OperationBeforeNow
public-api.v1.purchase_invoices.expense_categoriesGET /v1/purchase_invoices/expense_categoriesGET /v1/companies/{company}/purchase-invoices/expense-categories
public-api.v1.users.listGET /v1/usersGET /v1/companies/{company}/users
public-api.v1.users.meGET /v1/users/meGET /v1/companies/{company}/users/me
public-api.v1.contacts.imports.showGET /v1/contacts/imports/{id}GET /v1/companies/{company}/contacts/imports/{id}
public-api.v1.purchase_scans.listGET /v1/purchase_scansGET /v1/companies/{company}/purchase-scans
public-api.v1.purchase_scans.duplicate_resolutionPOST /v1/purchase_scans/{purchase_scan}/duplicate_resolutionPOST /v1/companies/{company}/purchase-scans/{purchase_scan}/duplicate-resolution
public-api.v1.purchase_scan_emails.listGET /v1/purchase_scan_emailsGET /v1/companies/{company}/purchase-scan-emails

Two visible consequences: the source_url of the scanner responses and the error_report_url of the contact imports now carry the axis. The 101 MB upload limit of the scanner applies to POST /v1/companies/<uuid>/purchase-scans.

Error codes and statuses

CaseBeforeNow
idempotency_key_reused: an Idempotency-Key sent again with another body409, type: idempotency_error422, same code and type. It applies to every operation that documented the 409: tasks and projects, the purchase scanner (including an upload with another file), the unattended checkout with its header, and the batch of the hours of a project
A checkout resent by external_id with another type or total409 with code: idempotency_key_reused, subcode: unattended_replay_mismatchcode: unattended_replay_mismatch, same 409, type, subcode and param: external_id. One code, one status: idempotency_key_reused is only for the header (422)
The header X-Active-ProfileAccepted by the new families400 parameter_unknown, subcode retired_active_profile_header: the company travels in the path
{company} outside the scope of the credential, nonexistent or from the other environmentNot applicable: the company came from the credential404 profile_not_found; 403 company_inactive if it is inactive
api_key_creator_not_member (scanner)Membership by pivot rowSame code; membership is decided by the access of the creator to the tax ID

409 idempotency_key_in_use (the key is in flight) does not change.

The flat /v1/clients and /v1/suppliers operations and the *_client and *_supplier MCP tools stay retired; contacts replace them under /v1/companies/{company}/contacts. The tool names search_clients, find_client_by_tax_id, create_client and bulk_create_clients keep resolving to the contact tools until 15 November 2026, flagged with _meta["io.factuarea/deprecation"].

Webhook payload version

The payload versions are now 2026-05-22, 2026-10-01 and 2026-10-05 (the latest). 2026-10-01 is the one that introduced the issued vocabulary of invoices; 2026-10-05 adds amounts as decimal strings and paid_recorded_at and paid_date. An endpoint pinned to 2026-10-01 or 2026-05-22 does not change: it keeps numeric amounts, paid_at and paid_on. An endpoint created without an explicit api_version stays on 2026-05-22, unless the request that creates it uses the REST version 2026-10-01, in which case it takes the latest one (2026-10-05). You can move an existing endpoint with PATCH and api_version. The request version Factuarea-Version: 2026-10-01 keeps its date and effect. See Webhook payload versions.

MCP

The tools take no company argument: the company comes from the token or the session. The tools of projects and tasks, notifications, users, agenda, the scanner, the VeriFactu representation, issue_invoice, list_purchase_invoice_expense_categories and the contact imports (get_contact_import, download_contact_import_errors) mirror one to one the routes of the tables below. A domain error of tools/call is now a result with isError: true, the message of the domain and _meta["com.factuarea/error"] (code, subcode, param, with the same status as the REST API).

Other contract changes

  • Contact import templates. GET /v1/companies/{company}/contacts/import/template takes format: csv (default, separated by ;) or xlsx, a workbook with the Data, Instructions, Examples and Allowed values sheets. Both come from the same column descriptors as the importer.
  • Import reports. The import resource (GET …/contacts/imports/{id} and the response of POST …/contacts/import) adds updated_count, warnings_count, outcome_kind, skip_reasons, first_diagnostics and outcomes_truncated, and each row of outcomes carries a reason. outcome_kind: nothing_changed means the import finished without creating or updating anything: do not present it as a success. The new code mapping_header_not_found is returned by contacts.import and contacts.preview_import.
  • Sales documents. Invoices (and their events) publish origin (native or historical_import); quotes and pro-forma invoices publish reference and operation_regime.
  • Task import. POST …/projects/{project}/tasks/import and the MCP tool import_project_tasks accept an optional idempotency_key and report warnings_total and warnings_truncated.
  • Scanner writes without access. On the writes of the purchase scanner (POST …/purchase-scans, …/retry, PATCH …/review, …/duplicate-resolution, …/convert, DELETE …/{purchase_scan}, …/restore), a key whose creator has no access to the company now answers 404 profile_not_found instead of 403 api_key_creator_not_member. The 403 stays on the download of the original (GET …/source) and on the MCP write tools.
  • Payment amounts in the activity. In GET …/invoices/{invoice}/activities (and the tool get_invoice_activities), metadata.amount of the events payment.payment_created and payment.payment_reversed is now a two-decimal string ("50.50"), not a number in euros.

Every operation, by family

Projects and tasks

Tasks, projects, labels, timers and the agenda (75).

OperationBeforeNow
public-api.v1.agenda.listGET /v1/agendaGET /v1/companies/{company}/agenda
public-api.v1.projects.archivePOST /v1/projects/{project}/archivePOST /v1/companies/{company}/projects/{project}/archive
public-api.v1.projects.columns.createPOST /v1/projects/{project}/columnsPOST /v1/companies/{company}/projects/{project}/columns
public-api.v1.projects.columns.deleteDELETE /v1/projects/{project}/columns/{column}DELETE /v1/companies/{company}/projects/{project}/columns/{column}
public-api.v1.projects.columns.listGET /v1/projects/{project}/columnsGET /v1/companies/{company}/projects/{project}/columns
public-api.v1.projects.columns.reorderPUT /v1/projects/{project}/columns/reorderPUT /v1/companies/{company}/projects/{project}/columns/reorder
public-api.v1.projects.columns.updatePUT /v1/projects/{project}/columns/{column}PATCH /v1/companies/{company}/projects/{project}/columns/{column}
public-api.v1.projects.createPOST /v1/projectsPOST /v1/companies/{company}/projects
public-api.v1.projects.custom_fields.createPOST /v1/projects/{project}/custom-fieldsPOST /v1/companies/{company}/projects/{project}/custom-fields
public-api.v1.projects.custom_fields.deleteDELETE /v1/projects/{project}/custom-fields/{field}DELETE /v1/companies/{company}/projects/{project}/custom-fields/{field}
public-api.v1.projects.custom_fields.listGET /v1/projects/{project}/custom-fieldsGET /v1/companies/{company}/projects/{project}/custom-fields
public-api.v1.projects.custom_fields.updatePUT /v1/projects/{project}/custom-fields/{field}PATCH /v1/companies/{company}/projects/{project}/custom-fields/{field}
public-api.v1.projects.deleteDELETE /v1/projects/{project}DELETE /v1/companies/{company}/projects/{project}
public-api.v1.projects.find_by_keyPOST /v1/projects/find-by-keyPOST /v1/companies/{company}/projects/find-by-key
public-api.v1.projects.listGET /v1/projectsGET /v1/companies/{company}/projects
public-api.v1.projects.showGET /v1/projects/{project}GET /v1/companies/{company}/projects/{project}
public-api.v1.projects.tasks.exportGET /v1/projects/{project}/tasks/exportGET /v1/companies/{company}/projects/{project}/tasks/export
public-api.v1.projects.tasks.importPOST /v1/projects/{project}/tasks/importPOST /v1/companies/{company}/projects/{project}/tasks/import
public-api.v1.projects.time_invoices.createPOST /v1/projects/{project}/time-invoicesPOST /v1/companies/{company}/projects/{project}/time-invoices
public-api.v1.projects.time_invoices.previewPOST /v1/projects/{project}/time-invoices/previewPOST /v1/companies/{company}/projects/{project}/time-invoices/preview
public-api.v1.projects.time_summary.showGET /v1/projects/{project}/time-summaryGET /v1/companies/{company}/projects/{project}/time-summary
public-api.v1.projects.unarchivePOST /v1/projects/{project}/unarchivePOST /v1/companies/{company}/projects/{project}/unarchive
public-api.v1.projects.updatePUT /v1/projects/{project}PATCH /v1/companies/{company}/projects/{project}
public-api.v1.task_labels.createPOST /v1/task-labelsPOST /v1/companies/{company}/task-labels
public-api.v1.task_labels.deleteDELETE /v1/task-labels/{label}DELETE /v1/companies/{company}/task-labels/{label}
public-api.v1.task_labels.listGET /v1/task-labelsGET /v1/companies/{company}/task-labels
public-api.v1.task_labels.showGET /v1/task-labels/{label}GET /v1/companies/{company}/task-labels/{label}
public-api.v1.task_labels.updatePUT /v1/task-labels/{label}PATCH /v1/companies/{company}/task-labels/{label}
public-api.v1.task_timers.currentGET /v1/task-timers/currentGET /v1/companies/{company}/task-timers/current
public-api.v1.task_timers.stopPOST /v1/task-timers/stopPOST /v1/companies/{company}/task-timers/stop
public-api.v1.tasks.activities.listGET /v1/tasks/{task}/activitiesGET /v1/companies/{company}/tasks/{task}/activities
public-api.v1.tasks.assignPOST /v1/tasks/{task}/assignPOST /v1/companies/{company}/tasks/{task}/assign
public-api.v1.tasks.attachments.createPOST /v1/tasks/{task}/attachmentsPOST /v1/companies/{company}/tasks/{task}/attachments
public-api.v1.tasks.attachments.deleteDELETE /v1/tasks/{task}/attachments/{attachment}DELETE /v1/companies/{company}/tasks/{task}/attachments/{attachment}
public-api.v1.tasks.attachments.downloadGET /v1/tasks/{task}/attachments/{attachment}/downloadGET /v1/companies/{company}/tasks/{task}/attachments/{attachment}/download
public-api.v1.tasks.attachments.listGET /v1/tasks/{task}/attachmentsGET /v1/companies/{company}/tasks/{task}/attachments
public-api.v1.tasks.attachments.showGET /v1/tasks/{task}/attachments/{attachment}GET /v1/companies/{company}/tasks/{task}/attachments/{attachment}
public-api.v1.tasks.bulk_deletePOST /v1/tasks/bulk-deletePOST /v1/companies/{company}/tasks/bulk-delete
public-api.v1.tasks.bulk_statusPOST /v1/tasks/bulk-statusPOST /v1/companies/{company}/tasks/bulk-status
public-api.v1.tasks.bulk_updatePOST /v1/tasks/bulk-updatePOST /v1/companies/{company}/tasks/bulk-update
public-api.v1.tasks.comments.createPOST /v1/tasks/{task}/commentsPOST /v1/companies/{company}/tasks/{task}/comments
public-api.v1.tasks.comments.deleteDELETE /v1/tasks/{task}/comments/{comment}DELETE /v1/companies/{company}/tasks/{task}/comments/{comment}
public-api.v1.tasks.comments.listGET /v1/tasks/{task}/commentsGET /v1/companies/{company}/tasks/{task}/comments
public-api.v1.tasks.comments.updatePUT /v1/tasks/{task}/comments/{comment}PUT /v1/companies/{company}/tasks/{task}/comments/{comment}
public-api.v1.tasks.createPOST /v1/tasksPOST /v1/companies/{company}/tasks
public-api.v1.tasks.custom_fields.setPUT /v1/tasks/{task}/custom-fields/{field}PUT /v1/companies/{company}/tasks/{task}/custom-fields/{field}
public-api.v1.tasks.deleteDELETE /v1/tasks/{task}DELETE /v1/companies/{company}/tasks/{task}
public-api.v1.tasks.duplicatePOST /v1/tasks/{task}/duplicatePOST /v1/companies/{company}/tasks/{task}/duplicate
public-api.v1.tasks.entity_links.createPOST /v1/tasks/{task}/entity-linksPOST /v1/companies/{company}/tasks/{task}/entity-links
public-api.v1.tasks.entity_links.deleteDELETE /v1/tasks/{task}/entity-links/{link}DELETE /v1/companies/{company}/tasks/{task}/entity-links/{link}
public-api.v1.tasks.entity_links.listGET /v1/tasks/{task}/entity-linksGET /v1/companies/{company}/tasks/{task}/entity-links
public-api.v1.tasks.external_links.createPOST /v1/tasks/{task}/external-linksPOST /v1/companies/{company}/tasks/{task}/external-links
public-api.v1.tasks.external_links.deleteDELETE /v1/tasks/{task}/external-links/{link}DELETE /v1/companies/{company}/tasks/{task}/external-links/{link}
public-api.v1.tasks.external_links.listGET /v1/tasks/{task}/external-linksGET /v1/companies/{company}/tasks/{task}/external-links
public-api.v1.tasks.find_by_keyPOST /v1/tasks/find-by-keyPOST /v1/companies/{company}/tasks/find-by-key
public-api.v1.tasks.labels.assignPOST /v1/tasks/{task}/labelsPOST /v1/companies/{company}/tasks/{task}/labels
public-api.v1.tasks.labels.unassignDELETE /v1/tasks/{task}/labels/{label}DELETE /v1/companies/{company}/tasks/{task}/labels/{label}
public-api.v1.tasks.linkedGET /v1/tasks/linkedGET /v1/companies/{company}/tasks/linked
public-api.v1.tasks.movePOST /v1/tasks/{task}/movePOST /v1/companies/{company}/tasks/{task}/move
public-api.v1.tasks.relations.createPOST /v1/tasks/{task}/relationsPOST /v1/companies/{company}/tasks/{task}/relations
public-api.v1.tasks.relations.deleteDELETE /v1/tasks/{task}/relations/{relation}DELETE /v1/companies/{company}/tasks/{task}/relations/{relation}
public-api.v1.tasks.relations.listGET /v1/tasks/{task}/relationsGET /v1/companies/{company}/tasks/{task}/relations
public-api.v1.tasks.repositionPOST /v1/tasks/{task}/repositionPOST /v1/companies/{company}/tasks/{task}/reposition
public-api.v1.tasks.searchGET /v1/tasksGET /v1/companies/{company}/tasks
public-api.v1.tasks.showGET /v1/tasks/{task}GET /v1/companies/{company}/tasks/{task}
public-api.v1.tasks.statusPOST /v1/tasks/{task}/statusPOST /v1/companies/{company}/tasks/{task}/status
public-api.v1.tasks.time_entries.createPOST /v1/tasks/{task}/time-entriesPOST /v1/companies/{company}/tasks/{task}/time-entries
public-api.v1.tasks.time_entries.deleteDELETE /v1/tasks/{task}/time-entries/{time_entry}DELETE /v1/companies/{company}/tasks/{task}/time-entries/{time_entry}
public-api.v1.tasks.time_entries.listGET /v1/tasks/{task}/time-entriesGET /v1/companies/{company}/tasks/{task}/time-entries
public-api.v1.tasks.time_entries.showGET /v1/tasks/{task}/time-entries/{time_entry}GET /v1/companies/{company}/tasks/{task}/time-entries/{time_entry}
public-api.v1.tasks.time_entries.updatePUT /v1/tasks/{task}/time-entries/{time_entry}PATCH /v1/companies/{company}/tasks/{task}/time-entries/{time_entry}
public-api.v1.tasks.timer.startPOST /v1/tasks/{task}/timer/startPOST /v1/companies/{company}/tasks/{task}/timer/start
public-api.v1.tasks.unassignPOST /v1/tasks/{task}/unassignPOST /v1/companies/{company}/tasks/{task}/unassign
public-api.v1.tasks.updatePUT /v1/tasks/{task}PATCH /v1/companies/{company}/tasks/{task}
public-api.v1.tasks.upload_links.createPOST /v1/tasks/{task}/upload-linksPOST /v1/companies/{company}/tasks/{task}/upload-links

Purchase scanner

The purchase scanner and its mailbox (12). Segments are in kebab-case.

OperationBeforeNow
public-api.v1.purchase_scan_emails.listGET /v1/purchase_scan_emailsGET /v1/companies/{company}/purchase-scan-emails
public-api.v1.purchase_scans.archiveDELETE /v1/purchase_scans/{purchase_scan}DELETE /v1/companies/{company}/purchase-scans/{purchase_scan}
public-api.v1.purchase_scans.convertPOST /v1/purchase_scans/{purchase_scan}/convertPOST /v1/companies/{company}/purchase-scans/{purchase_scan}/convert
public-api.v1.purchase_scans.createPOST /v1/purchase_scansPOST /v1/companies/{company}/purchase-scans
public-api.v1.purchase_scans.duplicate_resolutionPOST /v1/purchase_scans/{purchase_scan}/duplicate_resolutionPOST /v1/companies/{company}/purchase-scans/{purchase_scan}/duplicate-resolution
public-api.v1.purchase_scans.listGET /v1/purchase_scansGET /v1/companies/{company}/purchase-scans
public-api.v1.purchase_scans.restorePOST /v1/purchase_scans/{purchase_scan}/restorePOST /v1/companies/{company}/purchase-scans/{purchase_scan}/restore
public-api.v1.purchase_scans.retryPOST /v1/purchase_scans/{purchase_scan}/retryPOST /v1/companies/{company}/purchase-scans/{purchase_scan}/retry
public-api.v1.purchase_scans.reviewPUT /v1/purchase_scans/{purchase_scan}/reviewPATCH /v1/companies/{company}/purchase-scans/{purchase_scan}/review
public-api.v1.purchase_scans.showGET /v1/purchase_scans/{purchase_scan}GET /v1/companies/{company}/purchase-scans/{purchase_scan}
public-api.v1.purchase_scans.sourceGET /v1/purchase_scans/{purchase_scan}/sourceGET /v1/companies/{company}/purchase-scans/{purchase_scan}/source
public-api.v1.purchase_scans.statsGET /v1/purchase_scans/statsGET /v1/companies/{company}/purchase-scans/stats

Notifications

The notifications of the credential holder (3).

OperationBeforeNow
public-api.v1.notifications.listGET /v1/notificationsGET /v1/companies/{company}/notifications
public-api.v1.notifications.mark_all_readPOST /v1/notifications/mark-all-readPOST /v1/companies/{company}/notifications/mark-all-read
public-api.v1.notifications.readPOST /v1/notifications/{notification}/readPOST /v1/companies/{company}/notifications/{notification}/read

VeriFactu: representation and blocked records

Representation and retry of blocked records (4).

OperationBeforeNow
public-api.v1.verifactu.records.retry_blockedPOST /v1/verifactu/records/retry-blockedPOST /v1/companies/{company}/verifactu/records/retry-blocked
public-api.v1.verifactu.representation.registerPOST /v1/verifactu/representationPOST /v1/companies/{company}/verifactu/representation
public-api.v1.verifactu.representation.revokeDELETE /v1/verifactu/representationDELETE /v1/companies/{company}/verifactu/representation
public-api.v1.verifactu.representation.showGET /v1/verifactu/representationGET /v1/companies/{company}/verifactu/representation

Invoices, contact imports, users, expense categories and series

(7)

OperationBeforeNow
public-api.v1.invoices.issuePOST /v1/invoices/{invoice}/issuePOST /v1/companies/{company}/invoices/{invoice}/issue
public-api.v1.contacts.imports.showGET /v1/contacts/imports/{id}GET /v1/companies/{company}/contacts/imports/{id}
public-api.v1.contacts.imports.errorsGET /v1/contacts/imports/{id}/errors.csvGET /v1/companies/{company}/contacts/imports/{id}/errors.csv
public-api.v1.users.listGET /v1/usersGET /v1/companies/{company}/users
public-api.v1.users.meGET /v1/users/meGET /v1/companies/{company}/users/me
public-api.v1.purchase_invoices.expense_categoriesGET /v1/purchase_invoices/expense_categoriesGET /v1/companies/{company}/purchase-invoices/expense-categories
public-api.v1.series.updatePUT /v1/series/{series}PATCH /v1/companies/{company}/series/{series}

Updated endpoints113

EndpointDescription
GET/v1/companies/{company}/agendaList agenda items
POST/v1/companies/{company}/contacts/importImport contacts
GET/v1/companies/{company}/contacts/import/templateDownload the contact import template
GET/v1/companies/{company}/contacts/imports/{id}/errors.csvDownload contact import errors
GET/v1/companies/{company}/contacts/imports/{id}Retrieve a contact import
POST/v1/companies/{company}/contacts/import/previewPreview a contact import
GET/v1/companies/{company}/delivery-notesList all delivery notes
GET/v1/companies/{company}/delivery-notes/{delivery_note}Retrieve a delivery note
GET/v1/companies/{company}/invoices/{invoice}/activitiesList invoice activity
POST/v1/companies/{company}/invoices/{invoice}/issueIssue an invoice
GET/v1/companies/{company}/invoicesList all invoices
GET/v1/companies/{company}/invoices/{invoice}Retrieve an invoice
GET/v1/companies/{company}/notificationsList notifications
POST/v1/companies/{company}/notifications/mark-all-readMark all notifications as read
POST/v1/companies/{company}/notifications/{notification}/readMark a notification as read
GET/v1/companies/{company}/proformasList all proformas
GET/v1/companies/{company}/proformas/{proforma}Retrieve a proforma
POST/v1/companies/{company}/projects/{project}/archiveArchive a project
POST/v1/companies/{company}/projects/{project}/columnsCreate a project column
DEL/v1/companies/{company}/projects/{project}/columns/{column}Delete a project column
GET/v1/companies/{company}/projects/{project}/columnsList project columns
PUT/v1/companies/{company}/projects/{project}/columns/reorderReorder project columns
PATCH/v1/companies/{company}/projects/{project}/columns/{column}Update a project column
POST/v1/companies/{company}/projectsCreate a project
POST/v1/companies/{company}/projects/{project}/custom-fieldsCreate a project custom field
DEL/v1/companies/{company}/projects/{project}/custom-fields/{field}Delete a project custom field
GET/v1/companies/{company}/projects/{project}/custom-fieldsList project custom fields
PATCH/v1/companies/{company}/projects/{project}/custom-fields/{field}Update a project custom field
DEL/v1/companies/{company}/projects/{project}Delete a project
POST/v1/companies/{company}/projects/find-by-keyFind a project by key
GET/v1/companies/{company}/projectsList projects
GET/v1/companies/{company}/projects/{project}Retrieve a project
GET/v1/companies/{company}/projects/{project}/tasks/exportExport project tasks
POST/v1/companies/{company}/projects/{project}/tasks/importImport tasks into a project
POST/v1/companies/{company}/projects/{project}/time-invoicesInvoice project time
POST/v1/companies/{company}/projects/{project}/time-invoices/previewPreview a project time invoice
GET/v1/companies/{company}/projects/{project}/time-summaryRetrieve a project time summary
POST/v1/companies/{company}/projects/{project}/unarchiveUnarchive a project
PATCH/v1/companies/{company}/projects/{project}Update a project
GET/v1/companies/{company}/purchase-invoices/expense-categoriesList expense categories
GET/v1/companies/{company}/purchase-scan-emailsList purchase scanner emails
DEL/v1/companies/{company}/purchase-scans/{purchase_scan}Archive a purchase scan
POST/v1/companies/{company}/purchase-scans/{purchase_scan}/convertCreate the expense from a scan
POST/v1/companies/{company}/purchase-scansUpload documents to the purchase scanner
POST/v1/companies/{company}/purchase-scans/{purchase_scan}/duplicate-resolutionResolve a duplicate purchase scan
GET/v1/companies/{company}/purchase-scansList purchase scans
POST/v1/companies/{company}/purchase-scans/{purchase_scan}/restoreRestore an archived purchase scan
POST/v1/companies/{company}/purchase-scans/{purchase_scan}/retryRetry a failed purchase scan
PATCH/v1/companies/{company}/purchase-scans/{purchase_scan}/reviewSave the review of a purchase scan
GET/v1/companies/{company}/purchase-scans/{purchase_scan}Retrieve a purchase scan
GET/v1/companies/{company}/purchase-scans/{purchase_scan}/sourceDownload the original document
GET/v1/companies/{company}/purchase-scans/statsGet purchase scanner stats
GET/v1/companies/{company}/quotesList all quotes
GET/v1/companies/{company}/quotes/{quote}Retrieve a quote
PATCH/v1/companies/{company}/series/{series}Update a series
POST/v1/companies/{company}/task-labelsCreate a task label
DEL/v1/companies/{company}/task-labels/{label}Delete a task label
GET/v1/companies/{company}/task-labelsList task labels
GET/v1/companies/{company}/task-labels/{label}Retrieve a task label
PATCH/v1/companies/{company}/task-labels/{label}Update a task label
GET/v1/companies/{company}/task-timers/currentRetrieve the running task timer
POST/v1/companies/{company}/task-timers/stopStop the running task timer
GET/v1/companies/{company}/tasks/{task}/activitiesList task activity
POST/v1/companies/{company}/tasks/{task}/assignAssign a task
POST/v1/companies/{company}/tasks/{task}/attachmentsUpload a task attachment
DEL/v1/companies/{company}/tasks/{task}/attachments/{attachment}Delete a task attachment
GET/v1/companies/{company}/tasks/{task}/attachments/{attachment}/downloadDownload a task attachment
GET/v1/companies/{company}/tasks/{task}/attachmentsList task attachments
GET/v1/companies/{company}/tasks/{task}/attachments/{attachment}Retrieve a task attachment
POST/v1/companies/{company}/tasks/bulk-deleteBulk delete tasks
POST/v1/companies/{company}/tasks/bulk-statusBulk change task status
POST/v1/companies/{company}/tasks/bulk-updateBulk update tasks
POST/v1/companies/{company}/tasks/{task}/commentsCreate a task comment
DEL/v1/companies/{company}/tasks/{task}/comments/{comment}Delete a task comment
GET/v1/companies/{company}/tasks/{task}/commentsList task comments
PUT/v1/companies/{company}/tasks/{task}/comments/{comment}Update a task comment
POST/v1/companies/{company}/tasksCreate a task
PUT/v1/companies/{company}/tasks/{task}/custom-fields/{field}Set a task custom field value
DEL/v1/companies/{company}/tasks/{task}Delete a task
POST/v1/companies/{company}/tasks/{task}/duplicateDuplicate a task
POST/v1/companies/{company}/tasks/{task}/entity-linksLink a task to an entity
DEL/v1/companies/{company}/tasks/{task}/entity-links/{link}Unlink a task from an entity
GET/v1/companies/{company}/tasks/{task}/entity-linksList task entity links
POST/v1/companies/{company}/tasks/{task}/external-linksCreate a task external link
DEL/v1/companies/{company}/tasks/{task}/external-links/{link}Delete a task external link
GET/v1/companies/{company}/tasks/{task}/external-linksList task external links
POST/v1/companies/{company}/tasks/find-by-keyFind a task by key
POST/v1/companies/{company}/tasks/{task}/labelsAssign a label to a task
DEL/v1/companies/{company}/tasks/{task}/labels/{label}Remove a label from a task
GET/v1/companies/{company}/tasks/linkedList tasks linked to an entity
POST/v1/companies/{company}/tasks/{task}/moveMove a task to another project
POST/v1/companies/{company}/tasks/{task}/relationsCreate a task relation
DEL/v1/companies/{company}/tasks/{task}/relations/{relation}Delete a task relation
GET/v1/companies/{company}/tasks/{task}/relationsList task relations
POST/v1/companies/{company}/tasks/{task}/repositionReposition a task
GET/v1/companies/{company}/tasksSearch tasks
GET/v1/companies/{company}/tasks/{task}Retrieve a task
POST/v1/companies/{company}/tasks/{task}/statusChange task status
POST/v1/companies/{company}/tasks/{task}/time-entriesCreate a task time entry
DEL/v1/companies/{company}/tasks/{task}/time-entries/{time_entry}Delete a task time entry
GET/v1/companies/{company}/tasks/{task}/time-entriesList task time entries
GET/v1/companies/{company}/tasks/{task}/time-entries/{time_entry}Retrieve a task time entry
PATCH/v1/companies/{company}/tasks/{task}/time-entries/{time_entry}Update a task time entry
POST/v1/companies/{company}/tasks/{task}/timer/startStart a task timer
POST/v1/companies/{company}/tasks/{task}/unassignUnassign a task
PATCH/v1/companies/{company}/tasks/{task}Update a task
POST/v1/companies/{company}/tasks/{task}/upload-linksCreate a task upload link
GET/v1/companies/{company}/usersList users
GET/v1/companies/{company}/users/meRetrieve the current user
POST/v1/companies/{company}/verifactu/records/retry-blockedRetry every blocked VeriFactu record
POST/v1/companies/{company}/verifactu/representationRegister a representation
DEL/v1/companies/{company}/verifactu/representationRevoke the active representation
GET/v1/companies/{company}/verifactu/representationRetrieve the active representation

On this page

Need a hand?Contact support