2026-10-01 Release Notes
Attendance > Edit timesheet request
An edit timesheet request — an employee's request to create, edit or delete a shift on their timesheet, going through an approval flow. request_type says which of the three it is, and approved is tri-state — null while the request is pending, true once approved, false once rejected.
Request
New Field workplace_id has been added
Id of the workplace (location) for the shift.
New Field clock_in_work_area_id has been added
Id of the clock-in work area within the workplace.
New Field clock_out_work_area_id has been added
Id of the clock-out work area within the workplace.
Request
New Field workplace_id has been added
Id of the workplace (location) for the shift.
New Field clock_in_work_area_id has been added
Id of the clock-in work area within the workplace.
New Field clock_out_work_area_id has been added
Id of the clock-out work area within the workplace.
All Responses
New Field workplace_id has been added
Id of the workplace (location) for the shift
New Field clock_in_work_area_id has been added
Id of the clock-in work area within the workplace
New Field clock_out_work_area_id has been added
Id of the clock-out work area within the workplace
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 workplace_id has been added
Id of the location related
New Field project_worker_id has been added
Id of the project worker the shift is imputed to. a time record for that project is created with the shift.
Attendance > Worked time
Attendance worked time
Request
New Field ids has been added
Composite worked time id combining the employee_id and date, formatted as <employee_id>
New Endpoint
Companies > Legal entity
A legal entity of the company — a registered business entity with its own country, currency and legal name. Employees are contracted under a legal entity and finance records are booked against one; a company typically has one legal entity per country it operates in.
All Responses
New Field siret has been added
Siret number (france-specific). system for identifying french establishments. 14-digit identifier for each french establishment.
Compensations > Additional compensation
An additional compensation attached to a contract version — a recurring or one-off amount (Fixed, Variable, or PerWorkedDay strategy) that feeds into the employee's payroll runs.
New Endpoint
New Endpoint
New Endpoint
New Endpoint
New Endpoint
Compensations > Concept
A compensation concept — the type of pay item a compensation row is classified under (a fixed salary, a bonus, a deduction, ...), carrying its accounting category and the unit its amounts are measured in.
Request
New Field enabled has been added
When true, returns active concepts only; when false, only inactive
New Field default has been added
Set to true to return only the concepts factorial ships by default, leaving out the ones the company created itself. passing false has no effect.
All Responses
New Field enabled has been added
Whether the concept is enabled for the company
New Field created_at has been added
Timestamp when the concept was created
New Field updated_at has been added
Timestamp when the concept was last updated
New Endpoint
New Endpoint
Compensations > Cycle
A compensation cycle — a recurring payroll schedule (e.g. monthly) scoped to a country, currency and optional people group, that payroll runs are grouped under.
New Endpoint
Compensations > Employees compensation
An employee compensation record represents a single concept's amount entry for one employee within a specific payroll run — the granular input produced by an amount strategy, optionally overridden by a reviewer. Multiple entries for the same employee and concept can exist (e.g. one per source). For the final, aggregated amount per concept plus the payroll results the bookkeeper calculated for that payroll run, use compensations/payroll_run_employees_compensation instead.
New Endpoint
New Endpoint
New Endpoint
New Endpoint
New Endpoint
Compensations > Payroll result
Payroll Result — employee compensation rows with result_type=payroll_result, readable and importable
New Endpoint
New Endpoint
New Endpoint
Compensations > Payroll run
A payroll run — the batch that compensates a set of employees for a period, moving through a lifecycle (open → completed) and lockable once finalised. It carries the period it covers, its status and whether it is locked.
New Endpoint
Compensations > Payroll run employees compensation
A payroll-run employee compensation record represents the final amount for one concept and one employee within a specific payroll run, aggregated from the individual entries in compensations/employees_compensation. It also includes the payroll results the bookkeeper calculated during that payroll run (net pay, taxes, etc.), distinguished from aggregated compensations via result_type.
New Endpoint
New Endpoint
Contracts > Contract
An employment contract held by an employee — the container under which versioned contract terms (salary, hours, dates) live. It has a start/end date, a country and legal entity, and may be discontinuous (intermittent).
New Endpoint
New Endpoint
Contracts > Contract activity period
A single stretch of time within a contract during which the employee is either working (activity) or not working (inactivity). A change of terms, such as a raise or a promotion, does not break a period: consecutive stretches of the same kind are reported as one, so a continuous contract resolves to a single activity period. Discontinuous (intermittent) contracts alternate activity and inactivity, so use this resource to know when such an employee is actually working. Periods are read one contract at a time.
New Endpoint
Contracts > Contract version
A contract version — a versioned, effective-dated snapshot of an employee's contract terms (salary, working hours, job title, leveling, trial period, dates). The current terms are the version flagged is_reference.
Request
New Field country_data_inputs has been added
List of country-specific field inputs (e.g. contract_type). each entry sets one templated field. discover valid field_name/value_id combinations per country and legal entity via get /resources/contracts/materialized_templates.
Request
New Field country_data_inputs has been added
List of country-specific field inputs (e.g. contract_type). each entry sets one templated field. discover valid field_name/value_id combinations per country and legal entity via get /resources/contracts/materialized_templates.
All Responses
Modified Field version_data type has been changed to Proc
Country-specific contract data (template fragments and fields).
New Field default_work_type has been added
Internal field used to derive part_time / full_time? from the seeded default work-type row. not intended for direct external use.
New Field salary_currency has been added
The currency of the salary amount, inherited from the governing legal entity.
New Field contracts_contract_id has been added
Contract identifier, refers to the /contracts/contracts endpoint. use it to read the contract this version belongs to, and its activity periods.
Contracts > Legal entity change
Change an employee's legal entity by creating a new contract and contract version under the target legal entity. Always opens a new contract; the country data fields resolve against the target legal entity, not the employee's current one.
New Endpoint
Contracts > Reference contract
Contracts reference contract
All Responses
Modified Field version_data type has been changed to Proc
Country-specific contract data (template fragments and fields).
New Field default_work_type has been added
Internal field used to derive part_time / full_time? from the seeded default work-type row. not intended for direct external use.
New Field salary_currency has been added
The currency of the salary amount, inherited from the governing legal entity.
New Field contracts_contract_id has been added
Contract identifier, refers to the /contracts/contracts endpoint. use it to read the contract this version belongs to, and its activity periods.
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 bank_number_format has been added
Format of bank_number. required when bank_number is set.
Expenses > Mileage
A mileage claim — the detail record behind an expensable of type "mileage", reimbursing distance driven on company business (route, distance, rate per unit).
All Responses
New Field rate_measurement_unit has been added
The distance unit the rate is denominated in (e.g. mi). the distance is converted into this unit before the rate is applied.
Finance > Financial document
Financial Document is a document that represents a financial transaction. Could be an invoice, a credit note or receipt.
New Endpoint
New Endpoint
Integrations > Sync run
Integrations SyncRun represents a synchronization execution for a marketplace integration. This endpoint is designed to be used by integrators building an integration between Factorial and an external system through the Factorial Integration Framework.
New Endpoint
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 file_name has been added
Optional custom name for the uploaded file. when omitted, a standardized name is generated.
Integrations > Syncable item
Integrations SyncableItem represents the item data that needs to be synced within a SyncRun. A SyncRun represents each synchronization execution of a set of items. This endpoint is designed to be used by integrators building a integration between Factorial and an external systems.
Removed Endpoint
Integrations > Syncable state
The sync or export current state of a syncable object, along with validation messages and errors
All Responses
New Field sync_type has been added
The type of synchronization this state represents, in "namespace/resource" form. describes what is being synced independently of the resource_syncable_type that carries the id.
New Endpoint
New Endpoint
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.
All Responses
New Field syncable_state_id has been added
Identifier of the syncable state this run item is linked to. refers to the integrations/syncable_state resource
New Endpoint
New Endpoint
ItManagement > Asset category
Global asset category (Group or Subtype in the 2-level taxonomy)
New Endpoint
ItManagement > It asset
IT Asset (device, keys, etc)
Request
New Field asset_category_ids has been added
Asset category ids to filter assets by group
ItManagement > It asset model
IT Asset Model (make/model of device)
Request
New Field asset_category_id has been added
Id of the asset subtype from the it_management.asset_category catalog (e.g. the id of 'vehicles.car'). takes precedence over type_name when both are given.
Request
New Field asset_category_id has been added
Id of the asset subtype from the it_management.asset_category catalog (e.g. the id of 'vehicles.car'). takes precedence over type_name when both are given.
All Responses
New Field asset_category_id has been added
Fk to the leaf assetcategory (subtype). null if not yet categorised.
Marketplace > Installation setting
Represents the settings of an integration installation
Request
New Field integration_uuid has been added
Uuid of the integration
Removed Field integration_id has been removed
All Responses
New Field company_code has been added
Company-level code
New Field legal_entities has been added
Legal entity codes (id is the legal entity id)
New Field locations has been added
Workplace codes (id is the location id)
New Field payroll_concept_codes has been added
Payroll concept codes per legal entity (id is the payroll concept id)
Removed Field file_numbers has been removed
Removed Field establishment_codes has been removed
New Field consultant_id has been added
Consultant identifier for the installation (e.g. the datev beraternummer)
PayrollEmployees > German employee datum
German-specific payroll data fields for an employee, used for DATEV payroll integrations
New Endpoint
New Endpoint
New Endpoint
New Endpoint
Performance > Review process
Performance Review Process
Request
Removed Field cycle_id has been removed
All Responses
Removed Field cycle_id has been removed
Processes > Materialized process
A workflow run — one person going through one workflow (onboarding, offboarding, training or custom). Creating one assigns the person to the workflow and starts its first step, which is what materializes their tasks.
New Endpoint
Processes > Process
A workflow — the configured sequence of steps and tasks a person goes through. Onboarding, offboarding, training and custom workflows are all processes; the category says which one. Assigning someone to one creates a workflow run (/processes/materialized_processes).
New Endpoint
New Endpoint
Procurement > Po field value
Field value stored for a purchase order (header or line-item level)
New Endpoint
New Endpoint
Procurement > Po line item
A line item within a purchase order
New Endpoint
New Endpoint
Procurement > Po template
Purchase order template that defines the structure and fields of a PO
New Endpoint
New Endpoint
Procurement > Po template field definition
One field a purchase-order template declares: its stable field_key, the type its values are read as, and the section it sits in.
New Endpoint
New Endpoint
Procurement > Po template version
Version history entry for a PO template
New Endpoint
New Endpoint
Procurement > Purchase order
A purchase order: money the company has committed to a vendor, with the lines it covers, the template fields filled in on it and the invoices received against it.
All Responses
New Field po_template_version_id has been added
Identifier of the pinned po template version this purchase order uses. fetch that version (and its field definitions) to interpret the purchase order's header and line-item field keys. null for legacy purchase orders created without a template.
New Field header_field_values_by_key has been added
Custom header field values, addressed by the field_key of the purchase order's pinned template version, as an array of {field_key, value} pairs — exactly the shape the update endpoint accepts, so a get -> modify -> put roundtrip works verbatim. predefined fields (vendor, order_date, currency, due_date, payment_method, legal_entity) surface as top-level parameters instead, and computed or hidden values never appear (they are preserved server-side on update). null for purchase orders without a template version.
New Field line_items_by_key has been added
Line items with their field values addressed by the field_key of the purchase order's pinned template version — the same shape the update endpoint accepts: modify and send the whole set back. rows are addressed by id (rows without an id are created, persisted rows missing from the set are deleted). null for purchase orders without a template version.
New Field deadline has been added
Deadline date for the purchase order delivery or completion. writable through the update endpoint (omitted or null keeps it); readable here so the get -> modify -> put roundtrip is complete.
New Field preferred_payment_method has been added
Preferred payment method for this purchase order
New Endpoint
New Endpoint
Procurement > Purchase request
A purchase request: what somebody asked the company to buy, under which purchase type, and the order it turned into once it was approved.
All Responses
New Field rejection_reason has been added
Reason for rejection if the purchase request was rejected
Procurement > Type
A purchase type: the kind of spending a request is raised under (software, training, hardware, and so on), which decides the form it is asked to fill in and the workflow it runs through.
All Responses
New Field workflow_currency has been added
Currency for workflow approval thresholds
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 project_viewers has been added
Array of employee ids who are project viewers
ProjectManagement > Rate
Project Management Rates
New Endpoint
ProjectManagement > Subproject
Project Management Subprojects
Request
Modified Field name is now mandatory
The name of the subproject.
Modified Field status is now mandatory
The status of the subproject.
ProjectManagement > Time record
Project Management Time Records
Request
New Field imputed_minutes has been added
Imputed minutes for the time record (used when no attendance shift is provided)
New Field date has been added
Reference date for the time record (used when no attendance shift is provided)
New Field project_task_id has been added
Id of the project task assigned to the time record. refers to project_management/project_tasks endpoint.
Request
New Field project_task_ids has been added
Project task ids to retrieve
Request
New Field project_task_id has been added
Id of the project task assigned to the time record. refers to project_management/project_tasks endpoint.
All Responses
New Field project_task_id has been added
Id of the project task assigned to the time record. refers to project_management/project_tasks endpoint.
New Field employee_id has been added
Id of the employee the time record belongs to
New Field project_id has been added
Id of the project the time record belongs to
New Endpoint
Tasks > Task
Factorial task element
Request
New Field author_employee_id has been added
Employee that will be set as the author of the tasks. only taken into account when authenticating with an api key, requests performed on behalf of a user always use that user as the author. when omitted, the tasks are authored by the first active employee of the company.
Request
New Field author_employee_id has been added
Employee that will be set as the author of the task. only taken into account when authenticating with an api key, requests performed on behalf of a user always use that user as the author. when omitted, the task is authored by the first active employee of the company.
Teams > Membership
A team membership — the join record placing one employee on one team, with a lead flag marking whether they lead that team.
Request
New Field with_source_attribution has been added
Populate direct, source_team_ids and parent_team_ids on each returned membership (nested teams). only honoured when filtering by a single employee_ids value without team_ids — the read that attributes one employee's own memberships, and the only one that resolves direct. reads filtered by a single team already return source_team_ids/parent_team_ids without this flag (direct stays null there); bulk reads ignore it entirely. unsupported filter combinations return 200 with empty attribution rather than an error. attribution is resolved per employee and is significantly more expensive than a plain read: intended for per-profile lookups, not bulk synchronization.
All Responses
New Field source_team_ids has been added
Ids of the teams this membership originates from (nested teams). in a company with nested teams, a direct membership includes the team itself; an inherited one, the sub-team(s) where the employee is a direct member. only populated on reads that compute source attribution — reads filtered by a single team, or by a single employee with with_source_attribution enabled. empty otherwise, including create, update and delete responses, and always empty for companies without nested teams. an empty array does not distinguish "computed and genuinely empty" from "not computed for this read" or "could not be computed", so only apply attribution-dependent logic to a read you explicitly shaped for it. a team-anchored read stops attributing above roughly a thousand members of the filtered team: past that the attribution is not computed at all and every row comes back empty, behind a normal 200.
New Field parent_team_ids has been added
Ids of the ancestor teams that receive an inherited membership through this row (nested teams) — the teams this membership rolls up into. populated under the same conditions as source_team_ids; empty otherwise.
New Field direct has been added
Whether the employee is a direct member of the team (nested teams). always present. true means direct member; false means the row exists only through inheritance from a sub-team; null means not computed for this read. only computed on reads filtered by a single employee with with_source_attribution enabled — always null otherwise, including create, update and delete responses and companies without nested teams. null is also returned when directness could not be resolved for a transient reason, even with with_source_attribution enabled, so never treat null as false — retry the read instead.
New Endpoint
Teams > Team
A team in the company's org chart — a named group employees belong to (through memberships), optionally with one or more leads and nested under a parent team.
Request
New Field parent_team_id has been added
Id of the parent team to nest the new team under (omit or null for a root team). requires the nested teams feature and permission to manage the parent team; the hierarchy is capped at 4 levels.
All Responses
New Field parent_team_id has been added
Id of the parent team this team is nested under (null for a root team). returned by read, create and move; null on update and delete, which do not change the hierarchy, and always null for companies without nested teams.
New Field depth has been added
Depth of this team in the nested-team hierarchy: 1 for a top-level team, 2 for its children, and so on. returned by read, create and move; null on update and delete, which do not change the hierarchy, and always null for companies without nested teams.
New Endpoint
Timeoff > Allowance stat
Timeoff allowance stat
Request
New Field simulate_policy_change_to_id has been added
When provided, computes the stats as if the employee were moved to this target time off policy effective the day after reference_date, so pass the day before the change date - for a change effective on 2026-08-03, send reference_date=2026-08-02. this truncates the source policy's current cycle at that boundary so available_days reflects the prorated balance that would actually transfer or be discarded on the change, rather than the full entitlement. purely a read - nothing is persisted. requires the policy timeline feature; without it the result is identical to an un-simulated read. can only be used together with employee_ids, because a simulation needs every employee in the read to belong to the target policy's company - which a company-wide read cannot guarantee.
Timeoff > French leave day count
The French "décompte des congés" for a single leave — the day-vs-hour count that French payroll needs, with forfait jours, public holidays, RTT and congés payés forced to days, the JNT cap applied, and ouvrés/ouvrables/calendaires resolved from the employee's work schedule. Exposed as its own resource rather than as fields on timeoff.leave so the France-specific concern stays out of the generic leave read path.
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.
Request
New Field include_duration_by_day has been added
Retrieve the per-day breakdown of the leave's duration (duration_by_day_attributes)
New Field forced_finish_on has been added
Caps the per-day duration walk at this date. for endless leaves (finish_on = nil) it pins the walk end; for closed leaves whose finish_on sits past this date it truncates the walk. never extends a leave past its real finish_on. must fall inside the read window (from/to or overlaps_range_from/overlaps_range_to).
All Responses
New Field duration_by_day_attributes has been added
Per-day breakdown of the leave's workable and used units, keyed by calendar date. populated only when the read requests include_duration_by_day=true; null otherwise.
New Endpoint
Timeoff > Policy
A time off policy — a named configuration that groups a set of allowances and governs the leaves of the employees assigned to it. A company has one main policy that employees fall under by default, plus optional policies for specific populations (e.g. remote employees).
Request
New Field based_on_policy_id has been added
Id of an existing policy to copy. when set, the new policy is created with a copy of that policy's allowances and no employees assigned. omit it to create a policy from scratch.
TimeSettings > Split custom time range category
Resource to manage split work time categories
New Endpoint
New Endpoint
Webhooks
Payloads
New Field siret has been added
Siret number (france-specific). system for identifying french establishments. 14-digit identifier for each french establishment.
Payloads
Modified Field version_data type has been changed to Proc
Country-specific contract data (template fragments and fields).
New Field default_work_type has been added
Internal field used to derive part_time / full_time? from the seeded default work-type row. not intended for direct external use.
New Field salary_currency has been added
The currency of the salary amount, inherited from the governing legal entity.
New Field contracts_contract_id has been added
Contract identifier, refers to the /contracts/contracts endpoint. use it to read the contract this version belongs to, and its activity periods.
Payloads
Modified Field version_data type has been changed to Proc
Country-specific contract data (template fragments and fields).
New Field default_work_type has been added
Internal field used to derive part_time / full_time? from the seeded default work-type row. not intended for direct external use.
New Field salary_currency has been added
The currency of the salary amount, inherited from the governing legal entity.
New Field contracts_contract_id has been added
Contract identifier, refers to the /contracts/contracts endpoint. use it to read the contract this version belongs to, and its activity periods.
Payloads
Modified Field version_data type has been changed to Proc
Country-specific contract data (template fragments and fields).
New Field default_work_type has been added
Internal field used to derive part_time / full_time? from the seeded default work-type row. not intended for direct external use.
New Field salary_currency has been added
The currency of the salary amount, inherited from the governing legal entity.
New Field contracts_contract_id has been added
Contract identifier, refers to the /contracts/contracts endpoint. use it to read the contract this version belongs to, and its activity periods.
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
Removed Field cycle_id has been removed
Payloads
New Field project_task_id has been added
Id of the project task assigned to the time record. refers to project_management/project_tasks endpoint.
New Field employee_id has been added
Id of the employee the time record belongs to
New Field project_id has been added
Id of the project the time record belongs to
Payloads
New Field project_task_id has been added
Id of the project task assigned to the time record. refers to project_management/project_tasks endpoint.
New Field employee_id has been added
Id of the employee the time record belongs to
New Field project_id has been added
Id of the project the time record belongs to
Payloads
New Field project_task_id has been added
Id of the project task assigned to the time record. refers to project_management/project_tasks endpoint.
New Field employee_id has been added
Id of the employee the time record belongs to
New Field project_id has been added
Id of the project the time record belongs to
Payloads
New Field project_task_id has been added
Id of the project task assigned to the time record. refers to project_management/project_tasks endpoint.
New Field employee_id has been added
Id of the employee the time record belongs to
New Field project_id has been added
Id of the project the time record belongs to
Payloads
New Field project_task_id has been added
Id of the project task assigned to the time record. refers to project_management/project_tasks endpoint.
New Field employee_id has been added
Id of the employee the time record belongs to
New Field project_id has been added
Id of the project the time record belongs to
Payloads
New Field source_team_ids has been added
Ids of the teams this membership originates from (nested teams). in a company with nested teams, a direct membership includes the team itself; an inherited one, the sub-team(s) where the employee is a direct member. only populated on reads that compute source attribution — reads filtered by a single team, or by a single employee with with_source_attribution enabled. empty otherwise, including create, update and delete responses, and always empty for companies without nested teams. an empty array does not distinguish "computed and genuinely empty" from "not computed for this read" or "could not be computed", so only apply attribution-dependent logic to a read you explicitly shaped for it. a team-anchored read stops attributing above roughly a thousand members of the filtered team: past that the attribution is not computed at all and every row comes back empty, behind a normal 200.
New Field parent_team_ids has been added
Ids of the ancestor teams that receive an inherited membership through this row (nested teams) — the teams this membership rolls up into. populated under the same conditions as source_team_ids; empty otherwise.
New Field direct has been added
Whether the employee is a direct member of the team (nested teams). always present. true means direct member; false means the row exists only through inheritance from a sub-team; null means not computed for this read. only computed on reads filtered by a single employee with with_source_attribution enabled — always null otherwise, including create, update and delete responses and companies without nested teams. null is also returned when directness could not be resolved for a transient reason, even with with_source_attribution enabled, so never treat null as false — retry the read instead.
Payloads
New Field source_team_ids has been added
Ids of the teams this membership originates from (nested teams). in a company with nested teams, a direct membership includes the team itself; an inherited one, the sub-team(s) where the employee is a direct member. only populated on reads that compute source attribution — reads filtered by a single team, or by a single employee with with_source_attribution enabled. empty otherwise, including create, update and delete responses, and always empty for companies without nested teams. an empty array does not distinguish "computed and genuinely empty" from "not computed for this read" or "could not be computed", so only apply attribution-dependent logic to a read you explicitly shaped for it. a team-anchored read stops attributing above roughly a thousand members of the filtered team: past that the attribution is not computed at all and every row comes back empty, behind a normal 200.
New Field parent_team_ids has been added
Ids of the ancestor teams that receive an inherited membership through this row (nested teams) — the teams this membership rolls up into. populated under the same conditions as source_team_ids; empty otherwise.
New Field direct has been added
Whether the employee is a direct member of the team (nested teams). always present. true means direct member; false means the row exists only through inheritance from a sub-team; null means not computed for this read. only computed on reads filtered by a single employee with with_source_attribution enabled — always null otherwise, including create, update and delete responses and companies without nested teams. null is also returned when directness could not be resolved for a transient reason, even with with_source_attribution enabled, so never treat null as false — retry the read instead.
Payloads
New Field source_team_ids has been added
Ids of the teams this membership originates from (nested teams). in a company with nested teams, a direct membership includes the team itself; an inherited one, the sub-team(s) where the employee is a direct member. only populated on reads that compute source attribution — reads filtered by a single team, or by a single employee with with_source_attribution enabled. empty otherwise, including create, update and delete responses, and always empty for companies without nested teams. an empty array does not distinguish "computed and genuinely empty" from "not computed for this read" or "could not be computed", so only apply attribution-dependent logic to a read you explicitly shaped for it. a team-anchored read stops attributing above roughly a thousand members of the filtered team: past that the attribution is not computed at all and every row comes back empty, behind a normal 200.
New Field parent_team_ids has been added
Ids of the ancestor teams that receive an inherited membership through this row (nested teams) — the teams this membership rolls up into. populated under the same conditions as source_team_ids; empty otherwise.
New Field direct has been added
Whether the employee is a direct member of the team (nested teams). always present. true means direct member; false means the row exists only through inheritance from a sub-team; null means not computed for this read. only computed on reads filtered by a single employee with with_source_attribution enabled — always null otherwise, including create, update and delete responses and companies without nested teams. null is also returned when directness could not be resolved for a transient reason, even with with_source_attribution enabled, so never treat null as false — retry the read instead.
Payloads
New Field source_team_ids has been added
Ids of the teams this membership originates from (nested teams). in a company with nested teams, a direct membership includes the team itself; an inherited one, the sub-team(s) where the employee is a direct member. only populated on reads that compute source attribution — reads filtered by a single team, or by a single employee with with_source_attribution enabled. empty otherwise, including create, update and delete responses, and always empty for companies without nested teams. an empty array does not distinguish "computed and genuinely empty" from "not computed for this read" or "could not be computed", so only apply attribution-dependent logic to a read you explicitly shaped for it. a team-anchored read stops attributing above roughly a thousand members of the filtered team: past that the attribution is not computed at all and every row comes back empty, behind a normal 200.
New Field parent_team_ids has been added
Ids of the ancestor teams that receive an inherited membership through this row (nested teams) — the teams this membership rolls up into. populated under the same conditions as source_team_ids; empty otherwise.
New Field direct has been added
Whether the employee is a direct member of the team (nested teams). always present. true means direct member; false means the row exists only through inheritance from a sub-team; null means not computed for this read. only computed on reads filtered by a single employee with with_source_attribution enabled — always null otherwise, including create, update and delete responses and companies without nested teams. null is also returned when directness could not be resolved for a transient reason, even with with_source_attribution enabled, so never treat null as false — retry the read instead.
Payloads
New Field source_team_ids has been added
Ids of the teams this membership originates from (nested teams). in a company with nested teams, a direct membership includes the team itself; an inherited one, the sub-team(s) where the employee is a direct member. only populated on reads that compute source attribution — reads filtered by a single team, or by a single employee with with_source_attribution enabled. empty otherwise, including create, update and delete responses, and always empty for companies without nested teams. an empty array does not distinguish "computed and genuinely empty" from "not computed for this read" or "could not be computed", so only apply attribution-dependent logic to a read you explicitly shaped for it. a team-anchored read stops attributing above roughly a thousand members of the filtered team: past that the attribution is not computed at all and every row comes back empty, behind a normal 200.
New Field parent_team_ids has been added
Ids of the ancestor teams that receive an inherited membership through this row (nested teams) — the teams this membership rolls up into. populated under the same conditions as source_team_ids; empty otherwise.
New Field direct has been added
Whether the employee is a direct member of the team (nested teams). always present. true means direct member; false means the row exists only through inheritance from a sub-team; null means not computed for this read. only computed on reads filtered by a single employee with with_source_attribution enabled — always null otherwise, including create, update and delete responses and companies without nested teams. null is also returned when directness could not be resolved for a transient reason, even with with_source_attribution enabled, so never treat null as false — retry the read instead.
Payloads
New Field parent_team_id has been added
Id of the parent team this team is nested under (null for a root team). returned by read, create and move; null on update and delete, which do not change the hierarchy, and always null for companies without nested teams.
New Field depth has been added
Depth of this team in the nested-team hierarchy: 1 for a top-level team, 2 for its children, and so on. returned by read, create and move; null on update and delete, which do not change the hierarchy, and always null for companies without nested teams.
Payloads
New Field parent_team_id has been added
Id of the parent team this team is nested under (null for a root team). returned by read, create and move; null on update and delete, which do not change the hierarchy, and always null for companies without nested teams.
New Field depth has been added
Depth of this team in the nested-team hierarchy: 1 for a top-level team, 2 for its children, and so on. returned by read, create and move; null on update and delete, which do not change the hierarchy, and always null for companies without nested teams.
Payloads
New Field parent_team_id has been added
Id of the parent team this team is nested under (null for a root team). returned by read, create and move; null on update and delete, which do not change the hierarchy, and always null for companies without nested teams.
New Field depth has been added
Depth of this team in the nested-team hierarchy: 1 for a top-level team, 2 for its children, and so on. returned by read, create and move; null on update and delete, which do not change the hierarchy, and always null for companies without nested teams.
Payloads
New Field parent_team_id has been added
Id of the parent team this team is nested under (null for a root team). returned by read, create and move; null on update and delete, which do not change the hierarchy, and always null for companies without nested teams.
New Field depth has been added
Depth of this team in the nested-team hierarchy: 1 for a top-level team, 2 for its children, and so on. returned by read, create and move; null on update and delete, which do not change the hierarchy, and always null for companies without nested teams.
Payloads
New Field parent_team_id has been added
Id of the parent team this team is nested under (null for a root team). returned by read, create and move; null on update and delete, which do not change the hierarchy, and always null for companies without nested teams.
New Field depth has been added
Depth of this team in the nested-team hierarchy: 1 for a top-level team, 2 for its children, and so on. returned by read, create and move; null on update and delete, which do not change the hierarchy, and always null for companies without nested teams.
Payloads
New Field duration_by_day_attributes has been added
Per-day breakdown of the leave's workable and used units, keyed by calendar date. populated only when the read requests include_duration_by_day=true; null otherwise.
Payloads
New Field duration_by_day_attributes has been added
Per-day breakdown of the leave's workable and used units, keyed by calendar date. populated only when the read requests include_duration_by_day=true; null otherwise.
Payloads
New Field duration_by_day_attributes has been added
Per-day breakdown of the leave's workable and used units, keyed by calendar date. populated only when the read requests include_duration_by_day=true; null otherwise.
Payloads
New Field duration_by_day_attributes has been added
Per-day breakdown of the leave's workable and used units, keyed by calendar date. populated only when the read requests include_duration_by_day=true; null otherwise.
Payloads
New Field duration_by_day_attributes has been added
Per-day breakdown of the leave's workable and used units, keyed by calendar date. populated only when the read requests include_duration_by_day=true; null otherwise.
Payloads
New Field duration_by_day_attributes has been added
Per-day breakdown of the leave's workable and used units, keyed by calendar date. populated only when the read requests include_duration_by_day=true; null otherwise.

