---
title: "Move an employee to another legal entity."
method: POST
path: "/api/2026-10-01/resources/contracts/legal_entity_changes"
tags: ["Contracts > LegalEntityChange"]
---

# Move an employee to another legal entity.

`POST /api/2026-10-01/resources/contracts/legal_entity_changes`

## Request

- Base URL: `https://api.factorialhr.com`
- URL: `https://api.factorialhr.com/api/2026-10-01/resources/contracts/legal_entity_changes`
- Auth: one of:
  - OAuth 2
    - Authorization code: `https://id.factorialhr.com/oauth/authorize`
    - Token URL: `https://id.factorialhr.com/api/oauth/token` scopes: `contracts`
  - API key in header `x-api-key`

Creates a new contract under the target legal entity, plus its first contract version, effective on the given date. The employee's own legal entity follows on that date, when the new version becomes their reference contract version — so the employee still belongs to the previous legal entity until then. The country data of the new version is resolved against the target legal entity's template, so fields that only existed under the previous one are dropped. Requires the legal entity change feature to be enabled for the company.

## Request body

- object
  - `target_legal_entity_id` string, required: The legal entity the employee is moving to. A new contract and contract version are created under this legal entity.
  - `contract_details` object, required: The terms of the contract version that opens the new contract. Same fields as the contract version create endpoint.
    - `effective_on` string, required: the day the new contract version takes effect. The employee moves to the target legal entity on this date.
    - `employee_id` string, required: employee identifier, refers to /employees/employees endpoint.
    - `ends_on` string: the day the employee is terminated.
    - `has_trial_period` boolean: a flag that indicates if the employee has a trial period.
    - `job_catalog_tree_node_uuid` string: the uuid node in the job catalog tree. For now it only supports level nodes. Refer to job_catalog/tree_nodes endpoint.
    - `job_title` string: job title of the employee.
    - `salary_amount` integer: the amount of money the employee earns in cents. When adding a salary to a contract that previously had none, both salary_amount and salary_frequency must be provided together.
    - `salary_frequency` string: the frequency of the salary payment. When adding a salary to a contract that previously had none, both salary_amount and salary_frequency must be provided together.
    - `trial_period_ends_on` string: when the trial period ends.
    - `working_hours` integer: the amount of hours the employee works.
    - `working_hours_frequency` string: the frequency of the working hours.
    - `working_week_days` string: the days of the week the employee works.
    - `max_legal_yearly_hours` integer: the maximum amount of hours the employee can work in a year.
    - `maximum_weekly_hours` integer: the maximum amount of hours the employee can work in a week.
    - `bank_holiday_treatment` 'workable' | 'non_workable': Defines whether a bank holiday should be considered as a workable or non-workable day.
    - `working_time_percentage_in_cents` integer: Working time percentage in cents (e.g., when an employee is working part-time, the percentage of full-time hours they are working).
    - `annual_working_time_distribution` 'limit_workdays' | 'limit_daily_hours': Allows companies to define how annual working hours are spread across the year to ensure compliance with legal limits.
    - `de_base_salary_type_id` string: Identifier for the German base salary type. References a payroll concept available via the /payroll/concepts endpoint.
    - `country_data_inputs` object[]: List of country-specific field inputs (e.g. contract_type) for the new version. They are validated against the TARGET legal entity's template: discover valid field_name/value_id combinations via GET /resources/contracts/materialized_templates.
      - `field_name` string, required: The templated field to set (e.g. contract_type).
      - `value_id` string, required: The id of the option to assign to the field.
      - `integration_source` string: Only used when the option was sourced from an installed payroll integration (e.g. A3innuva). Leave unset for regular field inputs.
      - `label` string: Only used together with integration_source, to label an option that does not yet exist locally. Leave unset for regular field inputs.

## Response `201`

CREATED

- ContractsContractFlow
  - `contract_version_id` string, required: identifier of the contract version created by the change. Refers to the /contracts/contract_versions endpoint.
  - `contracts_contract_id` string: identifier of the contract opened by the change, under the target legal entity. Refers to the /contracts/contracts endpoint.
  - `employee_id` string, required: employee identifier, refers to /employees/employees endpoint.
  - `effective_on` string, required: the day the new contract version takes effect. The employee moves to the target legal entity on this date.
  - `country` string: ISO country code the new contract is governed by, taken from the target legal entity.
  - `job_title` string: job title of the employee.
  - `job_catalog_level_id` string: job catalog level identifier, refers to /job_catalog/levels endpoint.
  - `job_catalog_tree_node_uuid` string: the uuid node in the job catalog tree. For now it only supports level nodes. From this point in the job catalog tree you can get the full ancestor path to the root node including the role. Refer to job_catalog/tree_nodes endpoint.
  - `starts_on` string: the day the new contract starts. Defaults to effective_on.
  - `ends_on` string: the day the employee is terminated. It has nothing to do with trial period, these are concepts totally unrelated.
  - `has_payroll` boolean, required: boolean that indicates if the employee asociated to this contract belongs to a payroll policy.
  - `has_trial_period` boolean: a flag that indicates if the contract version has ever had a trial period.
  - `trial_period_ends_on` string: when the trial period ends. If there is no date, it means that the employee has never been in trial. This date is not related with the end date of a contract.
  - `salary_amount` integer: the amount of money the employee earns in cents.
  - `salary_frequency` string: the frequency of the salary payment.
  - `working_week_days` string: the days of the week the employee works.
  - `working_hours` integer: the amount of hours the employee works.
  - `working_hours_frequency` string: the frequency of the working hours.
  - `max_legal_yearly_hours` integer: the maximum amount of hours the employee can work in a year.
  - `maximum_weekly_hours` integer: the maximum amount of hours the employee can work in a week.
  - `bank_holiday_treatment` 'workable' | 'non_workable', required: Defines whether a bank holiday should be considered as a workable or non-workable day.
  - `working_time_percentage_in_cents` integer: Working time percentage in cents (e.g., when an employee is working part-time, the percentage of full-time hours they are working).
  - `annual_working_time_distribution` 'limit_workdays' | 'limit_daily_hours': Allows companies to define how annual working hours are spread across the year to ensure compliance with legal limits.
  - `min_rest_minutes_between_days` integer: the minimum amount of minutes the employee must rest between working periods.
  - `max_work_minutes_per_day` integer: the maximum amount of minutes the employee can work in a day.
  - `max_work_days_in_row` integer: the maximum amount of days the employee can work in a row.
  - `min_rest_hours_in_row` integer: the minimum amount of hours the employee must rest in a row.
  - `created_at` string, required: the date the contract version was created.
  - `updated_at` string, required: the date of the last contract version update.
  - `version_data` object: Country-specific contract data, resolved against the target legal entity's template rather than the employee's current one.
    - `country_data` object
      - `country` string, required: Country code (e.g. es, fr, de, pt).
      - `fields` object[], required
        - `name` string, required
        - `field_name` string, required
        - `value_label` string
        - `value_id` string, required
      - `template_fragments` object, required: Identifiers of the materialized_template_fragment records that produced this country data. After a legal entity change they are the target legal entity's fragments.
        - `company_fragment_id` string
        - `country_fragment_id` string
        - `legal_entity_fragment_id` string
  - `es_has_teleworking_contract` boolean: flag that indicates if the contract has teleworking.
  - `contracts_es_tariff_group_id` string: the group of cotization of the employee.
  - `es_cotization_group` integer: the group of cotization of the employee.
  - `es_contract_observations` string: observations of the contract.
  - `es_job_description` string: the job description of the employee.
  - `es_contract_type_id` string: contract type identifier.
  - `es_working_day_type_id` string: working day type identifier.
  - `es_education_level_id` string: education level identifier.
  - `es_professional_category_id` string: professional category identifier.
  - `fr_employee_type` string: employee type.
  - `fr_forfait_jours` boolean, required: flag that indicates if the employee is allowed to work within the framework of a fixed number of days.
  - `fr_jours_par_an` integer: the number of days the employee is allowed to work.
  - `fr_coefficient` string: coefficient for france contracts.
  - `fr_contract_type_id` string: contract type identifier.
  - `fr_level_id` string: level identifier.
  - `fr_step_id` string: step identifier.
  - `fr_mutual_id` string: mutual identifier.
  - `fr_professional_category_id` string: professional category identifier.
  - `fr_work_type_id` string: work type identifier.
  - `de_contract_type_id` string: contract type identifier.
  - `de_base_salary_type_id` string: Identifier for the German base salary type. References a payroll concept available via the /payroll/concepts endpoint.
  - `pt_contract_type_id` string: contract type identifier.

## Changes

- **2026-11-03** `83ac9aa1de50`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/factorialhr/apis/factorial-api/changes/api/2026-10-01/resources/contracts/legal_entity_changes/post.md)

---

[API](https://skmtc.dev/factorialhr/apis/factorial-api.md) - [All operations](https://skmtc.dev/factorialhr/apis/factorial-api/llms.txt) - [OpenAPI document](https://skmtc.dev/factorialhr/apis/factorial-api/revisions/83ac9aa1de50?raw)
