actualNoteContentPart: ## app.publishNote
  Arguments
  	[noteHandle](/help/developing_amplenote_plugins/appendix_i#noteHandle)  describing the note to publish. Must be a remotely-persisted note.
  Returns
  	The String URL of the published note, or null if the note could not be published. Note publishing requires an Unlimited or Founder subscription, and an active connection to the internet.
  Notes
  	If the note is already published by the current user, an existing URL will be returned instead of creating a new URL
  ```
  {  async noteOption(app, noteUUID) {    const url = await app.publishNote({ uuid: noteUUID });    await app.alert("Public URL: " + url);  }}
  ```
  
  ## app.recordMoodRating
  Records a mood rating.
  Arguments
  	integer rating in the range of -2 to +2 (inclusive)
  Returns
  	The String UUID of the recorded mood rating
  Throws
  	If the given rating is not valid (i.e. out of range)
  ```
  {  async appOption(app) {    const ratingUUID = await app.recordMoodRating(2);    await app.alert("Rating: " + ratingUUID);  }} 
  ```
  
  ## app.removeNoteTag
  Removes a tag from a note.
  Arguments
  	[noteHandle](/help/developing_amplenote_plugins/appendix_i#noteHandle)  identifying the note to add the tag to
  	String text of the tag to remove
  Returns
  	boolean indicating whether the tag was removed. In some cases, shared tags cannot be removed from notes - and this will return false. Note that this will return true even if the note did not have the tag - only a failure to remove a tag will result in false.
  Throws
  	If the given tag argument is not a string
  ```
  {  async noteOption(app, noteUUID) {    const removed = await app.removeNoteTag({ uuid: noteUUID }, "some-tag");    app.alert(added ? "Tag removed" : "Failed to remove tag");  }} 
  ```
  
  ## app.replaceNoteContent
  Replace the entire content of a note with new content, or replace the content of a single section of the note (see [app.getNoteSections](/help/developing_amplenote_plugins#app.getNoteSections) for discussion of sections).
  Arguments
  	[noteHandle](/help/developing_amplenote_plugins/appendix_i#noteHandle)  describing the note to replace content in
  	[Markdown content](/help/developing_amplenote_plugins/appendix_iii)  String of new content
  	(optional) object of additional options, supporting the following properties
  		[section](/help/developing_amplenote_plugins/appendix_i#section)  object describing the section of the note to replace content in. For sections that start with a heading, the heading will not be replaced, only the content of the section.
  		includeCompletedTasks boolean indicating whether completed tasks should be replaced in addition to the main note content
  		includeHiddenTasks boolean indicating whether hidden tasks should be replaced in addition to the main note content
  Returns
  	bool indicating whether the replacement was performed. Note that the only failure state for a replacement is when a section is specified and that section is not found in the note.
  Throws
  	If markdown content is over 100k characters
  	If the target note is readonly
  ```
  {  async noteOption(app, noteUUID) {    const newContent = "**new content**";    await app.replaceNoteContent({ uuid: noteUUID }, content);  }}
  ```
  
  With a section:
  ```
  {  async noteOption(app, noteUUID) {    const newContent = "**new content**";    const section = { heading: { text: "Heading of Section to Replace" }};    await app.replaceNoteContent({ uuid: noteUUID }, content, { section });  }}
  ```
processedNoteContent: ---
  title: App Interface: Plugin methods to interact with ...
  headers: ## app.publishNote
  ---
  app.publishNote
  Arguments
  [noteHandle](/help/developing_amplenote_plugins/appendix_i#noteHandle)
    describing the note to publish. Must be a remotely-persisted note.
  Returns
  The String URL of the published note, or null if the note could not be published. Note publishing requires an Unlimited or Founder subscription, and an active connection to the internet.
  Notes
  If the note is already published by the current user, an existing URL will be returned instead of creating a new URL {  async noteOption(app, noteUUID) {    const url = await app.publishNote({ uuid: noteUUID });    await app.alert("Public URL: " + url);  }}
  
  app.recordMoodRating
  Records a mood rating.
  Arguments
  integer rating in the range of -2 to +2 (inclusive)
  Returns
  The String UUID of the recorded mood rating
  Throws
  If the given rating is not valid (i.e. out of range) {  async appOption(app) {    const ratingUUID = await app.recordMoodRating(2);    await app.alert("Rating: " + ratingUUID);  }} 
  
  app.removeNoteTag
  Removes a tag from a note.
  Arguments
  [noteHandle](/help/developing_amplenote_plugins/appendix_i#noteHandle)
    identifying the note to add the tag to
  String text of the tag to remove
  Returns
  boolean indicating whether the tag was removed. In some cases, shared tags cannot be removed from notes - and this will return false. Note that this will return true even if the note did not have the tag - only a failure to remove a tag will result in false.
  Throws
  If the given tag argument is not a string {  async noteOption(app, noteUUID) {    const removed = await app.removeNoteTag({ uuid: noteUUID }, "some-tag");    app.alert(added ? "Tag removed" : "Failed to remove tag");  }} 
  
  app.replaceNoteContent
  Replace the entire content of a note with new content, or replace the content of a single section of the note (see [app.getNoteSections](/help/developing_amplenote_plugins#app.getNoteSections)
   for discussion of sections).
  Arguments
  [noteHandle](/help/developing_amplenote_plugins/appendix_i#noteHandle)
    describing the note to replace content in
  [Markdown content](/help/developing_amplenote_plugins/appendix_iii)
    String of new content
  (optional) object of additional options, supporting the following properties
  [section](/help/developing_amplenote_plugins/appendix_i#section)
    object describing the section of the note to replace content in. For sections that start with a heading, the heading will not be replaced, only the content of the section.
  includeCompletedTasks boolean indicating whether completed tasks should be replaced in addition to the main note content
  includeHiddenTasks boolean indicating whether hidden tasks should be replaced in addition to the main note content
  Returns
  bool indicating whether the replacement was performed. Note that the only failure state for a replacement is when a section is specified and that section is not found in the note.
  Throws
  If markdown content is over 100k characters
  If the target note is readonly {  async noteOption(app, noteUUID) {    const newContent = "**new content**";    await app.replaceNoteContent({ uuid: noteUUID }, content);  }}
  With a section: {  async noteOption(app, noteUUID) {    const newContent = "**new content**";    const section = { heading: { text: "Heading of Section to Replace" }};    await app.replaceNoteContent({ uuid: noteUUID }, content, { section });  }}
noteTitle: App Interface: Plugin methods to interact with user notes