---
title: "Update a bundle"
method: PUT
path: "/bundles/{id}"
tags: ["Private"]
---

# Update a bundle

`PUT /bundles/{id}`

## Request

- Base URL: `/v1` (relative, and the document was published on a file host, not at the API’s origin)
- URL: `/v1/bundles/{id}`
- Auth: API key in header `Authorization`

Update the bundle by providing updated information.

## Headers

- `If-Match` string, required

## Request body

- Bundle: A model for the response body when retrieving a bundle
  - `bundle_type` 'MANUAL' | 'SCHEDULED', required: The type of bundle.
  - `created_by` object: The user that created the bundle, taken from the auth token supplied. This should only be set on initial creation of the bundle.
    - `email` string, required: The email of the user who created the bundle.
  - `created_at` string, date-time: The ISO8601 date-time the bundle was created at.
  - `id` string: The bundle ID
  - `last_updated_by` object: The user that last updated the bundle, taken from the auth token supplied.
    - `email` string, required: The email of the user who updated the bundle.
  - `preview_teams` object[]: A list of teams who have permissions to view the dataset series in the bundle.
    - `id` string, required: The preview team ID.
  - `scheduled_at` string, date-time: The ISO8601 date-time the bundle is scheduled to publish at.
  - `state` 'DRAFT' | 'IN_REVIEW' | 'APPROVED' | 'PUBLISHED', required: The current workflow state of the bundle as a whole. The possible states are: * `DRAFT `: Bundle has been created and is being populated with content changes. * `IN_REVIEW`: Bundle has been submitted for review. * `APPROVED`: Bundle has been approved and is awaiting release. * `PUBLISHED `: Bundle has been published and is now public.
  - `title` string, required: The title of the bundle
  - `updated_at` string, date-time: The ISO8601 date-time the bundle was last updated at.
  - `managed_by` 'WAGTAIL' | 'DATA-ADMIN', required: The system that created and manages the bundle

## Response `200`

The bundle has been updated

- Bundle: A model for the response body when retrieving a bundle
  - `bundle_type` 'MANUAL' | 'SCHEDULED', required: The type of bundle.
  - `created_by` object: The user that created the bundle, taken from the auth token supplied. This should only be set on initial creation of the bundle.
    - `email` string, required: The email of the user who created the bundle.
  - `created_at` string, date-time: The ISO8601 date-time the bundle was created at.
  - `id` string: The bundle ID
  - `last_updated_by` object: The user that last updated the bundle, taken from the auth token supplied.
    - `email` string, required: The email of the user who updated the bundle.
  - `preview_teams` object[]: A list of teams who have permissions to view the dataset series in the bundle.
    - `id` string, required: The preview team ID.
  - `scheduled_at` string, date-time: The ISO8601 date-time the bundle is scheduled to publish at.
  - `state` 'DRAFT' | 'IN_REVIEW' | 'APPROVED' | 'PUBLISHED', required: The current workflow state of the bundle as a whole. The possible states are: * `DRAFT `: Bundle has been created and is being populated with content changes. * `IN_REVIEW`: Bundle has been submitted for review. * `APPROVED`: Bundle has been approved and is awaiting release. * `PUBLISHED `: Bundle has been published and is now public.
  - `title` string, required: The title of the bundle
  - `updated_at` string, date-time: The ISO8601 date-time the bundle was last updated at.
  - `managed_by` 'WAGTAIL' | 'DATA-ADMIN', required: The system that created and manages the bundle

## Other responses

- `400`: Unable to process request due to a malformed or invalid request body or query parameter.
- `401`: Authentication information is missing or invalid.
- `403`: Access denied.
- `404`: The requested resource does not exist.
- `409`: Change rejected due to a conflict with the current resource state. A common cause is attempting to change a bundle that is already locked pending publication or has already been published.
- `500`: Failed to process the request due to an internal error.

## Changes

> 31 revisions in range; 2 not diffed.

- **2026-05-06** `edf44c1af298`: 1 info
  - removed the non-success response with the status `412`

[Operation history](https://skmtc.dev/office-of-national-statistics/apis/bundle-administration/changes/bundles/:id/put.md)

---

[API](https://skmtc.dev/office-of-national-statistics/apis/bundle-administration.md) - [All operations](https://skmtc.dev/office-of-national-statistics/apis/bundle-administration/llms.txt) - [OpenAPI document](https://skmtc.dev/office-of-national-statistics/apis/bundle-administration/revisions/4ac833f533b1?raw)
