openapi: 3.0.1 info: title: HedgeDoc description: HedgeDoc is an open source collaborative note editor. Several tasks of HedgeDoc can be automated through this API. version: 1.9.0 contact: name: HedgeDoc on GitHub url: https://github.com/hedgedoc/hedgedoc license: name: AGPLv3 url: https://github.com/hedgedoc/hedgedoc/blob/master/LICENSE externalDocs: url: https://docs.hedgedoc.org/dev/api/ paths: /new: get: tags: - note summary: Creates a new note. description: A random id will be assigned and the content will equal to the template (blank by default). After note creation a redirect is issued to the created note. responses: default: description: Redirect to the new note post: tags: - note summary: Imports some markdown data into a new note. description: A random id will be assigned and the content will equal to the body of the received HTTP-request. requestBody: required: true description: The content of the note to be imported as markdown content: 'text/markdown': example: '# Some header' responses: default: description: Redirect to the imported note /new/{alias}: post: tags: - note summary: Imports some markdown data into a new note with a given alias. description: 'This endpoint equals to the above one except that the alias from the url will be assigned to the note if [FreeURL-mode](../configuration-env-vars.md#users-and-privileges) is enabled.' requestBody: required: true description: The content of the note to be imported as markdown content: 'text/markdown': example: '# Some heading' responses: default: description: Redirect to the imported note parameters: - name: alias in: path required: true description: The alias for the note-id under which the note will be saved content: 'text/plain': example: my-note /{note}/download: get: tags: - note summary: Returns the raw markdown content of a note. responses: 200: description: The raw markdown content of the note content: 'text/markdown': example: '# Some heading' 404: description: Note does not exist parameters: - name: note in: path required: true description: The note which should be downloaded content: 'text/plain': example: my-note /{note}/publish: get: tags: - note summary: Redirects to the published version of the note. responses: default: description: Redirect to the published version of the note 404: description: Note does not exist parameters: - name: note in: path required: true description: The note which should be published content: 'text/plain': example: my-note /{note}/slide: get: tags: - note summary: Redirects to the slide-presentation of the note. description: This is only useful on notes which are designed to be slides. responses: default: description: Redirect to the slide version of the note 404: description: Note does not exist parameters: - name: note in: path required: true description: The note which should be shown as slide content: 'text/plain': example: my-note /{note}/info: get: tags: - note summary: Returns metadata about the note. description: This includes the title and description of the note as well as the creation date and viewcount. responses: 200: description: Metadata about the note content: 'text/json': schema: type: object properties: title: type: string description: The title of the note default: Untitled description: type: string description: The description of the note or the first words from the note viewcount: type: integer minimum: 0 description: How often the published version of the note was viewed createtime: type: string description: The timestamp when the note was created in ISO 8601 format. updatetime: type: string description: The timestamp when the note was last updated in ISO 8601 format. 404: description: Note does not exist parameters: - name: note in: path required: true description: The note for which the info should be shown content: 'text/plain': example: my-note /{note}/revision: get: tags: - note summary: Returns a list of the available note revisions. description: The list is returned as a JSON object with an array of revision-id and length associations. The revision-id equals to the timestamp when the revision was saved. responses: 200: description: Revisions of the note content: 'text/json': schema: type: object properties: revision: type: array description: Array that holds all revision-info objects items: type: object properties: time: type: integer description: UNIX-timestamp of when the revision was saved. Is also the revision-id. length: type: integer description: Length of the document to the timepoint the revision was saved 404: description: Note does not exist parameters: - name: note in: path required: true description: The note for which revisions should be shown content: 'text/plain': example: my-note /{note}/revision/{revision-id}: get: tags: - note summary: Returns the revision of the note with some metadata. description: The revision is returned as a JSON object with the content of the note and the authorship. responses: 200: description: Revision of the note for the given timestamp content: 'text/json': schema: type: object properties: content: type: string description: The raw markdown content of the note revision authorship: type: array description: Data which gives insights about who worked on the note items: type: integer description: Unique user ids and additional data patch: type: array description: Data which gives insight about what changed in comparison to former revisions items: type: string 404: description: Note does not exist parameters: - name: note in: path required: true description: The note for which the revision should be shown content: 'text/plain': example: my-note - name: revision-id in: path required: true description: The id (timestamp) of the revision to fetch content: 'text/plain': example: 1570921051959 /{note}/gist: get: tags: - note summary: Creates a new GitHub Gist with the note's content. description: 'If [GitHub integration](https://github.com/hedgedoc/hedgedoc/blob/master/docs/configuration-env-vars.md#github-login) is configured, the user will be redirected to GitHub and a new Gist with the content of the note will be created.' responses: default: description: Redirect to the created gist (or the GitHub authentication before) 404: description: Note does not exist parameters: - name: note in: path required: true description: The note which should be pasted to GitHub gist content: 'text/plain': example: my-note /me: get: tags: - user summary: Returns the profile data of the current logged-in user. description: The data is returned as a JSON object containing the user-id, the user's name and a url to the profile picture. Requires an active session of the user. responses: 200: description: If the user is logged-in, the user data otherwise `{"status":"forbidden"}` content: 'text/json': schema: type: object properties: status: type: string description: ok if everything works as expected, forbidden is the user is not logged-in id: type: string description: Unique id of the user name: type: string description: The user's display name photo: type: string description: An url to the online stored user profile photo /me/export: get: tags: - user summary: Exports a zip-archive with all notes of the current user. responses: default: description: The zip-archive with all notes /history: get: tags: - user summary: Returns a list of the last viewed notes. description: The list is returned as a JSON object with an array containing for each entry it's id, title, tags, last visit time and pinned status. responses: 200: description: The list of recently viewed notes and pinned notes content: 'text/json': schema: type: object properties: history: type: array description: The array that contains history objects items: type: object properties: id: type: string description: The id or alias of the note text: type: string description: The title of the note time: type: integer description: The UNIX-timestamp when the note was last accessed by the user tags: type: array description: The tags that were added by the user to the note items: type: string pinned: type: boolean description: Whether the user has pinned this note post: tags: - user summary: Replace user's history with a new one. description: The body must be form-encoded and contain a field `history` with a JSON-encoded array like its returned from the server when exporting the history. requestBody: required: true content: 'application/x-www-form-urlencoded': example: 'history=[{"id":"example","text":"Untitled","time":1556275442010,"tags":[],"pinned":false}]' responses: 200: description: History replaced delete: tags: - user summary: Deletes the user's history. responses: 200: description: User's history deleted /history/{note}: post: tags: - user summary: Toggles the pinned status in the history for a note. description: The body must be form-encoded and contain a field `pinned` that is either `true` or `false`. requestBody: required: true content: 'application/x-www-form-urlencoded': example: 'pinned=false' responses: 200: description: Pinned state toggled parameters: - name: note in: path required: true description: The note for which the pinned state should be toggled content: 'text/plain': example: my-note delete: tags: - user summary: Deletes a note from the user's history. responses: 200: description: Pinned state toggled parameters: - name: note in: path required: true description: The note for which the pinned state should be toggled content: 'text/plain': example: my-note /status: get: tags: - server summary: Returns the current status of the HedgeDoc instance. description: The data is returned as a JSON object containing the number of notes stored on the server, (distinct) online users and more. responses: 200: description: The server info content: 'text/json': schema: type: object properties: onlineNotes: type: integer description: How many notes are edited at the moment onlineUsers: type: integer description: How many users are online at the moment distinctOnlineUsers: type: integer description: How many distinct users (different machines) are online at the moment notesCount: type: integer description: How many notes are stored on the server registeredUsers: type: integer description: How many users are registered on the server onlineRegisteredUsers: type: integer description: How many of the online users are registered on the server distinctOnlineRegisteredUsers: type: integer description: How many of the distinct online users are registered on the server isConnectionBusy: type: boolean connectionSocketQueueLength: type: integer isDisconnectBusy: type: boolean disconnectSocketQueueLength: type: integer tags: - name: note description: These endpoints create notes, return information about them or export them. - name: user description: These endpoints return information about the current logged-in user and it's note history. If no user is logged-in, the most of this requests will fail with either a HTTP 403 or a JSON object containing `{"status":"forbidden"}`. - name: server description: These endpoints return information about the running HedgeDoc instance.