@agility/management-sdk 0.1.36 → 0.1.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/README.md +396 -317
  2. package/dist/apiMethods/clientInstance.d.ts +2 -0
  3. package/dist/apiMethods/clientInstance.js +11 -2
  4. package/dist/apiMethods/containerMethods.d.ts +3 -0
  5. package/dist/apiMethods/containerMethods.js +43 -9
  6. package/dist/apiMethods/contentMethods.d.ts +12 -0
  7. package/dist/apiMethods/contentMethods.js +100 -46
  8. package/dist/apiMethods/instanceMethods.d.ts +13 -0
  9. package/dist/apiMethods/instanceMethods.js +48 -0
  10. package/dist/apiMethods/pageMethods.d.ts +12 -0
  11. package/dist/apiMethods/pageMethods.js +88 -34
  12. package/dist/enums/contentViewType.d.ts +6 -0
  13. package/dist/enums/contentViewType.js +10 -0
  14. package/dist/index.d.ts +3 -0
  15. package/dist/index.js +3 -0
  16. package/dist/models/fetchApiStatus.d.ts +38 -0
  17. package/dist/models/fetchApiStatus.js +2 -0
  18. package/dist/models/pagedResult.d.ts +4 -0
  19. package/dist/models/pagedResult.js +2 -0
  20. package/docs/asset-methods.md +381 -381
  21. package/docs/auth-component.md +360 -360
  22. package/docs/auth.md +593 -593
  23. package/docs/batch-methods.md +243 -243
  24. package/docs/cicd.md +606 -606
  25. package/docs/container-methods.md +267 -267
  26. package/docs/content-methods.md +491 -422
  27. package/docs/instance-methods.md +185 -105
  28. package/docs/instance-user-methods.md +230 -230
  29. package/docs/model-methods.md +433 -433
  30. package/docs/multi-instance-operations.md +191 -191
  31. package/docs/page-methods.md +737 -670
  32. package/docs/server-user-methods.md +279 -279
  33. package/docs/webhook-methods.md +451 -451
  34. package/license.txt +20 -20
  35. package/package.json +40 -40
  36. package/tsconfig.json +14 -14
  37. package/.cursor/api-coverage.md +0 -217
  38. package/.cursor/api-documentation-manifest.md +0 -275
  39. package/.cursor/api-functions-analysis.md +0 -111
  40. package/.cursor/breakout-manifest.md +0 -278
  41. package/.cursor/docs-final-check.md +0 -269
  42. package/.cursor/github-actions-improvements.md +0 -76
  43. package/.cursor/hardening.md +0 -271
  44. package/.cursor/linting-fix.md +0 -160
  45. package/.cursor/manifest.md +0 -243
  46. package/.cursor/mocks.md +0 -100
  47. package/.cursor/test-coverage.md +0 -841
  48. package/.env +0 -92
  49. package/coverage/base.css +0 -224
  50. package/coverage/block-navigation.js +0 -87
  51. package/coverage/coverage-summary.json +0 -43
  52. package/coverage/favicon.png +0 -0
  53. package/coverage/index.html +0 -161
  54. package/coverage/lcov-report/base.css +0 -224
  55. package/coverage/lcov-report/block-navigation.js +0 -87
  56. package/coverage/lcov-report/favicon.png +0 -0
  57. package/coverage/lcov-report/index.html +0 -161
  58. package/coverage/lcov-report/prettify.css +0 -1
  59. package/coverage/lcov-report/prettify.js +0 -2
  60. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  61. package/coverage/lcov-report/sorter.js +0 -210
  62. package/coverage/lcov-report/src/apiClient.ts.html +0 -199
  63. package/coverage/lcov-report/src/apiMethods/assetMethods.ts.html +0 -682
  64. package/coverage/lcov-report/src/apiMethods/batchMethods.ts.html +0 -736
  65. package/coverage/lcov-report/src/apiMethods/clientInstance.ts.html +0 -403
  66. package/coverage/lcov-report/src/apiMethods/containerMethods.ts.html +0 -460
  67. package/coverage/lcov-report/src/apiMethods/contentMethods.ts.html +0 -1183
  68. package/coverage/lcov-report/src/apiMethods/index.html +0 -266
  69. package/coverage/lcov-report/src/apiMethods/instanceMethods.ts.html +0 -160
  70. package/coverage/lcov-report/src/apiMethods/instanceUserMethods.ts.html +0 -268
  71. package/coverage/lcov-report/src/apiMethods/modelMethods.ts.html +0 -352
  72. package/coverage/lcov-report/src/apiMethods/pageMethods.ts.html +0 -1276
  73. package/coverage/lcov-report/src/apiMethods/serverUserMethods.ts.html +0 -196
  74. package/coverage/lcov-report/src/apiMethods/webhookMethods.ts.html +0 -271
  75. package/coverage/lcov-report/src/enums/batchItemType.ts.html +0 -106
  76. package/coverage/lcov-report/src/enums/batchOperationType.ts.html +0 -142
  77. package/coverage/lcov-report/src/enums/batchState..ts.html +0 -106
  78. package/coverage/lcov-report/src/enums/index.html +0 -161
  79. package/coverage/lcov-report/src/enums/workflowOperationType.ts.html +0 -175
  80. package/coverage/lcov-report/src/index.html +0 -116
  81. package/coverage/lcov-report/src/models/assetContainer.ts.html +0 -106
  82. package/coverage/lcov-report/src/models/assetGalleries.ts.html +0 -103
  83. package/coverage/lcov-report/src/models/assetMediaGrouping.ts.html +0 -136
  84. package/coverage/lcov-report/src/models/assetMediaGroupingMetaData.ts.html +0 -97
  85. package/coverage/lcov-report/src/models/batch.ts.html +0 -178
  86. package/coverage/lcov-report/src/models/batchItem.ts.html +0 -127
  87. package/coverage/lcov-report/src/models/container.ts.html +0 -232
  88. package/coverage/lcov-report/src/models/contentDefinitionTypeID.ts.html +0 -142
  89. package/coverage/lcov-report/src/models/contentItem.ts.html +0 -202
  90. package/coverage/lcov-report/src/models/contentSectionDefaultModule.ts.html +0 -106
  91. package/coverage/lcov-report/src/models/contentSectionDefinition.ts.html +0 -196
  92. package/coverage/lcov-report/src/models/contentViewColumn.ts.html +0 -109
  93. package/coverage/lcov-report/src/models/exception.ts.html +0 -109
  94. package/coverage/lcov-report/src/models/index.html +0 -476
  95. package/coverage/lcov-report/src/models/instanceRole.ts.html +0 -106
  96. package/coverage/lcov-report/src/models/instanceUser.ts.html +0 -130
  97. package/coverage/lcov-report/src/models/locales.ts.html +0 -100
  98. package/coverage/lcov-report/src/models/media.ts.html +0 -178
  99. package/coverage/lcov-report/src/models/model.ts.html +0 -172
  100. package/coverage/lcov-report/src/models/notification.ts.html +0 -124
  101. package/coverage/lcov-report/src/models/options.ts.html +0 -109
  102. package/coverage/lcov-report/src/models/pageItem.ts.html +0 -268
  103. package/coverage/lcov-report/src/models/pageModel.ts.html +0 -130
  104. package/coverage/lcov-report/src/models/sharedModule.ts.html +0 -106
  105. package/coverage/lcov-report/src/models/sitemap.ts.html +0 -148
  106. package/coverage/lcov-report/src/models/websiteUser.ts.html +0 -157
  107. package/coverage/lcov.info +0 -1459
  108. package/coverage/prettify.css +0 -1
  109. package/coverage/prettify.js +0 -2
  110. package/coverage/sort-arrow-sprite.png +0 -0
  111. package/coverage/sorter.js +0 -210
  112. package/coverage/src/apiClient.ts.html +0 -199
  113. package/coverage/src/apiMethods/assetMethods.ts.html +0 -682
  114. package/coverage/src/apiMethods/batchMethods.ts.html +0 -736
  115. package/coverage/src/apiMethods/clientInstance.ts.html +0 -403
  116. package/coverage/src/apiMethods/containerMethods.ts.html +0 -460
  117. package/coverage/src/apiMethods/contentMethods.ts.html +0 -1183
  118. package/coverage/src/apiMethods/index.html +0 -266
  119. package/coverage/src/apiMethods/instanceMethods.ts.html +0 -160
  120. package/coverage/src/apiMethods/instanceUserMethods.ts.html +0 -268
  121. package/coverage/src/apiMethods/modelMethods.ts.html +0 -352
  122. package/coverage/src/apiMethods/pageMethods.ts.html +0 -1276
  123. package/coverage/src/apiMethods/serverUserMethods.ts.html +0 -196
  124. package/coverage/src/apiMethods/webhookMethods.ts.html +0 -271
  125. package/coverage/src/enums/batchItemType.ts.html +0 -106
  126. package/coverage/src/enums/batchOperationType.ts.html +0 -142
  127. package/coverage/src/enums/batchState..ts.html +0 -106
  128. package/coverage/src/enums/index.html +0 -161
  129. package/coverage/src/enums/workflowOperationType.ts.html +0 -175
  130. package/coverage/src/index.html +0 -116
  131. package/coverage/src/models/assetContainer.ts.html +0 -106
  132. package/coverage/src/models/assetGalleries.ts.html +0 -103
  133. package/coverage/src/models/assetMediaGrouping.ts.html +0 -136
  134. package/coverage/src/models/assetMediaGroupingMetaData.ts.html +0 -97
  135. package/coverage/src/models/batch.ts.html +0 -178
  136. package/coverage/src/models/batchItem.ts.html +0 -127
  137. package/coverage/src/models/container.ts.html +0 -232
  138. package/coverage/src/models/contentDefinitionTypeID.ts.html +0 -142
  139. package/coverage/src/models/contentItem.ts.html +0 -202
  140. package/coverage/src/models/contentSectionDefaultModule.ts.html +0 -106
  141. package/coverage/src/models/contentSectionDefinition.ts.html +0 -196
  142. package/coverage/src/models/contentViewColumn.ts.html +0 -109
  143. package/coverage/src/models/exception.ts.html +0 -109
  144. package/coverage/src/models/index.html +0 -476
  145. package/coverage/src/models/instanceRole.ts.html +0 -106
  146. package/coverage/src/models/instanceUser.ts.html +0 -130
  147. package/coverage/src/models/locales.ts.html +0 -100
  148. package/coverage/src/models/media.ts.html +0 -178
  149. package/coverage/src/models/model.ts.html +0 -172
  150. package/coverage/src/models/notification.ts.html +0 -124
  151. package/coverage/src/models/options.ts.html +0 -109
  152. package/coverage/src/models/pageItem.ts.html +0 -268
  153. package/coverage/src/models/pageModel.ts.html +0 -130
  154. package/coverage/src/models/sharedModule.ts.html +0 -106
  155. package/coverage/src/models/sitemap.ts.html +0 -148
  156. package/coverage/src/models/websiteUser.ts.html +0 -157
  157. package/dist/.tsbuildinfo +0 -1
  158. package/dist/apiClient.d.ts.map +0 -1
  159. package/dist/apiClient.js.map +0 -1
  160. package/dist/apiMethods/assetMethods.d.ts.map +0 -1
  161. package/dist/apiMethods/assetMethods.js.map +0 -1
  162. package/dist/apiMethods/batchMethods.d.ts.map +0 -1
  163. package/dist/apiMethods/batchMethods.js.map +0 -1
  164. package/dist/apiMethods/clientInstance.d.ts.map +0 -1
  165. package/dist/apiMethods/clientInstance.js.map +0 -1
  166. package/dist/apiMethods/containerMethods.d.ts.map +0 -1
  167. package/dist/apiMethods/containerMethods.js.map +0 -1
  168. package/dist/apiMethods/contentMethods.d.ts.map +0 -1
  169. package/dist/apiMethods/contentMethods.js.map +0 -1
  170. package/dist/apiMethods/instanceMethods.d.ts.map +0 -1
  171. package/dist/apiMethods/instanceMethods.js.map +0 -1
  172. package/dist/apiMethods/instanceUserMethods.d.ts.map +0 -1
  173. package/dist/apiMethods/instanceUserMethods.js.map +0 -1
  174. package/dist/apiMethods/modelMethods.d.ts.map +0 -1
  175. package/dist/apiMethods/modelMethods.js.map +0 -1
  176. package/dist/apiMethods/pageMethods.d.ts.map +0 -1
  177. package/dist/apiMethods/pageMethods.js.map +0 -1
  178. package/dist/apiMethods/serverUserMethods.d.ts.map +0 -1
  179. package/dist/apiMethods/serverUserMethods.js.map +0 -1
  180. package/dist/apiMethods/webhookMethods.d.ts.map +0 -1
  181. package/dist/apiMethods/webhookMethods.js.map +0 -1
  182. package/dist/enums/assetGroupingType.d.ts.map +0 -1
  183. package/dist/enums/assetGroupingType.js.map +0 -1
  184. package/dist/enums/batchItemType.d.ts.map +0 -1
  185. package/dist/enums/batchItemType.js.map +0 -1
  186. package/dist/enums/batchOperationType.d.ts.map +0 -1
  187. package/dist/enums/batchOperationType.js.map +0 -1
  188. package/dist/enums/batchState..d.ts.map +0 -1
  189. package/dist/enums/batchState..js.map +0 -1
  190. package/dist/enums/pageItemTemplateType.d.ts.map +0 -1
  191. package/dist/enums/pageItemTemplateType.js.map +0 -1
  192. package/dist/enums/workflowOperationType.d.ts.map +0 -1
  193. package/dist/enums/workflowOperationType.js.map +0 -1
  194. package/dist/index.d.ts.map +0 -1
  195. package/dist/index.js.map +0 -1
  196. package/dist/models/assetContainer.d.ts.map +0 -1
  197. package/dist/models/assetContainer.js.map +0 -1
  198. package/dist/models/assetGalleries.d.ts.map +0 -1
  199. package/dist/models/assetGalleries.js.map +0 -1
  200. package/dist/models/assetMediaGrouping.d.ts.map +0 -1
  201. package/dist/models/assetMediaGrouping.js.map +0 -1
  202. package/dist/models/assetMediaGroupingMetaData.d.ts.map +0 -1
  203. package/dist/models/assetMediaGroupingMetaData.js.map +0 -1
  204. package/dist/models/batch.d.ts.map +0 -1
  205. package/dist/models/batch.js.map +0 -1
  206. package/dist/models/batchItem.d.ts.map +0 -1
  207. package/dist/models/batchItem.js.map +0 -1
  208. package/dist/models/batchTypes.d.ts.map +0 -1
  209. package/dist/models/batchTypes.js.map +0 -1
  210. package/dist/models/container.d.ts.map +0 -1
  211. package/dist/models/container.js.map +0 -1
  212. package/dist/models/contentDefinitionTypeID.d.ts.map +0 -1
  213. package/dist/models/contentDefinitionTypeID.js.map +0 -1
  214. package/dist/models/contentItem.d.ts.map +0 -1
  215. package/dist/models/contentItem.js.map +0 -1
  216. package/dist/models/contentItemHistory.d.ts.map +0 -1
  217. package/dist/models/contentItemHistory.js.map +0 -1
  218. package/dist/models/contentListFilterModel.d.ts.map +0 -1
  219. package/dist/models/contentListFilterModel.js.map +0 -1
  220. package/dist/models/contentSectionDefaultModule.d.ts.map +0 -1
  221. package/dist/models/contentSectionDefaultModule.js.map +0 -1
  222. package/dist/models/contentSectionDefinition.d.ts.map +0 -1
  223. package/dist/models/contentSectionDefinition.js.map +0 -1
  224. package/dist/models/contentViewColumn.d.ts.map +0 -1
  225. package/dist/models/contentViewColumn.js.map +0 -1
  226. package/dist/models/exception.d.ts.map +0 -1
  227. package/dist/models/exception.js.map +0 -1
  228. package/dist/models/instanceRole.d.ts.map +0 -1
  229. package/dist/models/instanceRole.js.map +0 -1
  230. package/dist/models/instanceUser.d.ts.map +0 -1
  231. package/dist/models/instanceUser.js.map +0 -1
  232. package/dist/models/itemComments.d.ts.map +0 -1
  233. package/dist/models/itemComments.js.map +0 -1
  234. package/dist/models/listParams.d.ts.map +0 -1
  235. package/dist/models/listParams.js.map +0 -1
  236. package/dist/models/locales.d.ts.map +0 -1
  237. package/dist/models/locales.js.map +0 -1
  238. package/dist/models/media.d.ts.map +0 -1
  239. package/dist/models/media.js.map +0 -1
  240. package/dist/models/model.d.ts.map +0 -1
  241. package/dist/models/model.js.map +0 -1
  242. package/dist/models/notification.d.ts.map +0 -1
  243. package/dist/models/notification.js.map +0 -1
  244. package/dist/models/options.d.ts.map +0 -1
  245. package/dist/models/options.js.map +0 -1
  246. package/dist/models/pageHistory.d.ts.map +0 -1
  247. package/dist/models/pageHistory.js.map +0 -1
  248. package/dist/models/pageItem.d.ts.map +0 -1
  249. package/dist/models/pageItem.js.map +0 -1
  250. package/dist/models/pageModel.d.ts.map +0 -1
  251. package/dist/models/pageModel.js.map +0 -1
  252. package/dist/models/serverUser.d.ts.map +0 -1
  253. package/dist/models/serverUser.js.map +0 -1
  254. package/dist/models/sharedModule.d.ts.map +0 -1
  255. package/dist/models/sharedModule.js.map +0 -1
  256. package/dist/models/sitemap.d.ts.map +0 -1
  257. package/dist/models/sitemap.js.map +0 -1
  258. package/dist/models/webhook.d.ts.map +0 -1
  259. package/dist/models/webhook.js.map +0 -1
  260. package/dist/models/websiteListing.d.ts.map +0 -1
  261. package/dist/models/websiteListing.js.map +0 -1
  262. package/dist/models/websiteUser.d.ts.map +0 -1
  263. package/dist/models/websiteUser.js.map +0 -1
@@ -1,434 +1,434 @@
1
- # Agility CMS & Management API TypeScript SDK
2
-
3
- ## ModelMethods
4
-
5
- This class provides comprehensive content model management operations for Agility CMS. Content models define the structure and fields for content items, acting as templates that determine what data can be stored and how it's organized.
6
-
7
- **Important Notes:**
8
- - Content models define the schema for content items
9
- - Models contain field definitions that specify data types, validation rules, and UI controls
10
- - Changes to models may affect existing content items using those models
11
- - Models are used by containers to organize and validate content
12
- - Model reference names must be unique within the instance
13
-
14
- ### Function List
15
- - [getContentModel](#getcontentmodel) - Retrieves a specific content model by ID
16
- - [getModelByReferenceName](#getmodelbyreferencename) - Retrieves a model by reference name
17
- - [getContentModules](#getcontentmodules) - Retrieves list of all content modules
18
- - [getPageModules](#getpagemodules) - Retrieves list of all page modules
19
- - [saveModel](#savemodel) - Creates or updates a content model
20
- - [deleteModel](#deletemodel) - Deletes a content model by ID
21
-
22
- ---
23
-
24
- ### getContentModel
25
-
26
- Retrieves a specific content model by its unique ID.
27
-
28
- | Parameter | Type | Required | Description |
29
- |-----------|------|----------|-------------|
30
- | `id` | `number` | Yes | The model ID to retrieve |
31
- | `guid` | `string` | Yes | Current website GUID |
32
-
33
- **Returns:** `Model` - Complete model object with field definitions
34
-
35
- **Usage Example:**
36
- ```typescript
37
- const model = await apiClient.modelMethods.getContentModel(123, guid);
38
- console.log('Model name:', model.displayName);
39
- console.log('Reference name:', model.referenceName);
40
- console.log('Description:', model.description);
41
- console.log('Field count:', model.fields.length);
42
-
43
- // Display field information
44
- model.fields.forEach(field => {
45
- console.log(`Field: ${field.name} (${field.type})`);
46
- console.log(` Label: ${field.label}`);
47
- console.log(` Required: ${field.isRequired}`);
48
- console.log(` Default: ${field.defaultValue}`);
49
- });
50
-
51
- // Check if model is in use
52
- if (model.isInUse) {
53
- console.log('Model is currently being used by content items');
54
- } else {
55
- console.log('Model is not currently in use');
56
- }
57
- ```
58
-
59
- **Error Handling:**
60
- - Throws `Exception` when model not found
61
-
62
- ### getModelByReferenceName
63
-
64
- Retrieves a content model by its reference name. Returns null if the model doesn't exist.
65
-
66
- | Parameter | Type | Required | Description |
67
- |-----------|------|----------|-------------|
68
- | `referenceName` | `string` | Yes | The reference name of the model |
69
- | `guid` | `string` | Yes | Current website GUID |
70
-
71
- **Returns:** `Model | null` - Model object or null if not found
72
-
73
- **Usage Example:**
74
- ```typescript
75
- const model = await apiClient.modelMethods.getModelByReferenceName('blog-post', guid);
76
- if (model) {
77
- console.log('Model found:', model.displayName);
78
- console.log('Model ID:', model.id);
79
-
80
- // Get specific field by name
81
- const titleField = model.fields.find(f => f.name === 'title');
82
- if (titleField) {
83
- console.log('Title field type:', titleField.type);
84
- console.log('Title field required:', titleField.isRequired);
85
- }
86
- } else {
87
- console.log('Model not found');
88
- }
89
-
90
- // Use in validation
91
- const validateModelExists = async (referenceName) => {
92
- const model = await apiClient.modelMethods.getModelByReferenceName(referenceName, guid);
93
- return model !== null;
94
- };
95
-
96
- if (await validateModelExists('blog-post')) {
97
- console.log('Blog post model is available');
98
- }
99
- ```
100
-
101
- **Error Handling:**
102
- - Returns `null` for 404 errors (model not found)
103
- - Throws `Exception` for other errors
104
-
105
- ### getContentModules
106
-
107
- Retrieves a list of all content modules in the current website.
108
-
109
- | Parameter | Type | Required | Description |
110
- |-----------|------|----------|-------------|
111
- | `includeDefaults` | `boolean` | Yes | Whether to include default modules |
112
- | `guid` | `string` | Yes | Current website GUID |
113
- | `includeModules` | `boolean` | No | Whether to include module details (default: false) |
114
-
115
- **Returns:** `Model[]` - Array of all content modules
116
-
117
- **Usage Example:**
118
- ```typescript
119
- const models = await apiClient.modelMethods.getContentModules(true, guid);
120
- console.log(`Total models: ${models.length}`);
121
-
122
- // Display model summary
123
- models.forEach(model => {
124
- console.log(`Model: ${model.displayName} (${model.referenceName})`);
125
- console.log(` Fields: ${model.fields.length}`);
126
- console.log(` In Use: ${model.isInUse ? 'Yes' : 'No'}`);
127
- console.log(` Created: ${model.createdDate}`);
128
- });
129
-
130
- // Filter models by usage
131
- const modelsInUse = models.filter(m => m.isInUse);
132
- const unusedModels = models.filter(m => !m.isInUse);
133
- console.log(`Models in use: ${modelsInUse.length}`);
134
- console.log(`Unused models: ${unusedModels.length}`);
135
-
136
- // Group by field count
137
- const modelsByFieldCount = models.reduce((acc, model) => {
138
- const fieldCount = model.fields.length;
139
- if (!acc[fieldCount]) acc[fieldCount] = [];
140
- acc[fieldCount].push(model);
141
- return acc;
142
- }, {});
143
-
144
- // Find models with specific fields
145
- const modelsWithImageFields = models.filter(model =>
146
- model.fields.some(field => field.type === 'image')
147
- );
148
- console.log(`Models with image fields: ${modelsWithImageFields.length}`);
149
-
150
- // Create model dropdown options
151
- const modelOptions = models.map(model => ({
152
- value: model.id,
153
- label: model.displayName,
154
- referenceName: model.referenceName
155
- }));
156
- ```
157
-
158
- **Error Handling:**
159
- - Throws `Exception` when retrieval fails
160
-
161
- ### getPageModules
162
-
163
- Retrieves detailed field definitions for page modules.
164
-
165
- | Parameter | Type | Required | Description |
166
- |-----------|------|----------|-------------|
167
- | `includeDefault` | `boolean` | Yes | Whether to include default modules |
168
- | `guid` | `string` | Yes | Current website GUID |
169
-
170
- **Returns:** `Model[]` - Array of page module definitions
171
-
172
- **Usage Example:**
173
- ```typescript
174
- const pageModules = await apiClient.modelMethods.getPageModules(true, guid);
175
- console.log(`Model has ${fields.length} fields`);
176
-
177
- // Display detailed field information
178
- fields.forEach(field => {
179
- console.log(`Field: ${field.name}`);
180
- console.log(` Type: ${field.type}`);
181
- console.log(` Label: ${field.label}`);
182
- console.log(` Required: ${field.isRequired}`);
183
- console.log(` Hidden: ${field.isHidden}`);
184
- console.log(` Default: ${field.defaultValue}`);
185
- console.log(` Help Text: ${field.helpText}`);
186
- console.log(` Validation: ${field.validation}`);
187
- console.log('---');
188
- });
189
-
190
- // Group fields by type
191
- const fieldsByType = fields.reduce((acc, field) => {
192
- if (!acc[field.type]) acc[field.type] = [];
193
- acc[field.type].push(field);
194
- return acc;
195
- }, {});
196
-
197
- console.log('Fields by type:');
198
- Object.entries(fieldsByType).forEach(([type, typeFields]) => {
199
- console.log(` ${type}: ${typeFields.length} fields`);
200
- });
201
-
202
- // Find required fields
203
- const requiredFields = fields.filter(f => f.isRequired);
204
- console.log(`Required fields: ${requiredFields.map(f => f.name).join(', ')}`);
205
-
206
- // Create form validation rules
207
- const validationRules = fields.reduce((acc, field) => {
208
- acc[field.name] = {
209
- required: field.isRequired,
210
- type: field.type,
211
- defaultValue: field.defaultValue,
212
- validation: field.validation
213
- };
214
- return acc;
215
- }, {});
216
- ```
217
-
218
- **Field Types:**
219
- Common field types include:
220
- - `text`: Single line text input
221
- - `textarea`: Multi-line text input
222
- - `html`: Rich text/HTML editor
223
- - `number`: Numeric input
224
- - `boolean`: Checkbox/toggle
225
- - `date`: Date picker
226
- - `image`: Image upload
227
- - `file`: File upload
228
- - `url`: URL input
229
- - `contentReference`: Reference to other content items
230
-
231
- **Error Handling:**
232
- - Throws `Exception` when model not found
233
-
234
- ### saveModel
235
-
236
- Creates a new content model or updates an existing one.
237
-
238
- | Parameter | Type | Required | Description |
239
- |-----------|------|----------|-------------|
240
- | `model` | `Model` | Yes | Model object to save |
241
- | `guid` | `string` | Yes | Current website GUID |
242
-
243
- **Returns:** `Model` - Saved model object with updated metadata
244
-
245
- **Usage Example:**
246
- ```typescript
247
- // Create a new model
248
- const newModel = {
249
- referenceName: 'product-review',
250
- displayName: 'Product Review',
251
- description: 'Customer product reviews and ratings',
252
- fields: [
253
- {
254
- name: 'title',
255
- label: 'Review Title',
256
- type: 'text',
257
- isRequired: true,
258
- helpText: 'Enter a brief title for the review'
259
- },
260
- {
261
- name: 'content',
262
- label: 'Review Content',
263
- type: 'textarea',
264
- isRequired: true,
265
- helpText: 'Enter the detailed review content'
266
- },
267
- {
268
- name: 'rating',
269
- label: 'Rating',
270
- type: 'number',
271
- isRequired: true,
272
- validation: 'min:1,max:5',
273
- helpText: 'Rate from 1 to 5 stars'
274
- },
275
- {
276
- name: 'reviewerName',
277
- label: 'Reviewer Name',
278
- type: 'text',
279
- isRequired: false,
280
- helpText: 'Name of the person writing the review'
281
- },
282
- {
283
- name: 'verified',
284
- label: 'Verified Purchase',
285
- type: 'boolean',
286
- defaultValue: false,
287
- helpText: 'Check if this is a verified purchase'
288
- }
289
- ]
290
- };
291
-
292
- const savedModel = await apiClient.modelMethods.saveModel(newModel, guid);
293
- console.log('Model created with ID:', savedModel.id);
294
-
295
- // Update existing model
296
- const existingModel = await apiClient.modelMethods.getModel(123, guid);
297
- existingModel.displayName = 'Updated Display Name';
298
- existingModel.description = 'Updated description';
299
-
300
- // Add a new field
301
- existingModel.fields.push({
302
- name: 'newField',
303
- label: 'New Field',
304
- type: 'text',
305
- isRequired: false,
306
- helpText: 'This is a new field'
307
- });
308
-
309
- const updatedModel = await apiClient.modelMethods.saveModel(existingModel, guid);
310
- console.log('Model updated:', updatedModel.displayName);
311
- ```
312
-
313
- **Model Structure:**
314
- ```typescript
315
- interface Model {
316
- id?: number; // Auto-generated for new models
317
- referenceName: string; // Unique identifier (required)
318
- displayName: string; // Human-readable name (required)
319
- description?: string; // Optional description
320
- fields: ModelField[]; // Array of field definitions
321
- isInUse?: boolean; // Read-only property
322
- createdDate?: string; // Auto-generated
323
- modifiedDate?: string; // Auto-generated
324
- }
325
-
326
- interface ModelField {
327
- name: string; // Field name/identifier
328
- label: string; // Display label
329
- type: string; // Field type (text, number, etc.)
330
- isRequired: boolean; // Whether field is required
331
- isHidden?: boolean; // Whether field is hidden in UI
332
- defaultValue?: any; // Default value
333
- helpText?: string; // Help text for users
334
- validation?: string; // Validation rules
335
- options?: any[]; // Options for dropdown/select fields
336
- }
337
- ```
338
-
339
- **Error Handling:**
340
- - Throws `Exception` when validation fails (duplicate reference name, invalid field types, etc.)
341
- - Throws `Exception` when save operation fails
342
-
343
- ### deleteModel
344
-
345
- Deletes a content model by its ID.
346
-
347
- | Parameter | Type | Required | Description |
348
- |-----------|------|----------|-------------|
349
- | `modelID` | `number` | Yes | The model ID to delete |
350
- | `guid` | `string` | Yes | Current website GUID |
351
-
352
- **Returns:** `string` - Confirmation message of successful deletion
353
-
354
- **Usage Example:**
355
- ```typescript
356
- try {
357
- const result = await apiClient.modelMethods.deleteModel(123, guid);
358
- console.log(result); // "Model deleted successfully"
359
- } catch (error) {
360
- if (error.message.includes('in use')) {
361
- console.log('Cannot delete model: currently in use by content items or containers');
362
- // Handle by removing dependencies first
363
- } else {
364
- console.error('Failed to delete model:', error.message);
365
- }
366
- }
367
-
368
- // Safe model deletion with checks
369
- const safeDeleteModel = async (modelID) => {
370
- try {
371
- // Check if model is in use
372
- const model = await apiClient.modelMethods.getModel(modelID, guid);
373
- if (model.isInUse) {
374
- console.log(`Cannot delete model "${model.displayName}": currently in use`);
375
- return false;
376
- }
377
-
378
- // Perform deletion
379
- const result = await apiClient.modelMethods.deleteModel(modelID, guid);
380
- console.log('Model deleted successfully');
381
- return true;
382
- } catch (error) {
383
- console.error('Failed to delete model:', error.message);
384
- return false;
385
- }
386
- };
387
-
388
- // Bulk cleanup of unused models
389
- const cleanupUnusedModels = async () => {
390
- const models = await apiClient.modelMethods.getModelList(guid);
391
- const unusedModels = models.filter(m => !m.isInUse);
392
-
393
- console.log(`Found ${unusedModels.length} unused models`);
394
-
395
- for (const model of unusedModels) {
396
- if (confirm(`Delete unused model "${model.displayName}"?`)) {
397
- await safeDeleteModel(model.id);
398
- }
399
- }
400
- };
401
- ```
402
-
403
- **Deletion Restrictions:**
404
- - Cannot delete a model that is currently in use by content items
405
- - Cannot delete a model that is assigned to containers
406
- - Cannot delete a model that is referenced by other models
407
-
408
- **Best Practices:**
409
- - Always check if a model is in use before attempting deletion
410
- - Consider archiving or renaming models instead of deleting them
411
- - Remove all dependencies (content items, containers) before deleting a model
412
- - Backup model definitions before deletion for potential restoration
413
-
414
- **Error Handling:**
415
- - Throws `Exception` when model not found
416
- - Throws `Exception` when model is in use and cannot be deleted
417
- - Throws `Exception` when insufficient permissions to delete models
418
-
419
- ---
420
-
421
- ## Navigation
422
- - [← Back to Main Documentation](../README.md)
423
- - [Authentication & Setup](./auth.md)
424
- - [Multi-Instance Operations](./multi-instance-operations.md)
425
- - [AssetMethods](./asset-methods.md)
426
- - [BatchMethods](./batch-methods.md)
427
- - [ContainerMethods](./container-methods.md)
428
- - [ContentMethods](./content-methods.md)
429
- - [InstanceMethods](./instance-methods.md)
430
- - [InstanceUserMethods](./instance-user-methods.md)
431
- - **ModelMethods** *(current)*
432
- - [PageMethods](./page-methods.md)
433
- - [ServerUserMethods](./server-user-methods.md)
1
+ # Agility CMS & Management API TypeScript SDK
2
+
3
+ ## ModelMethods
4
+
5
+ This class provides comprehensive content model management operations for Agility CMS. Content models define the structure and fields for content items, acting as templates that determine what data can be stored and how it's organized.
6
+
7
+ **Important Notes:**
8
+ - Content models define the schema for content items
9
+ - Models contain field definitions that specify data types, validation rules, and UI controls
10
+ - Changes to models may affect existing content items using those models
11
+ - Models are used by containers to organize and validate content
12
+ - Model reference names must be unique within the instance
13
+
14
+ ### Function List
15
+ - [getContentModel](#getcontentmodel) - Retrieves a specific content model by ID
16
+ - [getModelByReferenceName](#getmodelbyreferencename) - Retrieves a model by reference name
17
+ - [getContentModules](#getcontentmodules) - Retrieves list of all content modules
18
+ - [getPageModules](#getpagemodules) - Retrieves list of all page modules
19
+ - [saveModel](#savemodel) - Creates or updates a content model
20
+ - [deleteModel](#deletemodel) - Deletes a content model by ID
21
+
22
+ ---
23
+
24
+ ### getContentModel
25
+
26
+ Retrieves a specific content model by its unique ID.
27
+
28
+ | Parameter | Type | Required | Description |
29
+ |-----------|------|----------|-------------|
30
+ | `id` | `number` | Yes | The model ID to retrieve |
31
+ | `guid` | `string` | Yes | Current website GUID |
32
+
33
+ **Returns:** `Model` - Complete model object with field definitions
34
+
35
+ **Usage Example:**
36
+ ```typescript
37
+ const model = await apiClient.modelMethods.getContentModel(123, guid);
38
+ console.log('Model name:', model.displayName);
39
+ console.log('Reference name:', model.referenceName);
40
+ console.log('Description:', model.description);
41
+ console.log('Field count:', model.fields.length);
42
+
43
+ // Display field information
44
+ model.fields.forEach(field => {
45
+ console.log(`Field: ${field.name} (${field.type})`);
46
+ console.log(` Label: ${field.label}`);
47
+ console.log(` Required: ${field.isRequired}`);
48
+ console.log(` Default: ${field.defaultValue}`);
49
+ });
50
+
51
+ // Check if model is in use
52
+ if (model.isInUse) {
53
+ console.log('Model is currently being used by content items');
54
+ } else {
55
+ console.log('Model is not currently in use');
56
+ }
57
+ ```
58
+
59
+ **Error Handling:**
60
+ - Throws `Exception` when model not found
61
+
62
+ ### getModelByReferenceName
63
+
64
+ Retrieves a content model by its reference name. Returns null if the model doesn't exist.
65
+
66
+ | Parameter | Type | Required | Description |
67
+ |-----------|------|----------|-------------|
68
+ | `referenceName` | `string` | Yes | The reference name of the model |
69
+ | `guid` | `string` | Yes | Current website GUID |
70
+
71
+ **Returns:** `Model | null` - Model object or null if not found
72
+
73
+ **Usage Example:**
74
+ ```typescript
75
+ const model = await apiClient.modelMethods.getModelByReferenceName('blog-post', guid);
76
+ if (model) {
77
+ console.log('Model found:', model.displayName);
78
+ console.log('Model ID:', model.id);
79
+
80
+ // Get specific field by name
81
+ const titleField = model.fields.find(f => f.name === 'title');
82
+ if (titleField) {
83
+ console.log('Title field type:', titleField.type);
84
+ console.log('Title field required:', titleField.isRequired);
85
+ }
86
+ } else {
87
+ console.log('Model not found');
88
+ }
89
+
90
+ // Use in validation
91
+ const validateModelExists = async (referenceName) => {
92
+ const model = await apiClient.modelMethods.getModelByReferenceName(referenceName, guid);
93
+ return model !== null;
94
+ };
95
+
96
+ if (await validateModelExists('blog-post')) {
97
+ console.log('Blog post model is available');
98
+ }
99
+ ```
100
+
101
+ **Error Handling:**
102
+ - Returns `null` for 404 errors (model not found)
103
+ - Throws `Exception` for other errors
104
+
105
+ ### getContentModules
106
+
107
+ Retrieves a list of all content modules in the current website.
108
+
109
+ | Parameter | Type | Required | Description |
110
+ |-----------|------|----------|-------------|
111
+ | `includeDefaults` | `boolean` | Yes | Whether to include default modules |
112
+ | `guid` | `string` | Yes | Current website GUID |
113
+ | `includeModules` | `boolean` | No | Whether to include module details (default: false) |
114
+
115
+ **Returns:** `Model[]` - Array of all content modules
116
+
117
+ **Usage Example:**
118
+ ```typescript
119
+ const models = await apiClient.modelMethods.getContentModules(true, guid);
120
+ console.log(`Total models: ${models.length}`);
121
+
122
+ // Display model summary
123
+ models.forEach(model => {
124
+ console.log(`Model: ${model.displayName} (${model.referenceName})`);
125
+ console.log(` Fields: ${model.fields.length}`);
126
+ console.log(` In Use: ${model.isInUse ? 'Yes' : 'No'}`);
127
+ console.log(` Created: ${model.createdDate}`);
128
+ });
129
+
130
+ // Filter models by usage
131
+ const modelsInUse = models.filter(m => m.isInUse);
132
+ const unusedModels = models.filter(m => !m.isInUse);
133
+ console.log(`Models in use: ${modelsInUse.length}`);
134
+ console.log(`Unused models: ${unusedModels.length}`);
135
+
136
+ // Group by field count
137
+ const modelsByFieldCount = models.reduce((acc, model) => {
138
+ const fieldCount = model.fields.length;
139
+ if (!acc[fieldCount]) acc[fieldCount] = [];
140
+ acc[fieldCount].push(model);
141
+ return acc;
142
+ }, {});
143
+
144
+ // Find models with specific fields
145
+ const modelsWithImageFields = models.filter(model =>
146
+ model.fields.some(field => field.type === 'image')
147
+ );
148
+ console.log(`Models with image fields: ${modelsWithImageFields.length}`);
149
+
150
+ // Create model dropdown options
151
+ const modelOptions = models.map(model => ({
152
+ value: model.id,
153
+ label: model.displayName,
154
+ referenceName: model.referenceName
155
+ }));
156
+ ```
157
+
158
+ **Error Handling:**
159
+ - Throws `Exception` when retrieval fails
160
+
161
+ ### getPageModules
162
+
163
+ Retrieves detailed field definitions for page modules.
164
+
165
+ | Parameter | Type | Required | Description |
166
+ |-----------|------|----------|-------------|
167
+ | `includeDefault` | `boolean` | Yes | Whether to include default modules |
168
+ | `guid` | `string` | Yes | Current website GUID |
169
+
170
+ **Returns:** `Model[]` - Array of page module definitions
171
+
172
+ **Usage Example:**
173
+ ```typescript
174
+ const pageModules = await apiClient.modelMethods.getPageModules(true, guid);
175
+ console.log(`Model has ${fields.length} fields`);
176
+
177
+ // Display detailed field information
178
+ fields.forEach(field => {
179
+ console.log(`Field: ${field.name}`);
180
+ console.log(` Type: ${field.type}`);
181
+ console.log(` Label: ${field.label}`);
182
+ console.log(` Required: ${field.isRequired}`);
183
+ console.log(` Hidden: ${field.isHidden}`);
184
+ console.log(` Default: ${field.defaultValue}`);
185
+ console.log(` Help Text: ${field.helpText}`);
186
+ console.log(` Validation: ${field.validation}`);
187
+ console.log('---');
188
+ });
189
+
190
+ // Group fields by type
191
+ const fieldsByType = fields.reduce((acc, field) => {
192
+ if (!acc[field.type]) acc[field.type] = [];
193
+ acc[field.type].push(field);
194
+ return acc;
195
+ }, {});
196
+
197
+ console.log('Fields by type:');
198
+ Object.entries(fieldsByType).forEach(([type, typeFields]) => {
199
+ console.log(` ${type}: ${typeFields.length} fields`);
200
+ });
201
+
202
+ // Find required fields
203
+ const requiredFields = fields.filter(f => f.isRequired);
204
+ console.log(`Required fields: ${requiredFields.map(f => f.name).join(', ')}`);
205
+
206
+ // Create form validation rules
207
+ const validationRules = fields.reduce((acc, field) => {
208
+ acc[field.name] = {
209
+ required: field.isRequired,
210
+ type: field.type,
211
+ defaultValue: field.defaultValue,
212
+ validation: field.validation
213
+ };
214
+ return acc;
215
+ }, {});
216
+ ```
217
+
218
+ **Field Types:**
219
+ Common field types include:
220
+ - `text`: Single line text input
221
+ - `textarea`: Multi-line text input
222
+ - `html`: Rich text/HTML editor
223
+ - `number`: Numeric input
224
+ - `boolean`: Checkbox/toggle
225
+ - `date`: Date picker
226
+ - `image`: Image upload
227
+ - `file`: File upload
228
+ - `url`: URL input
229
+ - `contentReference`: Reference to other content items
230
+
231
+ **Error Handling:**
232
+ - Throws `Exception` when model not found
233
+
234
+ ### saveModel
235
+
236
+ Creates a new content model or updates an existing one.
237
+
238
+ | Parameter | Type | Required | Description |
239
+ |-----------|------|----------|-------------|
240
+ | `model` | `Model` | Yes | Model object to save |
241
+ | `guid` | `string` | Yes | Current website GUID |
242
+
243
+ **Returns:** `Model` - Saved model object with updated metadata
244
+
245
+ **Usage Example:**
246
+ ```typescript
247
+ // Create a new model
248
+ const newModel = {
249
+ referenceName: 'product-review',
250
+ displayName: 'Product Review',
251
+ description: 'Customer product reviews and ratings',
252
+ fields: [
253
+ {
254
+ name: 'title',
255
+ label: 'Review Title',
256
+ type: 'text',
257
+ isRequired: true,
258
+ helpText: 'Enter a brief title for the review'
259
+ },
260
+ {
261
+ name: 'content',
262
+ label: 'Review Content',
263
+ type: 'textarea',
264
+ isRequired: true,
265
+ helpText: 'Enter the detailed review content'
266
+ },
267
+ {
268
+ name: 'rating',
269
+ label: 'Rating',
270
+ type: 'number',
271
+ isRequired: true,
272
+ validation: 'min:1,max:5',
273
+ helpText: 'Rate from 1 to 5 stars'
274
+ },
275
+ {
276
+ name: 'reviewerName',
277
+ label: 'Reviewer Name',
278
+ type: 'text',
279
+ isRequired: false,
280
+ helpText: 'Name of the person writing the review'
281
+ },
282
+ {
283
+ name: 'verified',
284
+ label: 'Verified Purchase',
285
+ type: 'boolean',
286
+ defaultValue: false,
287
+ helpText: 'Check if this is a verified purchase'
288
+ }
289
+ ]
290
+ };
291
+
292
+ const savedModel = await apiClient.modelMethods.saveModel(newModel, guid);
293
+ console.log('Model created with ID:', savedModel.id);
294
+
295
+ // Update existing model
296
+ const existingModel = await apiClient.modelMethods.getModel(123, guid);
297
+ existingModel.displayName = 'Updated Display Name';
298
+ existingModel.description = 'Updated description';
299
+
300
+ // Add a new field
301
+ existingModel.fields.push({
302
+ name: 'newField',
303
+ label: 'New Field',
304
+ type: 'text',
305
+ isRequired: false,
306
+ helpText: 'This is a new field'
307
+ });
308
+
309
+ const updatedModel = await apiClient.modelMethods.saveModel(existingModel, guid);
310
+ console.log('Model updated:', updatedModel.displayName);
311
+ ```
312
+
313
+ **Model Structure:**
314
+ ```typescript
315
+ interface Model {
316
+ id?: number; // Auto-generated for new models
317
+ referenceName: string; // Unique identifier (required)
318
+ displayName: string; // Human-readable name (required)
319
+ description?: string; // Optional description
320
+ fields: ModelField[]; // Array of field definitions
321
+ isInUse?: boolean; // Read-only property
322
+ createdDate?: string; // Auto-generated
323
+ modifiedDate?: string; // Auto-generated
324
+ }
325
+
326
+ interface ModelField {
327
+ name: string; // Field name/identifier
328
+ label: string; // Display label
329
+ type: string; // Field type (text, number, etc.)
330
+ isRequired: boolean; // Whether field is required
331
+ isHidden?: boolean; // Whether field is hidden in UI
332
+ defaultValue?: any; // Default value
333
+ helpText?: string; // Help text for users
334
+ validation?: string; // Validation rules
335
+ options?: any[]; // Options for dropdown/select fields
336
+ }
337
+ ```
338
+
339
+ **Error Handling:**
340
+ - Throws `Exception` when validation fails (duplicate reference name, invalid field types, etc.)
341
+ - Throws `Exception` when save operation fails
342
+
343
+ ### deleteModel
344
+
345
+ Deletes a content model by its ID.
346
+
347
+ | Parameter | Type | Required | Description |
348
+ |-----------|------|----------|-------------|
349
+ | `modelID` | `number` | Yes | The model ID to delete |
350
+ | `guid` | `string` | Yes | Current website GUID |
351
+
352
+ **Returns:** `string` - Confirmation message of successful deletion
353
+
354
+ **Usage Example:**
355
+ ```typescript
356
+ try {
357
+ const result = await apiClient.modelMethods.deleteModel(123, guid);
358
+ console.log(result); // "Model deleted successfully"
359
+ } catch (error) {
360
+ if (error.message.includes('in use')) {
361
+ console.log('Cannot delete model: currently in use by content items or containers');
362
+ // Handle by removing dependencies first
363
+ } else {
364
+ console.error('Failed to delete model:', error.message);
365
+ }
366
+ }
367
+
368
+ // Safe model deletion with checks
369
+ const safeDeleteModel = async (modelID) => {
370
+ try {
371
+ // Check if model is in use
372
+ const model = await apiClient.modelMethods.getModel(modelID, guid);
373
+ if (model.isInUse) {
374
+ console.log(`Cannot delete model "${model.displayName}": currently in use`);
375
+ return false;
376
+ }
377
+
378
+ // Perform deletion
379
+ const result = await apiClient.modelMethods.deleteModel(modelID, guid);
380
+ console.log('Model deleted successfully');
381
+ return true;
382
+ } catch (error) {
383
+ console.error('Failed to delete model:', error.message);
384
+ return false;
385
+ }
386
+ };
387
+
388
+ // Bulk cleanup of unused models
389
+ const cleanupUnusedModels = async () => {
390
+ const models = await apiClient.modelMethods.getModelList(guid);
391
+ const unusedModels = models.filter(m => !m.isInUse);
392
+
393
+ console.log(`Found ${unusedModels.length} unused models`);
394
+
395
+ for (const model of unusedModels) {
396
+ if (confirm(`Delete unused model "${model.displayName}"?`)) {
397
+ await safeDeleteModel(model.id);
398
+ }
399
+ }
400
+ };
401
+ ```
402
+
403
+ **Deletion Restrictions:**
404
+ - Cannot delete a model that is currently in use by content items
405
+ - Cannot delete a model that is assigned to containers
406
+ - Cannot delete a model that is referenced by other models
407
+
408
+ **Best Practices:**
409
+ - Always check if a model is in use before attempting deletion
410
+ - Consider archiving or renaming models instead of deleting them
411
+ - Remove all dependencies (content items, containers) before deleting a model
412
+ - Backup model definitions before deletion for potential restoration
413
+
414
+ **Error Handling:**
415
+ - Throws `Exception` when model not found
416
+ - Throws `Exception` when model is in use and cannot be deleted
417
+ - Throws `Exception` when insufficient permissions to delete models
418
+
419
+ ---
420
+
421
+ ## Navigation
422
+ - [← Back to Main Documentation](../README.md)
423
+ - [Authentication & Setup](./auth.md)
424
+ - [Multi-Instance Operations](./multi-instance-operations.md)
425
+ - [AssetMethods](./asset-methods.md)
426
+ - [BatchMethods](./batch-methods.md)
427
+ - [ContainerMethods](./container-methods.md)
428
+ - [ContentMethods](./content-methods.md)
429
+ - [InstanceMethods](./instance-methods.md)
430
+ - [InstanceUserMethods](./instance-user-methods.md)
431
+ - **ModelMethods** *(current)*
432
+ - [PageMethods](./page-methods.md)
433
+ - [ServerUserMethods](./server-user-methods.md)
434
434
  - [WebhookMethods](./webhook-methods.md)