SchedulingConfig#

Project-wide scheduling switches. It travels as the config field of ProjectData. Every field is optional: an omitted field, a null field, an omitted config and "config": null all give the defaults below. Unknown keys are ignored (see Wire format).

Fields#

Field Type Required Default Description
apply_constraints boolean no false Turns on the eight task constraint types. With false, task constraints are ignored.
schedule_from_end boolean no false Schedules the project backward (ALAP) from its end. level refuses such a project.
gap_behavior "preserve" | "compress" no "preserve" "preserve" keeps tasks at their own dates where links allow; "compress" pulls every task to its earliest position.
move_projects boolean no true true moves a summary and its children as one block; false schedules the leaves one by one.
project_constraint boolean no false Children inherit their parent summary's constraint.
group_mode boolean no false Suppresses the constraint inheritance of project_constraint. That's its only effect.
use_progress boolean no false Treats tasks with progress equal to 1 as completed and keeps them fixed.
descendant_links boolean no false Keeps links between a summary and its own descendant. With false, such links are dropped and reported in notes.
calendar_mode "resource" | "task" | "task-inherited" no "resource" Which calendars place the work. "resource": each assignment works on its resource's calendar. "task": task calendars only. "task-inherited": task calendars, and a task without one uses its nearest ancestor's.
strict_calendar boolean no false Reports a calendar-non-working conflict when a summary moved as a block lands a child on non-working time.
max_iterations number no 8 Planner pass limit. An integer, at least 1. A fraction or negative number fails with validation and no path; 0 fails with validation, path: "config.max_iterations".
project_start DateValue | null no absent Lower bound for the plan, and the date source for undated tasks.
project_end DateValue | null no absent Upper bound for the plan, used by backward projects.
duration_unit TimeUnit no "day" Unit of duration and lag values. Accepts "minute", "hour", "day"; "week", "month" and "year" fail with validation.
use_calendars boolean no true false makes every calendar flat 24/7 time.
default_resource_capacity number no 1 Capacity of a resource that sets no capacity of its own, in assignment value units (1 = 100 %). Must be finite and non-negative, or the call fails with validation, path: "config.default_resource_capacity".
root_id Id no 0 The parent value that means "no parent". Ids compare like JavaScript object keys, so the default matches both 0 and "0". With another root_id, a task with id 0 is an ordinary parent. A parent of "" always means no parent.

A value of the wrong JSON type (for example "apply_constraints": "yes") fails the call with parse. An unknown enum string or an unparsable date fails with validation and path: null. Error kinds are described in Error handling.

Used by#

As ProjectData.config, in the data_json argument of:

Example#

{
  "apply_constraints": true,
  "gap_behavior": "compress",
  "duration_unit": "hour",
  "project_start": "2026-08-10 08:00",
  "calendar_mode": "task",
  "root_id": -1
}

Every field left out keeps its default. The project-data guide shows this config in a full payload: Scheduling config.