API - Syllabus Changes

API - Syllabus Changes


FYI: All lines within code blocks are numbered, regardless of whether there is more than one line of code provided.

An API is available to retrieve statistics related to edits made to syllabi. This is helpful for integrating Concourse with other systems to support applications like progress reporting, project management, and general auditing of activity across syllabi.

This article covers documentation related to the initial version (v0) of the syllabus changes API.

Request

To retrieve syllabus JSON for a course syllabus, first see Retrieval under the API - General Usage article.

For the change_log operation, you can provide any course or external ID. You must be a system administrator to access any course JSON. For example:

  1. /api?version=0&operation= change_log &external_id=ACCT_101_SPR_2025
or
  1. /api?version=0&operation=change_log&course_id=3707
Requests can also be made programmatically by supplying your API key in the X-AUTH-KEY request header, providing your root domain, and appending either of the aforementioned paths.

Response

This API produces output in a JSON format. The nested structure of syllabus items lends itself nicely to this particular output. Below is a formatted excerpt of what you might find when retrieving the change log JSON for a course.

  1. {
  2. "id": 12,
  3. "external_id": "ACCT_101_FA_28329",
  4. "totals":
  5. {
  6. “action”:
  7. {
  8. "add": 14,
  9. "delete": 2,
  10. "edit": 14,
  11. "reorder up": 3,
  12. "reorder down": 0
  13. },
  14. “method”:
  15. {
  16. "clone": 5,
  17. "copy": 9,
  18. "cascade": 1,
  19. “editor”: 17,
  20. "feed": 1
  21. },
  22. "syllabus": {
  23. "action_count": 1,
  24. "child_item_classes": [
  25. {
  26. "pretty_name": "Meeting Time",
  27. "action_count": 1
  28. "child_item_classes": [
  29. {
  30. "pretty_name": "Meeting Time Entry",
  31. "action_count": 1
  32. "child_item_classes": []
  33. }
  34. ],
  35. },
  36. {
  37. "pretty_name": "Contact Information",
  38. "action_count": 1
  39. "child_item_classes": [
  40. {
  41. "pretty_name": "Contact Information Entry",
  42. "action_count": 1
  43. "child_item_classes": [
  44. {
  45. "pretty_name": "Office Hour",
  46. "action_count": 1
  47. "child_item_classes": []
  48. }
  49. ]
  50. }
  51. ],
  52. },
  53. {
  54. "pretty_name": "Course Description",
  55. "action_count": 1,
  56. "child_item_classes": []
  57. },
  58. {
  59. "pretty_name": "Rationale",
  60. "action_count": 1,
  61. "child_item_classes": []
  62. },
  63. {
  64. "pretty_name": "Measurable Learning Outcomes",
  65. "action_count": 1,
  66. "child_item_classes": []
  67. },
  68. {
  69. "pretty_name": "Course Resources",
  70. "action_count": 1,
  71. "child_item_classes": []
  72. },
  73. {
  74. "pretty_name": "Evaluation",
  75. "action_count": 1,
  76. "child_item_classes": [
  77. {
  78. "pretty_name": "Criteria",
  79. "action_count": 1
  80. "child_item_classes": []
  81. },
  82. {
  83. "pretty_name": "Breakdown",
  84. "action_count": 1
  85. "child_item_classes": []
  86. },
  87. ],
  88. },
  89. {
  90. "pretty_name": "Course Assignment",
  91. "action_count": 1,
  92. "child_item_classes": []
  93. },
  94. {
  95. "pretty_name": "Course Grading",
  96. "action_count": 1,
  97. "child_item_classes": []
  98. },
  99. {
  100. "pretty_name": "Policy",
  101. "action_count": 1,
  102. "child_item_classes": [
  103. {
  104. "pretty_name": "Policy Entry",
  105. "action_count": 1,
  106. "child_item_classes": []
  107. }
  108. ]
  109. },
  110. {
  111. "pretty_name": "Additional Item",
  112. "action_count": 1,
  113. "child_item_classes": [
  114. {
  115. "pretty_name": "Additional Item Entry",
  116. "action_count": 1,
  117. "child_item_classes": []
  118. }
  119. ],
  120. },
  121. {
  122. "pretty_name": "Schedule",
  123. "action_count": 1,
  124. "child_item_classes": [
  125. {
  126. "pretty_name": "Schedule Entry",
  127. "action_count": 1,
  128. "child_item_classes": []
  129. }
  130. ],
  131. }
  132. ],
  133. }
  134. },
  135. "log":
  136. [
  137. {
  138. "id": 10101020
  139. "pretty_name": "Syllabus",
  140. "namestamp": “Simon Simons”,
  141. “email”: "ssimons@concourse.com",
  142. "action": "Add",
  143. "method": "Feed",
  144. “feed_type”: “Course Feed”,
  145. "origin": {"id": 11290,
  146. "external_id": "gra_ed_tmp",
  147. “title”: “Graduate Education Template”,
  148. “file”: “course_feed.text”},
  149. "when": 1605797156
  150. },
  151. {
  152. "id": 5552315
  153. "pretty_name": "Objectives",
  154. "namestamp": "Alex Lexure",
  155. “email”: “ajlexure@concourse.com”,
  156. "action": "Add",
  157. "method": "Editor",
  158. “feed_type”: null,
  159. "origin": {"id": null,
  160. "external_id": null,
  161. “title”: null,
  162. “file”:null},
  163. "when": 1605797156
  164. },
  165. {
  166. "id": 5552312
  167. "pretty_name": "Description",
  168. "namestamp": “Automation",
  169. “email”: null,
  170. "action": "Add",
  171. "method": "Feed",
  172. “feed_type”: “Item Feed”
  173. "origin": {"id": null,
  174. "external_id": null,
  175. “title”: null,
  176. “file”: “item_feed.txt”},
  177. "when": 1527824453
  178. },
  179. {
  180. "id": 5552315
  181. "pretty_name": "Institutional Policy",
  182. "namestamp": “Simon Simons”
  183. “email”: "ssimons@concourse.com",
  184. "action": "Edit",
  185. "method": "Cascade",
  186. “feed_type”: null,
  187. "origin": {"id": 11290,
  188. "external_id": "gra_ed_tmp",
  189. “title”: “Graduate Education Template”,
  190. “file”: null},
  191. "when": 1527824453
  192. },
  193. ...
  194. ]
  195. }

Totals

Running totals of syllabus changes are provided and broken down by Action and by Method. Actions are what was done to the item and consist of Add, Edit, Reorder up, Reorder Down and Delete. For file-only syllabi, initial Upload will be recorded as Add, and Replacement will be recorded as Edit. Method describes how actions in the syllabus were completed. It is important to note that two-step processes, like running a Course Feed or clicking on an LTI link which then subsequently creates a course, will be listed as Feed or LTI respectively since these were the initiating methods. Please see the Change Log article for additional definitions. 

Syllabus

Changes to syllabus items are represented within a series of objects with name-value pairs that conform to the JavaScript Object Notation (JSON) standard. The pretty_name within the object is what is named in the system (e.g. Course Description), though not necessarily on the syllabus itself (e.g. Course Policy Entry).

All fields associated with the item will be represented, regardless of whether they have content entered, or if they have any actions logged against them. 


Log

This provides an account of all changes to a syllabus over its lifetime, including historical entries for items that no longer exist. The log is available for 180 days after the end date of the course. If you require a precise history of changes to syllabi beyond the life of the course, be sure to warehouse this information in another system shortly after course completion. Aggregate course totals are currently preserved indefinitely.

Dates and times adhere to the Unix format.


    • Related Articles

    • API - Syllabus Access

      FYI: All lines within code blocks are numbered, regardless of whether there is more than one line of code provided. An API is available to retrieve statistics related to views of syllabi. This is helpful for integrating Concourse with other systems ...
    • API - Syllabus Content

      FYI: All lines within code blocks are numbered, regardless of whether there is more than one line of code provided. An API is available to retrieve the content, permissions, and metadata related to syllabi. This is helpful for integrating Concourse ...
    • Syllabus Access

      Syllabus Access is a tool that provides insight into syllabus views. This tool is supported by an API and two new reports available in the Report Center. How to Use Syllabus Access Open a syllabus and click on the Users tab (it really is that ...
    • API - General Usage

      FYI: All lines within code blocks are numbered, regardless of whether there is more than one line of code provided. An API is available to retrieve certain data stored by Concourse. This article covers documentation related to the initial version ...
    • Copy Syllabus Content

      Overview Copy, formerly known as "Import", allows you to copy content from one Concourse syllabus into one or many other syllabi. While the "Import" allowed you to copy information into your syllabus from another syllabus, Copy now gives you three ...