Skip to content

Retention Labels: API Endpoints ​

The retention labels feature exposes a RESTful API for managing retention labels and applying them to individual archived emails. All endpoints require authentication and appropriate permissions as specified below.

Base URL: /api/v1/enterprise/retention-policy

All endpoints also require the RETENTION_POLICY feature to be enabled in the enterprise license.


Label Management Endpoints ​

List All Labels ​

Retrieves all retention labels, ordered by creation date ascending.

  • Endpoint: GET /labels
  • Method: GET
  • Authentication: Required
  • Permission: manage:all

Response Body ​

json
[
	{
		"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
		"name": "Legal Hold - Litigation ABC",
		"description": "Extended retention for emails related to litigation ABC vs Company",
		"retentionPeriodDays": 2555,
		"isDisabled": false,
		"createdAt": "2025-10-01T00:00:00.000Z"
	},
	{
		"id": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
		"name": "Executive Communications",
		"description": null,
		"retentionPeriodDays": 3650,
		"isDisabled": true,
		"createdAt": "2025-09-15T12:30:00.000Z"
	}
]

Get Label by ID ​

Retrieves a single retention label by its UUID.

  • Endpoint: GET /labels/:id
  • Method: GET
  • Authentication: Required
  • Permission: manage:all

Path Parameters ​

ParameterTypeDescription
iduuidThe UUID of the label to get.

Response Body ​

Returns a single label object (same shape as the list endpoint), or 404 if not found.


Create Label ​

Creates a new retention label. The label name must be unique across the system.

  • Endpoint: POST /labels
  • Method: POST
  • Authentication: Required
  • Permission: manage:all

Request Body ​

FieldTypeRequiredDescription
namestringYesUnique label name. Max 255 characters.
descriptionstringNoHuman-readable description. Max 1000 characters.
retentionPeriodDaysintegerYesNumber of days to retain emails with this label. Minimum 1.

Example Request ​

json
{
	"name": "Financial Records - Q4 2025",
	"description": "Extended retention for Q4 2025 financial correspondence per regulatory requirements",
	"retentionPeriodDays": 2555
}

Response ​

  • 201 Created — Returns the created label object.
  • 409 Conflict — A label with this name already exists.
  • 422 Unprocessable Entity — Validation errors.

Update Label ​

Updates an existing retention label. Only the fields included in the request body are modified.

  • Endpoint: PUT /labels/:id
  • Method: PUT
  • Authentication: Required
  • Permission: manage:all

Path Parameters ​

ParameterTypeDescription
iduuidThe UUID of the label to update.

Request Body ​

All fields from the create endpoint are accepted, and all are optional. Only provided fields are updated.

Important: The retentionPeriodDays field cannot be modified if the label is currently applied to any emails. Attempting to do so will return a 409 Conflict error.

Example Request ​

json
{
	"name": "Financial Records - Q4 2025 (Updated)",
	"description": "Updated description for Q4 2025 financial records retention"
}

Response ​

  • 200 OK — Returns the updated label object.
  • 404 Not Found — Label with the given ID does not exist.
  • 409 Conflict — Attempted to modify retention period while label is applied to emails.
  • 422 Unprocessable Entity — Validation errors.

Delete Label ​

Deletes or disables a retention label depending on its usage status.

  • Endpoint: DELETE /labels/:id
  • Method: DELETE
  • Authentication: Required
  • Permission: manage:all

Path Parameters ​

ParameterTypeDescription
iduuidThe UUID of the label to delete.

Deletion Logic ​

  • Hard Delete: If the label has never been applied to any emails, it is permanently removed.
  • Soft Disable: If the label is currently applied to one or more emails, it is marked as isDisabled = true instead of being deleted. This preserves the retention clock for tagged emails while preventing new applications.

Response Body ​

json
{
	"action": "deleted"
}

or

json
{
	"action": "disabled"
}

Response Codes ​

  • 200 OK — Label successfully deleted or disabled. Check the action field in the response body.
  • 404 Not Found — Label with the given ID does not exist.

Email Label Endpoints ​

Get Email's Label ​

Retrieves the retention label currently applied to a specific archived email.

  • Endpoint: GET /email/:emailId/label
  • Method: GET
  • Authentication: Required
  • Permission: read:archive

Path Parameters ​

ParameterTypeDescription
emailIduuidThe UUID of the archived email.

Response Body ​

Returns null if no label is applied:

json
null

Or the label information if a label is applied:

json
{
	"labelId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
	"labelName": "Legal Hold - Litigation ABC",
	"retentionPeriodDays": 2555,
	"appliedAt": "2025-10-15T14:30:00.000Z",
	"appliedByUserId": "user123"
}

Response Codes ​

  • 200 OK — Returns label information or null.
  • 500 Internal Server Error — Server error during processing.

Apply Label to Email ​

Applies a retention label to an archived email. If the email already has a label, the existing label is replaced.

  • Endpoint: POST /email/:emailId/label
  • Method: POST
  • Authentication: Required
  • Permission: delete:archive

Path Parameters ​

ParameterTypeDescription
emailIduuidThe UUID of the archived email.

Request Body ​

FieldTypeRequiredDescription
labelIduuidYesThe UUID of the label to apply.

Example Request ​

json
{
	"labelId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

Response Body ​

json
{
	"labelId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
	"labelName": "Legal Hold - Litigation ABC",
	"retentionPeriodDays": 2555,
	"appliedAt": "2025-10-15T14:30:00.000Z",
	"appliedByUserId": "user123"
}

Response Codes ​

  • 200 OK — Label successfully applied.
  • 404 Not Found — Email or label not found.
  • 409 Conflict — Attempted to apply a disabled label.
  • 422 Unprocessable Entity — Invalid request body.

Remove Label from Email ​

Removes the retention label from an archived email if one is applied.

  • Endpoint: DELETE /email/:emailId/label
  • Method: DELETE
  • Authentication: Required
  • Permission: delete:archive

Path Parameters ​

ParameterTypeDescription
emailIduuidThe UUID of the archived email.

Response Body ​

If a label was removed:

json
{
	"message": "Label removed successfully."
}

If no label was applied:

json
{
	"message": "No label was applied to this email."
}

Response Codes ​

  • 200 OK — Operation completed (regardless of whether a label was actually removed).
  • 500 Internal Server Error — Server error during processing.

Error Responses ​

All endpoints use the standard error response format:

json
{
	"status": "error",
	"statusCode": 404,
	"message": "The requested resource could not be found.",
	"errors": null
}

For validation errors (422 Unprocessable Entity):

json
{
	"status": "error",
	"statusCode": 422,
	"message": "Invalid input provided.",
	"errors": [
		{
			"field": "name",
			"message": "Name is required."
		},
		{
			"field": "retentionPeriodDays",
			"message": "Retention period must be at least 1 day."
		}
	]
}

Validation Constraints ​

FieldConstraint
Label name1–255 characters, must be unique.
DescriptionMax 1000 characters.
Retention periodPositive integer (≥ 1 day).
Label ID (UUID)Must be a valid UUID format.
Email ID (UUID)Must be a valid UUID format.