---
title: Content Plan Data Model
description: "In Assette, [Content Plans](https://learn.assette.com/docs/understanding-content-plans/) govern the generation and delivery of client content, such as reports or documents. Each Content Plan defines when, how, and for whom content should be created and sent. This article explains the structure and function of…"
url: "https://learn.assette.com/docs/content-plan-data-model/"
updated: "2025-05-13"
category: Users / Content Hub / Content Center
---

# Content Plan Data Model

In Assette, [Content Plans](https://learn.assette.com/docs/understanding-content-plans/) govern the generation and delivery of client content, such as reports or documents. Each Content Plan defines when, how, and for whom content should be created and sent. This article explains the structure and function of Content Plans from a technical perspective. For a more generic overview, see [Content Plans](https://learn.assette.com/docs/understanding-content-plans/) instead.

## Overview of the Data Model

Each Content Plan is represented as a JSON object. A typical response returns a list of these objects under the `data` array. Every Content Plan consists of three main sections:

1. **General Metadata**
2. **Production Settings**
3. **Delivery Settings**

## 1. General Metadata

This section defines the foundational identifiers and purpose of the content.

| Field | Description |
| --- | --- |
| `organizationCode` | Identifies the organization for which the content is generated (e.g., Assette) |
| `recipientCode` | Identifies the recipient. Mandatory unless`sendAtOrgLevel` is `true`. |
| `sendAtOrgLevel` | If `true`, the content is sent at the organization level, not the recipient level. |
| `contentType` | Specifies the type of content (e.g., Monthly Client Report). |
| `purpose` | Indicates whether the content is for `"Client"` or `"Sales"`. No other values are permitted. |
| `accountCode` | Required if `purpose` is `"Client"`. Identifies the client account. |
| `productCode` | Optional. Links the content to a product, if relevant. |

## 2. Production Settings

This section defines how and when the content is generated. It comprises three major sub-sections:

### DateStatus

Indicates whether the data used is **Preliminary** or **Final**.

### Period

Defines the frequency and timing of content generation.

| Field | Description |
| --- | --- |
| `Frequency` | Daily, Weekly, Monthly, Quarterly, or Yearly. |
| `StartMonth` | For Quarterly or Yearly frequencies, specifies the starting month. |
| `GenerateForEvery` | For Daily frequency, controls the specific day rule (e.g., `BusinessDay`). |
| `SelectedList` | For `GenerateForEvery = SelectedDays`, specifies the days (e.g., Monday, Wednesday, Friday). |

### **AsOfDateRule**

Determines the effective date for data selection.

| Field | Description |
| --- | --- |
| `DayType` | Any one of the following values: `Day`, `DayExceptWeekends`, or `BusinessDay`. |
| `Index` | Negative value indicating how many periods back to use (e.g., `-1` for the most recent). |
| `Calendar` | Specifies the business calendar (e.g., `USA`, `UK`). |

### **GenerateWhen**

Controls the generation trigger and timing.

| Field | Description |
| --- | --- |
| `Type` | `WhenDataIsReady`, `On`, or `Manually`. |
| `Position` | Specifies ordinal position (e.g., 2nd Business Day). |
| `On` | Specifies the generation day logic.    – For **daily** frequency, this is `null`.    – For **weekly**, options are days of the week (e.g., `Sunday`, `Monday`).    – For **monthly and other frequencies**, options are `Day`, `DayExceptWeekends`, or `BusinessDay`. |
| `TimeZone` | Time zone for the trigger, using Microsoft time zone identifiers. |
| `Time` | Specific time of day for generation. |
| `BatchGroups` | Optional grouping mechanism for batch processing. |

## 3. Delivery Settings

This section defines how and when the content is delivered to recipients.

| Field | Description |
| --- | --- |
| `method` | Delivery channel: `Email`, `PostalMail`, `ClientPortal`, `FTP`, or `API`. |
| `deliverAs` | Defines whether content is sent as an `Attachment` or via `AssetteLink`. |
| `protectAssetteLinkUsingPassword` | Boolean flag to enable password protection for `AssetteLink`. |
| `sendAttachmentsAsAZipFile` | Applicable for `Email`/`API`; controls zip delivery format. |
| `format` | Output format: `PDF` or `Native`. |
| `emailTemplate` | Specifies the email template used (if method is `Email`). |
| `deliverWhen` | Determines delivery timing: after **this content** is approved or after **all content** is approved. |

## Example Use Case

Here is an example illustrating how these settings combine to form a Content Plan:

- **Plan Type**: Monthly Client Report
- **Recipient**: Defined by `recipientCode`
- **Frequency**: Monthly, starting in January
- **Data**: Uses the last business day of the USA calendar
- **Trigger**: Generates on the 2nd business day at 09:00 EST
- **Delivery**: Sent via email as a password-free PDF attachment using a predefined email template

## Validation & Enforcement

The Assette enforces the following validations and conditional requirements:

- If `sendAtOrgLevel = false`, then `recipientCode` must be provided.
- If `purpose = "Client"`, then `accountCode` must be provided.
- Fields like `sendAttachmentsAsAZipFile` and `emailTemplate` are only valid for certain delivery methods.
- The `GenerateWhen` object must include valid time zone and time format details.
