---
title: "Bulk update offices"
method: PATCH
path: "/v3/offices/bulk"
tags: ["Offices"]
---

# Bulk update offices

`PATCH /v3/offices/bulk`

Update up to the bulk-endpoint cap of offices in a single request. Each item in `data` must include the `id` of the target office plus the fields to change (same body shape as `PATCH /v3/offices/{id}`). Each row is processed independently and the response reports per-row success or failure; rows that fail validation do not block the others. Use for HRIS-driven syncs that touch many offices at once.

## Request body

- object
  - `callback_url` string — Optional HTTPS URL Greenhouse will POST to when every row in `data` has finished. Omit to poll `GET /v3/bulk_requests/{bulk_action_uuid}` instead.
  - `data` object[], required — Array of single-resource update payloads to process. Each item must include the integer `id` of the record to update and otherwise match the schema of the matching non-bulk PATCH endpoint; rows are validated and executed independently.
    - `name` string, required — New display name for the office. Must remain unique among active offices in the organization.
    - `parent_id` integer, nullable — Id of the office to set as the new parent in the office hierarchy. Pass to re-parent the office; set to `null` to remove the parent. Mutually exclusive with `external_parent_id`.
    - `external_id` string, nullable — Customer- or HRIS-supplied identifier for cross-system reconciliation. Set to `null` to clear. Requires the `org_structure_external_id` product flag.
    - `location` string, nullable — Free-form physical location string for the office (e.g. `New York, NY, USA`). Set to `null` to clear.
    - `primary_in_house_contact_user_id` integer, nullable — Id of the Greenhouse user to set as the office's primary internal contact. Set to `null` to clear. References a `/v3/users` row.
    - `external_parent_id` string, nullable — `external_id` of the office to set as the new parent, for partners that key the hierarchy by external id rather than Greenhouse id. Set to `null` to remove the parent. Mutually exclusive with `parent_id`.
    - `id` integer, required

## Response `202`

Accepted

- object
  - `bulk_action_uuid` string — UUID assigned to the new bulk request. Use this with `GET /v3/bulk_requests/{bulk_action_uuid}` to monitor progress and retrieve per-row results.
  - `status` string — Initial lifecycle state of the new bulk request, typically `building` immediately after creation. See the bulk request response schema for the full set of values.
  - `status_url` string — Relative path that returns the current status of the bulk request. Append this to your Harvest base URL to fetch the latest state.

## Other responses

- `401` — Unauthorized
- `413` — Payload is larger than 10MB
- `422` — Validation Error
- `429` — Client has more than 5 active jobs

---

[API](https://skmtc.dev/greenhouse/apis/auth-api.md) · [All operations](https://skmtc.dev/greenhouse/apis/auth-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/greenhouse/auth-api/revisions/9517a2e54640/schema)
