---
title: "Reorder Custom Table Fields"
method: PATCH
path: "/api/v1/hris/custom-tables/{customTableId}/fields/reorder"
tags: ["Custom Tables", "Public API"]
---

# Reorder Custom Table Fields

`PATCH /api/v1/hris/custom-tables/{customTableId}/fields/reorder`

## Request

- Base URL: `https://companySubDomain.bamboohr.com`
- URL: `https://companySubDomain.bamboohr.com/api/v1/hris/custom-tables/{customTableId}/fields/reorder`
- Auth: OAuth 2
  - Authorization code: `/authorize.php`
  - Token URL: `/token.php` scopes: `employee:custom_fields.write`
- TypeScript: <https://skmtc.dev/bamboohr/apis/bamboohr-api/docs/api/v1/hris/custom-tables/:customTableId/fields/reorder/patch.ts> (a function with typed inputs; its response is checked against the schema)

Reorder a custom table's columns. Requires the acting user to be an owner-admin. The `columns` array must include the ID of every field currently in the table; a partial list or an ID that does not belong to this table is rejected with a `422`. Any `id` in the request body is ignored; the table reordered is always the one identified by the path. Returns the full updated custom table, including all fields in their new order. Use this for a lightweight pure-reorder without resending field definitions; to add, remove, or edit fields while also reordering, use Update Custom Table (`update-public-custom-table`) instead.

OAuth Scopes: employee:custom_fields.write

## Path parameters

- `customTableId` string, required

## Request body

- ReorderCustomTableFieldsRequest
  - `id` integer: Custom table ID. Ignored on write: the table id always comes from the path.
  - `columns` integer[], required: Array of custom field IDs in the new order. Must include the ID of every field currently in the table.

## Response `200`

The reordered custom table object.

- CustomTableViewObject
  - `id` integer: The id of the Custom Table
  - `name` string: The name of the Custom Table
  - `type` string: The type of the Custom Table
  - `isEncrypted` boolean: Whether the Custom Table is encrypted or not
  - `isCalculated` boolean: Whether the Custom Table is calculated or not
  - `isRequired` boolean: Whether the Custom Table is required or not
  - `order` integer: The order of the Custom Table
  - `summarize` 'none' | 'total' | 'average': The aggregation applied when computing totals for this field. Only meaningful for custom table columns; always "none" for standalone custom fields and for the custom table object itself.
  - `values` string[]: The values of the Custom Field
  - `fields` CustomTableFieldViewObject[]: The fields of the Custom Table
    - `id` integer: The id of the Custom Field
    - `name` string: The name of the Custom Field
    - `type` string: The type of the Custom Field
    - `isEncrypted` boolean: Whether the Custom Field is encrypted or not
    - `isCalculated` boolean: Whether the Custom Field is calculated or not
    - `isRequired` boolean: Whether the Custom Field is required or not
    - `order` integer: The order of the Custom Field
    - `summarize` 'none' | 'total' | 'average': The aggregation applied when computing totals for this field. Only meaningful for custom table columns; always "none" for standalone custom fields and for the custom table object itself.
    - `values` string[]: The values of the Custom Field
    - `sortField` boolean: Whether this field is used for sorting the table
  - `sortOrderDirection` string: The sort order direction of the Custom Table

## Other responses

- `401`: Unauthorized.
- `403`: Forbidden.
- `404`: Not found.
- `422`: Validation failed.
- `500`: Internal server error.

## Changes

- **2026-11-03** `922fc15f43a7`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/bamboohr/apis/bamboohr-api/changes/api/v1/hris/custom-tables/:customTableId/fields/reorder/patch.md)

---

[API](https://skmtc.dev/bamboohr/apis/bamboohr-api.md) - [All operations](https://skmtc.dev/bamboohr/apis/bamboohr-api/llms.txt) - [OpenAPI document](https://skmtc.dev/bamboohr/apis/bamboohr-api/revisions/922fc15f43a7?raw)
