---
title: "Retrieve Email History By Id"
method: GET
path: "/emails/{id}/history/body/{history_id}"
tags: ["Emails"]
---

# Retrieve Email History By Id

`GET /emails/{id}/history/body/{history_id}`

## Request

- Base URL: `https://api.buttondown.com/v1`
- URL: `https://api.buttondown.com/v1/emails/{id}/history/body/{history_id}`
- Auth: API key in header `Authorization`

Retrieve a specific historical version of an email's body

## Path parameters

- `id` string, required
- `history_id` integer, required

## Query parameters

- `expand` string[]: If provided, expand the given field.

## Response `200`

OK

- History
  - `history_id` integer, required: A monotonically increasing history entry ID.
  - `creation_date` string, date-time, required: The date and time at which the object was first created.
  - `value` string, required: The field's value at the time of this history entry.
  - `user_id` string, nullable: The ID of the user who made this change, if attributable.
  - `user` User
    - `permissions` Permissions, required
      - `subscriber` 'none' | 'read' | 'write': An enumeration.
      - `email` 'none' | 'read' | 'write': An enumeration.
      - `sending` 'none' | 'read' | 'write': An enumeration.
      - `styling` 'none' | 'read' | 'write': An enumeration.
      - `administrivia` 'none' | 'read' | 'write': An enumeration.
      - `automations` 'none' | 'read' | 'write': An enumeration.
      - `surveys` 'none' | 'read' | 'write': An enumeration.
      - `forms` 'none' | 'read' | 'write': An enumeration.
    - `email_address` string, required: The email address of the user.
    - `id` string, required: A unique TypeID associated with the object.
    - `creation_date` string, date-time, required: The date and time at which the object was first created.
    - `status` 'pending' | 'accepted' | 'declined' | 'revoked' | 'owner', required: An enumeration.
    - `last_logged_in` string, date-time, nullable: When the user last logged in, or null if they haven't accepted the invitation.

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `409`: Conflict
- `422`: Unprocessable Content
- `429`: Too Many Requests

## Changes

- **2026-07-13** `228cc05ba97d`: 2 info
  - added the non-success response with the status `422`
  - added the non-success response with the status `429`
- **2026-06-07** `13f3bc084194`: 10 breaking, 1 warning, 5 info
  - removed the enum value `user` from the property `items/` of the `query` request parameter `expand`
  - response property `user_id` list-of-types was widened by adding types `null` to media type `application/json` of response `200`
  - the `code` response's property type changed from no type to `string` for status `403`
  - the `code` response's property type changed from no type to `string` for status `404`
  - …12 more
- **2026-01-17** `8590daeecaea`: 2 breaking, 2 info
  - the `user/id` response's property format changed from `uuid` to no format for status `200`
  - the `user_id` response's property format changed from `uuid` to no format for status `200`
  - for the `path` request parameter `id`, the format was generalized from `uuid` to no format
  - added the optional property `user/permissions/forms` to the response with the `200` status
- **2025-02-18** `7b086652e3cf`: 3 info
  - the endpoint scheme security `PermissionAuthenticationRequirement` was added to the API
  - the endpoint scheme security `AuthenticationRequirement` was removed from the API
  - added the optional property `user/last_logged_in` to the response with the `200` status

[Operation history](https://skmtc.dev/buttondown/apis/buttondown-api/changes/emails/:id/history/body/:history_id/get.md)

---

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