---
title: "Reorders the groups under one parent (sibling display order)."
method: POST
path: "/api/v1/schedule-groups/reorder"
tags: ["ScheduleGroups"]
---

# Reorders the groups under one parent (sibling display order).

`POST /api/v1/schedule-groups/reorder`

## Request

- Base URL: `https://app.flexonthejob.com`
- URL: `https://app.flexonthejob.com/api/v1/schedule-groups/reorder`
- Auth: HTTP bearer

Requires `ManageJobs` and an `Idempotency-Key` header. Same as dragging groups on the
Schedule Groups page: `displayOrder` becomes 0, 1, 2, … in the order given. List every
group under the parent exactly once — a partial list is refused rather than half-applied.
Example: `{ "parentGroupId": 3, "ids": [9, 7, 8] }`.

## Request body

- ScheduleGroupReorderApiRequest: Body of `POST /api/v1/schedule-groups/reorder`: the new order of every group under one parent. Example: `{ "parentGroupId": 3, "ids": [9, 7, 8] }`.
  - `parentGroupId` integer, nullable: Parent whose child groups are reordered; omit or `0` for the top-level groups.
  - `ids` integer[], required: Every group id under that parent exactly once, first to last (ids from `GET /api/v1/schedule-groups?parentGroupId=…`); at most 500.

## Response `200`

The siblings in their new order.

- ScheduleGroupOrderResponse: Body of `POST /api/v1/schedule-groups/reorder`: the reordered siblings in their new order.
  - `parentGroupId` integer, nullable: The parent whose children were reordered; null for the top level.
  - `items` ScheduleGroupDto[]: The groups under that parent, in the new `displayOrder` (0, 1, 2, …).
    - `id` integer: Numeric id of the group. Stable within this organization.
    - `syncId` string, uuid: Globally unique sync id (GUID). Use it as the `after` pagination cursor.
    - `name` string: Group name, e.g. `"Install Crew A"`.
    - `description` string, nullable: Optional description shown on the dispatch board.
    - `colorHex` string, nullable: Hex colour used for calendar / board rendering, e.g. `"#2e7d32"`; null when unset.
    - `parentGroupId` integer, nullable: Id of the parent group (e.g. the division a crew belongs to); null for top-level groups.
    - `parentGroupName` string, nullable: Name of the parent group; null for top-level groups.
    - `displayOrder` integer: Sort position among siblings (ascending). Pages are returned in id order, so sort by this client-side when rendering a board.
    - `members` ScheduleGroupMemberDto[]: Members of this group, leads first. Only active users are listed.
      - `userId` string: User id (string GUID) — matches `id` from `GET /api/v1/users` and job assignee ids.
      - `displayName` string: User's display name, e.g. `"Sam Carter"`.
      - `isLead` boolean: True for the crew lead / foreman of this group.
    - `createdAt` string, date-time: UTC creation timestamp.
    - `updatedAt` string, date-time, nullable: UTC timestamp of the last edit; null when never edited.

## Other responses

- `400`: Malformed body, more than 500 ids, or missing `Idempotency-Key`.
- `401`: Unauthorized
- `403`: The `scheduling` module is not active for this organization.
- `404`: No such parent group in this organization.
- `409`: The key's creator is unknown on this server.
- `422`: `ids` misses a group under the parent, names one that is not under it, or repeats one.
- `429`: Too Many Requests

---

[API](https://skmtc.dev/flexonthejob/apis/flex-api.md) · [All operations](https://skmtc.dev/flexonthejob/apis/flex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/flexonthejob/apis/flex-api/revisions/19c8f4d27acf?raw)
