2027-01-01 Release Notes

Attendance > Shift

A shift — one worked-time interval for an employee (a clock-in and clock-out on a given day), the atomic record of tracked attendance. It carries the day it counts towards, its clock-in and clock-out, whether it is workable, and how it was clocked.

Request

New Field clock_in_work_area_id has been added
Identifier of the work area where the employee clocked in. it must belong to the workplace sent in workplace_id

Request

New Field clock_out_work_area_id has been added
Identifier of the work area where the employee clocked out. it must belong to the workplace of the open shift

Request

New Field clock_in_work_area_id has been added
Id of the work area where the employee clocked in. it must belong to the workplace sent in workplace_id

New Field clock_out_work_area_id has been added
Id of the work area where the employee clocked out. it must belong to the workplace sent in workplace_id

Request

New Field clock_in_work_area_id has been added
Identifier of the work area where the employee clocked in. it must belong to the shift's workplace

New Field clock_out_work_area_id has been added
Identifier of the work area where the employee clocked out. it must belong to the shift's workplace

All Responses

New Field clock_in_work_area_id has been added
Identifier of the work area where the employee clocked in

New Field clock_out_work_area_id has been added
Identifier of the work area where the employee clocked out

Authentication > Email change

Change the email an employee uses to log in to Factorial. A change stays pending until the employee confirms the new email. It is applied straight away only when the new email belongs to a domain the company has verified and automatic confirmation is turned on in the security settings.

New Endpoint

New Endpoint

Compensations > Payroll run participant

Payroll run participant — an employee taking part in a regular payroll run, whose payroll results can be imported through compensations/payroll_results bulk_create

New Endpoint

CostCenters > Resource distribution

How the cost of a record, such as an expense or a purchase invoice, is split across cost centers: one row per cost center with its share. When an expense keeps its employee's default cost centers, the rows are the employee's split in force on the expense date; when it was charged to other cost centers, they are the ones set on the expense. For a financial document, such as a purchase invoice, the rows are the cost centers set on it. Records the caller cannot read through their own resource are left out. Resolve cost_center_id with the finance/cost_centers resource.

New Endpoint

Documents > Document

Documents

Request

New Field deleted_by_id has been added
Access identifier recorded as the one who moved the documents to the trash bin, refers to /employees/employees endpoint. required for api key requests; requests made on behalf of a user ignore it and record that user.

Employees > Employee

An employee of the company — their identity, organisational placement (manager, teams, location, legal entity) and lifecycle (active, terminating, terminated). The central record the rest of the HR data hangs off.

Request

New Field job_title has been added
Job title of the employee's first contract, at most 255 characters.

Request

New Field identifiers has been added
Return only the employees whose identity document (the identifier field: national id, nie, passport…) is one of these. dots, dashes, spaces, letter case and leading zeros are ignored, so 12.345.678-z and 0012345678z both find an employee stored as 12345678z. at most 100 values. combined with social_security_numbers, an employee has to match both. terminated employees you can see are matched too; add only_active to leave them out. only employees whose personal information you can read are matched.

New Field social_security_numbers has been added
Return only the employees whose social security number (the social_security_number field; in spain, the nuss or naf) is one of these. anything other than a digit is ignored, and so are leading zeros, so 08/08511662/35 finds an employee stored as 080851166235. at most 100 values. combined with identifiers, an employee has to match both. terminated employees you can see are matched too; add only_active to leave them out. only employees whose personal information you can read are matched.

All Responses

New Field birthplace_postal_code has been added
5-digit french postal code of the employee's birthplace. only set for employees in a french legal entity.

EmployeeUpdates > Contract change

Employee update in contract changes

All Responses

New Field type has been added
The kind of contract change. contract is an update to the contract conditions. contract_deactivation and contract_reactivation close and reopen an activity period of a fixed-discontinuous contract, and carry the conditions of the contract version in force on that date.

New Field activity_changed_on has been added
The date the activity period closed or reopened, for a contract_deactivation or contract_reactivation. null for a plain contract change, whose date is effective_on. the other dates on this payload belong to the contract version in force on this date, not to the activity change itself.

Expenses > Per diem

A per-diem allowance — the detail record behind an expensable of type "perdiem", covering a fixed daily allowance for the days of a business trip instead of itemised receipts.

All Responses

New Field category_id has been added
The id of the custom category of the per diem (a per diem subcategory, or the per diem category itself).

Finance > Financial document

Financial Document is a document that represents a financial transaction. Could be an invoice, a credit note or receipt.

All Responses

New Field approval_rejected_at has been added
When the current review round of the finance approval flow turned this purchase invoice down. a rejection is terminal for its own round -- the document stops being editable and deletable, and a correction goes through a credit note rather than a second review of the same round -- but it is not terminal for the document: a new round can open, for instance when the expense behind the invoice is restarted, and opening one clears this field. so it can go back to null. null also on a document that was approved, is still pending a decision, or never entered the flow.

New Field approval_approved_at has been added
When the current review round of the finance approval flow approved this purchase invoice. not the same question as validated_at: approving through the finance action seals both, but a document can be validated on its own through an update, and one that never entered the flow is neither. like its counterpart it reports the current round only, so opening a new one clears it and it can go back to null.

Finance > Financial document line item

A line of a purchase financial document (invoice or credit note). Lines are written through the financial document create and update endpoints; this resource only reads them.

New Endpoint

New Endpoint

Goals > Goal

Goal

New Endpoint

New Endpoint

Goals > Target period

Goal Target Periods

New Endpoint

New Endpoint

Integrations > Sync run output

Integrations SyncRunOutput represents the output file produced by a sync run (e.g. a CSV export). This endpoint is designed to be used by integrators building an integration between Factorial and an external system through the Factorial Integration Framework.

Request

New Field digests has been added
Optional json array with the digest of the record behind each syncable sync run in the file, as synced, used to detect later changes to it. only kept for integrations whose app computes the digest; each digest is at most 64 characters.

Integrations > Syncable state

The sync or export current state of a syncable object, along with validation messages and errors

Request

New Field sync_type has been added
The type of synchronization to filter by, in "namespace/resource" form. takes precedence over resource_syncable_type, which is ambiguous when several sync types share a resource (for example employees/employee).

Integrations > Syncable sync run

Integrations SyncableSyncRuns represents all the resources that are included in a sync or export, in other words, a SyncRun. This endpoint is designed to be used by integrators building an integration, in order to fetch all the data that needs to be synced or exported in a given run.

Request

New Field payload_digest has been added
Digest of the record as it was synced, used to detect later changes to it. only kept for integrations whose app computes the digest; at most 64 characters.

JobCatalog > Node attribute

JobCatalog Node Attributes

All Responses

New Field value_additional_compensation has been added
Additional-compensation payload with amount strategy, currency, recurrence and either a single amount or a min/max range (cents). the payroll concept is identified by the attribute's id (attribute_id), not the payload. internal only for now (not exposed in public rest responses).

ProjectManagement > Project

A project of the company — a named initiative (internal or for a client) that time and costs are tracked against. Expenses, time records and budgets can be charged to a project; billable projects recharge those costs to a client.

Request

New Field restrict_booking_by_phase has been added
When true, employees can only book time on the subprojects (phases) they are assigned to. leave it out to keep the current value.

All Responses

New Field restrict_booking_by_phase has been added
When true (and the phase assignment feature is enabled for the company), employees can only book time on the subprojects (phases) they are assigned to.

ProjectManagement > Subproject worker

Project Management Subproject Workers

New Endpoint

New Endpoint

New Endpoint

New Endpoint

New Endpoint

Timeoff > Allowance

An Allowance represents how a Time off counter accrues and deducts days.

All Responses

New Field limit_negative_counter_type has been added
How far the counter is allowed to go negative when negative_counter_type is negative_counter_enabled. "no_limit" allows any negative balance; "limit_negative_counter" only allows a negative the next cycle can cover. always set when negative counters are enabled; null when they are disabled.

Timeoff > Allowance incidence

Timeoff allowance incidence

New Endpoint

New Endpoint

New Endpoint

Timeoff > Leave

A time off leave — one employee's request to be absent for a date range (or part of a day) under a given leave type. Its approved status is tri-state — null while the request is pending, true once approved, false once rejected.

New Endpoint

New Endpoint

Timeoff > Leave change request

A request to change, or cancel, a time off leave that is already approved. It goes through the employee's approval flow and the leave keeps its approved values until the request is approved. status is pending, approved, rejected or withdrawn.

New Endpoint

New Endpoint

New Endpoint

New Endpoint

Webhooks

Payloads

New Field clock_in_work_area_id has been added
Identifier of the work area where the employee clocked in

New Field clock_out_work_area_id has been added
Identifier of the work area where the employee clocked out

Payloads

New Field clock_in_work_area_id has been added
Identifier of the work area where the employee clocked in

New Field clock_out_work_area_id has been added
Identifier of the work area where the employee clocked out

Payloads

New Field clock_in_work_area_id has been added
Identifier of the work area where the employee clocked in

New Field clock_out_work_area_id has been added
Identifier of the work area where the employee clocked out

Payloads

New Field clock_in_work_area_id has been added
Identifier of the work area where the employee clocked in

New Field clock_out_work_area_id has been added
Identifier of the work area where the employee clocked out

Payloads

New Field clock_in_work_area_id has been added
Identifier of the work area where the employee clocked in

New Field clock_out_work_area_id has been added
Identifier of the work area where the employee clocked out

Payloads

New Field clock_in_work_area_id has been added
Identifier of the work area where the employee clocked in

New Field clock_out_work_area_id has been added
Identifier of the work area where the employee clocked out

Payloads

New Field clock_in_work_area_id has been added
Identifier of the work area where the employee clocked in

New Field clock_out_work_area_id has been added
Identifier of the work area where the employee clocked out

Payloads

New Field clock_in_work_area_id has been added
Identifier of the work area where the employee clocked in

New Field clock_out_work_area_id has been added
Identifier of the work area where the employee clocked out

Payloads

New Field clock_in_work_area_id has been added
Identifier of the work area where the employee clocked in

New Field clock_out_work_area_id has been added
Identifier of the work area where the employee clocked out

Payloads

New Field birthplace_postal_code has been added
5-digit french postal code of the employee's birthplace. only set for employees in a french legal entity.

Payloads

New Field birthplace_postal_code has been added
5-digit french postal code of the employee's birthplace. only set for employees in a french legal entity.

Payloads

New Field birthplace_postal_code has been added
5-digit french postal code of the employee's birthplace. only set for employees in a french legal entity.

Payloads

New Field birthplace_postal_code has been added
5-digit french postal code of the employee's birthplace. only set for employees in a french legal entity.

Payloads

New Field birthplace_postal_code has been added
5-digit french postal code of the employee's birthplace. only set for employees in a french legal entity.

Payloads

New Field birthplace_postal_code has been added
5-digit french postal code of the employee's birthplace. only set for employees in a french legal entity.